예제 #1
0
    def _serializar_emitente(self, emitente, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            dict(codigo=emitente.endereco_cod_municipio, municipio=emitente.endereco_municipio), emitente.endereco_uf
        )

        serial_emitente_list = [
            "\nC",
            emitente.razao_social,
            emitente.nome_fantasia,
            emitente.inscricao_estadual,
            emitente.inscricao_estadual_subst_tributaria,
            emitente.inscricao_municipal,
            emitente.cnae_fiscal,
            emitente.codigo_de_regime_tributario,
            "\nC02",
            emitente.cnpj,
            "\nC05",
            emitente.endereco_logradouro,
            emitente.endereco_numero,
            emitente.endereco_complemento,
            emitente.endereco_bairro,
            cod_municipio,
            municipio,
            obter_uf_por_codigo(emitente.endereco_uf),
            emitente.endereco_cep.replace("-", ""),
            emitente.endereco_pais,
            obter_pais_por_codigo(emitente.endereco_pais),
            emitente.endereco_telefone,
        ]

        if retorna_string:
            return "|".join(map(str, serial_emitente_list))
        return serial_emitente_list
예제 #2
0
    def _serializar_cliente(self, cliente, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            dict(codigo=cliente.endereco_cod_municipio, municipio=cliente.endereco_municipio), cliente.endereco_uf
        )

        serial_data = [
            "\nE",
            cliente.razao_social,
            "2",  # indIEDest
            cliente.inscricao_estadual,
            cliente.inscricao_suframa,
            "",  # IM
            cliente.email,
            "\nE02" if cliente.tipo_documento == "CNPJ" else "\nE03",
            cliente.numero_documento,
            "\nE05",
            cliente.endereco_logradouro,
            cliente.endereco_numero,
            cliente.endereco_complemento,
            cliente.endereco_bairro,
            cod_municipio,
            municipio,
            obter_uf_por_codigo(cliente.endereco_uf),
            cliente.endereco_cep.replace("-", ""),
            cliente.endereco_pais,
            obter_pais_por_codigo(cliente.endereco_pais),
            cliente.endereco_telefone,
        ]

        if retorna_string:
            return "|".join(map(str, serial_data))
        return serial_data
예제 #3
0
    def _serializar_cliente(self, cliente, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            dict(codigo=cliente.endereco_cod_municipio,
                 municipio=cliente.endereco_municipio), cliente.endereco_uf)

        serial_data = [
            '\nE',
            cliente.razao_social,
            '2',  # indIEDest
            cliente.inscricao_estadual,
            cliente.inscricao_suframa,
            '',  # IM
            cliente.email,
            '\nE02' if cliente.tipo_documento == 'CNPJ' else '\nE03',
            cliente.numero_documento,
            '\nE05',
            cliente.endereco_logradouro,
            cliente.endereco_numero,
            cliente.endereco_complemento,
            cliente.endereco_bairro,
            cod_municipio,
            municipio,
            obter_uf_por_codigo(cliente.endereco_uf),
            cliente.endereco_cep.replace('-', ''),
            cliente.endereco_pais,
            obter_pais_por_codigo(cliente.endereco_pais),
            cliente.endereco_telefone
        ]

        if retorna_string:
            return '|'.join(map(str, serial_data))
        return serial_data
예제 #4
0
    def _serializar_emitente(self, emitente, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            dict(codigo=emitente.endereco_cod_municipio,
                 municipio=emitente.endereco_municipio), emitente.endereco_uf)

        serial_emitente_list = [
            '\nC',
            emitente.razao_social,
            emitente.nome_fantasia,
            emitente.inscricao_estadual,
            emitente.inscricao_estadual_subst_tributaria,
            emitente.inscricao_municipal,
            emitente.cnae_fiscal,
            emitente.codigo_de_regime_tributario,
            '\nC02',
            emitente.cnpj,
            '\nC05',
            emitente.endereco_logradouro,
            emitente.endereco_numero,
            emitente.endereco_complemento,
            emitente.endereco_bairro,
            cod_municipio,
            municipio,
            obter_uf_por_codigo(emitente.endereco_uf),
            emitente.endereco_cep.replace('-', ''),
            emitente.endereco_pais,
            obter_pais_por_codigo(emitente.endereco_pais),
            emitente.endereco_telefone,
        ]

        if retorna_string:
            return '|'.join(map(str, serial_emitente_list))
        return serial_emitente_list
