Browse Source

inicio da migração da app 'contatos'

stable/2.0
Breno Teixeira 11 years ago
parent
commit
e23108c903
  1. 0
      sigi/apps/__init__.py
  2. 0
      sigi/apps/contatos/__init__.py
  3. 51
      sigi/apps/contatos/admin.py
  4. 89312
      sigi/apps/contatos/fixtures/initial_data.json
  5. 278
      sigi/apps/contatos/models.py
  6. 3
      sigi/settings.py

0
sigi/apps/__init__.py

0
sigi/apps/contatos/__init__.py

51
sigi/apps/contatos/admin.py

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from sigi.apps.contatos.models import (UnidadeFederativa, Municipio, Telefone,
Contato)
from sigi.apps.utils import queryset_ascii
class UnidadeFederativaAdmin(admin.ModelAdmin):
actions = None
list_display = ('codigo_ibge', 'nome', 'sigla', 'regiao', 'populacao')
list_display_links = ('codigo_ibge', 'nome')
list_filter = ('regiao', 'populacao')
search_fields = ('search_text', 'codigo_ibge', 'sigla', 'regiao')
queryset = queryset_ascii
class MunicipioAdmin(admin.ModelAdmin):
actions = None
list_display = ('codigo_ibge', 'codigo_tse', 'nome', 'uf', 'is_capital', 'populacao', 'is_polo', 'idh', 'pib_ano',
'pib_total', 'pib_percapita')
list_display_links = ('codigo_ibge', 'codigo_tse', 'nome')
list_filter = ('is_capital', 'is_polo', 'idh', 'populacao', 'uf', )
queryset = queryset_ascii
fieldsets = (
(None, {
'fields': ('codigo_ibge', 'codigo_tse', 'codigo_mesorregiao',
'codigo_microrregiao', 'nome', 'data_criacao', 'uf',
'is_capital', 'populacao', 'is_polo', 'idh', 'pib_ano', 'pib_total', 'pib_percapita')
}),
('Posição geográfica', {
'fields': ('latitude', 'longitude'),
}),
)
search_fields = ('search_text', 'codigo_ibge', 'codigo_tse', 'codigo_mesorregiao',
'codigo_microrregiao', 'uf__sigla')
class TelefoneAdmin(admin.ModelAdmin):
list_display = ('numero', 'tipo', 'nota')
list_display_links = ('numero',)
list_filter = ('tipo',)
radio_fields = {'tipo': admin.VERTICAL}
search_fields = ('numero', 'tipo', 'nota')
class ContatoAdmin(admin.ModelAdmin):
list_display = ('nome', 'nota', 'email', 'municipio')
list_display_links = ('nome',)
list_filter = ('nome',)
search_fields = ('nome', 'nota', 'email', 'municipio__nome', 'municipio__uf__nome')
admin.site.register(UnidadeFederativa, UnidadeFederativaAdmin)
admin.site.register(Municipio, MunicipioAdmin)
admin.site.register(Telefone, TelefoneAdmin)
admin.site.register(Contato, ContatoAdmin)

89312
sigi/apps/contatos/fixtures/initial_data.json

File diff suppressed because it is too large

278
sigi/apps/contatos/models.py

