← Back to team overview

openerp-brazil-team team mailing list archive

Re: Tropicalização

 

Tive que resolver esse problema do CPF/CNPJ no serviço que eu fiz, e pude
discutir com alguns engenheiros e administradores que usavam o sistema.

5) Pensamos no começo em colocar no "res.partner.address", como foi
sugerido, pelo mesmo motivo; a questão matriz/filial. Entretanto depois de
refletir melhor colocamos em "res.partner", e resolvemos a questão
matriz/filial usando o campo "parent_id".
Pois se usarmos o "parent_id" (Main Company), podemos ver e estruturar a
organização de empresas maiores (ou governamentais) usando o "Company
Architecture" que já existe (é um tree view) dentro de Partner. (Ao que me
lembro os Cases já buscam de forma recursiva dentro desta árvore de
parceiros, que nos indicou também ser um exemplo da intenção original de
quem fez).
Entendemos que o "res.partner.address" deveria ser usado como se fosse os
diversas pessoas de contato, e/ou endereços de um dado parceiro. E que o
parceiro (que conteria o CPF/CNPJ) é que deveria centralizar as notas
fiscais (invoces), vendas, cases, etc, e logo ter os dados fiscais (como
CPF/CNPJ).

Fica aí minha experiência nessa questão, e minha sugestão. :)
Grato.

Abraços,
Gabriel

2009/5/14 Luiz Franca <luiz@xxxxxxxxxxxxxxxxxxxxx>

