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>
26 lines
996 B
Python
26 lines
996 B
Python
# 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
|