63 lines
2.8 KiB
Python
63 lines
2.8 KiB
Python
from odoo import _, api, models, SUPERUSER_ID
|
|
|
|
|
|
class AccountMoveSend(models.AbstractModel):
|
|
_inherit = "account.move.send"
|
|
|
|
@api.model
|
|
def _is_rs_edi_applicable(self, move):
|
|
return move.l10n_rs_edi_is_eligible
|
|
|
|
def _get_all_extra_edis(self) -> dict:
|
|
# EXTENDS 'account'
|
|
res = super()._get_all_extra_edis()
|
|
res.update({'rs_edi': {'label': 'eFaktura', 'is_applicable': self._is_rs_edi_applicable, 'help': 'Send the E-Invoice to Government via eFaktura'}})
|
|
res.update({'rs_cir_checkbox': {'is_applicable': self._is_rs_edi_applicable, 'label': _("Send to CIR"), 'help': _("Send to Central Invoice Register(For B2G and the public sector)")}})
|
|
return res
|
|
|
|
@api.model
|
|
def _get_invoice_extra_attachments(self, invoice):
|
|
# EXTENDS 'account'
|
|
return super()._get_invoice_extra_attachments(invoice) + invoice.l10n_rs_edi_attachment_id
|
|
|
|
@api.model
|
|
def _call_web_service_after_invoice_pdf_render(self, invoices_data):
|
|
# EXTENDS 'account'
|
|
super()._call_web_service_after_invoice_pdf_render(invoices_data)
|
|
for invoice, invoice_data in invoices_data.items():
|
|
# Not all invoices may need EDI.
|
|
if 'rs_edi' not in invoice_data['extra_edis']:
|
|
continue
|
|
if not invoice.company_id.l10n_rs_edi_api_key:
|
|
invoice_data["error"] = {
|
|
"error_title": _("eFaktura API Key is missing."),
|
|
"errors": [_("Please configure the eFaktura API Key in the company settings.")],
|
|
}
|
|
continue
|
|
send_to_cir = 'rs_cir_checkbox' in invoice_data['extra_edis']
|
|
xml, error = invoice._l10n_rs_edi_send(send_to_cir)
|
|
if error:
|
|
invoice_data["error"] = {
|
|
"error_title": _("Errors when submitting the e-invoice to eFaktura:"),
|
|
"errors": [error],
|
|
}
|
|
continue
|
|
invoice_data['l10n_rs_edi_attachment_values'] = invoice._l10n_rs_edi_get_attachment_values(xml)
|
|
|
|
if self._can_commit():
|
|
self._cr.commit()
|
|
|
|
@api.model
|
|
def _link_invoice_documents(self, invoices_data):
|
|
# EXTENDS 'account'
|
|
super()._link_invoice_documents(invoices_data)
|
|
attachments_vals = [
|
|
invoice_data.get('l10n_rs_edi_attachment_values')
|
|
for invoice_data in invoices_data.values()
|
|
if invoice_data.get('l10n_rs_edi_attachment_values')
|
|
]
|
|
if attachments_vals:
|
|
attachments = self.env['ir.attachment'].with_user(SUPERUSER_ID).create(attachments_vals)
|
|
res_ids = [attachment.res_id for attachment in attachments]
|
|
self.env['account.move'].browse(res_ids).invalidate_recordset(fnames=['l10n_rs_edi_attachment_id', 'l10n_rs_edi_attachment_file'])
|