Browse Source

adicionando models e admin basicos dos novos modulos

diagnosticos
Felipe Vieira 13 years ago
parent
commit
44dad5a067
  1. 1
      sigi/apps/casas/models.py
  2. 88
      sigi/apps/contatos/models.py
  3. 0
      sigi/apps/diagnosticos/__init__.py
  4. 32
      sigi/apps/diagnosticos/admin.py
  5. 5
      sigi/apps/diagnosticos/forms.py
  6. 90
      sigi/apps/diagnosticos/models.py
  7. 0
      sigi/apps/ocorrencias/__init__.py
  8. 29
      sigi/apps/ocorrencias/admin.py
  9. 83
      sigi/apps/ocorrencias/models.py
  10. 0
      sigi/apps/servidores/__init__.py
  11. 63
      sigi/apps/servidores/admin.py
  12. 141
      sigi/apps/servidores/models.py
  13. 2
      sigi/settings.py
  14. 28
      sigi/sites.py

1
sigi/apps/casas/models.py

@ -57,7 +57,6 @@ class CasaLegislativa(models.Model):
foto_largura = models.SmallIntegerField(editable=False, null=True) foto_largura = models.SmallIntegerField(editable=False, null=True)
foto_altura = models.SmallIntegerField(editable=False, null=True) foto_altura = models.SmallIntegerField(editable=False, null=True)
contatos = generic.GenericRelation('contatos.Contato') contatos = generic.GenericRelation('contatos.Contato')
class Meta: class Meta:

88
sigi/apps/contatos/models.py

@ -159,3 +159,91 @@ class Contato(models.Model):
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
class Endereco(models.Model):
TIPO_CHOICES = (
('aeroporto','Aeroporto'),
('alameda','Alameda'),
('area',u'Área'),
('avenida','Avenida'),
('campo','Campo'),
('chacara',u'Chácara'),
('colonia',u'Colônia'),
('condominio',u'Condomínio'),
('conjunto','Conjunto'),
('distrito','Distrito'),
('esplanada','Esplanada'),
('estacao',u'Estação'),
('estrada','Estrada'),
('favela','Favela'),
('fazenda','Fazenda'),
('feira','Feira'),
('jardim','Jardim'),
('ladeira','Ladeira'),
('lago','Lago'),
('lagoa','Lagoa'),
('largo','Largo'),
('loteamento','Loteamento'),
('morro','Morro'),
('nucleo',u'Núcleo'),
('parque','Parque'),
('passarela','Passarela'),
('patio',u'Pátio'),
('praca',u'Praça'),
('quadra','Quadra'),
('recanto','Recanto'),
('residencial','Residencial'),
('rodovia','Rodovia'),
('rua','Rua'),
('setor','Setor'),
('sitio',u'Sítio'),
('travessa','Travessa'),
('trecho','Trecho'),
('trevo','Trevo'),
('vale','Vale'),
('vereda','Vereda'),
('via','Via'),
('viaduto','Viaduto'),
('viela','Viela'),
('vila','Vila'),
('outro','Outro'),
)
tipo = models.CharField(max_length=15,choices=TIPO_CHOICES)
logradouro = models.CharField(
max_length=100,
)
logradouro.alphabetic_filter = True
numero= models.CharField(max_length=15, blank=True)
complemento= models.CharField(max_length=15, blank=True)
referencia = models.CharField(max_length=100, blank=True)
bairro = models.CharField(max_length=100, blank=True)
cep = models.CharField(
'CEP',
max_length=9,
blank=True,
null=True,
help_text="Formato: <em>XXXXX-XXX</em>."
)
municipio = models.ForeignKey(
Municipio,
verbose_name='município',
blank=True,
null=True,
)
municipio.uf_filter = True
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
class Meta:
ordering = ('logradouro', 'numero')
verbose_name = u'endereço'
verbose_name_plural = u'endereços'
def __unicode__(self):
return self.tipo + ' ' + seld.logradouro + ', ' + self.numero \
+ ' ' + self.complemento + ' - ' + self.bairro

0
sigi/apps/diagnosticos/__init__.py

