Merge PR #1662 into 14.0

Signed-off-by alexis-via
This commit is contained in:
OCA-git-bot
2024-09-08 23:47:36 +00:00

View File

@@ -206,15 +206,21 @@ class AccountCheckDeposit(models.Model):
for deposit in self:
if deposit.move_id:
move = deposit.move_id
# It will raise here if journal_id.update_posted = False
counterpart_move_line = move.line_ids.filtered(
lambda x: x.account_id.id != deposit.journal_default_account_id.id
)
if counterpart_move_line.reconciled:
raise UserError(
_("Deposit '%s' has already been credited on the bank account.")
% deposit.display_name
)
move.line_ids.filtered(
lambda x: x.account_id.id == deposit.journal_default_account_id.id
).remove_move_reconcile()
if move.state == "posted":
move.button_draft()
for line in deposit.check_payment_ids:
if line.reconciled:
line.remove_move_reconcile()
move.unlink()
move.button_cancel()
move.with_context(force_delete=True).unlink()
deposit.write({"state": "draft"})
return True
@api.model
def create(self, vals):
@@ -226,76 +232,66 @@ class AccountCheckDeposit(models.Model):
)
return super().create(vals)
def _prepare_account_move_vals(self):
def _prepare_move_vals(self):
self.ensure_one()
move_vals = {
total_debit = 0.0
total_amount_currency = 0.0
for line in self.check_payment_ids:
total_debit += line.debit
total_amount_currency += line.amount_currency
total_debit = self.company_id.currency_id.round(total_debit)
total_amount_currency = self.currency_id.round(total_amount_currency)
counterpart_account_id = self.bank_journal_id.payment_debit_account_id.id
if not counterpart_account_id:
raise UserError(
_("Missing 'Outstanding Receipts Account' on the journal '%s'.")
% self.bank_journal_id.display_name
)
vals = {
"journal_id": self.journal_id.id,
"date": self.deposit_date,
"ref": _("Check Deposit %s") % self.name,
"company_id": self.company_id.id,
"line_ids": [
(
0,
0,
{
"account_id": self.journal_default_account_id.id,
"partner_id": False,
"credit": total_debit,
"currency_id": self.currency_id.id,
"amount_currency": total_amount_currency * -1,
},
),
(
0,
0,
{
"account_id": counterpart_account_id,
"partner_id": False,
"debit": total_debit,
"currency_id": self.currency_id.id,
"amount_currency": total_amount_currency,
},
),
],
}
return move_vals
@api.model
def _prepare_move_line_vals(self, line):
assert line.debit > 0, "Debit must have a value"
return {
"name": line.ref and _("Check Ref. %s") % line.ref or False,
"credit": line.debit,
"debit": 0.0,
"account_id": line.account_id.id,
"partner_id": line.partner_id.id,
"currency_id": line.currency_id.id or False,
"amount_currency": line.amount_currency * -1,
}
def _prepare_counterpart_move_lines_vals(self, total_debit, total_amount_currency):
self.ensure_one()
if not self.bank_journal_id.payment_debit_account_id:
raise UserError(
_("Missing 'Outstanding Receipts Account' on the bank journal '%s'.")
% self.bank_journal_id.display_name
)
return {
"debit": total_debit,
"credit": 0.0,
"account_id": self.bank_journal_id.payment_debit_account_id.id,
"partner_id": False,
"currency_id": self.currency_id.id or False,
"amount_currency": total_amount_currency,
}
return vals
def validate_deposit(self):
am_obj = self.env["account.move"]
move_line_obj = self.env["account.move.line"]
for deposit in self:
move_vals = deposit._prepare_account_move_vals()
move = am_obj.create(move_vals)
total_debit = 0.0
total_amount_currency = 0.0
to_reconcile_lines = []
for line in deposit.check_payment_ids:
total_debit += line.debit
total_amount_currency += line.amount_currency
line_vals = self._prepare_move_line_vals(line)
line_vals["move_id"] = move.id
move_line = move_line_obj.with_context(
check_move_validity=False
).create(line_vals)
to_reconcile_lines.append(line + move_line)
# Create counter-part
counter_vals = deposit._prepare_counterpart_move_lines_vals(
total_debit, total_amount_currency
)
counter_vals["move_id"] = move.id
move_line_obj.create(counter_vals)
move = am_obj.create(deposit._prepare_move_vals())
move.action_post()
lines_to_rec = self.check_payment_ids + move.line_ids.filtered(
lambda x: x.account_id.id == self.journal_default_account_id.id
)
lines_to_rec.reconcile()
deposit.write({"state": "done", "move_id": move.id})
for reconcile_lines in to_reconcile_lines:
reconcile_lines.reconcile()
return True
@api.onchange("company_id")
def onchange_company_id(self):