[IMP] Add INVOICEMONTHNAME marker to line description

[FIX] contract: Set fixed date to check test correctly.

We need to set a fixed date for teststest_check_month_name_marker to check against
the month of the date we are set (otherwise it would check against the month of today).
This commit is contained in:
stenex
2023-05-08 17:27:06 +02:00
committed by Víctor Martínez
parent f06ebb66b1
commit cb97087329
7 changed files with 82 additions and 39 deletions

View File

@@ -64,12 +64,13 @@ Usage
- the product with a description, a quantity and a price
- the recurrence parameters: interval (days, weeks, months, months
last day or years), start date, date of next invoice (automatically
computed, can be modified) and end date (optional)
last day or years), start date, date of next invoice
(automatically computed, can be modified) and end date (optional)
- auto-price, for having a price automatically obtained from the
price list
- #START# or #END# in the description field to display the start/end
date of the invoiced period in the invoice line description
- #START# - #END# or #INVOICEMONTHNAME# in the description field to
display the start/end date or the start month of the invoiced
period in the invoice line description
- pre-paid (invoice at period start) or post-paid (invoice at start
of next period)

View File

@@ -595,6 +595,23 @@ class ContractLine(models.Model):
)
return first_date_invoiced, last_date_invoiced, recurring_next_date
def _translate_marker_month_name(self, month_name):
months = {
"January": _("January"),
"February": _("February"),
"March": _("March"),
"April": _("April"),
"May": _("May"),
"June": _("June"),
"July": _("July"),
"August": _("August"),
"September": _("September"),
"October": _("October"),
"November": _("November"),
"December": _("December"),
}
return months[month_name]
def _insert_markers(self, first_date_invoiced, last_date_invoiced):
self.ensure_one()
lang_obj = self.env["res.lang"]
@@ -603,6 +620,12 @@ class ContractLine(models.Model):
name = self.name
name = name.replace("#START#", first_date_invoiced.strftime(date_format))
name = name.replace("#END#", last_date_invoiced.strftime(date_format))
name = name.replace(
"#INVOICEMONTHNAME#",
self.with_context(lang=lang.code)._translate_marker_month_name(
first_date_invoiced.strftime("%B")
),
)
return name
def _update_recurring_next_date(self):

View File

@@ -11,9 +11,9 @@
(automatically computed, can be modified) and end date (optional)
- auto-price, for having a price automatically obtained from the
price list
- \#START# or \#END# in the description field to display the
start/end date of the invoiced period in the invoice line
description
- \#START# - \#END# or \#INVOICEMONTHNAME# in the description field
to display the start/end date or the start month of the invoiced
period in the invoice line description
- pre-paid (invoice at period start) or post-paid (invoice at start
of next period)
4. The "Generate Recurring Invoices from Contracts" cron runs daily to

View File

@@ -410,12 +410,13 @@ parameters:<ul>
<li>And add the lines to be invoiced with:<ul>
<li>the product with a description, a quantity and a price</li>
<li>the recurrence parameters: interval (days, weeks, months, months
last day or years), start date, date of next invoice (automatically
computed, can be modified) and end date (optional)</li>
last day or years), start date, date of next invoice
(automatically computed, can be modified) and end date (optional)</li>
<li>auto-price, for having a price automatically obtained from the
price list</li>
<li>#START# or #END# in the description field to display the start/end
date of the invoiced period in the invoice line description</li>
<li>#START# - #END# or #INVOICEMONTHNAME# in the description field to
display the start/end date or the start month of the invoiced
period in the invoice line description</li>
<li>pre-paid (invoice at period start) or post-paid (invoice at start
of next period)</li>
</ul>

View File

@@ -8,6 +8,7 @@ from collections import namedtuple
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from freezegun import freeze_time
from odoo import fields
from odoo.exceptions import UserError, ValidationError
@@ -141,7 +142,7 @@ class TestContractBase(common.TransactionCase):
0,
{
"product_id": False,
"name": "Header for Services",
"name": "Header for #INVOICEMONTHNAME# Services",
"display_type": "line_section",
},
),
@@ -2385,3 +2386,11 @@ class TestContract(TestContractBase):
self.assertEqual(len(self.contract._get_related_invoices()), 4)
self.contract.recurring_create_invoice()
self.assertEqual(len(self.contract._get_related_invoices()), 4)
@freeze_time("2023-05-01")
def test_check_month_name_marker(self):
"""Set fixed date to check test correctly."""
self.contract3.contract_line_ids.date_start = fields.Date.today()
self.contract3.contract_line_ids.recurring_next_date = fields.Date.today()
invoice_id = self.contract3.recurring_create_invoice()
self.assertEqual(invoice_id.invoice_line_ids[0].name, "Header for May Services")

View File

@@ -478,6 +478,13 @@
the
invoiced period
</p>
<p colspan="2">
<strong>#INVOICEMONTHNAME#</strong>
: Invoice month name
of
the
invoiced period
</p>
</group>
</page>
</notebook>

View File

@@ -76,6 +76,8 @@
<p> <strong
>#START#</strong>: Start date of the invoiced period</p>
<p> <strong>#END#</strong>: End date of the invoiced period</p>
<p> <strong
>#INVOICEMONTHNAME#</strong>: Invoice month name of the invoiced period</p>
</div>
</group>
</form>