32
sigi/apps/diagnosticos/admin.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from eav.admin import BaseEntityAdmin, BaseSchemaAdmin
from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo
from sigi.apps.diagnosticos.forms import DiagnosticoForm
class EquipeInline(admin.TabularInline):
model = Equipe
extra = 4
class AnexosInline(admin.TabularInline):
model = Anexo
extra = 2
exclude = ['data_pub',]
class AnexoAdmin(admin.ModelAdmin):
date_hierarchy = 'data_pub'
exclude = ['data_pub',]
list_display = ('arquivo', 'descricao', 'data_pub', 'diagnostico')
raw_id_fields = ('diagnostico',)
search_fields = ('descricao', 'diagnostico__id', 'arquivo',
'diagnostico__casa_legislativa__nome')
class DiagnosticoAdmin(BaseEntityAdmin):
form = DiagnosticoForm
inlines = (EquipeInline, AnexosInline)
raw_id_fields = ('casa_legislativa',)
admin.site.register(Diagnostico, DiagnosticoAdmin)
admin.site.register(Pergunta, BaseSchemaAdmin)
admin.site.register(Escolha)
admin.site.register(Anexo, AnexoAdmin)

5
sigi/apps/diagnosticos/forms.py

@ -0,0 +1,5 @@
from models import Diagnostico
from eav.forms import BaseDynamicEntityForm
class DiagnosticoForm(BaseDynamicEntityForm):
model = Diagnostico

90
sigi/apps/diagnosticos/models.py

@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
from datetime import datetime
from django.db import models
from sigi.apps.utils import SearchField
from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute
class Diagnostico(BaseEntity):
casa_legislativa = models.ForeignKey(
'casas.CasaLegislativa',
verbose_name='Casa Legislativa'
)
search_text = SearchField(field_names=['casa_legislativa'])
casa_legislativa.convenio_uf_filter = True
casa_legislativa.convenio_cl_tipo_filter = True
data_visita = models.DateField(
'data da visita',
null=True,
blank=True,
)
data_questionario = models.DateField(
'data do questionario',
null=True,
blank=True,
help_text='Convênio firmado.'
)
data_relatorio_questionario = models.DateField(
'data do relatório do questionario',
null=True,
blank=True
)
data_termo_aceite = models.DateField(
'Equipadas',
null=True,
blank=True,
help_text='Equipamentos recebidos.'
)
class Meta:
verbose_name, verbose_name_plural = u'diagnóstico', u'diagnósticos'
@classmethod
def get_schemata_for_model(self):
return Pergunta.objects.all()
def __unicode__(self):
return str(self.casa_legislativa)
class Categoria(models.Model):
nome= models.CharField(max_length=50)
ordem = models.PositiveSmallIntegerField(blank=True, null=True)
class Pergunta(BaseSchema):
categoria = models.ForeignKey(Categoria)
ordem = models.PositiveSmallIntegerField(blank=True, null=True)
class Meta:
verbose_name, verbose_name_plural = 'pergunta', 'perguntas'
class Escolha(BaseChoice):
schema = models.ForeignKey(Pergunta, related_name='choices', verbose_name='pergunta')
class Meta:
verbose_name, verbose_name_plural = 'escolha', 'escolhas'
class Resposta(BaseAttribute):
schema = models.ForeignKey(Pergunta, related_name='attrs', verbose_name='pergunta')
choice = models.ForeignKey(Escolha, verbose_name='escolha', blank=True, null=True)
class Meta:
verbose_name, verbose_name_plural = 'resposta', 'respostas'
class Equipe(models.Model):
diagnostico = models.ForeignKey(Diagnostico)
membro = models.ForeignKey('servidores.Servidor')
is_chefe = models.BooleanField()
def __unicode__(self):
return str(self.id)
class Anexo(models.Model):
diagnostico = models.ForeignKey(Diagnostico, verbose_name=u'diagnóstico')
arquivo = models.FileField(upload_to='apps/diagnostico/anexo/arquivo',)
descricao = models.CharField('descrição', max_length='70')
data_pub = models.DateTimeField(
'data da publicação do anexo',
default=datetime.now
)
class Meta:
ordering = ('-data_pub',)
def __unicode__(self):
return unicode(self.arquivo.name)

0
sigi/apps/ocorrencias/__init__.py

