account_edi_ubl_cii/models/account_edi_xml_ubl_sg.py

76 lines
2.4 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
from odoo import models
class AccountEdiXmlUBLSG(models.AbstractModel):
_inherit = "account.edi.xml.ubl_bis3"
_name = "account.edi.xml.ubl_sg"
_description = "SG BIS Billing 3.0"
"""
Documentation: https://www.peppolguide.sg/billing/bis/
"""
# -------------------------------------------------------------------------
# EXPORT
# -------------------------------------------------------------------------
def _export_invoice_filename(self, invoice):
return f"{invoice.name.replace('/', '_')}_sg.xml"
def _export_invoice_ecosio_schematrons(self):
return {
'invoice': 'eu.peppol.bis3.sg.ubl:invoice:1.0.3',
'credit_note': 'eu.peppol.bis3.sg.ubl:creditnote:1.0.3',
}
def _get_partner_party_vals(self, partner, role):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._get_partner_party_vals(partner, role)
for party_tax_scheme in vals['party_tax_scheme_vals']:
party_tax_scheme['tax_scheme_vals'] = {'id': 'GST'}
return vals
def _get_invoice_payment_means_vals_list(self, invoice):
""" https://www.peppolguide.sg/billing/bis/#_payment_means_information
"""
vals_list = super()._get_invoice_payment_means_vals_list(invoice)
for vals in vals_list:
vals.update({
'payment_means_code': 54,
'payment_means_code_attrs': {'name': 'Credit Card'},
})
return vals_list
def _get_tax_sg_codes(self, invoice, tax):
""" https://www.peppolguide.sg/billing/bis/#_gst_category_codes
"""
tax_category_code = 'SR'
if tax.amount == 0:
tax_category_code = 'ZR'
return tax_category_code
def _get_tax_category_list(self, invoice, taxes):
# OVERRIDE
res = []
for tax in taxes:
res.append({
'id': self._get_tax_sg_codes(invoice, tax),
'percent': tax.amount if tax.amount_type == 'percent' else False,
'tax_scheme_vals': {'id': 'GST'},
})
return res
def _export_invoice_vals(self, invoice):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._export_invoice_vals(invoice)
vals['vals'].update({
'customization_id': 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0',
})
return vals