[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:
GitHub Copilot 2026-08-11 13:31:11 +02:00
parent fb5b3d1f7e
commit 4615da6dae
14 changed files with 426 additions and 0 deletions

View file

@ -0,0 +1,3 @@
* `Criptomart <https://criptomart.net>`_:
* Criptomart

View file

@ -0,0 +1,22 @@
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.

View file

@ -0,0 +1,10 @@
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. See ``USAGE`` for the manual check.

View file

@ -0,0 +1,21 @@
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