mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms:improve reconcile move line and sync with folio sale lines
This commit is contained in:
@@ -276,12 +276,6 @@ class AccountMove(models.Model):
|
|||||||
.line_ids.filtered(
|
.line_ids.filtered(
|
||||||
lambda line: line.account_id == pay_term_lines.account_id
|
lambda line: line.account_id == pay_term_lines.account_id
|
||||||
and line.folio_ids in move.folio_ids
|
and line.folio_ids in move.folio_ids
|
||||||
and (
|
|
||||||
line.move_id.partner_id == move.partner_id
|
|
||||||
or not line.move_id.partner_id
|
|
||||||
or move.partner_id
|
|
||||||
== self.env.ref("pms.various_pms_partner")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
to_reconcile = self.match_pays_by_amount(
|
to_reconcile = self.match_pays_by_amount(
|
||||||
@@ -302,41 +296,6 @@ class AccountMove(models.Model):
|
|||||||
self._autoreconcile_folio_payments()
|
self._autoreconcile_folio_payments()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def reconcile(self):
|
|
||||||
"""
|
|
||||||
Reconcile the account move
|
|
||||||
"""
|
|
||||||
res = super(AccountMove, self).reconcile()
|
|
||||||
# Update partner in payments and statement lines
|
|
||||||
for record in self:
|
|
||||||
if record.payment_id:
|
|
||||||
old_payment_partner = record.payment_id.partner_id
|
|
||||||
if old_payment_partner != record.partner_id:
|
|
||||||
record.payment_id.partner_id = record.partner_id
|
|
||||||
if old_payment_partner:
|
|
||||||
record.payment_id.message_post(
|
|
||||||
body=_(
|
|
||||||
f"""
|
|
||||||
Partner modify automatically from invoice {record.name}:
|
|
||||||
{old_payment_partner.name} to {record.partner_id.name}
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
if record.statement_line_id:
|
|
||||||
old_statement_partner = record.statement_line_id.partner_id
|
|
||||||
if old_statement_partner != record.partner_id:
|
|
||||||
record.statement_line_id.partner_id = record.partner_id
|
|
||||||
if old_statement_partner:
|
|
||||||
record.statement_line_id.message_post(
|
|
||||||
body=_(
|
|
||||||
f"""
|
|
||||||
Partner modify automatically from invoice {record.name}:
|
|
||||||
{old_statement_partner.name} to {record.partner_id.name}
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return res
|
|
||||||
|
|
||||||
def match_pays_by_amount(self, payments, invoice):
|
def match_pays_by_amount(self, payments, invoice):
|
||||||
"""
|
"""
|
||||||
Match payments by amount
|
Match payments by amount
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Copyright 2017 Alexandre Díaz
|
# Copyright 2017 Alexandre Díaz
|
||||||
# Copyright 2017 Dario Lodeiros
|
# Copyright 2017 Dario Lodeiros
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||||
from odoo import api, fields, models
|
from odoo import _, api, fields, models
|
||||||
|
|
||||||
|
|
||||||
class AccountMoveLine(models.Model):
|
class AccountMoveLine(models.Model):
|
||||||
@@ -63,8 +63,7 @@ class AccountMoveLine(models.Model):
|
|||||||
def _compute_name(self):
|
def _compute_name(self):
|
||||||
res = super()._compute_name()
|
res = super()._compute_name()
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.folio_line_ids and not record.name_changed_by_user:
|
if record.folio_line_ids and not record.name:
|
||||||
record.name_changed_by_user = False
|
|
||||||
record.name = self.env["folio.sale.line"].generate_folio_sale_name(
|
record.name = self.env["folio.sale.line"].generate_folio_sale_name(
|
||||||
record.folio_line_ids.reservation_id,
|
record.folio_line_ids.reservation_id,
|
||||||
record.product_id,
|
record.product_id,
|
||||||
@@ -129,3 +128,50 @@ class AccountMoveLine(models.Model):
|
|||||||
move.pms_property_id.id or move.move_id.pms_property_id.id
|
move.pms_property_id.id or move.move_id.pms_property_id.id
|
||||||
)
|
)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def reconcile(self):
|
||||||
|
"""
|
||||||
|
Reconcile the account move
|
||||||
|
"""
|
||||||
|
res = super(AccountMoveLine, self).reconcile()
|
||||||
|
# Update partner in payments and statement lines
|
||||||
|
for record in self:
|
||||||
|
if record.payment_id:
|
||||||
|
old_payment_partner = record.payment_id.partner_id
|
||||||
|
new_payment_partner = record.payment_id.mapped(
|
||||||
|
"reconciled_invoice_ids.partner_id"
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
old_payment_partner != new_payment_partner
|
||||||
|
and len(new_payment_partner) == 1
|
||||||
|
):
|
||||||
|
record.payment_id.partner_id = new_payment_partner
|
||||||
|
if old_payment_partner:
|
||||||
|
record.payment_id.message_post(
|
||||||
|
body=_(
|
||||||
|
f"""
|
||||||
|
Partner modify automatically from invoice:
|
||||||
|
{old_payment_partner.name} to {new_payment_partner.name}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if record.statement_line_id:
|
||||||
|
old_statement_partner = record.statement_line_id.partner_id
|
||||||
|
new_payment_partner = record.payment_id.mapped(
|
||||||
|
"reconciled_invoice_ids.partner_id"
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
old_statement_partner != new_payment_partner
|
||||||
|
and len(new_payment_partner) == 1
|
||||||
|
):
|
||||||
|
record.statement_line_id.partner_id = new_payment_partner
|
||||||
|
if old_statement_partner:
|
||||||
|
record.statement_line_id.message_post(
|
||||||
|
body=_(
|
||||||
|
f"""
|
||||||
|
Partner modify automatically from invoice:
|
||||||
|
{old_statement_partner.name} to {new_payment_partner.name}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return res
|
||||||
|
|||||||
@@ -1006,6 +1006,7 @@ class FolioSaleLine(models.Model):
|
|||||||
)
|
)
|
||||||
# If has draft invoices, we need to update the invoice lines
|
# If has draft invoices, we need to update the invoice lines
|
||||||
if "draft" in self.mapped("invoice_lines.move_id.state"):
|
if "draft" in self.mapped("invoice_lines.move_id.state"):
|
||||||
|
draft_moves = self.env["account.move"]
|
||||||
if "product_uom_qty" in values:
|
if "product_uom_qty" in values:
|
||||||
for line in self:
|
for line in self:
|
||||||
if line.qty_invoiced > values["product_uom_qty"]:
|
if line.qty_invoiced > values["product_uom_qty"]:
|
||||||
@@ -1015,7 +1016,10 @@ class FolioSaleLine(models.Model):
|
|||||||
" You must reduce the invoiced quantity first."
|
" You must reduce the invoiced quantity first."
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
for line in self.filtered(lambda l: not l.display_type):
|
for line in self.filtered(
|
||||||
|
lambda l: not l.display_type and l.move_id.state == "draft"
|
||||||
|
):
|
||||||
|
draft_moves |= line.invoice_lines.move_id
|
||||||
mapped_fields = self._get_mapped_move_line_fields()
|
mapped_fields = self._get_mapped_move_line_fields()
|
||||||
move_line_vals = [
|
move_line_vals = [
|
||||||
(
|
(
|
||||||
@@ -1036,6 +1040,9 @@ class FolioSaleLine(models.Model):
|
|||||||
)
|
)
|
||||||
if "product_uom_qty" in values:
|
if "product_uom_qty" in values:
|
||||||
line._mens_update_line_quantity(values)
|
line._mens_update_line_quantity(values)
|
||||||
|
# avoid draft invoice naming compute
|
||||||
|
if draft_moves:
|
||||||
|
draft_moves.name = "/"
|
||||||
|
|
||||||
result = super(FolioSaleLine, self).write(values)
|
result = super(FolioSaleLine, self).write(values)
|
||||||
return result
|
return result
|
||||||
@@ -1084,12 +1091,22 @@ class FolioSaleLine(models.Model):
|
|||||||
def unlink(self):
|
def unlink(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.qty_invoiced > 0:
|
if record.qty_invoiced > 0:
|
||||||
raise UserError(
|
# If the invoice line is in draft, unlink it, else raise an error
|
||||||
_(
|
if record.invoice_lines.filtered(lambda l: l.move_id.state == "draft"):
|
||||||
"You cannot delete a sale order line once a "
|
moves = record.invoice_lines.mapped("move_id")
|
||||||
"invoice has been created from it."
|
record.invoice_lines.with_context(
|
||||||
|
check_move_validity=False
|
||||||
|
).filtered(lambda l: l.move_id.state == "draft").unlink()
|
||||||
|
moves._recompute_dynamic_lines(
|
||||||
|
recompute_all_taxes=True, recompute_tax_base_amount=True
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise UserError(
|
||||||
|
_(
|
||||||
|
"You cannot delete a sale order line once a "
|
||||||
|
"invoice has been created from it."
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
return super(FolioSaleLine, self).unlink()
|
return super(FolioSaleLine, self).unlink()
|
||||||
|
|
||||||
def _get_real_price_currency(self, product, rule_id, qty, uom, pricelist_id):
|
def _get_real_price_currency(self, product, rule_id, qty, uom, pricelist_id):
|
||||||
|
|||||||
Reference in New Issue
Block a user