[MERGE] pap work for project and its related modules yaml

bzr revid: mra@mra-laptop-20100608121140-5hqn9mpupbjy6qh2
This commit is contained in:
Mustufa Rangwala 2010-06-08 17:41:40 +05:30
commit b567404c6c
22 changed files with 1189 additions and 33 deletions

View File

@ -47,6 +47,9 @@ work done on tasks, eso. It is able to render planning, order tasks, eso.
'demo_xml': [ 'demo_xml': [
'project_demo.xml' 'project_demo.xml'
], ],
'test':[
'test/test_project.yml'
],
'installable': True, 'installable': True,
'active': False, 'active': False,
'certificate': '0075116868317', 'certificate': '0075116868317',

View File

@ -343,7 +343,6 @@ class task(osv.osv):
'company_id': fields.many2one('res.company', 'Company'), 'company_id': fields.many2one('res.company', 'Company'),
} }
_defaults = { _defaults = {
'user_id': lambda obj, cr, uid, context: uid,
'state': lambda *a: 'draft', 'state': lambda *a: 'draft',
'priority': lambda *a: '2', 'priority': lambda *a: '2',
'progress': lambda *a: 0, 'progress': lambda *a: 0,

View File

@ -0,0 +1,322 @@
-
Test project template feature
-
Create project 'OpenERP Training Programme'
-
!record {model: project.project, id: project_project_openerptrainingprogramme0}:
company_id: base.main_company
name: OpenERP Training Programme
-
Create task 'Technical Training' for this project
-
!record {model: project.task, id: project_task_technicaltraining0}:
date_start: '2010-05-31 11:48:38'
name: Technical Training
planned_hours: 30.0
project_id: project_project_openerptrainingprogramme0
remaining_hours: 30.0
state: draft
-
Create task 'Functional Training' for this project
-
!record {model: project.task, id: project_task_functionaltraining0}:
date_start: '2010-05-31 11:49:11'
name: Functional Training
planned_hours: 30.0
project_id: project_project_openerptrainingprogramme0
remaining_hours: 30.0
state: draft
-
Set project as project template
-
!python {model: project.project}: |
self.set_template(cr, uid, [ref("project_project_openerptrainingprogramme0")],
{"lang": "en_US", "active_model": "ir.ui.menu", "active_ids": [ref("project.menu_open_view_project_all")],
"tz": False, "active_id": ref("project.menu_open_view_project_all"), })
-
Check if project in template state
-
!assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in template state}:
- state == "template"
-
Create new project based on this template
-
!python {model: project.project}: |
new_prj = self.duplicate_template(cr, uid, [ref("project_project_openerptrainingprogramme0")],
{"lang": "en_US", "active_model": "ir.ui.menu", "active_ids": [ref("project.menu_open_view_project_all")],
"tz": False, "active_id": ref("project.menu_open_view_project_all"), })
if not new_prj:
raise Exception( "New project based on template not created")
new_id = new_prj['res_id']
state = self.read(cr, uid, [new_id], ['state'])[0]['state']
assert state == 'open', "Project in %s state. Project created from template project must be in open state"%state
-
Reset project template to normal project
-
!python {model: project.project}: |
self.reset_project(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids":
[ref("project.menu_open_view_project_all")], "tz": False, "active_model":
"ir.ui.menu", "project_id": False, "active_id": ref("project.menu_open_view_project_all"),
})
-
Check if project in open state
-
!assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in open state}:
- state == "open"
-
Test for different project-states
-
Keep project pending
-
!python {model: project.project}: |
self.set_pending(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids":
[ref("project.menu_open_view_project_all")], "tz": False, "active_model":
"ir.ui.menu", "project_id": False, "active_id": ref("project.menu_open_view_project_all"),
})
-
Check if project in pending state
-
!assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in pending state}:
- state == "pending"
-
Cancel the project
-
!python {model: project.project}: |
self.set_cancel(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids":
[ref("project.menu_open_view_project_all")], "tz": False, "active_model":
"ir.ui.menu", "project_id": False, "active_id": ref("project.menu_open_view_project_all"),
})
-
Check if project in cancel state
-
!assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in cancel state}:
- state == "cancelled"
-
Re-open the project
-
!python {model: project.project}: |
self.set_open(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids": [ref("project.menu_open_view_project_all")],
"tz": False, "active_model": "ir.ui.menu", "project_id": False, "active_id":
ref("project.menu_open_view_project_all"), })
-
Check if project in open state
-
!assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in open state}:
- state == "open"
-
Test for task work allocation
-
Check if task 'Technical Training' in draft state
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: Project is in draft state}:
- state == "draft"
-
Open task 'Technical Training'
-
!python {model: project.task}: |
self.do_open(cr, uid, [ref("project_task_technicaltraining0")], {"lang": "en_US", "active_ids": [ref("project.menu_action_view_task")],
"tz": False, "active_model": "ir.ui.menu", "search_default_project_id":
False, "search_default_user_id": 1, "search_default_current": 1, "project_id":
False, "active_id": ref("project.menu_action_view_task"), })
-
Check if task 'Technical Training' in open state and for other initial values
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: Project is in open state}:
- state == "open"
- planned_hours == 30
- remaining_hours == 30
- delay_hours == 0.0
- total_hours == 30
- effective_hours == 0.0
-
Make a work task entry 'Training on OpenERP modules, models and classes' of 10 hours
-
!record {model: project.task, id: project_task_technicaltraining0}:
work_ids:
- date: '2010-05-31 15:04:22'
hours: 10.0
name: Training on OpenERP modules, models and classes
user_id: base.user_root
-
Check for effective hours and remaining hours, effective_hours must be equal to 10
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After work task of 10 hours effective_hours must be equal to 10}:
- remaining_hours == 20
- effective_hours == 10.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on OpenERP xml views' of 10 hours
-
!record {model: project.task, id: project_task_technicaltraining0}:
work_ids:
- date: '2010-06-01 15:04:46'
hours: 10.0
name: Training on OpenERP xml views
user_id: base.user_root
-
Check for effective hours and remaining hours, effective_hours must be equal to 20
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 20}:
- remaining_hours == 10
- effective_hours == 20.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on workflows' of 10 hours
-
!record {model: project.task, id: project_task_technicaltraining0}:
work_ids:
- date: '2010-06-02 15:05:24'
hours: 10.0
name: Training on workflows
user_id: base.user_root
-
Check for effective hours and remaining hours, effective_hours must be equal to 30
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 30}:
- remaining_hours == 0
- effective_hours == 30.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Set remaining hours of 10 hours for reevaluating the task
-
!record {model: config.compute.remaining, id: config_compute_remaining_0}:
remaining_hours: 10.0
-
Reevaluate the task
-
!python {model: config.compute.remaining}: |
self.compute_hours(cr, uid, [ref("config_compute_remaining_0")], {"lang": "en_US",
"project_id": False, "tz": False, "active_model": "project.task", "search_default_project_id":
False, "search_default_user_id": 1, "search_default_current": 1, "active_ids":
[ref("project_task_technicaltraining0")], "active_id": ref("project_task_technicaltraining0"), })
-
Check for effective hours and remaining hours, remaining_hours must be 10 while planned_hours remains 30
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After reevaluating the task with 10 hours remaining_hours must be 10 while planned_hours remains 30}:
- planned_hours == 30
- remaining_hours == 10.0
- effective_hours == 30.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on reports and wizards' of 10 hours
-
!record {model: project.task, id: project_task_technicaltraining0}:
work_ids:
- date: '2010-05-31 15:08:40'
hours: 10.0
name: Training on reports and wizards
user_id: base.user_root
-
Check for effective hours and remaining hours
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 40 while planned_hours remains 30}:
- planned_hours == 30
- remaining_hours == 0
- effective_hours == 40.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Close the task
-
!python {model: project.task}: |
self.do_close(cr, uid, [ref("project_task_technicaltraining0")], {"lang": "en_US", "active_ids": [ref("project.menu_action_view_task")],
"tz": False, "active_model": "ir.ui.menu", "search_default_project_id":
False, "search_default_user_id": 1, "search_default_current": 1, "project_id":
False, "active_id": ref("project.menu_action_view_task"), })
-
Check if task in done state
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: Task is in done state}:
- state == "done"
-
Test for task reactivation
-
Reactivate task
-
!record {model: config.compute.remaining, id: config_compute_remaining_1}:
remaining_hours: 10.0
-
Reevaluate the task with 10 hours remaining
-
!python {model: config.compute.remaining}: |
self.compute_hours(cr, uid, [ref("config_compute_remaining_1")], {"lang": "en_US",
"project_id": False, "tz": False, "button_reactivate": True, "active_model":
"project.task", "search_default_project_id": False, "search_default_user_id":
1, "search_default_current": 1, "active_ids": [ref("project_task_technicaltraining0")], "active_id": ref("project_task_technicaltraining0"),
})
-
Check for effective hours and remaining hours, remaining_hours must be 10 while planned_hours remains 30
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After reevaluating the task with 10 hours remaining_hours must be 10 while planned_hours remains 30}:
- planned_hours == 30
- remaining_hours == 10.0
- effective_hours == 40.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on yml' of 5 hours
-
!record {model: project.task, id: project_task_technicaltraining0}:
work_ids:
- date: '2010-05-31 16:55:27'
hours: 5.0
name: Training on yml
user_id: base.user_root
-
Check for effective hours and remaining hours
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After work task of 5 hours effective_hours must be equal to 45 and remaining_hours is 5}:
- planned_hours == 30
- remaining_hours == 5.0
- effective_hours == 45.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Close the task
-
!python {model: project.task}: |
self.do_close(cr, uid, [ref("project_task_technicaltraining0")], {"lang": "en_US", "active_ids": [ref("project.menu_action_view_task")],
"tz": False, "active_model": "ir.ui.menu", "search_default_project_id":
False, "search_default_user_id": 1, "search_default_current": 1, "project_id":
False, "active_id": ref("project.menu_action_view_task"), })
-
Check if task in done state
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error}:
- state == "done"
-
Check for effective hours and remaining hours
-
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After closing the task planned_hours must remain 30 effective_hours must be 45 and remaining hours must be 0}:
- planned_hours == 30
- remaining_hours == 0.0
- effective_hours == 45.0
- total_hours == effective_hours + remaining_hours
- delay_hours == total_hours - planned_hours
-
Close project 'OpenERP Training Programme'
-
!python {model: project.project}: |
self.set_done(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids": [ref("project.menu_open_view_project_all")],
"tz": False, "active_model": "ir.ui.menu", "project_id": False, "active_id":
ref("project.menu_open_view_project_all"), })
-
Check if project in close state
-
!assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error}:
- state == "close"

