From dce983dea0a31b6ff763a23cc1d866fe4e461c6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 3 Sep 2014 13:21:23 +0200 Subject: [PATCH] [IMP] website_sale: confirm quotation only when the payment is done, not directly when hitting 'pay now'. --- addons/website_sale/controllers/main.py | 5 +---- addons/website_sale/models/__init__.py | 1 + addons/website_sale/models/payment.py | 28 ++++++++++++++++++++++++ addons/website_sale/models/sale_order.py | 8 ------- 4 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 addons/website_sale/models/payment.py diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 7cc29718472..774024f9446 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -646,7 +646,6 @@ class website_sale(http.Controller): """ cr, uid, context = request.cr, request.uid, request.context transaction_obj = request.registry.get('payment.transaction') - sale_order_obj = request.registry['sale.order'] order = request.website.sale_get_order(context=context) if not order or not order.order_line or acquirer_id is None: @@ -676,13 +675,11 @@ class website_sale(http.Controller): request.session['sale_transaction_id'] = tx_id # update quotation - sale_order_obj.write( + request.registry['sale.order'].write( cr, SUPERUSER_ID, [order.id], { 'payment_acquirer_id': acquirer_id, 'payment_tx_id': request.session['sale_transaction_id'] }, context=context) - # confirm the quotation - sale_order_obj.action_button_confirm(cr, SUPERUSER_ID, [order.id], context=request.context) return tx_id diff --git a/addons/website_sale/models/__init__.py b/addons/website_sale/models/__init__.py index 4273e88271e..e5d755e5eda 100644 --- a/addons/website_sale/models/__init__.py +++ b/addons/website_sale/models/__init__.py @@ -1,2 +1,3 @@ import product import sale_order +import payment diff --git a/addons/website_sale/models/payment.py b/addons/website_sale/models/payment.py new file mode 100644 index 00000000000..36b681a759b --- /dev/null +++ b/addons/website_sale/models/payment.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from openerp import SUPERUSER_ID +from openerp.osv import orm, fields + + +class PaymentTransaction(orm.Model): + _inherit = 'payment.transaction' + + _columns = { + # link with the sale order + 'sale_order_id': fields.many2one('sale.order', 'Sale Order'), + } + + def form_feedback(self, cr, uid, data, acquirer_name, context=None): + """ Override to confirm the sale order, if defined, and if the transaction + is done. """ + tx = None + res = super(PaymentTransaction, self).form_feedback(cr, uid, data, acquirer_name, context=context) + + # fetch the tx, check its state, confirm the potential SO + tx_find_method_name = '_%s_form_get_tx_from_data' % acquirer_name + if hasattr(self, tx_find_method_name): + tx = getattr(self, tx_find_method_name)(cr, uid, data, context=context) + if tx and tx.state == 'done' and tx.sale_order_id and tx.sale_order_id.state in ['draft', 'sent']: + self.pool['sale.order'].action_button_confirm(cr, SUPERUSER_ID, [tx.sale_order_id.id], context=context) + + return res diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 8d2f51329e7..373db16bbc4 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -6,14 +6,6 @@ from openerp.osv import osv, orm, fields from openerp.addons.web.http import request -class payment_transaction(orm.Model): - _inherit = 'payment.transaction' - - _columns = { - # link with the sale order - 'sale_order_id': fields.many2one('sale.order', 'Sale Order'), - } - class sale_order(osv.Model): _inherit = "sale.order"