Skip to content

Commit

Permalink
[IMP] project_utilities: extend wizard
Browse files Browse the repository at this point in the history
  • Loading branch information
oihane committed Jul 30, 2021
1 parent a06741a commit b7e9f67
Show file tree
Hide file tree
Showing 4 changed files with 220 additions and 32 deletions.
30 changes: 23 additions & 7 deletions project_utilities/models/project_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from odoo import api, fields, models
from odoo.osv import expression

from datetime import datetime
from dateutil.relativedelta import relativedelta

str2datetime = fields.Datetime.from_string
Expand All @@ -27,15 +28,30 @@ class ProjectTask(models.Model):
_inherit = 'project.task'

@api.multi
def _change_project_task_date(self, new_days):
if not new_days:
def _change_project_task_date(
self, date_start=False, date_end=False):
if not date_start and not date_end:
return
for task in self:
vals = {}
deltadays = relativedelta(days=new_days)
if task.date_start:
vals['date_start'] = str2datetime(task.date_start) + deltadays
if task.date_end:
vals['date_end'] = str2datetime(task.date_end) + deltadays
if date_start:
if isinstance(date_start, int):
deltadays = relativedelta(days=date_start)
if task.date_start:
date_start = (
str2datetime(task.date_start) + deltadays)
if isinstance(date_start, str):
date_start = str2datetime(date_start)
if isinstance(date_start, datetime):
vals['date_start'] = date_start
if date_end:
if isinstance(date_end, int):
deltadays = relativedelta(days=date_end)
if task.date_end:
date_end = (str2datetime(task.date_end) + deltadays)
if isinstance(date_end, str):
date_end = str2datetime(date_end)
if isinstance(date_end, datetime):
vals['date_end'] = date_end
if vals:
task.write(vals)
159 changes: 137 additions & 22 deletions project_utilities/tests/test_project_utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@
str2date = fields.Date.from_string


@common.at_install(False)
@common.post_install(True)
class TestProjectUtilities(common.TransactionCase):

def setUp(self):
super(TestProjectUtilities, self).setUp()
self.wiz_obj = self.env['wiz.change.project.task.date']
self.current_year = str2date(fields.Date.today()).year
task_vals = {
'name': 'task for test project_utilities',
'date_start': "{}-01-01 08:00:00".format(
str2date(fields.Date.today()).year),
'date_end': "{}-01-15 20:00:00".format(
str2date(fields.Date.today()).year)}
'date_start': "{}-01-01 08:00:00".format(self.current_year),
'date_end': "{}-01-15 20:00:00".format(self.current_year)}
project_vals = {
'name': 'Project for test project_utilities',
'task_ids': [(0, 0, task_vals)]}
Expand All @@ -28,30 +29,144 @@ def test_show_analytic_account(self):
self.assertEquals(domain,
[('id', '=', self.project.analytic_account_id.id)])

def test_project_task_change_day(self):
task = self.project.task_ids[0]
def test_project_task_change_days_parameter(self):
task = self.project.task_ids[:1]
wiz = self.wiz_obj.with_context(active_ids=[task.id]).create({
'days': 5,
"days": 5,
"start_days": 2,
"end_days": 2,
"start_date": "{}-02-01 08:00:00".format(self.current_year),
"end_date": "{}-02-15 08:00:00".format(self.current_year),
})
wiz.button_change_project_task_date()
date_start = "{}-01-06 08:00:00".format(
str2date(fields.Date.today()).year)
date_end = "{}-01-20 20:00:00".format(
str2date(fields.Date.today()).year)
date_start = "{}-01-06 08:00:00".format(self.current_year)
date_end = "{}-01-20 20:00:00".format(self.current_year)
self.assertEqual(
task.date_start, date_start, 'BAD date start(1)')
task.date_start, date_start, "Wrong date start")
self.assertEqual(
task.date_end, date_end, 'BAD date end(1)')
task.date_end, date_end, "Wrong date end")
wiz.days = -2
wiz.button_change_project_task_date()
date_start = "{}-01-04 08:00:00".format(
str2date(fields.Date.today()).year)
date_end = "{}-01-18 20:00:00".format(
str2date(fields.Date.today()).year)
date_start = "{}-01-04 08:00:00".format(self.current_year)
date_end = "{}-01-18 20:00:00".format(self.current_year)
self.assertEqual(
task.date_start, date_start, 'BAD date start(2)')
task.date_start, date_start, "Wrong date start")
self.assertEqual(
task.date_end, date_end, 'BAD date end(2)')
task._change_project_task_date(0)
self.assertEqual(task.date_start, date_start)
self.assertEqual(task.date_end, date_end)
task.date_end, date_end, "Wrong date end")