View File

@ -50,6 +50,9 @@ performing those tasks.
'wizard/project_gtd_fill_view.xml', 'wizard/project_gtd_fill_view.xml',
], ],
'demo_xml': ['project_gtd_demo.xml'], 'demo_xml': ['project_gtd_demo.xml'],
'test':[
'test/gtd_test.yml'
],
'installable': True, 'installable': True,
'active': False, 'active': False,
'certificate': '0043525236301', 'certificate': '0043525236301',

View File

@ -0,0 +1,80 @@
-
Create a task 'Develop time management module' with monthly timebox
-
!record {model: project.task, id: project_task_developtimemanagementmodule0}:
date_end: '2010-06-04 10:00:00'
date_start: '2010-06-02 14:42:21'
name: Develop time management module
planned_hours: 15.0
project_id: project.project_project_22
remaining_hours: 15.0
state: draft
timebox_id: project_gtd.timebox_monthly
-
Open the task
-
!python {model: project.task}: |
self.do_open(cr, uid, [ref("project_task_developtimemanagementmodule0")], {"lang":
"en_US", "project_id": False, "tz": False, "active_model": "ir.ui.menu",
"department_id": False, "section_id": False, "search_default_project_id":
False, "search_default_user_id": 1, "search_default_current": 1, "active_ids":
[ref("project.menu_action_view_task")], "active_id": ref("project.menu_action_view_task"),
})
-
Create time box for next week
-
!record {model: project.gtd.timebox, id: project_gtd_timebox_nextweek0}:
name: Next Week
sequence: 0.0
-
Create time box for tomorrow
-
!record {model: project.gtd.timebox, id: project_gtd_timebox_tomorrow1}:
name: Tomorrow
sequence: 0.0
-
Planify the task from monthly timebox to tomorrow timebox
-
!record {model: project.timebox.fill.plan, id: project_timebox_fill_plan_0}:
task_ids:
- project_task_developtimemanagementmodule0
timebox_id: project_gtd.timebox_monthly
timebox_to_id: project_gtd_timebox_tomorrow1
-
Set the task to tomorrow timebox
-
!python {model: project.timebox.fill.plan}: |
self.process(cr, uid, [ref("project_timebox_fill_plan_0")], {"lang": "en_US",
"project_id": False, "tz": False, "active_model": "project.gtd.timebox",
"department_id": False, "section_id": False, "record_id": 1, "active_ids":
[ref("project_gtd.timebox_daily")], "active_id": ref("project_gtd.timebox_daily"),
})
-
Check if task set to tomorrow timebox
-
!assert {model: project.task, id: project_task_developtimemanagementmodule0, string: Task set to tomorrow timebox}:
- timebox_id.id == ref("project_gtd_timebox_tomorrow1")
-
Empty Timebox for tomorrow
-
!python {model: project.timebox.empty}: |
self._empty(cr, uid, {"lang": "en_US",
"project_id": False, "tz": False, "active_model": "project.gtd.timebox",
"department_id": False, "section_id": False, "record_id": 1, "active_ids":
[ref("project_gtd_timebox_tomorrow1")], "active_id": ref("project_gtd_timebox_tomorrow1"),
})
-
Check task 'Develop time management module' is no more in tomorrow timebox
-
!assert {model: project.task, id: project_task_developtimemanagementmodule0, string: Task is not in tomorrow timebox}:
- timebox_id.id != ref("project_gtd_timebox_tomorrow1")

