Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
75
account_manual_currency/wizard/account_payment_register.py
Normal file
75
account_manual_currency/wizard/account_payment_register.py
Normal 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
|
||||
Reference in New Issue
Block a user