1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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()
- return {
- 'city': partner.city,
- 'country': partner.country_id.code or 'ZZ', # 'ZZ' if the country is not known.
- 'stateOrProvince': partner.state_id.code,
- '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'),
- }
|