Browse Source

Migração das apps: 'servicos' e 'ocorrencias'

stable/2.0
Breno Teixeira 11 years ago
parent
commit
3a46eccdb7
  1. 3
      .gitignore
  2. BIN
      apps/convenios/anexo/arquivo/Screenshot_from_2013-06-06_141306.png
  3. BIN
      apps/convenios/anexo/arquivo/Screenshot_from_2013-06-06_141306_1.png
  4. BIN
      sigi.db
  5. 7
      sigi/apps/convenios/urls.py
  6. 32502
      sigi/apps/diagnosticos/fixtures/initial_data.json
  7. 7
      sigi/apps/diagnosticos/forms.py
  8. 18
      sigi/apps/ocorrencias/admin.py
  9. 8
      sigi/apps/ocorrencias/models.py
  10. 10
      sigi/apps/parlamentares/urls.py
  11. 3
      sigi/apps/servicos/admin.py
  12. 122
      sigi/apps/servicos/models.py~
  13. 1
      sigi/apps/servidores/models.py
  14. 2
      sigi/settings.py
  15. 2
      sigi/urls.py

3
.gitignore

@ -34,3 +34,6 @@ nosetests.xml
.mr.developer.cfg
.project
.pydevproject
.gitignore
fotos
sigi.db

BIN
apps/convenios/anexo/arquivo/Screenshot_from_2013-06-06_141306.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

BIN
apps/convenios/anexo/arquivo/Screenshot_from_2013-06-06_141306_1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

BIN
sigi.db

Binary file not shown.

7
sigi/apps/convenios/urls.py

@ -0,0 +1,7 @@
# coding: utf-8
from django.conf.urls import patterns, url
urlpatterns = patterns('sigi.apps.convenios.views',
url(r'^reports/$', 'report', name='convenios-report'),
)

32502
sigi/apps/diagnosticos/fixtures/initial_data.json

File diff suppressed because it is too large

7
sigi/apps/diagnosticos/forms.py

