Skip to content

Commit

Permalink
[IMP] Log de atividades da nota fiscal, criada atividade ao usuário q…
Browse files Browse the repository at this point in the history
…ue criou a nota
  • Loading branch information
danimaribeiro committed Jun 27, 2019
1 parent 4ca7ce7 commit 88ab4d3
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 22 deletions.
9 changes: 7 additions & 2 deletions br_account_einvoice/models/account_invoice.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
# © 2016 Danimar Ribeiro <danimaribeiro@gmail.com>, Trustcode
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

import logging
from datetime import datetime
from random import SystemRandom

from odoo import api, fields, models, _
from odoo.exceptions import UserError

_logger = logging.getLogger(__name__)


TYPE2EDOC = {
'out_invoice': 'saida', # Customer Invoice
Expand Down Expand Up @@ -64,7 +67,6 @@ def _return_pdf_invoice(self, doc):
return False

def action_preview_danfe(self):

docs = self.env['invoice.eletronic'].search(
[('invoice_id', '=', self.id)])

Expand All @@ -84,7 +86,6 @@ def action_preview_danfe(self):
return self._action_preview_danfe(docs[0])

def _action_preview_danfe(self, doc):

report = self._return_pdf_invoice(doc)
if not report:
raise UserError(
Expand Down Expand Up @@ -185,6 +186,7 @@ def _prepare_edoc_vals(self, invoice, inv_lines, serie_id):
'invoice_id': invoice.id,
'code': invoice.number,
'company_id': invoice.company_id.id,
'schedule_user_id': self.env.user.id,
'state': 'draft',
'tipo_operacao': TYPE2EDOC[invoice.type],
'numero_controle': num_controle,
Expand Down Expand Up @@ -279,6 +281,9 @@ def action_cancel(self):
_('Documento eletrônico emitido - Cancele o \
documento para poder cancelar a fatura'))
if edoc.can_unlink():
_logger.info(
'deleting edoc %s by user %s in action_cancel (%s)' %
(edoc.id, self.env.user.id, item.move_name))
edoc.sudo().unlink()
return res

Expand Down
30 changes: 27 additions & 3 deletions br_account_einvoice/models/invoice_eletronic.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def format_amount(env, amount, currency):

class InvoiceEletronic(models.Model):
_name = 'invoice.eletronic'
_description = "Nota Fiscal"
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'id desc'

Expand All @@ -62,7 +63,11 @@ class InvoiceEletronic(models.Model):
('error', 'Erro'),
('done', 'Enviado'),
('cancel', 'Cancelado')],
string=u'State', default='draft', readonly=True, states=STATE)
string=u'State', default='draft', readonly=True, states=STATE,
track_visibility='always')
schedule_user_id = fields.Many2one(
'res.users', string="Agendado por", readonly=True,
track_visibility='always')
tipo_operacao = fields.Selection(
[('entrada', 'Entrada'),
('saida', 'Saída')],
Expand Down Expand Up @@ -203,9 +208,11 @@ class InvoiceEletronic(models.Model):
string=u'Informações complementares', readonly=True, states=STATE)

codigo_retorno = fields.Char(
string=u'Código Retorno', readonly=True, states=STATE)
string=u'Código Retorno', readonly=True, states=STATE,
track_visibility='onchange')
mensagem_retorno = fields.Char(
string=u'Mensagem Retorno', readonly=True, states=STATE)
string=u'Mensagem Retorno', readonly=True, states=STATE,
track_visibility='onchange')
numero_nfe = fields.Char(
string=u"Numero Formatado NFe", readonly=True, states=STATE)

Expand Down Expand Up @@ -482,6 +489,18 @@ def notify_user(self):
documento eletrônico!') % self.name
self.create_uid.notify(msg, sticky=True, title="Ação necessária!",
warning=True, redirect=redirect)
try:
activity_type_id = self.env.ref('mail.mail_activity_data_todo').id
except ValueError:
activity_type_id = False
self.env['mail.activity'].create({
'activity_type_id': activity_type_id,
'note': _('Please verify the eletronic document'),
'user_id': self.schedule_user_id.id,
'res_id': self.id,
'res_model_id': self.env.ref(
'br_account_einvoice.model_invoice_eletronic').id,
})

def _get_state_to_send(self):
return ('draft',)
Expand All @@ -496,7 +515,10 @@ def cron_send_nfe(self, limit=50):
limit=limit)
for item in nfes:
try:
_logger.info('Sending edoc id: %s (number: %s) by cron' % (
item.id, item.numero))
item.action_send_eletronic_invoice()
self.env.cr.commit()
except Exception as e:
item.log_exception(e)
item.notify_user()
Expand All @@ -512,6 +534,8 @@ def send_email_nfe(self):
if not mail:
raise UserError(_('Modelo de email padrão não configurado'))
atts = self._find_attachment_ids_email()
_logger.info('Sending e-mail for e-doc %s (number: %s)' % (
self.id, self.numero))
self.invoice_id.message_post_with_template(
mail.id, attachment_ids=[(6, 0, atts + mail.attachment_ids.ids)])

