diff --git a/addons/project_long_term/__openerp__.py b/addons/project_long_term/__openerp__.py index 6b019441718..84ac057bbb4 100644 --- a/addons/project_long_term/__openerp__.py +++ b/addons/project_long_term/__openerp__.py @@ -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", diff --git a/addons/project_long_term/project_long_term_demo.xml b/addons/project_long_term/project_long_term_demo.xml index fe3f8c8e510..4cd6d5cdec4 100644 --- a/addons/project_long_term/project_long_term_demo.xml +++ b/addons/project_long_term/project_long_term_demo.xml @@ -5,6 +5,10 @@ This Demo data file Human Resources, Phases and Resources,Tasks allocation and also run scheduling of phase and tasks. --> + + + + @@ -13,6 +17,7 @@ 30 + @@ -37,9 +42,9 @@ - + - + Development and Integration @@ -60,7 +65,7 @@ Deployement and Training - + 10 diff --git a/addons/project_long_term/test/phase_constraint.yml b/addons/project_long_term/test/phase_constraint.yml deleted file mode 100644 index f4fa09e6e38..00000000000 --- a/addons/project_long_term/test/phase_constraint.yml +++ /dev/null @@ -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= _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" diff --git a/addons/project_long_term/test/project_schedule_consecutive_day.yml b/addons/project_long_term/test/project_schedule_consecutive_day.yml deleted file mode 100644 index cffe06a9ff9..00000000000 --- a/addons/project_long_term/test/project_schedule_consecutive_day.yml +++ /dev/null @@ -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") - - diff --git a/addons/project_long_term/test/project_schedule_without_wroking_hour.yml b/addons/project_long_term/test/project_schedule_without_wroking_hour.yml deleted file mode 100644 index 4fe7687425b..00000000000 --- a/addons/project_long_term/test/project_schedule_without_wroking_hour.yml +++ /dev/null @@ -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") - - diff --git a/addons/project_long_term/test/schedule_project_phases.yml b/addons/project_long_term/test/schedule_project_phases.yml deleted file mode 100644 index 550787fe867..00000000000 --- a/addons/project_long_term/test/schedule_project_phases.yml +++ /dev/null @@ -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") - - diff --git a/addons/project_long_term/test/schedule_project_tasks.yml b/addons/project_long_term/test/schedule_project_tasks.yml deleted file mode 100644 index 17db7ef8038..00000000000 --- a/addons/project_long_term/test/schedule_project_tasks.yml +++ /dev/null @@ -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!") diff --git a/addons/project_long_term/test/test_schedule_phases_case1.yml b/addons/project_long_term/test/test_schedule_phases_case1.yml deleted file mode 100644 index 8b9ff5f3705..00000000000 --- a/addons/project_long_term/test/test_schedule_phases_case1.yml +++ /dev/null @@ -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) - diff --git a/addons/project_long_term/test/test_schedule_phases_case2.yml b/addons/project_long_term/test/test_schedule_phases_case2.yml deleted file mode 100644 index 35173a897a3..00000000000 --- a/addons/project_long_term/test/test_schedule_phases_case2.yml +++ /dev/null @@ -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")]) - diff --git a/addons/project_long_term/test/test_schedule_tasks_case1.yml b/addons/project_long_term/test/test_schedule_tasks_case1.yml deleted file mode 100644 index 3bb0ea87c43..00000000000 --- a/addons/project_long_term/test/test_schedule_tasks_case1.yml +++ /dev/null @@ -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.")