예제 #5
0
    def _serializar_cliente(self, cliente, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            dict(codigo=cliente.endereco_cod_municipio,
                 municipio=cliente.endereco_municipio),
            cliente.endereco_uf
        )

        serial_data = [
            '\nE',
            cliente.razao_social,
            '2', # indIEDest
            cliente.inscricao_estadual,
            cliente.inscricao_suframa,
            '', # IM
            cliente.email,
            '\nE02' if cliente.tipo_documento == 'CNPJ' else '\nE03',
            cliente.numero_documento,
            '\nE05',
            cliente.endereco_logradouro,
            cliente.endereco_numero,
            cliente.endereco_complemento,
            cliente.endereco_bairro,
            cod_municipio,
            municipio,
            obter_uf_por_codigo(cliente.endereco_uf),
            cliente.endereco_cep.replace('-',''),
            cliente.endereco_pais,
            obter_pais_por_codigo(cliente.endereco_pais),
            cliente.endereco_telefone
        ]

        if retorna_string:
            return '|'.join(map(str,serial_data))
        return serial_data
예제 #6
0
    def _serializar_nota_fiscal(self, nota_fiscal, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            dict(codigo="", municipio=nota_fiscal.municipio), nota_fiscal.uf
        )

        if nota_fiscal.emitente.endereco_uf == nota_fiscal.cliente.endereco_uf:
            id_dest = "1"
        else:
            id_dest = "2"

        tz = time.strftime("%z")
        tz = "{}:{}".format(tz[:-2], tz[-2:])

        serial_data = [
            "A",
            "3.10",
            nota_fiscal.identificador_unico,
            "\nB",
            CODIGOS_ESTADOS.get(nota_fiscal.uf, nota_fiscal.uf),
            nota_fiscal.codigo_numerico_aleatorio,
            nota_fiscal.natureza_operacao,
            nota_fiscal.forma_pagamento,
            nota_fiscal.modelo,
            nota_fiscal.serie,
            nota_fiscal.numero_nf,
            nota_fiscal.data_emissao.strftime("%Y-%m-%dT%H:%M:%S") + tz,
            nota_fiscal.data_saida_entrada.strftime("%Y-%m-%dT%H:%M:%S") + tz,
            nota_fiscal.tipo_documento,
            id_dest,  # idDest
            cod_municipio,
            nota_fiscal.tipo_impressao_danfe,
            nota_fiscal.forma_emissao,
            nota_fiscal.dv_codigo_numerico_aleatorio,
            self._ambiente,
            nota_fiscal.finalidade_emissao,
            nota_fiscal.cliente_final,  # indFinal
            nota_fiscal.indicador_presencial,  # indPres
            nota_fiscal.processo_emissao,
            "%s %s" % (self._nome_aplicacao, nota_fiscal.versao_processo_emissao),
            "",  # dhCont - Data e Hora da entrada em contingência
            "",  # xJust - Justificativa da entrada em contingência
        ]

        serial_data += self._serializar_emitente(nota_fiscal.emitente, retorna_string=False)
        serial_data += self._serializar_cliente(nota_fiscal.cliente, retorna_string=False)

        # Produtos e serviços
        produtos_servicos = enumerate(nota_fiscal.produtos_e_servicos, start=1)
        for num, produto_servico in produtos_servicos:
            num_produto = ["\nH", num, "" ""]  # Número do produto na lista  # End Pipe
            serial_data += num_produto
            serial_data += self._serializar_produto_servico(produto_servico, retorna_string=False)

        serial_data += [
            "\nW",  # Valores totais NFe,
            "\nW02",
            formatar_decimal(nota_fiscal.totais_icms_base_calculo),
            formatar_decimal(nota_fiscal.totais_icms_total),
            "",  # ICMSDeson
            formatar_decimal(nota_fiscal.totais_icms_st_base_calculo),
            formatar_decimal(nota_fiscal.totais_icms_st_total),
            formatar_decimal(nota_fiscal.totais_icms_total_produtos_e_servicos),
            formatar_decimal(nota_fiscal.totais_icms_total_frete),
            formatar_decimal(nota_fiscal.totais_icms_total_seguro),
            formatar_decimal(nota_fiscal.totais_icms_total_desconto),
            formatar_decimal(nota_fiscal.totais_icms_total_ii),
            formatar_decimal(nota_fiscal.totais_icms_total_ipi),
            formatar_decimal(nota_fiscal.totais_icms_pis),
            formatar_decimal(nota_fiscal.totais_icms_cofins),
            formatar_decimal(nota_fiscal.totais_icms_outras_despesas_acessorias),
            formatar_decimal(nota_fiscal.totais_icms_total_nota),
            "",  # vTotTrib
            "\nX",
            nota_fiscal.transporte_modalidade_frete,
            "\nZ",
            nota_fiscal.informacoes_adicionais_interesse_fisco,
            nota_fiscal.informacoes_complementares_interesse_contribuinte,
            "",  # End Pipe
        ]

        if retorna_string:
            try:
                return "|".join(map(remover_acentos, serial_data))
            except TypeError as err:
                enum_args = "\n".join(map(lambda x: str(x[0]) + " " + str(x[1]), enumerate(serial_data)))
                message = err.message + "\n" + enum_args
                raise TypeError(message)

        return serial_data
