[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': [
'project_demo.xml'
],
'test':[
'test/test_project.yml'
],
'installable': True,
'active': False,
'certificate': '0075116868317',

View File

@ -343,7 +343,6 @@ class task(osv.osv):
'company_id': fields.many2one('res.company', 'Company'),
}
_defaults = {
'user_id': lambda obj, cr, uid, context: uid,
'state': lambda *a: 'draft',
'priority': lambda *a: '2',
'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',
],
'demo_xml': ['project_gtd_demo.xml'],
'test':[
'test/gtd_test.yml'
],
'installable': True,
'active': False,
'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',
],
'demo_xml': ['project_issue_demo.xml'],
'test' : [
'test/convert_issue_to_task.yml',
'test/test_project_issue_states.yml'
],
'installable': True,
'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" : [],
"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": [
"security/ir.model.access.csv",
"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="arch" type="xml">
<form string="Compute Scheduling of Phases">
<group height="170" width="500">
<group colspan="4" col="4">
<label colspan="4" string="This wizard will schedule phases for all or specified project" />
<newline />
<field name="target_project" colspan="4"/>
</group>
<newline />
<group colspan="4" col="6" attrs="{'invisible':[('target_project','=','all')]}">
<field name="project_id"/>
</group>
<separator colspan="4"/>
<group colspan="4" col="6"> <!-- Improve me -->
<button icon="gtk-cancel" special="cancel" string="_Cancel"/>
<button icon="gtk-ok" name="check_selection" string="_Compute" type="object"/>
</group>
</group>
<group width="380" height="180">
<group colspan="4" col="4">
<label colspan="4" string="This wizard will schedule phases for all or specified project" />
<newline />
<field name="target_project" colspan="4"/>
</group>
<newline />
<group colspan="4" col="6" attrs="{'invisible':[('target_project','=','all')]}">
<field name="project_id"/>
</group>
<separator colspan="4"/>
<group colspan="4" col="6"> <!-- Improve me -->
<button icon="gtk-cancel" special="cancel" string="_Cancel"/>
<button icon="gtk-ok" name="check_selection" string="_Compute" type="object"/>
</group>
</group>
</form>
</field>
</record>

View File

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

View File

@ -131,9 +131,9 @@ class project_schedule_task(osv.osv_memory):
if each_task.priority in priority_dict.keys():
priorty = priority_dict[each_task.priority]
if each_task.user_id:
for resource in resources:
if resource.__name__ == each_task.user_id.name:
task = create_tasks(i, hours, priorty, resource)
for resrce in resources:
if resrce.__name__ == each_task.user_id.name:
task = create_tasks(i, hours, priorty, resrce)
else:
task = create_tasks(i, hours, priorty)
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',
'project_planning_demo.xml',
],
'test': [
'test/planning_states.yml'
],
'installable': True,
'active': False,
'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',
'category': 'Generic Modules/Projects & Services',
'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 """,
'author': 'Tiny',
'depends': ['base', 'project'],
'init_xml': [],
'update_xml': [],
'demo_xml': [],
'test' : [
'test/deadline_change.yml'
],
'installable': True,
'active': False,
'certificate': '0057235475485',

View File

@ -19,28 +19,27 @@
#
##############################################################################
from datetime import date,timedelta
from datetime import date,timedelta,datetime
import time
from osv import fields, osv
from datetime import datetime
class project_project(osv.osv):
_inherit = 'project.project'
def write(self, cr, uid, ids,vals, *args, **kwargs):
if 'date' in vals and vals['date']:
data_project = self.browse(cr,uid,ids)
project_task = self.pool.get('project.task')
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:
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:
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:
deadline_dt = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S')
self.pool.get('project.task').write(cr,uid,task.id,{'date_start':start_dt, 'date_deadline':deadline_dt})
deadline_dt = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d')[:6])+(new_end_date-old_end_date)).strftime('%Y-%m-%d')
project_task.write(cr,uid,task.id,{'date_start':start_dt, 'date_deadline':deadline_dt})
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)
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': [],
'update_xml': ["process/project_timesheet_process.xml", "report/task_report_view.xml"],
'demo_xml': [],
'test': [
'test/worktask_entry_to_timesheetline_entry.yml',
],
'installable': True,
'active': False,
'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