Expand Down
Binary file modified br_account_einvoice/static/description/icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 19 additions & 6 deletions br_account_einvoice/views/invoice_eletronic.xml
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,8 @@
<field name="arch" type="xml">
<form string="Documento Eletrônico">
<header>
<button name="action_send_eletronic_invoice" states="draft" string="Enviar" type="object" class="oe_highlight"/>
<button name="action_back_to_draft" states="edit,error" string="Rascunho" type="object"/>
<button name="action_send_eletronic_invoice" states="draft" string="Enviar Agora" type="object" class="oe_highlight"/>
<button name="action_back_to_draft" states="edit,error" string="Repetir" type="object"/>
<button name="action_edit_edoc" states="draft,error" string="Habilitar Edição" type="object" groups="br_account_einvoice.group_edit_edoc"/>
<button name="action_cancel_document" confirm="Confirma o cancelamento do documento?" states="done" string="Cancelar" type="object"/>
<button name="send_email_nfe" string="Reenviar Email" type="object" attrs="{'invisible': [('state', '!=', 'done')]}" />
Expand All @@ -181,6 +181,7 @@
<field name="partner_id"/>
<field name="partner_shipping_id"/>
<field name="data_agendada"/>
<field name="schedule_user_id" />
</group>
<group>
<field name="tipo_operacao" />
Expand Down Expand Up @@ -307,11 +308,14 @@
<field name="model">invoice.eletronic</field>
<field name="arch" type="xml">
<tree string="Documentos Eletrônicos">
<field name="state" />
<field name="model"/>
<field name="numero"/>
<field name="partner_id"/>
<field name="valor_final"/>
<field name="invoice_id"/>
<field name="numero"/>
<field name="data_emissao" />
<field name="valor_final" sum="Total"/>
<field name="data_agendada" />
<field name="schedule_user_id" />
<field name="state" />
</tree>
</field>
</record>
Expand All @@ -321,7 +325,16 @@
<field name="model">invoice.eletronic</field>
<field name="arch" type="xml">
<search>
<filter string="Notas com problemas" domain="[('state','=', 'error')]" name="error"/>
<separator orientation="vertical"/>
<field name="invoice_id"/>
<field name="partner_id"/>
<field name="numero" />
<group expand="0" string="Agrupar por...">
<filter name="group_partner" string="Parceiro" domain="[]" context="{'group_by':'partner_id'}"/>
<filter name="group_date" string="Data de Emissão" domain="[]" context="{'group_by':'data_emissao'}"/>
<filter name="group_state" string="Situação" domain="[]" context="{'group_by':'state'}"/>
</group>
</search>
</field>
</record>
Expand Down
40 changes: 29 additions & 11 deletions br_nfe/models/invoice_eletronic.py
Original file line number Diff line number Diff line change
Expand Up @@ -919,9 +919,13 @@ def action_send_eletronic_invoice(self):
'done', 'denied', 'cancel'):
return

self.state = 'error'
_logger.info('Sending NF-e (%s) (%.2f) - %s' % (
self.numero, self.valor_final, self.partner_id.name))
tz = timezone(self.env.user.tz)
self.data_emissao = datetime.now(tz)
self.write({
'state': 'error',
'data_emissao': datetime.now(tz)
})

cert = self.company_id.with_context({'bin_size': False}).nfe_a1_file
cert_pfx = base64.decodestring(cert)
Expand Down Expand Up @@ -957,21 +961,31 @@ def action_send_eletronic_invoice(self):
break

if retorno.cStat != 104:
self.codigo_retorno = retorno.cStat
self.mensagem_retorno = retorno.xMotivo
self.write({
'codigo_retorno': retorno.cStat,
'mensagem_retorno': retorno.xMotivo,
})
self.notify_user()
else:
self.codigo_retorno = retorno.protNFe.infProt.cStat
self.mensagem_retorno = retorno.protNFe.infProt.xMotivo
self.write({
'codigo_retorno': retorno.protNFe.infProt.cStat,
'mensagem_retorno': retorno.protNFe.infProt.xMotivo,
})
if self.codigo_retorno == '100':
self.write({
'state': 'done',
'protocolo_nfe': retorno.protNFe.infProt.nProt,
'data_autorizacao': retorno.protNFe.infProt.dhRecbto})
'data_autorizacao': retorno.protNFe.infProt.dhRecbto
})
else:
self.notify_user()
# Duplicidade de NF-e significa que a nota já está emitida
# TODO Buscar o protocolo de autorização, por hora só finalizar
if self.codigo_retorno == '204':
self.write({'state': 'done', 'codigo_retorno': '100',
'mensagem_retorno': 'Autorizado o uso da NF-e'})
self.write({
'state': 'done', 'codigo_retorno': '100',
'mensagem_retorno': 'Autorizado o uso da NF-e'
})

# Denegada e nota já está denegada
if self.codigo_retorno in ('302', '205'):
Expand All @@ -993,8 +1007,12 @@ def action_send_eletronic_invoice(self):

if self.codigo_retorno == '100':
nfe_proc = gerar_nfeproc(resposta['sent_xml'], recibo_xml)
self.nfe_processada = base64.encodestring(nfe_proc)
self.nfe_processada_name = "NFe%08d.xml" % self.numero
self.write({
'nfe_processada': base64.encodestring(nfe_proc),
'nfe_processada_name': "NFe%08d.xml" % self.numero,
})
_logger.info('NF-e (%s) was finished with status %s' % (
self.numero, self.codigo_retorno))

@api.multi
def generate_nfe_proc(self):
Expand Down
Binary file removed br_nfe/static/description/icon-old.png
Binary file not shown.

0 comments on commit 88ab4d3

Please sign in to comment.