View File

@ -47,6 +47,10 @@
'security/ir.model.access.csv', 'security/ir.model.access.csv',
], ],
'demo_xml': ['project_issue_demo.xml'], 'demo_xml': ['project_issue_demo.xml'],
'test' : [
'test/convert_issue_to_task.yml',
'test/test_project_issue_states.yml'
],
'installable': True, 'installable': True,
'active': False, 'active': False,
} }

View File

@ -0,0 +1,32 @@
-
Create an issue
-
!record {model: project.issue, id: project_issue_onchangeevent0}:
categ_id: project_issue.bug_categ
name: on_change event does not pass context to the method
project_id: project.project_project_22
working_hours_close: 0.0
working_hours_open: 0.0
-
Check there is no task attached to issue
-
!assert {model: project.issue, id: project_issue_onchangeevent0, string: There must not be any task attached to issue}:
- task_id.id == False
-
Convert issue to task
-
!python {model: project.issue}: |
self.convert_issue_task(cr, uid, [ref("project_issue_onchangeevent0")],
{"lang": "en_US", "project_id": False, "tz": False, "active_model": "ir.ui.menu",
"department_id": False, "section_id": False, "search_default_project_id":
False, "search_default_my_bugs": 1, "search_default_user_id": 1, "search_default_current_bugs":
1, "active_ids": [ref("project_issue.menu_project_issue_track")], "active_id":
ref("project_issue.menu_project_issue_track"), })
-
Check there is a task attached to issue
-
!assert {model: project.issue, id: project_issue_onchangeevent0, string: After creating a task for the issue there must be a task attached to it}:
- task_id.id != False

View File

