Exemple #1
0
    def xml_cancel(self, cr, uid, ids, inv, cancel_rps, cert_name,
                   context=None):
        cert_password = str(inv.company_id.nfe_a1_password)
        proc = ProcessadorNFSeSP(cert_name, cert_password)
        if datetime.datetime.now() > proc._certificado._data_fim_validade:
            return {
                'action': 'cancel',
                'message': '%s - %s' % (
                    u'Certificado Digital fora da validade',
                    inv.company_id.name)}
        if not self._check_server(cr, uid, ids, proc.servidor):
            return {
                'action': 'cancel',
                'message': u'Falha de comunicação com o servidor'}
        if inv.company_id.ei_environment == 'production':
            success, res, warnings, errors = proc.cancelar_nfse(cancel_rps)
        else:
            return {
                'action': 'cancel',
                'message': u'Serviço de Teste para Cancelamento INDISPONÍVEL'
            }
        msg_alerta = ''
        for alerta_line in res.Alerta:
            msg_alerta += '%s-%s\n' % (str(alerta_line.Codigo or 0),
                                       alerta_line.Descricao or '')

        msg_erro = ''
        for erro_line in res.Erro:
            msg_erro += '%s-%s\n' % (str(erro_line.Codigo or 0),
                                     erro_line.Descricao or '')

        if msg_erro:
            result = {
                'action': 'cancel',
                'message': '%s%s' % (msg_alerta, msg_erro)
            }
        else:
            result = {
                'action': 'cancel',
                'ei_status': 'cancelled',
                'message': '%s%s' % (msg_alerta, u'NF-e cancelada com SUCESSO')
            }
        return result
Exemple #2
0
    def xml_send(self, cr, uid, ids, inv, lote_rps, cabecalho_rps,
                 consulta_rps, cert_name, context = None):
        cert_password = str(inv.company_id.nfe_a1_password)
        proc = ProcessadorNFSeSP(cert_name, cert_password)
        user_timezone = self.pool.get('res.users').browse(cr, uid, uid).tz
        date_now = datetime.datetime.now(
            pytz.timezone(user_timezone)).strftime('%Y-%m-%d')
        if datetime.datetime.now() > proc._certificado._data_fim_validade:
            return {'action': 'send',
                    'ei_status': 'failed',
                    'message': '%s - %s' % (
                        u'Certificado Digital fora da validade',
                        inv.company_id.name)}
        if not self._check_server(cr, uid, ids, proc.servidor):
            return {
                'action': 'send',
                'ei_status': 'failed',
                'message': u'Falha de comunicação com o servidor'}
        if inv.company_id.ei_environment == 'production':
            success, res, warnings, errors = proc.consultar_nfse(consulta_rps)
            if success and not res.NFe:
                success, res, warnings, errors = proc.enviar_lote_rps(
                    cabecalho=cabecalho_rps, lote_rps=lote_rps)
        else:
            success, res, warnings, errors = proc.testar_envio_lote_rps(
                cabecalho=cabecalho_rps, lote_rps=lote_rps)
        msg_alerta = ''
        for alerta_line in res.Alerta:
            msg_alerta += '%s-%s\n' % (str(alerta_line.Codigo or 0),
                                       alerta_line.Descricao or '')

        msg_erro = ''
        for erro_line in res.Erro:
            msg_erro += '%s-%s\n' % (str(erro_line.Codigo or 0),
                                     erro_line.Descricao or '')

        w_chave_nfe = False
        chave_write = False
        if hasattr(res, 'NFe'):
            w_chave_nfe = res.NFe
        elif hasattr(res, 'ChaveNFeRPS'):
            w_chave_nfe = res.ChaveNFeRPS
        for chave_line in w_chave_nfe:
            if chave_line.ChaveNFe:
                chave_write = {
                    'ei_code': chave_line.ChaveNFe.NumeroNFe,
                    'ei_verification_code': chave_line.ChaveNFe.CodigoVerificacao,
                    'ei_date': date_now,
                    'rps_serie': int(inv.document_serie_id.code),
                    'rps_code': lote_rps[0]['NumeroRPS']}
                message = 'Nf-e sent'
                self.log(cr, uid, inv, message, context=context)

        if inv.company_id.ei_environment == 'production':
            if msg_erro:
                result = {
                    'action': 'send',
                    'ei_status': 'failed',
                    'message': '%s%s' % (msg_alerta, msg_erro)
                }
            elif not chave_write:
                result = {
                    'action': 'send',
                    'ei_status': 'sent',
                    'message': '%s%s' % (
                        msg_alerta,
                        u'NF-e enviada com SUCESSO, aguardando confirmação')}
            else:
                result = {
                    'action': 'send',
                    'ei_status': 'confirmed',
                    'message': '%s%s' % (msg_alerta,
                                         u'NF-e criada com SUCESSO')}
                result.update(chave_write)
        elif inv.company_id.ei_environment == 'test':
            if msg_erro:
                result = {
                    'action': 'send',
                    'message': '%s%s' % (msg_alerta, msg_erro)}
            else:
                result = {
                    'action': 'send',
                    'message': '%s%s' % (
                        msg_alerta,
                        u'Teste de envio de NF-e efetuado com SUCESSO')}
        return result