[ADD] pos_payment_method_cashdro_fix: 17.0 API leftovers in the OCA base module
The 18.0 migration of `pos_payment_method_cashdro` (OCA/pos@6a4c251d) kept three uses of APIs removed in 18.0. The module has no tests nor tours and needs a physical drawer to be exercised, so the OCA CI can't catch them: * `_cashdro_url()` reads `order.selected_paymentline`, so `.payment_method` on the resulting `undefined` throws a TypeError on every payment, swallowed into a generic "An error occurred while connecting to the cashdro" dialog. * The `add_paymentline()` patch checks `line.payment_method`, renamed to `payment_method_id`, so the line keeps the default due amount instead of waiting for the amount the customer inserts. * `_loader_params_pos_payment_method()` is the 17.0 loading API, replaced by `_load_pos_data_fields()`. Dead code, so the CashDro credentials never reach the front end. Patched from the outside, as OCA sources are not to be modified. Written to stay harmless once fixed upstream: the Python override only adds the missing fields and the JS patches are idempotent against the fixed code. `upstream/pos_payment_method_cashdro-18.0-fixes.patch` holds the same fixes as a ready to send `git format-patch`, verified with `git apply --check`. This module is temporary and should be removed once that lands in OCA/pos. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
fb5b3d1f7e
commit
4615da6dae
14 changed files with 426 additions and 0 deletions
86
pos_payment_method_cashdro_fix/README.rst
Normal file
86
pos_payment_method_cashdro_fix/README.rst
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
======================
|
||||
POS CashDro 18.0 Fixes
|
||||
======================
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
|
||||
|badge1| |badge2|
|
||||
|
||||
The 18.0 migration of ``pos_payment_method_cashdro``
|
||||
(`OCA/pos@6a4c251d <https://github.com/OCA/pos/commit/6a4c251d>`_) left three
|
||||
uses of the 17.0 API that stop the CashDro integration from working. The module
|
||||
has no tests nor tours and needs a physical drawer to be exercised, so nothing
|
||||
in the OCA CI catches them.
|
||||
|
||||
This module patches the three of them from the outside, without touching the
|
||||
OCA sources:
|
||||
|
||||
#. ``_cashdro_url()`` reads ``order.selected_paymentline``, replaced in 18.0 by
|
||||
``order.get_selected_paymentline()``. Reading ``.payment_method`` on the
|
||||
resulting ``undefined`` raises a ``TypeError`` on every payment, which the
|
||||
caller swallows into a generic *"An error occurred while connecting to the
|
||||
cashdro"* message.
|
||||
#. The ``add_paymentline`` patch checks ``line.payment_method``, renamed to
|
||||
``line.payment_method_id`` in 18.0. The condition is never true, so the
|
||||
payment line keeps the default due amount instead of waiting for the amount
|
||||
the customer inserts in the drawer.
|
||||
#. ``pos.session._loader_params_pos_payment_method`` is the 17.0 loading API,
|
||||
replaced in 18.0 by ``_load_pos_data_fields`` on each model. The override is
|
||||
dead code, so ``cashdro_host``, ``cashdro_user`` and ``cashdro_password``
|
||||
never reach the front end.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
There is nothing to configure: installing the module is enough.
|
||||
|
||||
To check the three fixes on a PoS with a CashDro terminal:
|
||||
|
||||
#. Open a PoS session, add a product and go to the payment screen.
|
||||
#. Select the CashDro payment method. The payment line must show **0**, not the
|
||||
due amount (fix 2).
|
||||
#. The drawer must start the operation and ask for the amount, instead of the
|
||||
*"An error occurred while connecting to the cashdro"* dialog (fixes 1 and 3).
|
||||
#. With no CashDro at hand, the browser console tells fix 1 from fix 3 apart:
|
||||
without this module the failure is a ``TypeError: Cannot read properties of
|
||||
undefined (reading 'payment_method')``; with it, a network error against the
|
||||
configured host.
|
||||
|
||||
The Python side is covered by the tests. The base module lives outside this
|
||||
repo, so the OCA sources have to be on the addons path (see
|
||||
``docker-compose.override.yml``, which is local and untracked)::
|
||||
|
||||
docker-compose run --rm odoo odoo -c /etc/odoo/odoo.conf \
|
||||
--addons-path=/mnt/extra-addons,/mnt/oca/pos,/usr/lib/python3/dist-packages/odoo/addons \
|
||||
-d odoo -u pos_payment_method_cashdro_fix --test-enable --stop-after-init
|
||||
|
||||
Known issues / Roadmap
|
||||
======================
|
||||
|
||||
This module is meant to be temporary. The fixes are proposed upstream in
|
||||
``upstream/pos_payment_method_cashdro-18.0-fixes.patch``; once they are merged
|
||||
in ``OCA/pos`` this module can be uninstalled and removed.
|
||||
|
||||
It is written to stay harmless in the meantime: the Python override only adds
|
||||
the credential fields that are missing from the loader, and the JavaScript
|
||||
patches are idempotent with respect to the fixed upstream code.
|
||||
|
||||
The JavaScript side can't be covered by automated tests, as it needs a CashDro
|
||||
terminal answering on the network.
|
||||
|
||||
Contributors
|
||||
============
|
||||
|
||||
* `Criptomart <https://criptomart.net>`_:
|
||||
|
||||
* Criptomart
|
||||
Loading…
Add table
Add a link
Reference in a new issue