diff --git a/sigi/apps/ocorrencias/admin.py b/sigi/apps/ocorrencias/admin.py index 31b923c..4cf1dd6 100644 --- a/sigi/apps/ocorrencias/admin.py +++ b/sigi/apps/ocorrencias/admin.py @@ -65,9 +65,9 @@ class OcorrenciaChangeList(ChangeList): class OcorrenciaAdmin(BaseModelAdmin): list_display = ('data_criacao', 'casa_legislativa', 'get_municipio', 'get_uf', 'assunto', 'prioridade', 'status', 'data_modificacao', 'setor_responsavel',) list_filter = (OcorrenciaListFilter, 'status', 'prioridade', 'categoria__nome', 'setor_responsavel__nome', 'casa_legislativa__gerente_contas',) - search_fields = ('casa_legislativa__search_text', 'assunto', 'servidor_registro__nome_completo', 'descricao', 'resolucao',) + search_fields = ('casa_legislativa__search_text', 'assunto', 'servidor_registro__nome_completo', 'descricao', 'resolucao', 'ticket',) date_hierarchy = 'data_criacao' - fields = ('casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'status', 'prioridade', 'descricao', 'servidor_registro', + fields = ('casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'status', 'prioridade', 'ticket', 'descricao', 'servidor_registro', 'setor_responsavel', 'resolucao', ) readonly_fields = ('servidor_registro', 'setor_responsavel', ) inlines = (ComentarioViewInline, ComentarioInline, AnexosInline, ) @@ -80,15 +80,15 @@ class OcorrenciaAdmin(BaseModelAdmin): fields = list(self.readonly_fields) if obj is not None: fields.extend(['casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'status', 'descricao', ]) - if obj.status in [3, 4, 5]: # Fechados + if obj.status in [Ocorrencia.STATUS_RESOLVIDO, Ocorrencia.STATUS_FECHADO, Ocorrencia.STATUS_DUPLICADO]: # Fechados fields.append('prioridade') return fields def get_fieldsets(self, request, obj=None): if obj is None: - self.fields = ('casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'prioridade', 'descricao', 'resolucao', ) + self.fields = ('casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'prioridade', 'ticket', 'descricao', 'resolucao', ) else: - self.fields = ('casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'status', 'prioridade', 'descricao', + self.fields = ('casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'status', 'prioridade', 'ticket', 'descricao', 'servidor_registro', 'setor_responsavel', 'resolucao', ) return super(OcorrenciaAdmin, self).get_fieldsets(request, obj) diff --git a/sigi/apps/ocorrencias/forms.py b/sigi/apps/ocorrencias/forms.py index c6f5f01..bc37fea 100644 --- a/sigi/apps/ocorrencias/forms.py +++ b/sigi/apps/ocorrencias/forms.py @@ -78,6 +78,6 @@ class ComentarioForm(ModelForm): class OcorrenciaForm(ModelForm): class Meta: model = Ocorrencia - fields = ['casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'prioridade', + fields = ['casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'prioridade', 'ticket', 'descricao', 'setor_responsavel',] widgets = {'casa_legislativa': AjaxSelect(url=reverse_lazy('painel-buscacasa'), attrs={'size':100}), } \ No newline at end of file diff --git a/sigi/apps/ocorrencias/migrations/0002_auto_20160308_0828.py b/sigi/apps/ocorrencias/migrations/0002_auto_20160308_0828.py new file mode 100644 index 0000000..f4aea1f --- /dev/null +++ b/sigi/apps/ocorrencias/migrations/0002_auto_20160308_0828.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ocorrencias', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='ocorrencia', + name='ticket', + field=models.PositiveIntegerField(help_text='N\xfamero do ticket no osTicket', null=True, verbose_name='N\xfamero do ticket', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='comentario', + name='ocorrencia', + field=models.ForeignKey(related_name='comentarios', verbose_name='Ocorr\xeancia', to='ocorrencias.Ocorrencia'), + preserve_default=True, + ), + ] diff --git a/sigi/apps/ocorrencias/models.py b/sigi/apps/ocorrencias/models.py index fa83c42..2bfe120 100644 --- a/sigi/apps/ocorrencias/models.py +++ b/sigi/apps/ocorrencias/models.py @@ -1,6 +1,9 @@ # -*- 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): @@ -26,12 +29,18 @@ class TipoContato(models.Model): class Ocorrencia(models.Model): + STATUS_ABERTO = 1 + STATUS_REABERTO = 2 + STATUS_RESOLVIDO = 3 + STATUS_FECHADO = 4 + STATUS_DUPLICADO = 5 + STATUS_CHOICES = ( - (1, _(u'Aberto')), - (2, _(u'Reaberto')), - (3, _(u'Resolvido')), - (4, _(u'Fechado')), - (5, _(u'Duplicado')), + (STATUS_ABERTO , _(u'Aberto')), + (STATUS_REABERTO , _(u'Reaberto')), + (STATUS_RESOLVIDO, _(u'Resolvido')), + (STATUS_FECHADO , _(u'Fechado')), + (STATUS_DUPLICADO, _(u'Duplicado')), ) PRIORITY_CHOICES = ( @@ -58,6 +67,7 @@ class Ocorrencia(models.Model): resolucao = models.TextField(_(u'resolução'), blank=True,) servidor_registro = models.ForeignKey('servidores.Servidor', verbose_name=_(u"Servidor que registrou a ocorrência")) setor_responsavel = models.ForeignKey('servidores.Servico', 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') @@ -66,6 +76,13 @@ class Ocorrencia(models.Model): 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, verbose_name=_(u'Ocorrência'), related_name='comentarios') diff --git a/sigi/apps/ocorrencias/templates/ocorrencias/ocorrencia_snippet.html b/sigi/apps/ocorrencias/templates/ocorrencias/ocorrencia_snippet.html index 7999b0f..ed5d0bf 100644 --- a/sigi/apps/ocorrencias/templates/ocorrencias/ocorrencia_snippet.html +++ b/sigi/apps/ocorrencias/templates/ocorrencias/ocorrencia_snippet.html @@ -14,7 +14,10 @@

{{ ocorrencia.casa_legislativa.nome }}, {{ ocorrencia.casa_legislativa.municipio.uf.sigla }}

-

{% trans "Ticket #" %}{{ ocorrencia.id|safe }}: +

+ {% if ocorrencia.ticket %} + {% trans "Ticket no suporte #" %}{{ ocorrencia.ticket|safe }}: + {% endif %} {% blocktrans with data_criacao=ocorrencia.data_criacao tipo_contato=ocorrencia.tipo_contato categoria=ocorrencia.categoria id_setor=ocorrencia.setor_responsavel_id|safe setor=ocorrencia.setor_responsavel.sigla status=ocorrencia.get_status_display %} Criado em {{ data_criacao }} via {{ tipo_contato }} solicitando {{ categoria }}, está no setor {{ setor }} diff --git a/sigi/settings/base.py b/sigi/settings/base.py index 3789b9c..0a20afe 100644 --- a/sigi/settings/base.py +++ b/sigi/settings/base.py @@ -177,4 +177,5 @@ LOGGING = { }, } -SABERES_REST_PATH = 'webservice/rest/server.php' \ No newline at end of file +SABERES_REST_PATH = 'webservice/rest/server.php' +OSTICKET_URL = 'https://suporte.interlegis.leg.br/scp/tickets.php?a=search&query=%s' \ No newline at end of file