@ -0,0 +1,278 @@
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from sigi.apps.utils import SearchField
from django.core.validators import MaxValueValidator, MinValueValidator
class UnidadeFederativa(models.Model):
""" Modelo que representa um estado brasileiro
"""
REGIAO_CHOICES = (
('SL', 'Sul'),
('SD', 'Sudeste'),
('CO', 'Centro-Oeste'),
('NE', 'Nordeste'),
('NO', 'Norte'),
)
codigo_ibge = models.PositiveIntegerField(
u'código IBGE',
primary_key=True,
unique=True,
help_text='Código do estado segundo IBGE.'
)
nome = models.CharField(max_length=25)
# Campo de busca em caixa baixa sem acento
search_text = SearchField(field_names=['nome'])
sigla = models.CharField(
max_length=2,
unique=True,
help_text="Exemplo: <em>MG</em>.",
)
regiao = models.CharField('região', max_length=2, choices=REGIAO_CHOICES)
populacao = models.PositiveIntegerField('população')
populacao.list_filter_range = [100000, 1000000, 10000000]
class Meta:
ordering = ('nome',)
verbose_name = 'Unidade Federativa'
verbose_name_plural = 'Unidades Federativas'
def __unicode__(self):
return self.nome
class Municipio(models.Model):
""" Modelo para representar as cidades brasileiras
"""
codigo_ibge = models.PositiveIntegerField(
u'código IBGE',
primary_key=True,
unique=True,
help_text='Código do município segundo IBGE.'
)
# agrupamento baseado em similaridades econômicas e sociais
codigo_mesorregiao = models.PositiveIntegerField(
u'código mesorregião',
blank=True,
null=True
)
# agrupamento baseado em similaridades econômicas e sociais
codigo_microrregiao = models.PositiveIntegerField(
u'código microrregião',
blank=True,
null=True
)
# codio designado pelo Tribunal Superior Eleitoral
codigo_tse = models.PositiveIntegerField(
u'código TSE',
unique=True,
null=True,
help_text='Código do município segundo TSE.'
)
nome = models.CharField(max_length=50)
search_text = SearchField(field_names=['nome', 'uf'])
uf = models.ForeignKey(UnidadeFederativa, verbose_name='UF')
# verdadeiro se o município é capital do estado
is_capital = models.BooleanField('capital')
populacao = models.PositiveIntegerField(u'população')
populacao.list_filter_range = [10000, 100000, 1000000]
is_polo = models.BooleanField(u'pólo')
data_criacao = models.DateField(u'data de criação do município', null=True, blank=True)
# posição geográfica do município
latitude = models.DecimalField(
max_digits=10,
decimal_places=8,
null=True,
blank=True,
help_text='Exemplo: <em>-20,464</em>.'
)
longitude = models.DecimalField(
max_digits=11,
decimal_places=8,
null=True,
blank=True,
help_text='Exemplo: <em>-45,426</em>.'
)
idh = models.DecimalField(u'IDH', help_text=u'Índice de desenvolvimento Humano', max_digits=4, decimal_places=3,
validators=[MinValueValidator(0), MaxValueValidator(1)])
idh.list_filter_range = [0.500, 0.800]
pib_total = models.DecimalField(u'PIB total', max_digits=18, decimal_places=3, blank=True, null=True)
pib_percapita = models.DecimalField(u'PIB per capita', max_digits=18, decimal_places=3, blank=True, null=True)
pib_ano = models.IntegerField(u'Ano de apuração do PIB', blank=True, null=True)
class Meta:
ordering = ('nome', 'codigo_ibge')
verbose_name = 'município'
verbose_name_plural = 'municípios'
def __unicode__(self):
return "%s - %s" % (self.nome, self.uf)
def get_google_maps_url(self):
return "http://maps.google.com.br/maps/mm?ie=UTF8&hl=pt-BR&t=h&ll=%s,%s&spn=1.61886,1.812744&z=9&source=embed" % \
(self.latitude, self.longitude)
class Telefone(models.Model):
""" Modelo genérico para agrupar telefones dos modulos do sistema
"""
TELEFONE_CHOICES = (
('F', 'Fixo'),
('M', 'Móvel'),
('X', 'Fax'),
('I', 'Indefinido'),
)
numero = models.CharField(
'número',
max_length=64, # TODO: diminuir tamanho de campo após migração de dados
help_text='Exemplo: <em>(31)8851-9898</em>.',
)
tipo = models.CharField(
max_length=1,
choices=TELEFONE_CHOICES,
default= 'I'
)
nota = models.CharField(max_length=70, null=True, blank=True)
ult_alteracao = models.DateTimeField(u'Última alteração', null=True, blank=True, editable=False, auto_now=True)
# guarda o tipo do objeto (classe) vinculado a esse registro
content_type = models.ForeignKey(ContentType)
# identificador do registro na classe vinculado a esse registro
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
class Meta:
ordering = ('numero',)
unique_together = ('numero', 'tipo')
def __unicode__(self):
return unicode(self.numero)
class Contato(models.Model):
""" Modelo generico para registrar contatos vinculados aos
modulos do sistema
"""
nome = models.CharField('nome completo', max_length=120)
nome.alphabetic_filter = True
nota = models.CharField(max_length=70, blank=True)
email = models.EmailField('e-mail', blank=True)
telefones = generic.GenericRelation(Telefone)
municipio = models.ForeignKey(
Municipio,
verbose_name='município',
blank=True,
null=True,
)
# guarda o tipo do objeto (classe) vinculado a esse registro
content_type = models.ForeignKey(ContentType)
# identificador do registro na classe vinculado a esse registro
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
class Meta:
ordering = ('nome',)
verbose_name = 'contato Interlegis'
verbose_name_plural = 'contatos Interlegis'
def __unicode__(self):
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 do endereço obtido no site dos correios
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)
# campo de texto livre
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
# guarda o tipo do objeto (classe) vinculado a esse registro
content_type = models.ForeignKey(ContentType)
# identificador do registro na classe vinculado a esse registro
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 + ' ' + self.logradouro + ', ' + self.numero \
+ ' ' + self.complemento + ' - ' + self.bairro

3
sigi/settings.py

@ -36,6 +36,9 @@ INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Local apps
'sigi.apps.contatos',
)
MIDDLEWARE_CLASSES = (

Loading…
Cancel
Save