diff options
| author | Harry (OpenERP) <hmo@tinyerp.com> | 2010-09-27 17:12:33 +0530 |
|---|---|---|
| committer | Harry (OpenERP) <hmo@tinyerp.com> | 2010-09-27 17:12:33 +0530 |
| commit | 2ae7fdcb7536b8098b84d0bb62f65d4086bc7586 (patch) | |
| tree | 002d46694ada7821399b03b2f23c1abaaaa24809 /addons/project_long_term/wizard/project_compute_tasks.py | |
| parent | 98f4e0a2b4b7a3495323c8bdf08d2e95ba989d6b (diff) | |
| parent | a9e8c8fd17de66f0902a0206d5163b61efc191c3 (diff) | |
[MERGE] trunk-dev-addons2 branch
bzr revid: hmo@tinyerp.com-20100927114233-jz3ovtj6s8ut2m4n
Diffstat (limited to 'addons/project_long_term/wizard/project_compute_tasks.py')
| -rw-r--r-- | addons/project_long_term/wizard/project_compute_tasks.py | 120 |
1 files changed, 20 insertions, 100 deletions
diff --git a/addons/project_long_term/wizard/project_compute_tasks.py b/addons/project_long_term/wizard/project_compute_tasks.py index 8e98f26b353..cb74649502f 100644 --- a/addons/project_long_term/wizard/project_compute_tasks.py +++ b/addons/project_long_term/wizard/project_compute_tasks.py @@ -20,14 +20,10 @@ ############################################################################## import datetime -from resource.faces import * -from new import classobj -import operator from tools.translate import _ from osv import osv, fields -import working_calendar as wkcal class project_compute_tasks(osv.osv_memory): _name = 'project.compute.tasks' @@ -40,108 +36,32 @@ class project_compute_tasks(osv.osv_memory): """ Schedule the tasks according to resource available and priority. """ - project_obj = self.pool.get('project.project') + project_pool = self.pool.get('project.project') task_pool = self.pool.get('project.task') - resource_obj = self.pool.get('resource.resource') - user_obj = self.pool.get('res.users') - if context is None: context = {} - + context['compute_by'] = 'project' data = self.read(cr, uid, ids, [])[0] project_id = data['project_id'] - project = project_obj.browse(cr, uid, project_id, context=context) - task_ids = task_pool.search(cr, uid, [('project_id', '=', project_id), - ('state', 'in', ['draft', 'open', 'pending']) - ]) - if task_ids: - task_ids.sort() - tasks = task_pool.browse(cr, uid, task_ids, context=context) - calendar_id = project.resource_calendar_id and project.resource_calendar_id.id or False - start_date = project.date_start - if not project.date_start: - start_date = datetime.datetime.now().strftime("%Y-%m-%d") - date_start = datetime.datetime.strftime(datetime.datetime.strptime(start_date, "%Y-%m-%d"), "%Y-%m-%d %H:%M") - # Create Resource Class objects which are the Project Members - resources = [] - for user in project.members: - leaves = [] - time_efficiency = 1.0 - resource_id = resource_obj.search(cr, uid, [('user_id', '=', user.id)], context=context) - if resource_id: -# resource = resource_obj.browse(cr, uid, resource_id, context=context)[0] - resource = resource_obj.read(cr, uid, resource_id, ['calendar_id', 'time_efficiency'], context=context)[0] - if resource.get('calendar_id', False): - leaves = wkcal.compute_leaves(cr, uid, calendar_id , resource_id[0], resource['calendar_id'] and resource['calendar_id'][0] or False) - time_efficiency = resource.get('time_efficiency') - resources.append(classobj((user.name.encode('utf8')), (Resource,), { - '__doc__': user.name, - '__name__': user.name, - 'vacation': tuple(leaves), - 'efficiency': time_efficiency - })) - priority_dict = {'0': 1000, '1': 800, '2': 500, '3': 300,'4': 100} - # Create dynamic no of tasks with the resource specified - def create_tasks(j, eff, priorty=500, obj=None): - def task(): - """ - task is a dynamic method! - """ - effort = eff - if obj: - resource = obj - priority = priorty - task.__doc__ = "TaskNO%d" %j - task.__name__ = "task%d" %j - return task - - # Create a 'Faces' project with all the tasks and resources - def Project(): - title = project.name - start = date_start - try: - resource = reduce(operator.or_, resources) - except: - raise osv.except_osv(_('Error'), _('Project must have members assigned !')) - minimum_time_unit = 1 - if calendar_id: # If project has calendar - working_days = wkcal.compute_working_calendar(cr, uid, calendar_id) - vacation = tuple(wkcal.compute_leaves(cr, uid, calendar_id)) - # Dynamic Creation of tasks - i = 0 - for each_task in tasks: - hours = str(each_task.planned_hours )+ 'H' - if each_task.priority in priority_dict.keys(): - priorty = priority_dict[each_task.priority] - rcre = False - if each_task.user_id: - for resrce in resources: - if resrce.__name__ == each_task.user_id.name: # check me!! - rcre = resrce - break - task = create_tasks(i, hours, priorty, rcre) - i += 1 - - project = BalancedProject(Project) - loop_no = 0 - # Write back the computed dates - for t in project: - s_date = t.start.to_datetime() - e_date = t.end.to_datetime() - if loop_no == 0: - project_obj.write(cr, uid, [project_id], {'date': e_date}, context=context) - else: - ctx = context.copy() - ctx.update({'scheduler': True}) - user_id = user_obj.search(cr, uid, [('name', '=', t.booked_resource[0].__name__)]) - task_pool.write(cr, uid, [tasks[loop_no-1].id], { - 'date_start': s_date.strftime('%Y-%m-%d %H:%M:%S'), - 'date_end': e_date.strftime('%Y-%m-%d %H:%M:%S'), - 'user_id': user_id[0] - }, context=ctx) + project_pool.schedule_tasks(cr, uid, [project_id], context=context) + return self._open_task_list(cr, uid, data, context=context) - loop_no +=1 - return {} + def _open_task_list(self, cr, uid, data, context=None): + """ + Return the scheduled task list. + """ + if context is None: + context = {} + mod_obj = self.pool.get('ir.model.data') + act_obj = self.pool.get('ir.actions.act_window') + result = mod_obj._get_id(cr, uid, 'project', 'action_view_task') + id = mod_obj.read(cr, uid, [result], ['res_id'])[0]['res_id'] + result = {} + if not id: + return result + result = act_obj.read(cr, uid, [id], context=context)[0] + result['context'] = {"search_default_project_id":data['project_id'], "search_default_user_id":uid, "search_default_current": 1} + return result project_compute_tasks() |
