Browse Source

Adiciona número do ticket do OSTicket nas ocorrencias

whois_api
Sesostris Vieira 9 years ago
parent
commit
8196c54552
  1. 10
      sigi/apps/ocorrencias/admin.py
  2. 2
      sigi/apps/ocorrencias/forms.py
  3. 26
      sigi/apps/ocorrencias/migrations/0002_auto_20160308_0828.py
  4. 27
      sigi/apps/ocorrencias/models.py
  5. 5
      sigi/apps/ocorrencias/templates/ocorrencias/ocorrencia_snippet.html
  6. 1
      sigi/settings/base.py

10
sigi/apps/ocorrencias/admin.py

@ -65,9 +65,9 @@ class OcorrenciaChangeList(ChangeList):
class OcorrenciaAdmin(BaseModelAdmin): class OcorrenciaAdmin(BaseModelAdmin):
list_display = ('data_criacao', 'casa_legislativa', 'get_municipio', 'get_uf', 'assunto', 'prioridade', 'status', 'data_modificacao', 'setor_responsavel',) 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',) 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' 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', ) 'setor_responsavel', 'resolucao', )
readonly_fields = ('servidor_registro', 'setor_responsavel', ) readonly_fields = ('servidor_registro', 'setor_responsavel', )
inlines = (ComentarioViewInline, ComentarioInline, AnexosInline, ) inlines = (ComentarioViewInline, ComentarioInline, AnexosInline, )
@ -80,15 +80,15 @@ class OcorrenciaAdmin(BaseModelAdmin):
fields = list(self.readonly_fields) fields = list(self.readonly_fields)
if obj is not None: if obj is not None:
fields.extend(['casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'status', 'descricao', ]) 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') fields.append('prioridade')
return fields return fields
def get_fieldsets(self, request, obj=None): def get_fieldsets(self, request, obj=None):
if obj is 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: 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', ) 'servidor_registro', 'setor_responsavel', 'resolucao', )
return super(OcorrenciaAdmin, self).get_fieldsets(request, obj) return super(OcorrenciaAdmin, self).get_fieldsets(request, obj)

2
sigi/apps/ocorrencias/forms.py

@ -78,6 +78,6 @@ class ComentarioForm(ModelForm):
class OcorrenciaForm(ModelForm): class OcorrenciaForm(ModelForm):
class Meta: class Meta:
model = Ocorrencia model = Ocorrencia
fields = ['casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'prioridade', fields = ['casa_legislativa', 'categoria', 'tipo_contato', 'assunto', 'prioridade', 'ticket',
'descricao', 'setor_responsavel',] 'descricao', 'setor_responsavel',]
widgets = {'casa_legislativa': AjaxSelect(url=reverse_lazy('painel-buscacasa'), attrs={'size':100}), } widgets = {'casa_legislativa': AjaxSelect(url=reverse_lazy('painel-buscacasa'), attrs={'size':100}), }

26
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,
),
]

27
sigi/apps/ocorrencias/models.py

@ -1,6 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models from django.db import models
from django.conf import settings
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.core.exceptions import ValidationError
from django.utils.safestring import mark_safe
class Categoria(models.Model): class Categoria(models.Model):
@ -26,12 +29,18 @@ class TipoContato(models.Model):
class Ocorrencia(models.Model): class Ocorrencia(models.Model):
STATUS_ABERTO = 1
STATUS_REABERTO = 2
STATUS_RESOLVIDO = 3
STATUS_FECHADO = 4
STATUS_DUPLICADO = 5
STATUS_CHOICES = ( STATUS_CHOICES = (
(1, _(u'Aberto')), (STATUS_ABERTO , _(u'Aberto')),
(2, _(u'Reaberto')), (STATUS_REABERTO , _(u'Reaberto')),
(3, _(u'Resolvido')), (STATUS_RESOLVIDO, _(u'Resolvido')),
(4, _(u'Fechado')), (STATUS_FECHADO , _(u'Fechado')),
(5, _(u'Duplicado')), (STATUS_DUPLICADO, _(u'Duplicado')),
) )
PRIORITY_CHOICES = ( PRIORITY_CHOICES = (
@ -58,6 +67,7 @@ class Ocorrencia(models.Model):
resolucao = models.TextField(_(u'resolução'), blank=True,) resolucao = models.TextField(_(u'resolução'), blank=True,)
servidor_registro = models.ForeignKey('servidores.Servidor', verbose_name=_(u"Servidor que registrou a ocorrência")) 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")) 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: class Meta:
verbose_name, verbose_name_plural = _(u'ocorrência'), _(u'ocorrências') verbose_name, verbose_name_plural = _(u'ocorrência'), _(u'ocorrências')
@ -66,6 +76,13 @@ class Ocorrencia(models.Model):
def __unicode__(self): def __unicode__(self):
return u"%(casa_legislativa)s: %(assunto)s" % {'assunto': self.assunto, 'casa_legislativa': self.casa_legislativa} 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): class Comentario(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=_(u'Ocorrência'), related_name='comentarios') ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=_(u'Ocorrência'), related_name='comentarios')

5
sigi/apps/ocorrencias/templates/ocorrencias/ocorrencia_snippet.html

@ -14,7 +14,10 @@
<div class="media-body"> <div class="media-body">
<h4><a href="{{ url_painel }}?type=casa&id={{ ocorrencia.casa_legislativa_id|safe }}"> <h4><a href="{{ url_painel }}?type=casa&id={{ ocorrencia.casa_legislativa_id|safe }}">
{{ ocorrencia.casa_legislativa.nome }}, {{ ocorrencia.casa_legislativa.municipio.uf.sigla }}</a></h4> {{ ocorrencia.casa_legislativa.nome }}, {{ ocorrencia.casa_legislativa.municipio.uf.sigla }}</a></h4>
<p><a href="{{ ocorrencia.get_absolute_url }}">{% trans "Ticket #" %}{{ ocorrencia.id|safe }}</a>: <p>
{% if ocorrencia.ticket %}
<a href="{{ ocorrencia.get_ticket_url }}" target="_blank">{% trans "Ticket no suporte #" %}{{ ocorrencia.ticket|safe }}</a>:
{% 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 %} {% 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 }}, Criado em {{ data_criacao }} via {{ tipo_contato }} solicitando {{ categoria }},
está no setor <a href="{{ url_painel }}?type=servico&id={{ id_setor }}">{{ setor }}</a> está no setor <a href="{{ url_painel }}?type=servico&id={{ id_setor }}">{{ setor }}</a>

1
sigi/settings/base.py

@ -178,3 +178,4 @@ LOGGING = {
} }
SABERES_REST_PATH = 'webservice/rest/server.php' SABERES_REST_PATH = 'webservice/rest/server.php'
OSTICKET_URL = 'https://suporte.interlegis.leg.br/scp/tickets.php?a=search&query=%s'
Loading…
Cancel
Save