summaryrefslogtreecommitdiff
path: root/addons/project_long_term/wizard
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2011-10-26 01:56:22 +0200
committerOlivier Dony <odo@openerp.com>2011-10-26 01:56:22 +0200
commita6d52f887bed3ea1a0ff187bf393103e858062ff (patch)
tree8379ac661b604e9ef8689718ad6558bd3b07f9d8 /addons/project_long_term/wizard
parent39904f481ad27984cb985e56083ab618f7dc109b (diff)
parent732aa1c881b28cbb63d320649adac09e31c55d05 (diff)
[MERGE] Complete refactoring of project_long_term by fp, 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: odo@openerp.com-20111025235622-js6dn30l9d1qwsgv
Diffstat (limited to 'addons/project_long_term/wizard')
-rw-r--r--addons/project_long_term/wizard/__init__.py1
-rw-r--r--addons/project_long_term/wizard/project_compute_phases.py23
-rw-r--r--addons/project_long_term/wizard/project_compute_phases_view.xml42
-rw-r--r--addons/project_long_term/wizard/project_compute_tasks.py2
-rw-r--r--addons/project_long_term/wizard/project_compute_tasks_view.xml42
-rw-r--r--addons/project_long_term/wizard/project_schedule_tasks.py51
-rw-r--r--addons/project_long_term/wizard/project_schedule_tasks_view.xml33
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>