Què diu GoCardless
| On | Reason o causa | Text de GoCardless |
|---|---|---|
API, en crear un cobrament (invalid_state) | mandate_replaced | Mandate has been replaced. Check links[new_mandate] in the error or on the mandate itself. |
| mandates · replaced | scheme_identifier_changed | The creditor has changed to a different scheme identifier, so this mandate has been cancelled and replaced by a new one. |
La documentació d'esdeveniments ho explica així: «The mandate has been cancelled and replaced by a new mandate (for example, because the creditor has moved to a new Service User Number).». I el que porta l'esdeveniment: «The event will include links[new_mandate] with the ID of the new mandate.».
mandate_replaced és un error invalid_state: l'acció no val en l'estat actual del recurs. Per a aquests errors GoCardless demana avisar l'usuari i no reintentar («invalid_state → inform the end user, do not allow retry.»).

Quan apareix
El canvi no el provoca el client ni el seu banc: l'esdeveniment replaced té origen gocardless, i la causa documentada és que el creditor, el compte amb què cobres a GoCardless, ha passat a un altre identificador d'esquema. GoCardless cancel·la el mandat vell i en crea un de nou en el seu lloc.
mandate_replaced només apareix si Odoo intenta cobrar amb el mandat vell: el cobrament d'una subscripció que es renova, o un pagament registrat amb el mètode de pagament desat del client, abans que Odoo hagi aplicat l'esdeveniment.
Què fa Odoo amb el connector
Amb l'esdeveniment replaced:
- Pren el mandat nou de
links.new_mandate. - Passa a aquest mandat el mètode de pagament desat del client i el dona per bo, en lloc de donar-lo per perdut. Si el mètode estava arxivat, el reactiva; Odoo 17 no deixa desarxivar un mètode de pagament, i aleshores el connector en crea un de nou per al mandat nou.
- L'escriu a la fitxa del client: «The GoCardless mandate is usable again (replaced).».
Aquesta nota l'escriu el connector en aplicar l'esdeveniment, sense ningú al davant. El connector no està traduït al català: aquests textos surten sempre en anglès, també en un Odoo en català, tant si els llança un usuari com una tasca programada: «The GoCardless mandate is usable again (replaced).».
Amb mandate_replaced en un cobrament, el connector no fa res d'especial: en crear un cobrament només tracta a part mandate_is_inactive. La transacció passa a «Error» amb «GoCardless rejected the request.» i, a sota, el missatge de GoCardless amb mandate_replaced i el request_id entre claudàtors. El mandat nou el pren de l'esdeveniment, no de l'error. Aquest missatge també surt en anglès, tant si el llança un usuari com una tasca programada: «GoCardless rejected the request.».

Què fer
- Si un cobrament es queda en error amb
mandate_replaced, obre la transacció des de la factura, amb el botó «Transacció de pagament» de dalt; el menú de transaccions només surt en mode desenvolupador, i a Odoo 20 no existeix. - Mira a la fitxa del client si ja hi és la nota que el mandat es pot tornar a usar (replaced). Si hi és, el mètode de pagament ja apunta al mandat nou.
- Si no hi és, l'esdeveniment encara no ha arribat. La tasca que cada hora recupera els esdeveniments perduts el porta; si triga més, revisa que els webhooks de GoCardless arribin a Odoo.
- Amb el mètode de pagament al dia, torna a cobrar la factura.
Cal demanar al client que torni a signar?
No per seguir cobrant amb el connector: el mandat nou el crea GoCardless i el connector passa a ell el mètode de pagament desat.
Què passa a Odoo 17?
El mateix, amb una diferència: si el mètode de pagament vell estava arxivat, Odoo 17 no deixa reactivar-lo, així que el connector en crea un de nou per al mandat nou. A 18, 19 i 20 reactiva el que hi havia.
Amb el nostre connector
A Odoo 17, 18, 19 i 20 el connector segueix el mandat nou en quan GoCardless avisa de la substitució: el client conserva el seu mètode de pagament i la següent factura es cobra amb el mandat que GoCardless ha deixat al seu lloc.
Continua llegint
Comprovat al codi del connector (versió 17.0, 18.0, 19.0 i 20.0) i a les fonts enllaçades
Fonts
- docs.gocardless.com/docs/api-reference/responses-and-errors
- docs.gocardless.com/docs/api-reference/events/mandate
- Codi del mòdul: flexigo_payment_gocardless: models/payment_token.py, línia 72 a 17.0 (d203ee6), línia 72 a 18.0 (e2ab18b), línia 72 a 19.0 (ce7f5a3) i línia 71 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 150 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 158 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_token.py, línia 77 a 17.0 (d203ee6), línia 77 a 18.0 (e2ab18b), línia 77 a 19.0 (ce7f5a3) i línia 76 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_token.py, línia 96 a 17.0 (d203ee6), línia 96 a 18.0 (e2ab18b), línia 96 a 19.0 (ce7f5a3) i línia 95 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1157 a 17.0 (d203ee6), línia 1157 a 18.0 (e2ab18b), línia 1157 a 19.0 (ce7f5a3) i línia 1164 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 278 a 17.0 (d203ee6), línia 278 a 18.0 (e2ab18b), línia 278 a 19.0 (ce7f5a3) i línia 289 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 281 a 17.0 (d203ee6), línia 281 a 18.0 (e2ab18b), línia 281 a 19.0 (ce7f5a3) i línia 292 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 397 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 462 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 521 a 17.0 (d203ee6), línia 521 a 18.0 (e2ab18b), línia 521 a 19.0 (ce7f5a3) i línia 523 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 117 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 247 a 17.0 (d203ee6), línia 247 a 18.0 (e2ab18b), línia 247 a 19.0 (ce7f5a3) i línia 258 a 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/ca.po
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- Codi del mòdul: flexigo_payment_gocardless: __manifest__.py, línia 31 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