@ -0,0 +1,112 @@
-
Create an issue
-
!record {model: project.issue, id: project_issue_stockmovedates0}:
categ_id: project_issue.bug_categ
name: Stock Move dates
project_id: project.project_project_22
working_hours_close: 0.0
working_hours_open: 0.0
-
Check if issue in 'draft' state
-
!assert {model: project.issue, id: project_issue_stockmovedates0, severity: error, string: Issue is in draft state}:
- state == 'draft'
-
Open the issue
-
!python {model: project.issue}: |
self.case_open(cr, uid, [ref("project_issue_stockmovedates0")], {"lang":
"en_US", "active_ids": [ref("project_issue.menu_project_issue_track")], "tz":
False, "active_model": "ir.ui.menu", "search_default_project_id": False, "search_default_my_bugs":
1, "search_default_user_id": 1, "search_default_current_bugs": 1, "project_id":
False, "active_id": ref("project_issue.menu_project_issue_track"), })
-
Check if issue in 'open' state
-
!assert {model: project.issue, id: project_issue_stockmovedates0, severity: error, string: Issue is in open state}:
- state == 'open'
-
Keep issue pending
-
!python {model: project.issue}: |
self.case_pending(cr, uid, [ref("project_issue_stockmovedates0")],
{"lang": "en_US", "active_ids": [ref("project_issue.menu_project_issue_track")],
"tz": False, "active_model": "ir.ui.menu", "search_default_project_id":
False, "search_default_my_bugs": 1, "search_default_user_id": 1, "search_default_current_bugs":
1, "project_id": False, "active_id": ref("project_issue.menu_project_issue_track"),
})
-
Check if issue in 'pending' state
-
!assert {model: project.issue, id: project_issue_stockmovedates0, severity: error, string: Issue is in pending state}:
- state == 'pending'
-
Open the issue
-
!python {model: project.issue}: |
self.case_open(cr, uid, [ref("project_issue_stockmovedates0")], {"lang":
"en_US", "active_ids": [ref("project_issue.menu_project_issue_track")], "tz":
False, "active_model": "ir.ui.menu", "search_default_project_id": False, "search_default_my_bugs":
1, "search_default_user_id": 1, "search_default_current_bugs": 1, "project_id":
False, "active_id": ref("project_issue.menu_project_issue_track"), })
-
Check if issue in 'open' state
-
!assert {model: project.issue, id: project_issue_stockmovedates0, severity: error, string: Issue is in open state}:
- state == 'open'
-
Cancel the issue
-
!python {model: project.issue}: |
self.case_cancel(cr, uid, [ref("project_issue_stockmovedates0")],
{"lang": "en_US", "active_ids": [ref("project_issue.menu_project_issue_track")],
"tz": False, "active_model": "ir.ui.menu", "search_default_project_id":
False, "search_default_my_bugs": 1, "search_default_user_id": 1, "search_default_current_bugs":
1, "project_id": False, "active_id": ref("project_issue.menu_project_issue_track"),
})
-
Check if issue in 'cancel' state
-
!assert {model: project.issue, id: project_issue_stockmovedates0, severity: error, string: Issue is in cancel state}:
- state == 'cancel'
-
Reset the issue
-
!python {model: project.issue}: |
self.case_reset(cr, uid, [ref("project_issue_stockmovedates0")],
{"lang": "en_US", "active_ids": [ref("project_issue.menu_project_issue_track")],
"tz": False, "active_model": "ir.ui.menu", "search_default_project_id":
False, "search_default_my_bugs": 1, "search_default_user_id": 1, "search_default_current_bugs":
1, "project_id": False, "active_id": ref("project_issue.menu_project_issue_track"),
})
-
Check if issue in 'draft' state
-
!assert {model: project.issue, id: project_issue_stockmovedates0, severity: error, string: Issue is in draft state}:
- state == 'draft'
-
Close the issue
-
!python {model: project.issue}: |
self.case_close(cr, uid, [ref("project_issue_stockmovedates0")],
{"lang": "en_US", "active_ids": [ref("project_issue.menu_project_issue_track")],
"tz": False, "active_model": "ir.ui.menu", "search_default_project_id":
False, "search_default_my_bugs": 1, "search_default_user_id": 1, "search_default_current_bugs":
1, "project_id": False, "active_id": ref("project_issue.menu_project_issue_track"),
})
-
Check if issue in 'done' state
-
!assert {model: project.issue, id: project_issue_stockmovedates0, severity: error, string: Issue is in done state}:
- state == 'done'

View File

