diff options
Diffstat (limited to 'addons/project_long_term')
| -rw-r--r-- | addons/project_long_term/__openerp__.py | 12 | ||||
| -rw-r--r-- | addons/project_long_term/i18n/hr.po | 625 | ||||
| -rw-r--r-- | addons/project_long_term/project_long_term.py | 3 | ||||
| -rw-r--r-- | addons/project_long_term/project_long_term_demo.xml | 11 | ||||
| -rw-r--r-- | addons/project_long_term/security/ir.model.access.csv | 18 | ||||
| -rw-r--r-- | addons/project_long_term/test/phase_constraint.yml | 118 | ||||
| -rw-r--r-- | addons/project_long_term/test/phase_process.yml | 79 | ||||
| -rw-r--r-- | addons/project_long_term/test/project_schedule_consecutive_day.yml | 127 | ||||
| -rw-r--r-- | addons/project_long_term/test/project_schedule_without_wroking_hour.yml | 76 | ||||
| -rw-r--r-- | addons/project_long_term/test/schedule_project_phases.yml | 180 | ||||
| -rw-r--r-- | addons/project_long_term/test/schedule_project_tasks.yml | 86 | ||||
| -rw-r--r-- | addons/project_long_term/test/task_process.yml | 19 | ||||
| -rw-r--r-- | addons/project_long_term/test/test_schedule_phases_case1.yml | 76 | ||||
| -rw-r--r-- | addons/project_long_term/test/test_schedule_phases_case2.yml | 193 | ||||
| -rw-r--r-- | addons/project_long_term/test/test_schedule_tasks_case1.yml | 246 |
15 files changed, 745 insertions, 1124 deletions
diff --git a/addons/project_long_term/__openerp__.py b/addons/project_long_term/__openerp__.py index f4b8ce34ad0..7d33a431f2a 100644 --- a/addons/project_long_term/__openerp__.py +++ b/addons/project_long_term/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { - "name": "Long Term Planning", + "name": "Long Term Projects", "version": "1.1", "author": "OpenERP SA", "website": "http://www.openerp.com", @@ -43,14 +43,8 @@ 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', + 'test/task_process.yml', ], "update_xml": [ "security/ir.model.access.csv", diff --git a/addons/project_long_term/i18n/hr.po b/addons/project_long_term/i18n/hr.po new file mode 100644 index 00000000000..434470646c2 --- /dev/null +++ b/addons/project_long_term/i18n/hr.po @@ -0,0 +1,625 @@ +# Croatian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-12-12 09:44+0000\n" +"Last-Translator: Tomislav Bosnjakovic <Unknown>\n" +"Language-Team: Croatian <hr@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-13 05:02+0000\n" +"X-Generator: Launchpad (build 14458)\n" + +#. module: project_long_term +#: model:ir.module.module,shortdesc:project_long_term.module_meta_information +msgid "Long Term Project Management" +msgstr "Upravljanje dugotrajnim projektima" + +#. module: project_long_term +#: view:project.compute.phases:0 +msgid "Compute Scheduling of Phases" +msgstr "Izračunaj planiranje faza" + +#. module: project_long_term +#: view:project.phase:0 +#: field:project.phase,next_phase_ids:0 +msgid "Next Phases" +msgstr "Sljedeće faze" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Project's Tasks" +msgstr "Zadaci projekta" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.act_project_phases +msgid "Phases" +msgstr "Faze" + +#. module: project_long_term +#: view:project.phase:0 +#: view:project.resource.allocation:0 +msgid "Group By..." +msgstr "Grupiraj po..." + +#. module: project_long_term +#: constraint:project.project:0 +msgid "Error! project start-date must be lower then project end-date." +msgstr "" +"Greška! Početni datum projekta mora biti manji od završnog datuma projekta." + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.act_resouce_allocation +#: view:project.resource.allocation:0 +msgid "Resources Allocation" +msgstr "Alokacija resursa" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Displaying settings" +msgstr "Postavke prikaza" + +#. module: project_long_term +#: field:project.compute.phases,target_project:0 +msgid "Schedule" +msgstr "Zakaži" + +#. module: project_long_term +#: model:ir.module.module,description:project_long_term.module_meta_information +msgid "" +"\n" +"\n" +" Long Term Project management module that tracks planning, " +"scheduling, resources allocation.\n" +" Mainly used with Big project management.\n" +" - Project Phases will be maintained by Manager of the project\n" +" - Compute Phase Scheduling: Compute start date and end date of " +"the phases which are in draft,open and pending state of the project given.\n" +" If no project given then all the " +"draft,open and pending state phases will be taken\n" +" - Compute Task Scheduling: This works same as the scheduler " +"button on project.phase. It takes the project as argument and computes all " +"the open,draft and pending tasks\n" +" - Schedule Tasks: All the tasks which are in draft,pending and " +"open state are scheduled with taking the phase's start date\n" +"\n" +" " +msgstr "" +"\n" +"\n" +" Modul upravljanja dugotrajnim projektima prati planiranje, " +"zakazivanje i alokaciju resursa.\n" +" Uglavnom se koristi s Upravljanjem velikim projektima.\n" +" - Faze projekta će održavati voditelj projekta\n" +" - Izračunaj zakaizivanje faza: Uzračunaj početni datum i završni " +"datum faza koje su u statusu nacrt,otvoreno i na čekanju za odabrani " +"projekt.\n" +" Ako nijeda projekt nije odabran tada " +"će se uzeti sve faze u statusu nacrt, otvoreno i na čekanju \n" +" - Izračunaj zakazivanje zadatka: RAdi na isti način kao i gumb " +"za zakazivanje na fazama projekta. Uzima projekt kao argument i računa sve " +"zadatke u statusu nacrt, otvoreno i na čekanju.\n" +" - Zakaži zadatke: Svi azdaci u statusu nacrt, otvoreno i na " +"čekanju se zakazuju uzimajući početni datum faze.\n" +"\n" +" " + +#. module: project_long_term +#: constraint:project.task:0 +msgid "Error ! You cannot create recursive tasks." +msgstr "Greška! Ne možete kreirati rekurzivne zadatke." + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_resouce_allocation +msgid "Resource Allocations" +msgstr "Alokacije resursa" + +#. module: project_long_term +#: constraint:project.project:0 +msgid "Error! You cannot assign escalation to the same project!" +msgstr "Greška! Ne možete dodjeliti eskalaciju istom projektu!" + +#. module: project_long_term +#: code:addons/project_long_term/project_long_term.py:128 +#, python-format +msgid "Day" +msgstr "Dan" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_task +msgid "Task" +msgstr "Zadatak" + +#. module: project_long_term +#: selection:project.compute.phases,target_project:0 +msgid "Compute a Single Project" +msgstr "Izračunaj pojedinačni projekt" + +#. module: project_long_term +#: view:project.phase:0 +#: field:project.phase,previous_phase_ids:0 +msgid "Previous Phases" +msgstr "Prijašnje faze" + +#. module: project_long_term +#: help:project.phase,product_uom:0 +msgid "UoM (Unit of Measure) is the unit of measurement for Duration" +msgstr "JM (Jedinica mjere) je mjerna jedinica za trajanje" + +#. module: project_long_term +#: help:project.phase,date_end:0 +msgid "" +" It's computed by the scheduler according to the start date and the duration." +msgstr " Planer računa prema datumu početka i trajanju." + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_project +#: field:project.compute.phases,project_id:0 +#: field:project.compute.tasks,project_id:0 +#: view:project.phase:0 +#: field:project.phase,project_id:0 +#: view:project.resource.allocation:0 +#: field:project.resource.allocation,project_id:0 +#: view:project.task:0 +msgid "Project" +msgstr "Projekt" + +#. module: project_long_term +#: code:addons/project_long_term/wizard/project_compute_phases.py:50 +#, python-format +msgid "Error!" +msgstr "Greška!" + +#. module: project_long_term +#: selection:project.phase,state:0 +msgid "Cancelled" +msgstr "Poništeno" + +#. module: project_long_term +#: help:project.resource.allocation,date_end:0 +msgid "Ending Date" +msgstr "Završni datum" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Planning" +msgstr "Planiranje" + +#. module: project_long_term +#: field:project.phase,constraint_date_end:0 +msgid "Deadline" +msgstr "Krajnji rok" + +#. module: project_long_term +#: view:project.compute.phases:0 +#: view:project.compute.tasks:0 +msgid "_Cancel" +msgstr "_Otkaži" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.action_project_compute_phases +#: model:ir.ui.menu,name:project_long_term.menu_compute_phase +msgid "Compute Phase Scheduling" +msgstr "Izračunaj zakazivanje faze" + +#. module: project_long_term +#: code:addons/project_long_term/project_long_term.py:190 +#, python-format +msgid " (copy)" +msgstr " (kopija)" + +#. module: project_long_term +#: view:project.phase:0 +#: view:project.resource.allocation:0 +#: field:project.resource.allocation,useability:0 +msgid "Availability" +msgstr "Raspoloživost" + +#. module: project_long_term +#: view:project.phase:0 +#: field:project.phase,state:0 +msgid "State" +msgstr "Status" + +#. module: project_long_term +#: view:project.compute.phases:0 +#: view:project.compute.tasks:0 +msgid "C_ompute" +msgstr "I_zračunaj" + +#. module: project_long_term +#: view:project.compute.phases:0 +msgid "Compute Scheduling of phases for all or specified project" +msgstr "Izračunaj zakazivanje faza za sve ili pojedini projekt" + +#. module: project_long_term +#: field:project.phase,product_uom:0 +msgid "Duration UoM" +msgstr "JM trajanja" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.action_project_compute_tasks +#: model:ir.ui.menu,name:project_long_term.menu_compute_tasks +msgid "Compute Task Scheduling" +msgstr "Izračunaj zakazivanje zadataka" + +#. module: project_long_term +#: field:project.phase,constraint_date_start:0 +msgid "Minimum Start Date" +msgstr "Minimalni početni datum" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_resource_allocation +#: view:project.phase:0 +#: view:project.resource.allocation:0 +msgid "Project Resource Allocation" +msgstr "Alokacija resursa projekta" + +#. module: project_long_term +#: view:project.compute.tasks:0 +msgid "Compute Scheduling of Task" +msgstr "Izračunaj zakazivanje zadatka" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.act_project_resource +#: model:ir.ui.menu,name:project_long_term.menu_pm_resources_project1 +#: model:ir.ui.menu,name:project_long_term.menu_view_resource +#: view:project.resource.allocation:0 +msgid "Resources" +msgstr "Resursi" + +#. module: project_long_term +#: model:ir.actions.act_window,help:project_long_term.action_project_compute_phases +msgid "" +"To schedule phases of all or a specified project. It then open a gantt " +"view.\n" +"\t " +msgstr "" +"Za zakazivanje faza svih ili pojedinog projekta. Nakon toga otvara Gantt " +"pogled.\n" +"\t " + +#. module: project_long_term +#: help:project.resource.allocation,date_start:0 +msgid "Starting Date" +msgstr "Početni datum" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.project_phase_task_list +msgid "Related Tasks" +msgstr "Vezani zadaci" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Dates" +msgstr "Datumi" + +#. module: project_long_term +#: help:project.resource.allocation,useability:0 +msgid "" +"Availability of this resource for this project phase in percentage (=50%)" +msgstr "Raspoloživost tog resursa za tu fazu projekta u postotku (=50%)" + +#. module: project_long_term +#: help:project.phase,constraint_date_start:0 +msgid "force the phase to start after this date" +msgstr "prisili početak faze nakon ovog datuma" + +#. module: project_long_term +#: field:project.phase,task_ids:0 +msgid "Project Tasks" +msgstr "Zadaci projekta" + +#. module: project_long_term +#: field:project.phase,resource_ids:0 +msgid "Project Resources" +msgstr "Resursi projekta" + +#. module: project_long_term +#: view:project.schedule.tasks:0 +msgid "_Ok" +msgstr "_U redu" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Schedule and Display info" +msgstr "Zakaži i prikaži info" + +#. module: project_long_term +#: help:project.phase,date_start:0 +msgid "" +"It's computed by the scheduler according the project date or the end date of " +"the previous phase." +msgstr "" +"Računa planer prema datumu projekta ili završnom datumu prethodne faze" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Month" +msgstr "Mjesec" + +#. module: project_long_term +#: constraint:project.phase:0 +msgid "Phase start-date must be lower than phase end-date." +msgstr "Početni datum faze mora biti manje od završnog datuma faze." + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_schedule_tasks +msgid "project.schedule.tasks" +msgstr "project.schedule.tasks" + +#. module: project_long_term +#: model:ir.actions.act_window,help:project_long_term.act_project_phase +msgid "" +"A project can be split into the different phases. For each phase, you can " +"define your resources allocation, describe different tasks and link your " +"phase to previous and next phases, add date constraints for the automated " +"scheduling. Use the long term planning in order to planify your available " +"human resources, convert your phases into a series of tasks when you start " +"working on the project." +msgstr "" +"Projekt je moguće podjeliti u različite faze. Za svaku fazu, možete " +"definriati alokaciju resursa, opisati različite zadatke i povezati vašu fazu " +"sa prethodnom i sljedećom fazom, dodati datumska ograničenja za automatsko " +"zakazivanje. Koristite dugotrajno planiranje za vaše raspoložive ljudske " +"resurse, pretvorite vaš faze u seriju zadataka nakon početka rada na " +"projektu." + +#. module: project_long_term +#: field:project.phase,date_start:0 +#: field:project.resource.allocation,date_start:0 +msgid "Start Date" +msgstr "Početni datum" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Resource Allocation" +msgstr "Alokacija resursa" + +#. module: project_long_term +#: help:project.phase,constraint_date_end:0 +msgid "force the phase to finish before this date" +msgstr "prisili završetak faze prije ovog datuma" + +#. module: project_long_term +#: view:project.phase:0 +#: selection:project.phase,state:0 +msgid "Draft" +msgstr "Nacrt" + +#. module: project_long_term +#: view:project.phase:0 +#: selection:project.phase,state:0 +msgid "Pending" +msgstr "Na čekanju" + +#. module: project_long_term +#: field:project.resource.allocation,name:0 +msgid "unknown" +msgstr "nepoznato" + +#. module: project_long_term +#: field:project.resource.allocation,user_id:0 +msgid "User" +msgstr "Korisnik" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Task Detail" +msgstr "Pojedinosti o zadataku" + +#. module: project_long_term +#: help:project.project,resource_calendar_id:0 +msgid "Timetable working hours to adjust the gantt diagram report" +msgstr "Raspored radnih sati za prilagođavanje izvještaja Gantt dijagramom" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_compute_tasks +msgid "Project Compute Tasks" +msgstr "Izračun zadatka projekta" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Constraints" +msgstr "Ograničenja" + +#. module: project_long_term +#: help:project.phase,sequence:0 +msgid "Gives the sequence order when displaying a list of phases." +msgstr "Daje redoslijed sekvence prilikom prikaza popisa faza." + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.act_project_phase +#: model:ir.actions.act_window,name:project_long_term.act_project_phase_list +#: model:ir.ui.menu,name:project_long_term.menu_project_phase +#: model:ir.ui.menu,name:project_long_term.menu_project_phase_list +#: view:project.phase:0 +#: field:project.project,phase_ids:0 +msgid "Project Phases" +msgstr "Faze projekta" + +#. module: project_long_term +#: view:project.phase:0 +#: selection:project.phase,state:0 +msgid "Done" +msgstr "Izvršeno" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Cancel" +msgstr "Odustani" + +#. module: project_long_term +#: view:project.phase:0 +#: selection:project.phase,state:0 +msgid "In Progress" +msgstr "U tijeku" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Remaining Hours" +msgstr "Preostali sati" + +#. module: project_long_term +#: view:project.phase:0 +#: field:project.phase,responsible_id:0 +msgid "Responsible" +msgstr "Odgovoran" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar +#: field:project.project,resource_calendar_id:0 +msgid "Working Time" +msgstr "Radno vrijeme" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Current" +msgstr "Trenutni" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Start Phase" +msgstr "Početna faza" + +#. module: project_long_term +#: code:addons/project_long_term/wizard/project_compute_phases.py:50 +#, python-format +msgid "Please Specify Project to be schedule" +msgstr "Molim navedite projekt za zakazivanje" + +#. module: project_long_term +#: view:project.phase:0 +#: field:project.phase,total_hours:0 +msgid "Total Hours" +msgstr "Ukupni sati" + +#. module: project_long_term +#: view:project.schedule.tasks:0 +msgid "Task Scheduling completed successfully." +msgstr "Zakazivanje zdataka uspješno završeno" + +#. module: project_long_term +#: view:project.compute.tasks:0 +msgid "Compute Scheduling of Task for specified project." +msgstr "Izračunaj zakazivanje zadataka za odabrani projekt" + +#. module: project_long_term +#: view:project.resource.allocation:0 +msgid "Phase" +msgstr "Faza" + +#. module: project_long_term +#: help:project.phase,state:0 +msgid "" +"If the phase is created the state 'Draft'.\n" +" If the phase is started, the state becomes 'In Progress'.\n" +" If review is needed the phase is in 'Pending' state. " +" \n" +" If the phase is over, the states is set to 'Done'." +msgstr "" +"Ako je faza kreirana u statusu 'Nacrt'.\n" +" AKo je faza započela, status se mijenja u 'U tijeku'.\n" +" Ako je potreban pregled faza je u statusu 'Na čekanju'. " +" \n" +" Ako je faza završila, status je postavljen na 'Završeno'." + +#. module: project_long_term +#: field:project.phase,date_end:0 +#: field:project.resource.allocation,date_end:0 +msgid "End Date" +msgstr "Završni Datum" + +#. module: project_long_term +#: view:project.resource.allocation:0 +#: field:project.resource.allocation,resource_id:0 +msgid "Resource" +msgstr "Resurs" + +#. module: project_long_term +#: field:project.phase,name:0 +msgid "Name" +msgstr "Naziv" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Tasks Details" +msgstr "Pojedinosti zadatka" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar +msgid "Working Period" +msgstr "Razdoblje rada" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_resource_resource +msgid "Resource Detail" +msgstr "Pojedinosti resursa" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_phase_schedule +msgid "Scheduling" +msgstr "Zakazivanje" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_phase +#: view:project.phase:0 +#: field:project.resource.allocation,phase_id:0 +#: view:project.task:0 +#: field:project.task,phase_id:0 +msgid "Project Phase" +msgstr "Faza projekta" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_compute_phases +msgid "Project Compute Phases" +msgstr "Izračun faza projekta" + +#. module: project_long_term +#: field:project.schedule.tasks,msg:0 +msgid "Message" +msgstr "Poruka" + +#. module: project_long_term +#: constraint:project.phase:0 +msgid "Loops in phases not allowed" +msgstr "Petlje u fazama nisu dozvoljene" + +#. module: project_long_term +#: field:project.phase,sequence:0 +msgid "Sequence" +msgstr "Sekvenca" + +#. module: project_long_term +#: selection:project.compute.phases,target_project:0 +msgid "Compute All Projects" +msgstr "Izračunaj sve projekte" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar_leaves +msgid "Resource Leaves" +msgstr "Odsustva resursa" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.action_project_schedule_tasks +#: view:project.phase:0 +#: view:project.schedule.tasks:0 +msgid "Schedule Tasks" +msgstr "Zakaži zadatke" + +#. module: project_long_term +#: help:project.phase,duration:0 +msgid "By default in days" +msgstr "Predefinirano u danima" + +#. module: project_long_term +#: field:project.phase,duration:0 +msgid "Duration" +msgstr "Trajanje" diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index 4ab1722336e..b6647b6de2b 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -72,12 +72,13 @@ class project_phase(osv.osv): if phase['date_start'] and phase['date_end'] and phase['date_start'] > phase['date_end']: return False return True - + #dead code def _get_default_uom_id(self, cr, uid): model_data_obj = self.pool.get('ir.model.data') model_data_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour') return model_data_obj.read(cr, uid, [model_data_id], ['res_id'])[0]['res_id'] + #dead code def _compute_progress(self, cr, uid, ids, field_name, arg, context=None): res = {} if not ids: 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. --> + <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> diff --git a/addons/project_long_term/security/ir.model.access.csv b/addons/project_long_term/security/ir.model.access.csv index 4382d27834e..6ca496f691d 100644 --- a/addons/project_long_term/security/ir.model.access.csv +++ b/addons/project_long_term/security/ir.model.access.csv @@ -1,9 +1,9 @@ -"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_project_phase","project.phase","model_project_phase","project.group_project_user",1,1,1,0 -"access_project_user_allocation","project.user.allocation","model_project_user_allocation","project.group_project_user",1,0,0,0 -"access_project_phase_manager","project.phase manager","model_project_phase","project.group_project_manager",1,1,1,1 -"access_project_user_allocation_manager","project.user.allocation manager","model_project_user_allocation","project.group_project_manager",1,1,1,1 -"access_resource_resource_user","user.user user","resource.model_resource_resource","project.group_project_user",1,0,0,0 -"access_resource_calendar_leaves_user","user.calendar.leaves user","resource.model_resource_calendar_leaves","project.group_project_user",1,1,1,1 -"access_resource_resource_manager","user.user manager","resource.model_resource_resource","project.group_project_manager",1,1,1,1 -"access_project_user_allocation_manager","project.user.allocation.manager","model_project_user_allocation","project.group_project_manager",1,1,1,1 +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_project_phase,project.phase,model_project_phase,project.group_project_user,1,1,1,0
+access_project_user_allocation,project.user.allocation,model_project_user_allocation,project.group_project_user,1,0,0,0
+access_project_phase_manager,project.phase manager,model_project_phase,project.group_project_manager,1,1,1,1
+access_project_user_allocation_manager,project.user.allocation manager,model_project_user_allocation,project.group_project_manager,1,1,1,1
+access_resource_resource_user,user.user user,resource.model_resource_resource,project.group_project_user,1,0,0,0
+access_resource_calendar_leaves_user,user.calendar.leaves user,resource.model_resource_calendar_leaves,project.group_project_user,1,1,1,1
+access_resource_resource_manager,user.user manager,resource.model_resource_resource,project.group_project_manager,1,1,1,1
+access_project_user_allocation_manager,project.user.allocation.manager,model_project_user_allocation,project.group_project_manager,1,1,1,1
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<phase3.date_end, 'Error, the phase Testing should start before ending' - diff --git a/addons/project_long_term/test/phase_process.yml b/addons/project_long_term/test/phase_process.yml new file mode 100644 index 00000000000..725c5b2a97d --- /dev/null +++ b/addons/project_long_term/test/phase_process.yml @@ -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" 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/task_process.yml b/addons/project_long_term/test/task_process.yml new file mode 100644 index 00000000000..64ecef73476 --- /dev/null +++ b/addons/project_long_term/test/task_process.yml @@ -0,0 +1,19 @@ +- + I create a record to compute the tasks of project. +- + !record {model: project.compute.tasks, id: project_compute_tasks0}: + project_id: project.project_integrate_openerp +- + I compute and shedule the tasks. +- + !python {model: project.compute.tasks}: | + self.compute_date(cr, uid, [ref("project_compute_tasks0")]) +- + 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_integrate_openerp")])[0] + for task in prj.tasks: + if task.state in ('done','cancelled'): + continue + assert task.user_id and task.date_start and task.date_end, "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.") |