예제 #7
0
    def _serializar_nota_fiscal(self, nota_fiscal, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            dict(codigo='', municipio=nota_fiscal.municipio), nota_fiscal.uf)

        if nota_fiscal.emitente.endereco_uf == nota_fiscal.cliente.endereco_uf:
            id_dest = '1'
        else:
            id_dest = '2'

        tz = time.strftime("%z")
        tz = "{}:{}".format(tz[:-2], tz[-2:])

        serial_data = [
            'A',
            '3.10',
            nota_fiscal.identificador_unico,
            '\nB',
            CODIGOS_ESTADOS.get(nota_fiscal.uf, nota_fiscal.uf),
            nota_fiscal.codigo_numerico_aleatorio,
            nota_fiscal.natureza_operacao,
            nota_fiscal.forma_pagamento,
            nota_fiscal.modelo,
            nota_fiscal.serie,
            nota_fiscal.numero_nf,
            nota_fiscal.data_emissao.strftime('%Y-%m-%dT%H:%M:%S') + tz,
            nota_fiscal.data_saida_entrada.strftime('%Y-%m-%dT%H:%M:%S') + tz,
            nota_fiscal.tipo_documento,
            id_dest,  # idDest
            cod_municipio,
            nota_fiscal.tipo_impressao_danfe,
            nota_fiscal.forma_emissao,
            nota_fiscal.dv_codigo_numerico_aleatorio,
            self._ambiente,
            nota_fiscal.finalidade_emissao,
            nota_fiscal.cliente_final,  # indFinal
            nota_fiscal.indicador_presencial,  # indPres
            nota_fiscal.processo_emissao,
            '%s %s' %
            (self._nome_aplicacao, nota_fiscal.versao_processo_emissao),
            '',  # dhCont - Data e Hora da entrada em contingência
            '',  # xJust - Justificativa da entrada em contingência
        ]

        serial_data += self._serializar_emitente(nota_fiscal.emitente,
                                                 retorna_string=False)
        serial_data += self._serializar_cliente(nota_fiscal.cliente,
                                                retorna_string=False)

        # Produtos e serviços
        produtos_servicos = enumerate(nota_fiscal.produtos_e_servicos, start=1)
        for num, produto_servico in produtos_servicos:
            num_produto = [
                '\nH',
                num,  # Número do produto na lista
                ''
                ''  # End Pipe
            ]
            serial_data += num_produto
            serial_data += self._serializar_produto_servico(
                produto_servico, retorna_string=False)

        serial_data += [
            '\nW',  #Valores totais NFe,
            '\nW02',
            formatar_decimal(nota_fiscal.totais_icms_base_calculo),
            formatar_decimal(nota_fiscal.totais_icms_total),
            '',  # ICMSDeson
            formatar_decimal(nota_fiscal.totais_icms_st_base_calculo),
            formatar_decimal(nota_fiscal.totais_icms_st_total),
            formatar_decimal(
                nota_fiscal.totais_icms_total_produtos_e_servicos),
            formatar_decimal(nota_fiscal.totais_icms_total_frete),
            formatar_decimal(nota_fiscal.totais_icms_total_seguro),
            formatar_decimal(nota_fiscal.totais_icms_total_desconto),
            formatar_decimal(nota_fiscal.totais_icms_total_ii),
            formatar_decimal(nota_fiscal.totais_icms_total_ipi),
            formatar_decimal(nota_fiscal.totais_icms_pis),
            formatar_decimal(nota_fiscal.totais_icms_cofins),
            formatar_decimal(
                nota_fiscal.totais_icms_outras_despesas_acessorias),
            formatar_decimal(nota_fiscal.totais_icms_total_nota),
            '',  # vTotTrib
            '\nX',
            nota_fiscal.transporte_modalidade_frete,
            '\nZ',
            nota_fiscal.informacoes_adicionais_interesse_fisco,
            nota_fiscal.informacoes_complementares_interesse_contribuinte,
            ''  # End Pipe
        ]

        if retorna_string:
            try:
                return '|'.join(map(remover_acentos, serial_data))
            except TypeError as err:
                enum_args = '\n'.join(
                    map(lambda x: str(x[0]) + ' ' + str(x[1]),
                        enumerate(serial_data)))
                message = err.message + '\n' + enum_args
                raise TypeError(message)

        return serial_data
