Skip to content
Merged
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,10 +1,13 @@
import odoo.tests.common as common
from datetime import date

from odoo import fields
from odoo.exceptions import ValidationError
from odoo.tests.common import Form

from odoo.addons.base.tests.common import BaseCommon


class TestAccountPaymentTermMultiDay(common.TransactionCase):
class TestAccountPaymentTermMultiDay(BaseCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
Expand Down Expand Up @@ -340,3 +343,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))