From d06bd52c367e44b889831c3b705d27b190790e6c Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Wed, 3 Dec 2008 11:44:19 +0100 Subject: [PATCH 1/4] [IMP] Add maintenance.contract.module to store the modules in the maintenance contract [IMP] Use a fields.many2many instead of a fields.text for the module list in the maintenance.contract bzr revid: stephane@tinyerp.com-20081203104419-64mrmq6qmjhv553k --- bin/addons/base/maintenance/maintenance.py | 34 +++++++++++++++---- .../base/maintenance/maintenance_view.xml | 7 +++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/bin/addons/base/maintenance/maintenance.py b/bin/addons/base/maintenance/maintenance.py index 8550fd02d02..71369190c8e 100644 --- a/bin/addons/base/maintenance/maintenance.py +++ b/bin/addons/base/maintenance/maintenance.py @@ -37,6 +37,16 @@ from pprint import pprint as pp from tools import config import xmlrpclib +class maintenance_contract_module(osv.osv): + _name ="maintenance.contract.module" + _description = "maintenance contract modules" + _columns = { + 'name' : fields.char('Name', size=128, required=True), + 'version': fields.char('Version', size=64,), + } + +maintenance_contract_module() + class maintenance_contract(osv.osv): _name = "maintenance.contract" _description = "Maintenance Contract" @@ -45,7 +55,7 @@ class maintenance_contract(osv.osv): 'password' : fields.char('Password', size=64, invisible=True, required=True, readonly=True), 'date_start' : fields.date('Starting Date', readonly=True), 'date_stop' : fields.date('Ending Date', readonly=True), - 'modules': fields.text('Covered Modules') + 'module_ids' : fields.many2many('maintenance.contract.module', 'maintenance_contract_module_rel', 'contract_id', 'module_id', 'Covered Modules', readonly=True), } _defaults = { 'password' : lambda obj,cr,uid,context={} : '', @@ -78,20 +88,32 @@ class maintenance_contract_wizard(osv.osv_memory): rpc = xmlrpclib.ServerProxy('http://%s:%d/xmlrpc/common' % (remote_server, port)) ruid = rpc.login(remote_db, login, password) rpc = xmlrpclib.ServerProxy('http://%s:%d/xmlrpc/object' % (remote_server, port)) - res = rpc.execute(remote_db, ruid, password, + contract_info = rpc.execute(remote_db, ruid, password, 'maintenance.maintenance', 'get_module_for_contract', contract['name'], contract['password']) - if res: + if contract_info: + if contract_info['modules']: + module_ids = [] + for name, version in contract_info['modules']: + contract_module = self.pool.get('maintenance.contract.module') + res = contract_module.search(cr, uid, [('name', '=', name),('version', '=', version)]) + if not res: + id = contract_module.create(cr, uid, { 'name' : name, 'version' : version } ) + else: + id = res[0] + module_ids.append(id) + self.pool.get('maintenance.contract').create( cr, uid, { 'name' : contract['name'], 'password' : contract['password'], - 'date_start' : res['date_from'], - 'date_stop' : res['date_to'], + 'date_start' : contract_info['date_from'], + 'date_stop' : contract_info['date_to'], + 'module_ids' : [(6,0,module_ids)], } ) - return self.write(cr, uid, ids, {'state' : ('unvalidated', 'validated')[bool(res)] }, context=context) + return self.write(cr, uid, ids, {'state' : ('unvalidated', 'validated')[bool(contract_info)] }, context=context) maintenance_contract_wizard() diff --git a/bin/addons/base/maintenance/maintenance_view.xml b/bin/addons/base/maintenance/maintenance_view.xml index 31936ea54c4..fcef2e17911 100644 --- a/bin/addons/base/maintenance/maintenance_view.xml +++ b/bin/addons/base/maintenance/maintenance_view.xml @@ -26,7 +26,12 @@ - + + + + + + From 775ab9010cda074fdcef8a0a9c22d3a096d53498 Mon Sep 17 00:00:00 2001 From: Husen Daudi Date: Wed, 3 Dec 2008 19:08:20 +0530 Subject: [PATCH 2/4] bugfix for task work and remaining hours lp bug: https://launchpad.net/bugs/304410 fixed bzr revid: hda@tinyerp.com-20081203133820-fp0ca4k3qwk61jj2 --- addons/.project | 17 ----------------- addons/project/project.py | 24 +++++++++--------------- addons/project/project_demo.xml | 2 +- addons/project/project_view.xml | 5 +++-- 4 files changed, 13 insertions(+), 35 deletions(-) delete mode 100644 addons/.project diff --git a/addons/.project b/addons/.project deleted file mode 100644 index 6b6fa8f2cfc..00000000000 --- a/addons/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - openobject-addons - - - - - - org.python.pydev.PyDevBuilder - - - - - - org.python.pydev.pythonNature - - diff --git a/addons/project/project.py b/addons/project/project.py index b7ff8044707..c2337da7053 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -246,6 +246,15 @@ class task(osv.osv): #_sql_constraints = [ # ('remaining_hours', 'CHECK (remaining_hours>=0)', 'Please increase and review remaining hours ! It can not be smaller than 0.'), #] + + def _button_dummy(self, cr, uid, ids, context={}): + tot_work=0 + for obj in self.browse(cr,uid,ids): + for work in obj.work_ids: + tot_work+=work.hours + final_val = obj.planned_hours - tot_work + self.write(cr,uid,ids[0],{'remaining_hours':final_val}) + return True def copy(self, cr, uid, id, default={},context={}): default = default or {} @@ -408,23 +417,8 @@ class project_work(osv.osv): 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S') } _order = "date desc" - def create(self, cr, uid, vals, *args, **kwargs): - if 'task_id' in vals: - cr.execute('update project_task set remaining_hours=remaining_hours+%.2f where id=%d', (-vals.get('hours',0.0), vals['task_id'])) - return super(project_work,self).create(cr, uid, vals, *args, **kwargs) - def write(self, cr, uid, ids,vals,context={}): - for work in self.browse(cr, uid, ids, context): - cr.execute('update project_task set remaining_hours=remaining_hours+%.2f+(%.2f) where id=%d', (-vals.get('hours',0.0), work.hours, work.task_id.id)) - return super(project_work,self).write(cr, uid, ids, vals, context) - - def unlink(self, cr, uid, ids, *args, **kwargs): - for work in self.browse(cr, uid, ids): - cr.execute('update project_task set remaining_hours=remaining_hours+%.2f where id=%d', (work.hours, work.task_id.id)) - return super(project_work,self).unlink(cr, uid, ids,*args, **kwargs) project_work() - - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index 9a25d722689..ea6803bf302 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -89,7 +89,7 @@ Internal testing + Software Install - 2007-06-06 + 2008-06-06 17 diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 9b92f22c2cb..b2d31694d57 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -220,7 +220,8 @@ widget="float_time" on_change="onchange_planned(planned_hours,effective_hours)"/> - + +