예제 #1
0
    def _serializar_cliente(self, cliente, tag_raiz='dest', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do cliente
        etree.SubElement(raiz, cliente.tipo_documento).text = so_numeros(cliente.numero_documento)
        etree.SubElement(raiz, 'xNome').text = cliente.razao_social
        etree.SubElement(raiz, 'IE').text = cliente.inscricao_estadual

        # Endereço
        endereco = etree.SubElement(raiz, 'enderDest')
        etree.SubElement(endereco, 'xLgr').text = cliente.endereco_logradouro
        etree.SubElement(endereco, 'nro').text = cliente.endereco_numero
        etree.SubElement(endereco, 'xCpl').text = cliente.endereco_complemento
        etree.SubElement(endereco, 'xBairro').text = cliente.endereco_bairro
        etree.SubElement(endereco, 'cMun').text = cliente.endereco_municipio
        etree.SubElement(endereco, 'xMun').text = obter_municipio_por_codigo(
                cliente.endereco_municipio, cliente.endereco_uf,
                )
        etree.SubElement(endereco, 'UF').text = cliente.endereco_uf
        etree.SubElement(endereco, 'CEP').text = so_numeros(cliente.endereco_cep)
        etree.SubElement(endereco, 'cPais').text = cliente.endereco_pais
        etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(cliente.endereco_pais)
        etree.SubElement(endereco, 'fone').text = cliente.endereco_telefone

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #2
0
 def identificador_unico(self):
     # Monta 'Id' da tag raiz <infNFe>
     # Ex.: NFe35080599999090910270550010000000011518005123
     key = "%(uf)s%(ano)s%(mes)s%(cnpj)s%(mod)s%(serie)s%(nNF)s%(tpEmis)s%(cNF)s" % {
         'uf': CODIGOS_ESTADOS[self.uf],
         'ano': self.data_emissao.strftime('%y'),
         'mes': self.data_emissao.strftime('%m'),
         'cnpj': so_numeros(self.emitente.cnpj),
         'mod': self.modelo,
         'serie': str(self.serie).zfill(3),
         'nNF': str(self.numero_nf).zfill(9),
         'tpEmis': str(self.forma_emissao),
         'cNF': self._codigo_numerico_aleatorio(),
     }
     return "NFe%(uf)s%(ano)s%(mes)s%(cnpj)s%(mod)s%(serie)s%(nNF)s%(tpEmis)s%(cNF)s%(cDV)s" % {
         'uf': CODIGOS_ESTADOS[self.uf],
         'ano': self.data_emissao.strftime('%y'),
         'mes': self.data_emissao.strftime('%m'),
         'cnpj': so_numeros(self.emitente.cnpj),
         'mod': self.modelo,
         'serie': str(self.serie).zfill(3),
         'nNF': str(self.numero_nf).zfill(9),
         'tpEmis': str(self.forma_emissao),
         'cNF': str(self.codigo_numerico_aleatorio),
         'cDV': self._dv_codigo_numerico(key),
     }
예제 #3
0
    def _serializar_emitente(self, emitente, tag_raiz="emit", retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do emitente
        etree.SubElement(raiz, "CNPJ").text = so_numeros(emitente.cnpj)
        etree.SubElement(raiz, "xNome").text = emitente.razao_social
        etree.SubElement(raiz, "xFant").text = emitente.nome_fantasia
        etree.SubElement(raiz, "IE").text = emitente.inscricao_estadual

        # Endereço
        endereco = etree.SubElement(raiz, "enderEmit")
        etree.SubElement(endereco, "xLgr").text = emitente.endereco_logradouro
        etree.SubElement(endereco, "nro").text = emitente.endereco_numero
        etree.SubElement(endereco, "xCpl").text = emitente.endereco_complemento
        etree.SubElement(endereco, "xBairro").text = emitente.endereco_bairro
        etree.SubElement(endereco, "cMun").text = emitente.endereco_municipio
        etree.SubElement(endereco, "xMun").text = obter_municipio_por_codigo(
            emitente.endereco_municipio, emitente.endereco_uf
        )
        etree.SubElement(endereco, "UF").text = emitente.endereco_uf
        etree.SubElement(endereco, "CEP").text = so_numeros(emitente.endereco_cep)
        etree.SubElement(endereco, "cPais").text = emitente.endereco_pais
        etree.SubElement(endereco, "xPais").text = obter_pais_por_codigo(emitente.endereco_pais)
        etree.SubElement(endereco, "fone").text = emitente.endereco_telefone

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #4
0
    def _serializar_emitente(self, emitente, tag_raiz='emit', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do emitente
        etree.SubElement(raiz, 'CNPJ').text = so_numeros(emitente.cnpj)
        etree.SubElement(raiz, 'xNome').text = emitente.razao_social
        etree.SubElement(raiz, 'xFant').text = emitente.nome_fantasia
        etree.SubElement(raiz, 'IE').text = emitente.inscricao_estadual

        # Endereço
        endereco = etree.SubElement(raiz, 'enderEmit')
        etree.SubElement(endereco, 'xLgr').text = emitente.endereco_logradouro
        etree.SubElement(endereco, 'nro').text = emitente.endereco_numero
        etree.SubElement(endereco, 'xCpl').text = emitente.endereco_complemento
        etree.SubElement(endereco, 'xBairro').text = emitente.endereco_bairro
        etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
            emitente.endereco_municipio, emitente.endereco_uf)
        etree.SubElement(endereco, 'xMun').text = emitente.endereco_municipio
        etree.SubElement(endereco, 'UF').text = emitente.endereco_uf
        etree.SubElement(endereco, 'CEP').text = so_numeros(emitente.endereco_cep)
        etree.SubElement(endereco, 'cPais').text = emitente.endereco_pais
        etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(emitente.endereco_pais)
        etree.SubElement(endereco, 'fone').text = emitente.endereco_telefone

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #5
0
 def identificador_unico(self):
     # Monta 'Id' da tag raiz <infNFe>
     # Ex.: NFe35080599999090910270550010000000011518005123
     key = "%(uf)s%(ano)s%(mes)s%(cnpj)s%(mod)s%(serie)s%(nNF)s%(tpEmis)s%(cNF)s"%{
             'uf': CODIGOS_ESTADOS[self.uf],
             'ano': self.data_emissao.strftime('%y'),
             'mes': self.data_emissao.strftime('%m'),
             'cnpj': so_numeros(self.emitente.cnpj),
             'mod': self.modelo,
             'serie': str(self.serie).zfill(3),
             'nNF': str(self.numero_nf).zfill(9),
             'tpEmis': str(self.forma_emissao),
             'cNF': self._codigo_numerico_aleatorio(),
             }
     return "NFe%(uf)s%(ano)s%(mes)s%(cnpj)s%(mod)s%(serie)s%(nNF)s%(tpEmis)s%(cNF)s%(cDV)s"%{
             'uf': CODIGOS_ESTADOS[self.uf],
             'ano': self.data_emissao.strftime('%y'),
             'mes': self.data_emissao.strftime('%m'),
             'cnpj': so_numeros(self.emitente.cnpj),
             'mod': self.modelo,
             'serie': str(self.serie).zfill(3),
             'nNF': str(self.numero_nf).zfill(9),
             'tpEmis': str(self.forma_emissao),
             'cNF': str(self.codigo_numerico_aleatorio),
             'cDV': self._dv_codigo_numerico(key),
             }
    def _serializar_consulta(self, consulta, tag_raiz='Consulta', retorna_string=True):

        raiz = etree.Element(tag_raiz)

        etree.SubElement(raiz, 'ModeloDocumento').text = 'NFCe'
        etree.SubElement(raiz, 'Versao').text = self._versao
        etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente)
        etree.SubElement(raiz, 'CnpjEmpresa').text = so_numeros(consulta.cnpj)
        etree.SubElement(raiz, 'CnpjEmissor').text = so_numeros(consulta.cnpj)

        if consulta.numero_inicial:
            etree.SubElement(raiz, 'NumeroInicial').text = str(consulta.numero_inicial)
        if consulta.numero_final:
            etree.SubElement(raiz, 'NumeroFinal').text = str(consulta.numero_final)
        etree.SubElement(raiz, 'Serie').text = str(consulta.serie)

        if consulta.chave_acesso:
            etree.SubElement(raiz, 'ChaveAcesso').text = str(consulta.chave_acesso)

        if consulta.data_inicial and consulta.data_final:
            etree.SubElement(
                raiz, 'DataEmissaoInicial').text = consulta.data_inicial.strftime("%Y-%m-%d")
            etree.SubElement(
                raiz, 'DataEmissaoFinal').text = consulta.data_final.strftime("%Y-%m-%d")

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #7
0
    def _serializar_cliente(self,
                            cliente,
                            tag_raiz='dest',
                            retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do cliente
        etree.SubElement(raiz, cliente.tipo_documento).text = so_numeros(
            cliente.numero_documento)
        etree.SubElement(raiz, 'xNome').text = cliente.razao_social
        etree.SubElement(raiz, 'IE').text = cliente.inscricao_estadual

        # Endereço
        endereco = etree.SubElement(raiz, 'enderDest')
        etree.SubElement(endereco, 'xLgr').text = cliente.endereco_logradouro
        etree.SubElement(endereco, 'nro').text = cliente.endereco_numero
        etree.SubElement(endereco, 'xCpl').text = cliente.endereco_complemento
        etree.SubElement(endereco, 'xBairro').text = cliente.endereco_bairro
        etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
            cliente.endereco_municipio, cliente.endereco_uf)
        etree.SubElement(endereco, 'xMun').text = cliente.endereco_municipio
        etree.SubElement(endereco, 'UF').text = cliente.endereco_uf
        etree.SubElement(endereco,
                         'CEP').text = so_numeros(cliente.endereco_cep)
        etree.SubElement(endereco, 'cPais').text = cliente.endereco_pais
        etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(
            cliente.endereco_pais)
        etree.SubElement(endereco, 'fone').text = cliente.endereco_telefone

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #8
0
    def _serializar_emitente(self,
                             emitente,
                             tag_raiz='emit',
                             retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do emitente
        etree.SubElement(raiz, 'CNPJ').text = so_numeros(emitente.cnpj)
        etree.SubElement(raiz, 'xNome').text = emitente.razao_social
        etree.SubElement(raiz, 'xFant').text = emitente.nome_fantasia
        etree.SubElement(raiz, 'IE').text = emitente.inscricao_estadual

        # Endereço
        endereco = etree.SubElement(raiz, 'enderEmit')
        etree.SubElement(endereco, 'xLgr').text = emitente.endereco_logradouro
        etree.SubElement(endereco, 'nro').text = emitente.endereco_numero
        etree.SubElement(endereco, 'xCpl').text = emitente.endereco_complemento
        etree.SubElement(endereco, 'xBairro').text = emitente.endereco_bairro
        etree.SubElement(endereco, 'cMun').text = emitente.endereco_municipio
        etree.SubElement(endereco, 'xMun').text = obter_municipio_por_codigo(
            emitente.endereco_municipio,
            emitente.endereco_uf,
        )
        etree.SubElement(endereco, 'UF').text = emitente.endereco_uf
        etree.SubElement(endereco,
                         'CEP').text = so_numeros(emitente.endereco_cep)
        etree.SubElement(endereco, 'cPais').text = emitente.endereco_pais
        etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(
            emitente.endereco_pais)
        etree.SubElement(endereco, 'fone').text = emitente.endereco_telefone

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
    def _serializar_empresa(self, empresa, tag_raiz='CadastroEmpresa',
                            retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do empresa
        etree.SubElement(raiz, 'EmpCNPJ').text = so_numeros(empresa.cnpj)
        etree.SubElement(raiz, 'EmpRazSocial').text = empresa.razao_social
        etree.SubElement(raiz, 'EmpNomFantasia').text = empresa.nome_fantasia
        etree.SubElement(raiz, 'EmpApelido').text = empresa.apelido
        etree.SubElement(raiz, 'EmpIE').text = empresa.inscricao_estadual

        # Inscricao Municipal
        if empresa.inscricao_municipal:
            etree.SubElement(raiz, 'EmpIM').text = so_numeros(empresa.inscricao_municipal)

        # Endereço
        etree.SubElement(raiz, 'EmpEndereco').text = empresa.endereco_logradouro
        etree.SubElement(raiz, 'EmpNumero').text = empresa.endereco_numero
        if empresa.endereco_complemento:
            etree.SubElement(raiz, 'EmpComplemento').text = empresa.endereco_complemento
        etree.SubElement(raiz, 'EmpBairro').text = empresa.endereco_bairro
        etree.SubElement(raiz, 'MunCodigo').text = obter_codigo_por_municipio(
            empresa.endereco_municipio, empresa.endereco_uf)
        etree.SubElement(raiz, 'EmpCEP').text = so_numeros(empresa.endereco_cep)

        if empresa.endereco_telefone:
            etree.SubElement(raiz, 'EmpTelefone').text = empresa.endereco_telefone

        etree.SubElement(raiz, 'EmpCNAE').text = empresa.cnae_fiscal
        etree.SubElement(raiz, 'EmpCRT').text = empresa.codigo_de_regime_tributario
        etree.SubElement(raiz, 'EmpIEST').text = ''
        etree.SubElement(raiz, 'EmpMarca').text = ''
        etree.SubElement(raiz, 'EmpMarcaExtensao').text = ''
        etree.SubElement(raiz, 'EmpEmail').text = empresa.email
        etree.SubElement(raiz, 'EmpTpoEndereco').text = empresa.tipo_endereco

        # Certificado
        raiz.append(self._serializar_certificado(empresa, retorna_string=False))

        # Usuarios
        raiz.append(self._serializar_usuario(empresa, retorna_string=False))

        # Parametros
        raiz.append(self._serializar_parametros(empresa, retorna_string=False))

        # Licenciamento
        raiz.append(self._serializar_licenciamento(empresa, retorna_string=False))

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #10
0
    def _serializar_emitente(self,
                             emitente,
                             tag_raiz='emit',
                             retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do emitente
        etree.SubElement(raiz, 'CNPJ').text = so_numeros(emitente.cnpj)
        etree.SubElement(raiz, 'xNome').text = emitente.razao_social
        etree.SubElement(raiz, 'xFant').text = emitente.nome_fantasia
        # Endereço
        endereco = etree.SubElement(raiz, 'enderEmit')
        etree.SubElement(endereco, 'xLgr').text = emitente.endereco_logradouro
        etree.SubElement(endereco, 'nro').text = emitente.endereco_numero
        if emitente.endereco_complemento:
            etree.SubElement(endereco,
                             'xCpl').text = emitente.endereco_complemento
        etree.SubElement(endereco, 'xBairro').text = emitente.endereco_bairro
        etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
            emitente.endereco_municipio, emitente.endereco_uf)
        etree.SubElement(endereco, 'xMun').text = emitente.endereco_municipio
        etree.SubElement(endereco, 'UF').text = emitente.endereco_uf
        etree.SubElement(endereco,
                         'CEP').text = so_numeros(emitente.endereco_cep)
        etree.SubElement(endereco, 'cPais').text = emitente.endereco_pais
        etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(
            emitente.endereco_pais)
        if emitente.endereco_telefone:
            etree.SubElement(endereco,
                             'fone').text = emitente.endereco_telefone
        etree.SubElement(raiz, 'IE').text = emitente.inscricao_estadual
        # Apenas NF-e
        if emitente.inscricao_estadual_subst_tributaria:
            etree.SubElement(
                raiz,
                'IEST').text = emitente.inscricao_estadual_subst_tributaria
        # Inscricao Municipal
        if emitente.inscricao_municipal:
            etree.SubElement(raiz, 'IM').text = emitente.inscricao_municipal
            # Campo Opcional. Pode ser informado quando a Inscrição Municipal (id:C19) for informada.
            if emitente.cnae_fiscal:
                etree.SubElement(raiz, 'CNAE').text = emitente.cnae_fiscal
        etree.SubElement(raiz,
                         'CRT').text = emitente.codigo_de_regime_tributario
        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #11
0
    def _serializar_transportadora(self,
                                   transportadora,
                                   tag_raiz='transporta',
                                   retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados da transportadora
        etree.SubElement(raiz,
                         transportadora.tipo_documento).text = so_numeros(
                             transportadora.numero_documento)
        etree.SubElement(raiz, 'xNome').text = transportadora.razao_social
        etree.SubElement(raiz, 'IE').text = transportadora.inscricao_estadual

        # Endereço
        etree.SubElement(raiz,
                         'xEnder').text = transportadora.endereco_logradouro
        etree.SubElement(raiz, 'cMun').text = transportadora.endereco_municipio
        etree.SubElement(raiz, 'xMun').text = obter_municipio_por_codigo(
            transportadora.endereco_municipio,
            transportadora.endereco_uf,
        )
        etree.SubElement(raiz, 'UF').text = transportadora.endereco_uf

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #12
0
    def _serializar_entrega_retirada(self,
                                     entrega_retirada,
                                     tag_raiz='entrega',
                                     retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados da entrega/retirada
        etree.SubElement(raiz,
                         entrega_retirada.tipo_documento).text = so_numeros(
                             entrega_retirada.numero_documento)

        # Endereço
        etree.SubElement(raiz,
                         'xLgr').text = entrega_retirada.endereco_logradouro
        etree.SubElement(raiz, 'nro').text = entrega_retirada.endereco_numero
        etree.SubElement(raiz,
                         'xCpl').text = entrega_retirada.endereco_complemento
        etree.SubElement(raiz,
                         'xBairro').text = entrega_retirada.endereco_bairro
        etree.SubElement(raiz,
                         'cMun').text = entrega_retirada.endereco_municipio
        etree.SubElement(raiz, 'xMun').text = obter_municipio_por_codigo(
            entrega_retirada.endereco_municipio,
            entrega_retirada.endereco_uf,
        )
        etree.SubElement(raiz, 'UF').text = entrega_retirada.endereco_uf

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #13
0
    def _serializar_evento(self, evento, tag_raiz='EnvioEvento', retorna_string=True):

        raiz = etree.Element(tag_raiz)

        etree.SubElement(raiz, 'ModeloDocumento').text = 'NFCe'
        etree.SubElement(raiz, 'Versao').text = self._versao

        # timezone Brasília -03:00
        tz = time.strftime("%z")

        event = etree.SubElement(raiz, 'Evento')
        etree.SubElement(event, 'NtfCnpjEmissor').text = so_numeros(evento.cnpj)
        etree.SubElement(event, 'NtfNumero').text = evento.numero
        etree.SubElement(event, 'NtfSerie').text = evento.serie
        etree.SubElement(event, 'tpAmb').text = str(self._ambiente)

        eve_info = etree.SubElement(event, 'EveInf')
        etree.SubElement(eve_info, 'EveDh').text = evento.data_emissao.strftime(
            '%Y-%m-%dT%H:%M:%S')
        etree.SubElement(eve_info, 'EveFusoHorario').text = "{}:{}".format(
            tz[:-2], tz[-2:])
        etree.SubElement(eve_info, 'EveTp').text = evento.tp_evento
        etree.SubElement(eve_info, 'EvenSeq').text = str(evento.n_seq_evento)

        eve_det = etree.SubElement(eve_info, 'Evedet')
        etree.SubElement(eve_det, 'EveDesc').text = evento.descricao
        etree.SubElement(eve_det, 'EvenProt').text = evento.protocolo
        etree.SubElement(eve_det, 'EvexJust').text = evento.justificativa

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #14
0
    def _serializar_cliente(self, cliente, modelo, tag_raiz="dest", retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do cliente (distinatario)
        etree.SubElement(raiz, cliente.tipo_documento).text = so_numeros(cliente.numero_documento)
        if not self._so_cpf:
            if cliente.razao_social:
                etree.SubElement(raiz, "xNome").text = cliente.razao_social
            endereco = etree.SubElement(raiz, "enderDest")
            etree.SubElement(endereco, "xLgr").text = cliente.endereco_logradouro
            etree.SubElement(endereco, "nro").text = cliente.endereco_numero
            if cliente.endereco_complemento:
                etree.SubElement(endereco, "xCpl").text = cliente.endereco_complemento
            etree.SubElement(endereco, "xBairro").text = cliente.endereco_bairro
            etree.SubElement(endereco, "cMun").text = obter_codigo_por_municipio(
                cliente.endereco_municipio, cliente.endereco_uf
            )
            etree.SubElement(endereco, "xMun").text = cliente.endereco_municipio
            etree.SubElement(endereco, "UF").text = cliente.endereco_uf
            etree.SubElement(endereco, "CEP").text = so_numeros(cliente.endereco_cep)
            etree.SubElement(endereco, "cPais").text = cliente.endereco_pais
            etree.SubElement(endereco, "xPais").text = obter_pais_por_codigo(cliente.endereco_pais)
            if cliente.endereco_telefone:
                etree.SubElement(endereco, "fone").text = cliente.endereco_telefone
        # Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista; 2 – Contribuinte isento de inscrição; 9 – Não Contribuinte
        if cliente.indicador_ie == 9:
            # 9 – Não Contribuinte
            etree.SubElement(raiz, "indIEDest").text = "9"
        elif (cliente.indicador_ie == 2 or cliente.isento_icms) or cliente.inscricao_estadual.upper() == "ISENTO":
            etree.SubElement(raiz, "indIEDest").text = "2"
        else:
            # Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista;
            etree.SubElement(raiz, "indIEDest").text = str(cliente.indicador_ie)
            etree.SubElement(raiz, "IE").text = cliente.inscricao_estadual
        # Suframa
        if cliente.inscricao_suframa:
            etree.SubElement(raiz, "ISUF").text = cliente.inscricao_suframa
        # Inscrição Municipal do tomador do serviço
        if cliente.inscricao_municipal:
            etree.SubElement(raiz, "IM").text = cliente.inscricao_municipal
        # E-mail
        if cliente.email:
            etree.SubElement(raiz, "email").text = cliente.email
        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #15
0
파일: serializacao.py 프로젝트: psnma/PyNFe
    def _serializar_cliente(self, cliente, modelo, tag_raiz='dest', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do cliente (distinatario)
        etree.SubElement(raiz, cliente.tipo_documento).text = so_numeros(cliente.numero_documento)
        if cliente.razao_social:
            etree.SubElement(raiz, 'xNome').text = cliente.razao_social
        if not self._so_cpf:
            endereco = etree.SubElement(raiz, 'enderDest')
            etree.SubElement(endereco, 'xLgr').text = cliente.endereco_logradouro
            etree.SubElement(endereco, 'nro').text = cliente.endereco_numero
            if cliente.endereco_complemento:
                etree.SubElement(endereco, 'xCpl').text = cliente.endereco_complemento
            etree.SubElement(endereco, 'xBairro').text = cliente.endereco_bairro
            etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
                cliente.endereco_municipio, cliente.endereco_uf)
            etree.SubElement(endereco, 'xMun').text = cliente.endereco_municipio
            etree.SubElement(endereco, 'UF').text = cliente.endereco_uf
            etree.SubElement(endereco, 'CEP').text = so_numeros(cliente.endereco_cep)
            etree.SubElement(endereco, 'cPais').text = cliente.endereco_pais
            etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(cliente.endereco_pais)
            if cliente.endereco_telefone:
                etree.SubElement(endereco, 'fone').text = cliente.endereco_telefone
        #Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista; 2 – Contribuinte isento de inscrição; 9 – Não Contribuinte
        if cliente.isento_icms or cliente.inscricao_estadual.upper() == 'ISENTO':    
            etree.SubElement(raiz, 'indIEDest').text = str(2)
            etree.SubElement(raiz, 'IE').text = 'ISENTO'
        elif cliente.indicador_ie == 9:
            # 9 – Não Contribuinte
            etree.SubElement(raiz, 'indIEDest').text = str(9)
        else:
            # Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista;
            etree.SubElement(raiz, 'indIEDest').text = cliente.indicador_ie
            etree.SubElement(raiz, 'IE').text = cliente.inscricao_estadual
        # Suframa
        if cliente.inscricao_suframa:
            etree.SubElement(raiz, 'ISUF').text = cliente.inscricao_suframa
        # Inscrição Municipal do tomador do serviço
        if cliente.inscricao_municipal:
            etree.SubElement(raiz, 'IM').text = cliente.inscricao_municipal
        # E-mail
        if cliente.email:
            etree.SubElement(raiz, 'email').text = cliente.email
        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #16
0
    def _serializar_cliente(self, cliente, modelo, tag_raiz='dest', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do cliente (distinatario)
        etree.SubElement(raiz, cliente.tipo_documento).text = so_numeros(cliente.numero_documento)
        if not self._so_cpf:
            if cliente.razao_social:
                etree.SubElement(raiz, 'xNome').text = cliente.razao_social
            endereco = etree.SubElement(raiz, 'enderDest')
            etree.SubElement(endereco, 'xLgr').text = cliente.endereco_logradouro
            etree.SubElement(endereco, 'nro').text = cliente.endereco_numero
            if cliente.endereco_complemento:
                etree.SubElement(endereco, 'xCpl').text = cliente.endereco_complemento
            etree.SubElement(endereco, 'xBairro').text = cliente.endereco_bairro
            etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
                cliente.endereco_municipio, cliente.endereco_uf)
            etree.SubElement(endereco, 'xMun').text = cliente.endereco_municipio
            etree.SubElement(endereco, 'UF').text = cliente.endereco_uf
            etree.SubElement(endereco, 'CEP').text = so_numeros(cliente.endereco_cep)
            etree.SubElement(endereco, 'cPais').text = cliente.endereco_pais
            etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(cliente.endereco_pais)
            if cliente.endereco_telefone:
                etree.SubElement(endereco, 'fone').text = cliente.endereco_telefone
        #Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista; 2 – Contribuinte isento de inscrição; 9 – Não Contribuinte
        if cliente.indicador_ie == 9:
            # 9 – Não Contribuinte
            etree.SubElement(raiz, 'indIEDest').text = '9'
        elif (cliente.indicador_ie == 2 or cliente.isento_icms) or cliente.inscricao_estadual.upper() == 'ISENTO':
            etree.SubElement(raiz, 'indIEDest').text = '2'
        else:
            # Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista;
            etree.SubElement(raiz, 'indIEDest').text = str(cliente.indicador_ie)
            etree.SubElement(raiz, 'IE').text = cliente.inscricao_estadual
        # Suframa
        if cliente.inscricao_suframa:
            etree.SubElement(raiz, 'ISUF').text = cliente.inscricao_suframa
        # Inscrição Municipal do tomador do serviço
        if cliente.inscricao_municipal:
            etree.SubElement(raiz, 'IM').text = cliente.inscricao_municipal
        # E-mail
        if cliente.email:
            etree.SubElement(raiz, 'email').text = cliente.email
        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #17
0
    def _serializar_pulo(self, consulta, tag_raiz='PuloNumeracao', retorna_string=True):

        raiz = etree.Element(tag_raiz)

        etree.SubElement(raiz, 'ModeloDocumento').text = 'NFCe'
        etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente)
        etree.SubElement(raiz, 'CnpjEmpresa').text = so_numeros(consulta.cnpj)
        etree.SubElement(raiz, 'DocEmtCNPJ').text = so_numeros(consulta.cnpj)
        etree.SubElement(raiz, 'Serie').text = str(consulta.serie)
        etree.SubElement(
            raiz, 'DataEmissaoInicial').text = consulta.data_inicial.strftime("%Y-%m-%d")
        etree.SubElement(
            raiz, 'DataEmissaoFinal').text = consulta.data_final.strftime("%Y-%m-%d")

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #18
0
    def inutilizar_faixa_numeracao(self, numero_inicial, numero_final, emitente, certificado,
            senha, ano=None, serie='1', justificativa=''):
        post = '/nfeweb/services/nfestatusservico.asmx'

        # Valores default
        ano = str(ano or datetime.date.today().year)[-2:]
        uf = CODIGOS_ESTADOS[emitente.endereco_uf]
        cnpj = so_numeros(emitente.cnpj)

        # Identificador da TAG a ser assinada formada com Código da UF + Ano (2 posições) +
        #  CNPJ + modelo + série + nro inicial e nro final precedida do literal “ID”
        id_unico = 'ID%(uf)s%(ano)s%(cnpj)s%(modelo)s%(serie)s%(num_ini)s%(num_fin)s'%{
                'uf': uf,
                'ano': ano,
                'cnpj': cnpj,
                'modelo': '55',
                'serie': serie.zfill(3),
                'num_ini': str(numero_inicial).zfill(9),
                'num_fin': str(numero_final).zfill(9),
                }

        # Monta XML do corpo da requisição # FIXME
        raiz = etree.Element('inutNFe', xmlns="http://www.portalfiscal.inf.br/nfe", versao="1.07")
        inf_inut = etree.SubElement(raiz, 'infInut', Id=id_unico)
        etree.SubElement(inf_inut, 'tpAmb').text = str(self._ambiente)
        etree.SubElement(inf_inut, 'xServ').text = 'INUTILIZAR'
        etree.SubElement(inf_inut, 'cUF').text = uf
        etree.SubElement(inf_inut, 'ano').text = ano
        etree.SubElement(inf_inut, 'CNPJ').text = emitente.cnpj
        etree.SubElement(inf_inut, 'mod').text = '55'
        etree.SubElement(inf_inut, 'serie').text = serie
        etree.SubElement(inf_inut, 'nNFIni').text = str(numero_inicial)
        etree.SubElement(inf_inut, 'nNFFin').text = str(numero_final)
        etree.SubElement(inf_inut, 'xJust').text = justificativa
        #dados = etree.tostring(raiz, encoding='utf-8', xml_declaration=True)

        # Efetua assinatura
        assinatura = self._assinatura(certificado, senha)
        dados = assinatura.assinar_etree(etree.ElementTree(raiz), retorna_xml=True)

        # Monta XML para envio da requisição
        xml = self._construir_xml_soap(
                metodo='nfeRecepcao2', # XXX
                tag_metodo='nfeInutilizacaoNF', # XXX
                cabecalho=self._cabecalho_soap(),
                dados=dados,
                )

        # Chama método que efetua a requisição POST no servidor SOAP
        retorno = self._post(post, xml, self._post_header())

        # Transforma o retorno em etree # TODO
        #retorno = etree.parse(StringIO(retorno))

        return retorno
예제 #19
0
    def inutilizar_faixa_numeracao(self, numero_inicial, numero_final, emitente, certificado, senha, ano=None, serie='1', justificativa=''):
        post = '/nfeweb/services/nfestatusservico.asmx'
        metodo = 'NfeInutilizacao2'

        # Valores default
        ano = str(ano or datetime.date.today().year)[-2:]
        uf = CODIGOS_ESTADOS[emitente.endereco_uf]
        cnpj = so_numeros(emitente.cnpj)

        # Identificador da TAG a ser assinada formada com Código da UF + Ano (2 posições) +
        #  CNPJ + modelo + série + nro inicial e nro final precedida do literal “ID”
        id_unico = 'ID%(uf)s%(ano)s%(cnpj)s%(modelo)s%(serie)s%(num_ini)s%(num_fin)s'%{
                'uf': uf,
                'ano': ano,
                'cnpj': cnpj,
                'modelo': '55',
                'serie': serie.zfill(3),
                'num_ini': str(numero_inicial).zfill(9),
                'num_fin': str(numero_final).zfill(9),
                }

        # Monta XML do corpo da requisição # FIXME
        raiz = etree.Element('inutNFe', xmlns="http://www.portalfiscal.inf.br/nfe", versao="1.07")
        inf_inut = etree.SubElement(raiz, 'infInut', Id=id_unico)
        etree.SubElement(inf_inut, 'tpAmb').text = str(self._ambiente)
        etree.SubElement(inf_inut, 'xServ').text = 'INUTILIZAR'
        etree.SubElement(inf_inut, 'cUF').text = uf
        etree.SubElement(inf_inut, 'ano').text = ano
        etree.SubElement(inf_inut, 'CNPJ').text = emitente.cnpj
        etree.SubElement(inf_inut, 'mod').text = '55'
        etree.SubElement(inf_inut, 'serie').text = serie
        etree.SubElement(inf_inut, 'nNFIni').text = str(numero_inicial)
        etree.SubElement(inf_inut, 'nNFFin').text = str(numero_final)
        etree.SubElement(inf_inut, 'xJust').text = justificativa
        #dados = etree.tostring(raiz, encoding='utf-8', xml_declaration=True)

        # Efetua assinatura
        assinatura = self._assinatura(certificado, senha)
        dados = assinatura.assinar_etree(etree.ElementTree(raiz), retorna_xml=True)

        # Monta XML para envio da requisição
        xml = self._construir_xml_soap(
                metodo='nfeRecepcao2', # XXX
                tag_metodo='nfeInutilizacaoNF', # XXX
                cabecalho=self._cabecalho_soap(),
                dados=dados,
                )

        # Chama método que efetua a requisição POST no servidor SOAP
        retorno = self._post(post, xml, self._post_header())

        # Transforma o retorno em etree # TODO
        #retorno = etree.parse(StringIO(retorno))

        return retorno
예제 #20
0
파일: comunicacao.py 프로젝트: yurilq/PyNFe
    def inutilizacao(self, modelo, cnpj, numero_inicial, numero_final, justificativa='', ano=None, serie='1'):
        """
        Serviço destinado ao atendimento de solicitações de inutilização de numeração.
        :param modelo: Modelo da nota
        :param cnpj: CNPJda empresa
        :param numero_inicial: Número inicial
        :param numero_final: Número final
        :param justificativa: Justificativa
        :param ano: Ano
        :param serie:  Série
        :return:
        """

        # url do servico
        url = self._get_url(modelo=modelo, consulta='INUTILIZACAO')

        # Valores default
        ano = str(ano or datetime.date.today().year)[-2:]
        uf = CODIGOS_ESTADOS[self.uf.upper()]
        cnpj = so_numeros(cnpj)

        # Identificador da TAG a ser assinada formada com Código da UF + Ano (2 posições) +
        #  CNPJ + modelo + série + nro inicial e nro final precedida do literal “ID”
        id_unico = 'ID%(uf)s%(ano)s%(cnpj)s%(modelo)s%(serie)s%(num_ini)s%(num_fin)s' % {
            'uf': uf,
            'ano': ano,
            'cnpj': cnpj,
            'modelo': '55' if modelo == 'nfe' else '65',  # 55=NF-e; 65=NFC-e;
            'serie': serie.zfill(3),
            'num_ini': str(numero_inicial).zfill(9),
            'num_fin': str(numero_final).zfill(9),
        }

        # Monta XML do corpo da requisição # FIXME
        raiz = etree.Element('inutNFe', versao=VERSAO_PADRAO, xmlns=NAMESPACE_NFE)
        inf_inut = etree.SubElement(raiz, 'infInut', Id=id_unico)
        etree.SubElement(inf_inut, 'tpAmb').text = str(self._ambiente)
        etree.SubElement(inf_inut, 'xServ').text = 'INUTILIZAR'
        etree.SubElement(inf_inut, 'cUF').text = uf
        etree.SubElement(inf_inut, 'ano').text = ano
        etree.SubElement(inf_inut, 'CNPJ').text = cnpj
        etree.SubElement(inf_inut, 'mod').text = '55' if modelo == 'nfe' else '65'  # 55=NF-e; 65=NFC-e
        etree.SubElement(inf_inut, 'serie').text = serie
        etree.SubElement(inf_inut, 'nNFIni').text = str(numero_inicial)
        etree.SubElement(inf_inut, 'nNFFin').text = str(numero_final)
        etree.SubElement(inf_inut, 'xJust').text = justificativa

        # assinatura
        a1 = AssinaturaA1(self.certificado, self.certificado_senha)
        xml = a1.assinar(raiz)

        # Monta XML para envio da requisição
        xml = self._construir_xml_soap('NFeInutilizacao4', xml)
        # Faz request no Servidor da Sefaz e retorna resposta
        return self._post(url, xml)
예제 #21
0
    def _serializar_emitente(self, emitente, tag_raiz="emit", retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do emitente
        etree.SubElement(raiz, "CNPJ").text = so_numeros(emitente.cnpj)
        etree.SubElement(raiz, "xNome").text = emitente.razao_social
        etree.SubElement(raiz, "xFant").text = emitente.nome_fantasia
        # Endereço
        endereco = etree.SubElement(raiz, "enderEmit")
        etree.SubElement(endereco, "xLgr").text = emitente.endereco_logradouro
        etree.SubElement(endereco, "nro").text = emitente.endereco_numero
        if emitente.endereco_complemento:
            etree.SubElement(endereco, "xCpl").text = emitente.endereco_complemento
        etree.SubElement(endereco, "xBairro").text = emitente.endereco_bairro
        etree.SubElement(endereco, "cMun").text = obter_codigo_por_municipio(
            emitente.endereco_municipio, emitente.endereco_uf
        )
        etree.SubElement(endereco, "xMun").text = emitente.endereco_municipio
        etree.SubElement(endereco, "UF").text = emitente.endereco_uf
        etree.SubElement(endereco, "CEP").text = so_numeros(emitente.endereco_cep)
        etree.SubElement(endereco, "cPais").text = emitente.endereco_pais
        etree.SubElement(endereco, "xPais").text = obter_pais_por_codigo(emitente.endereco_pais)
        if emitente.endereco_telefone:
            etree.SubElement(endereco, "fone").text = emitente.endereco_telefone
        etree.SubElement(raiz, "IE").text = emitente.inscricao_estadual
        # Apenas NF-e
        if emitente.inscricao_estadual_subst_tributaria:
            etree.SubElement(raiz, "IEST").text = emitente.inscricao_estadual_subst_tributaria
        # Inscricao Municipal
        if emitente.inscricao_municipal:
            etree.SubElement(raiz, "IM").text = emitente.inscricao_municipal
            # Campo Opcional. Pode ser informado quando a Inscrição Municipal (id:C19) for informada.
            if emitente.cnae_fiscal:
                etree.SubElement(raiz, "CNAE").text = emitente.cnae_fiscal
        etree.SubElement(raiz, "CRT").text = emitente.codigo_de_regime_tributario
        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #22
0
    def _serializar_emitente(self, emitente, tag_raiz='emit', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do emitente
        etree.SubElement(raiz, 'CNPJ').text = so_numeros(emitente.cnpj)
        etree.SubElement(raiz, 'xNome').text = emitente.razao_social
        etree.SubElement(raiz, 'xFant').text = emitente.nome_fantasia
        # Endereço
        endereco = etree.SubElement(raiz, 'enderEmit')
        etree.SubElement(endereco, 'xLgr').text = emitente.endereco_logradouro
        etree.SubElement(endereco, 'nro').text = emitente.endereco_numero
        if emitente.endereco_complemento:
            etree.SubElement(endereco, 'xCpl').text = emitente.endereco_complemento
        etree.SubElement(endereco, 'xBairro').text = emitente.endereco_bairro
        etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
            emitente.endereco_municipio, emitente.endereco_uf)
        etree.SubElement(endereco, 'xMun').text = emitente.endereco_municipio
        etree.SubElement(endereco, 'UF').text = emitente.endereco_uf
        etree.SubElement(endereco, 'CEP').text = so_numeros(emitente.endereco_cep)
        etree.SubElement(endereco, 'cPais').text = emitente.endereco_pais
        etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(emitente.endereco_pais)
        if emitente.endereco_telefone:
            etree.SubElement(endereco, 'fone').text = emitente.endereco_telefone
        etree.SubElement(raiz, 'IE').text = emitente.inscricao_estadual
        # Apenas NF-e
        if emitente.inscricao_estadual_subst_tributaria:
            etree.SubElement(raiz, 'IEST').text = emitente.inscricao_estadual_subst_tributaria
        # Inscricao Municipal
        if emitente.inscricao_municipal:
            etree.SubElement(raiz, 'IM').text = emitente.inscricao_municipal
            # Campo Opcional. Pode ser informado quando a Inscrição Municipal (id:C19) for informada.
            if emitente.cnae_fiscal:
                etree.SubElement(raiz, 'CNAE').text = emitente.cnae_fiscal
        etree.SubElement(raiz, 'CRT').text = emitente.codigo_de_regime_tributario
        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #23
0
 def identificador_unico(self):
     # Monta 'Id' da tag raiz <infNFe>
     # Ex.: NFe35080599999090910270550010000000011518005123
     return "NFe%(uf)s%(ano)s%(mes)s%(cnpj)s%(mod)s%(serie)s%(nNF)s%(tpEmis)s%(cNF)s%(cDV)s" % {
         "uf": CODIGOS_ESTADOS[self.uf],
         "ano": self.data_emissao.strftime("%y"),
         "mes": self.data_emissao.strftime("%m"),
         "cnpj": so_numeros(self.emitente.cnpj),
         "mod": self.modelo,
         "serie": str(self.serie).zfill(3),
         "nNF": str(self.numero_nf).zfill(9),
         "tpEmis": str(self.forma_emissao),
         "cNF": self.codigo_numerico_aleatorio.zfill(8),
         "cDV": self.dv_codigo_numerico_aleatorio,
     }
예제 #24
0
    def _serializar_transportadora(self, transportadora, tag_raiz="transporta", retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados da transportadora
        etree.SubElement(raiz, transportadora.tipo_documento.upper()).text = so_numeros(transportadora.numero_documento)
        etree.SubElement(raiz, "xNome").text = transportadora.razao_social
        etree.SubElement(raiz, "IE").text = transportadora.inscricao_estadual
        # Endereço
        etree.SubElement(raiz, "xEnder").text = transportadora.endereco_logradouro
        etree.SubElement(raiz, "xMun").text = transportadora.endereco_municipio
        etree.SubElement(raiz, "UF").text = transportadora.endereco_uf

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #25
0
    def _serializar_evento(self, evento, tag_raiz='Inutilizacao', retorna_string=True):

        raiz = etree.Element(tag_raiz)

        etree.SubElement(raiz, 'ModeloDocumento').text = 'NFCe'
        etree.SubElement(raiz, 'Versao').text = self._versao
        etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente)

        etree.SubElement(raiz, 'CnpjEmissor').text = so_numeros(evento.cnpj)
        etree.SubElement(raiz, 'NumeroInicial').text = str(evento.numero_inicial)
        etree.SubElement(raiz, 'NumeroFinal').text = str(evento.numero_final)
        etree.SubElement(raiz, 'Serie').text = str(evento.serie)
        etree.SubElement(raiz, 'Justificativa').text = evento.justificativa

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #26
0
    def _serializar_transportadora(self, transportadora, tag_raiz='transporta', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados da transportadora
        etree.SubElement(raiz, transportadora.tipo_documento).text = so_numeros(transportadora.numero_documento)
        etree.SubElement(raiz, 'xNome').text = transportadora.razao_social
        etree.SubElement(raiz, 'IE').text = transportadora.inscricao_estadual

        # Endereço
        etree.SubElement(raiz, 'xEnder').text = transportadora.endereco_logradouro
        etree.SubElement(raiz, 'cMun').text = transportadora.endereco_municipio
        etree.SubElement(raiz, 'xMun').text = obter_municipio_por_codigo(
                transportadora.endereco_municipio, transportadora.endereco_uf,
                )
        etree.SubElement(raiz, 'UF').text = transportadora.endereco_uf

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #27
0
    def _serializar_entrega_retirada(self, entrega_retirada, tag_raiz='entrega', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados da entrega/retirada
        etree.SubElement(raiz, entrega_retirada.tipo_documento).text = so_numeros(entrega_retirada.numero_documento)

        # Endereço
        etree.SubElement(raiz, 'xLgr').text = entrega_retirada.endereco_logradouro
        etree.SubElement(raiz, 'nro').text = entrega_retirada.endereco_numero
        etree.SubElement(raiz, 'xCpl').text = entrega_retirada.endereco_complemento
        etree.SubElement(raiz, 'xBairro').text = entrega_retirada.endereco_bairro
        etree.SubElement(raiz, 'cMun').text = entrega_retirada.endereco_municipio
        etree.SubElement(raiz, 'xMun').text = obter_municipio_por_codigo(
                entrega_retirada.endereco_municipio, entrega_retirada.endereco_uf,
                )
        etree.SubElement(raiz, 'UF').text = entrega_retirada.endereco_uf

        if retorna_string:
            return etree.tostring(raiz, pretty_print=True)
        else:
            return raiz
예제 #28
0
    def _serializar_entrega_retirada(self, entrega_retirada, tag_raiz="entrega", retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados da entrega/retirada
        etree.SubElement(raiz, entrega_retirada.tipo_documento).text = so_numeros(entrega_retirada.numero_documento)

        # Endereço
        etree.SubElement(raiz, "xLgr").text = entrega_retirada.endereco_logradouro
        etree.SubElement(raiz, "nro").text = entrega_retirada.endereco_numero
        etree.SubElement(raiz, "xCpl").text = entrega_retirada.endereco_complemento
        etree.SubElement(raiz, "xBairro").text = entrega_retirada.endereco_bairro
        etree.SubElement(raiz, "cMun").text = entrega_retirada.endereco_municipio
        etree.SubElement(raiz, "xMun").text = obter_municipio_por_codigo(
            entrega_retirada.endereco_municipio, entrega_retirada.endereco_uf
        )
        etree.SubElement(raiz, "UF").text = entrega_retirada.endereco_uf

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #29
0
 def test_so_numeros_somente_com_letras(self):
     self.assertEqual(so_numeros("aabbccdd"), "")
예제 #30
0
 def test_so_numeros_com_letras_e_numeros(self):
     self.assertEqual(so_numeros("aa223bb"), "223")
예제 #31
0
 def test_so_numeros_valor_string(self):
     self.assertEqual(so_numeros("223"), "223")
예제 #32
0
 def test_so_numeros_valor_int(self):
     self.assertEqual(so_numeros(223), "223")
예제 #33
0
    def _serializar_cliente(self, cliente, modelo, tag_raiz='dest', retorna_string=True):
        raiz = etree.Element(tag_raiz)

        # Dados do cliente (distinatario)
        etree.SubElement(raiz, '%s_dest' % (cliente.tipo_documento)).text = so_numeros(
            cliente.numero_documento)
        if not self._so_cpf:
            if cliente.razao_social:
                etree.SubElement(raiz, 'xNome_dest').text = cliente.razao_social

            if any([cliente.endereco_logradouro, cliente.endereco_numero,
                    cliente.endereco_bairro, cliente.endereco_municipio,
                    cliente.endereco_uf, cliente.endereco_cep]):

                endereco = etree.SubElement(raiz, 'enderDest')
                if cliente.endereco_logradouro:
                    etree.SubElement(
                        endereco, 'xLgr_dest').text = cliente.endereco_logradouro

                if cliente.endereco_numero:
                    etree.SubElement(endereco, 'nro_dest').text = cliente.endereco_numero

                if cliente.endereco_complemento:
                    etree.SubElement(endereco, 'xCpl').text = cliente.endereco_complemento

                if cliente.endereco_bairro:
                    etree.SubElement(
                        endereco, 'xBairro_dest').text = cliente.endereco_bairro

                if cliente.endereco_municipio and cliente.endereco_uf:
                    etree.SubElement(
                        endereco, 'xMun_dest').text = cliente.endereco_municipio
                    etree.SubElement(endereco, 'UF_dest').text = cliente.endereco_uf
                    etree.SubElement(endereco, 'cMun_dest').text = obter_codigo_por_municipio(
                        cliente.endereco_municipio, cliente.endereco_uf)

                if cliente.endereco_cep:
                    etree.SubElement(endereco, 'CEP_dest').text = so_numeros(
                        cliente.endereco_cep)

                etree.SubElement(endereco, 'cPais_dest').text = cliente.endereco_pais
                etree.SubElement(endereco, 'xPais_dest').text = obter_pais_por_codigo(
                    cliente.endereco_pais)

                if cliente.endereco_telefone:
                    etree.SubElement(endereco, 'fone_dest').text = so_numeros(
                        cliente.endereco_telefone)

        # Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista;
        # 2 – Contribuinte isento de inscrição; 9 – Não Contribuinte
        if cliente.indicador_ie == 9:
            # 9 – Não Contribuinte
            etree.SubElement(raiz, 'indIEDest').text = '9'
        elif (cliente.indicador_ie == 2 or cliente.isento_icms) or cliente.inscricao_estadual.upper() == 'ISENTO':
            etree.SubElement(raiz, 'indIEDest').text = '2'
        else:
            # Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista;
            etree.SubElement(raiz, 'indIEDest').text = str(cliente.indicador_ie)

        # E-mail
        if cliente.email:
            etree.SubElement(raiz, 'Email_dest').text = cliente.email

        if retorna_string:
            return etree.tostring(raiz, encoding="unicode", pretty_print=True)
        else:
            return raiz
예제 #34
0
 def test_so_numeros_none(self):
     self.assertEqual(so_numeros(None), "")