[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 @@
from . import pos_payment_method

View file

@ -0,0 +1,26 @@
# Copyright 2026 - Today Criptomart
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api
from odoo import models
CASHDRO_FIELDS = ["cashdro_host", "cashdro_user", "cashdro_password"]
class PosPaymentMethod(models.Model):
_inherit = "pos.payment.method"
@api.model
def _load_pos_data_fields(self, config_id):
"""Send the CashDro credentials to the PoS front end.
`pos_payment_method_cashdro` still declares them through
`_loader_params_pos_payment_method`, the 17.0 loading API, which 18.0
replaced by this method. That override is dead code, so the front end
never receives the host and can't build the CashDro url.
Only the missing fields are added, so this module stays harmless once
the base one is fixed upstream.
"""
fields = super()._load_pos_data_fields(config_id)
fields.extend(field for field in CASHDRO_FIELDS if field not in fields)
return fields