> Boa Noite Pessoal!
>
> Agradeço a todos pela manifestação, é assim que esta grupo precisa andar.
>
> Vamos enumerar para ficar mais fácil:
>
> 1) Quanto ao nome, acho que não resta dúvidas, será necessário quebrar a
> restrição. O problema é como fazer isto por herança? Não podemos
> simplesmente alterar o módulo 'base', precisamos fazer por herança num novo
> módulo. Se alguem souber como fazer, por favor me dê o caminho das pedras,
> enquanto isto vou procurando por aqui.
>
> 2) Acho que o CNPJ/CPF tambem não podem ter restrição pelo que foi dito por
> alguns de voces, temos ai casos de prefeituras / autarquias com o mesmo
> cnpj, embora ele possa ser chave para identificação.
>
> 3)Não temos que necessáriamente ter uma restrição(unique), uma vez que todo
> objeto do OpenERP tem seu ID, que já é único, portanto outra restrição seria
> apenas pela regra do negócio, que no caso do cnpj/cpf e nome/razão social é
> dispensável pelo que deduzimos das respostas.
>
> 4) Para quem pediu, o código o preliminar está em:
> https://code.launchpad.net/openerp.pt-br-localiz, mas já adianto que ele
> tem alguns problemas. De qualquer maneira, me comprometo a disponibilizar
> novamente assim que terminar as alterações que estou fazendo, entrego em no
> máximo 1 semana. Se alquem quizer a alteração que estou fazendo antes que eu
> termine é só falar que eu mando, não tenho nenhuma restrição, o código é GPL
>
> 5) Pela questão de Matriz/Filiais acho que o cnpj/cpf devem realmente ir
> para o objeto Partner.Address.
>
> 6) Considerando que um partner no OpenERP pode ter vários endereços, isto
> não resolveria o caso das Prefeituras/autarquias? Se resolver, acredito que
> finalmente poderemos ter uma restrição Unique no CPF/CNPJ. O que acham?
>
> Para voces entenderem melhor o que estou fazendo, coloco a seguir parte dos
> atributos dos objetos.
>
> class res_partner_address(osv.osv):
>     """Partner Addresses"""
>     _name = 'res.partner.address'
>     _inherit = 'res.partner.address'
>     _columns = {
>         'location': fields.many2one('res.country.state.city', 'Localidade',
> domain="[('state_id', '=', state_id)]"),
>         'numero': fields.char('Número', size=10),
>         'state_id': fields.many2one("res.country.state", 'Estado',
> domain="[('country_id', '=', country_id)]"),
>         'country_id': fields.many2one("res.country", 'País'),
>         'tipo_pessoa': fields.selection([('F', 'Física'), ('J',
> 'Jurídica')], 'Tipo de pessoa', required=True),
>         'cpf_cnpj': fields.char('Cpf/CNPJ', size=15),
>         'pessoa_fisica': fields.one2many('res.partner.fisica',
> 'address_id', 'Pessoa_Fisica'),
>         'pessoa_juridica': fields.one2many('res.partner.juridica',
> 'address_id', 'Pessoa_Juridica'),
>      }
>
> class res_partner_juridica(osv.osv):
>     """Cadastro de pessoas juridica """
>     _name = 'res.partner.juridica'
>     _columns = {
>         'address_id' : fields.many2one('res.partner.address','Contato',
> ondelete='set null', select=True, domain=[('tipo_pessoa', '=', 'J')]),
>         'city' : fields.related
> ('partner_id','city',type='many2one',relation='res.country.state.city',string='Cidade'),
>
>         'state' : fields.related
> ('partner_id','state',type='many2one',relation='res.country.state',
> string='Estado'),
>         'country' : fields.related
> ('partner_id','country',type='char',string='País'),
>         'fantasia' : fields.char('Nome Fantasia', size=25),
>         'inscr_estadual': fields.char('Inscrição Estadual', size=20,
> required="1"),
>         'inscr_municipal': fields.char('Inscrição Municipal', size=20),
>         'suframa': fields.char('Suframa', size=10),
>         'data_fundacao': fields.date("Data da fundação"),
>         'tipo_empresa': fields.selection([('I','Individual'),
> ('L','Limitada'), ('S','Sociedade Anônima'), ('P','Administração Pública')],
> 'Tipo de Empresa', required="1"),
>      }
> class res_partner_fisica(osv.osv):
>     """Cadastro de pessoas fisicas """
>     _name = 'res.partner.fisica'
>     _columns = {
>         'address_id' : fields.many2one('res.partner.address','Contato',
> ondelete='set null', select=True, domain=[('tipo_pessoa', '=', 'F')]),
>         'city' : fields.related
> ('partner_id','city',type='many2one',relation='res.country.state.city',string='Cidade'),
>
>         'state' : fields.related
> ('partner_id','state',type='many2one',relation='res.country.state',
> string='Estado'),
>         'country' : fields.related
> ('partner_id','country',type='char',string='País'),
>         'apelido': fields.char('Apelido', size=25),
>         'identidade': fields.char('Identidade', size=20),
>         'data_emissao_identidade': fields.date("Data de emissão"),
>         'orgao_emissor_identidade': fields.char('Orgão emissor', size=6),
>         'data_nascimento': fields.date("Data de Nascimento"),
>         'estado_civil': fields.selection([('C', 'Casado'), ('S',
> 'Solteiro'), ('E', 'Desquitado'), ('D','Divorciado'), ('V','Viúvo')],
> 'Estado Civil'),
>         'sexo': fields.selection([('M', 'Masculino'), ('F', 'Feminino')],
> 'Sexo', required="1"),
>         'foto': fields.binary('Foto'),
>      }
>
>
> Como podem ver o cnpj/cpf eu inclui na classe "res.partner.address" e crie
> mais duas classes complementares para os dados de pessoa física e jurídica.
>
> Na verdade do que pretendia fazer a parte das classes já está pronta, falta
> apenas acertas as telas(o xml).
>
>
> []s
> --
> Luiz Fernando Maciel França
> Sig Informática Ltda.
> Rua João Pereira Amorim, 700
> Bairro Jardim Arizona
> 35.700-373 - Sete Lagoas - MG - Brasil
> (31)3773-1043
> Skype: lfmfsig
>
> _______________________________________________
> Mailing list: https://launchpad.net/~openerp-brazil-team<https://launchpad.net/%7Eopenerp-brazil-team>
> Post to     : openerp-brazil-team@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~openerp-brazil-team<https://launchpad.net/%7Eopenerp-brazil-team>
> More help   : https://help.launchpad.net/ListHelp
>
>

Follow ups

References