예제 #8
0
    def _serializar_nota_fiscal(self, nota_fiscal, retorna_string=True):

        cod_municipio, municipio = obter_municipio_e_codigo(
            nota_fiscal.municipio,
            nota_fiscal.uf
        )

        serial_data = [
            'A',
            '2.00', # Versão da NFe | notasfiscal.modelo está em int()
            nota_fiscal.identificador_unico,
            '\nB',
            CODIGOS_ESTADOS.get(nota_fiscal.uf, nota_fiscal.uf),
            nota_fiscal.codigo_numerico_aleatorio,
            nota_fiscal.natureza_operacao,
            nota_fiscal.forma_pagamento,
            nota_fiscal.modelo,
            nota_fiscal.serie,
            nota_fiscal.numero_nf,
            nota_fiscal.data_emissao.strftime('%Y-%m-%d'),
            nota_fiscal.data_saida_entrada.strftime('%Y-%m-%d'),
            nota_fiscal.hora_saida_entrada.strftime('%H:%M:%S'),
            nota_fiscal.tipo_documento,
            cod_municipio,
            nota_fiscal.tipo_impressao_danfe,
            nota_fiscal.forma_emissao,
            nota_fiscal.dv_codigo_numerico_aleatorio,
            self._ambiente,
            nota_fiscal.finalidade_emissao,
            nota_fiscal.processo_emissao,
            '%s %s' % (self._nome_aplicacao, 
                                nota_fiscal.versao_processo_emissao),
            '', # dhCont - Data e Hora da entrada em contingência
            '', # xJust - Justificativa da entrada em contingência
        ]

        serial_data += self._serializar_emitente(nota_fiscal.emitente,
                                                        retorna_string=False)
        serial_data += self._serializar_cliente(nota_fiscal.cliente,
                                                        retorna_string=False)

        # Produtos e serviços
        produtos_servicos = enumerate(nota_fiscal.produtos_e_servicos, start=1)
        for num, produto_servico in produtos_servicos:
            num_produto = [
                '\nH',
                num, # Número do produto na lista
                ''
                '' # End Pipe
            ]
            serial_data += num_produto
            serial_data += self._serializar_produto_servico(produto_servico,
                                                        retorna_string=False)

        serial_data += [
            '\nW', #Valores totais NFe,
            '\nW02',
            formatar_decimal(nota_fiscal.totais_icms_base_calculo),
            formatar_decimal(nota_fiscal.totais_icms_total),
            formatar_decimal(nota_fiscal.totais_icms_st_base_calculo),
            formatar_decimal(nota_fiscal.totais_icms_st_total),
            formatar_decimal(nota_fiscal.totais_icms_total_produtos_e_servicos),
            formatar_decimal(nota_fiscal.totais_icms_total_frete),
            formatar_decimal(nota_fiscal.totais_icms_total_seguro),
            formatar_decimal(nota_fiscal.totais_icms_total_desconto),
            formatar_decimal(nota_fiscal.totais_icms_total_ii),
            formatar_decimal(nota_fiscal.totais_icms_total_ipi),
            formatar_decimal(nota_fiscal.totais_icms_pis),
            formatar_decimal(nota_fiscal.totais_icms_cofins),
            formatar_decimal(nota_fiscal.totais_icms_outras_despesas_acessorias),
            formatar_decimal(nota_fiscal.totais_icms_total_nota),
            '\nX',
            nota_fiscal.transporte_modalidade_frete,
            '\nZ',
            nota_fiscal.informacoes_adicionais_interesse_fisco,
            nota_fiscal.informacoes_complementares_interesse_contribuinte,
            '' # End Pipe
        ]

        if retorna_string:
            try:
                return '|'.join(map(safe_str, serial_data))
            except TypeError as err:
                enum_args = '\n'.join(
                    map(
                        lambda x: str(x[0]) + ' ' + str(x[1]), 
                        enumerate(serial_data)
                    )
                )
                message = err.message + '\n' + enum_args
                raise TypeError(message)

        return serial_data