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.
 
 
 
 
 
 

185 lines
5.2 KiB

from django.db import models
from django.conf import settings
from django.utils.translation import gettext as _
from django.core.exceptions import ValidationError
from django.utils.safestring import mark_safe
class Categoria(models.Model):
nome = models.CharField(_("Categoria"), max_length=50)
descricao = models.TextField(_('descrição'), blank=True, null=True)
class Meta:
verbose_name = _('Categoria')
verbose_name_plural = _('Categorias')
ordering = ('nome',)
def __str__(self):
return self.nome
class TipoContato(models.Model):
descricao = models.CharField(_("Descrição"), max_length=50)
class Meta:
verbose_name = _("Tipo de contato")
verbose_name_plural = _("Tipos de contato")
def __str__(self):
return self.descricao
class Ocorrencia(models.Model):
STATUS_ABERTO = 1
STATUS_REABERTO = 2
STATUS_RESOLVIDO = 3
STATUS_FECHADO = 4
STATUS_DUPLICADO = 5
STATUS_CHOICES = (
(STATUS_ABERTO , _('Aberto')),
(STATUS_REABERTO , _('Reaberto')),
(STATUS_RESOLVIDO, _('Resolvido')),
(STATUS_FECHADO , _('Fechado')),
(STATUS_DUPLICADO, _('Duplicado')),
)
PRIORITY_CHOICES = (
(1, _('Altíssimo')),
(2, _('Alto')),
(3, _('Normal')),
(4, _('Baixo')),
(5, _('Baixíssimo')),
)
casa_legislativa = models.ForeignKey(
'casas.Orgao',
on_delete=models.CASCADE,
verbose_name=_('Casa Legislativa')
)
data_criacao = models.DateField(
_('Data de criação'),
null=True,
blank=True,
auto_now_add=True
)
data_modificacao = models.DateField(
_('Data de modificação'),
null=True,
blank=True,
auto_now=True
)
categoria = models.ForeignKey(
Categoria,
on_delete=models.PROTECT,
verbose_name=_('Categoria')
)
tipo_contato = models.ForeignKey(
TipoContato,
on_delete=models.PROTECT,
verbose_name=_("Tipo de contato")
)
assunto = models.CharField(_('Assunto'), max_length=200)
status = models.IntegerField(
_('Status'),
choices=STATUS_CHOICES,
default=1
)
prioridade = models.IntegerField(
_('Prioridade'),
choices=PRIORITY_CHOICES,
default=3
)
descricao = models.TextField(_('descrição'), blank=True,)
resolucao = models.TextField(_('resolução'), blank=True,)
servidor_registro = models.ForeignKey(
'servidores.Servidor',
on_delete=models.PROTECT,
verbose_name=_("Servidor que registrou a ocorrência")
)
ticket = models.PositiveIntegerField(
_('Número do ticket'),
blank=True,
null=True,
help_text=_("Número do ticket no osTicket")
)
class Meta:
verbose_name = _('ocorrência')
verbose_name_plural = _('ocorrências')
ordering = ['prioridade', 'data_modificacao', 'data_criacao', ]
def __str__(self):
return _(f"{self.casa_legislativa}: {self.assunto}")
def clean(self):
if (self.ticket is not None
and Ocorrencia.objects.exclude(pk=self.pk).filter(
ticket=self.ticket).exists()
):
raise ValidationError({'ticket': _("Já existe ocorrência "
"registrada para este ticket")})
return super(Ocorrencia, self).clean()
def get_ticket_url(self):
return mark_safe(settings.OSTICKET_URL % self.ticket)
class Comentario(models.Model):
ocorrencia = models.ForeignKey(
Ocorrencia,
on_delete=models.CASCADE,
verbose_name=_('Ocorrência'),
related_name='comentarios'
)
data_criacao = models.DateTimeField(
_('Data de criação'),
null=True,
blank=True,
auto_now_add=True
)
descricao = models.TextField(_('Descrição'), blank=True, null=True)
usuario = models.ForeignKey(
'servidores.Servidor',
on_delete=models.PROTECT,
verbose_name=_('Usuário')
)
novo_status = models.IntegerField(
_('Novo status'),
choices=Ocorrencia.STATUS_CHOICES,
blank=True,
null=True
)
def save(self, *args, **kwargs):
if self.novo_status and (self.novo_status != self.ocorrencia.status):
self.ocorrencia.status = self.novo_status
self.ocorrencia.save()
super(Comentario, self).save(*args, **kwargs)
class Anexo(models.Model):
ocorrencia = models.ForeignKey(
Ocorrencia,
on_delete=models.CASCADE,
verbose_name=_('ocorrência')
)
arquivo = models.FileField(
_('Arquivo anexado'),
upload_to='apps/ocorrencia/anexo/arquivo',
max_length=500
)
descricao = models.CharField(
_('descrição do anexo'),
max_length=70
)
data_pub = models.DateTimeField(
_('data da publicação do anexo'),
null=True,
blank=True,
auto_now_add=True
)
class Meta:
ordering = ('-data_pub',)
verbose_name = _('Anexo')
verbose_name_plural =_('Anexos')
def __str__(self):
return _(f"{self.arquivo.name}: {self.descricao}")