diff options
| author | apa-tiny <apa@tinyerp.com> | 2010-04-23 12:54:58 +0530 |
|---|---|---|
| committer | apa-tiny <apa@tinyerp.com> | 2010-04-23 12:54:58 +0530 |
| commit | 9eca155d8736eeb891e6f99ab1f2f5602d196de6 (patch) | |
| tree | b2b3c93bad9af40937684667537d2f4ad1367fbf /addons/project_long_term/wizard | |
| parent | 301178bb8accb229596b5433ba22f43fedafe51b (diff) | |
| parent | 5e9e4eaadb71c1f3c5d7617731bf266f0fb289dd (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__.py | 8 | ||||
| -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.xml | 39 | ||||
| -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.xml | 35 | ||||
| -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.xml | 31 |
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 |