@ -38,6 +38,11 @@
""", """,
"init_xml" : [], "init_xml" : [],
"demo_xml" : ["project_long_term_demo.xml"], "demo_xml" : ["project_long_term_demo.xml"],
"test" : [
'test/schedule_project_phases.yml',
'test/schedule_project_tasks.yml',
'test/schedule_phase_tasks.yml'
],
"update_xml": [ "update_xml": [
"security/ir.model.access.csv", "security/ir.model.access.csv",
"project_long_term_wizard.xml" , "project_long_term_wizard.xml" ,

View File

@ -0,0 +1,101 @@
-
Create project 'Develop an outlook-openerp synchronization plugin'
-
!record {model: project.project, id: project_project_project0}:
company_id: base.main_company
name: Project123
members:
- project_long_term.res_users_manager0
- project_long_term.res_users_user0
- project_long_term.res_users_userfinance0
- project_long_term.res_users_userdesign0
- project_long_term.res_users_userdeveloper0
- project_long_term.res_users_usertester0
- project_long_term.res_users_useranalyst0
-
Create phase 'Develop GUI' in Outlook
-
!record {model: project.phase, id: project_phase_phase0}:
date_start: '2010-06-02 00:00:00'
duration: 200.0
name: phase123
product_uom: product.uom_day
project_id: project_project_project0
state: draft
resource_ids:
- resource_id: project_long_term.resource_resource_analyst0
useability: 80.0
- resource_id: project_long_term.resource_resource_programmer0
useability: 30.0
- resource_id: project_long_term.resource_resource_webdesigner0
useability: 30.0
-
Create the phase task 'Develop GUI for Server Configuration'
-
!record {model: project.task, id: project_task_t0}:
name: t1
occupation_rate: 1.0
planned_hours: 20.0
remaining_hours: 20.0
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
Create the phase task 'Develop GUI for Modules Configuration'
-
!record {model: project.task, id: project_task_t1}:
name: t2
occupation_rate: 1.0
planned_hours: 25.0
remaining_hours: 25.0
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
Create the phase task 'Develop GUI for OpenERP Synchronisation'
-
!record {model: project.task, id: project_task_t2}:
name: t3
occupation_rate: 1.0
planned_hours: 30.0
remaining_hours: 30.0
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
Create the phase task 'Develop required Menus'
-
!record {model: project.task, id: project_task_3}:
name: t4
occupation_rate: 1.0
planned_hours: 25.0
remaining_hours: 25.0
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
Schedule phase tasks
-
!python {model: project.schedule.tasks}: |
self.compute_date(cr, uid, {"lang": "en_US",
"active_model": "project.phase", "active_ids": [ref("project_phase_phase0")],
"tz": False, "record_id": 138, "project_id": ref("project_project_project0"), "active_id": ref("project_phase_phase0"),
})
-
Check if tasks scheduled, check that either of task's start_date, end_date and user_id is not null
-
!python {model: project.phase}: |
phase=self.browse(cr, uid, [ref("project_phase_phase0")])[0]
for task in phase.task_ids:
if (not task.user_id) or (not task.date_start) or (not task.date_end):
raise AssertionError("Phase Tasks not scheduled")

View File

@ -0,0 +1,143 @@
-
Create a project 'World Bank's Project'
-
!record {model: project.project, id: project_project_worldbanksproject0}:
company_id: base.main_company
name: "World Bank's Project"
priority: 4
-
Create a project phase 'Defining Client's Basic Idea of Project'
-
!record {model: project.phase, id: project_phase_definingclientsbasicideaofproject0}:
date_start: '2010-06-02 00:00:00'
duration: 15.0
name: "Defining Client's Basic Idea of Project"
product_uom: product.uom_day
project_id: project_project_worldbanksproject0
state: draft
-
Create project phase 'Establishing Project Feasibility'
-
!record {model: project.phase, id: project_phase_establishingprojectfeasibility0}:
date_start: '2010-06-02 00:00:00'
duration: 30.0
name: Establishing Project Feasibility
product_uom: product.uom_day
project_id: project_project_worldbanksproject0
state: draft
-
Create project phase 'Preparation of Engineering Designs'
-
!record {model: project.phase, id: project_phase_preparationofengineeringdesigns0}:
date_start: '2010-06-02 00:00:00'
duration: 100.0
name: Preparation of Engineering Designs
product_uom: product.uom_hour
project_id: project_project_worldbanksproject0
state: draft
-
Create project phase 'Procurement of Works and Goods'
-
!record {model: project.phase, id: project_phase_procurementofworksandgoods0}:
date_start: '2010-06-02 00:00:00'
duration: 24.0
name: Procurement of Works and Goods
product_uom: product.uom_hour
project_id: project_project_worldbanksproject0
state: draft
-
Create project phase 'Project Construction'
-
!record {model: project.phase, id: project_phase_projectconstruction0}:
date_start: '2010-06-02 00:00:00'
duration: 4320.0
name: Project Construction
product_uom: product.uom_hour
project_id: project_project_worldbanksproject0
state: draft
-
Create project phase 'Project Completion'
-
!record {model: project.phase, id: project_phase_projectcompletion0}:
date_start: '2010-06-02 00:00:00'
duration: 240.0
name: Project Completion
product_uom: product.uom_hour
project_id: project_project_worldbanksproject0
state: draft
-
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.compute.phases}: |
self.check_selection(cr, uid, [ref("project_compute_phases_0")], {"lang": "en_US",
"project_id": False, "tz": False, "active_model": "ir.ui.menu", "department_id":
False, "section_id": False, "record_id": 279, "active_ids": [ref("project_long_term.menu_compute_phase")],
"active_id": ref("project_long_term.menu_compute_phase"), })
-
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 task in prj.tasks:
if (not task.user_id) or (not task.date_start) or (not task.date_end):
raise AssertionError("Tasks not scheduled")

View File

@ -0,0 +1,108 @@
-
Create project 'Develop a thunderbird-openerp synchronization plugin'
-
!record {model: project.project, id: project_project_project1}:
company_id: base.main_company
name: Project2
members:
- project_long_term.res_users_manager0
- project_long_term.res_users_user0
- project_long_term.res_users_userfinance0
- project_long_term.res_users_userdesign0
- project_long_term.res_users_userdeveloper0
- project_long_term.res_users_usertester0
- project_long_term.res_users_useranalyst0
-
Create phase 'Develop GUI' in Thunderbird
-
!record {model: project.phase, id: project_phase_phase1}:
date_start: '2010-06-02 00:00:00'
duration: 100.0
name: phase22
product_uom: product.uom_day
project_id: project_project_project1
state: draft
resource_ids:
- resource_id: project_long_term.resource_resource_analyst0
useability: 80.0
- resource_id: project_long_term.resource_resource_programmer0
useability: 30.0
- resource_id: project_long_term.resource_resource_webdesigner0
useability: 30.0
-
Create the phase task 'Develop GUI for Server Configuration'
-
!record {model: project.task, id: project_task_t00}:
name: t1
occupation_rate: 1.0
planned_hours: 20.0
remaining_hours: 20.0
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
-
Create the phase task 'Develop GUI for Modules Configuration'
-
!record {model: project.task, id: project_task_t11}:
name: t2
occupation_rate: 1.0
planned_hours: 25.0
remaining_hours: 25.0
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
-
Create the phase task 'Develop GUI for OpenERP Synchronisation'
-
!record {model: project.task, id: project_task_t22}:
name: t3
occupation_rate: 1.0
planned_hours: 30.0
remaining_hours: 30.0
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
-
Create the phase task 'Develop required Menus'
-
!record {model: project.task, id: project_task_t33}:
name: t4
occupation_rate: 1.0
planned_hours: 25.0
remaining_hours: 25.0
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
-
Get the project to schedule the tasks
-
!record {model: project.compute.tasks, id: project_compute_tasks_0}:
project_id: project_project_project1
-
Schedule tasks
-
!python {model: project.compute.tasks}: |
self.compute_date(cr, uid, [ref("project_compute_tasks_0")], {"lang": "en_US",
"active_model": "ir.ui.menu", "active_ids": [ref("project_long_term.menu_compute_tasks")],
"tz": False, "record_id": 138, "project_id": ref("project_project_project1"), "active_id": ref("project_long_term.menu_compute_tasks"),
})
-
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 (not task.user_id) or (not task.date_start) or (not task.date_end):
raise AssertionError("Project Tasks not scheduled")

View File

@ -8,22 +8,22 @@
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Compute Scheduling of Phases"> <form string="Compute Scheduling of Phases">
<group height="170" width="500"> <group width="380" height="180">
<group colspan="4" col="4"> <group colspan="4" col="4">
<label colspan="4" string="This wizard will schedule phases for all or specified project" /> <label colspan="4" string="This wizard will schedule phases for all or specified project" />
<newline /> <newline />
<field name="target_project" colspan="4"/> <field name="target_project" colspan="4"/>
</group> </group>
<newline /> <newline />
<group colspan="4" col="6" attrs="{'invisible':[('target_project','=','all')]}"> <group colspan="4" col="6" attrs="{'invisible':[('target_project','=','all')]}">
<field name="project_id"/> <field name="project_id"/>
</group> </group>
<separator colspan="4"/> <separator colspan="4"/>
<group colspan="4" col="6"> <!-- Improve me --> <group colspan="4" col="6"> <!-- Improve me -->
<button icon="gtk-cancel" special="cancel" string="_Cancel"/> <button icon="gtk-cancel" special="cancel" string="_Cancel"/>
<button icon="gtk-ok" name="check_selection" string="_Compute" type="object"/> <button icon="gtk-ok" name="check_selection" string="_Compute" type="object"/>
</group> </group>
</group> </group>
</form> </form>
</field> </field>
</record> </record>

View File

@ -112,9 +112,9 @@ class project_compute_tasks(osv.osv_memory):
if each_task.priority in priority_dict.keys(): if each_task.priority in priority_dict.keys():
priorty = priority_dict[each_task.priority] priorty = priority_dict[each_task.priority]
if each_task.user_id: if each_task.user_id:
for resource in resources: for resrce in resources:
if resource.__name__ == each_task.user_id.name: # check me!! if resrce.__name__ == each_task.user_id.name: # check me!!
task = create_tasks(i, hours, priorty, resource) task = create_tasks(i, hours, priorty, resrce)
else: else:
task = create_tasks(i, hours, priorty) task = create_tasks(i, hours, priorty)
i += 1 i += 1

View File

@ -131,9 +131,9 @@ class project_schedule_task(osv.osv_memory):
if each_task.priority in priority_dict.keys(): if each_task.priority in priority_dict.keys():
priorty = priority_dict[each_task.priority] priorty = priority_dict[each_task.priority]
if each_task.user_id: if each_task.user_id:
for resource in resources: for resrce in resources:
if resource.__name__ == each_task.user_id.name: if resrce.__name__ == each_task.user_id.name:
task = create_tasks(i, hours, priorty, resource) task = create_tasks(i, hours, priorty, resrce)
else: else:
task = create_tasks(i, hours, priorty) task = create_tasks(i, hours, priorty)
i += 1 i += 1

View File

@ -53,6 +53,9 @@ At the end of the month, the planning manager can also check if the encoded time
#'report_account_analytic.planning.csv', #'report_account_analytic.planning.csv',
'project_planning_demo.xml', 'project_planning_demo.xml',
], ],
'test': [
'test/planning_states.yml'
],
'installable': True, 'installable': True,
'active': False, 'active': False,
'certificate': '0034901836973', 'certificate': '0034901836973',