29
sigi/apps/ocorrencias/admin.py

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from eav.admin import BaseEntityAdmin, BaseSchemaAdmin
from sigi.apps.ocorrencias.models import Ocorrencia, Comentario, Anexo, Categoria
class ComentarioInline(admin.TabularInline):
model = Comentario
extra = 1
class AnexosInline(admin.TabularInline):
model = Anexo
extra = 2
exclude = ['data_pub',]
class AnexoAdmin(admin.ModelAdmin):
date_hierarchy = 'data_pub'
exclude = ['data_pub',]
list_display = ('arquivo', 'descricao', 'data_pub', 'ocorrencia')
raw_id_fields = ('ocorrencia',)
search_fields = ('descricao', 'ocorrencia__id', 'arquivo',
'ocorrencia__casa_legislativa__nome')
class OcorrenciaAdmin(BaseEntityAdmin):
inlines = (ComentarioInline, AnexosInline)
raw_id_fields = ('casa_legislativa',)
admin.site.register(Ocorrencia, OcorrenciaAdmin)
admin.site.register(Anexo, AnexoAdmin)
admin.site.register(Categoria)

83
sigi/apps/ocorrencias/models.py

@ -0,0 +1,83 @@
# -*- coding: utf-8 -*-
from django.db import models
from datetime import datetime
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(max_length=50)
descricao = models.TextField('descrição', blank=True, null=True)
def __unicode__(self):
return str(self.nome)
class Ocorrencia(models.Model):
casa_legislativa = models.ForeignKey(
'casas.CasaLegislativa',
verbose_name='Casa Legislativa'
)
search_text = SearchField(field_names=['casa_legislativa'])
casa_legislativa.convenio_uf_filter = True
casa_legislativa.convenio_cl_tipo_filter = True
data_criacao = models.DateField(
'data de criacao',
null=True,
blank=True,
)
data_modificacao = models.DateField(
u'data de modificação',
null=True,
blank=True,
)
STATUS_CHOICES = (
(1, 'Aberto'),
(2, 'Reaberto'),
(3, 'Resolvido'),
(4, 'Fechado'),
(5, 'Duplicado'),
)
PRIORITY_CHOICES = (
(1, u'Altíssimo'),
(2, 'Alto'),
(3, 'Normal'),
(4, 'Baixo'),
(5, u'Baixíssimo'),
)
categoria = models.ForeignKey(Categoria)
assunto = models.CharField(max_length=200)
status = models.IntegerField(choices=STATUS_CHOICES, default=1, blank=1)
prioridade = models.IntegerField(choices=PRIORITY_CHOICES, default=3, blank=3)
descricao = models.TextField(u'descirção', blank=True, null=True)
resolucao = models.TextField(u'resolução', blank=True, null=True)
responsavel = models.ForeignKey('servidores.Servidor', blank=True, null=True, verbose_name=u'responsável')
class Meta:
verbose_name, verbose_name_plural = u'ocorrência', u'ocorrências'
class Comentario(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'ocorrência')
data_criacao = models.DateTimeField(u'data de criação', default = datetime.now())
descricao = models.TextField(u'descirção', blank=True, null=True)
usuario = models.ForeignKey('servidores.Servidor', blank=True, null=True, verbose_name=u'usuário')
class Anexo(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'ocorrência')
arquivo = models.FileField(upload_to='apps/ocorrencia/anexo/arquivo',)
descricao = models.CharField('descrição', max_length='70')
data_pub = models.DateTimeField(
'data da publicação do anexo',
default=datetime.now
)
class Meta:
ordering = ('-data_pub',)
def __unicode__(self):
return unicode(self.arquivo.name)

0
sigi/apps/servidores/__init__.py

63
sigi/apps/servidores/admin.py

