summaryrefslogtreecommitdiff
path: root/addons/project_long_term/wizard
diff options
context:
space:
mode:
authorapa-tiny <apa@tinyerp.com>2010-04-23 12:54:58 +0530
committerapa-tiny <apa@tinyerp.com>2010-04-23 12:54:58 +0530
commit9eca155d8736eeb891e6f99ab1f2f5602d196de6 (patch)
treeb2b3c93bad9af40937684667537d2f4ad1367fbf /addons/project_long_term/wizard
parent301178bb8accb229596b5433ba22f43fedafe51b (diff)
parent5e9e4eaadb71c1f3c5d7617731bf266f0fb289dd (diff)
merge
bzr revid: apa@tinyerp.com-20100423072458-vdbjxq9wmd1s4l5x
Diffstat (limited to 'addons/project_long_term/wizard')
-rw-r--r--addons/project_long_term/wizard/__init__.py8
-rw-r--r--addons/project_long_term/wizard/project_compute_phases.py (renamed from addons/project_long_term/wizard/compute_phases_date.py)86
-rw-r--r--addons/project_long_term/wizard/project_compute_phases_view.xml39
-rw-r--r--addons/project_long_term/wizard/project_compute_tasks.py (renamed from addons/project_long_term/wizard/compute_tasks_date.py)63
-rw-r--r--addons/project_long_term/wizard/project_compute_tasks_view.xml35
-rw-r--r--addons/project_long_term/wizard/project_schedule_tasks.py (renamed from addons/project_long_term/wizard/schedule_tasks.py)61
-rw-r--r--addons/project_long_term/wizard/project_schedule_tasks_view.xml31
7 files changed, 211 insertions, 112 deletions
diff --git a/addons/project_long_term/wizard/__init__.py b/addons/project_long_term/wizard/__init__.py
index 06880dbe6e2..fb8a29449f7 100644
--- a/addons/project_long_term/wizard/__init__.py
+++ b/addons/project_long_term/wizard/__init__.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-s
##############################################################################
#
# OpenERP, Open Source Management Solution
@@ -19,9 +19,9 @@
#
##############################################################################
-import compute_phases_date
-import compute_tasks_date
-import schedule_tasks
+import project_compute_phases
+import project_compute_tasks
+import project_schedule_tasks
import working_calendar
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_long_term/wizard/compute_phases_date.py b/addons/project_long_term/wizard/project_compute_phases.py
index 61f3bb42251..ddf8ba315c0 100644
--- a/addons/project_long_term/wizard/compute_phases_date.py
+++ b/addons/project_long_term/wizard/project_compute_phases.py
@@ -22,26 +22,32 @@ import datetime
from resource.faces import *
from new import classobj
-import wizard
-import pooler
from tools.translate import _
+from osv import fields, osv
import working_calendar as wkcal
-compute_form = """<?xml version="1.0" ?>
-<form string="Compute Scheduling of Phases">
+class project_compute_phases(osv.osv_memory):
- <field name="project_id" colspan="4"/>
+ _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),
-</form>"""
+ 'project_id': fields.many2one('project.project', 'Project')
+ }
-compute_fields = {
- 'project_id': {'string':'Project', 'type':'many2one', 'relation':'project.project', 'help': 'If you do not specify project then it will take All projects with state=draft, open, pending'},
+ _defaults = {
+ 'target_project': 'all'
+ }
-}
+ def check_selection(self, cr, uid, ids, context=None):
+ data_select = self.read(cr, uid, ids, ['target_project'])[0]
+ return self.compute_date(cr, uid, ids, context=context)
-class wizard_compute_phases(wizard.interface):
- def _phase_schedule(self, cr, uid, phase, start_date, calendar_id=False, context={}):
+ def _phase_schedule(self, cr, uid, phase, start_date, calendar_id=False, context=None):
"""Schedule phase with the start date till all the next phases are completed.
@@ -49,11 +55,13 @@ class wizard_compute_phases(wizard.interface):
calendar_id -- working calendar of the project
"""
- pool = pooler.get_pool(cr.dbname)
- phase_obj = pool.get('project.phase')
- resource_obj = pool.get('resource.resource')
- uom_obj = pool.get('product.uom')
+ phase_obj = self.pool.get('project.phase')
+ resource_obj = self.pool.get('resource.resource')
+ uom_obj = self.pool.get('product.uom')
phase_resource_obj = False
+
+ if context is None:
+ context = {}
if phase:
leaves = []
time_efficiency = 1.0
@@ -117,15 +125,20 @@ class wizard_compute_phases(wizard.interface):
else:
continue
- def _compute_date(self, cr, uid, data, context={}):
+ def compute_date(self, cr, uid, ids, context=None):
"""
Compute the phases for scheduling.
"""
- pool = pooler.get_pool(cr.dbname)
- project_obj = pool.get('project.project')
- phase_obj = pool.get('project.phase')
- if data['form']['project_id']: # If project mentioned find its phases
- project_id = project_obj.browse(cr, uid, data['form']['project_id'], context=context)
+
+ if context is None:
+ context = {}
+ project_obj = self.pool.get('project.project')
+ phase_obj = self.pool.get('project.phase')
+ 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'))
+ if data['project_id']: # If project mentioned find its phases
+ project_id = project_obj.browse(cr, uid, data['project_id'], context=context)
phase_ids = phase_obj.search(cr, uid, [('project_id', '=', project_id.id),
('state', 'in', ['draft', 'open', 'pending']),
('previous_phase_ids', '=', False)
@@ -143,37 +156,24 @@ class wizard_compute_phases(wizard.interface):
start_dt = datetime.datetime.strftime((datetime.datetime.strptime(start_date, "%Y-%m-%d")), "%Y-%m-%d %H:%M")
calendar_id = phase.project_id.resource_calendar_id and phase.project_id.resource_calendar_id.id or False
self._phase_schedule(cr, uid, phase, start_dt, calendar_id, context=context)
- return {}
+ return self._open_phases_list(cr, uid, data, context=context)
- def _open_phases_list(self, cr, uid, data, context):
+ def _open_phases_list(self, cr, uid, data, context=None):
"""
Return the scheduled phases list.
"""
- pool = pooler.get_pool(cr.dbname)
- mod_obj = pool.get('ir.model.data')
- act_obj = pool.get('ir.actions.act_window')
+ 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_long_term', 'act_project_phase')
id = mod_obj.read(cr, uid, [result], ['res_id'])[0]['res_id']
result = act_obj.read(cr, uid, [id], context=context)[0]
result['domain'] = [('state', 'not in', ['cancelled','done'])]
- if data['form']['project_id']:
- result['domain'] = [('project_id', '=', data['form']['project_id']),
+ if data['project_id']:
+ result['domain'] = [('project_id', '=', data['project_id']),
('state', 'not in', ['cancelled','done'])]
return result
- states = {
- 'init': {
- 'actions': [],
- 'result': {'type': 'form', 'arch': compute_form, 'fields': compute_fields, 'state':[
- ('end', 'Cancel', 'gtk-cancel'),
- ('compute', 'Compute', 'gtk-ok', True)
-
- ]},
- },
- 'compute': {
- 'actions': [_compute_date],
- 'result': {'type': 'action', 'action': _open_phases_list, 'state': 'end'},
- },
- }
-wizard_compute_phases('wizard.compute.phases')
+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
new file mode 100644
index 00000000000..900112ba409
--- /dev/null
+++ b/addons/project_long_term/wizard/project_compute_phases_view.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <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">
+ <field name="target_project" />
+ <newline />
+ <group colspan="4" col="6" attrs="{'invisible':[('target_project','=','all')]}">
+ <field name="project_id"/>
+ </group>
+ <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>
+ </form>
+ </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="context">{'record_id' : active_id}</field>
+ <field name="target">new</field>
+ </record>
+
+ <menuitem id="menu_compute_phase" name="Compute Phase Scheduling"
+ parent="base.menu_pm_planning" action="action_project_compute_phases"/>
+
+ </data>
+</openerp> \ No newline at end of file
diff --git a/addons/project_long_term/wizard/compute_tasks_date.py b/addons/project_long_term/wizard/project_compute_tasks.py
index 77e7bbd6512..90d2b428580 100644
--- a/addons/project_long_term/wizard/compute_tasks_date.py
+++ b/addons/project_long_term/wizard/project_compute_tasks.py
@@ -23,38 +23,32 @@ from resource.faces import *
from new import classobj
import operator
-import working_calendar as wkcal
-
-import wizard
-import pooler
from tools.translate import _
+from osv import osv, fields
-compute_form = """<?xml version="1.0" ?>
-<form string="Compute Scheduling of Tasks">
- <field name="project_id" colspan="4"/>
-</form>"""
-
-success_msg = """<?xml version="1.0" ?>
-<form string="Compute Scheduling of Tasks">
- <label string="Task Scheduling completed successfully."/>
-</form>"""
-
-compute_fields = {
- 'project_id': {'string':'Project', 'type':'many2one', 'relation':'project.project', 'required':True},
-}
+import working_calendar as wkcal
-class wizard_compute_tasks(wizard.interface):
+class project_compute_tasks(osv.osv_memory):
+ _name = 'project.compute.tasks'
+ _description = 'Project Compute Tasks'
+ _columns = {
+ 'project_id': fields.many2one('project.project', 'Project', required=True)
+ }
- def _compute_date(self, cr, uid, data, context):
+ def compute_date(self, cr, uid, ids, context=None):
"""
Schedule the tasks according to resource available and priority.
"""
- pool = pooler.get_pool(cr.dbname)
- project_obj = pool.get('project.project')
- task_pool = pool.get('project.task')
- resource_obj = pool.get('resource.resource')
- user_obj = pool.get('res.users')
- project_id = data['form']['project_id']
+ project_obj = 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 = {}
+
+ 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'])
@@ -106,7 +100,7 @@ class wizard_compute_tasks(wizard.interface):
try:
resource = reduce(operator.or_, resources)
except:
- raise wizard.except_wizard(_('Error'), _('Project must have members assigned !'))
+ 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)
@@ -142,20 +136,7 @@ class wizard_compute_tasks(wizard.interface):
'user_id': user_id[0]},
context=ctx)
loop_no +=1
- return {}
+ return {} #improve me => Task Scheduling completed successfully => give this msg at end of wizard
- states = {
- 'init': {
- 'actions': [],
- 'result': {'type': 'form', 'arch': compute_form, 'fields': compute_fields, 'state': [
- ('end', 'Cancel', 'gtk-cancel'),
- ('compute', 'Compute', 'gtk-ok', True)
- ]},
- },
- 'compute': {
- 'actions': [_compute_date],
- 'result': {'type': 'form','arch': success_msg,'fields': {}, 'state': [('end', 'Ok')]},
- }
- }
-wizard_compute_tasks('wizard.compute.tasks')
+project_compute_tasks()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file
diff --git a/addons/project_long_term/wizard/project_compute_tasks_view.xml b/addons/project_long_term/wizard/project_compute_tasks_view.xml
new file mode 100644
index 00000000000..3b03f20fe1e
--- /dev/null
+++ b/addons/project_long_term/wizard/project_compute_tasks_view.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <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 Phases">
+ <field name="project_id"/>
+ <group colspan="4" col="6">
+ <button icon="gtk-cancel" special="cancel" string="_Cancel"/>
+ <button icon="gtk-ok" name="compute_date" string="Compute" type="object"/>
+ </group>
+ </form>
+ </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="context">{'record_id' : active_id}</field>
+ <field name="target">new</field>
+ </record>
+
+ <menuitem id="menu_compute_tasks" name="Compute Task Scheduling"
+ parent="base.menu_pm_planning" action="action_project_compute_tasks"/>
+
+ </data>
+</openerp> \ No newline at end of file
diff --git a/addons/project_long_term/wizard/schedule_tasks.py b/addons/project_long_term/wizard/project_schedule_tasks.py
index 4a170859032..2d0071547be 100644
--- a/addons/project_long_term/wizard/schedule_tasks.py
+++ b/addons/project_long_term/wizard/project_schedule_tasks.py
@@ -23,24 +23,36 @@ from resource.faces import *
from new import classobj
import operator
+from tools.translate import _
+from osv import osv, fields
+
import working_calendar as wkcal
-import wizard
-import pooler
-from tools.translate import _
+class project_schedule_task(osv.osv_memory):
-success_msg = """<?xml version="1.0" ?>
-<form string="Compute Scheduling of Tasks">
- <label string="Task Scheduling completed successfully."/>
-</form>"""
+ _name = "project.schedule.tasks"
+ _description = 'project.schedule.tasks'
+ _columns = {
+ 'msg': fields.char('Message', size=64)
+ }
+ _defaults = {
+ 'msg': 'Task Scheduling Completed Successfully'
+ }
-class wizard_schedule_task(wizard.interface):
+ 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 _create_resources(self, cr, uid, phase, context={}):
+ def create_resources(self, cr, uid, phase, context=None):
"""
Return a list of Resource Class objects for the resources allocated to the phase.
"""
resource_objs = []
+
+ if context is None:
+ context = {}
+
for resource in phase.resource_ids:
res = resource.resource_id
leaves = []
@@ -57,15 +69,21 @@ class wizard_schedule_task(wizard.interface):
}))
return resource_objs
- def _compute_date(self, cr, uid, data, context={}):
+ def compute_date(self, cr, uid, context=None):
"""
Schedule the tasks according to resource available and priority.
"""
- pool = pooler.get_pool(cr.dbname)
- phase_obj = pool.get('project.phase')
- task_obj = pool.get('project.task')
- user_obj = pool.get('res.users')
- phase = phase_obj.browse(cr, uid, data['id'], context=context)
+
+ phase_obj = self.pool.get('project.phase')
+ task_obj = self.pool.get('project.task')
+ user_obj = self.pool.get('res.users')
+
+ if context is None:
+ context = {}
+
+ if not 'active_id' in context:
+ return {}
+ phase = phase_obj.browse(cr, uid, context['active_id'], context=context)
task_ids = map(lambda x : x.id, (filter(lambda x : x.state in ['open', 'draft', 'pending'] , phase.task_ids)))
if task_ids:
task_ids.sort()
@@ -78,7 +96,7 @@ class wizard_schedule_task(wizard.interface):
start_date = phase.project_id.date_start
date_start = datetime.datetime.strftime(datetime.datetime.strptime(start_date, "%Y-%m-%d"), "%Y-%m-%d %H:%M")
calendar_id = phase.project_id.resource_calendar_id.id
- resources = self._create_resources(cr, uid, phase)
+ resources = self.create_resources(cr, uid, phase)
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=False):
@@ -101,7 +119,7 @@ class wizard_schedule_task(wizard.interface):
try:
resource = reduce(operator.or_, resources)
except:
- raise wizard.except_wizard(_('Error'), _('Phase must have resources assigned !'))
+ raise osv.except_osv(_('Error'), _('Phase must have resources assigned !'))
minimum_time_unit = 1
if calendar_id: # If project has working calendar
working_days = wkcal.compute_working_calendar(cr, uid, calendar_id)
@@ -136,11 +154,6 @@ class wizard_schedule_task(wizard.interface):
context=ctx)
loop_no +=1
return {}
- states = {
- 'init': {
- 'actions': [_compute_date],
- 'result': {'type':'form','arch':success_msg,'fields':{}, 'state':[('end', 'Ok', 'gtk-ok', True)]},
- }
- }
-wizard_schedule_task('phase.schedule.tasks')
+
+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
new file mode 100644
index 00000000000..1011f366aa5
--- /dev/null
+++ b/addons/project_long_term/wizard/project_schedule_tasks_view.xml
@@ -0,0 +1,31 @@
+<?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">
+ <label string="Task Scheduling completed successfully."/>
+ <group colspan="4" col="6">
+ <button icon="gtk-ok" colspan="4" special="cancel" string="_Ok"/>
+ </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> \ No newline at end of file