Skip to content

Commit

Permalink
[Fix #11] Add PayZen status process and fields to show data from PayZ…
Browse files Browse the repository at this point in the history
…en WebService

Signed-off-by: Logan Gonet <[email protected]>
  • Loading branch information
Warlocklogan committed Aug 10, 2021
1 parent f2c4e97 commit c08536e
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 12 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

## [Unreleased]
### Added
- [Imp] Add PayZen status process and fields to show data from PayZen WebService

### Fix

Expand Down
33 changes: 29 additions & 4 deletions payment_payzen/i18n/fr.po
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * payment_payzen
# * payment_payzen
#
msgid ""
msgstr ""
Expand All @@ -18,7 +18,7 @@ msgstr ""
#. module: payment_payzen
#: model:payment.acquirer,cancel_msg:payment_payzen.payment_acquirer_payzen
msgid "<span><i>Cancel,</i> Your payment has been cancelled.</span>"
msgstr "<span><i>Annulé,</i> votre paiement à été annulé.</span>"
msgstr "<span><i>Annulé,</i> Votre paiement à été annulé.</span>"

#. module: payment_payzen
#: model:payment.acquirer,done_msg:payment_payzen.payment_acquirer_payzen
Expand Down Expand Up @@ -137,6 +137,11 @@ msgstr "Cron pour vérifier les transactions de paiement en attente de Payzen"
msgid "Currency"
msgstr "Devise"

#. module: payment_payzen
#: model:ir.model.fields,help:payment_payzen.field_payment_transaction_payzen_returned_data
msgid "Data returned from PayZen WebService"
msgstr "Données renvoyées par le WebService PayZen "

#. module: payment_payzen
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:60
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:66
Expand Down Expand Up @@ -382,6 +387,11 @@ msgstr "Échéance de la temporisation de surveillance globale."
msgid "Partial Approval (Prepaid Cards only)"
msgstr "Autorisation partielle (Cartes prépayées seulement)"

#. module: payment_payzen
#: model:ir.ui.view,arch_db:payment_payzen.payzen_transaction_form
msgid "PayZen TX Details"
msgstr "Détails PayZen TX"

#. module: payment_payzen
#: model:ir.model,name:payment_payzen.model_payment_acquirer
msgid "Payment Acquirer"
Expand Down Expand Up @@ -437,9 +447,14 @@ msgstr "Réponse non parvenue ou reçue trop tard."
msgid "Retry later"
msgstr "Répéter la transaction ultérieurement."

#. module: payment_payzen
#: model:ir.model.fields,field_description:payment_payzen.field_payment_transaction_payzen_returned_data
msgid "Returned data"
msgstr "Données renvoyées"

#. module: payment_payzen
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:46
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:52
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:47
#, python-format
msgid "Security rules unfulfilled"
msgstr "Règles de sécurité non respectées."
Expand All @@ -456,9 +471,19 @@ msgstr "Serveur indisponible routage réseau demandé à nouveau."
msgid "Shop ID"
msgstr "Identifiant de la boutique"

#. module: payment_payzen
#: model:ir.model.fields,field_description:payment_payzen.field_payment_transaction_payzen_status
msgid "Status"
msgstr "État"

#. module: payment_payzen
#: model:ir.model.fields,help:payment_payzen.field_payment_transaction_payzen_status
msgid "Status from PayZen WebService"
msgstr "État renvoyées par le WebService PayZen"

#. module: payment_payzen
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:36
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:42
#: code:addons/payment_payzen/models/inherited_payment_transaction.py:37
#, python-format
msgid "Stolen card"
msgstr "Carte volée."
Expand Down
79 changes: 75 additions & 4 deletions payment_payzen/models/inherited_payment_transaction.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import datetime
import json
import logging
import requests
from json import JSONDecodeError
Expand Down Expand Up @@ -88,6 +89,16 @@
class PayzenTransaction(models.Model):
_inherit = 'payment.transaction'

payzen_status = fields.Char(
string='Status',
help='Status from PayZen WebService',
)

payzen_returned_data = fields.Text(
string='Returned data',
help='Data returned from PayZen WebService',
)

# region Model methods
@api.model
def _payzen_form_get_tx_from_data(self, data):
Expand Down Expand Up @@ -193,27 +204,87 @@ def _payzen_form_validate(self, data):
"""
self.ensure_one()

transaction_status = data.get('vads_trans_status')

values = {
'state_message': VADS_AUTH_RESULT.get(data.get('vads_auth_result')),
'acquirer_reference': data.get('vads_trans_uuid')
'acquirer_reference': data.get('vads_trans_uuid'),
'payzen_status': transaction_status,
'payzen_returned_data': json.dumps(data, indent=4, separators=(',', ': ')),
}

transaction_status = data.get('vads_trans_status')

if transaction_status == 'AUTHORISED':
if transaction_status == 'ACCEPTED':
# Statut d'une transaction de type VERIFICATION dont l'autorisation ou la demande de renseignement a été
# acceptée.
_logger.info("Validated Payzen payment for transaction %s: set as done" % self.reference)
values['state'] = 'done'
values['date_validate'] = fields.Datetime.now()
elif transaction_status == 'AUTHORISED':
# La transaction est acceptée et sera remise en banque automatiquement à la date prévue.
_logger.info("Validated Payzen payment for transaction %s: set as done" % self.reference)
values['state'] = 'done'
values['date_validate'] = fields.Datetime.now()
elif transaction_status == 'AUTHORISED_TO_VALIDATE':
# La transaction, créée en validation manuelle, est autorisée. Le marchand doit valider manuellement la
# transaction afin qu'elle soit remise en banque.
_logger.info("Validated Payzen payment for transaction %s: set as done" % self.reference)
values['state'] = 'authorized'
values['date_validate'] = fields.Datetime.now()
elif transaction_status == 'CAPTURED':
# La transaction est remise en banque.
_logger.info("Validated Payzen payment for transaction %s: set as done" % self.reference)
values['state'] = 'authorized'
values['date_validate'] = fields.Datetime.now()
elif transaction_status == 'CANCELLED':
# La transaction est annulée par le marchand.
_logger.info("Validated Payzen payment for transaction %s: set as cancelled" % self.reference)
values['state'] = 'cancel'
elif transaction_status == 'ABANDONED':
# Paiement abandonné par l’acheteur.
_logger.info("Validated Payzen payment for transaction %s: set as cancelled" % self.reference)
values['state'] = 'cancel'
elif transaction_status == 'INITIAL':
# Ce statut est spécifique à tous les moyens de paiement nécessitant une intégration par formulaire de
# paiement en redirection.
_logger.info("Validated Payzen payment for transaction %s: set as pending" % self.reference)
values['state'] = 'pending'
elif transaction_status == 'UNDER_VERIFICATION':
# Pour les transactions PayPal, cette valeur signifie que PayPal retient la transaction pour suspicion de
# fraude.
# Le paiement restera dans l’onglet Transactions en cours jusqu'à ce que les vérifications soient achevées.
# La transaction prendra alors l'un des statuts suivants: AUTHORISED ou CANCELED.
_logger.info("Validated Payzen payment for transaction %s: set as pending" % self.reference)
values['state'] = 'pending'
elif transaction_status == 'WAITING_AUTHORISATION':
# Le délai de remise en banque est supérieur à la durée de validité de l'autorisation.
_logger.info("Validated Payzen payment for transaction %s: set as pending" % self.reference)
values['state'] = 'pending'
elif transaction_status == 'WAITING_AUTHORISATION_TO_VALIDATE':
# Le délai de remise en banque est supérieur à la durée de validité de l'autorisation.
_logger.info("Validated Payzen payment for transaction %s: set as pending" % self.reference)
values['state'] = 'pending'
elif transaction_status == 'CAPTURE_FAILED':
# La remise de la transaction a échoué.
_logger.info("Validated Payzen payment for transaction %s: set as error" % self.reference)
values['state'] = 'error'
elif transaction_status == 'EXPIRED':
# La date d'expiration de la demande d'autorisation est atteinte et le marchand n’a pas validé la
# transaction. Le porteur ne sera donc pas débité.
_logger.info("Validated Payzen payment for transaction %s: set as error" % self.reference)
values['state'] = 'error'
elif transaction_status == 'NOT_CREATED':
# La transaction n'est pas créée et n'est pas visible dans le Back Office Marchand.
_logger.info("Validated Payzen payment for transaction %s: set as error" % self.reference)
values['state'] = 'error'
elif transaction_status == 'REFUSED':
# La transaction est refusée.
_logger.info("Validated Payzen payment for transaction %s: set as error" % self.reference)
values['state'] = 'error'
elif transaction_status == 'SUSPENDED':
# La remise de la transaction est temporairement bloquée par l'acquéreur (AMEX GLOBAL ou SECURE TRADING).
# Une fois la remise traitée correctement, le statut de la transaction deviendra CAPTURED.
_logger.info("Validated Payzen payment for transaction %s: set as error" % self.reference)
values['state'] = 'error'
else:
_logger.info(f"Validated Payzen payment for transaction {self.reference}: set as error. "
f"Receive Status : {transaction_status}")
Expand Down
16 changes: 12 additions & 4 deletions payment_payzen/views/payment_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@
</field>
</record>


<record id="transaction_form_payfip" model="ir.ui.view">
<field name="name">Add action for Payzen acquirer</field>
<record id="payzen_transaction_form" model="ir.ui.view">
<field name="name">Add data/action from PayZen acquirer</field>
<field name="model">payment.transaction</field>
<field name="inherit_id" ref="payment.transaction_form"/>
<field name="arch" type="xml">
Expand All @@ -32,7 +31,16 @@
attrs="{'invisible': ['|', ('state','not in',['draft','pending']), ('provider', '!=', 'payzen')]}"
/>
</xpath>
<xpath expr='//sheet' position='inside'>
<notebook>
<page string="PayZen TX Details" attrs="{'invisible': [('provider', '!=', 'payzen')]}">
<group>
<field name="payzen_status"/>
<field name="payzen_returned_data" readonly="1" groups="base.group_no_one"/>
</group>
</page>
</notebook>
</xpath>
</field>
</record>

</odoo>

0 comments on commit c08536e

Please sign in to comment.