feat: hide authorizer for rental orders, auto-set sale type

Rental orders no longer show the "Authorizer Required?" question or
the Authorizer field. The sale type is automatically set to 'Rentals'
when creating or confirming a rental order. Validation logic also
skips authorizer checks for rental sale type.

Made-with: Cursor
This commit is contained in:
gsinghpal
2026-02-25 23:33:23 -05:00
parent 3c8f83b8e6
commit 14fe9ab716
51 changed files with 4192 additions and 822 deletions

View File

@@ -42,6 +42,11 @@ class PoyntPaymentWizard(models.TransientModel):
required=True,
domain="[('code', '=', 'poynt'), ('state', '!=', 'disabled')]",
)
provider_name = fields.Char(
related='provider_id.name',
string="Poynt Provider",
readonly=True,
)
payment_mode = fields.Selection(
selection=[
@@ -109,7 +114,7 @@ class PoyntPaymentWizard(models.TransientModel):
res['amount'] = invoice.amount_residual
res['currency_id'] = invoice.currency_id.id
provider = self.env['payment.provider'].search([
provider = self.env['payment.provider'].sudo().search([
('code', '=', 'poynt'),
('state', '!=', 'disabled'),
], limit=1)
@@ -120,10 +125,15 @@ class PoyntPaymentWizard(models.TransientModel):
return res
def _get_provider_sudo(self):
return self.provider_id.sudo()
@api.onchange('provider_id')
def _onchange_provider_id(self):
if self.provider_id and self.provider_id.poynt_default_terminal_id:
self.terminal_id = self.provider_id.poynt_default_terminal_id
if self.provider_id:
provider = self._get_provider_sudo()
if provider.poynt_default_terminal_id:
self.terminal_id = provider.poynt_default_terminal_id
def action_collect_payment(self):
"""Dispatch to the appropriate payment method."""
@@ -213,7 +223,8 @@ class PoyntPaymentWizard(models.TransientModel):
},
}
action = 'AUTHORIZE' if self.provider_id.capture_manually else 'SALE'
provider = self._get_provider_sudo()
action = 'AUTHORIZE' if provider.capture_manually else 'SALE'
minor_amount = poynt_utils.format_poynt_amount(
self.amount, self.currency_id,
)
@@ -232,7 +243,7 @@ class PoyntPaymentWizard(models.TransientModel):
'source': 'WEB',
'sourceApp': 'odoo.fusion_poynt',
'transactionInstruction': 'ONLINE_AUTH_REQUIRED',
'businessId': self.provider_id.poynt_business_id,
'businessId': provider.poynt_business_id,
},
'notes': reference,
}
@@ -243,7 +254,7 @@ class PoyntPaymentWizard(models.TransientModel):
'type': 'POYNT_ORDER',
}]
result = self.provider_id._poynt_make_request(
result = provider._poynt_make_request(
'POST', 'transactions', payload=txn_payload,
)
@@ -303,7 +314,7 @@ class PoyntPaymentWizard(models.TransientModel):
if not terminal:
raise UserError(_("No terminal associated with this payment."))
provider = self.provider_id
provider = self._get_provider_sudo()
try:
txn = self._find_terminal_transaction(provider)
@@ -517,14 +528,15 @@ class PoyntPaymentWizard(models.TransientModel):
def _create_poynt_order(self, reference):
"""Create a Poynt order via the API."""
provider = self._get_provider_sudo()
order_payload = poynt_utils.build_order_payload(
reference,
self.amount,
self.currency_id,
business_id=self.provider_id.poynt_business_id,
store_id=self.provider_id.poynt_store_id or '',
business_id=provider.poynt_business_id,
store_id=provider.poynt_store_id or '',
)
return self.provider_id._poynt_make_request(
return provider._poynt_make_request(
'POST', 'orders', payload=order_payload,
)