summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/payment_paypal/models/payment.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/addons/payment_paypal/models/payment.py b/addons/payment_paypal/models/payment.py
index 40b38c70092..55d2935a190 100644
--- a/addons/payment_paypal/models/payment.py
+++ b/addons/payment_paypal/models/payment.py
@@ -184,6 +184,7 @@ class TxPaypal(models.Model):
def _paypal_form_validate(self, data):
status = data.get('payment_status')
+ former_tx_state = self.state
res = {
'acquirer_reference': data.get('txn_id'),
'paypal_txn_type': data.get('payment_type'),
@@ -205,7 +206,6 @@ class TxPaypal(models.Model):
self.env['mail.mail'].sudo().create(mail_values).send()
if status in ['Completed', 'Processed']:
- _logger.info('Validated Paypal payment for tx %s: set as done' % (self.reference))
try:
# dateutil and pytz don't recognize abbreviations PDT/PST
tzinfos = {
@@ -217,15 +217,22 @@ class TxPaypal(models.Model):
date = fields.Datetime.now()
res.update(date=date)
self._set_transaction_done()
- return self.write(res)
+ if self.state == 'done' and self.state != former_tx_state:
+ _logger.info('Validated Paypal payment for tx %s: set as done' % (self.reference))
+ return self.write(res)
+ return True
elif status in ['Pending', 'Expired']:
- _logger.info('Received notification for Paypal payment %s: set as pending' % (self.reference))
res.update(state_message=data.get('pending_reason', ''))
self._set_transaction_pending()
- return self.write(res)
+ if self.state == 'pending' and self.state != former_tx_state:
+ _logger.info('Received notification for Paypal payment %s: set as pending' % (self.reference))
+ return self.write(res)
+ return True
else:
error = 'Received unrecognized status for Paypal payment %s: %s, set as error' % (self.reference, status)
- _logger.info(error)
res.update(state_message=error)
self._set_transaction_cancel()
- return self.write(res)
+ if self.state == 'cancel' and self.state != former_tx_state:
+ _logger.info(error)
+ return self.write(res)
+ return True