Code

Ticket #19845: models.2.py

File models.2.py, 10.3 KB (added by eltonplima@…, 17 months ago)

I've sent the wrong file.

Line 
1# -*- coding: utf-8 -*-
2from __future__ import unicode_literals
3
4from django.db import models
5
6from ci.consts import VERBOSE_GRUPO_PLURAL
7from ci.fields import CharTitleField
8from ci.fields import CharLowerCaseField
9from ci.models import Base
10
11from ..consts import VERBOSE_OPERADORA_TELEFONIA
12from ..endereco.consts import VERBOSE_LOGRADOURO
13from ..endereco.models import Logradouro
14from ..models import Email
15from ..models import Telefone
16from ..tipo.consts import VERBOSE_TIPO_ENDERECO
17from ..tipo.consts import VERBOSE_TIPO_EMAIL
18from ..tipo.consts import VERBOSE_TIPO_PAGINAWEB
19from ..tipo.consts import VERBOSE_TIPO_TELEFONE
20from ..tipo.models import TipoEmail
21from ..tipo.models import TipoEndereco
22from ..tipo.models import TipoPaginaWeb
23from ..tipo.models import TipoTelefone
24from ..models import OperadoraTelefonia
25
26from .consts import VERBOSE_CARGO
27from .consts import VERBOSE_CARGO_PLURAL
28from .consts import VERBOSE_EMAIL_PESSOA
29from .consts import VERBOSE_EMAIL_PESSOA_PLURAL
30from .consts import VERBOSE_ENDERECO_PESSOA
31from .consts import VERBOSE_ENDERECO_PESSOA_PLURAL
32from .consts import VERBOSE_ENDERECO_ELETRONICO
33from .consts import VERBOSE_NOME
34from .consts import VERBOSE_PAGINA_WEB_PESSOA
35from .consts import VERBOSE_PAGINA_WEB_PESSOA_PLURAL
36from .consts import VERBOSE_PESSOA_BASE
37from .consts import VERBOSE_PESSOA_BASE_PLURAL
38from .consts import VERBOSE_RESPONSAVEL_FINANCEIRO
39from .consts import VERBOSE_RESPONSAVEL_FINANCEIRO_PLURAL
40from .consts import VERBOSE_TELEFONE_PESSOA
41from .consts import VERBOSE_TELEFONE_PESSOA_PLURAL
42from .consts import VERBOSE_USUARIO
43from .consts import VERBOSE_USUARIO_PLURAL
44from .consts import VERBOSE_USUARIO_TERMINAL_SERVICE
45from .consts import VERBOSE_USUARIO_TERMINAL_SERVICE_PLURAL
46from .consts import VERBOSE_USUARIO_TERMINAL_SERVICE_ATIVO
47from .consts import VERBOSE_PESSOA_BASE_TIPO_PESSOA
48from .consts import VERBOSE_NUMERO
49from .consts import VERBOSE_COMPLEMENTO
50from .consts import VERBOSE_EMAIL_PESSOA_PADRAO
51from .consts import VERBOSE_ENDERECO_PESSOA_PADRAO
52from .consts import VERBOSE_TELEFONE_PESSOA_PADRAO
53from django.contrib.auth.models import AbstractBaseUser
54
55
56class PessoaBase(Base):
57    nome = CharTitleField(db_index = True,
58                          max_length = 255,
59                          verbose_name = VERBOSE_NOME,)
60    observacao = models.TextField(null=True, blank=True)
61
62    class Meta:
63        db_table = 'cadastro_pessoa'
64        ordering = ['nome',]
65        verbose_name = VERBOSE_PESSOA_BASE
66        verbose_name_plural = VERBOSE_PESSOA_BASE_PLURAL
67       
68    def get_tipo_pessoa(self):
69        try:
70            retorno = self.pessoafisica.cpf
71        except:
72            try:               
73                retorno = self.pessoajuridica.cnpj
74            except:
75                retorno = ''
76        return '%s (%s)' % (self.nome,
77                            retorno,) 
78    get_tipo_pessoa.short_description = VERBOSE_PESSOA_BASE_TIPO_PESSOA
79   
80    def get_endereco_padrao(self):
81        """ Retorna o endereço padrão da pessoa.
82        """
83        endereco = None
84
85        try:
86            endereco = self.enderecopessoa_set.get(padrao=True)
87        except: 
88            pass
89
90        return endereco
91    get_endereco_padrao.short_description = VERBOSE_ENDERECO_PESSOA
92
93    def get_municipio(self):
94        return self.get_endereco_padrao().logradouro.bairro.municipio
95
96    def get_estado(self):
97        return self.get_municipio().estado
98
99    def get_telefone_padrao(self):
100        """ Retorna o telefone padrão da pessoa.
101        """
102        telefone = "Nenhum"
103
104        try:
105            telefone = self.telefonepessoa_set.get(padrao=True)
106        except: 
107            pass
108
109        return telefone
110    get_telefone_padrao.short_description = VERBOSE_TELEFONE_PESSOA
111   
112    def get_email_padrao(self):
113        """ Retorna o email padrão da pessoa.
114        """
115        email = "Nenhum"
116
117        try:
118            email = self.emailpessoa_set.get(padrao=True)
119        except: 
120            pass
121
122        return email
123    get_email_padrao.short_description = VERBOSE_EMAIL_PESSOA
124   
125    def get_paginaweb_padrao(self):
126        """ Retorna a página web padrão da pessoa.
127        """
128        paginaweb = "Nenhum"
129
130        try:
131            paginaweb = self.paginawebpessoa_set.get(padrao=True)
132        except: 
133            pass
134
135        return paginaweb
136    get_paginaweb_padrao.short_description = VERBOSE_PAGINA_WEB_PESSOA
137   
138    def __unicode__(self):               
139        return self.get_tipo_pessoa()
140
141
142class Cargo(Base):
143    nome = CharTitleField(max_length = 128,
144                          unique = True,
145                          verbose_name = VERBOSE_CARGO,)
146
147    class Meta:
148        db_table = 'cadastro_pessoa_cargo'
149        ordering = ['nome',]
150        verbose_name = VERBOSE_CARGO
151        verbose_name_plural = VERBOSE_CARGO_PLURAL
152
153    def __unicode__(self):
154        return self.nome 
155
156
157class EmailPessoa(Email):
158    tipo_email = models.ForeignKey(TipoEmail,
159                                   verbose_name = VERBOSE_TIPO_EMAIL,)
160    padrao = models.BooleanField(unique = True,
161                                 verbose_name = VERBOSE_EMAIL_PESSOA_PADRAO,)
162    pessoa_base = models.ForeignKey(PessoaBase,
163                                    verbose_name = VERBOSE_PESSOA_BASE,)
164
165    class Meta:
166        db_table = 'cadastro_pessoa_email'
167        ordering = ['tipo_email',]
168        verbose_name = VERBOSE_EMAIL_PESSOA
169        verbose_name_plural = VERBOSE_EMAIL_PESSOA_PLURAL
170
171    def __unicode__(self):
172        return self.endereco
173
174
175class TelefonePessoa(Telefone):
176    tipo_telefone = models.ForeignKey(TipoTelefone,
177                                      verbose_name = VERBOSE_TIPO_TELEFONE,)
178    operadora_telefonia = models.ForeignKey(OperadoraTelefonia,
179                                            verbose_name = VERBOSE_OPERADORA_TELEFONIA,)
180    pessoa_base = models.ForeignKey(PessoaBase,
181                                    verbose_name = VERBOSE_PESSOA_BASE,)
182    padrao = models.BooleanField(unique = True,
183                                 verbose_name = VERBOSE_TELEFONE_PESSOA_PADRAO,)
184
185    class Meta:
186        db_table = 'cadastro_pessoa_telefone'
187        ordering = ['tipo_telefone',]
188        verbose_name = VERBOSE_TELEFONE_PESSOA
189        verbose_name_plural = VERBOSE_TELEFONE_PESSOA_PLURAL
190
191    def __unicode__(self):
192        return self.numero
193
194
195class EnderecoPessoa(Base):
196    tipo_endereco = models.ForeignKey(TipoEndereco,
197                                      verbose_name = VERBOSE_TIPO_ENDERECO,)
198    pessoa_base = models.ForeignKey(PessoaBase,
199                                    verbose_name = VERBOSE_PESSOA_BASE,)
200    numero = models.CharField(default = "S/N",
201                              max_length = 64, 
202                              verbose_name = VERBOSE_NUMERO,)
203    complemento = models.TextField(blank = True, 
204                                   null = True,
205                                   verbose_name = VERBOSE_COMPLEMENTO,)
206    logradouro = models.ForeignKey(Logradouro,
207                                   verbose_name = VERBOSE_LOGRADOURO)
208    padrao = models.BooleanField(verbose_name = VERBOSE_ENDERECO_PESSOA_PADRAO)
209
210    class Meta:
211        db_table = 'cadastro_pessoa_endereco'
212        ordering = ['logradouro',]
213        verbose_name = VERBOSE_ENDERECO_PESSOA
214        verbose_name_plural = VERBOSE_ENDERECO_PESSOA_PLURAL
215
216    def __unicode__(self):
217        return self.logradouro.nome
218
219
220class PaginaWEBPessoa(Base):
221    tipo_pagina_web = models.ForeignKey(TipoPaginaWeb,
222                                        verbose_name = VERBOSE_TIPO_PAGINAWEB,)
223    pessoa_base = models.ForeignKey(PessoaBase,
224                                    verbose_name = VERBOSE_PESSOA_BASE,)
225    endereco_eletronico = CharLowerCaseField(db_index = True,
226                                             max_length = 255,
227                                             verbose_name = VERBOSE_ENDERECO_ELETRONICO,)
228
229    class Meta:
230        db_table = 'cadastro_pessoa_paginaweb'
231        ordering = ['endereco_eletronico',]
232        verbose_name = VERBOSE_PAGINA_WEB_PESSOA
233        verbose_name_plural = VERBOSE_PAGINA_WEB_PESSOA_PLURAL
234
235    def __unicode__(self):
236        return self.endereco_eletronico
237
238
239class Usuario(AbstractBaseUser):
240    """ Víncula uma pessoa como sendo do tipo usuário.
241    """
242    pessoa_base = models.ForeignKey(PessoaBase,
243                                    unique = True,
244                                    verbose_name = VERBOSE_PESSOA_BASE,)
245
246    class Meta:
247        db_table = 'cadastro_pessoa_usuario'
248        ordering = ['pessoa_base',]
249        verbose_name = VERBOSE_USUARIO
250        verbose_name_plural = VERBOSE_USUARIO_PLURAL
251
252    def __unicode__(self):
253        return self.pessoa_base.get_tipo_pessoa()
254
255    def get_grupos(self):
256        return ', '.join([grupo.name for grupo in self.groups.all()])
257    get_grupos.short_description=VERBOSE_GRUPO_PLURAL
258
259
260class UsuarioTerminalService(Base):
261    """ Víncula uma pessoa como usuário do terminal service.
262   
263    Além de víncular uma pessoa como usuário do serviço de terminal service,
264    ainda pode ser controlado se a mesma está ou não ativa no serviço.
265    """
266    pessoa_base = models.ForeignKey(PessoaBase,                                   
267                                    unique = True,
268                                    verbose_name = VERBOSE_USUARIO_TERMINAL_SERVICE,)
269    ativo = models.BooleanField(default = True,
270                                verbose_name = VERBOSE_USUARIO_TERMINAL_SERVICE_ATIVO,)
271
272    class Meta:
273        db_table = 'cadastro_pessoa_usuarioterminalservice'
274        ordering = ['pessoa_base',]
275        verbose_name = VERBOSE_USUARIO_TERMINAL_SERVICE
276        verbose_name_plural = VERBOSE_USUARIO_TERMINAL_SERVICE_PLURAL
277
278    def __unicode__(self):
279        return self.pessoa_base.get_tipo_pessoa()
280
281
282class ResponsavelFinanceiro(Base):
283    """ Pessoa responsável por pagar as licenças dos sistemas.
284    """
285    pessoa_base = models.ForeignKey(PessoaBase, 
286                                    unique = True,
287                                    verbose_name = VERBOSE_RESPONSAVEL_FINANCEIRO,)
288
289    class Meta:
290        db_table = 'cadastro_pessoa_responsavelfinanceiro'
291        ordering = ['pessoa_base',]
292        verbose_name = VERBOSE_RESPONSAVEL_FINANCEIRO
293        verbose_name_plural = VERBOSE_RESPONSAVEL_FINANCEIRO_PLURAL
294
295    def __unicode__(self):
296        return self.pessoa_base.get_tipo_pessoa()