Browse Source

Finalizando a serialização pipe

tags/0.1
Davi Campos 13 years ago
parent
commit
167a258fb9
  1. 127
      pynfe/processamento/serializacao.py

127
pynfe/processamento/serializacao.py

@ -350,7 +350,7 @@ class SerializacaoPipes(Serializacao):
def exportar(self, destino, **kwargs):
pass
def _serializar_emitente(self, emitente):
def _serializar_emitente(self, emitente, retorna_string=True):
cod_municipio, municipio = obter_municipio_e_codigo(
emitente.endereco_municipio,
@ -358,7 +358,7 @@ class SerializacaoPipes(Serializacao):
)
serial_emitente_list = [
'C',
'\nC',
emitente.razao_social,
emitente.nome_fantasia,
emitente.inscricao_estadual,
@ -380,12 +380,13 @@ class SerializacaoPipes(Serializacao):
emitente.endereco_pais,
obter_pais_por_codigo(emitente.endereco_pais),
emitente.endereco_telefone,
'\n',
]
if retorna_string:
return '|'.join(serial_emitente_list)
return serial_emitente_list
def _serializar_cliente(self, cliente):
def _serializar_cliente(self, cliente, retorna_string=True):
cod_municipio, municipio = obter_municipio_e_codigo(
cliente.endereco_municipio,
@ -393,7 +394,7 @@ class SerializacaoPipes(Serializacao):
)
serial_data = [
'E',
'\nE',
cliente.razao_social,
cliente.inscricao_estadual,
cliente.inscricao_suframa,
@ -411,15 +412,16 @@ class SerializacaoPipes(Serializacao):
cliente.endereco_cep,
cliente.endereco_pais,
obter_pais_por_codigo(cliente.endereco_pais),
cliente.endereco_telefone,
'\n',
cliente.endereco_telefone
]
if retorna_string:
return '|'.join(serial_data)
return serial_data
def _serializar_produto_servico(self, produto_servico):
def _serializar_produto_servico(self, produto_servico, retorna_string=True):
serial_data = [
'I',
'\nI',
produto_servico.codigo,
produto_servico.ean,
produto_servico.descricao,
@ -441,6 +443,111 @@ class SerializacaoPipes(Serializacao):
str(produto_servico.compoe_valor_total),
produto_servico.numero_pedido,
produto_servico.numero_do_item,
'\nM',
'\nM', #IMPOSTOS
'\nN', #ICMS
'\nN06',
str(produto_servico.icms_origem),
str(produto_servico.icms_modalidade_determinacao_bc),
str(produto_servico.icms_valor),
str(produto_servico.icms_motivo_desoneracao),
'\nQ', #PIS
'\nQ02',
produto_servico.pis_tipo_calculo,
str(produto_servico.pis_valor_base_calculo),
str(produto_servico.pis_aliquota_percentual),
str(produto_servico.pis_valor),
'\nS', #COFINS
'\nS02',
produto_servico.cofins_situacao_tributaria,
str(produto_servico.cofins_valor_base_calculo),
str(produto_servico.cofins_aliquota_percentual),
str(produto_servico.cofins_valor)
]
if retorna_string:
return '|'.join(serial_data)
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, str(nota_fiscal.uf)),
nota_fiscal.codigo_numerico_aleatorio,
nota_fiscal.natureza_operacao,
nota_fiscal.forma_pagamento,
str(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'),
str(nota_fiscal.tipo_documento),
str(cod_municipio),
str(nota_fiscal.tipo_impressao_danfe),
nota_fiscal.forma_emissao,
nota_fiscal.dv_codigo_numerico_aleatorio,
str(self._ambiente),
str(nota_fiscal.finalidade_emissao),
str(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',
str(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',
str(nota_fiscal.totais_icms_base_calculo),
str(nota_fiscal.totais_icms_total),
str(nota_fiscal.totais_icms_st_base_calculo),
str(nota_fiscal.totais_icms_st_total),
str(nota_fiscal.totais_icms_total_produtos_e_servicos),
str(nota_fiscal.totais_icms_total_frete),
str(nota_fiscal.totais_icms_total_seguro),
str(nota_fiscal.totais_icms_total_desconto),
str(nota_fiscal.totais_icms_total_ii),
str(nota_fiscal.totais_icms_total_ipi),
str(nota_fiscal.totais_icms_pis),
str(nota_fiscal.totais_icms_cofins),
str(nota_fiscal.totais_icms_outras_despesas_acessorias),
str(nota_fiscal.totais_icms_total_nota),
'\nX',
str(nota_fiscal.transporte_modalidade_frete),
'\nZ',
nota_fiscal.informacoes_adicionais_interesse_fisco,
nota_fiscal.informacoes_complementares_interesse_contribuinte,
'' # End Pipe
]
if retorna_string:
return '|'.join(serial_data)
return serial_data
Loading…
Cancel
Save