Files
odoo_source/addons/payment_adyen/utils.py
T
Anita (anko) d7790b57cd [FIX] payment_adyen: not send False information
If customer did not have address,email and telephone fields,
"False" would be send to Adyen resulting in these field
containing False values, which in some cases was falsely
triggering anti-fraud system.

task-3159378

closes odoo/odoo#146990

X-original-commit: 0de6864e32cff260393fde391250cff0fa6d9653
Signed-off-by: anko-odoo <anko@odoo.com>
2023-12-21 16:07:50 +00:00

67 lines
2.4 KiB
Python

from odoo import _
from odoo.exceptions import ValidationError
from odoo.addons.payment import utils as payment_utils
def format_partner_name(partner_name):
""" Format the partner name to comply with the payload structure of the API request.
:param str partner_name: The name of the partner making the payment.
:return: The formatted partner name.
:rtype: dict
"""
first_name, last_name = payment_utils.split_partner_name(partner_name)
return {
'firstName': first_name,
'lastName': last_name,
}
def include_partner_addresses(tx_sudo):
""" Include the billing and delivery addresses of the related sales order to the payload of the
API request.
If no related sales order exists, the addresses are not included.
Note: `self.ensure_one()`
:param payment.transaction tx_sudo: The sudoed transaction of the payment.
:return: The subset of the API payload that includes the billing and delivery addresses.
:rtype: dict
"""
tx_sudo.ensure_one()
if 'sale_order_ids' in tx_sudo._fields: # The module `sale` is installed.
order = tx_sudo.sale_order_ids[:1]
if order:
return {
'billingAddress': format_partner_address(order.partner_invoice_id),
'deliveryAddress': format_partner_address(order.partner_shipping_id),
}
return {}
def format_partner_address(partner):
""" Format the partner address to comply with the payload structure of the API request.
:param res.partner partner: The partner making the payment.
:return: The formatted partner address.
:rtype: dict
"""
street_data = partner._get_street_split()
address = {
'city': partner.city,
'country': partner.country_id.code or 'ZZ', # 'ZZ' if the country is not known.
'stateOrProvince': partner.state_id.code or '', # The state is not always required.
'postalCode': partner.zip,
# Fill in the address fields if the format is supported, or fallback to the raw address.
'street': street_data.get('street_name', partner.street),
'houseNumberOrName': street_data.get('street_number'),
}
for key, value in address.items():
if key == 'stateOrProvince' and partner.country_id.code not in ['CA', 'US', 'GB']:
continue
if not value:
raise ValidationError(_("Please complete your address details."))