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
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
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
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
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
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
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
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