diff --git a/sigi/apps/convenios/admin.py b/sigi/apps/convenios/admin.py index b55fd90..601079d 100644 --- a/sigi/apps/convenios/admin.py +++ b/sigi/apps/convenios/admin.py @@ -53,6 +53,9 @@ class ConvenioAdmin(BaseModelAdmin): {'fields': ('data_solicitacao', 'data_sigad', 'tipo_solicitacao', 'status', 'acompanha', 'observacao',)} ), + (_(u"Gestão do convênio"), + {'fields': ('servico_gestao', 'servidor_gestao',)} + ), (_(u'Datas'), {'fields': ('data_retorno_assinatura', 'duracao', 'data_pub_diario',)} diff --git a/sigi/apps/convenios/migrations/0008_auto_20210422_1907.py b/sigi/apps/convenios/migrations/0008_auto_20210422_1907.py new file mode 100644 index 0000000..f061a28 --- /dev/null +++ b/sigi/apps/convenios/migrations/0008_auto_20210422_1907.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('servidores', '0004_auto_20210422_1907'), + ('convenios', '0007_auto_20210416_0918'), + ] + + operations = [ + migrations.AddField( + model_name='convenio', + name='servico_gestao', + field=models.ForeignKey(related_name='convenios_geridos', on_delete=django.db.models.deletion.SET_NULL, verbose_name='servi\xe7o de gest\xe3o', blank=True, to='servidores.Servico', null=True), + preserve_default=True, + ), + migrations.AddField( + model_name='convenio', + name='servidor_gestao', + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='servidor de gest\xe3o', blank=True, to='servidores.Servidor', null=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='convenio', + name='acompanha', + field=models.ForeignKey(related_name='convenios_acompanhados', on_delete=django.db.models.deletion.SET_NULL, verbose_name='acompanhado por', blank=True, to='servidores.Servidor', null=True), + preserve_default=True, + ), + ] diff --git a/sigi/apps/convenios/models.py b/sigi/apps/convenios/models.py index e7bfa9c..b411171 100644 --- a/sigi/apps/convenios/models.py +++ b/sigi/apps/convenios/models.py @@ -4,7 +4,7 @@ from datetime import datetime, date from django.db import models from django.utils.translation import ugettext as _ from sigi.apps.utils import SearchField -from sigi.apps.servidores.models import Servidor +from sigi.apps.servidores.models import Servidor, Servico class Projeto(models.Model): """ Modelo para representar os projetos do programa @@ -40,15 +40,6 @@ class TipoSolicitacao(models.Model): return self.nome class Convenio(models.Model): - - """ Modelo que representa um convênio do Interlegis - com uma Casa Legislativa. - - Uma Casa Legislativa pode não ter um convênio e sim - apenas uma adesão com o Interlegis, isto é, - não tem compromissos direto com o Interlegis apenas - um pacto de colaboração entre as partes - """ casa_legislativa = models.ForeignKey( 'casas.Orgao', on_delete=models.PROTECT, @@ -105,6 +96,7 @@ class Convenio(models.Model): acompanha = models.ForeignKey( Servidor, on_delete=models.SET_NULL, + related_name='convenios_acompanhados', verbose_name=_(u"acompanhado por"), null=True, blank=True @@ -114,6 +106,21 @@ class Convenio(models.Model): null=True, blank=True, ) + servico_gestao = models.ForeignKey( + Servico, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name='convenios_geridos', + verbose_name=_(u"serviço de gestão") + ) + servidor_gestao = models.ForeignKey( + Servidor, + on_delete=models.SET_NULL, + null=True, + blank=True, + verbose_name=_(u"servidor de gestão") + ) data_adesao = models.DateField( _(u'aderidas'), null=True, diff --git a/sigi/apps/servidores/admin.py b/sigi/apps/servidores/admin.py index bbf4b7b..e9f912d 100644 --- a/sigi/apps/servidores/admin.py +++ b/sigi/apps/servidores/admin.py @@ -4,90 +4,30 @@ from django.contrib.contenttypes import generic from django.utils.translation import ugettext as _ from sigi.apps.contatos.models import Endereco, Telefone -from sigi.apps.servidores.forms import FeriasForm, LicencaForm, FuncaoForm -from sigi.apps.servidores.models import Servidor, Funcao, Licenca, Ferias, Servico, Subsecretaria +from sigi.apps.servidores.models import Servidor, Servico from sigi.apps.utils.admin_widgets import AdminImageWidget from sigi.apps.utils.base_admin import BaseModelAdmin from sigi.apps.utils.filters import AlphabeticFilter - -class FuncaoAdmin(BaseModelAdmin): - form = FuncaoForm - list_display = ('servidor', 'funcao', 'cargo', 'inicio_funcao', 'fim_funcao') - list_filter = ('inicio_funcao', 'fim_funcao') - search_fields = ('funcao', 'cargo', 'descricao', - 'servidor__nome_completo', 'servidor__obs', 'servidor__apontamentos', - 'servidor__user__email', 'servidor__user__first_name', - 'servidor__user__last_name', 'servidor__user__username') - - -class FeriasAdmin(BaseModelAdmin): - form = FeriasForm - list_display = ('servidor', 'inicio_ferias', 'fim_ferias') - list_filter = ('inicio_ferias', 'fim_ferias') - search_fields = ('obs', - 'servidor__nome_completo', 'servidor__email_pessoal', - 'servidor__user__email', 'servidor__user__username') - - class ServidorFilter(AlphabeticFilter): title = _(u'Nome do Servidor') parameter_name = 'servidor__nome_completo' +@admin.register(Servico) +class ServicoAdmin(admin.ModelAdmin): + list_display = ['sigla', 'nome', 'subordinado', 'responsavel'] + list_filter = ['subordinado',] + search_fields = ['nome', 'sigla',] -class LicencaAdmin(BaseModelAdmin): - form = LicencaForm - list_display = ('servidor', 'inicio_licenca', 'fim_licenca') - list_filter = (ServidorFilter, 'inicio_licenca', 'fim_licenca') - search_fields = ('obs', - 'servidor__nome_completo', 'servidor__email_pessoal', - 'servidor__user__email', 'servidor__user__username') - - def lookup_allowed(self, lookup, value): - return super(LicencaAdmin, self).lookup_allowed(lookup, value) or \ - lookup in ['servidor__nome_completo'] - - -class EnderecoInline(generic.GenericStackedInline): - model = Endereco - extra = 0 - raw_id_fields = ('municipio',) - - -class TelefonesInline(generic.GenericTabularInline): - extra = 1 - model = Telefone - - +@admin.register(Servidor) class ServidorAdmin(BaseModelAdmin): - - def is_active(self, servidor): - return servidor.user.is_active - is_active.admin_order_field = 'user__is_active' - is_active.boolean = True - is_active.short_description = _(u'ativo') - - list_display = ('nome_completo', 'is_active', 'foto', 'servico', ) - list_filter = ('user__is_active', 'sexo', 'servico',) - search_fields = ('nome_completo', 'obs', 'apontamentos', - 'user__email', 'user__first_name', - 'user__last_name', 'user__username') + list_display = ('foto', 'nome_completo', 'is_active', 'servico', ) + list_filter = ('user__is_active', 'servico',) + search_fields = ('nome_completo', 'user__email', 'user__first_name', + 'user__last_name', 'user__username', 'servico__nome', + 'servico__sigla') raw_id_fields = ('user',) - inlines = (TelefonesInline, EnderecoInline) - fieldsets = ( - (_(u'Autenticação'), { - 'fields': ('user',), - }), - (_(u'Cadastro'), { - 'fields': ('nome_completo', 'foto', 'email_pessoal', 'rg', 'cpf', 'sexo', 'data_nascimento', 'matricula', 'ramal', 'data_nomeacao', 'ato_numero', 'ato_exoneracao') - }), - (_(u'Lotação'), { - 'fields': ('servico', 'turno', 'de_fora'), - }), - (_(u'Observações'), { - 'fields': ('apontamentos', 'obs'), - }), - ) + fields = ['user', 'nome_completo', 'foto', 'servico',] def lookup_allowed(self, lookup, value): return super(ServidorAdmin, self).lookup_allowed(lookup, value) or \ @@ -103,10 +43,8 @@ class ServidorAdmin(BaseModelAdmin): return db_field.formfield(**kwargs) return super(ServidorAdmin, self).formfield_for_dbfield(db_field, **kwargs) - -admin.site.register(Servidor, ServidorAdmin) -admin.site.register(Funcao, FuncaoAdmin) -admin.site.register(Ferias, FeriasAdmin) -admin.site.register(Licenca, LicencaAdmin) -admin.site.register(Servico) -admin.site.register(Subsecretaria) + def is_active(self, servidor): + return servidor.user.is_active + is_active.admin_order_field = 'user__is_active' + is_active.boolean = True + is_active.short_description = _(u'ativo') \ No newline at end of file diff --git a/sigi/apps/servidores/migrations/0003_auto_20210422_1729.py b/sigi/apps/servidores/migrations/0003_auto_20210422_1729.py new file mode 100644 index 0000000..229ed1d --- /dev/null +++ b/sigi/apps/servidores/migrations/0003_auto_20210422_1729.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('servidores', '0002_auto_20210416_0841'), + ] + + operations = [ + migrations.RemoveField( + model_name='ferias', + name='servidor', + ), + migrations.DeleteModel( + name='Ferias', + ), + migrations.RemoveField( + model_name='funcao', + name='servidor', + ), + migrations.DeleteModel( + name='Funcao', + ), + migrations.RemoveField( + model_name='licenca', + name='servidor', + ), + migrations.DeleteModel( + name='Licenca', + ), + migrations.RemoveField( + model_name='subsecretaria', + name='responsavel', + ), + migrations.RemoveField( + model_name='servico', + name='subsecretaria', + ), + migrations.DeleteModel( + name='Subsecretaria', + ), + migrations.RemoveField( + model_name='servidor', + name='apontamentos', + ), + migrations.RemoveField( + model_name='servidor', + name='ato_exoneracao', + ), + migrations.RemoveField( + model_name='servidor', + name='ato_numero', + ), + migrations.RemoveField( + model_name='servidor', + name='cpf', + ), + migrations.RemoveField( + model_name='servidor', + name='data_nascimento', + ), + migrations.RemoveField( + model_name='servidor', + name='data_nomeacao', + ), + migrations.RemoveField( + model_name='servidor', + name='de_fora', + ), + migrations.RemoveField( + model_name='servidor', + name='email_pessoal', + ), + migrations.RemoveField( + model_name='servidor', + name='matricula', + ), + migrations.RemoveField( + model_name='servidor', + name='obs', + ), + migrations.RemoveField( + model_name='servidor', + name='ramal', + ), + migrations.RemoveField( + model_name='servidor', + name='rg', + ), + migrations.RemoveField( + model_name='servidor', + name='sexo', + ), + migrations.RemoveField( + model_name='servidor', + name='turno', + ), + migrations.AddField( + model_name='servico', + name='subordinado', + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='subordinado a', to='servidores.Servico', null=True), + preserve_default=True, + ), + ] diff --git a/sigi/apps/servidores/migrations/0004_auto_20210422_1907.py b/sigi/apps/servidores/migrations/0004_auto_20210422_1907.py new file mode 100644 index 0000000..364a337 --- /dev/null +++ b/sigi/apps/servidores/migrations/0004_auto_20210422_1907.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('servidores', '0003_auto_20210422_1729'), + ] + + operations = [ + migrations.AlterField( + model_name='servico', + name='responsavel', + field=models.ForeignKey(related_name='chefe', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='servidores.Servidor', null=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='servico', + name='subordinado', + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='subordinado a', blank=True, to='servidores.Servico', null=True), + preserve_default=True, + ), + ] diff --git a/sigi/apps/servidores/models.py b/sigi/apps/servidores/models.py index 1e00e92..7aff853 100644 --- a/sigi/apps/servidores/models.py +++ b/sigi/apps/servidores/models.py @@ -5,47 +5,22 @@ from django.db import models from django.db.models.signals import post_save from django.utils.translation import ugettext as _ - -class Subsecretaria(models.Model): - - """ Modelo para representação das Subsecretarias do Interlegis - """ - - nome = models.CharField(max_length=250, null=True) - sigla = models.CharField(max_length=10, null=True) - # servidor responsavel por dirigir a Subsecretaria - responsavel = models.ForeignKey( - 'servidores.Servidor', - on_delete=models.SET_NULL, - related_name='diretor', - null=True - ) - - class Meta: - ordering = ('nome',) - - def __unicode__(self): - return '%s (%s)' % (unicode(self.nome), unicode(self.sigla)) - - class Servico(models.Model): - - """ Modelo para representação dos Serviços de uma Subsecretaria - """ - nome = models.CharField(_(u'Setor'), max_length=250, null=True) sigla = models.CharField(max_length=10, null=True) - subsecretaria = models.ForeignKey( - Subsecretaria, - on_delete=models.CASCADE, - null=True + subordinado = models.ForeignKey( + 'self', + on_delete=models.SET_NULL, + null=True, + blank=True, + verbose_name=_(u"subordinado a") ) - # servidor responsavel por chefiar o serviço responsavel = models.ForeignKey( 'servidores.Servidor', on_delete=models.SET_NULL, related_name='chefe', - null=True + null=True, + blank=True ) class Meta: @@ -54,33 +29,12 @@ class Servico(models.Model): verbose_name_plural = _(u'serviços') def __unicode__(self): - return '%s (%s)' % (unicode(self.nome), unicode(self.sigla)) - + return u"{sigla} - {nome}".format(sigla=self.sigla, nome=self.nome) class Servidor(models.Model): - - """ Modelo para representação de um Servidor. - - Um servidor pertence a um Serviço e uma Subsecretaria os campos - deste modelo são referente as informações básicas de cadastro. - """ - - SEXO_CHOICES = ( - ('M', u'Masculino'), - ('F', u'Feminino'), - ) - - TURNO_CHOICES = ( - ('M', u'Manhã'), - ('T', u'Tarde'), - ('N', u'Noite'), - ) - - # usuario responsavel pela autenticação do servidor no sistema user = models.ForeignKey(User, on_delete=models.CASCADE, unique=True) nome_completo = models.CharField(max_length=128) apelido = models.CharField(max_length=50, blank=True) - # caminho no sistema para arquivo com a imagem foto = models.ImageField( upload_to='fotos/servidores', width_field='foto_largura', @@ -89,79 +43,17 @@ class Servidor(models.Model): ) foto_largura = models.SmallIntegerField(editable=False, null=True) foto_altura = models.SmallIntegerField(editable=False, null=True) - sexo = models.CharField( - max_length=1, - choices=SEXO_CHOICES, - blank=True, - null=True, - ) - data_nascimento = models.DateField( - 'data de nascimento', - blank=True, - null=True, - ) servico = models.ForeignKey( - 'servidores.Servico', + Servico, on_delete=models.SET_NULL, blank=True, null=True ) - matricula = models.CharField(u'matrícula', max_length=25, blank=True, null=True) - turno = models.CharField( - max_length=1, - choices=TURNO_CHOICES, - blank=True, - null=True, - ) - de_fora = models.BooleanField(default=False) - data_nomeacao = models.DateField(u'data de nomeação', blank=True, null=True) - ato_exoneracao = models.CharField(u'ato de exoneração', max_length=150, blank=True, null=True) - ato_numero = models.CharField(u'ato de exoneração', max_length=150, blank=True, null=True) - cpf = models.CharField('CPF', max_length=11, blank=True, null=True) - rg = models.CharField('RG', max_length=25, blank=True, null=True) - obs = models.TextField(u'observação', blank=True, null=True) - apontamentos = models.TextField(u'apontamentos', blank=True, null=True) - - # Informações de contato - email_pessoal = models.EmailField('email pessoal', blank=True, null=True) - endereco = generic.GenericRelation('contatos.Endereco') - telefones = generic.GenericRelation('contatos.Telefone') - ramal = models.CharField(max_length=25, blank=True, null=True) class Meta: ordering = ('nome_completo',) verbose_name_plural = 'servidores' - def is_chefe(self): - """ Verifica se o servidor é chefe ou diretor - """ - pass - - def data_entrada(self): - """ Verifica a data de entrada da função mais antiga - """ - pass - - def data_saida(self): - """ Verifica a data de saída da função mais recente - de um servidor desativado - - Caso o usuário esteja ativo retorna None - """ - pass - - @property - def diagnosticos(self): - """ Retorna todos os diagnosticos que este servidor - participa, isto é, como responsavel ou parte da equipe - """ - diagnosticos = set(self.diagnostico_set.filter(publicado=True).all()) - - for equipe in self.equipe_set.all(): - diagnosticos.add(equipe.diagnostico) - - return list(diagnosticos) - def __unicode__(self): return self.nome_completo @@ -172,8 +64,6 @@ User.servidor = property(lambda user: Servidor.objects.get(user=user)) # Sinal para ao criar um usuário criar um servidor # baseado no nome contino no LDAP - - def create_user_profile(sender, instance, created, **kwargs): if created: Servidor.objects.create( @@ -181,74 +71,4 @@ def create_user_profile(sender, instance, created, **kwargs): nome_completo="%s %s" % (instance.first_name, instance.last_name) ) -post_save.connect(create_user_profile, sender=User) - - -class Funcao(models.Model): - - """ Modelo para guardar o histórico de funções dos - servidores no Interlegis - """ - servidor = models.ForeignKey(Servidor, on_delete=models.CASCADE) - funcao = models.CharField(max_length=250, null=True) - cargo = models.CharField(max_length=250, null=True) - inicio_funcao = models.DateField(u'início da função', null=True) - fim_funcao = models.DateField(u'fim da função', blank=True, null=True) - descricao = models.TextField(u'descrição', blank=True, null=True) - - bap_entrada = models.CharField('BAP de entrada', max_length=50, blank=True, null=True) - data_bap_entrada = models.DateField('data BAP de entrada', blank=True, null=True) - - bap_saida = models.CharField(u'BAP de saída', max_length=50, blank=True, null=True) - data_bap_saida = models.DateField(u'data BAP de saída', blank=True, null=True) - - class Meta: - verbose_name = u'função' - verbose_name_plural = u'funções' - - def __unicode__(self): - return str(self.id) - - -class Licenca(models.Model): - - """ Modelo que representa as licenças tiradas pelos servidores - """ - servidor = models.ForeignKey(Servidor, on_delete=models.CASCADE) - inicio_licenca = models.DateField(u'início da licença') - fim_licenca = models.DateField(u'fim da licença') - obs = models.TextField(u'observação', blank=True, null=True) - - class Meta: - verbose_name = u'licença' - verbose_name_plural = u'licenças' - - def days(): - """ Calcula a quantidade de dias da licença - """ - pass - - def __unicode__(self): - return str(self.id) - - -class Ferias(models.Model): - - """ Modelo que representa as férias tiradas pelos servidores - """ - servidor = models.ForeignKey(Servidor, on_delete=models.CASCADE) - inicio_ferias = models.DateField(u'início das férias') - fim_ferias = models.DateField(u'fim das férias') - obs = models.TextField(u'observação', blank=True, null=True) - - class Meta: - verbose_name = u'férias' - verbose_name_plural = u'férias' - - def days(): - """ Calcula a quantidade de dias das férias - """ - pass - - def __unicode__(self): - return str(self.id) +post_save.connect(create_user_profile, sender=User) \ No newline at end of file diff --git a/sigi/apps/servidores/templates/servidores/servidores_por_cargo.html b/sigi/apps/servidores/templates/servidores/servidores_por_cargo.html deleted file mode 100644 index 6c73b84..0000000 --- a/sigi/apps/servidores/templates/servidores/servidores_por_cargo.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "base_report.html" %} -{% load i18n %} - -{% block extra_head %} - -{% endblock %} - -{% block subsecretaria %} -{% trans 'SUBSECRETARIA DE ADMINISTRAÇÃO – SSADM' %} -{% endblock %} - -{% block report %} -
-

{% trans 'Relatório de Servidores por Cargo' %}

- - - - - - - {% for r in report %} - - - - - - {% endfor %} - - - - - -
{% trans 'Cargo' %}{% trans 'Servidores' %}
{{ forloop.counter }}{{ r.cargo }}{{ r.cargo__count }}
{% trans 'Total' %}{{ total }}
-
-{% endblock %} diff --git a/sigi/apps/servidores/templates/servidores/servidores_por_funcao.html b/sigi/apps/servidores/templates/servidores/servidores_por_funcao.html deleted file mode 100644 index dcaed72..0000000 --- a/sigi/apps/servidores/templates/servidores/servidores_por_funcao.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "base_report.html" %} -{% load i18n %} - -{% block extra_head %} - -{% endblock %} - -{% block subsecretaria %} -{% trans 'SUBSECRETARIA DE ADMINISTRAÇÃO – SSADM' %} -{% endblock %} - -{% block report %} -
-

{% trans 'Relatório de Servidores por Função' %}

- - - - - - - {% for r in report %} - - - - - - {% endfor %} - - - - - -
{% trans 'Função' %}{% trans 'Servidores' %}
{{ forloop.counter }}{{ r.funcao }}{{ r.funcao__count }}
{% trans 'Total' %}{{ total }}
-
-{% endblock %} diff --git a/sigi/apps/servidores/urls.py b/sigi/apps/servidores/urls.py deleted file mode 100644 index 0a3c33c..0000000 --- a/sigi/apps/servidores/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -from django.conf.urls import patterns, url - - -urlpatterns = patterns( - 'sigi.apps.servidores.views', - - # Reports servidores - url(r'^servidores_por_funcao.pdf$', 'servidores_por_funcao', name='servidores-funcao-pdf'), - url(r'^servidores_por_cargo.pdf$', 'servidores_por_cargo', name='servidores-cargo-pdf'), -) diff --git a/sigi/apps/servidores/views.py b/sigi/apps/servidores/views.py index f229af4..e69de29 100644 --- a/sigi/apps/servidores/views.py +++ b/sigi/apps/servidores/views.py @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -import new -from django.template import RequestContext -from django.shortcuts import render_to_response, get_object_or_404, redirect -from django.db.models import Avg, Max, Min, Count -from sigi.apps.servidores.models import Servidor, Funcao -from sigi.shortcuts import render_to_pdf - - -def servidores_por_funcao(request): - report = Funcao.objects.values('funcao').annotate(funcao__count=Count('funcao')).order_by('funcao__count') - total = Funcao.objects.count() - - context = RequestContext(request, { - 'pagesize': 'A4', - 'report': report, - 'total': total - }) - - return render_to_pdf('servidores/servidores_por_funcao.html', context) - - -def servidores_por_cargo(request): - report = Funcao.objects.values('cargo').annotate(cargo__count=Count('cargo')).order_by('cargo__count') - total = Funcao.objects.count() - - context = RequestContext(request, { - 'pagesize': 'A4', - 'report': report, - 'total': total - }) - - return render_to_pdf('servidores/servidores_por_cargo.html', context) diff --git a/sigi/urls.py b/sigi/urls.py index 8ae90e2..7998344 100644 --- a/sigi/urls.py +++ b/sigi/urls.py @@ -15,7 +15,6 @@ urlpatterns = patterns( url(r'^casas/', include('sigi.apps.casas.urls')), url(r'^convenios/', include('sigi.apps.convenios.urls')), url(r'^diagnosticos/', include('sigi.apps.diagnosticos.urls')), - url(r'^servidores/', include('sigi.apps.servidores.urls')), url(r'^servicos/', include('sigi.apps.servicos.urls')), url(r'^dashboard/', include('sigi.apps.metas.urls')), url(r'^ocorrencias/', include('sigi.apps.ocorrencias.urls')),