Добавление даты в odoo 10.0

У меня есть класс:

class DateAddition(models.Model):
      _name = "studentmanagement.dateaddition"

      input_date = fields.Date()
      output_date = fields.Date()
      no_months = fields.Integer()

Затем, если я заполню input_date = "26 февраля 2017" и no_months = 2, output_date будет "26 апреля 2017". Как я могу сделать это в odoo-10.0 с помощью on_change?


person Lee Dat    schedule 26.02.2017    source источник


Ответы (1)


Я не знаю, как подключить это к вашему odoo on_change, но вот процедура добавления или вычитания месяцев из вашей строки даты:

Код:

import datetime as dt

def add_month(date, months):
    assert isinstance(date, dt.date)
    year, month, day = date.year, date.month, date.day
    year += int((month + months-1) / 12)
    month = (month + months - 1) % 12 + 1
    return dt.date(year, month, day)

def add_month_from_string(date_string, months):
    date = dt.datetime.strptime(date_string, '%d %b %Y')
    return add_month(date, months).strftime('%d %b %Y')

Тестовые данные:

test_data = (
    ("26 Feb 2017", 2, "26 Apr 2017"),
    ("6 Dec 2016", 3, "6 Mar 2017"),
    ("26 Feb 2017", -2, "26 Dec 2016"),
)

for have, inc, want in test_data:
    print(have, inc, add_month_from_string(have, inc), want)

Результаты:

('26 Feb 2017', 2, '26 Apr 2017', '26 Apr 2017')
('6 Dec 2016', 3, '06 Mar 2017', '6 Mar 2017')
('26 Feb 2017', -2, '26 Dec 2016', '26 Dec 2016')
person Stephen Rauch    schedule 26.02.2017