View File

@ -0,0 +1,86 @@
-
Create a analytic planning 'Project Planning'
-
!record {model: report_account_analytic.planning, id: report_account_analytic_planning_projectplanning0}:
business_days: 20
date_from: '2010-06-01'
date_to: '2010-06-30'
name: Project Planning
state: draft
user_id: base.user_demo
-
Open the planning
-
!python {model: report_account_analytic.planning}: |
self.action_open(cr, uid, [ref("report_account_analytic_planning_projectplanning0")],
{"lang": "en_US", "active_ids": [ref("project_planning.menu_report_account_analytic_planning")],
"tz": False, "active_model": "ir.ui.menu", "section_id": False, "active_id":
ref("project_planning.menu_report_account_analytic_planning"), "search_default_user_id":
1, "project_id": False, "department_id": False, })
-
Check if planning in open state
-
!assert {model: report_account_analytic.planning, id: report_account_analytic_planning_projectplanning0, string: Planning in open state}:
- state == "open"
-
Cancel the planning
-
!python {model: report_account_analytic.planning}: |
self.action_cancel(cr, uid, [ref("report_account_analytic_planning_projectplanning0")],
{"lang": "en_US", "active_ids": [ref("project_planning.menu_report_account_analytic_planning")],
"tz": False, "active_model": "ir.ui.menu", "section_id": False, "active_id":
ref("project_planning.menu_report_account_analytic_planning"), "search_default_user_id":
1, "project_id": False, "department_id": False, })
-
Check if planning in cancel state
-
!assert {model: report_account_analytic.planning, id: report_account_analytic_planning_projectplanning0, string: Planning in cancel state}:
- state == "cancel"
-
Reopen the planning
-
!python {model: report_account_analytic.planning}: |
self.action_draft(cr, uid, [ref("report_account_analytic_planning_projectplanning0")],
{"lang": "en_US", "active_ids": [ref("project_planning.menu_report_account_analytic_planning")],
"tz": False, "active_model": "ir.ui.menu", "section_id": False, "active_id":
ref("project_planning.menu_report_account_analytic_planning"), "search_default_user_id":
1, "project_id": False, "department_id": False, })
-
Check if planning in draft state
-
!assert {model: report_account_analytic.planning, id: report_account_analytic_planning_projectplanning0, string: Planning in draft state}:
- state == "draft"
-
Open the planning
-
!python {model: report_account_analytic.planning}: |
self.action_open(cr, uid, [ref("report_account_analytic_planning_projectplanning0")],
{"lang": "en_US", "active_ids": [ref("project_planning.menu_report_account_analytic_planning")],
"tz": False, "active_model": "ir.ui.menu", "section_id": False, "active_id":
ref("project_planning.menu_report_account_analytic_planning"), "search_default_user_id":
1, "project_id": False, "department_id": False, })
-
Check if planning in open state
-
!assert {model: report_account_analytic.planning, id: report_account_analytic_planning_projectplanning0, string: Planning in open state}:
- state == "open"
-
Close the planning
-
!python {model: report_account_analytic.planning}: |
self.action_done(cr, uid, [ref("report_account_analytic_planning_projectplanning0")],
{"lang": "en_US", "active_ids": [ref("project_planning.menu_report_account_analytic_planning")],
"tz": False, "active_model": "ir.ui.menu", "section_id": False, "active_id":
ref("project_planning.menu_report_account_analytic_planning"), "search_default_user_id":
1, "project_id": False, "department_id": False, })
-
Check if planning in done state
-
!assert {model: report_account_analytic.planning, id: report_account_analytic_planning_projectplanning0, string: Planning in done state}:
- state == "done"

