[IMP] payment_acquirer, payment_acquirer_transfer
- payment_acquirer: added base method for form-based validation calling various model-dependant methods. [FIX] payment_acquirer: fixed tx values not given to form to render when having no custom method for a specific acquirer - payment_acquirer_transfer: added form validation, using the new acquirer method. Updated controllers. Updated generated form to include tx details. Fixed method for form_action_url taht was missing. bzr revid: tde@openerp.com-20131120140119-8zuvm2ypr5arvf5y
This commit is contained in:
parent
4fb0880259
commit
9bca2bbaac
|
@ -110,13 +110,14 @@ class PaymentAcquirer(osv.Model):
|
||||||
acquirer = self.browse(cr, uid, id, context=context)
|
acquirer = self.browse(cr, uid, id, context=context)
|
||||||
method_name = '%s_form_generate_values' % (acquirer.name)
|
method_name = '%s_form_generate_values' % (acquirer.name)
|
||||||
|
|
||||||
tx_values = {}
|
|
||||||
if tx_id and hasattr(self.pool['payment.transaction'], method_name):
|
if tx_id and hasattr(self.pool['payment.transaction'], method_name):
|
||||||
method = getattr(self.pool['payment.transaction'], method_name)
|
method = getattr(self.pool['payment.transaction'], method_name)
|
||||||
tx_values = method(cr, uid, tx_id, tx_custom_values, context=context)
|
tx_values = method(cr, uid, tx_id, tx_custom_values, context=context)
|
||||||
elif hasattr(self, method_name):
|
elif hasattr(self, method_name):
|
||||||
method = getattr(self, method_name)
|
method = getattr(self, method_name)
|
||||||
tx_values = method(cr, uid, id, reference, amount, currency, partner_id, partner_values, tx_custom_values, context=context)
|
tx_values = method(cr, uid, id, reference, amount, currency, partner_id, partner_values, tx_custom_values, context=context)
|
||||||
|
else:
|
||||||
|
tx_values = tx_custom_values
|
||||||
|
|
||||||
qweb_context = {
|
qweb_context = {
|
||||||
'acquirer': acquirer,
|
'acquirer': acquirer,
|
||||||
|
@ -259,6 +260,38 @@ class PaymentTransaction(osv.Model):
|
||||||
}
|
}
|
||||||
return {'values': values}
|
return {'values': values}
|
||||||
|
|
||||||
|
# --------------------------------------------------
|
||||||
|
# FORM RELATED METHODS
|
||||||
|
# --------------------------------------------------
|
||||||
|
|
||||||
|
def form_feedback(self, cr, uid, data, acquirer_name, context=None):
|
||||||
|
invalid_parameters, tx = None, None
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
invalid_param_method_name = '_%s_form_get_invalid_parameters' % acquirer_name
|
||||||
|
if hasattr(self, invalid_param_method_name):
|
||||||
|
invalid_parameters = getattr(self, invalid_param_method_name)(cr, uid, tx, data, context=context)
|
||||||
|
|
||||||
|
if invalid_parameters:
|
||||||
|
_error_message = '%s: incorrect tx data:\n' % (acquirer_name)
|
||||||
|
for item in invalid_parameters:
|
||||||
|
_error_message += '\t%s: received %s instead of %s\n' % (item[0], item[1], item[2])
|
||||||
|
_logger.error(_error_message)
|
||||||
|
return False
|
||||||
|
|
||||||
|
feedback_method_name = '_%s_form_validate' % acquirer_name
|
||||||
|
if hasattr(self, feedback_method_name):
|
||||||
|
return getattr(self, feedback_method_name)(cr, uid, tx, data, context=context)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
# --------------------------------------------------
|
||||||
|
# SERVER2SERVER RELATED METHODS
|
||||||
|
# --------------------------------------------------
|
||||||
|
|
||||||
def create_s2s(self, cr, uid, tx_values, cc_values, context=None):
|
def create_s2s(self, cr, uid, tx_values, cc_values, context=None):
|
||||||
tx_id = self.create(cr, uid, tx_values, context=context)
|
tx_id = self.create(cr, uid, tx_values, context=context)
|
||||||
return tx_id
|
return tx_id
|
||||||
|
|
|
@ -16,7 +16,7 @@ class OgoneController(http.Controller):
|
||||||
'/payment/transfer/feedback',
|
'/payment/transfer/feedback',
|
||||||
], type='http', auth='admin')
|
], type='http', auth='admin')
|
||||||
def transfer_form_feedback(self, **post):
|
def transfer_form_feedback(self, **post):
|
||||||
_logger.info('Transfer: entering form_feedback with post data %s', pprint.pformat(post)) # debug
|
_logger.info('entering form_feedback with post data %s', pprint.pformat(post)) # debug
|
||||||
cr, uid, context = request.cr, request.uid, request.context
|
cr, uid, context = request.cr, request.uid, request.context
|
||||||
request.registry['payment.transaction'].transfer_form_feedback(cr, uid, post, context)
|
request.registry['payment.transaction'].form_feedback(cr, uid, post, 'transfer', context)
|
||||||
return request.redirect(post.pop('return_url', '/'))
|
return request.redirect(post.pop('return_url', '/'))
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
# -*- coding: utf-'8' "-*-"
|
# -*- coding: utf-'8' "-*-"
|
||||||
|
|
||||||
|
from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError
|
||||||
from openerp.osv import osv
|
from openerp.osv import osv
|
||||||
|
from openerp.tools.float_utils import float_compare
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import pprint
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -10,9 +13,40 @@ _logger = logging.getLogger(__name__)
|
||||||
class TransferPaymentAcquirer(osv.Model):
|
class TransferPaymentAcquirer(osv.Model):
|
||||||
_inherit = 'payment.acquirer'
|
_inherit = 'payment.acquirer'
|
||||||
|
|
||||||
|
def transfer_get_form_action_url(self, cr, uid, id, context=None):
|
||||||
|
return '/payment/transfer/feedback'
|
||||||
|
|
||||||
|
|
||||||
class TransferPaymentTransaction(osv.Model):
|
class TransferPaymentTransaction(osv.Model):
|
||||||
_inherit = 'payment.transaction'
|
_inherit = 'payment.transaction'
|
||||||
|
|
||||||
def transfer_form_feedback(self, cr, uid, data, context=None):
|
def _transfer_form_get_tx_from_data(self, cr, uid, data, context=None):
|
||||||
return True
|
reference, amount, currency_name = data.get('reference'), data.get('amount'), data.get('currency_name')
|
||||||
|
tx_ids = self.search(
|
||||||
|
cr, uid, [
|
||||||
|
('reference', '=', reference),
|
||||||
|
], context=context)
|
||||||
|
|
||||||
|
if not tx_ids or len(tx_ids) > 1:
|
||||||
|
error_msg = 'received data for reference %s' % (pprint.pformat(reference))
|
||||||
|
if not tx_ids:
|
||||||
|
error_msg += '; no order found'
|
||||||
|
else:
|
||||||
|
error_msg += '; multiple order found'
|
||||||
|
_logger.error(error_msg)
|
||||||
|
raise ValidationError(error_msg)
|
||||||
|
|
||||||
|
return self.browse(cr, uid, tx_ids[0], context=context)
|
||||||
|
|
||||||
|
def _transfer_form_get_invalid_parameters(self, cr, uid, tx, data, context=None):
|
||||||
|
invalid_parameters = []
|
||||||
|
|
||||||
|
if float_compare(float(data.get('amount', '0.0')), tx.amount, 2) != 0:
|
||||||
|
invalid_parameters.append(('amount', data.get('amount'), '%.2f' % tx.amount))
|
||||||
|
if data.get('currency') != tx.currency_id.name:
|
||||||
|
invalid_parameters.append(('currency', data.get('currency'), tx.currency_id.name))
|
||||||
|
|
||||||
|
return invalid_parameters
|
||||||
|
|
||||||
|
def _transfer_form_validate(self, cr, uid, tx, data, context=None):
|
||||||
|
return tx.write({'state': 'pending'})
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<openerp>
|
<openerp>
|
||||||
<data>
|
<data noupdate="0">
|
||||||
|
|
||||||
<!-- templates -->
|
|
||||||
<template id="transfer_acquirer_button">
|
<template id="transfer_acquirer_button">
|
||||||
<div>
|
<div t-field="acquirer.message"/>
|
||||||
<div t-field="acquirer.message"/>
|
<form t-if="acquirer" action="/payment/transfer/feedback" method="post" target="_self">
|
||||||
<form t-if="acquirer" action="/payment/transfer/feedback" method="post" target="_self">
|
<t t-if="tx_values.get('return_url')">
|
||||||
<t t-if="tx_values.get('return_url')">
|
<input type='hidden' name='return_url' t-att-value='tx_values["return_url"]'/>
|
||||||
<input type='hidden' name='return_url' t-att-value='tx_values["return_url"]'/>
|
</t>
|
||||||
</t>
|
<input type='hidden' name='reference' t-att-value='reference'/>
|
||||||
<input type="image" name="submit" id="payment_submit"
|
<input type='hidden' name='amount' t-att-value='amount'/>
|
||||||
src="/payment_acquirer_ogone/static/src/img/ogone_logo_plain.gif"/>
|
<input type='hidden' name='currency' t-att-value='currency.name'/>
|
||||||
|
<input type="submit" name="submit" id="payment_submit"
|
||||||
|
class="btn btn-primary" value="Confirmer"/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
|
|
Loading…
Reference in New Issue