@ -14,6 +14,7 @@ from sigi.apps.diagnosticos.widgets import EavCheckboxSelectMultiple, EavRadioSe
from eav.forms import BaseDynamicEntityForm
from eav.fields import RangeField
class DiagnosticoForm(BaseDynamicEntityForm):
"""Classe responsável por contruir o formulário,
vinculando ao modelo Diagnostico
@ -126,6 +127,7 @@ class DiagnosticoMobileForm(BaseDynamicEntityForm):
class CasaLegislativaMobileForm(forms.ModelForm):
data_instalacao = forms.DateField(label = u'Data de instalação da Casa Legislativa', required=False)
data_criacao = forms.DateField()
class Meta:
model = CasaLegislativa
@ -136,8 +138,7 @@ class CasaLegislativaMobileForm(forms.ModelForm):
self.fields['data_criacao'] = forms.DateField(
label = u'Data de criação do Município',
initial = self.instance.municipio.data_criacao,
required=False
)
required=False)
def save(self, commit=True):
super(CasaLegislativaMobileForm, self).save(commit=True)
@ -146,12 +147,14 @@ class CasaLegislativaMobileForm(forms.ModelForm):
self.instance.municipio.save()
return self.instance
class TelefoneMobileForm(forms.ModelForm):
pass
class Meta:
model = Telefone
fields = ('numero', 'tipo')
class FuncionariosMobileForm(forms.ModelForm):
TelefoneFormSet = generic_inlineformset_factory(Telefone, TelefoneMobileForm, extra=1, can_delete=False)

18
sigi/apps/ocorrencias/admin.py

@ -6,7 +6,8 @@ from django.contrib.admin.views.main import ChangeList
from eav.admin import BaseEntityAdmin, BaseSchemaAdmin
from sigi.apps.servidores.models import Servidor
from sigi.apps.ocorrencias.models import Ocorrencia, Comentario, Anexo, Categoria, TipoContato
class ComentarioViewInline(admin.TabularInline):
model = Comentario
extra = 0
@ -16,34 +17,37 @@ class ComentarioViewInline(admin.TabularInline):
fields = ('usuario', 'data_criacao', 'novo_status', 'encaminhar_setor', 'descricao', )
readonly_fields = ('novo_status', 'encaminhar_setor', 'descricao', 'data_criacao', 'usuario',)
class ComentarioInline(admin.StackedInline):
model = Comentario
extra = 1
verbose_name, verbose_name_plural = u"Comentário novo", u"Comentários novos"
fieldsets = ((None, {'fields': (('novo_status', 'encaminhar_setor',), 'descricao', )}),)
def queryset(self, request):
return self.model.objects.get_empty_query_set()
return self.model.objects.get_query_set()
class AnexosInline(admin.TabularInline):
model = Anexo
extra = 2
readonly_fields = ['data_pub',]
class OcorrenciaChangeList(ChangeList):
request = None
def __init__(self, request, model, list_display, list_display_links, list_filter, date_hierarchy, search_fields,
list_select_related, list_per_page, list_editable, model_admin):
list_select_related, list_per_page, list_max_show_all, list_editable, model_admin):
self.request = request
super(OcorrenciaChangeList, self).__init__(request, model, list_display, list_display_links, list_filter,
date_hierarchy, search_fields, list_select_related, list_per_page,
list_editable, model_admin)
def get_query_set(self):
list_max_show_all, list_editable, model_admin)
def get_query_set(self, request):
tmp_params = self.params.copy()
grupo = None
if 'grupo' in self.params:
grupo = self.params['grupo']
del self.params['grupo']
qs = super(OcorrenciaChangeList, self).get_query_set()
qs = super(OcorrenciaChangeList, self).get_query_set(request)
self.params = tmp_params.copy()
if grupo:
servidor = Servidor.objects.get(user=self.request.user)
@ -53,6 +57,7 @@ class OcorrenciaChangeList(ChangeList):
qs = qs.filter(servidor_registro=servidor)
return qs
class OcorrenciaAdmin(admin.ModelAdmin):
list_display = ('data_criacao', 'casa_legislativa', 'assunto', 'prioridade', 'status', 'data_modificacao', 'setor_responsavel',)
list_filter = ('assunto', 'status', 'prioridade', 'categoria', 'setor_responsavel', )
@ -105,6 +110,7 @@ class OcorrenciaAdmin(admin.ModelAdmin):
instance.save()
formset.save_m2m()
admin.site.register(Ocorrencia, OcorrenciaAdmin)
admin.site.register(Categoria)
admin.site.register(TipoContato)

8
sigi/apps/ocorrencias/models.py

@ -5,6 +5,7 @@ from django.db import models
from sigi.apps.utils import SearchField
#from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute
class Categoria(models.Model):
nome= models.CharField(u"Nome", max_length=50)
descricao = models.TextField(u'descrição', blank=True, null=True)
@ -15,7 +16,8 @@ class Categoria(models.Model):
def __unicode__(self):
return self.nome
class TipoContato(models.Model):
descricao = models.CharField(u"Descrição", max_length=50)
@ -25,6 +27,7 @@ class TipoContato(models.Model):
def __unicode__(self):
return self.descricao
class Ocorrencia(models.Model):
STATUS_CHOICES = (
(1, u'Aberto'),
@ -66,6 +69,7 @@ class Ocorrencia(models.Model):
def __unicode__(self):
return u"%(casa_legislativa)s: %(assunto)s" % {'assunto': self.assunto, 'casa_legislativa': self.casa_legislativa}
class Comentario(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'Ocorrência')
data_criacao = models.DateTimeField(u'Data de criação', null=True, blank=True, auto_now_add=True)
@ -74,6 +78,7 @@ class Comentario(models.Model):
novo_status = models.IntegerField(u'Novo status', choices=Ocorrencia.STATUS_CHOICES, blank=True, null=True)
encaminhar_setor = models.ForeignKey('servidores.Servico', verbose_name=u'Encaminhar para setor', blank=True, null=True)
class Anexo(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'ocorrência')
arquivo = models.FileField(u'Arquivo anexado', upload_to='apps/ocorrencia/anexo/arquivo',)
@ -86,4 +91,3 @@ class Anexo(models.Model):
def __unicode__(self):
return u"%(arquivo_name)s: %(descricao)s" % {'arquivo_name': self.arquivo.name, 'descricao': self.descricao}

10
sigi/apps/parlamentares/urls.py

@ -0,0 +1,10 @@
# coding: utf-8
from django.conf.urls import patterns, url
urlpatterns = patterns('sigi.apps.parlamentares.views',
# Reports labels parlamentares
url(r'^labels/$', 'labels_report', name='labels-report-all'),
url(r'^(?P<id>\w+)/labels/$', 'labels_report', name='labels-report-id'),
)

3
sigi/apps/servicos/admin.py

@ -211,4 +211,5 @@ class CasaAtendidaAdmin(admin.ModelAdmin):
return False # Nunca é permitido inserir uma nova Casa Legislativa por aqui
def has_delete_permission(self, request, obj=None):
return False # Nunca deletar casas por aqui
return False # Nunca deletar casas por aqui

122
sigi/apps/servicos/models.py~

@ -1,122 +0,0 @@
# -*- coding: utf-8 -*-
from django.db import models
from sigi.apps.casas.models import CasaLegislativa, Funcionario
from datetime import date
from django.core.mail import send_mail
from sigi.settings import DEFAULT_FROM_EMAIL
class TipoServico(models.Model):
email_help = '''Use:<br/>
{url} para incluir a URL do serviço,<br/>
{senha} para incluir a senha inicial do serviço'''
nome = models.CharField('Nome', max_length=60)
sigla = models.CharField('Sigla', max_length='12')
template_email_ativa = models.TextField('Template de email de ativação', help_text = email_help, blank=True)
template_email_altera = models.TextField('Template de email de alteração', help_text = email_help, blank=True)
template_email_desativa = models.TextField('Template de email de desativação', help_text = email_help + '<br/>{motivo} para incluir o motivo da desativação do serviço', blank=True)
@property
def qtde_casas_atendidas(self):
u"""Quantidade de casas atendidas"""
return self.servico_set.filter(data_desativacao=None).count()
class Meta:
verbose_name = 'Tipo de serviço'
verbose_name_plural = 'Tipos de serviço'
def __unicode__(self):
return self.nome;
class Servico(models.Model):
casa_legislativa = models.ForeignKey(CasaLegislativa, verbose_name='Casa legislativa')
tipo_servico = models.ForeignKey(TipoServico, verbose_name='Tipo de serviço')
contato_tecnico = models.ForeignKey(Funcionario, verbose_name='Contato técnico', related_name='contato_tecnico')
contato_administrativo = models.ForeignKey(Funcionario, verbose_name='Contato administrativo', related_name='contato_administrativo')
url = models.URLField('URL do serviço', verify_exists=False, blank=True)
hospedagem_interlegis = models.BooleanField('Hospedagem no Interlegis?')
nome_servidor = models.CharField('Hospedado em', max_length=60, blank=True, help_text='Se hospedado no Interlegis, informe o nome do servidor.<br/>Senão, informe o nome do provedor de serviços.')
porta_servico = models.PositiveSmallIntegerField('Porta de serviço (instância)', blank=True, null=True)
senha_inicial = models.CharField('Senha inicial', max_length=33, blank=True)
data_ativacao = models.DateField('Data de ativação', default=date.today)
data_alteracao = models.DateField('Data da última alteração', blank=True, null=True, auto_now=True)
data_desativacao = models.DateField('Data de desativação', blank=True, null=True)
motivo_desativacao = models.TextField('Motivo da desativação', blank=True)
casa_legislativa.casa_uf_filter = True
def __unicode__(self):
return "%s (%s)" % (self.tipo_servico.nome, 'ativo' if self.data_desativacao is None else 'Desativado')
def save(self, *args, **kwargs):
# Reter o objeto original para verificar mudanças
if self.id is not None:
original = Servico.objects.get(id=self.id)
if self.id is None:
# Novo serviço, email de ativação
subject = u'INTERLEGIS - Ativação de serviço %s' % (self.tipo_servico.nome,)
body = self.tipo_servico.template_email_ativa
elif self.data_desativacao is not None and original.data_desativacao is None:
# Serviço foi desativado. Email de desativação
subject = u'INTERLEGIS - Desativação de serviço %s' % (self.tipo_servico.nome,)
body = self.tipo_servico.template_email_desativa
elif (self.tipo_servico != original.tipo_servico or
self.contato_tecnico != original.contato_tecnico or
self.url != original.url or
self.nome_servidor != original.nome_servidor or
self.senha_inicial != original.senha_inicial):
# Serviço foi alterado
subject = u'INTERLEGIS - Alteração de serviço %s' % (self.tipo_servico.nome,)
body = self.tipo_servico.template_email_altera
else:
# Salvar o Servico
super(Servico, self).save(*args, **kwargs)
return # sem enviar email
# Prepara e envia o email
body = body.replace('{url}', self.url) \
.replace('{senha}', self.senha_inicial) \
.replace('{motivo}', self.motivo_desativacao)
# send_mail(subject, body, DEFAULT_FROM_EMAIL, \
# (self.contato_tecnico.email,), fail_silently=False)
# Salvar o Servico
super(Servico, self).save(*args, **kwargs)
return
class LogServico(models.Model):
servico = models.ForeignKey(Servico, verbose_name='Serviço')
descricao = models.CharField('Breve descrição da ação', max_length=60)
data = models.DateField('Data da ação', default=date.today)
log = models.TextField('Log da ação')
def __unicode__(self):
return "%s (%s)" % (self.descricao, self.data)
class Meta:
verbose_name = 'Log do serviço'
verbose_name_plural = 'Logs do serviço'
class CasaAtendidaManager(models.Manager):
def get_query_set(self):
qs = super(CasaAtendidaManager, self).get_query_set()
qs = qs.exclude(codigo_interlegis='')
return qs
class CasaAtendida(CasaLegislativa):
class Meta:
proxy = True
verbose_name_plural = 'Casas atendidas'
objects = CasaAtendidaManager()
@property
def servicos(self):
result = []
for servico in self.servico_set.all():
result.append(unicode(servico))
return ", ".join(result)

1
sigi/apps/servidores/models.py

@ -37,6 +37,7 @@ class Servico(models.Model):
def __unicode__(self):
return '%s (%s)' % (unicode(self.nome), unicode(self.sigla))
class Servidor(models.Model):
""" Modelo para representação de um Servidor.

2
sigi/settings.py

@ -49,7 +49,7 @@ INSTALLED_APPS = (
'sigi.apps.metas',
'sigi.apps.ocorrencias',
'sigi.apps.financeiro',
# 'sigi.apps.diagnosticos',
'sigi.apps.diagnosticos',
# Third-party apps
'localflavor',

2
sigi/urls.py

@ -8,7 +8,9 @@ urlpatterns = patterns('',
url(r'^$', RedirectView.as_view(url='/sigi/'), name='go-to-sigi'),
# url(r'^sigi/servidores/', include('sigi.apps.servidores.urls')),
url(r'^sigi/parlamentares/parlamentar/', include('sigi.apps.parlamentares.urls')),
url(r'^sigi/casas/casalegislativa/', include('sigi.apps.casas.urls')),
url(r'^sigi/convenios/convenio/', include('sigi.apps.convenios.urls')),
url(r'^sigi/', include(admin.site.urls)),
)

Loading…
Cancel
Save