@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from django.contrib.contenttypes import generic
from sigi.apps.servidores.models import Servidor, Funcao, Licenca, Ferias
from sigi.apps.contatos.models import Endereco, Telefone
class FuncaoInline(admin.TabularInline):
model = Funcao
extra = 1
class FuncaoAdmin(admin.ModelAdmin):
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 FeriasInline(admin.TabularInline):
model = Ferias
extra = 1
class FeriasAdmin(admin.ModelAdmin):
list_display = ('servidor', 'inicio_ferias', 'fim_ferias')
list_filter = ('servidor', 'inicio_ferias', 'fim_ferias')
search_fields = ('obs',
'servidor__nome_completo', 'servidor__obs', 'servidor__apontamentos',
'servidor__user__email', 'servidor__user__first_name',
'servidor__user__last_name', 'servidor__user__username')
class LicencaInline(admin.TabularInline):
model = Licenca
extra = 1
class LicencaAdmin(admin.ModelAdmin):
list_display = ('servidor', 'inicio_licenca', 'fim_licenca')
list_filter = ('servidor', 'inicio_licenca', 'fim_licenca')
search_fields = ('obs',
'servidor__nome_completo', 'servidor__obs', 'servidor__apontamentos',
'servidor__user__email', 'servidor__user__first_name',
'servidor__user__last_name', 'servidor__user__username')
class EnderecoInline(generic.GenericTabularInline):
model = Endereco
extra = 1
raw_id_fields = ('municipio',)
class TelefonesInline(generic.GenericTabularInline):
extra = 1
model = Telefone
class ServidorAdmin(admin.ModelAdmin):
list_display = ('nome_completo', 'servico')
list_filter = ('sexo', 'servico')
search_fields = ('nome_completo', 'obs', 'apontamentos',
'user__email', 'user__first_name',
'user__last_name', 'user__username')
inlines= (EnderecoInline, TelefonesInline)
admin.site.register(Servidor, ServidorAdmin)
admin.site.register(Funcao, FuncaoAdmin)
admin.site.register(Ferias, FeriasAdmin)
admin.site.register(Licenca, LicencaAdmin)

141
sigi/apps/servidores/models.py

@ -0,0 +1,141 @@
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.contenttypes import generic
from django.contrib.auth.models import User
class Subsecretaria(models.Model):
nome = models.CharField(max_length=50)
sigla = models.CharField(max_length=10)
#responsavel = models.ForeignKey('servidores.Servidor')
class Meta:
ordering = ('nome',)
def __unicode__(self):
return '%s (%s)' % (unicode(self.nome), unicode(self.sigla))
class Servico(models.Model):
nome = models.CharField(max_length=50)
sigla = models.CharField(max_length=10)
subsecretaria = models.ForeignKey(Subsecretaria)
#responsavel = models.ForeignKey('servidores.Servidor')
class Meta:
ordering = ('nome',)
verbose_name = 'serviço'
verbose_name_plural = 'serviços'
def __unicode__(self):
return '%s (%s)' % (unicode(self.nome), unicode(self.sigla))
class Servidor(models.Model):
SEXO_CHOICES = (
('M', u'Masculino'),
('F', u'Feminino'),
)
TURNO_CHOICES = (
('M', u'Manhã'),
('T', u'Tarde'),
('N', u'Noite'),
)
nome_completo = models.CharField(max_length=128)
nome_completo.alphabetic_filter = True
user = models.ForeignKey(User, unique=True)
apelido = models.CharField(max_length=50, blank=True)
foto = models.ImageField(
upload_to='fotos/servidores',
width_field='foto_largura',
height_field='foto_altura',
blank=True
)
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,
)
email = models.EmailField('e-mail', blank=True, null=True)
servico = models.ForeignKey(Servico, blank=True, null=True)
is_chefe = models.BooleanField()
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,
)
data_entrada = models.DateField(u'data de entrada', blank=True, null=True)
data_saida = models.DateField(u'data de saída', blank=True, null=True)
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)
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)
#endereco = models.ForeignKey('contatos.Endereco', blank=True, null=True)
endereco = generic.GenericRelation('contatos.Endereco')
telefones = generic.GenericRelation('contatos.Telefone')
ramal = models.IntegerField('ramal', blank=True, null=True)
class Meta:
ordering = ('nome_completo',)
verbose_name_plural = 'servidores'
def __unicode__(self):
return self.nome_completo
class Funcao(models.Model):
servidor = models.ForeignKey(Servidor)
funcao = models.CharField(max_length=50)
cargo = models.CharField(max_length=50, blank=True, null=True)
inicio_funcao = models.DateField(u'início da função')
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):
servidor = models.ForeignKey(Servidor)
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 __unicode__(self):
return str(self.id)
class Ferias(models.Model):
servidor = models.ForeignKey(Servidor)
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 __unicode__(self):
return str(self.id)

2
sigi/settings.py

