[IMP] payment_acquirer: various improvements

- added a constraint on reference that should be unique
- remove dead method validate
- added some comments
- improved payment.transaction views

bzr revid: tde@openerp.com-20131115132838-8nta3pq1ftj8t2q5
This commit is contained in:
Thibault Delavallée 2013-11-15 14:28:38 +01:00
parent 029993ea1d
commit 6e3dd819ea
2 changed files with 27 additions and 40 deletions

View File

@ -70,8 +70,17 @@ class PaymentAcquirer(osv.Model):
- reference: reference of the transaction
- partner: the current partner browse record, if any (not necessarily set)
- partner_values: a dictionary of partner-related values
- tx_values: a dictionary of transaction related values that depends on
on the acquirer
- tx_custom_values: a dictionary of transaction related values that depends
on the acquirer. Some specific keys should be managed
in each provider, depending on the features it offers:
- 'feedback_url': feedback URL, controler that manage answer of the acquirer
(without base url)
- 'return_url': URL for coming back after payment validation (wihout
base url)
- 'cancel_url': URL if the client cancels the payment
- 'error_url': URL if there is an issue with the payment
- context: OpenERP context dictionary
:param string reference: the transaction reference
@ -115,6 +124,12 @@ class PaymentAcquirer(osv.Model):
}
return self.pool['ir.ui.view'].render(cr, uid, acquirer.view_template_id.id, qweb_context, engine='ir.qweb', context=context)
def get_form_action_url(self, cr, uid, id, context=None):
acquirer = self.browse(cr, uid, id, context=context)
if hasattr(self, '%s_get_form_action_url' % acquirer.name):
return getattr(self, '%s_get_form_action_url' % acquirer.name)(cr, uid, id, context=context)
return False
class PaymentTransaction(osv.Model):
_name = 'payment.transaction'
@ -158,6 +173,10 @@ class PaymentTransaction(osv.Model):
'partner_reference': fields.char('Buyer Reference'),
}
_sql_constraints = [
('reference_uniq', 'UNIQUE(reference)', 'The payment transaction reference must be unique!'),
]
_defaults = {
'date_create': fields.datetime.now,
'type': 'form',
@ -188,7 +207,7 @@ class PaymentTransaction(osv.Model):
'partner_lang': partner.lang,
'partner_email': partner.email,
'partner_zip': partner.zip,
'partner_address': ' '.join((partner.street, partner.street2)).strip(),
'partner_address': ' '.join((partner.street or '', partner.street2 or '')).strip(),
'partner_city': partner.city,
'partner_country_id': partner.country_id.id,
'partner_phone': partner.phone,
@ -205,38 +224,3 @@ class PaymentTransaction(osv.Model):
'partner_phone': False,
}
return {'values': values}
def validate(self, cr, uid, ids, context=None):
"""
return (status, retry_time, log)
status: "validated" or "refused" or "pending"
retry_time = False (don't retry validation) or int (seconds for retry validation)
log = str
"""
res = []
for tx in self.browse(cr, uid, ids, context=context):
method = getattr(self, '%s_validate')
status, retry_time, log = method(cr, uid, [tx.id], context=context)[0]
# log validation on transaction
self.message_post(
cr, uid, tx.id,
body=log or "",
subject="%s%s" % (status, retry_time and ": %s" % retry_time or ""),
type='notification',
context=context
)
if status == "validated":
_logger.info("Tx Validated for %s:%s" % (tx.acquirer_id.name, tx.reference))
elif status == "pending":
_logger.debug("Tx Pending for %s:%s. Reason: %s" % (tx.acquirer_id.name, tx.reference))
else:
_logger.error("Tx Refused for %s:%s. Reason: %s" % (tx.acquirer_id.name, tx.reference))
res.append((status, retry_time, log))
return res
def create_s2s(self, cr, uid, context=None):
pass

View File

@ -101,10 +101,12 @@
<field name="model">payment.transaction</field>
<field name="arch" type="xml">
<tree string="Payment Transactions">
<field name="name"/>
<field name="reference"/>
<field name="acquirer_id"/>
<field name="partner_id"/>
<field name="partner_name"/>
<field name="state"/>
<field name="reference"/>
</tree>
</field>
</record>
@ -113,9 +115,10 @@
<field name="model">payment.transaction</field>
<field name="arch" type="xml">
<search>
<field name="reference"/>
<field name="acquirer_id"/>
<field name="partner_id"/>
<field name="partner_name"/>
<field name="reference"/>
</search>
</field>
</record>