# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.exceptions import AccessError, MissingError, ValidationError from odoo.fields import Command from odoo.http import route from odoo.addons.payment.controllers import portal as payment_portal class PaymentPortal(payment_portal.PaymentPortal): @route('/invoice/transaction/', type='json', auth='public') def invoice_transaction(self, invoice_id, access_token, **kwargs): """ Create a draft transaction and return its processing values. :param int invoice_id: The invoice to pay, as an `account.move` id :param str access_token: The access token used to authenticate the request :param dict kwargs: Locally unused data passed to `_create_transaction` :return: The mandatory values for the processing of the transaction :rtype: dict :raise: ValidationError if the invoice id or the access token is invalid """ # Check the invoice id and the access token try: self._document_check_access('account.move', invoice_id, access_token) except MissingError as error: raise error except AccessError: raise ValidationError("The access token is invalid.") kwargs['reference_prefix'] = None # Allow the reference to be computed based on the invoice kwargs.pop('custom_create_values', None) # Don't allow passing arbitrary create values tx_sudo = self._create_transaction( custom_create_values={'invoice_ids': [Command.set([invoice_id])]}, **kwargs, ) return tx_sudo._get_processing_values()