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. 16
      sigi/apps/ocorrencias/admin.py
  9. 6
      sigi/apps/ocorrencias/models.py
  10. 10
      sigi/apps/parlamentares/urls.py
  11. 1
      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 .mr.developer.cfg
.project .project
.pydevproject .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.forms import BaseDynamicEntityForm
from eav.fields import RangeField from eav.fields import RangeField
class DiagnosticoForm(BaseDynamicEntityForm): class DiagnosticoForm(BaseDynamicEntityForm):
"""Classe responsável por contruir o formulário, """Classe responsável por contruir o formulário,
vinculando ao modelo Diagnostico vinculando ao modelo Diagnostico
@ -126,6 +127,7 @@ class DiagnosticoMobileForm(BaseDynamicEntityForm):
class CasaLegislativaMobileForm(forms.ModelForm): class CasaLegislativaMobileForm(forms.ModelForm):
data_instalacao = forms.DateField(label = u'Data de instalação da Casa Legislativa', required=False) data_instalacao = forms.DateField(label = u'Data de instalação da Casa Legislativa', required=False)
data_criacao = forms.DateField()
class Meta: class Meta:
model = CasaLegislativa model = CasaLegislativa
@ -136,8 +138,7 @@ class CasaLegislativaMobileForm(forms.ModelForm):
self.fields['data_criacao'] = forms.DateField( self.fields['data_criacao'] = forms.DateField(
label = u'Data de criação do Município', label = u'Data de criação do Município',
initial = self.instance.municipio.data_criacao, initial = self.instance.municipio.data_criacao,
required=False required=False)
)
def save(self, commit=True): def save(self, commit=True):
super(CasaLegislativaMobileForm, self).save(commit=True) super(CasaLegislativaMobileForm, self).save(commit=True)
@ -146,12 +147,14 @@ class CasaLegislativaMobileForm(forms.ModelForm):
self.instance.municipio.save() self.instance.municipio.save()
return self.instance return self.instance
class TelefoneMobileForm(forms.ModelForm): class TelefoneMobileForm(forms.ModelForm):
pass pass
class Meta: class Meta:
model = Telefone model = Telefone
fields = ('numero', 'tipo') fields = ('numero', 'tipo')
class FuncionariosMobileForm(forms.ModelForm): class FuncionariosMobileForm(forms.ModelForm):
TelefoneFormSet = generic_inlineformset_factory(Telefone, TelefoneMobileForm, extra=1, can_delete=False) TelefoneFormSet = generic_inlineformset_factory(Telefone, TelefoneMobileForm, extra=1, can_delete=False)

16
sigi/apps/ocorrencias/admin.py

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

6
sigi/apps/ocorrencias/models.py

@ -5,6 +5,7 @@ from django.db import models
from sigi.apps.utils import SearchField from sigi.apps.utils import SearchField
#from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute #from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute
class Categoria(models.Model): class Categoria(models.Model):
nome= models.CharField(u"Nome", max_length=50) nome= models.CharField(u"Nome", max_length=50)
descricao = models.TextField(u'descrição', blank=True, null=True) descricao = models.TextField(u'descrição', blank=True, null=True)
@ -16,6 +17,7 @@ class Categoria(models.Model):
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
class TipoContato(models.Model): class TipoContato(models.Model):
descricao = models.CharField(u"Descrição", max_length=50) descricao = models.CharField(u"Descrição", max_length=50)
@ -25,6 +27,7 @@ class TipoContato(models.Model):
def __unicode__(self): def __unicode__(self):
return self.descricao return self.descricao
class Ocorrencia(models.Model): class Ocorrencia(models.Model):
STATUS_CHOICES = ( STATUS_CHOICES = (
(1, u'Aberto'), (1, u'Aberto'),
@ -66,6 +69,7 @@ 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}
class Comentario(models.Model): class Comentario(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'Ocorrência') 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) 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) 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) encaminhar_setor = models.ForeignKey('servidores.Servico', verbose_name=u'Encaminhar para setor', blank=True, null=True)
class Anexo(models.Model): class Anexo(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'ocorrência') ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'ocorrência')
arquivo = models.FileField(u'Arquivo anexado', upload_to='apps/ocorrencia/anexo/arquivo',) arquivo = models.FileField(u'Arquivo anexado', upload_to='apps/ocorrencia/anexo/arquivo',)
@ -86,4 +91,3 @@ class Anexo(models.Model):
def __unicode__(self): def __unicode__(self):
return u"%(arquivo_name)s: %(descricao)s" % {'arquivo_name': self.arquivo.name, 'descricao': self.descricao} 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'),
)

1
sigi/apps/servicos/admin.py

@ -212,3 +212,4 @@ class CasaAtendidaAdmin(admin.ModelAdmin):
def has_delete_permission(self, request, obj=None): 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): def __unicode__(self):
return '%s (%s)' % (unicode(self.nome), unicode(self.sigla)) return '%s (%s)' % (unicode(self.nome), unicode(self.sigla))
class Servidor(models.Model): class Servidor(models.Model):
""" Modelo para representação de um Servidor. """ Modelo para representação de um Servidor.

2
sigi/settings.py

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

2
sigi/urls.py

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

Loading…
Cancel
Save