예제 #1
0
    def test_geracao_chave(self):
        chave = ChaveNFe(**self.kwargs)
        str_chave = gerar_chave(chave)
        chave_correta = '52060433009911002506550120000007800267301615'
        self.assertEqual(str_chave, chave_correta,
                         "Geração de chave nf-e incorreta")

        str_chave = gerar_chave(chave, prefix='NFe')
        chave_correta = 'NFe52060433009911002506550120000007800267301615'
        self.assertEqual(str_chave, chave_correta,
                         "Geração de chave nf-e com prefixo incorreta")

        self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
        self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
예제 #2
0
    def test_geracao_chave(self):
        chave = ChaveNFe(**self.kwargs)
        str_chave = gerar_chave(chave)
        chave_correta = '52060433009911002506550120000007800267301615'
        self.assertEqual(str_chave, chave_correta,
                         "Geração de chave nf-e incorreta")

        str_chave = gerar_chave(chave, prefix='NFe')
        chave_correta = 'NFe52060433009911002506550120000007800267301615'
        self.assertEqual(str_chave, chave_correta,
                         "Geração de chave nf-e com prefixo incorreta")

        self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
        self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
예제 #3
0
def _generate_nfe_id(**kwargs):
    for item in kwargs['NFes']:
        vals = {
            'cnpj':
            item['infNFe']['emit']['cnpj_cpf'],
            'estado':
            item['infNFe']['ide']['cUF'],
            'emissao':
            '%s%s' % (item['infNFe']['ide']['dhEmi'][2:4],
                      item['infNFe']['ide']['dhEmi'][5:7]),
            'modelo':
            item['infNFe']['ide']['mod'],
            'serie':
            item['infNFe']['ide']['serie'],
            'numero':
            item['infNFe']['ide']['nNF'],
            'tipo':
            item['infNFe']['ide']['tpEmis'],
            'codigo':
            item['infNFe']['ide']['cNF'],
        }
        chave_nfe = ChaveNFe(**vals)
        chave_nfe = gerar_chave(chave_nfe, 'NFe')
        item['infNFe']['Id'] = chave_nfe
        item['infNFe']['ide']['cDV'] = chave_nfe[len(chave_nfe) - 1:]
예제 #4
0
    def action_post_validate(self):
        super(InvoiceEletronic, self).action_post_validate()
        if self.model not in ('55', '65'):
            return
        chave_dict = {
            'cnpj': re.sub('[^0-9]', '', self.company_id.cnpj_cpf),
            'estado': self.company_id.state_id.ibge_code,
            'emissao': self.data_emissao[2:4] + self.data_emissao[5:7],
            'modelo': self.model,
            'numero': self.numero,
            'serie': self.serie.code.zfill(3),
            'tipo': int(self.tipo_emissao),
            'codigo': "%08d" % self.numero_controle
        }
        self.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))

        cert = self.company_id.with_context({'bin_size': False}).nfe_a1_file
        cert_pfx = base64.decodestring(cert)

        certificado = Certificado(cert_pfx, self.company_id.nfe_a1_password)

        nfe_values = self._prepare_eletronic_invoice_values()
        lote = self._prepare_lote(self.id, nfe_values)

        xml_enviar = xml_autorizar_nfe(certificado, **lote)

        mensagens_erro = valida_nfe(xml_enviar)
        if mensagens_erro:
            raise UserError(mensagens_erro)

        self.xml_to_send = base64.encodestring(xml_enviar.encode('utf-8'))
        self.xml_to_send_name = 'nfse-enviar-%s.xml' % self.numero
예제 #5
0
 def action_post_validate(self):
     super(InvoiceEletronic, self).action_post_validate()
     for item in self:
         chave_dict = {
             'cnpj': re.sub('[^0-9]', '', item.company_id.cnpj_cpf),
             'estado': item.company_id.state_id.ibge_code,
             'emissao': item.data_emissao[2:4] + item.data_emissao[5:7],
             'modelo': item.model,
             'numero': item.numero,
             'serie': item.serie.code.zfill(3),
             'tipo': 0 if item.tipo_operacao == 'entrada' else 1,
             'codigo': item.numero_controle
         }
         item.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))
예제 #6
0
 def action_post_validate(self):
     super(InvoiceEletronic, self).action_post_validate()
     if self.model not in ('55', '65'):
         return
     for item in self:
         chave_dict = {
             'cnpj': re.sub('[^0-9]', '', item.company_id.cnpj_cpf),
             'estado': item.company_id.state_id.ibge_code,
             'emissao': item.data_emissao[2:4] + item.data_emissao[5:7],
             'modelo': item.model,
             'numero': item.numero,
             'serie': item.serie.code.zfill(3),
             'tipo': int(item.tipo_emissao),
             'codigo': "%08d" % item.numero_controle
         }
         item.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))
