122 lines
4.9 KiB
Python
122 lines
4.9 KiB
Python
import logging
|
|
|
|
from odoo import _, api, fields, models, SUPERUSER_ID
|
|
from odoo.exceptions import UserError
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AccountMoveSend(models.TransientModel):
|
|
_inherit = 'account.move.send'
|
|
|
|
l10n_es_edi_facturae_enable_xml = fields.Boolean(compute='_compute_l10n_es_edi_facturae_enable_xml')
|
|
l10n_es_edi_facturae_checkbox_xml = fields.Boolean(
|
|
string="Generate Facturae edi file",
|
|
default=True,
|
|
company_dependent=True,
|
|
)
|
|
|
|
def _get_wizard_values(self):
|
|
# EXTENDS 'account'
|
|
values = super()._get_wizard_values()
|
|
values['l10n_es_edi_facturae_xml'] = self.l10n_es_edi_facturae_checkbox_xml
|
|
return values
|
|
|
|
@api.model
|
|
def _get_wizard_vals_restrict_to(self, only_options):
|
|
# EXTENDS 'account'
|
|
values = super()._get_wizard_vals_restrict_to(only_options)
|
|
return {
|
|
'l10n_es_edi_facturae_checkbox_xml': False,
|
|
**values,
|
|
}
|
|
|
|
# -------------------------------------------------------------------------
|
|
# COMPUTE METHODS
|
|
# -------------------------------------------------------------------------
|
|
|
|
@api.depends('move_ids')
|
|
def _compute_l10n_es_edi_facturae_enable_xml(self):
|
|
for wizard in self:
|
|
wizard.l10n_es_edi_facturae_enable_xml = any(move._l10n_es_edi_facturae_get_default_enable() for move in wizard.move_ids)
|
|
|
|
@api.depends('l10n_es_edi_facturae_enable_xml')
|
|
def _compute_l10n_es_edi_facturae_checkbox_xml(self):
|
|
for wizard in self:
|
|
wizard.l10n_es_edi_facturae_checkbox_xml = wizard.l10n_es_edi_facturae_enable_xml
|
|
|
|
@api.depends('l10n_es_edi_facturae_checkbox_xml')
|
|
def _compute_mail_attachments_widget(self):
|
|
# EXTENDS 'account' - add depends
|
|
super()._compute_mail_attachments_widget()
|
|
|
|
# -------------------------------------------------------------------------
|
|
# ATTACHMENTS
|
|
# -------------------------------------------------------------------------
|
|
|
|
@api.model
|
|
def _get_invoice_extra_attachments(self, move):
|
|
# EXTENDS 'account'
|
|
return super()._get_invoice_extra_attachments(move) + move.l10n_es_edi_facturae_xml_id
|
|
|
|
def _get_placeholder_mail_attachments_data(self, move):
|
|
# EXTENDS 'account'
|
|
results = super()._get_placeholder_mail_attachments_data(move)
|
|
|
|
if self.mode == 'invoice_single' and self.l10n_es_edi_facturae_enable_xml and self.l10n_es_edi_facturae_checkbox_xml:
|
|
filename = f'{move.name.replace("/", "_")}_facturae_signed.xml'
|
|
results.append({
|
|
'id': f'placeholder_{filename}',
|
|
'name': filename,
|
|
'mimetype': 'application/xml',
|
|
'placeholder': True,
|
|
})
|
|
|
|
return results
|
|
|
|
# -------------------------------------------------------------------------
|
|
# BUSINESS ACTIONS
|
|
# -------------------------------------------------------------------------
|
|
|
|
@api.model
|
|
def _hook_invoice_document_before_pdf_report_render(self, invoice, invoice_data):
|
|
# EXTENDS 'account'
|
|
super()._hook_invoice_document_before_pdf_report_render(invoice, invoice_data)
|
|
|
|
if invoice_data.get('l10n_es_edi_facturae_xml') and invoice._l10n_es_edi_facturae_get_default_enable():
|
|
try:
|
|
xml_content, errors = invoice._l10n_es_edi_facturae_render_facturae()
|
|
if errors:
|
|
invoice_data['error'] = {
|
|
'error_title': _("Errors occurred while creating the EDI document (format: %s):", "Facturae"),
|
|
'errors': errors,
|
|
}
|
|
else:
|
|
invoice_data['l10n_es_edi_facturae_attachment_values'] = {
|
|
'name': invoice._l10n_es_edi_facturae_get_filename(),
|
|
'raw': xml_content,
|
|
'mimetype': 'application/xml',
|
|
'res_model': invoice._name,
|
|
'res_id': invoice.id,
|
|
'res_field': 'l10n_es_edi_facturae_xml_file', # Binary field
|
|
}
|
|
except UserError as e:
|
|
if self.env.context.get('forced_invoice'):
|
|
_logger.warning(
|
|
'An error occured during generation of Facturae EDI of %s: %s',
|
|
invoice.name,
|
|
e.args[0]
|
|
)
|
|
else:
|
|
raise
|
|
|
|
@api.model
|
|
def _link_invoice_documents(self, invoice, invoice_data):
|
|
# EXTENDS 'account'
|
|
super()._link_invoice_documents(invoice, invoice_data)
|
|
|
|
attachment_vals = invoice_data.get('l10n_es_edi_facturae_attachment_values')
|
|
if attachment_vals:
|
|
self.env['ir.attachment'].with_user(SUPERUSER_ID).create(attachment_vals)
|
|
invoice.invalidate_recordset(fnames=['l10n_es_edi_facturae_xml_id', 'l10n_es_edi_facturae_xml_file'])
|