diff options
| author | Fabien Pinckaers <fp@tinyerp.com> | 2011-10-26 01:31:41 +0200 |
|---|---|---|
| committer | Fabien Pinckaers <fp@tinyerp.com> | 2011-10-26 01:31:41 +0200 |
| commit | 0d2ae40a70ba3be3ccf8e439b4ed92a1ec4719d6 (patch) | |
| tree | 9edce01a77687bc4f2c07b218c2bbffea35853cf /addons/project_long_term/wizard | |
| parent | 68adb9de7e729dd5bb62ca9bc60c584d02ec3563 (diff) | |
[FIX] Complete refactoring of project_long_term, with following changes:
do not use resources but users on phases:
- to be consistent with project members and task responsible
- if the user is linked to a resource, it uses the calendar of the resource (holidays for example)
better YML tests
Complete rewrite of the scheduling mechanism:
- Schedule phases:
- write project.user.allocation based on scheduling
- schedule resources based on members on the project
- new constraint: force some users on a phase
- Schedule tasks:
- set user if no user on task
- set start and end date
some useability improvements
We still have to work on better Gantt view but I think the scheduling is
working correctly now.
bzr revid: fp@tinyerp.com-20111025233141-cgctwe8spxhko2gn
Diffstat (limited to 'addons/project_long_term/wizard')
7 files changed, 53 insertions, 141 deletions
diff --git a/addons/project_long_term/wizard/__init__.py b/addons/project_long_term/wizard/__init__.py index c1e6d838111..4536f4a3cbb 100644 --- a/addons/project_long_term/wizard/__init__.py +++ b/addons/project_long_term/wizard/__init__.py @@ -21,6 +21,5 @@ import project_compute_phases import project_compute_tasks -import project_schedule_tasks # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_long_term/wizard/project_compute_phases.py b/addons/project_long_term/wizard/project_compute_phases.py index 7e84f0681cc..57a1b3b6ed3 100644 --- a/addons/project_long_term/wizard/project_compute_phases.py +++ b/addons/project_long_term/wizard/project_compute_phases.py @@ -25,21 +25,19 @@ class project_compute_phases(osv.osv_memory): _name = 'project.compute.phases' _description = 'Project Compute Phases' _columns = { - 'target_project': fields.selection([('all', 'Compute All Projects'), - ('one', 'Compute a Single Project'), - ], 'Schedule', required = True), - + 'target_project': fields.selection([ + ('all', 'Compute All My Projects'), + ('one', 'Compute a Single Project'), + ], 'Schedule', required=True), 'project_id': fields.many2one('project.project', 'Project') } - _defaults = { - 'target_project': 'all' + 'target_project': 'one' } def check_selection(self, cr, uid, ids, context=None): return self.compute_date(cr, uid, ids, context=context) - def compute_date(self, cr, uid, ids, context=None): """ Compute the phases for scheduling. @@ -47,12 +45,12 @@ class project_compute_phases(osv.osv_memory): project_pool = self.pool.get('project.project') data = self.read(cr, uid, ids, [], context=context)[0] if not data['project_id'] and data['target_project'] == 'one': - raise osv.except_osv(_('Error!'), _('Please Specify Project to be schedule')) + raise osv.except_osv(_('Error!'), _('Please specify a project to schedule.')) - if data['project_id']: # If project mentioned find its phases + if data['target_project'] == 'one': project_ids = [data['project_id'][0]] - else: # Else take all the draft,open,pending states phases - project_ids = project_pool.search(cr, uid, [], context=context) + else: + project_ids = project_pool.search(cr, uid, [('user_id','=',uid)], context=context) project_pool.schedule_phases(cr, uid, project_ids, context=context) return self._open_phases_list(cr, uid, data, context=context) @@ -70,8 +68,7 @@ class project_compute_phases(osv.osv_memory): result = act_obj.read(cr, uid, [id], context=context)[0] result['target'] = 'current' project_id = data.get('project_id') and data.get('project_id')[0] or False - result['context'] = {"search_default_project_id":project_id, "default_project_id":project_id, "search_default_responsible_id":uid, "search_default_current": 1} + result['context'] = {"search_default_project_id":project_id, "default_project_id":project_id, "search_default_current": 1} return result project_compute_phases() -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_long_term/wizard/project_compute_phases_view.xml b/addons/project_long_term/wizard/project_compute_phases_view.xml index 69b7d94eabd..c70e46583a7 100644 --- a/addons/project_long_term/wizard/project_compute_phases_view.xml +++ b/addons/project_long_term/wizard/project_compute_phases_view.xml @@ -2,42 +2,42 @@ <openerp> <data> - <record id="view_project_compute_phases_select" model="ir.ui.view"> + <record id="view_project_compute_phases_select" model="ir.ui.view"> <field name="name">Compute Scheduling of Phases</field> <field name="model">project.compute.phases</field> <field name="type">form</field> <field name="arch" type="xml"> - <form string="Compute Scheduling of Phases"> + <form string="Compute Scheduling of Phases"> <group colspan="4" col="4"> <separator colspan="4" string="Compute Scheduling of phases for all or specified project" /> <field name="target_project" colspan="4"/> - <field name="project_id" widget="selection" colspan="4" attrs="{'invisible':[('target_project','=','all')], 'required':[('target_project','!=','all')]}"/> + <field name="project_id" colspan="4" attrs="{'invisible':[('target_project','=','all')], 'required':[('target_project','!=','all')]}"/> <separator colspan="4"/> <group colspan="2" col="2"> </group> <group colspan="2" col="2"> <!-- Improve me --> - <button icon="gtk-cancel" special="cancel" string="_Cancel"/> - <button icon="gtk-ok" name="check_selection" string="C_ompute" type="object"/> + <button icon="gtk-cancel" special="cancel" string="_Cancel"/> + <button icon="gtk-ok" name="check_selection" string="C_ompute" type="object"/> </group> - </group> - </form> + </group> + </form> </field> - </record> + </record> - <record id="action_project_compute_phases" model="ir.actions.act_window"> - <field name="name">Compute Phase Scheduling</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">project.compute.phases</field> - <field name="view_type">form</field> - <field name="view_mode">form</field> - <field name="view_id" ref="view_project_compute_phases_select"/> - <field name="target">new</field> - <field name="help">To schedule phases of all or a specified project. It then open a gantt view. - </field> - </record> + <record id="action_project_compute_phases" model="ir.actions.act_window"> + <field name="name">Compute Phase Scheduling</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">project.compute.phases</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="view_id" ref="view_project_compute_phases_select"/> + <field name="target">new</field> + <field name="help">To schedule phases of all or a specified project. It then open a gantt view. + </field> + </record> - <menuitem id="menu_compute_phase" name="Compute Phase Scheduling" - parent="menu_phase_schedule" action="action_project_compute_phases"/> + <menuitem id="menu_compute_phase" name="Compute Phase Scheduling" + parent="menu_phase_schedule" action="action_project_compute_phases"/> </data> </openerp> diff --git a/addons/project_long_term/wizard/project_compute_tasks.py b/addons/project_long_term/wizard/project_compute_tasks.py index a74cd07ddc6..24240f90a54 100644 --- a/addons/project_long_term/wizard/project_compute_tasks.py +++ b/addons/project_long_term/wizard/project_compute_tasks.py @@ -30,7 +30,7 @@ class project_compute_tasks(osv.osv_memory): def compute_date(self, cr, uid, ids, context=None): """ - Schedule the tasks according to resource available and priority. + Schedule the tasks according to users and priority. """ project_pool = self.pool.get('project.project') task_pool = self.pool.get('project.task') diff --git a/addons/project_long_term/wizard/project_compute_tasks_view.xml b/addons/project_long_term/wizard/project_compute_tasks_view.xml index e679110acdc..74ce7ab88e5 100644 --- a/addons/project_long_term/wizard/project_compute_tasks_view.xml +++ b/addons/project_long_term/wizard/project_compute_tasks_view.xml @@ -2,39 +2,39 @@ <openerp> <data> - <record id="view_project_compute_tasks" model="ir.ui.view"> + <record id="view_project_compute_tasks" model="ir.ui.view"> <field name="name">Compute Task Scheduling</field> <field name="model">project.compute.tasks</field> <field name="type">form</field> <field name="arch" type="xml"> - <form string="Compute Scheduling of Task"> - <group colspan="4"> - <separator colspan="4" string="Compute Scheduling of Task for specified project." /> - <field name="project_id" widget="selection" colspan="4"/> + <form string="Compute Scheduling of Task"> + <group colspan="4"> + <separator colspan="4" string="Compute Scheduling of Task for specified project." /> + <field name="project_id" colspan="4"/> <separator colspan="4"/> <group colspan="2" col="2"> </group> <group colspan="2" col="2"> <button icon="gtk-cancel" special="cancel" string="_Cancel"/> - <button icon="gtk-ok" name="compute_date" string="C_ompute" type="object"/> - </group> - </group> - </form> + <button icon="gtk-ok" name="compute_date" string="C_ompute" type="object"/> + </group> + </group> + </form> </field> - </record> + </record> - <record id="action_project_compute_tasks" model="ir.actions.act_window"> - <field name="name">Compute Task Scheduling</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">project.compute.tasks</field> - <field name="view_type">form</field> - <field name="view_mode">form</field> - <field name="view_id" ref="view_project_compute_tasks"/> - <field name="target">new</field> - </record> + <record id="action_project_compute_tasks" model="ir.actions.act_window"> + <field name="name">Compute Task Scheduling</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">project.compute.tasks</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="view_id" ref="view_project_compute_tasks"/> + <field name="target">new</field> + </record> - <menuitem id="menu_compute_tasks" name="Compute Task Scheduling" - parent="menu_phase_schedule" action="action_project_compute_tasks"/> + <menuitem id="menu_compute_tasks" name="Compute Task Scheduling" + parent="menu_phase_schedule" action="action_project_compute_tasks"/> </data> </openerp> diff --git a/addons/project_long_term/wizard/project_schedule_tasks.py b/addons/project_long_term/wizard/project_schedule_tasks.py deleted file mode 100644 index d446ef20183..00000000000 --- a/addons/project_long_term/wizard/project_schedule_tasks.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -from osv import fields, osv - -class project_schedule_task(osv.osv_memory): - _name = "project.schedule.tasks" - _description = 'project.schedule.tasks' - _columns = { - 'msg': fields.char('Message', size=64) - } - _defaults = { - 'msg': 'Task Scheduling Completed Successfully' - } - - def default_get(self, cr, uid, fields_list, context=None): - res = super(project_schedule_task, self).default_get(cr, uid, fields_list, context) - self.compute_date(cr, uid, context=context) - return res - - def compute_date(self, cr, uid, context=None): - """ - Schedule the tasks according to resource available and priority. - """ - phase_pool = self.pool.get('project.phase') - if context is None: - context = {} - if not 'active_id' in context: - return {'type': 'ir.actions.act_window_close'} - return phase_pool.schedule_tasks(cr, uid, [context['active_id']], context=context) -project_schedule_task() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_long_term/wizard/project_schedule_tasks_view.xml b/addons/project_long_term/wizard/project_schedule_tasks_view.xml deleted file mode 100644 index f8e2f2d828b..00000000000 --- a/addons/project_long_term/wizard/project_schedule_tasks_view.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <record id="view_project_schedule_tasks" model="ir.ui.view"> - <field name="name">Schedule Tasks</field> - <field name="model">project.schedule.tasks</field> - <field name="type">form</field> - <field name="arch" type="xml"> - <form string="Schedule Tasks"> - <group height="90" width="275"> - <label string="Task Scheduling completed successfully."/> - <group colspan="4" col="6"> - <button icon="gtk-ok" colspan="4" special="cancel" string="_Ok"/> - </group> - </group> - </form> - </field> - </record> - - <record id="action_project_schedule_tasks" model="ir.actions.act_window"> - <field name="name">Schedule Tasks</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">project.schedule.tasks</field> - <field name="view_type">form</field> - <field name="view_mode">form</field> - <field name="view_id" ref="view_project_schedule_tasks"/> - <field name="context">{'record_id': active_id}</field> - <field name="target">new</field> - </record> - - </data> -</openerp> |
