From 56517a6ca96fca6e50e6827ab80d297cfd84e5be Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Wed, 4 Jan 2017 13:49:14 +0100 Subject: [PATCH] [FIX] website_quote: invoice generation To reproduce: - Configure an external payment provider (e.g. Ingenico) with "Authorize & capture the amount, confirm the SO and auto-validate the invoice on acquirer confirmation" - Create a quotation with a product linked to a subscription - Send the link to the customer - Click on "Accept & Pay", use the configured provider The SO is confirmed, but the invoice is not generated. By calling `action_confirm` in the callback of the transaction, we validate the SO before `form_feedback` is called. Therefore, the method `_confirm_so` will do nothing since the SO is not in state 'draft' or 'sent' anymore. The solution is to manually call `_confirm_so`instead of `action_confirm`. This is necessary to do it at this moment since we might not go through `form_feedback` (e.g. if we pay thanks to wire transfer). opw-694273 --- addons/website_quote/models/sale_order.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/website_quote/models/sale_order.py b/addons/website_quote/models/sale_order.py index 0a386063238..54a5ac77287 100644 --- a/addons/website_quote/models/sale_order.py +++ b/addons/website_quote/models/sale_order.py @@ -165,8 +165,7 @@ class SaleOrder(models.Model): """ Payment callback: validate the order and write transaction details in chatter """ # create draft invoice if transaction is ok if transaction and transaction.state == 'done': - if self.state in ['draft', 'sent']: - self.sudo().action_confirm() + transaction._confirm_so() message = _('Order paid by %s. Transaction: %s. Amount: %s.') % (transaction.partner_id.name, transaction.acquirer_reference, transaction.amount) self.message_post(body=message) return True