def test_project_task_change_different_days(self):
task = self.project.task_ids[:1]
wiz = self.wiz_obj.with_context(active_ids=[task.id]).create({
"days": 0,
"start_days": 6,
"end_days": 4,
})
wiz.button_change_project_task_date()
date_start = "{}-01-07 08:00:00".format(self.current_year)
date_end = "{}-01-19 20:00:00".format(self.current_year)
self.assertEqual(
task.date_start, date_start, "Wrong date start")
self.assertEqual(
task.date_end, date_end, "Wrong date end")
wiz.write({
"start_days": -3,
"end_days": -1,
})
wiz.button_change_project_task_date()
date_start = "{}-01-04 08:00:00".format(self.current_year)
date_end = "{}-01-18 20:00:00".format(self.current_year)
self.assertEqual(
task.date_start, date_start, "Wrong date start")
self.assertEqual(
task.date_end, date_end, "Wrong date end")

def test_project_task_change_dates(self):
task = self.project.task_ids[:1]
date_start = "{}-01-06 08:00:00".format(self.current_year)
date_end = "{}-01-20 20:00:00".format(self.current_year)
wiz = self.wiz_obj.with_context(active_ids=[task.id]).create({
"days": 0,
"start_days": 0,
"end_days": 0,
"start_date": date_start,
"end_date": date_end,
})
wiz.button_change_project_task_date()
self.assertEqual(
task.date_start, date_start, "Wrong date start")
self.assertEqual(
task.date_end, date_end, "Wrong date end")

def test_project_task_change_mixed(self):
task = self.project.task_ids[:1]
date_end = "{}-01-20 20:00:00".format(self.current_year)
wiz = self.wiz_obj.with_context(active_ids=[task.id]).create({
"days": 0,
"start_days": 2,
"end_date": date_end,
})
wiz.button_change_project_task_date()
new_date_start = "{}-01-03 08:00:00".format(self.current_year)
self.assertEqual(
task.date_start, new_date_start, "Wrong date start")
self.assertEqual(
task.date_end, date_end, "Wrong date end")
change_date_start = "{}-01-06 08:00:00".format(self.current_year)
wiz.write({
"start_days": 0,
"end_days": -1,
"start_date": change_date_start,
"end_date": False,
})
wiz.button_change_project_task_date()
new_date_end = "{}-01-19 20:00:00".format(self.current_year)
self.assertEqual(
task.date_start, change_date_start, "Wrong date start")
self.assertEqual(
task.date_end, new_date_end, "Wrong date end")

