From 62a08860f4bcc9489dd678e7741f6bb16203dcf1 Mon Sep 17 00:00:00 2001 From: jam-openerp Date: Thu, 20 Jan 2011 11:16:30 +0530 Subject: [IMP] project_long_term : Resource allocation Scheduling Warning Message Improved bzr revid: jam@tinyerp.com-20110120054630-5iat436nbtuj9p62 --- addons/project_long_term/project_long_term.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'addons/project_long_term/project_long_term.py') diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index 0e605ed4331..f8b91a200b5 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -368,7 +368,7 @@ def Phase_%d(): try: phase = Task.BalancedProject(Phase) except : - raise osv.except_osv(_('Error !'),_('Phase Scheduling is not possible.\nProject should have the Start date and member for scheduling.')) + raise osv.except_osv(_('Error !'),_('Invalid Project Members.\nPhase Scheduling is not possible.')) for task_id in task_ids: @@ -515,7 +515,7 @@ def Project_%d(): try: project = Task.BalancedProject(Project) except : - raise osv.except_osv(_('Error !'),_('Phase Scheduling is not possible.\nProject should have the Start date and member for scheduling.')) + raise osv.except_osv(_('Error !'),_('Invalid Project Members.\nPhase Scheduling is not possible.')) for phase_id in phase_ids: act_phase = phase_pool.browse(cr, uid, phase_id, context=context) -- cgit v1.2.3 From e286c21c27c303a45fbcf5eaf7a42effed71d0a1 Mon Sep 17 00:00:00 2001 From: jam-openerp Date: Thu, 20 Jan 2011 12:43:22 +0530 Subject: [IMP] project_long_term : Added new warning for the Phase Scheduling when invalid resource allocation done by user bzr revid: jam@tinyerp.com-20110120071322-b638ot2x2cth9lam --- addons/project_long_term/project_long_term.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'addons/project_long_term/project_long_term.py') diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index f8b91a200b5..ecc47a50f9d 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -444,6 +444,26 @@ class project(osv.osv): data_pool = self.pool.get('ir.model.data') resource_allocation_pool = self.pool.get('project.resource.allocation') data_model, day_uom_id = data_pool.get_object_reference(cr, uid, 'product', 'uom_day') + + #Checking the Valid Phase resource allocation from project member + for project in self.browse(cr, uid, ids, context=context): + flag = False + res_msg = '' + memebrs_ids = [] + resource_user_ids = [] + if project.members: + memebrs_ids = [use.id for use in project.members] + phase_ids = phase_pool.search(cr, uid, [('project_id', '=', project.id)], context=context) + if phase_ids: + for phase in phase_pool.browse(cr, uid, phase_ids, context=context): + if phase.resource_ids: + res_ids = [ re.id for re in phase.resource_ids] + for res in resource_allocation_pool.browse(cr, uid,res_ids, context=context): + if res.resource_id.user_id.id not in memebrs_ids: + res_msg += " '%s' %s , "%(res.resource_id.name,res.resource_id.user_id.name) + flag = True + if flag: + raise osv.except_osv(_('Warning !'),_("Resource %s is/are not Members of the Project '%s' .")%(res_msg[:-3], project.name)) for project in self.browse(cr, uid, ids, context=context): root_phase_ids = phase_pool.search(cr, uid, [('project_id', '=', project.id), -- cgit v1.2.3 From 21f2b42e92e2661b43c1770c954003967353e110 Mon Sep 17 00:00:00 2001 From: jam-openerp Date: Thu, 20 Jan 2011 14:23:36 +0530 Subject: [IMP] project_long_term : adding logger for Scheduling Traceback bzr revid: jam@tinyerp.com-20110120085336-wsqwuctt3g0tcnkn --- addons/project_long_term/project_long_term.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'addons/project_long_term/project_long_term.py') diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index ecc47a50f9d..af2e5f76f37 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -23,6 +23,7 @@ from datetime import datetime from tools.translate import _ from osv import fields, osv from resource.faces import task as Task +import logging class project_phase(osv.osv): _name = "project.phase" @@ -360,17 +361,18 @@ def Phase_%d(): parent = task task_ids.append(task.id) func_str += cls_str - + phase_id = phase.id # Allocating Memory for the required Project and Pahses and Resources exec(func_str) Phase = eval('Phase_%d' % phase.id) phase = None try: phase = Task.BalancedProject(Phase) - except : - raise osv.except_osv(_('Error !'),_('Invalid Project Members.\nPhase Scheduling is not possible.')) - - + except Exception, e: + import traceback + logging.getLogger('project').warning("Error on sheduling tasks of phase#%s: %s \n%s",phase_id, str(e), traceback.format_exc()) + raise osv.except_osv(_('Error !'),_('Sorry, Phase Scheduling is not possible due to some errors. Please check traceback in server log for more.')) + for task_id in task_ids: task = eval("phase.Task_%d" % task_id) start_date = task.start.to_datetime() @@ -528,14 +530,17 @@ def Project_%d(): func_str += phases phase_ids += child_phase_ids + project_id = project.id # Allocating Memory for the required Project and Pahses and Resources exec(func_str) Project = eval('Project_%d' % project.id) project = None try: project = Task.BalancedProject(Project) - except : - raise osv.except_osv(_('Error !'),_('Invalid Project Members.\nPhase Scheduling is not possible.')) + except Exception, e: + import traceback + logging.getLogger('project').warning("Error on sheduling phases of project#%s: %s \n%s", project_id, str(e), traceback.format_exc()) + raise osv.except_osv(_('Error !'),_('Sorry, Phase Scheduling is not possible due to some errors. Please check traceback in server log for more.')) for phase_id in phase_ids: act_phase = phase_pool.browse(cr, uid, phase_id, context=context) @@ -667,7 +672,7 @@ def Project_%d(): try: project = Task.BalancedProject(Project) except : - raise osv.except_osv(_('Error !'),_('Phase Scheduling is not possible.\nProject should have the Start date and member for scheduling.')) + raise osv.except_osv(_('Error !'),_('Task Scheduling is not possible.\nProject should have the Start date for scheduling.')) for task_id in task_ids: task = eval("project.Task_%d" % task_id) -- cgit v1.2.3 From 24c9a08a786c22b7d2619aaaad9063011e8348e6 Mon Sep 17 00:00:00 2001 From: "Sbh (OpenERP)" Date: Thu, 20 Jan 2011 15:21:32 +0530 Subject: [FIX] project_long_term: fix buildbox warning bzr revid: sbh@tinyerp.com-20110120095132-lalsmnj9bovu46tn --- addons/project_long_term/project_long_term.py | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/project_long_term/project_long_term.py') diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index af2e5f76f37..982230ffd09 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -452,7 +452,6 @@ class project(osv.osv): flag = False res_msg = '' memebrs_ids = [] - resource_user_ids = [] if project.members: memebrs_ids = [use.id for use in project.members] phase_ids = phase_pool.search(cr, uid, [('project_id', '=', project.id)], context=context) -- cgit v1.2.3 From 523f5c1f2a706ae9088461e08c6034dcb6477c35 Mon Sep 17 00:00:00 2001 From: "qdp-launchpad@tinyerp.com" <> Date: Thu, 20 Jan 2011 16:53:11 +0100 Subject: [IMP][REF] project_long_term: better error messages handling (displayed client-side) and refactored constraint on project member bzr revid: qdp-launchpad@tinyerp.com-20110120155311-94cd3hnt8wd0zlnp --- addons/project_long_term/project_long_term.py | 63 +++++++++++++++++---------- 1 file changed, 40 insertions(+), 23 deletions(-) (limited to 'addons/project_long_term/project_long_term.py') diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index 982230ffd09..ddb17d44bee 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -362,6 +362,9 @@ def Phase_%d(): task_ids.append(task.id) func_str += cls_str phase_id = phase.id + #check known constraints before running Face algorithm in order to have the error translated + if not phase.project_id.date_start: + raise osv.except_osv(_('Error !'),_('Task Scheduling is not possible.\nProject should have the Start date for scheduling.')) # Allocating Memory for the required Project and Pahses and Resources exec(func_str) Phase = eval('Phase_%d' % phase.id) @@ -369,9 +372,7 @@ def Phase_%d(): try: phase = Task.BalancedProject(Phase) except Exception, e: - import traceback - logging.getLogger('project').warning("Error on sheduling tasks of phase#%s: %s \n%s",phase_id, str(e), traceback.format_exc()) - raise osv.except_osv(_('Error !'),_('Sorry, Phase Scheduling is not possible due to some errors. Please check traceback in server log for more.')) + raise osv.except_osv(_('Error !'),e) for task_id in task_ids: task = eval("phase.Task_%d" % task_id) @@ -450,21 +451,19 @@ class project(osv.osv): #Checking the Valid Phase resource allocation from project member for project in self.browse(cr, uid, ids, context=context): flag = False - res_msg = '' - memebrs_ids = [] + res_missing = [] + members_ids = [] if project.members: - memebrs_ids = [use.id for use in project.members] - phase_ids = phase_pool.search(cr, uid, [('project_id', '=', project.id)], context=context) - if phase_ids: - for phase in phase_pool.browse(cr, uid, phase_ids, context=context): - if phase.resource_ids: - res_ids = [ re.id for re in phase.resource_ids] - for res in resource_allocation_pool.browse(cr, uid,res_ids, context=context): - if res.resource_id.user_id.id not in memebrs_ids: - res_msg += " '%s' %s , "%(res.resource_id.name,res.resource_id.user_id.name) - flag = True + members_ids = [user.id for user in project.members] + for phase in project.phase_ids: + if phase.resource_ids: + res_ids = [ re.id for re in phase.resource_ids] + for res in resource_allocation_pool.browse(cr, uid, res_ids, context=context): + if res.resource_id.user_id.id not in members_ids: + res_missing += [res.resource_id.name] + flag = True if flag: - raise osv.except_osv(_('Warning !'),_("Resource %s is/are not Members of the Project '%s' .")%(res_msg[:-3], project.name)) + raise osv.except_osv(_('Warning !'),_("Resource(s) %s is(are) not member(s) of the project '%s' .") % (",".join(res_missing), project.name)) for project in self.browse(cr, uid, ids, context=context): root_phase_ids = phase_pool.search(cr, uid, [('project_id', '=', project.id), @@ -530,16 +529,16 @@ def Project_%d(): phase_ids += child_phase_ids project_id = project.id - # Allocating Memory for the required Project and Pahses and Resources + if not project.date_start: + raise osv.except_osv(_('Error !'),_('Task Scheduling is not possible.\nProject should have the Start date for scheduling.')) + # Allocating Memory for the required Project and Phases and Resources exec(func_str) Project = eval('Project_%d' % project.id) project = None try: project = Task.BalancedProject(Project) except Exception, e: - import traceback - logging.getLogger('project').warning("Error on sheduling phases of project#%s: %s \n%s", project_id, str(e), traceback.format_exc()) - raise osv.except_osv(_('Error !'),_('Sorry, Phase Scheduling is not possible due to some errors. Please check traceback in server log for more.')) + raise osv.except_osv(_('Error !'), e) for phase_id in phase_ids: act_phase = phase_pool.browse(cr, uid, phase_id, context=context) @@ -600,6 +599,22 @@ def Project_%d(): for project in self.browse(cr, uid, ids, context=context): calendar_id = project.resource_calendar_id and project.resource_calendar_id.id or False start_date = project.date_start + + #Checking the Valid Phase resource allocation from project member + flag = False + res_missing = [] + members_ids = [] + if project.members: + members_ids = [user.id for user in project.members] + for phase in project.phase_ids: + if phase.resource_ids: + res_ids = [ re.id for re in phase.resource_ids] + for res in self.pool.get('project.resource.allocation').browse(cr, uid, res_ids, context=context): + if res.resource_id.user_id.id not in members_ids: + res_missing += [res.resource_id.name] + flag = True + if flag: + raise osv.except_osv(_('Warning !'),_("Resource(s) %s is(are) not member(s) of the project '%s' .") % (",".join(res_missing), project.name)) #Creating resources using the member of the Project u_ids = [i.id for i in project.members] resource_objs = resource_pool.generate_resources(cr, uid, u_ids, calendar_id, context=context) @@ -664,14 +679,16 @@ def Project_%d(): task_ids.append(task.id) func_str += cls_str - # Allocating Memory for the required Project and Pahses and Resources + if not project.date_start:# or not project.members: + raise osv.except_osv(_('Error !'),_('Task Scheduling is not possible.\nProject should have the Start date for scheduling.')) + # Allocating Memory for the required Project and Phases and Resources exec(func_str) Project = eval('Project_%d' % project.id) project = None try: project = Task.BalancedProject(Project) - except : - raise osv.except_osv(_('Error !'),_('Task Scheduling is not possible.\nProject should have the Start date for scheduling.')) + except Exception, e: + raise osv.except_osv(_('Error !'), e) for task_id in task_ids: task = eval("project.Task_%d" % task_id) -- cgit v1.2.3 From a795f5d5168f30072210f3827447d92c893b64f2 Mon Sep 17 00:00:00 2001 From: "qdp-launchpad@tinyerp.com" <> Date: Thu, 20 Jan 2011 18:17:26 +0100 Subject: [REF] project_long_term/project_long_term.py: removed unused import statement bzr revid: qdp-launchpad@tinyerp.com-20110120171726-xsx7n2982z1e33so --- addons/project_long_term/project_long_term.py | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/project_long_term/project_long_term.py') diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index ddb17d44bee..c2bc55db212 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -23,7 +23,6 @@ from datetime import datetime from tools.translate import _ from osv import fields, osv from resource.faces import task as Task -import logging class project_phase(osv.osv): _name = "project.phase" -- cgit v1.2.3