Skip to content

Commit

Permalink
[13.0][MIG] base_ubl_payment
Browse files Browse the repository at this point in the history
  • Loading branch information
astirpe authored and Alexis de Lattre committed Mar 3, 2020
1 parent 5ff953f commit cb52db1
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 50 deletions.
22 changes: 10 additions & 12 deletions base_ubl_payment/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
'name': 'Base UBL Payment',
'version': '12.0.1.0.0',
'category': 'Hidden',
'license': 'AGPL-3',
'summary': 'Payment-related code for Universal Business Language (UBL)',
'author': 'Akretion,Odoo Community Association (OCA)',
'website': 'https://github.com/oca/edi/',
'depends': [
'account_payment_unece',
'base_ubl',
],
'installable': True,
"name": "Base UBL Payment",
"version": "13.0.1.0.0",
"category": "Hidden",
"license": "AGPL-3",
"summary": "Payment-related code for Universal Business Language (UBL)",
"author": "Akretion,Odoo Community Association (OCA)",
"website": "https://github.com/oca/edi/",
"depends": ["account_payment_unece", "base_ubl"],
"external_dependencies": {"python": ["lxml"]},
"installable": True,
}
93 changes: 55 additions & 38 deletions base_ubl_payment/models/ubl.py
Original file line number Diff line number Diff line change
@@ -1,72 +1,89 @@
# © 2016-2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, models, _
from odoo.exceptions import UserError
from lxml import etree
import logging

from lxml import etree

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

logger = logging.getLogger(__name__)


class BaseUbl(models.AbstractModel):
_inherit = 'base.ubl'
_inherit = "base.ubl"

@api.model
def _ubl_add_payment_means(
self, partner_bank, payment_mode, date_due, parent_node, ns,
payment_identifier=None, version='2.1'):
pay_means = etree.SubElement(parent_node, ns['cac'] + 'PaymentMeans')
self,
partner_bank,
payment_mode,
date_due,
parent_node,
ns,
payment_identifier=None,
version="2.1",
):
pay_means = etree.SubElement(parent_node, ns["cac"] + "PaymentMeans")
pay_means_code = etree.SubElement(
pay_means, ns['cbc'] + 'PaymentMeansCode', listID="UN/ECE 4461")
pay_means, ns["cbc"] + "PaymentMeansCode", listID="UN/ECE 4461"
)
# Why not schemeAgencyID='6' + schemeID
if payment_mode: # type is a required field on payment_mode
if not payment_mode.payment_method_id.unece_id:
raise UserError(_(
"Missing 'UNECE Payment Mean' on payment type '%s' "
"used by the payment mode '%s'.") % (
payment_mode.payment_method_id.name, payment_mode.name))
raise UserError(
_(
"Missing 'UNECE Payment Mean' on payment type '%s' "
"used by the payment mode '%s'."
)
% (payment_mode.payment_method_id.name, payment_mode.name)
)
pay_means_code.text = payment_mode.payment_method_id.unece_code
else:
pay_means_code.text = '31'
pay_means_code.text = "31"
logger.warning(
'Missing payment mode on invoice ID %d. '
'Using 31 (wire transfer) as UNECE code as fallback '
'for payment mean', self.id)
"Missing payment mode on invoice ID %d. "
"Using 31 (wire transfer) as UNECE code as fallback "
"for payment mean",
self.id,
)
if date_due:
pay_due_date = etree.SubElement(
pay_means, ns['cbc'] + 'PaymentDueDate')
pay_due_date.text = date_due.strftime('%Y-%m-%d')
if pay_means_code.text in ['30', '31', '42']:
pay_due_date = etree.SubElement(pay_means, ns["cbc"] + "PaymentDueDate")
pay_due_date.text = date_due.strftime("%Y-%m-%d")
if pay_means_code.text in ["30", "31", "42"]:
if (
not partner_bank and
payment_mode and
payment_mode.bank_account_link == 'fixed' and
payment_mode.fixed_journal_id):
not partner_bank
and payment_mode
and payment_mode.bank_account_link == "fixed"
and payment_mode.fixed_journal_id
):
partner_bank = payment_mode.fixed_journal_id.bank_account_id
if partner_bank and partner_bank.acc_type == 'iban':
if partner_bank and partner_bank.acc_type == "iban":
# In the Chorus specs, they except 'IBAN' in PaymentChannelCode
# I don't know if this usage is common or not
payment_channel_code = etree.SubElement(
pay_means, ns['cbc'] + 'PaymentChannelCode')
payment_channel_code.text = 'IBAN'
pay_means, ns["cbc"] + "PaymentChannelCode"
)
payment_channel_code.text = "IBAN"
if payment_identifier:
payment_id = etree.SubElement(
pay_means, ns['cbc'] + 'PaymentID')
payment_id = etree.SubElement(pay_means, ns["cbc"] + "PaymentID")
payment_id.text = payment_identifier
payee_fin_account = etree.SubElement(
pay_means, ns['cac'] + 'PayeeFinancialAccount')
pay_means, ns["cac"] + "PayeeFinancialAccount"
)
payee_fin_account_id = etree.SubElement(
payee_fin_account, ns['cbc'] + 'ID', schemeName='IBAN')
payee_fin_account_id.text =\
partner_bank.sanitized_acc_number
payee_fin_account, ns["cbc"] + "ID", schemeName="IBAN"
)
payee_fin_account_id.text = partner_bank.sanitized_acc_number
if partner_bank.bank_bic:
financial_inst_branch = etree.SubElement(
payee_fin_account,
ns['cac'] + 'FinancialInstitutionBranch')
payee_fin_account, ns["cac"] + "FinancialInstitutionBranch"
)
financial_inst = etree.SubElement(
financial_inst_branch,
ns['cac'] + 'FinancialInstitution')
financial_inst_branch, ns["cac"] + "FinancialInstitution"
)
financial_inst_id = etree.SubElement(
financial_inst, ns['cbc'] + 'ID', schemeName='BIC')
financial_inst, ns["cbc"] + "ID", schemeName="BIC"
)
financial_inst_id.text = partner_bank.bank_bic

0 comments on commit cb52db1

Please sign in to comment.