====================== 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 `_) 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 (mounted by ``docker-compose.yml`` from ``ODOO_SRC``, set in your local ``.env``):: 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 `_: * Criptomart