[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

@@ -57,21 +57,22 @@ Usage
2. When creating a contract, fill fields for selecting the invoicing 2. When creating a contract, fill fields for selecting the invoicing
parameters: parameters:
- a journal - a journal
- a price list (optional) - a price list (optional)
3. And add the lines to be invoiced with: 3. And add the lines to be invoiced with:
- the product with a description, a quantity and a price - the product with a description, a quantity and a price
- the recurrence parameters: interval (days, weeks, months, months - the recurrence parameters: interval (days, weeks, months, months
last day or years), start date, date of next invoice (automatically last day or years), start date, date of next invoice
computed, can be modified) and end date (optional) (automatically computed, can be modified) and end date (optional)
- auto-price, for having a price automatically obtained from the - auto-price, for having a price automatically obtained from the
price list price list
- #START# or #END# in the description field to display the start/end - #START# - #END# or #INVOICEMONTHNAME# in the description field to
date of the invoiced period in the invoice line description display the start/end date or the start month of the invoiced
- pre-paid (invoice at period start) or post-paid (invoice at start period in the invoice line description
of next period) - 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 4. The "Generate Recurring Invoices from Contracts" cron runs daily to
generate the invoices. If you are in debug mode, you can click on the generate the invoices. If you are in debug mode, you can click on the
@@ -85,7 +86,7 @@ Usage
price list and lines when creating a contract. To use it, just select price list and lines when creating a contract. To use it, just select
the template on the contract and fields will be filled automatically. the template on the contract and fields will be filled automatically.
- Contracts appear in portal to following users in every contract: - Contracts appear in portal to following users in every contract:
|image| |image|
@@ -100,8 +101,8 @@ Usage
Known issues / Roadmap Known issues / Roadmap
====================== ======================
- Recover states and others functional fields in Contracts. - Recover states and others functional fields in Contracts.
- Add recurrence flag at template level. - Add recurrence flag at template level.
Bug Tracker Bug Tracker
=========== ===========
@@ -125,33 +126,33 @@ Authors
Contributors Contributors
------------ ------------
- Angel Moya <angel.moya@domatix.com> - Angel Moya <angel.moya@domatix.com>
- Dave Lasley <dave@laslabs.com> - Dave Lasley <dave@laslabs.com>
- Miquel Raïch <miquel.raich@eficent.com> - Miquel Raïch <miquel.raich@eficent.com>
- Souheil Bejaoui <souheil.bejaoui@acsone.eu> - Souheil Bejaoui <souheil.bejaoui@acsone.eu>
- Thomas Binsfeld <thomas.binsfeld@acsone.eu> - Thomas Binsfeld <thomas.binsfeld@acsone.eu>
- Guillaume Vandamme <guillaume.vandamme@acsone.eu> - Guillaume Vandamme <guillaume.vandamme@acsone.eu>
- Raphaël Reverdy <raphael.reverdy@akretion.com> - Raphaël Reverdy <raphael.reverdy@akretion.com>
- `Tecnativa <https://www.tecnativa.com>`__: - `Tecnativa <https://www.tecnativa.com>`__:
- Pedro M. Baeza - Pedro M. Baeza
- Carlos Dauden - Carlos Dauden
- Vicent Cubells - Vicent Cubells
- Rafael Blasco - Rafael Blasco
- Víctor Martínez - Víctor Martínez
- Iván Antón <ozono@ozonomultimedia.com> - Iván Antón <ozono@ozonomultimedia.com>
- `APSL <https://www.apsl.tech>`__: - `APSL <https://www.apsl.tech>`__:
- Antoni Marroig <amarroig@apsl.net> - Antoni Marroig <amarroig@apsl.net>
Maintainers Maintainers
----------- -----------

View File

@@ -595,6 +595,23 @@ class ContractLine(models.Model):
) )
return first_date_invoiced, last_date_invoiced, recurring_next_date 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): def _insert_markers(self, first_date_invoiced, last_date_invoiced):
self.ensure_one() self.ensure_one()
lang_obj = self.env["res.lang"] lang_obj = self.env["res.lang"]
@@ -603,6 +620,12 @@ class ContractLine(models.Model):
name = self.name name = self.name
name = name.replace("#START#", first_date_invoiced.strftime(date_format)) name = name.replace("#START#", first_date_invoiced.strftime(date_format))
name = name.replace("#END#", last_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 return name
def _update_recurring_next_date(self): def _update_recurring_next_date(self):

View File

@@ -11,9 +11,9 @@
(automatically computed, can be modified) and end date (optional) (automatically computed, can be modified) and end date (optional)
- auto-price, for having a price automatically obtained from the - auto-price, for having a price automatically obtained from the
price list price list
- \#START# or \#END# in the description field to display the - \#START# - \#END# or \#INVOICEMONTHNAME# in the description field
start/end date of the invoiced period in the invoice line to display the start/end date or the start month of the invoiced
description period in the invoice line description
- pre-paid (invoice at period start) or post-paid (invoice at start - pre-paid (invoice at period start) or post-paid (invoice at start
of next period) of next period)
4. The "Generate Recurring Invoices from Contracts" cron runs daily to 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>And add the lines to be invoiced with:<ul>
<li>the product with a description, a quantity and a price</li> <li>the product with a description, a quantity and a price</li>
<li>the recurrence parameters: interval (days, weeks, months, months <li>the recurrence parameters: interval (days, weeks, months, months
last day or years), start date, date of next invoice (automatically last day or years), start date, date of next invoice
computed, can be modified) and end date (optional)</li> (automatically computed, can be modified) and end date (optional)</li>
<li>auto-price, for having a price automatically obtained from the <li>auto-price, for having a price automatically obtained from the
price list</li> price list</li>
<li>#START# or #END# in the description field to display the start/end <li>#START# - #END# or #INVOICEMONTHNAME# in the description field to
date of the invoiced period in the invoice line description</li> 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 <li>pre-paid (invoice at period start) or post-paid (invoice at start
of next period)</li> of next period)</li>
</ul> </ul>

View File

@@ -8,6 +8,7 @@ from collections import namedtuple
from datetime import timedelta from datetime import timedelta
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from freezegun import freeze_time
from odoo import fields from odoo import fields
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
@@ -141,7 +142,7 @@ class TestContractBase(common.TransactionCase):
0, 0,
{ {
"product_id": False, "product_id": False,
"name": "Header for Services", "name": "Header for #INVOICEMONTHNAME# Services",
"display_type": "line_section", "display_type": "line_section",
}, },
), ),
@@ -2385,3 +2386,11 @@ class TestContract(TestContractBase):
self.assertEqual(len(self.contract._get_related_invoices()), 4) self.assertEqual(len(self.contract._get_related_invoices()), 4)
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
self.assertEqual(len(self.contract._get_related_invoices()), 4) 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 the
invoiced period invoiced period
</p> </p>
<p colspan="2">
<strong>#INVOICEMONTHNAME#</strong>
: Invoice month name
of
the
invoiced period
</p>
</group> </group>
</page> </page>
</notebook> </notebook>

View File

@@ -76,6 +76,8 @@
<p> <strong <p> <strong
>#START#</strong>: Start date of the invoiced period</p> >#START#</strong>: Start date of the invoiced period</p>
<p> <strong>#END#</strong>: End 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> </div>
</group> </group>
</form> </form>