Sistema de Informações Gerenciais do Interlegis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

259 lines
8.5 KiB

#-*- coding: utf-8 -*-
import re
from datetime import datetime, date
from django.db import models
from django.utils.translation import ugettext as _
from sigi.apps.utils import SearchField
class Projeto(models.Model):
""" Modelo para representar os projetos do programa
Interlegis
"""
nome = models.CharField(max_length=50)
sigla = models.CharField(max_length=10)
def __unicode__(self):
return self.sigla
class Convenio(models.Model):
""" Modelo que representa um convênio do Interlegis
com uma Casa Legislativa.
Uma Casa Legislativa pode não ter um convênio e sim
apenas uma adesão com o Interlegis, isto é,
não tem compromissos direto com o Interlegis apenas
um pacto de colaboração entre as partes
"""
casa_legislativa = models.ForeignKey(
'casas.CasaLegislativa',
verbose_name=_(u'Casa Legislativa')
)
# campo de busca em caixa baixa e sem acentos
search_text = SearchField(field_names=['casa_legislativa'])
projeto = models.ForeignKey(_(u'Projeto'))
# numero designado pelo Senado Federal para o convênio
num_processo_sf = models.CharField(
_(u'número do processo SF (Senado Federal)'),
max_length=20,
blank=True,
help_text=_(u'Formatos:<br/>Antigo: <em>XXXXXX/XX-X</em>.<br/><em>SIGAD: XXXXX.XXXXXX/XXXX-XX</em>')
)
num_convenio = models.CharField(
_(u'número do convênio'),
max_length=10,
blank=True
)
data_adesao = models.DateField(
_(u'Aderidas'),
null=True,
blank=True,
)
data_retorno_assinatura = models.DateField(
_(u'Conveniadas'),
null=True,
blank=True,
help_text=_(u'Convênio firmado.')
)
duracao = models.PositiveIntegerField(
_(u"Duração (meses)"),
null=True,
blank=True,
help_text=_(u"Deixar em branco caso a duração seja indefinida")
)
data_pub_diario = models.DateField(
_(u'data da publicação no Diário Oficial'),
null=True,
blank=True
)
data_termo_aceite = models.DateField(
_(u'Equipadas'),
null=True,
blank=True,
help_text=_(u'Equipamentos recebidos.')
)
data_devolucao_via = models.DateField(
_(u'data de devolução da via'),
null=True,
blank=True,
help_text=_(u'Data de devolução da via do convênio à Câmara Municipal.')
)
data_postagem_correio = models.DateField(
_(u'data postagem correio'),
null=True,
blank=True,
)
data_devolucao_sem_assinatura = models.DateField(
_(u'data de devolução por falta de assinatura'),
null=True,
blank=True,
help_text=_(u'Data de devolução por falta de assinatura'),
)
data_retorno_sem_assinatura = models.DateField(
_(u'data do retorno sem assinatura'),
null=True,
blank=True,
help_text=_(u'Data do retorno do convênio sem assinatura'),
)
observacao = models.CharField(
null=True,
blank=True,
max_length=100,
)
conveniada = models.BooleanField(default=False)
equipada = models.BooleanField(default=False)
def get_termino_convenio(self):
if (self.data_retorno_assinatura is None or
self.duracao is None):
return None
ano = self.data_retorno_assinatura.year + int(self.duracao / 12)
mes = int(self.data_retorno_assinatura.month + int(self.duracao % 12))
if mes > 12:
ano = ano + 1
mes = mes - 12
dia = self.data_retorno_assinatura.day
while True:
try:
data_fim = date(year=ano, month=mes,day=dia)
break
except:
dia = dia - 1
return data_fim
def get_status(self):
if self.data_retorno_assinatura is not None:
if self.duracao is not None:
if date.today() >= self.get_termino_convenio():
return _(u"Vencido")
return _(u"Vigente")
if (self.data_retorno_assinatura is None and
self.data_devolucao_sem_assinatura is None and
self.data_retorno_sem_assinatura is None):
return _(u"Pendente")
if (self.data_devolucao_sem_assinatura is not None or
self.data_retorno_sem_assinatura is not None):
return _(u"Desistência")
return _(u"Indefinido")
def get_sigad_url(self):
m = re.match(
r'(?P<orgao>00100|00200)\.(?P<sequencial>\d{6})/(?P<ano>\d{4})-\d{2}',
self.num_processo_sf
)
if m:
return (r'<a href="https://intra.senado.leg.br/'
r'sigad/novo/protocolo/impressao.asp?area=processo'
r'&txt_numero_orgao={orgao}'
r'&txt_numero_sequencial={sequencial}'
r'&txt_numero_ano={ano}"'
r' target="_blank">{processo}</a>').format(processo=self.num_processo_sf,**m.groupdict())
return self.num_processo_sf
def save(self, *args, **kwargs):
self.conveniada = self.data_retorno_assinatura is not None
self.equipada = self.data_termo_aceite is not None
super(Convenio, self).save(*args, **kwargs)
class Meta:
get_latest_by = 'id'
ordering = ('id',)
verbose_name = _(u'convênio')
def __unicode__(self):
if self.data_retorno_assinatura is not None:
return _(u"Convênio {project}{number} assinado em {date}. Status: {status}".format(
number=self.num_convenio,
project=self.projeto.sigla,
date=self.data_retorno_assinatura,
status=self.get_status()))
else:
return _(u"Adesão ao projeto %(project)s, em %(date)s") % dict(
project=self.projeto.sigla,
date=self.data_adesao)
class EquipamentoPrevisto(models.Model):
""" Modelo utilizado para registrar os equipamentos
disponibilizados para as Casas Legislativas
(foi usado na prmeira etapa do programa)
"""
convenio = models.ForeignKey(Convenio, verbose_name=_(u'convênio'))
equipamento = models.ForeignKey('inventario.Equipamento')
quantidade = models.PositiveSmallIntegerField(default=1)
class Meta:
verbose_name = _(u'equipamento previsto')
verbose_name_plural = _(u'equipamentos previstos')
def __unicode__(self):
return u'%s %s(s)' % (self.quantidade, self.equipamento)
class Anexo(models.Model):
""" Modelo para giardar os documentos gerados
no processo de convênio
"""
convenio = models.ForeignKey(Convenio, verbose_name=_(u'convênio'))
# caminho no sistema para o documento anexo
arquivo = models.FileField(upload_to='apps/convenios/anexo/arquivo', max_length=500)
descricao = models.CharField(_(u'descrição'), max_length='70')
data_pub = models.DateTimeField(
_(u'data da publicação do anexo'),
default=datetime.now
)
class Meta:
ordering = ('-data_pub',)
def __unicode__(self):
return unicode("%s publicado em %s" % (self.descricao, self.data_pub))
class UnidadeAdministrativa(models.Model):
""" Modelo para representar uma Unidade Administrativa
que pode ser um servivo do próprio Interlegis, assim como
uma unidade do Senado Federal
"""
sigla = models.CharField(max_length='10')
nome = models.CharField(max_length='100')
def __unicode__(self):
return unicode(self.sigla)
class Tramitacao(models.Model):
""" Modelo para registrar as vias do processo de convênio e a Unidade
responsável pelo tramite (ex. colher assinaturas do secretário do senado)
"""
convenio = models.ForeignKey(Convenio, verbose_name=_(u'convênio'))
unid_admin = models.ForeignKey(UnidadeAdministrativa, verbose_name=_(u'Unidade Administrativa'))
data = models.DateField()
observacao = models.CharField(
_(u'observação'),
max_length='512',
null=True,
blank=True,
)
class Meta:
verbose_name_plural = _(u'Tramitações')
def __unicode__(self):
in_date = _(u"em %(date)s") % dict(date=self.data) # for focused translation
result = u"%s %s" % (self.unid_admin, in_date)
if self.observacao:
result = result + u" (%s)" % (self.observacao)
return unicode(result) # XXX is this unicode(...) really necessary???