← Back to team overview

openerp-brazil-team team mailing list archive

Re: Tropicalização

 

Pessoal,

É bom lembrar que alguns arquivos eletrônicos e relatórios contábeis,
fiscais, etc deve ser enviada a razão social do cliente
(emitente/destinatário, por exemplo). Talvez no futuro possamos enviar
somente o CNPJ/CPF, mas até onde eu sei a razão social é utilizada. No
exemplo do Gabriel, Partner 2 é a razão social?

Portanto, acredito que a integridade do nome deve ser quebrada.

Celso.

-------- Mensagem original --------
De: Gabriel C. Stabel <gstabel@xxxxxxxxx>
Para: Luiz Franca <luiz@xxxxxxxxxxxxxxxxxxxxx>
Cc: OpenErp Brasil <openerp-brazil-team@xxxxxxxxxxxxxxxxxxx>

"e neste caso voce quebrou a restrição unique do name do Partner?"
Não chegamos a quebrar. Eles mexiam no nomes desta forma:
Partner 1: Universidade Federal do RS
Partner 2: Universidade Federal do RS - Departamento XXX


O nome do Partner não era a razão social, e sim um nome identificável
pelo usuário. Logo sempre era diferente (único). Por exemplo, ao invés
de "Vonpar" usariam "Coca-Cola".
A razão social ficava no nome do contato (partner.address) principal,
mas quem sabe faça mais sentido criar um campo só para isso em partner.

"Como voce fez isto? por herança ou alterou o módulo base?"
Criamos um módulo a parte, usando herança.

"Outra coisa, estas modificações que voces fizeram são GPL? voce poderia
disponibilizar o código?"
Vou pedir o código. Há muitas outras coisas no código. Não é um código
limpo.

Abs,
Gabriel

2009/5/15 Luiz Franca <luiz@xxxxxxxxxxxxxxxxxxxxx>
        Gabriel,
        
        e neste caso voce quebrou a restrição unique do name do Partner?
        
        Como voce fez isto? por herança ou alterou o módulo base? 
        
        Outra coisa, estas modificações que voces fizeram são GPL? voce
        poderia disponibilizar o código?
        
        
        []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  
        
        
        
        2009/5/15 Gabriel C. Stabel <gstabel@xxxxxxxxx>
        
        
                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
                        Post to     :
                        openerp-brazil-team@xxxxxxxxxxxxxxxxxxx
                        Unsubscribe :
                        https://launchpad.net/~openerp-brazil-team
                        More help   :
                        https://help.launchpad.net/ListHelp
                        
                        
                
        
        
        

_______________________________________________
Mailing list: https://launchpad.net/~openerp-brazil-team
Post to     : openerp-brazil-team@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~openerp-brazil-team
More help   : https://help.launchpad.net/ListHelp




Follow ups

References