예제 #7
0
def _generate_nfe_id(**kwargs):
    for item in kwargs['NFes']:
        vals = {
            'cnpj': item['infNFe']['emit']['cnpj_cpf'],
            'estado': item['infNFe']['ide']['cUF'],
            'emissao': '%s%s' % (item['infNFe']['ide']['dhEmi'][2:4],
                                 item['infNFe']['ide']['dhEmi'][5:7]),
            'modelo': item['infNFe']['ide']['mod'],
            'serie': item['infNFe']['ide']['serie'],
            'numero': item['infNFe']['ide']['nNF'],
            'tipo': item['infNFe']['ide']['tpEmis'],
            'codigo': item['infNFe']['ide']['cNF'],
        }
        chave_nfe = ChaveNFe(**vals)
        chave_nfe = gerar_chave(chave_nfe, 'NFe')
        item['infNFe']['Id'] = chave_nfe
        item['infNFe']['ide']['cDV'] = chave_nfe[len(chave_nfe) - 1:]
예제 #8
0
    def action_post_validate(self):
        super(InvoiceEletronic, self).action_post_validate()
        if self.model not in ('55', '65'):
            return
        chave_dict = {
            'cnpj': re.sub('[^0-9]', '', self.company_id.cnpj_cpf),
            'estado': self.company_id.state_id.ibge_code,
            'emissao': self.data_emissao[2:4] + self.data_emissao[5:7],
            'modelo': self.model,
            'numero': self.numero,
            'serie': self.serie.code.zfill(3),
            'tipo': int(self.tipo_emissao),
            'codigo': "%08d" % self.numero_controle
        }
        self.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))

        cert = self.company_id.with_context({'bin_size': False}).nfe_a1_file
        cert_pfx = base64.decodestring(cert)

        certificado = Certificado(cert_pfx, self.company_id.nfe_a1_password)

        nfe_values = self._prepare_eletronic_invoice_values()

        lote = self._prepare_lote(self.id, nfe_values)
        xml_enviar = xml_autorizar_nfe(certificado, **lote)
        # _logger.info("============================xml_enviar before===========================%s", xml_enviar)
        # xml_enviar1 = xml_enviar.split('<dest>')[0]
        # xml_enviar2 = xml_enviar.split('<dest>')[1]
        # if self.ind_dest == '3':
        #    xml_enviar = xml_enviar1+'<dest><idEstrangeiro>'+re.sub('[^0-9]', '', self.partner_id.cnpj_cpf or '')+'</idEstrangeiro>'+xml_enviar2 if self.partner_id.cnpj_cpf else xml_enviar1+'<dest><idEstrangeiro/>'+xml_enviar2
        #    _logger.info("========================xml_enviar after===========================%s", xml_enviar)

        mensagens_erro = valida_nfe(xml_enviar)
        _logger.info(
            "========================mensagens_erro===========================%s",
            mensagens_erro)
        if mensagens_erro:
            raise UserError(mensagens_erro)

        self.xml_to_send = base64.encodestring(xml_enviar.encode('utf-8'))
        self.xml_to_send_name = 'nfse-enviar-%s.xml' % self.numero
        _logger.info(
            "========================self.xml_to_send_name===========================%s",
            self.xml_to_send_name)
예제 #9
0
def _generate_nfe_id(**kwargs):
    for item in kwargs["NFes"]:
        vals = {
            "cnpj": item["infNFe"]["emit"]["cnpj_cpf"],
            "estado": item["infNFe"]["ide"]["cUF"],
            "emissao": "%s%s"
            % (
                item["infNFe"]["ide"]["dhEmi"][2:4],
                item["infNFe"]["ide"]["dhEmi"][5:7],
            ),
            "modelo": item["infNFe"]["ide"]["mod"],
            "serie": item["infNFe"]["ide"]["serie"],
            "numero": item["infNFe"]["ide"]["nNF"],
            "tipo": item["infNFe"]["ide"]["tpEmis"],
            "codigo": item["infNFe"]["ide"]["cNF"],
        }
        chave_nfe = ChaveNFe(**vals)
        chave_nfe = gerar_chave(chave_nfe, "NFe")
        item["infNFe"]["Id"] = chave_nfe
        item["infNFe"]["ide"]["cDV"] = chave_nfe[len(chave_nfe) - 1 :]
예제 #10
0
    def action_post_validate(self):
        chave_dict = {
            'cnpj': re.sub('[^0-9]', '', self.company_id.l10n_br_cnpj_cpf),
            'estado': self.company_id.state_id.l10n_br_ibge_code,
            'emissao': self.data_emissao.strftime("%y%m"),
            'modelo': '55' if self.model == 'nfe' else '65',
            'numero': self.numero,
            'serie': self.serie_documento.zfill(3),
            'tipo': int(self.tipo_emissao),
            'codigo': "%08d" % self.numero_controle
        }
        self.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))

        cert = self.company_id.with_context({
            'bin_size': False
        }).l10n_br_certificate
        cert_pfx = base64.decodestring(cert)

        certificado = Certificado(cert_pfx,
                                  self.company_id.l10n_br_cert_password)

        nfe_values = self._prepare_eletronic_invoice_values()

        lote = self._prepare_lote(self.id, nfe_values)

        xml_enviar = xml_autorizar_nfe(certificado, **lote)

        mensagens_erro = valida_nfe(xml_enviar)
        if mensagens_erro:
            raise UserError(mensagens_erro)

        self.sudo().write({
            'xml_to_send':
            base64.encodestring(xml_enviar.encode('utf-8')),
            'xml_to_send_name':
            'nfe-enviar-%s.xml' % self.numero,
        })