mirror of https://github.com/interlegis/sapl.git
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.
187 lines
6.7 KiB
187 lines
6.7 KiB
from uuid import uuid4
|
|
|
|
from django.db import models
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from model_utils import Choices
|
|
|
|
from materia.models import Autor, TipoMateriaLegislativa, UnidadeTramitacao
|
|
from sapl.utils import YES_NO_CHOICES
|
|
|
|
|
|
class TipoDocumentoAdministrativo(models.Model):
|
|
sigla = models.CharField(max_length=5, verbose_name=_('Sigla'))
|
|
descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
|
|
|
|
class Meta:
|
|
verbose_name = _('Tipo de Documento Administrativo')
|
|
verbose_name_plural = _('Tipos de Documento Administrativo')
|
|
|
|
def __str__(self):
|
|
return self.descricao
|
|
|
|
|
|
def texto_upload_path(instance, filename):
|
|
return '/'.join([instance._meta.model_name, str(uuid4()), filename])
|
|
|
|
|
|
class DocumentoAdministrativo(models.Model):
|
|
tipo = models.ForeignKey(
|
|
TipoDocumentoAdministrativo, verbose_name=_('Tipo Documento'))
|
|
numero = models.PositiveIntegerField(verbose_name=_('Número'))
|
|
ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'))
|
|
data = models.DateField(verbose_name=_('Data'))
|
|
numero_protocolo = models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name=_('Núm. Protocolo'))
|
|
interessado = models.CharField(
|
|
max_length=50, blank=True, verbose_name=_('Interessado'))
|
|
autor = models.ForeignKey(Autor, blank=True, null=True)
|
|
dias_prazo = models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name=_('Dias Prazo'))
|
|
data_fim_prazo = models.DateField(
|
|
blank=True, null=True, verbose_name=_('Data Fim Prazo'))
|
|
tramitacao = models.BooleanField(
|
|
verbose_name=_('Em Tramitação?'),
|
|
choices=YES_NO_CHOICES)
|
|
assunto = models.TextField(verbose_name=_('Assunto'))
|
|
observacao = models.TextField(
|
|
blank=True, verbose_name=_('Observação'))
|
|
texto_integral = models.FileField(
|
|
blank=True,
|
|
null=True,
|
|
upload_to=texto_upload_path,
|
|
verbose_name=_('Texto Integral'))
|
|
|
|
class Meta:
|
|
verbose_name = _('Documento Administrativo')
|
|
verbose_name_plural = _('Documentos Administrativos')
|
|
|
|
def __str__(self):
|
|
return _('%(tipo)s - %(assunto)s') % {
|
|
'tipo': self.tipo, 'assunto': self.assunto
|
|
}
|
|
|
|
|
|
class DocumentoAcessorioAdministrativo(models.Model):
|
|
documento = models.ForeignKey(DocumentoAdministrativo)
|
|
tipo = models.ForeignKey(
|
|
TipoDocumentoAdministrativo, verbose_name=_('Tipo'))
|
|
nome = models.CharField(max_length=30, verbose_name=_('Nome'))
|
|
arquivo = models.FileField(
|
|
blank=True,
|
|
null=True,
|
|
upload_to=texto_upload_path,
|
|
verbose_name=_('Arquivo'))
|
|
data = models.DateField(blank=True, null=True, verbose_name=_('Data'))
|
|
autor = models.CharField(
|
|
max_length=50, blank=True, verbose_name=_('Autor'))
|
|
assunto = models.TextField(
|
|
blank=True, verbose_name=_('Assunto'))
|
|
indexacao = models.TextField(blank=True)
|
|
|
|
class Meta:
|
|
verbose_name = _('Documento Acessório')
|
|
verbose_name_plural = _('Documentos Acessórios')
|
|
|
|
def __str__(self):
|
|
return self.nome
|
|
|
|
|
|
class Protocolo(models.Model):
|
|
numero = models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name=_('Número do Protocolo'))
|
|
ano = models.PositiveSmallIntegerField()
|
|
data = models.DateField()
|
|
hora = models.TimeField()
|
|
timestamp = models.DateTimeField()
|
|
tipo_protocolo = models.PositiveIntegerField(
|
|
verbose_name=_('Tipo de Protocolo'))
|
|
tipo_processo = models.PositiveIntegerField()
|
|
interessado = models.CharField(
|
|
max_length=60, blank=True, verbose_name=_('Interessado'))
|
|
autor = models.ForeignKey(Autor, blank=True, null=True)
|
|
assunto_ementa = models.TextField(blank=True)
|
|
tipo_documento = models.ForeignKey(
|
|
TipoDocumentoAdministrativo,
|
|
blank=True,
|
|
null=True,
|
|
verbose_name=_('Tipo de documento'))
|
|
tipo_materia = models.ForeignKey(
|
|
TipoMateriaLegislativa,
|
|
blank=True,
|
|
null=True,
|
|
verbose_name=_('Tipo Matéria'))
|
|
numero_paginas = models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name=_('Número de Páginas'))
|
|
observacao = models.TextField(
|
|
blank=True, verbose_name=_('Observação'))
|
|
anulado = models.BooleanField()
|
|
user_anulacao = models.CharField(max_length=20, blank=True)
|
|
ip_anulacao = models.CharField(max_length=15, blank=True)
|
|
justificativa_anulacao = models.CharField(
|
|
max_length=60, blank=True)
|
|
timestamp_anulacao = models.DateTimeField(blank=True, null=True)
|
|
|
|
class Meta:
|
|
verbose_name = _('Protocolo')
|
|
verbose_name_plural = _('Protocolos')
|
|
|
|
|
|
class StatusTramitacaoAdministrativo(models.Model):
|
|
INDICADOR_CHOICES = Choices(
|
|
('F', 'fim', _('Fim')),
|
|
('R', 'retorno', _('Retorno')),
|
|
)
|
|
|
|
sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
|
|
descricao = models.CharField(max_length=60, verbose_name=_('Descrição'))
|
|
# TODO make specific migration considering both ind_fim_tramitacao,
|
|
# ind_retorno_tramitacao
|
|
indicador = models.CharField(
|
|
max_length=1, verbose_name=_('Indicador da Tramitação'),
|
|
choices=INDICADOR_CHOICES)
|
|
|
|
class Meta:
|
|
verbose_name = _('Status de Tramitação')
|
|
verbose_name_plural = _('Status de Tramitação')
|
|
|
|
def __str__(self):
|
|
return self.descricao
|
|
|
|
|
|
class TramitacaoAdministrativo(models.Model):
|
|
status = models.ForeignKey(
|
|
StatusTramitacaoAdministrativo,
|
|
blank=True,
|
|
null=True,
|
|
verbose_name=_('Status'))
|
|
documento = models.ForeignKey(DocumentoAdministrativo)
|
|
data_tramitacao = models.DateField(
|
|
blank=True, null=True, verbose_name=_('Data Tramitação'))
|
|
unidade_tramitacao_local = models.ForeignKey(
|
|
UnidadeTramitacao,
|
|
blank=True,
|
|
null=True,
|
|
related_name='+',
|
|
verbose_name=_('Unidade Local'))
|
|
data_encaminhamento = models.DateField(
|
|
blank=True, null=True, verbose_name=_('Data Encaminhamento'))
|
|
unidade_tramitacao_destino = models.ForeignKey(
|
|
UnidadeTramitacao,
|
|
blank=True,
|
|
null=True,
|
|
related_name='+',
|
|
verbose_name=_('Unidade Destino'))
|
|
ultima = models.BooleanField()
|
|
texto = models.TextField(
|
|
blank=True, verbose_name=_('Texto da Ação'))
|
|
data_fim_prazo = models.DateField(
|
|
blank=True, null=True, verbose_name=_('Data Fim do Prazo'))
|
|
|
|
class Meta:
|
|
verbose_name = _('Tramitação de Documento Administrativo')
|
|
verbose_name_plural = _('Tramitações de Documento Administrativo')
|
|
|
|
def __str__(self):
|
|
return _('%(documento)s - %(status)s') % {
|
|
'documento': self.documento, 'status': self.status
|
|
}
|
|
|