Initial commit
This commit is contained in:
74
Fusion Accounting/wizard/edi_import_wizard.py
Normal file
74
Fusion Accounting/wizard/edi_import_wizard.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
Fusion Accounting - EDI Import Wizard
|
||||
|
||||
Provides a transient model that lets users upload a UBL 2.1 or CII XML
|
||||
file and create a draft invoice from its contents.
|
||||
|
||||
Original implementation by Nexa Systems Inc.
|
||||
"""
|
||||
|
||||
import base64
|
||||
import logging
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
_log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class FusionEDIImportWizard(models.TransientModel):
|
||||
"""
|
||||
File-upload wizard for importing electronic invoices in UBL 2.1 or
|
||||
UN/CEFACT CII format.
|
||||
"""
|
||||
|
||||
_name = "fusion.edi.import.wizard"
|
||||
_description = "Import EDI Invoice"
|
||||
|
||||
xml_file = fields.Binary(
|
||||
string="XML File",
|
||||
required=True,
|
||||
help="Select a UBL 2.1 or CII XML invoice file to import.",
|
||||
)
|
||||
xml_filename = fields.Char(
|
||||
string="File Name",
|
||||
)
|
||||
move_type = fields.Selection(
|
||||
selection=[
|
||||
("out_invoice", "Customer Invoice"),
|
||||
("out_refund", "Customer Credit Note"),
|
||||
("in_invoice", "Vendor Bill"),
|
||||
("in_refund", "Vendor Credit Note"),
|
||||
],
|
||||
string="Document Type",
|
||||
default="out_invoice",
|
||||
help=(
|
||||
"Fallback document type if the XML does not specify one. "
|
||||
"The parser may override this based on the XML content."
|
||||
),
|
||||
)
|
||||
|
||||
def action_import(self):
|
||||
"""Parse the uploaded XML and create a draft invoice.
|
||||
|
||||
Returns:
|
||||
dict: A window action opening the newly created invoice.
|
||||
"""
|
||||
self.ensure_one()
|
||||
if not self.xml_file:
|
||||
raise UserError(_("Please select an XML file to import."))
|
||||
|
||||
xml_bytes = base64.b64decode(self.xml_file)
|
||||
AccountMove = self.env["account.move"].with_context(
|
||||
default_move_type=self.move_type,
|
||||
)
|
||||
move = AccountMove.create_invoice_from_xml(xml_bytes)
|
||||
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": _("Imported Invoice"),
|
||||
"res_model": "account.move",
|
||||
"res_id": move.id,
|
||||
"view_mode": "form",
|
||||
"target": "current",
|
||||
}
|
||||
Reference in New Issue
Block a user