Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 20 additions & 16 deletions account_payment_term_extension/models/account_payment_term.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,26 +35,30 @@ def apply_holidays(self, date):
return holiday.date_postponed
return date

def _get_payment_days_due_date(self, date, payment_days):
if payment_days:
new_date = None
payment_days.sort()
days_in_month = calendar.monthrange(date.year, date.month)[1]
for day in payment_days:
if date.day <= day:
if day > days_in_month:
day = days_in_month
new_date = date + relativedelta(day=day)
break
if not new_date:
day = payment_days[0]
if day > days_in_month:
day = days_in_month
new_date = date + relativedelta(day=day, months=1)
return new_date
return date

def apply_payment_days(self, line, date):
"""Calculate the new date with days of payments"""
if line.payment_days:
payment_days = line._decode_payment_days(line.payment_days)
if payment_days:
new_date = None
payment_days.sort()
days_in_month = calendar.monthrange(date.year, date.month)[1]
for day in payment_days:
if date.day <= day:
if day > days_in_month:
day = days_in_month
new_date = date + relativedelta(day=day)
break
if not new_date:
day = payment_days[0]
if day > days_in_month:
day = days_in_month
new_date = date + relativedelta(day=day, months=1)
return new_date
return self._get_payment_days_due_date(date, payment_days)
return date

@api.depends(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from datetime import date

from odoo import fields
from odoo.exceptions import ValidationError
from odoo.tests import Form
Expand Down Expand Up @@ -319,3 +321,21 @@ def test_decode_payment_days(self):
self.assertEqual(expected_days, model._decode_payment_days("5, 10"))
self.assertEqual(expected_days, model._decode_payment_days("5 - 10"))
self.assertEqual(expected_days, model._decode_payment_days("5 10"))

def test_get_payment_days_due_date(self):
payment_term = self.payment_term_0_days_5_10

result = payment_term._get_payment_days_due_date(date(2020, 1, 1), [5, 10])
self.assertEqual(result, date(2020, 1, 5))

result = payment_term._get_payment_days_due_date(date(2020, 1, 6), [5, 10])
self.assertEqual(result, date(2020, 1, 10))

result = payment_term._get_payment_days_due_date(date(2020, 1, 15), [5, 10])
self.assertEqual(result, date(2020, 2, 5))

result = payment_term._get_payment_days_due_date(date(2020, 2, 1), [30])
self.assertEqual(result, date(2020, 2, 29))

result = payment_term._get_payment_days_due_date(date(2020, 1, 1), [])
self.assertEqual(result, date(2020, 1, 1))