[FIX] partner_statement: don't consider reconciled lines outside date range
parent
bfc3d1d10d
commit
44a6cc065d
|
@ -310,7 +310,7 @@ class ActivityStatementXslx(models.AbstractModel):
|
|||
FORMATS["current_money_format"] = workbook.add_format(
|
||||
{"align": "right", "num_format": money_string}
|
||||
)
|
||||
bg_grey = "#CCCCCC"
|
||||
bg_grey = "#ADB5BD"
|
||||
FORMATS["format_tcell_left_blocked"] = copy_format(
|
||||
workbook, FORMATS["format_tcell_left"]
|
||||
)
|
||||
|
|
|
@ -100,12 +100,20 @@ class DetailedActivityStatementXslx(models.AbstractModel):
|
|||
format_tcell_date_left = FORMATS["format_tcell_date_left_blocked"]
|
||||
format_distributed = FORMATS["format_distributed_blocked"]
|
||||
current_money_format = FORMATS["current_money_format_blocked"]
|
||||
elif line.get("reconciled_line") and not line.get("blocked"):
|
||||
elif (
|
||||
line.get("reconciled_line")
|
||||
and not line.get("blocked")
|
||||
and not line.get("outside-date-rank")
|
||||
):
|
||||
format_tcell_left = FORMATS["format_tcell_left_reconciled"]
|
||||
format_tcell_date_left = FORMATS["format_tcell_date_left_reconciled"]
|
||||
format_distributed = FORMATS["format_distributed_reconciled"]
|
||||
current_money_format = FORMATS["current_money_format_reconciled"]
|
||||
elif line.get("blocked") and line.get("reconciled_line"):
|
||||
elif (
|
||||
line.get("blocked")
|
||||
and line.get("reconciled_line")
|
||||
and not line.get("outside-date-rank")
|
||||
):
|
||||
format_tcell_left = FORMATS["format_tcell_left_blocked_reconciled"]
|
||||
format_tcell_date_left = FORMATS[
|
||||
"format_tcell_date_left_blocked_reconciled"
|
||||
|
@ -114,6 +122,40 @@ class DetailedActivityStatementXslx(models.AbstractModel):
|
|||
current_money_format = FORMATS[
|
||||
"current_money_format_blocked_reconciled"
|
||||
]
|
||||
elif (
|
||||
line.get("reconciled_line")
|
||||
and not line.get("blocked")
|
||||
and line.get("outside-date-rank")
|
||||
):
|
||||
format_tcell_left = FORMATS[
|
||||
"format_tcell_left_reconciled_outside-date-rank"
|
||||
]
|
||||
format_tcell_date_left = FORMATS[
|
||||
"format_tcell_date_left_reconciled_outside-date-rank"
|
||||
]
|
||||
format_distributed = FORMATS[
|
||||
"format_distributed_reconciled_outside-date-rank"
|
||||
]
|
||||
current_money_format = FORMATS[
|
||||
"current_money_format_reconciled_outside-date-rank"
|
||||
]
|
||||
elif (
|
||||
line.get("blocked")
|
||||
and line.get("reconciled_line")
|
||||
and line.get("outside-date-rank")
|
||||
):
|
||||
format_tcell_left = FORMATS[
|
||||
"format_tcell_left_blocked_reconciled_outside-date-rank"
|
||||
]
|
||||
format_tcell_date_left = FORMATS[
|
||||
"format_tcell_date_left_blocked_reconciled_outside-date-rank"
|
||||
]
|
||||
format_distributed = FORMATS[
|
||||
"format_distributed_blocked_reconciled_outside-date-rank"
|
||||
]
|
||||
current_money_format = FORMATS[
|
||||
"current_money_format_blocked_reconciled_outside-date-rank"
|
||||
]
|
||||
else:
|
||||
format_tcell_left = FORMATS["format_tcell_left"]
|
||||
format_tcell_date_left = FORMATS["format_tcell_date_left"]
|
||||
|
@ -491,7 +533,8 @@ class DetailedActivityStatementXslx(models.AbstractModel):
|
|||
FORMATS["current_money_format"] = workbook.add_format(
|
||||
{"align": "right", "num_format": money_string}
|
||||
)
|
||||
bg_grey = "#CCCCCC"
|
||||
bg_grey = "#ADB5BD"
|
||||
fc_red = "#DC3545"
|
||||
FORMATS["format_tcell_left_blocked"] = copy_format(
|
||||
workbook, FORMATS["format_tcell_left"]
|
||||
)
|
||||
|
@ -530,32 +573,79 @@ class DetailedActivityStatementXslx(models.AbstractModel):
|
|||
FORMATS["current_money_format_reconciled"].set_italic(True)
|
||||
FORMATS["current_money_format_reconciled"].set_font_size(10)
|
||||
FORMATS["format_tcell_left_blocked_reconciled"] = copy_format(
|
||||
workbook, FORMATS["format_tcell_left"]
|
||||
workbook, FORMATS["format_tcell_left_reconciled"]
|
||||
)
|
||||
FORMATS["format_tcell_left_blocked_reconciled"].set_bg_color(bg_grey)
|
||||
FORMATS["format_tcell_left_blocked_reconciled"].set_italic(True)
|
||||
FORMATS["format_tcell_left_blocked_reconciled"].set_font_size(10)
|
||||
FORMATS["format_tcell_left_blocked_reconciled"].set_indent(1)
|
||||
FORMATS["format_tcell_date_left_blocked_reconciled"] = copy_format(
|
||||
workbook, FORMATS["format_tcell_date_left"]
|
||||
workbook, FORMATS["format_tcell_date_left_reconciled"]
|
||||
)
|
||||
FORMATS["format_tcell_date_left_blocked_reconciled"].set_bg_color(
|
||||
bg_grey
|
||||
)
|
||||
FORMATS["format_tcell_date_left_blocked_reconciled"].set_italic(True)
|
||||
FORMATS["format_tcell_date_left_blocked_reconciled"].set_font_size(10)
|
||||
FORMATS["format_distributed_blocked_reconciled"] = copy_format(
|
||||
workbook, FORMATS["format_distributed"]
|
||||
workbook, FORMATS["format_distributed_reconciled"]
|
||||
)
|
||||
FORMATS["format_distributed_blocked_reconciled"].set_bg_color(bg_grey)
|
||||
FORMATS["format_distributed_blocked_reconciled"].set_italic(True)
|
||||
FORMATS["format_distributed_blocked_reconciled"].set_font_size(10)
|
||||
FORMATS["current_money_format_blocked_reconciled"] = copy_format(
|
||||
workbook, FORMATS["current_money_format"]
|
||||
workbook, FORMATS["current_money_format_reconciled"]
|
||||
)
|
||||
FORMATS["current_money_format_blocked_reconciled"].set_bg_color(bg_grey)
|
||||
FORMATS["current_money_format_blocked_reconciled"].set_italic(True)
|
||||
FORMATS["current_money_format_blocked_reconciled"].set_font_size(10)
|
||||
FORMATS["format_tcell_left_reconciled_outside-date-rank"] = copy_format(
|
||||
workbook, FORMATS["format_tcell_left_reconciled"]
|
||||
)
|
||||
FORMATS[
|
||||
"format_tcell_left_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
FORMATS[
|
||||
"format_tcell_date_left_reconciled_outside-date-rank"
|
||||
] = copy_format(workbook, FORMATS["format_tcell_date_left_reconciled"])
|
||||
FORMATS[
|
||||
"format_tcell_date_left_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
FORMATS[
|
||||
"format_distributed_reconciled_outside-date-rank"
|
||||
] = copy_format(workbook, FORMATS["format_distributed_reconciled"])
|
||||
FORMATS[
|
||||
"format_distributed_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
FORMATS[
|
||||
"current_money_format_reconciled_outside-date-rank"
|
||||
] = copy_format(workbook, FORMATS["current_money_format_reconciled"])
|
||||
FORMATS[
|
||||
"current_money_format_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
FORMATS[
|
||||
"format_tcell_left_blocked_reconciled_outside-date-rank"
|
||||
] = copy_format(
|
||||
workbook, FORMATS["format_tcell_left_blocked_reconciled"]
|
||||
)
|
||||
FORMATS[
|
||||
"format_tcell_left_blocked_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
FORMATS[
|
||||
"format_tcell_date_left_blocked_reconciled_outside-date-rank"
|
||||
] = copy_format(
|
||||
workbook, FORMATS["format_tcell_date_left_blocked_reconciled"]
|
||||
)
|
||||
FORMATS[
|
||||
"format_tcell_date_left_blocked_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
FORMATS[
|
||||
"format_distributed_blocked_reconciled_outside-date-rank"
|
||||
] = copy_format(
|
||||
workbook, FORMATS["format_distributed_blocked_reconciled"]
|
||||
)
|
||||
FORMATS[
|
||||
"format_distributed_blocked_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
FORMATS[
|
||||
"current_money_format_blocked_reconciled_outside-date-rank"
|
||||
] = copy_format(
|
||||
workbook, FORMATS["current_money_format_blocked_reconciled"]
|
||||
)
|
||||
FORMATS[
|
||||
"current_money_format_blocked_reconciled_outside-date-rank"
|
||||
].set_font_color(fc_red)
|
||||
row_pos = self._write_currency_prior_lines(
|
||||
row_pos, sheet, partner, currency, data
|
||||
)
|
||||
|
|
|
@ -288,7 +288,7 @@ class OutstandingStatementXslx(models.AbstractModel):
|
|||
FORMATS["current_money_format"] = workbook.add_format(
|
||||
{"align": "right", "num_format": money_string}
|
||||
)
|
||||
bg_grey = "#CCCCCC"
|
||||
bg_grey = "#ADB5BD"
|
||||
FORMATS["format_tcell_left_blocked"] = copy_format(
|
||||
workbook, FORMATS["format_tcell_left"]
|
||||
)
|
||||
|
|
|
@ -476,6 +476,7 @@ class ReportStatementCommon(models.AbstractModel):
|
|||
if not line["blocked"]:
|
||||
line_currency["ending_balance"] += line[amount_field]
|
||||
line["balance"] = line_currency["ending_balance"]
|
||||
line["outside-date-rank"] = False
|
||||
line["date"] = format_date(
|
||||
line["date"], date_formats.get(partner_id, default_fmt)
|
||||
)
|
||||
|
@ -491,6 +492,14 @@ class ReportStatementCommon(models.AbstractModel):
|
|||
)
|
||||
for line2 in reconciled_lines:
|
||||
if line2["id"] in line["ids"]:
|
||||
line2["reconciled_line"] = True
|
||||
line2["applied_amount"] = line2["open_amount"]
|
||||
if line2["date"] >= date_start and line2["date"] <= date_end:
|
||||
line2["outside-date-rank"] = False
|
||||
if not line2["blocked"]:
|
||||
line["applied_amount"] += line2["open_amount"]
|
||||
else:
|
||||
line2["outside-date-rank"] = True
|
||||
line2["date"] = format_date(
|
||||
line2["date"], date_formats.get(partner_id, default_fmt)
|
||||
)
|
||||
|
@ -498,9 +507,6 @@ class ReportStatementCommon(models.AbstractModel):
|
|||
line2["date_maturity"],
|
||||
date_formats.get(partner_id, default_fmt),
|
||||
)
|
||||
line2["reconciled_line"] = True
|
||||
line2["applied_amount"] = line2["open_amount"]
|
||||
line["applied_amount"] += line2["open_amount"]
|
||||
if is_detailed:
|
||||
line_currency["lines"].extend(
|
||||
self._add_currency_line(
|
||||
|
@ -509,7 +515,8 @@ class ReportStatementCommon(models.AbstractModel):
|
|||
)
|
||||
if is_activity:
|
||||
line["open_amount"] = line["amount"] + line["applied_amount"]
|
||||
line_currency["amount_due"] += line["open_amount"]
|
||||
if not line["blocked"]:
|
||||
line_currency["amount_due"] += line["open_amount"]
|
||||
|
||||
if is_detailed:
|
||||
for line_currency in currency_dict.values():
|
||||
|
|
|
@ -28,3 +28,10 @@
|
|||
font-style: italic !important;
|
||||
}
|
||||
}
|
||||
|
||||
.statement-outside-date-rank {
|
||||
color: $red !important;
|
||||
td:last-child {
|
||||
color: $red !important;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
from datetime import date
|
||||
|
||||
from freezegun import freeze_time
|
||||
|
||||
from odoo import fields
|
||||
from odoo.tests import new_test_user
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
@ -112,8 +114,10 @@ class TestActivityStatement(TransactionCase):
|
|||
)
|
||||
self.assertEqual(res, "30/09/2018")
|
||||
|
||||
@freeze_time("2024-05-01")
|
||||
def test_onchange_aging_type(self):
|
||||
"""Test that partner data is filled accordingly"""
|
||||
self.today = fields.Date.context_today(self.wiz)
|
||||
wiz_id = self.wiz.with_context(
|
||||
active_ids=[self.partner1.id, self.partner2.id]
|
||||
).new()
|
||||
|
@ -127,3 +131,21 @@ class TestActivityStatement(TransactionCase):
|
|||
wiz_id.onchange_aging_type()
|
||||
self.assertEqual((wiz_id.date_end - wiz_id.date_start).days, 30)
|
||||
self.assertTrue(wiz_id.date_end == self.today)
|
||||
|
||||
@freeze_time("2024-05-31")
|
||||
def test_onchange_aging_type2(self):
|
||||
"""Test that partner data is filled accordingly"""
|
||||
self.today = fields.Date.context_today(self.wiz)
|
||||
wiz_id = self.wiz.with_context(
|
||||
active_ids=[self.partner1.id, self.partner2.id]
|
||||
).new()
|
||||
wiz_id.aging_type = "months"
|
||||
wiz_id.onchange_aging_type()
|
||||
self.assertEqual(wiz_id.date_end.month, wiz_id.date_start.month)
|
||||
self.assertTrue(wiz_id.date_end.day > wiz_id.date_start.day)
|
||||
self.assertTrue(wiz_id.date_end < self.today)
|
||||
|
||||
wiz_id.aging_type = "days"
|
||||
wiz_id.onchange_aging_type()
|
||||
self.assertEqual((wiz_id.date_end - wiz_id.date_start).days, 31)
|
||||
self.assertTrue(wiz_id.date_end == self.today)
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<tr
|
||||
t-foreach="currency['lines']"
|
||||
t-as="line"
|
||||
t-att-class="('statement-blocked ' if line['blocked'] else '') + ('statement-reconciled' if line['reconciled_line'] else '')"
|
||||
t-att-class="('statement-blocked ' if line['blocked'] else '') + ('statement-reconciled ' if line['reconciled_line'] else '') + ('statement-outside-date-rank' if line['outside-date-rank'] else '')"
|
||||
>
|
||||
<td>
|
||||
<span
|
||||
|
|
|
@ -27,7 +27,7 @@ class ActivityStatementWizard(models.TransientModel):
|
|||
if self.aging_type == "months":
|
||||
self.date_start = self.date_end.replace(day=1)
|
||||
else:
|
||||
self.date_start = self.date_end - relativedelta(days=30)
|
||||
self.date_start = self.date_end - relativedelta(months=1)
|
||||
return res
|
||||
|
||||
def _prepare_statement(self):
|
||||
|
@ -47,7 +47,7 @@ class ActivityStatementWizard(models.TransientModel):
|
|||
report_name = "p_s.report_activity_statement_xlsx"
|
||||
else:
|
||||
report_name = "partner_statement.activity_statement"
|
||||
partners = self.env["res.partner"].browse(self._context["active_ids"])
|
||||
partners = self.env["res.partner"].browse(data["partner_ids"])
|
||||
return (
|
||||
self.env["ir.actions.report"]
|
||||
.search(
|
||||
|
|
|
@ -30,7 +30,7 @@ class DetailedActivityStatementWizard(models.TransientModel):
|
|||
report_name = "p_s.report_detailed_activity_statement_xlsx"
|
||||
else:
|
||||
report_name = "partner_statement.detailed_activity_statement"
|
||||
partners = self.env["res.partner"].browse(self._context["active_ids"])
|
||||
partners = self.env["res.partner"].browse(data["partner_ids"])
|
||||
return (
|
||||
self.env["ir.actions.report"]
|
||||
.search(
|
||||
|
|
|
@ -27,7 +27,7 @@ class OutstandingStatementWizard(models.TransientModel):
|
|||
report_name = "p_s.report_outstanding_statement_xlsx"
|
||||
else:
|
||||
report_name = "partner_statement.outstanding_statement"
|
||||
partners = self.env["res.partner"].browse(self._context["active_ids"])
|
||||
partners = self.env["res.partner"].browse(data["partner_ids"])
|
||||
return (
|
||||
self.env["ir.actions.report"]
|
||||
.search(
|
||||
|
|
Loading…
Reference in New Issue