mirror of
https://github.com/bringout/oca-ocb-accounting.git
synced 2026-04-24 08:42:08 +02:00
Initial commit: Accounting packages
This commit is contained in:
commit
4ef34c2317
2661 changed files with 1709616 additions and 0 deletions
|
|
@ -0,0 +1,68 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.http import request
|
||||
|
||||
from odoo.addons.account.controllers import portal
|
||||
from odoo.addons.payment.controllers.portal import PaymentPortal
|
||||
from odoo.addons.portal.controllers.portal import _build_url_w_params
|
||||
|
||||
|
||||
class PortalAccount(portal.PortalAccount):
|
||||
|
||||
def _invoice_get_page_view_values(self, invoice, access_token, **kwargs):
|
||||
values = super()._invoice_get_page_view_values(invoice, access_token, **kwargs)
|
||||
|
||||
if not invoice._has_to_be_paid():
|
||||
# Do not compute payment-related stuff if given invoice doesn't have to be paid.
|
||||
return values
|
||||
|
||||
logged_in = not request.env.user._is_public()
|
||||
# We set partner_id to the partner id of the current user if logged in, otherwise we set it
|
||||
# to the invoice partner id. We do this to ensure that payment tokens are assigned to the
|
||||
# correct partner and to avoid linking tokens to the public user.
|
||||
partner_sudo = request.env.user.partner_id if logged_in else invoice.partner_id
|
||||
invoice_company = invoice.company_id or request.env.company
|
||||
|
||||
providers_sudo = request.env['payment.provider'].sudo()._get_compatible_providers(
|
||||
invoice_company.id,
|
||||
partner_sudo.id,
|
||||
invoice.amount_total,
|
||||
currency_id=invoice.currency_id.id
|
||||
) # In sudo mode to read the fields of providers and partner (if not logged in)
|
||||
tokens = request.env['payment.token'].search(
|
||||
[('provider_id', 'in', providers_sudo.ids), ('partner_id', '=', partner_sudo.id)]
|
||||
) # Tokens are cleared at the end if the user is not logged in
|
||||
|
||||
# Make sure that the partner's company matches the invoice's company.
|
||||
if not PaymentPortal._can_partner_pay_in_company(partner_sudo, invoice_company):
|
||||
providers_sudo = request.env['payment.provider'].sudo()
|
||||
tokens = request.env['payment.token']
|
||||
|
||||
fees_by_provider = {
|
||||
pro_sudo: pro_sudo._compute_fees(
|
||||
invoice.amount_residual, invoice.currency_id, invoice.partner_id.country_id
|
||||
) for pro_sudo in providers_sudo.filtered('fees_active')
|
||||
}
|
||||
values.update({
|
||||
'providers': providers_sudo,
|
||||
'tokens': tokens,
|
||||
'fees_by_provider': fees_by_provider,
|
||||
'show_tokenize_input': PaymentPortal._compute_show_tokenize_input_mapping(
|
||||
providers_sudo, logged_in=logged_in
|
||||
),
|
||||
'amount': invoice.amount_residual,
|
||||
'currency': invoice.currency_id,
|
||||
'partner_id': partner_sudo.id,
|
||||
'access_token': access_token,
|
||||
'transaction_route': f'/invoice/transaction/{invoice.id}/',
|
||||
'landing_route': _build_url_w_params(invoice.access_url, {'access_token': access_token})
|
||||
})
|
||||
if not logged_in:
|
||||
# Don't display payment tokens of the invoice partner if the user is not logged in, but
|
||||
# inform that logging in will make them available.
|
||||
values.update({
|
||||
'existing_token': bool(tokens),
|
||||
'tokens': request.env['payment.token'],
|
||||
})
|
||||
return values
|
||||
Loading…
Add table
Add a link
Reference in a new issue