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.
 
 
 
 
 
 

156 lines
5.7 KiB

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