def test_wizard_onchanges(self):
task = self.project.task_ids[:1]
wiz = self.wiz_obj.with_context(active_ids=[task.id]).create({
"days": 5,
})
self.assertEquals(wiz.days, 5)
self.assertEquals(wiz.start_days, 0)
self.assertEquals(wiz.end_days, 0)
self.assertEquals(wiz.start_date, False)
self.assertEquals(wiz.end_date, False)
wiz.start_days = 2
wiz._onchange_start_days()
self.assertEquals(wiz.days, 0)
self.assertEquals(wiz.start_days, 2)
self.assertEquals(wiz.end_days, 0)
self.assertEquals(wiz.start_date, False)
self.assertEquals(wiz.end_date, False)
wiz.end_days = 2
wiz._onchange_end_days()
self.assertEquals(wiz.days, 0)
self.assertEquals(wiz.start_days, 2)
self.assertEquals(wiz.end_days, 2)
self.assertEquals(wiz.start_date, False)
self.assertEquals(wiz.end_date, False)
wiz.start_date = task.date_start
wiz._onchange_start_date()
self.assertEquals(wiz.days, 0)
self.assertEquals(wiz.start_days, 0)
self.assertEquals(wiz.end_days, 2)
self.assertEquals(wiz.start_date, task.date_start)
self.assertEquals(wiz.end_date, False)
wiz.end_date = task.date_end
wiz._onchange_end_date()
self.assertEquals(wiz.days, 0)
self.assertEquals(wiz.start_days, 0)
self.assertEquals(wiz.end_days, 0)
self.assertEquals(wiz.start_date, task.date_start)
self.assertEquals(wiz.end_date, task.date_end)
wiz.days = 5
wiz._onchange_days()
self.assertEquals(wiz.days, 5)
self.assertEquals(wiz.start_days, 0)
self.assertEquals(wiz.end_days, 0)
self.assertEquals(wiz.start_date, False)
self.assertEquals(wiz.end_date, False)
52 changes: 50 additions & 2 deletions project_utilities/wizard/wiz_change_project_task_date.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,59 @@ class WizChangeProjectTaskDate(models.TransientModel):
_description = 'Date changing wizard'

days = fields.Integer(
string='Days', required=True,
string='Days',
help='Positive sum days, negative subtraction days')
start_days = fields.Integer()
end_days = fields.Integer()
start_date = fields.Datetime()
end_date = fields.Datetime()

@api.multi
def button_change_project_task_date(self):
task_obj = self.env['project.task']
tasks = task_obj.browse(self.env.context.get('active_ids'))
tasks._change_project_task_date(self.days)
if self.days:
tasks._change_project_task_date(
date_start=self.days, date_end=self.days)
else:
date_start = self.start_date or self.start_days
date_end = self.end_date or self.end_days
tasks._change_project_task_date(
date_start=date_start, date_end=date_end)

@api.onchange("days")
def _onchange_days(self):
self.ensure_one()
if self.days:
self.start_days = 0
self.end_days = 0
self.start_date = False
self.end_date = False

@api.onchange("start_days")
def _onchange_start_days(self):
self.ensure_one()
if self.start_days:
self.days = 0
self.start_date = False

@api.onchange("end_days")
def _onchange_end_days(self):
self.ensure_one()
if self.end_days:
self.days = 0
self.end_date = False

@api.onchange("start_date")
def _onchange_start_date(self):
self.ensure_one()
if self.start_date:
self.days = 0
self.start_days = 0

@api.onchange("end_date")
def _onchange_end_date(self):
self.ensure_one()
if self.end_date:
self.days = 0
self.end_days = 0
11 changes: 10 additions & 1 deletion project_utilities/wizard/wiz_change_project_task_date_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,16 @@
<field name="arch" type="xml">
<form string="Change task date">
<group string="Enter days to add or subtract">
<field name="days"/>
<label for="days" />
<field name="days" />
<group attrs="{'invisible': [('days','!=',0)]}">
<field name="start_days" attrs="{'invisible': [('start_date','!=',False)]}"/>
<field name="end_days" attrs="{'invisible': [('end_date','!=',False)]}" />
</group>
<group attrs="{'invisible': [('days','!=',0)]}">
<field name="start_date" attrs="{'invisible': [('start_days','!=',0)]}" />
<field name="end_date" attrs="{'invisible': [('end_days','!=',0)]}" />
</group>
</group>
<footer>
<button name="button_change_project_task_date" type="object"
Expand Down

0 comments on commit b7e9f67

Please sign in to comment.