@ -154,6 +154,8 @@ INSTALLED_APPS = (
'sigi.apps.mesas', 'sigi.apps.mesas',
'sigi.apps.parlamentares', 'sigi.apps.parlamentares',
'sigi.apps.servidores', 'sigi.apps.servidores',
'sigi.apps.diagnosticos',
'sigi.apps.ocorrencias',
'sigi.apps.servicos', 'sigi.apps.servicos',
'sigi.apps.relatorios', 'sigi.apps.relatorios',
) )

28
sigi/sites.py

@ -7,7 +7,8 @@ from sigi.apps.contatos.admin import (UnidadeFederativa, UnidadeFederativaAdmin,
Municipio, MunicipioAdmin, Telefone, Municipio, MunicipioAdmin, Telefone,
TelefoneAdmin, Contato, ContatoAdmin) TelefoneAdmin, Contato, ContatoAdmin)
from sigi.apps.convenios.admin import (Projeto, Convenio, ConvenioAdmin, EquipamentoPrevisto, from sigi.apps.convenios.admin import (Projeto, Convenio, ConvenioAdmin, EquipamentoPrevisto,
EquipamentoPrevistoAdmin, Anexo, AnexoAdmin,UnidadeAdministrativa,Tramitacao) EquipamentoPrevistoAdmin, Anexo, AnexoAdmin,
UnidadeAdministrativa,Tramitacao)
from sigi.apps.inventario.admin import (Fornecedor, FornecedorAdmin, Fabricante, from sigi.apps.inventario.admin import (Fornecedor, FornecedorAdmin, Fabricante,
FabricanteAdmin, Equipamento, FabricanteAdmin, Equipamento,
EquipamentoAdmin, TipoEquipamento, EquipamentoAdmin, TipoEquipamento,
@ -22,6 +23,13 @@ from sigi.apps.mesas.admin import (Legislatura, LegislaturaAdmin, Coligacao,
MembroMesaDiretora, MembroMesaDiretoraAdmin) MembroMesaDiretora, MembroMesaDiretoraAdmin)
from sigi.apps.parlamentares.admin import (Partido, PartidoAdmin, Parlamentar, from sigi.apps.parlamentares.admin import (Partido, PartidoAdmin, Parlamentar,
ParlamentarAdmin, Mandato, MandatoAdmin) ParlamentarAdmin, Mandato, MandatoAdmin)
from sigi.apps.diagnosticos.admin import (Diagnostico, DiagnosticoAdmin, Pergunta,
BaseSchemaAdmin, Escolha, Anexo as AnexoDiagnostico,
AnexoAdmin as AnexoDiagnosticoAdmin)
from sigi.apps.servidores.admin import (Servidor, ServidorAdmin, Funcao, FuncaoAdmin,
Ferias, FeriasAdmin, Licenca, LicencaAdmin)
from sigi.apps.ocorrencias.admin import (Ocorrencia, OcorrenciaAdmin, Anexo as AnexoOcorrencia,
AnexoAdmin as AnexoOcorrenciaAdmin, Categoria)
class DefaultSite(AdminSite): class DefaultSite(AdminSite):
index_template = 'index.html' index_template = 'index.html'
@ -82,3 +90,21 @@ default.register(MembroMesaDiretora, MembroMesaDiretoraAdmin)
default.register(Partido, PartidoAdmin) default.register(Partido, PartidoAdmin)
default.register(Parlamentar, ParlamentarAdmin) default.register(Parlamentar, ParlamentarAdmin)
default.register(Mandato, MandatoAdmin) default.register(Mandato, MandatoAdmin)
# sigi.apps.diagnosticos
default.register(Diagnostico, DiagnosticoAdmin)
default.register(Pergunta, BaseSchemaAdmin)
default.register(Escolha)
default.register(AnexoDiagnostico, AnexoDiagnosticoAdmin)
# sigi.apps.servidores
default.register(Servidor, ServidorAdmin)
default.register(Funcao, FuncaoAdmin)
default.register(Ferias, FeriasAdmin)
default.register(Licenca, LicencaAdmin)
# sigi.apps.ocorrencias
default.register(Ocorrencia, OcorrenciaAdmin)
default.register(AnexoOcorrencia, AnexoOcorrenciaAdmin)
default.register(Categoria)

Loading…
Cancel
Save