[MERGE] project_long_term: improve test coverage
bzr revid: rco@openerp.com-20111212092956-zc34lg2ue6yf0pwc
This commit is contained in:
commit
d9bbf2f390
|
@ -43,14 +43,7 @@ Features
|
|||
"init_xml": [],
|
||||
"demo_xml": ["project_long_term_demo.xml"],
|
||||
"test": [
|
||||
'test/test_schedule_phases_case1.yml',
|
||||
'test/schedule_project_phases.yml',
|
||||
'test/schedule_project_tasks.yml',
|
||||
'test/test_schedule_phases_case2.yml',
|
||||
'test/project_schedule_consecutive_day.yml',
|
||||
'test/project_schedule_without_wroking_hour.yml',
|
||||
'test/phase_constraint.yml',
|
||||
'test/test_schedule_tasks_case1.yml',
|
||||
'test/phase_process.yml',
|
||||
],
|
||||
"update_xml": [
|
||||
"security/ir.model.access.csv",
|
||||
|
|
|
@ -5,6 +5,10 @@
|
|||
This Demo data file Human Resources, Phases and Resources,Tasks allocation and also run scheduling of phase and tasks.
|
||||
-->
|
||||
|
||||
<record id="project.project_integrate_openerp" model="project.project">
|
||||
<field name="resource_calendar_id" ref="resource.timesheet_group1"/>
|
||||
</record>
|
||||
|
||||
<!-- Project Phases -->
|
||||
|
||||
<record id="project_phase_1" model="project.phase">
|
||||
|
@ -13,6 +17,7 @@
|
|||
<field name="product_uom" ref="product.uom_day"/>
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="duration">30</field>
|
||||
<field name="constraint_date_start" eval="time.strftime('%Y-%m-01 10:00:00')"></field>
|
||||
<field name="project_id" ref="project.project_integrate_openerp"/>
|
||||
</record>
|
||||
|
||||
|
@ -37,9 +42,9 @@
|
|||
<field name="project_id" ref="project.project_integrate_openerp"/>
|
||||
</record>
|
||||
<function model="project.phase" name="set_open" eval="[ref('project_phase_3')]"/>
|
||||
|
||||
|
||||
<record id="project_phase_4" model="project.phase">
|
||||
<field eval="[(6, 0, [ref('project_phase_2')])]" name="previous_phase_ids"/>
|
||||
<field eval="[(6, 0, [ref('project_phase_3')])]" name="previous_phase_ids"/>
|
||||
<field name="name">Development and Integration</field>
|
||||
<field name="product_uom" ref="product.uom_day"/>
|
||||
<field eval="4" name="sequence"/>
|
||||
|
@ -60,7 +65,7 @@
|
|||
<field eval="[(6, 0, [ref('project_phase_5')])]" name="previous_phase_ids"/>
|
||||
<field name="name">Deployement and Training</field>
|
||||
<field name="product_uom" ref="product.uom_day"/>
|
||||
<field eval="5" name="sequence"/>
|
||||
<field eval="6" name="sequence"/>
|
||||
<field name="duration">10</field>
|
||||
<field name="project_id" ref="project.project_integrate_openerp"/>
|
||||
</record>
|
||||
|
|
|
@ -1,118 +0,0 @@
|
|||
-
|
||||
Given that I have a project 'Test Phases'.
|
||||
-
|
||||
!record {model: project.project, id: project_project_developyamlproject0}:
|
||||
name: "Develop Yaml Project Module"
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
resource_calendar_id: resource.timesheet_group1
|
||||
members:
|
||||
- base.user_admin
|
||||
-
|
||||
And I create three human ressources to work on this project, an analyst.
|
||||
-
|
||||
!record {model: resource.resource, id: resource_resource_analyst1}:
|
||||
calendar_id: resource.timesheet_group1
|
||||
name: Analyst
|
||||
resource_type: user
|
||||
time_efficiency: 1.0
|
||||
user_id: base.user_admin
|
||||
-
|
||||
I define a developer HR.
|
||||
-
|
||||
!record {model: resource.resource, id: resource_resource_develop0}:
|
||||
calendar_id: resource.timesheet_group1
|
||||
name: Developer
|
||||
resource_type: user
|
||||
time_efficiency: 1.0
|
||||
user_id: base.user_admin
|
||||
-
|
||||
I define a tester HR.
|
||||
-
|
||||
!record {model: resource.resource, id: resource_resource_tester1}:
|
||||
calendar_id: resource.timesheet_group1
|
||||
name: tester
|
||||
resource_type: user
|
||||
time_efficiency: 1.0
|
||||
user_id: base.user_admin
|
||||
-
|
||||
Then I create three phases for my projects; Analysis, Development, Testing.
|
||||
-
|
||||
The first phase is 'Analysis' and has a duration of 6 days.
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_analysisflowforyaml0}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 6.0
|
||||
name: "Analysis"
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject0
|
||||
state: draft
|
||||
|
||||
-
|
||||
I update the constrain and the analysis phase to not start before 4 days.
|
||||
-
|
||||
!python {model : project.phase }: |
|
||||
pass
|
||||
import datetime
|
||||
from dateutil.relativedelta import *
|
||||
start = datetime.date.today() + relativedelta(days=4)
|
||||
self.write(cr,uid, [(ref("project_phase_analysisflowforyaml0"))], {'constraint_date_start': start})
|
||||
-
|
||||
The second phase is 'Development' and depend on the 'Analysis', with a duration of 6 days.
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_developyaml0}:
|
||||
duration: 6.0
|
||||
name: Development
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject0
|
||||
previous_phase_ids:
|
||||
- project_phase_analysisflowforyaml0
|
||||
|
||||
-
|
||||
I update the Constrain Date Start adn Date End for phase Develop yaml
|
||||
-
|
||||
!python {model : project.phase }: |
|
||||
pass
|
||||
import datetime
|
||||
#from dateutil.relativedelta import *
|
||||
#start = datetime.date.today() - relativedelta(days=5)
|
||||
#end = datetime.date.today() + relativedelta(days=10)
|
||||
#self.write(cr,uid, [(ref("project_phase_developyaml0"))], {'constraint_date_start': start, 'constraint_date_end':end})
|
||||
-
|
||||
The third phase is 'Testing' and depend on the 'Develop' phase, with a duration of 6 days.
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_testyaml0}:
|
||||
duration: 6.0
|
||||
name: Testing
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject0
|
||||
previous_phase_ids:
|
||||
- project_phase_developyaml0
|
||||
-
|
||||
Then I launch the scheduler to compute starting and ending phases on all phases of this project.
|
||||
-
|
||||
!record {model: project.compute.phases, id: project_compute_phases_0}:
|
||||
project_id: project_project_developyamlproject0
|
||||
target_project: one
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
self.schedule_phases(cr, uid, [ref("project_project_developyamlproject0")])
|
||||
-
|
||||
After scheduling, I check the starting date and ending date on the phases are correct.
|
||||
-
|
||||
!python {model: project.phase}: |
|
||||
import datetime
|
||||
from dateutil.relativedelta import *
|
||||
minstart = (datetime.date.today() + relativedelta(days=4)).strftime('%Y-%m-%d')
|
||||
minend = (datetime.date.today() + relativedelta(days=11)).strftime('%Y-%m-%d')
|
||||
|
||||
phase1=self.browse(cr, uid, ref('project_phase_analysisflowforyaml0'))
|
||||
assert phase1.date_start>=minstart, 'Error, the Analysis phase '+phase1.date_start+' should start after '+str(minstart)
|
||||
assert phase1.date_end>=minend, 'Error, the Analysis phase should end after '+str(minend)
|
||||
|
||||
phase2=self.browse(cr, uid, ref('project_phase_developyaml0'))
|
||||
assert phase2.date_start>=phase1.date_end, 'Error, the phase Development should start after the end of the Analysis phase'
|
||||
|
||||
phase3=self.browse(cr, uid, ref('project_phase_testyaml0'))
|
||||
assert phase3.date_start>=phase2.date_end, 'Error, the phase Testing should start after the end of the Development phase'
|
||||
assert phase3.date_start<phase3.date_end, 'Error, the phase Testing should start before ending'
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
-
|
||||
In order to test process of Phases,
|
||||
-
|
||||
I create a record to schedule the phase of project.
|
||||
-
|
||||
!record {model: project.compute.phases, id: project_compute_phases01}:
|
||||
target_project: 'one'
|
||||
project_id: project.project_integrate_openerp
|
||||
-
|
||||
I schedule the phases.
|
||||
-
|
||||
!python {model: project.compute.phases}: |
|
||||
self.check_selection(cr, uid, [ref("project_compute_phases01")])
|
||||
-
|
||||
I check the starting date and ending date on the phases after scheduling.
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
project = self.browse(cr, uid, ref("project.project_integrate_openerp"), context=context)
|
||||
def _convert(date):
|
||||
import time
|
||||
return time.strptime(date, '%Y-%m-%d %H:%M:%S')
|
||||
def _check(phase, _convert, _check): #TOFIX: why need to pass function ?
|
||||
for next_phase in phase.next_phase_ids:
|
||||
assert _convert(next_phase.date_start) >= _convert(phase.date_end), "Phase does not start in proper date."
|
||||
_check(next_phase, _convert, _check)
|
||||
return True
|
||||
|
||||
for phase in project.phase_ids:
|
||||
|
||||
assert phase.date_start, "Start date should be computed."
|
||||
assert phase.date_end, "End date should be computed."
|
||||
if not phase.previous_phase_ids and phase.constraint_date_start:
|
||||
assert _convert(phase.date_start) >= _convert(phase.constraint_date_start), "Phase does not start in proper date."
|
||||
_check(phase, _convert, _check)
|
||||
-
|
||||
I open phase.
|
||||
-
|
||||
!python {model: project.phase}: |
|
||||
self.set_open(cr, uid, [ref("project_phase_1")])
|
||||
-
|
||||
I check state of phase after opened.
|
||||
-
|
||||
!assert {model: project.phase, id: project_phase_1, severity: error, string: Phase should be in open state}:
|
||||
- state == "open"
|
||||
-
|
||||
I put phase in pending state.
|
||||
-
|
||||
!python {model: project.phase}: |
|
||||
self.set_pending(cr, uid, [ref("project_phase_1")])
|
||||
-
|
||||
I check state of phase after put in pending.
|
||||
-
|
||||
!assert {model: project.phase, id: project_phase_1, severity: error, string: Phase should be in pending state}:
|
||||
- state == "pending"
|
||||
-
|
||||
I make Phase in cancel state.
|
||||
-
|
||||
!python {model: project.phase}: |
|
||||
self.set_cancel(cr, uid, [ref("project_phase_1")])
|
||||
-
|
||||
I check state of phase after cancelled.
|
||||
-
|
||||
!assert {model: project.phase, id: project_phase_1, severity: error, string: Phase should be in cancel state}:
|
||||
- state == "cancelled"
|
||||
-
|
||||
I put again in draft phase.
|
||||
-
|
||||
!python {model: project.phase}: |
|
||||
self.set_draft(cr, uid, [ref("project_phase_1")])
|
||||
-
|
||||
I close phase.
|
||||
-
|
||||
!python {model: project.phase}: |
|
||||
self.set_done(cr, uid, [ref("project_phase_1")])
|
||||
-
|
||||
I check state of phase after closed.
|
||||
-
|
||||
!assert {model: project.phase, id: project_phase_1, severity: error, string: Phase should be in done state}:
|
||||
- state == "done"
|
|
@ -1,127 +0,0 @@
|
|||
-
|
||||
Create a project 'Develop yaml Project Module'.
|
||||
-
|
||||
!record {model: project.project, id: project_project_developyamlproject_2}:
|
||||
name: "Develop Yaml Project Module"
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
members:
|
||||
- base.user_admin
|
||||
|
||||
-
|
||||
I have set Working Time from Monday to Friday from 9am to 17pm.
|
||||
-
|
||||
!record {model: resource.calendar, id: resource_calendar_hoursweekstest_P2}:
|
||||
name: "from Monday to Friday, from 9am to 17pm"
|
||||
|
||||
-
|
||||
I have set Day1 Working Time for Monday to Friday from 9am to 17pm working hour
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_hoursweekstest_P2day1}:
|
||||
name: "Day1"
|
||||
hour_from : 09.00
|
||||
hour_to : 17.00
|
||||
dayofweek : "0"
|
||||
calendar_id : resource_calendar_hoursweekstest_P2
|
||||
|
||||
-
|
||||
I have set Day2 Working Time for Monday to Friday from 9am to 17pm working hour
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: rresource_calendar_hoursweekstest_P2day2}:
|
||||
name: "Day2"
|
||||
hour_from : 09.00
|
||||
hour_to : 17.00
|
||||
dayofweek : "1"
|
||||
calendar_id : resource_calendar_hoursweekstest_P2
|
||||
|
||||
-
|
||||
I have set Day3 Working Time for Monday to Friday from 9am to 17pm working hour
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_hoursweekstest_P2day3}:
|
||||
name: "Day3"
|
||||
hour_from : 09.00
|
||||
hour_to : 17.00
|
||||
dayofweek : "2"
|
||||
calendar_id : resource_calendar_hoursweekstest_P2
|
||||
|
||||
-
|
||||
I have set Day4 Working Time for Monday to Friday from 9am to 17pm working hour
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_hoursweekstest_P2day4}:
|
||||
name: "Day4"
|
||||
hour_from: 09.00
|
||||
hour_to: 17.00
|
||||
dayofweek: "3"
|
||||
calendar_id: resource_calendar_hoursweekstest_P2
|
||||
|
||||
-
|
||||
I have set Day5 Working Time for Monday to Friday from 9am to 17pm working hour
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_hoursweekstest_P2day5}:
|
||||
name: "Day5"
|
||||
hour_from: 09.00
|
||||
hour_to: 17.00
|
||||
dayofweek: "4"
|
||||
calendar_id: resource_calendar_hoursweekstest_P2
|
||||
|
||||
-
|
||||
Now Set working period to Project 'Develop yaml Project Module'
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
self.write(cr, uid, [ref("project_project_developyamlproject_2")], {'resource_calendar_id': ref("resource_calendar_hoursweekstest_P2")})
|
||||
|
||||
-
|
||||
Create 3 a project phase.
|
||||
First 'Analysis Flow for Yaml'Project Phase
|
||||
-
|
||||
!record {model: project.phase, id: project_project_developyamlproject_2_Phase1}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 5.0
|
||||
name: "Analysis Flow for Yaml"
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject_2
|
||||
state: draft
|
||||
|
||||
-
|
||||
Create project phase 'Develop yaml'
|
||||
-
|
||||
!record {model: project.phase, id: project_project_developyamlproject_2_Phase2}:
|
||||
duration: 5.0
|
||||
name: Develop Yaml
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject_2
|
||||
previous_phase_ids:
|
||||
- project_project_developyamlproject_2_Phase1
|
||||
|
||||
-
|
||||
Create project phase 'Test Yaml'
|
||||
-
|
||||
!record {model: project.phase, id: project_project_developyamlproject_2_Phase3}:
|
||||
duration: 5.0
|
||||
name: Testing Yaml
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject_2
|
||||
previous_phase_ids:
|
||||
- project_project_developyamlproject_2_Phase2
|
||||
|
||||
-
|
||||
Compute Schedule of phases For One project
|
||||
-
|
||||
!record {model: project.compute.phases, id: project_compute_phases_0}:
|
||||
project_id: project_project_developyamlproject_2
|
||||
target_project: one
|
||||
-
|
||||
Schedule project phases using Compute Phase Scheduling
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
self.schedule_phases(cr, uid, [ref("project_project_developyamlproject_2")])
|
||||
|
||||
-
|
||||
After scheduling, Check that phases scheduled, check that either of phase's start_date, end_date not null.
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
proj=self.browse(cr, uid, [ref("project_project_developyamlproject_2")])[0]
|
||||
for phase in proj.phase_ids:
|
||||
if (not phase.date_start) or (not phase.date_end):
|
||||
raise AssertionError("Phases not scheduled")
|
||||
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
-
|
||||
Create a project 'Develop yaml Implementation Module'.
|
||||
-
|
||||
!record {model: project.project, id: project_project_developyamlproject_2}:
|
||||
name: "Develop Yaml Project Module"
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
|
||||
-
|
||||
Create 4 Project phase.
|
||||
First Project Phase 'Analysis Flow for Yaml'
|
||||
-
|
||||
!record {model: project.phase, id: project_project_developyamlproject_2_phase_1}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 6.0
|
||||
product_uom: product.uom_day
|
||||
name: "Analysis Flow for Yaml"
|
||||
project_id: project_project_developyamlproject_2
|
||||
state: draft
|
||||
|
||||
-
|
||||
Create project phase 'Develop yaml'
|
||||
-
|
||||
!record {model: project.phase, id: project_project_developyamlproject_2_phase_2}:
|
||||
duration: 6.0
|
||||
name: "Develop yaml"
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject_2
|
||||
previous_phase_ids:
|
||||
- project_project_developyamlproject_2_phase_1
|
||||
state: draft
|
||||
-
|
||||
Create project phase 'Test Yaml'
|
||||
-
|
||||
!record {model: project.phase, id: project_project_developyamlproject_2_phase_3}:
|
||||
duration: 6.0
|
||||
name: Testing Yaml
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject_2
|
||||
previous_phase_ids:
|
||||
- project_project_developyamlproject_2_phase_2
|
||||
state: draft
|
||||
|
||||
-
|
||||
Create project phase 'Implement Yaml'
|
||||
-
|
||||
!record {model: project.phase, id: project_project_developyamlproject_2_phase_4}:
|
||||
duration: 6.0
|
||||
name: Testing Yaml
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_developyamlproject_2
|
||||
previous_phase_ids:
|
||||
- project_project_developyamlproject_2_phase_3
|
||||
state: draft
|
||||
-
|
||||
Compute Schedule of phases For One project
|
||||
-
|
||||
!record {model: project.compute.phases, id: project_compute_phases_0}:
|
||||
project_id: project_project_developyamlproject_2
|
||||
target_project: one
|
||||
|
||||
-
|
||||
Schedule project phases using Compute Phase Scheduling
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
self.schedule_phases(cr, uid, [ref("project_project_developyamlproject_2")])
|
||||
|
||||
-
|
||||
After scheduling, Check that phases scheduled, check that either of phase's start_date, end_date not null.
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
proj=self.browse(cr, uid, [ref("project_project_developyamlproject_2")])[0]
|
||||
for phase in proj.phase_ids:
|
||||
if (not phase.date_start) or (not phase.date_end):
|
||||
raise AssertionError("Phases not scheduled")
|
||||
|
||||
|
|
@ -1,180 +0,0 @@
|
|||
-
|
||||
Create a project 'World Bank's Project'
|
||||
-
|
||||
!record {model: project.project, id: project_project_worldbanksproject0}:
|
||||
name: "World Bank's Project"
|
||||
priority: 4
|
||||
members:
|
||||
- project.res_users_analyst
|
||||
- project.res_users_project_manager
|
||||
- project.res_users_technical_leader
|
||||
- project.res_users_developer
|
||||
- project.res_users_designer
|
||||
- project.res_users_tester
|
||||
|
||||
-
|
||||
Create a project phase 'Defining Client's Basic Idea of Project'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_definingclientsbasicideaofproject0}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 15.0
|
||||
name: "Defining Client's Basic Idea of Project"
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
-
|
||||
Create project phase 'Establishing Project Feasibility'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_establishingprojectfeasibility0}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 30.0
|
||||
name: Establishing Project Feasibility
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_worldbanksproject0
|
||||
-
|
||||
Create the phase task 'Develop GUI for Server Configuration'
|
||||
-
|
||||
!record {model: project.task, id: project_task_t0}:
|
||||
name: Develop GUI for Server Configuration
|
||||
planned_hours: 20.0
|
||||
state: draft
|
||||
phase_id: project_phase_definingclientsbasicideaofproject0
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
-
|
||||
Create the phase task 'Develop GUI for Modules Configuration'
|
||||
-
|
||||
!record {model: project.task, id: project_task_t1}:
|
||||
name: Develop GUI for Modules Configuration
|
||||
planned_hours: 25.0
|
||||
remaining_hours: 25.0
|
||||
state: draft
|
||||
phase_id: project_phase_definingclientsbasicideaofproject0
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
-
|
||||
Create project phase 'Preparation of Engineering Designs'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_preparationofengineeringdesigns0}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 100.0
|
||||
name: Preparation of Engineering Designs
|
||||
product_uom: product.uom_hour
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
-
|
||||
Create the phase task 'Develop GUI for Client Configuration'
|
||||
-
|
||||
!record {model: project.task, id: project_task_t2}:
|
||||
name: Develop GUI for Server Configuration
|
||||
planned_hours: 20.0
|
||||
remaining_hours: 20.0
|
||||
state: draft
|
||||
phase_id: project_phase_preparationofengineeringdesigns0
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
-
|
||||
Create the phase task 'Develop GUI for Client Module Configuration'
|
||||
-
|
||||
!record {model: project.task, id: project_task_t3}:
|
||||
name: Develop GUI for Modules Configuration
|
||||
planned_hours: 25.0
|
||||
remaining_hours: 25.0
|
||||
state: draft
|
||||
phase_id: project_phase_preparationofengineeringdesigns0
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
|
||||
-
|
||||
Create project phase 'Procurement of Works and Goods'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_procurementofworksandgoods0}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 24.0
|
||||
name: Procurement of Works and Goods
|
||||
product_uom: product.uom_hour
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
-
|
||||
Create project phase 'Project Construction'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_projectconstruction0}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 4320.0
|
||||
name: Project Construction
|
||||
product_uom: product.uom_hour
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
|
||||
-
|
||||
Create project phase 'Project Completion'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_projectcompletion0}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
duration: 240.0
|
||||
name: Project Completion
|
||||
product_uom: product.uom_hour
|
||||
project_id: project_project_worldbanksproject0
|
||||
|
||||
-
|
||||
Set previous phase for phase 'Establishing Project Feasibility'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_establishingprojectfeasibility0}:
|
||||
previous_phase_ids:
|
||||
- project_phase_definingclientsbasicideaofproject0
|
||||
|
||||
|
||||
-
|
||||
Set previous phase for phase 'Preparation of Engineering Designs'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_preparationofengineeringdesigns0}:
|
||||
previous_phase_ids:
|
||||
- project_phase_establishingprojectfeasibility0
|
||||
|
||||
-
|
||||
Set previous phase for phase 'Procurement of Works and Goods'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_procurementofworksandgoods0}:
|
||||
previous_phase_ids:
|
||||
- project_phase_preparationofengineeringdesigns0
|
||||
|
||||
-
|
||||
Set previous phase for phase 'Project Construction'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_projectconstruction0}:
|
||||
previous_phase_ids:
|
||||
- project_phase_procurementofworksandgoods0
|
||||
|
||||
|
||||
-
|
||||
Set previous phase for phase 'Project Completion'
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_projectcompletion0}:
|
||||
previous_phase_ids:
|
||||
- project_phase_projectconstruction0
|
||||
|
||||
|
||||
-
|
||||
Get the project to schedule phases
|
||||
-
|
||||
!record {model: project.compute.phases, id: project_compute_phases_0}:
|
||||
project_id: project_project_worldbanksproject0
|
||||
target_project: one
|
||||
|
||||
|
||||
-
|
||||
Schedule project phases
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
self.schedule_phases(cr, uid, ref("project_project_worldbanksproject0"))
|
||||
|
||||
-
|
||||
Check if phases scheduled, check that either of phase's start_date, end_date and user_id is not null
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
prj=self.browse(cr, uid, [ref("project_project_worldbanksproject0")])[0]
|
||||
for phase in prj.phase_ids:
|
||||
if (not phase.date_start) or (not phase.date_end):
|
||||
raise AssertionError("Tasks not scheduled")
|
||||
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
-
|
||||
Create project 'Develop a thunderbird-openerp synchronization plugin'
|
||||
-
|
||||
!record {model: project.project, id: project_project_project1}:
|
||||
name: Develop a thunderbird-openerp synchronization plugin
|
||||
members:
|
||||
- project.res_users_project_manager
|
||||
- project.res_users_technical_leader
|
||||
- project.res_users_developer
|
||||
- project.res_users_designer
|
||||
- project.res_users_tester
|
||||
- project.res_users_analyst
|
||||
- project.res_users_finacial_manager
|
||||
|
||||
-
|
||||
Create phase 'Develop GUI' in thunderbird
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_phase1}:
|
||||
date_start: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
duration: 200.0
|
||||
name: Develop GUI in thunderbird
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_project1
|
||||
state: draft
|
||||
-
|
||||
Create the phase task 'Develop GUI for Server Configuration'
|
||||
-
|
||||
!record {model: project.task, id: project_task_t10}:
|
||||
name: Develop GUI for Server Configuration
|
||||
planned_hours: 20.0
|
||||
remaining_hours: 20.0
|
||||
state: draft
|
||||
phase_id: project_phase_phase1
|
||||
project_id: project_project_project1
|
||||
user_id: project.res_users_developer
|
||||
|
||||
-
|
||||
Create the phase task 'Develop GUI for Modules Configuration'
|
||||
-
|
||||
!record {model: project.task, id: project_task_t11}:
|
||||
name: Develop GUI for Modules Configuration
|
||||
planned_hours: 25.0
|
||||
remaining_hours: 25.0
|
||||
state: draft
|
||||
phase_id: project_phase_phase1
|
||||
project_id: project_project_project1
|
||||
user_id: project.res_users_developer
|
||||
-
|
||||
Create the phase task 'Develop GUI for OpenERP Synchronisation'
|
||||
-
|
||||
!record {model: project.task, id: project_task_t12}:
|
||||
name: Develop GUI for OpenERP Synchronisation
|
||||
planned_hours: 30.0
|
||||
remaining_hours: 30.0
|
||||
state: draft
|
||||
phase_id: project_phase_phase1
|
||||
project_id: project_project_project1
|
||||
user_id: project.res_users_developer
|
||||
-
|
||||
Create the phase task 'Design required GUI/Menus'
|
||||
-
|
||||
!record {model: project.task, id: project_task_13}:
|
||||
name: Design required GUI/Menus
|
||||
planned_hours: 25.0
|
||||
remaining_hours: 25.0
|
||||
state: draft
|
||||
phase_id: project_phase_phase1
|
||||
project_id: project_project_project1
|
||||
user_id: project.res_users_designer
|
||||
|
||||
-
|
||||
Schedule tasks
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
self.schedule_tasks(cr, uid, ref("project_project_project1"))
|
||||
|
||||
-
|
||||
Check if tasks scheduled, check that either of task's start_date, end_date and user_id is not null
|
||||
-
|
||||
!python {model: project.project}: |
|
||||
prj = self.browse(cr, uid, [ref("project_project_project1")])[0]
|
||||
for task in prj.tasks:
|
||||
if task.state in ('done','cancelled'):
|
||||
continue
|
||||
if (not task.user_id) or (not task.date_start) or (not task.date_end):
|
||||
raise AssertionError("Project tasks not scheduled!")
|
|
@ -1,76 +0,0 @@
|
|||
-
|
||||
In order to test scheduling of project phases, I create two different phases and
|
||||
test it with two different dates for scheduling.
|
||||
-
|
||||
I create a project Development and Testing.
|
||||
-
|
||||
!record {model: project.project, id: project_project_project_case1}:
|
||||
name: "Development and Testing"
|
||||
date_start: !eval time.strftime('%Y-%m-%d')
|
||||
balance: 0.0
|
||||
credit: 0.0
|
||||
currency_id: base.EUR
|
||||
debit: 0.0
|
||||
effective_hours: 0.0
|
||||
members:
|
||||
- base.user_admin
|
||||
|
||||
planned_hours: 0.0
|
||||
progress_rate: 0.0
|
||||
quantity: 0.0
|
||||
quantity_max: 0.0
|
||||
state: open
|
||||
type_ids:
|
||||
- project.project_tt_specification
|
||||
- project.project_tt_development
|
||||
- project.project_tt_testing
|
||||
- project.project_tt_merge
|
||||
-
|
||||
I create first phase of the project.
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_firstphase0_case1}:
|
||||
duration: 2.0
|
||||
name: First Phase
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_project_case1
|
||||
state: draft
|
||||
-
|
||||
I create second phase of the project.
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_secondphase0_case2}:
|
||||
duration: 3.0
|
||||
name: Second Phase
|
||||
previous_phase_ids:
|
||||
- project_phase_firstphase0_case1
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_project_case1
|
||||
state: draft
|
||||
-
|
||||
Now I create a record to compute the phase of project.
|
||||
-
|
||||
!record {model: project.compute.phases, id: project_compute_phases0}:
|
||||
target_project: 'one'
|
||||
project_id: project_project_project_case1
|
||||
-
|
||||
I schedule the phases.
|
||||
-
|
||||
!python {model: project.compute.phases}: |
|
||||
self.check_selection(cr, uid, [ref("project_compute_phases0")])
|
||||
-
|
||||
I check the starting and ending dates of both phases.
|
||||
-
|
||||
!python {model: project.phase}: |
|
||||
import datetime
|
||||
from dateutil.relativedelta import *
|
||||
start = (datetime.date.today()).strftime('%Y-%m-%d')
|
||||
end = (datetime.date.today() + relativedelta(days=1)).strftime('%Y-%m-%d 17:00:00')
|
||||
first_phase = self.browse(cr, uid, ref('project_phase_firstphase0_case1'))
|
||||
assert (first_phase.date_start[:10] >= start),'Start dates are wrong: %s < %s !' % (first_phase.date_start[:10], start)
|
||||
assert (first_phase.date_end >= end),'End dates are wrong: %s <%s!' % (first_phase.date_end, end)
|
||||
|
||||
second_phase = self.browse(cr, uid, ref('project_phase_secondphase0_case2'))
|
||||
start = first_phase.date_end
|
||||
end = (datetime.date.today() + relativedelta(days=4)).strftime('%Y-%m-%d')
|
||||
assert second_phase.date_start >= start, 'Dates are wrong on second phase: %s < %s!' % (second_phase.date_start, start)
|
||||
assert second_phase.date_end >= end, 'Dates are wrong on second phase %s < %s!' % (second_phase.date_end, end)
|
||||
|
|
@ -1,193 +0,0 @@
|
|||
-
|
||||
In order to test scheduling of project phases, I create two different
|
||||
working periods and resources. And schedule the phases.
|
||||
-
|
||||
I create first working period 'Working Time A'.
|
||||
-
|
||||
!record {model: resource.calendar, id: resource_calendar_workingtimea0}:
|
||||
attendance_ids:
|
||||
- dayofweek: '0'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Monday
|
||||
- dayofweek: '1'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Tuesday
|
||||
- dayofweek: '2'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Wednesday
|
||||
- dayofweek: '3'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Thursday
|
||||
name: Working Time A
|
||||
|
||||
-
|
||||
Creating a resource.calendar.attendance record
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_attendance_monday0}:
|
||||
calendar_id: resource_calendar_workingtimea0
|
||||
dayofweek: '0'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Monday
|
||||
-
|
||||
Creating a resource.calendar.attendance record
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_attendance_tuesday0}:
|
||||
calendar_id: resource_calendar_workingtimea0
|
||||
dayofweek: '1'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Tuesday
|
||||
-
|
||||
Creating a resource.calendar.attendance record
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_attendance_wednesday0}:
|
||||
calendar_id: resource_calendar_workingtimea0
|
||||
dayofweek: '2'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Wednesday
|
||||
-
|
||||
Creating a resource.calendar.attendance record
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_attendance_thursday0}:
|
||||
calendar_id: resource_calendar_workingtimea0
|
||||
dayofweek: '3'
|
||||
hour_from: 10.0
|
||||
hour_to: 16.0
|
||||
name: Thursday
|
||||
-
|
||||
I create second working period 'Working Time B'.
|
||||
-
|
||||
!record {model: resource.calendar, id: resource_calendar_workingtimeb0}:
|
||||
attendance_ids:
|
||||
- dayofweek: '4'
|
||||
hour_from: 9.0
|
||||
hour_to: 18.0
|
||||
name: Friday
|
||||
name: Working Time B
|
||||
-
|
||||
Creating a resource.calendar.attendance record
|
||||
-
|
||||
!record {model: resource.calendar.attendance, id: resource_calendar_attendance_friday0}:
|
||||
calendar_id: resource_calendar_workingtimeb0
|
||||
dayofweek: '4'
|
||||
hour_from: 9.0
|
||||
hour_to: 18.0
|
||||
name: Friday
|
||||
-
|
||||
I create first resource say 'Resource X' without assigning working period.
|
||||
-
|
||||
!record {model: resource.resource, id: resource_resource_resourcex0}:
|
||||
name: Resource X
|
||||
resource_type: user
|
||||
time_efficiency: 1.0
|
||||
user_id: base.user_admin
|
||||
-
|
||||
I create first resource say 'Resource Y' with working period 'Working Time B'.
|
||||
-
|
||||
!record {model: resource.resource, id: resource_resource_resourcey0}:
|
||||
calendar_id: resource_calendar_workingtimeb0
|
||||
name: Resource Y
|
||||
resource_type: user
|
||||
time_efficiency: 1.0
|
||||
user_id: base.user_admin
|
||||
-
|
||||
I create a project 'Development and Testing' and assign working period 'Working Time A'.
|
||||
-
|
||||
!record {model: project.project, id: project_project_project0}:
|
||||
balance: 0.0
|
||||
credit: 0.0
|
||||
currency_id: base.EUR
|
||||
debit: 0.0
|
||||
effective_hours: 0.0
|
||||
members:
|
||||
- base.user_admin
|
||||
name: Development and Testing
|
||||
planned_hours: 20.0
|
||||
progress_rate: 0.0
|
||||
quantity: 0.0
|
||||
quantity_max: 0.0
|
||||
resource_calendar_id: resource_calendar_workingtimea0
|
||||
state: open
|
||||
tasks:
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task 1
|
||||
planned_hours: 10.0
|
||||
remaining_hours: 10.0
|
||||
state: draft
|
||||
total_hours: 10.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task 2
|
||||
planned_hours: 10.0
|
||||
remaining_hours: 10.0
|
||||
state: draft
|
||||
total_hours: 10.0
|
||||
total_hours: 10.0
|
||||
members:
|
||||
- project.res_users_analyst
|
||||
- project.res_users_project_manager
|
||||
- project.res_users_technical_leader
|
||||
- project.res_users_developer
|
||||
- project.res_users_designer
|
||||
- project.res_users_tester
|
||||
type_ids:
|
||||
- project.project_tt_specification
|
||||
- project.project_tt_development
|
||||
- project.project_tt_testing
|
||||
- project.project_tt_merge
|
||||
|
||||
-
|
||||
I create a phase 'Initial Phase' for project 'Development and Testing'.
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_phase0}:
|
||||
date_start: '2011-01-03 08:00:00'
|
||||
duration: 0.0
|
||||
name: Initial Phase
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_project0
|
||||
state: draft
|
||||
-
|
||||
I create first task 'Developing module' and assign 10h.
|
||||
-
|
||||
!record {model: project.task, id: project_task_task0}:
|
||||
delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Developing module
|
||||
planned_hours: 10.0
|
||||
project_id: project_project_project0
|
||||
remaining_hours: 10.0
|
||||
state: draft
|
||||
total_hours: 10.0
|
||||
phase_id: project_phase_phase0
|
||||
-
|
||||
I create first task 'Testing module' and assign 10h.
|
||||
-
|
||||
!record {model: project.task, id: project_task_task1}:
|
||||
delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Testing module
|
||||
planned_hours: 10.0
|
||||
project_id: project_project_project0
|
||||
remaining_hours: 10.0
|
||||
state: draft
|
||||
total_hours: 10.0
|
||||
phase_id: project_phase_phase0
|
||||
-
|
||||
Now I create a record to compute the phase of project.
|
||||
-
|
||||
!record {model: project.compute.phases, id: project_compute_phases0}:
|
||||
target_project: 'one'
|
||||
project_id: project_project_project0
|
||||
-
|
||||
I schedule the phases.
|
||||
-
|
||||
!python {model: project.compute.phases}: |
|
||||
self.check_selection(cr, uid, [ref("project_compute_phases0")])
|
||||
|
|
@ -1,246 +0,0 @@
|
|||
-
|
||||
In order to test scheduling of tasks, I create four tasks with different sequences and schedule them.
|
||||
-
|
||||
I create first user.
|
||||
-
|
||||
!record {model: res.users, id: res_users_user0}:
|
||||
company_id: base.main_company
|
||||
context_lang: en_US
|
||||
groups_id:
|
||||
- base.group_partner_manager
|
||||
- base.group_user
|
||||
login: user1
|
||||
name: User 1
|
||||
password: user1
|
||||
-
|
||||
I create second user.
|
||||
-
|
||||
!record {model: res.users, id: res_users_user1}:
|
||||
company_id: base.main_company
|
||||
context_lang: en_US
|
||||
groups_id:
|
||||
- base.group_partner_manager
|
||||
- base.group_user
|
||||
login: user2
|
||||
name: User 2
|
||||
password: user2
|
||||
-
|
||||
I create a Project.
|
||||
-
|
||||
!record {model: project.project, id: project_project_projecta0}:
|
||||
balance: 0.0
|
||||
credit: 0.0
|
||||
currency_id: base.EUR
|
||||
debit: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Project A
|
||||
members:
|
||||
- res_users_user0
|
||||
- res_users_user1
|
||||
phase_ids:
|
||||
- date_start: '2011-01-06 08:00:00'
|
||||
duration: 2.0
|
||||
name: Phase A
|
||||
product_uom: product.uom_day
|
||||
state: draft
|
||||
task_ids:
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task D
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task C
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
sequence: 11
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task B
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
sequence: 13
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task A
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
sequence: 14
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
planned_hours: 20.0
|
||||
progress_rate: 0.0
|
||||
quantity: 0.0
|
||||
quantity_max: 0.0
|
||||
state: open
|
||||
tasks:
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task D
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task C
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
sequence: 11
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task B
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
sequence: 13
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task A
|
||||
planned_hours: 5.0
|
||||
remaining_hours: 5.0
|
||||
sequence: 14
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
total_hours: 15.0
|
||||
-
|
||||
I create first task with highest sequence.
|
||||
-
|
||||
!record {model: project.task, id: project_task_taska0}:
|
||||
delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task A
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
sequence: 14
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
-
|
||||
I create second task.
|
||||
-
|
||||
!record {model: project.task, id: project_task_taskb0}:
|
||||
delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task B
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
sequence: 13
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
-
|
||||
I create third task.
|
||||
-
|
||||
!record {model: project.task, id: project_task_taskc0}:
|
||||
delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task C
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
sequence: 11
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
-
|
||||
I create fourth task with lowest sequence.
|
||||
-
|
||||
!record {model: project.task, id: project_task_taskd0}:
|
||||
delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task D
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
-
|
||||
Now I create a resource for first user.
|
||||
-
|
||||
!record {model: resource.resource, id: resource_resource_user0}:
|
||||
name: User 1
|
||||
resource_type: user
|
||||
time_efficiency: 1.0
|
||||
user_id: res_users_user0
|
||||
-
|
||||
I create a resource for second user.
|
||||
-
|
||||
!record {model: resource.resource, id: resource_resource_user1}:
|
||||
name: User 2
|
||||
resource_type: user
|
||||
time_efficiency: 1.0
|
||||
user_id: res_users_user1
|
||||
-
|
||||
Now I create one phase for the project.
|
||||
-
|
||||
!record {model: project.phase, id: project_phase_phasea0}:
|
||||
date_start: '2011-01-06 08:00:00'
|
||||
duration: 2.0
|
||||
name: Phase A
|
||||
product_uom: product.uom_day
|
||||
project_id: project_project_projecta0
|
||||
state: draft
|
||||
task_ids:
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task D
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task C
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
sequence: 11
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task B
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
sequence: 13
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
- delay_hours: 0.0
|
||||
effective_hours: 0.0
|
||||
name: Task A
|
||||
planned_hours: 5.0
|
||||
project_id: project_project_projecta0
|
||||
remaining_hours: 5.0
|
||||
sequence: 14
|
||||
state: draft
|
||||
total_hours: 5.0
|
||||
-
|
||||
Now I create a record to schedule the tasks of project.
|
||||
-
|
||||
!record {model: project.compute.tasks, id: project_compute_tasks0}:
|
||||
project_id: project_project_projecta0
|
||||
-
|
||||
I schedule the tasks.
|
||||
-
|
||||
!python {model: project.compute.tasks}: |
|
||||
self.compute_date(cr, uid, [ref("project_compute_tasks0")])
|
||||
-
|
||||
I check that whether the tasks now allocated to respected resources or not.
|
||||
-
|
||||
!python {model: project.task}: |
|
||||
task_ids = self.search(cr, uid, [('project_id','=',ref('project_project_projecta0'))])
|
||||
for task in self.browse(cr, uid, task_ids):
|
||||
if (not task.date_start) or (not task.date_end):
|
||||
raise AssertionError("Tasks are not scheduled.")
|
Loading…
Reference in New Issue