View File

@ -25,13 +25,16 @@
'version': '0.1', 'version': '0.1',
'category': 'Generic Modules/Projects & Services', 'category': 'Generic Modules/Projects & Services',
'description': """ 'description': """
- If deadline date of project is changed - If deadline date of project is changed
then the deadline date for all the tasks will change to the same """, then the deadline date for all the tasks will change to the same """,
'author': 'Tiny', 'author': 'Tiny',
'depends': ['base', 'project'], 'depends': ['base', 'project'],
'init_xml': [], 'init_xml': [],
'update_xml': [], 'update_xml': [],
'demo_xml': [], 'demo_xml': [],
'test' : [
'test/deadline_change.yml'
],
'installable': True, 'installable': True,
'active': False, 'active': False,
'certificate': '0057235475485', 'certificate': '0057235475485',

View File

@ -19,28 +19,27 @@
# #
############################################################################## ##############################################################################
from datetime import date,timedelta from datetime import date,timedelta,datetime
import time import time
from osv import fields, osv from osv import fields, osv
from datetime import datetime
class project_project(osv.osv): class project_project(osv.osv):
_inherit = 'project.project' _inherit = 'project.project'
def write(self, cr, uid, ids,vals, *args, **kwargs): def write(self, cr, uid, ids,vals, *args, **kwargs):
if 'date' in vals and vals['date']: if 'date' in vals and vals['date']:
data_project = self.browse(cr,uid,ids) data_project = self.browse(cr,uid,ids)
project_task = self.pool.get('project.task')
for prj in data_project: for prj in data_project:
c= date(*time.strptime(vals['date'],'%Y-%m-%d')[:3]) new_end_date = date(*time.strptime(vals['date'],'%Y-%m-%d')[:3])
if prj.date: if prj.date:
d= date(*time.strptime(prj.date,'%Y-%m-%d')[:3]) old_end_date = date(*time.strptime(prj.date,'%Y-%m-%d')[:3])
for task in prj.tasks: for task in prj.tasks:
start_dt = (datetime(*time.strptime(task.date_start,'%Y-%m-%d %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S') start_dt = (datetime(*time.strptime(task.date_start,'%Y-%m-%d %H:%M:%S')[:6])+(new_end_date-old_end_date)).strftime('%Y-%m-%d %H:%M:%S')
if task.date_deadline: if task.date_deadline:
deadline_dt = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S') deadline_dt = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d')[:6])+(new_end_date-old_end_date)).strftime('%Y-%m-%d')
self.pool.get('project.task').write(cr,uid,task.id,{'date_start':start_dt, 'date_deadline':deadline_dt}) project_task.write(cr,uid,task.id,{'date_start':start_dt, 'date_deadline':deadline_dt})
else: else:
self.pool.get('project.task').write(cr,uid,task.id,{'date_start':start_dt}) project_task.write(cr,uid,task.id,{'date_start':start_dt})
return super(project_project,self).write(cr, uid, ids, vals, *args, **kwargs) return super(project_project,self).write(cr, uid, ids, vals, *args, **kwargs)
project_project() project_project()

View File

