Initial commit: Odoo 18.0-20251222 extra-addons
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled

This commit is contained in:
tocmo0nlord
2026-03-13 20:43:25 +00:00
parent 36e847a7df
commit adbe430761
9472 changed files with 1265727 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import account_payment_register

View File

@@ -0,0 +1,75 @@
# Copyright 2023 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class AccountPaymentRegister(models.TransientModel):
_inherit = "account.payment.register"
currency_diff = fields.Boolean(
compute="_compute_currency_diff",
store=True,
)
manual_currency = fields.Boolean()
type_currency = fields.Selection(
selection=lambda self: self.line_ids.move_id._get_label_currency_name(),
)
manual_currency_rate = fields.Float(
digits="Manual Currency",
help="Set new currency rate to apply on the invoice\n."
"This rate will be taken in order to convert amounts between the "
"currency on the purchase order and last currency",
)
@api.depends("currency_id")
def _compute_currency_diff(self):
for rec in self:
rec.currency_diff = rec.company_currency_id != rec.currency_id
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
if self._context.get("active_model") == "account.move":
moves = self.env["account.move"].browse(self._context.get("active_ids", []))
elif self._context.get("active_model") == "account.move.line":
moves = (
self.env["account.move.line"]
.browse(self._context.get("active_ids", []))
.mapped("move_id")
)
# Check manual currency
if len(set(moves.mapped("manual_currency"))) != 1:
raise UserError(
_(
"You can only register payments for moves "
"with the same manual currency."
)
)
res["manual_currency"] = moves.mapped("manual_currency")[0]
if len(list(set(moves.mapped("manual_currency_rate")))) == 1:
res["manual_currency_rate"] = moves.mapped("manual_currency_rate")[0]
if len(list(set(moves.mapped("type_currency")))) == 1:
res["type_currency"] = moves.mapped("type_currency")[0]
return res
def _init_payments(self, to_process, edit_mode=False):
"""Update currency rate on move line payment"""
payments = super()._init_payments(to_process, edit_mode)
if self.manual_currency:
for vals in to_process:
payment = vals["payment"]
payment.move_id.write(
{
"manual_currency": self.manual_currency,
"type_currency": self.type_currency,
"manual_currency_rate": self.manual_currency_rate,
}
)
payment_ml = payment.move_id.line_ids
payment_ml._compute_currency_rate()
payment_ml.with_context(
check_move_validity=False
)._inverse_amount_currency()
return payments

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_account_payment_register_form" model="ir.ui.view">
<field name="name">account.payment.register.form</field>
<field name="model">account.payment.register</field>
<field name="inherit_id" ref="account.view_account_payment_register_form" />
<field name="arch" type="xml">
<xpath expr="//group[@name='group2']" position="inside">
<field name="currency_diff" invisible="1" />
<label
for="manual_currency"
groups="base.group_multi_currency"
invisible="not currency_diff"
/>
<div groups="base.group_multi_currency" invisible="not currency_diff">
<field name="manual_currency" />
<label for="manual_currency_rate" invisible='1' />
<div class="o_row" invisible="not manual_currency">
<field name="manual_currency_rate" />
<field name="type_currency" required="manual_currency" />
</div>
</div>
</xpath>
</field>
</record>
</odoo>