@ -0,0 +1,48 @@
-
Create project 'Retro Planning'
-
!record {model: project.project, id: project_project_retroplanning0}:
company_id: base.main_company
date: '2010-06-11'
name: Retro Planning
-
Create task 'Plan all projects'
-
!record {model: project.task, id: project_task_planallprojects0}:
date_deadline: '2010-06-07'
date_end: '2010-06-04 14:00:00'
date_start: '2010-06-01 17:25:32'
name: Plan all projects
planned_hours: 24.0
project_id: project_project_retroplanning0
remaining_hours: 24.0
state: draft
-
Check if task deadline_date and start_date changes upon changing its project's end_date
-
!python {model: project.project}: |
from datetime import datetime, date
import time
data_project = self.browse(cr,uid,[ref("project_project_retroplanning0")])
prj = data_project[0]
old_end_date=''
if prj.date:
old_end_date = date(*time.strptime(prj.date,'%Y-%m-%d')[:3])
if old_end_date:
new_end_date = date(*time.strptime('2010-06-10','%Y-%m-%d')[:3])
res={}
for task in prj.tasks:
start_dt = (datetime(*time.strptime(task.date_start,'%Y-%m-%d %H:%M:%S')[:6])+(new_end_date-old_end_date)).strftime('%Y-%m-%d %H:%M:%S')
deadline_dt=''
if task.date_deadline:
deadline_dt = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d')[:6])+(new_end_date-old_end_date)).strftime('%Y-%m-%d')
res[task.id]=[start_dt,deadline_dt]
self.write(cr, uid, [ref("project_project_retroplanning0")], {'date':'2010-06-10'})
data_project = self.browse(cr,uid,[ref("project_project_retroplanning0")])
prj = data_project[0]
for task in prj.tasks:
assert task.date_start == res[task.id][0], "task start date differs, expected %s, got %s"%(res[task.id][0], task.date_start)
assert task.date_deadline == res[task.id][1], "task deadline date differs, expected %s, got %s"%(res[task.id][1], task.date_deadline)

View File

@ -35,6 +35,9 @@
'init_xml': [], 'init_xml': [],
'update_xml': ["process/project_timesheet_process.xml", "report/task_report_view.xml"], 'update_xml': ["process/project_timesheet_process.xml", "report/task_report_view.xml"],
'demo_xml': [], 'demo_xml': [],
'test': [
'test/worktask_entry_to_timesheetline_entry.yml',
],
'installable': True, 'installable': True,
'active': False, 'active': False,
'certificate': '0075123647453', 'certificate': '0075123647453',

View File

@ -0,0 +1,102 @@
-
Create an user 'HR Manager'
-
!record {model: res.users, id: res_users_hrmanager0}:
company_id: base.main_company
context_lang: en_US
login: hr
name: HR Manager
password: hr
-
Create a product with type service used to specifies employees designation
-
!record {model: product.product, id: product_product_hrmanger0}:
categ_id: product.product_category_services
cost_method: standard
mes_type: fixed
name: HR Manger
procure_method: make_to_stock
standard_price: 1.0
supply_method: buy
type: service
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
volume: 0.0
warranty: 0.0
weight: 0.0
weight_net: 0.0
-
Create an analytic journal for employees timesheet
-
!record {model: account.analytic.journal, id: account_analytic_journal_hrtimesheet0}:
company_id: base.main_company
name: HR Timesheet
type: general
-
Create an employee 'HR Manager' for user 'HR Manager'
-
!record {model: hr.employee, id: hr_employee_hrmanager0}:
name: HR Manager
user_id: res_users_hrmanager0
product_id: product_product_hrmanger0
journal_id: account_analytic_journal_hrtimesheet0
-
Create a timesheet sheet for hr manager
-
!record {model: hr_timesheet_sheet.sheet, id: hr_timesheet_sheet_sheet_sheetforhrmanager0}:
date_current: '2010-06-03'
date_from: '2010-06-01'
date_to: '2010-06-30'
name: Sheet for hr manager
state: new
user_id: res_users_hrmanager0
-
Create a project 'Timesheet Management'
-
!record {model: project.project, id: project_project_timesheetmanagement0}:
company_id: base.main_company
name: Timesheet Management
-
Create a task 'Get all timesheet records'
-
!record {model: project.task, id: project_task_getalltimesheetrecords0}:
date_start: '2010-06-03 14:54:55'
name: Get all timesheet records
planned_hours: 20.0
project_id: project_project_timesheetmanagement0
remaining_hours: 20.0
state: draft
user_id: res_users_hrmanager0
-
Open the task
-
!python {model: project.task}: |
self.do_open(cr, uid, [ref("project_task_getalltimesheetrecords0")], {"lang":
"en_US", "active_ids": [ref("project_project_timesheetmanagement0")], "tz":
False, "active_model": "project.project", "department_id": False, "project_id":
False, "active_id": ref("project_project_timesheetmanagement0"), })
-
Make a work task entry 'Get work calendar of all employees' of 10 hours done by hr manager
-
!record {model: project.task, id: project_task_getalltimesheetrecords0}:
work_ids:
- date: '2010-06-03 15:04:47'
hours: 10.0
hr_analytic_timesheet_id: 3L
name: Get work calendar of all employees
user_id: res_users_hrmanager0
-
Check for timesheet_ids in hr manager's timesheet
-
!assert {model: hr_timesheet_sheet.sheet, id: hr_timesheet_sheet_sheet_sheetforhrmanager0, string: After hr manager's work task, length of timesheet line of current timesheet must be greater then 1}:
- len(timesheet_ids) > 0