From 0a29f542624685fa9c59b3bc39bac70f26cfcff6 Mon Sep 17 00:00:00 2001 From: Tristan Hill Date: Wed, 5 Jan 2011 09:23:48 +0000 Subject: [PATCH 01/75] [FIX] rollback transaction on exception to keep database in expected state bzr revid: tristan.hill@credativ.co.uk-20110105092348-l6354716s7yf7sup --- bin/addons/base/ir/ir_cron.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/addons/base/ir/ir_cron.py b/bin/addons/base/ir/ir_cron.py index e7b1a541f0c..55598f42825 100644 --- a/bin/addons/base/ir/ir_cron.py +++ b/bin/addons/base/ir/ir_cron.py @@ -90,6 +90,7 @@ class ir_cron(osv.osv, netsvc.Agent): try: f(cr, uid, *args) except Exception, e: + cr.rollback() self._logger.notifyChannel('timers', netsvc.LOG_ERROR, "Job call of self.pool.get('%s').%s(cr, uid, *%r) failed" % (model, func, args)) self._logger.notifyChannel('timers', netsvc.LOG_ERROR, tools.exception_to_unicode(e)) From aeae9be58fb55c1e68a6bed10208f771804c13ea Mon Sep 17 00:00:00 2001 From: Tristan Hill Date: Wed, 5 Jan 2011 09:26:06 +0000 Subject: [PATCH 02/75] [IMP] Log exception message in same error message as title. Log traceback when debugging. bzr revid: tristan.hill@credativ.co.uk-20110105092606-xt4z6r7cundidtg8 --- bin/addons/base/ir/ir_cron.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bin/addons/base/ir/ir_cron.py b/bin/addons/base/ir/ir_cron.py index 55598f42825..723139512fc 100644 --- a/bin/addons/base/ir/ir_cron.py +++ b/bin/addons/base/ir/ir_cron.py @@ -91,9 +91,10 @@ class ir_cron(osv.osv, netsvc.Agent): f(cr, uid, *args) except Exception, e: cr.rollback() - self._logger.notifyChannel('timers', netsvc.LOG_ERROR, "Job call of self.pool.get('%s').%s(cr, uid, *%r) failed" % (model, func, args)) - self._logger.notifyChannel('timers', netsvc.LOG_ERROR, tools.exception_to_unicode(e)) - + self._logger.notifyChannel('timers', netsvc.LOG_ERROR, + "Job call of self.pool.get('%s').%s(cr, uid, *%r) failed\n%s" % + (model, func, args, tools.exception_to_unicode(e))) + self._logger.notifyChannel('timers', netsvc.LOG_DEBUG, traceback.format_exc()) def _poolJobs(self, db_name, check=False): try: From 0319803c530ef0d42845e947be6c9510a70636d1 Mon Sep 17 00:00:00 2001 From: Tristan Hill Date: Wed, 5 Jan 2011 09:34:26 +0000 Subject: [PATCH 03/75] [FIX] add missing import for previous commit bzr revid: tristan.hill@credativ.co.uk-20110105093426-oel96wxnzdpmd14c --- bin/addons/base/ir/ir_cron.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/addons/base/ir/ir_cron.py b/bin/addons/base/ir/ir_cron.py index 723139512fc..98275b9ba13 100644 --- a/bin/addons/base/ir/ir_cron.py +++ b/bin/addons/base/ir/ir_cron.py @@ -20,6 +20,7 @@ ############################################################################## import time +import traceback from datetime import datetime from dateutil.relativedelta import relativedelta import netsvc From 0849ba9d6fc5df0f8eea002c6a4ac2c09a0a19ac Mon Sep 17 00:00:00 2001 From: Jacques-Etienne Baudoux Date: Wed, 5 Jan 2011 15:07:08 +0100 Subject: [PATCH 04/75] [ADD] ir.model : list of modules in which the object is defined [ADD] ir.model.fields : list of modules in which the field is defined [IMP] ir.model : aligned field form view with ir.model.fields [ADD] ir.model : list of views [ADD] ir.model : report "Model Overview" bzr revid: jba@openerp.com-20110105140708-qrby7d6trhjw7vs5 --- bin/addons/base/__openerp__.py | 1 + bin/addons/base/ir/ir.xml | 20 ++++++++-------- bin/addons/base/ir/ir_model.py | 24 +++++++++++++++++++- bin/addons/base/ir/report/ir_report.xml | 16 +++++++++++++ bin/addons/base/ir/report/modeloverview.sxw | Bin 0 -> 17797 bytes 5 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 bin/addons/base/ir/report/ir_report.xml create mode 100644 bin/addons/base/ir/report/modeloverview.sxw diff --git a/bin/addons/base/__openerp__.py b/bin/addons/base/__openerp__.py index bb419fc90d3..e15dabc42e7 100644 --- a/bin/addons/base/__openerp__.py +++ b/bin/addons/base/__openerp__.py @@ -43,6 +43,7 @@ 'ir/wizard/wizard_menu_view.xml', 'ir/ir.xml', 'ir/workflow/workflow_view.xml', + 'ir/report/ir_report.xml', 'module/module_view.xml', 'module/module_data.xml', 'module/module_report.xml', diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml index 29a836892b5..e944747cfd3 100644 --- a/bin/addons/base/ir/ir.xml +++ b/bin/addons/base/ir/ir.xml @@ -967,6 +967,7 @@ + @@ -981,29 +982,26 @@
- - - - + + + + - - - - + @@ -1032,6 +1030,9 @@ + + + @@ -1094,7 +1095,7 @@ - + @@ -1113,6 +1114,7 @@ + diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index 4dfe39a7762..ed43ce824a3 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -63,6 +63,18 @@ class ir_model(osv.osv): is_osv_mem = self._is_osv_memory(cr, uid, all_model_ids, 'osv_memory', arg=None, context=context) return [('id', 'in', [id for id in is_osv_mem if bool(is_osv_mem[id]) == value])] + def _in_modules(self, cr, uid, ids, field_name, arg, context=None): + res = osv.osv.get_xml_ids(self, cr, uid, ids) + for k,v in res.iteritems(): + res[k]=', '.join(map(lambda x: x.split('.')[0],v)) + return res + + def _view_ids(self, cr, uid, ids, field_name, arg, context=None): + models=self.browse(cr,uid,ids) + res={} + for model in models: + res[model.id]=self.pool.get("ir.ui.view").search(cr, uid, [('model', '=', model.name)]) + return res _columns = { 'name': fields.char('Object Name', size=64, translate=True, required=True), @@ -73,7 +85,9 @@ class ir_model(osv.osv): 'access_ids': fields.one2many('ir.model.access', 'model_id', 'Access'), 'osv_memory': fields.function(_is_osv_memory, method=True, string='In-memory model', type='boolean', fnct_search=_search_osv_memory, - help="Indicates whether this object model lives in memory only, i.e. is not persisted (osv.osv_memory)") + help="Indicates whether this object model lives in memory only, i.e. is not persisted (osv.osv_memory)"), + 'modules': fields.function(_in_modules, method=True, type='char', size=128, string='In modules', help='List of modules in which the object is defined'), + 'view_ids': fields.function(_view_ids, method=True, type='one2many', obj='ir.ui.view', string='Views'), } _defaults = { @@ -150,6 +164,13 @@ ir_model() class ir_model_fields(osv.osv): _name = 'ir.model.fields' _description = "Fields" + + def _in_modules(self, cr, uid, ids, field_name, arg, context=None): + res = osv.osv.get_xml_ids(self, cr, uid, ids) + for k,v in res.iteritems(): + res[k]=', '.join(map(lambda x: x.split('.')[0],v)) + return res + _columns = { 'name': fields.char('Name', required=True, size=64, select=1), 'model': fields.char('Object Name', size=64, required=True, select=1), @@ -170,6 +191,7 @@ class ir_model_fields(osv.osv): 'groups': fields.many2many('res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id', 'Groups'), 'view_load': fields.boolean('View Auto-Load'), 'selectable': fields.boolean('Selectable'), + 'modules': fields.function(_in_modules, method=True, type='char', size=128, string='In modules', help='List of modules in which the field is defined'), } _rec_name='field_description' _defaults = { diff --git a/bin/addons/base/ir/report/ir_report.xml b/bin/addons/base/ir/report/ir_report.xml new file mode 100644 index 00000000000..3d077f453c8 --- /dev/null +++ b/bin/addons/base/ir/report/ir_report.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/bin/addons/base/ir/report/modeloverview.sxw b/bin/addons/base/ir/report/modeloverview.sxw new file mode 100644 index 0000000000000000000000000000000000000000..ea0f4ce0dfa577029b0aeb12915f2070e44bc23f GIT binary patch literal 17797 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 h{A+0aD^2qKmw{GZ>J9WSGvwEw Date: Fri, 7 Jan 2011 11:19:19 +0100 Subject: [PATCH 05/75] [FIX] list of views function in ir.model bzr revid: jba@openerp.com-20110107101919-bei5x77fl98432jy --- bin/addons/base/ir/ir_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index ed43ce824a3..3e24b56809e 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -73,7 +73,7 @@ class ir_model(osv.osv): models=self.browse(cr,uid,ids) res={} for model in models: - res[model.id]=self.pool.get("ir.ui.view").search(cr, uid, [('model', '=', model.name)]) + res[model.id]=self.pool.get("ir.ui.view").search(cr, uid, [('model', '=', model.model)]) return res _columns = { From e6cddbf400fb0e62e3755708db4fcf981aa1edc9 Mon Sep 17 00:00:00 2001 From: Jacques-Etienne Baudoux Date: Fri, 7 Jan 2011 11:33:35 +0100 Subject: [PATCH 06/75] [FIX] inherited view in "Model Overview" report bzr revid: jba@openerp.com-20110107103335-2kqmt5g4bue52sge --- bin/addons/base/ir/report/modeloverview.sxw | Bin 17797 -> 17955 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/addons/base/ir/report/modeloverview.sxw b/bin/addons/base/ir/report/modeloverview.sxw index ea0f4ce0dfa577029b0aeb12915f2070e44bc23f..83769b93b94da641a2c81ed41baacfd6a98148a3 100644 GIT binary patch delta 13046 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 Z!2%M55Ds5J7s9w8I|(!xQqh0>{vTv2+~WWM delta 12944 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 t)qkS Date: Fri, 7 Jan 2011 12:42:33 +0100 Subject: [PATCH 07/75] [FIX] list only installed modules bzr revid: jba@openerp.com-20110107114233-f5p2h1rasyoxwfdp --- bin/addons/base/ir/ir_model.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index 3e24b56809e..1e38cf761fa 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -40,6 +40,18 @@ def _get_fields_type(self, cr, uid, context=None): field_types.remove(types) return field_types +def _in_modules(self, cr, uid, ids): + #return list of installed modules where self is defined + res = osv.osv.get_xml_ids(self, cr, uid, ids) + for k,v in res.iteritems(): + res[k]=set(map(lambda x: x.split('.')[0],v)) + module_pool=self.pool.get("ir.module.module") + installed_modules=[module for module in reduce(lambda x, y: x|y, res.values()) + if module_pool.search(cr,uid,[('name','=',module),('state','=','installed')])] + for k,v in res.iteritems(): + res[k]=', '.join([m for m in v if m in installed_modules]) + return res + class ir_model(osv.osv): _name = 'ir.model' _description = "Objects" @@ -64,10 +76,7 @@ class ir_model(osv.osv): return [('id', 'in', [id for id in is_osv_mem if bool(is_osv_mem[id]) == value])] def _in_modules(self, cr, uid, ids, field_name, arg, context=None): - res = osv.osv.get_xml_ids(self, cr, uid, ids) - for k,v in res.iteritems(): - res[k]=', '.join(map(lambda x: x.split('.')[0],v)) - return res + return _in_modules(self, cr, uid, ids) def _view_ids(self, cr, uid, ids, field_name, arg, context=None): models=self.browse(cr,uid,ids) @@ -166,10 +175,7 @@ class ir_model_fields(osv.osv): _description = "Fields" def _in_modules(self, cr, uid, ids, field_name, arg, context=None): - res = osv.osv.get_xml_ids(self, cr, uid, ids) - for k,v in res.iteritems(): - res[k]=', '.join(map(lambda x: x.split('.')[0],v)) - return res + return _in_modules(self, cr, uid, ids) _columns = { 'name': fields.char('Name', required=True, size=64, select=1), From 7e9b439c1cfedfedb2a94e5a1d8e44a9987f9570 Mon Sep 17 00:00:00 2001 From: Julien Thewys Date: Mon, 17 Jan 2011 21:59:59 +0100 Subject: [PATCH 08/75] [FIX] socket: avoids interaction between Nagle and delayed ACK algorithm. By default, ACK delay is 200ms on Windows which terribly slows down conversations between client and server (when deployed on different machines). To avoid any slow down, TCP_NODELAY should be enabled on clients' socket too. More details: http://developers.slashdot.org/comments.pl?sid=174457&threshold=1&commentsort=0&mode=thread&cid=14515105 bzr revid: jth@openerp.com-20110117205959-8kxaz0of8ta9dmfw --- bin/service/netrpc_server.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/service/netrpc_server.py b/bin/service/netrpc_server.py index 9d25c98083a..f991b6a72f6 100644 --- a/bin/service/netrpc_server.py +++ b/bin/service/netrpc_server.py @@ -108,6 +108,8 @@ class TinySocketServerThread(threading.Thread,netsvc.Server): self.__interface = interface self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + # disables Nagle algorithm (avoids 200ms default delay on Windows) + self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) self.socket.bind((self.__interface, self.__port)) self.socket.listen(5) self.threads = [] From d187fa7bf82089905dba2572e2c0711c132b3236 Mon Sep 17 00:00:00 2001 From: "P. Christeas" Date: Mon, 17 Jan 2011 23:31:08 +0200 Subject: [PATCH 09/75] ir_cron: some port to pythonic logging bzr revid: p_christ@hol.gr-20110117213108-u0k7n9y4xmtudvnk --- bin/addons/base/ir/ir_cron.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/bin/addons/base/ir/ir_cron.py b/bin/addons/base/ir/ir_cron.py index e7b1a541f0c..aa95bacfb1d 100644 --- a/bin/addons/base/ir/ir_cron.py +++ b/bin/addons/base/ir/ir_cron.py @@ -41,6 +41,10 @@ _intervalTypes = { } class ir_cron(osv.osv, netsvc.Agent): + """ This is the ORM object that periodically executes actions. + + Note that we use the netsvc.Agent()._logger member. + """ _name = "ir.cron" _order = 'name' _columns = { @@ -74,7 +78,7 @@ class ir_cron(osv.osv, netsvc.Agent): try: for this in self.browse(cr, uid, ids, context): str2tuple(this.args) - except: + except Exception: return False return True @@ -90,8 +94,7 @@ class ir_cron(osv.osv, netsvc.Agent): try: f(cr, uid, *args) except Exception, e: - self._logger.notifyChannel('timers', netsvc.LOG_ERROR, "Job call of self.pool.get('%s').%s(cr, uid, *%r) failed" % (model, func, args)) - self._logger.notifyChannel('timers', netsvc.LOG_ERROR, tools.exception_to_unicode(e)) + self._logger.exception("Job call of self.pool.get('%s').%s(cr, uid, *%r) failed" % (model, func, args)) def _poolJobs(self, db_name, check=False): @@ -135,9 +138,7 @@ class ir_cron(osv.osv, netsvc.Agent): self.setAlarm(self._poolJobs, next_call, db_name, db_name) except Exception, ex: - logger = netsvc.Logger() - logger.notifyChannel('cron', netsvc.LOG_WARNING, - 'Exception in cron:'+str(ex)) + self._logger.warning('Exception in cron:', exc_info=True) finally: cr.commit() From 695f87fa6a8cec96be17618aa7a1c3441a9552bc Mon Sep 17 00:00:00 2001 From: "P. Christeas" Date: Mon, 17 Jan 2011 23:38:50 +0200 Subject: [PATCH 10/75] netsvc: fix Agent patch, w. daemon threads and py. logging. [1/2] Conflicts: bin/netsvc.py (kept only the pythonic logging part) bzr revid: p_christ@hol.gr-20110117213850-5pq5suu1rje6h2cd --- bin/netsvc.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bin/netsvc.py b/bin/netsvc.py index 62b427d5eb1..0d57b13241f 100644 --- a/bin/netsvc.py +++ b/bin/netsvc.py @@ -309,7 +309,7 @@ class Agent(object): """ __tasks = [] __tasks_by_db = {} - _logger = Logger() + _logger = logging.getLogger('netsvc.agent') @classmethod def setAlarm(cls, function, timestamp, db_name, *args, **kwargs): @@ -320,6 +320,7 @@ class Agent(object): @classmethod def cancel(cls, db_name): """Cancel all tasks for a given database. If None is passed, all tasks are cancelled""" + cls._logger.debug("Cancel timers for %s db", db_name or 'all') if db_name is None: cls.__tasks, cls.__tasks_by_db = [], {} else: @@ -334,7 +335,7 @@ class Agent(object): @classmethod def runner(cls): """Neverending function (intended to be ran in a dedicated thread) that - checks every 60 seconds tasks to run. + checks every 60 seconds tasks to run. TODO: make configurable """ current_thread = threading.currentThread() while True: @@ -346,7 +347,9 @@ class Agent(object): # null timestamp -> cancelled task continue current_thread.dbname = dbname # hack hack - cls._logger.notifyChannel('timers', LOG_DEBUG, "Run %s.%s(*%r, **%r)" % (function.im_class.__name__, function.func_name, args, kwargs)) + cls._logger.debug("Run %s.%s(%s)", + function.im_class.__name__, function.func_name, + pretty_args(args, kwargs, 120)) delattr(current_thread, 'dbname') task_thread = threading.Thread(target=function, name='netsvc.Agent.task', args=args, kwargs=kwargs) # force non-daemon task threads (the runner thread must be daemon, and this property is inherited by default) @@ -362,7 +365,6 @@ agent_runner = threading.Thread(target=Agent.runner, name="netsvc.Agent.runner") agent_runner.setDaemon(True) agent_runner.start() - import traceback class Server: From 417b9702633ff162b436ff8afa17417bcb5f6443 Mon Sep 17 00:00:00 2001 From: "rpa (Open ERP)" Date: Tue, 18 Jan 2011 10:14:38 +0530 Subject: [PATCH 11/75] [FIX]: stock: Small typo bzr revid: rpa@tinyerp.com-20110118044438-jod17rb928j6y0et --- addons/stock/stock.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 2e538e5d8e6..756b5c474f4 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -209,7 +209,7 @@ class stock_location(osv.osv): 'company_id': fields.many2one('res.company', 'Company', select=1, help='Let this field empty if this location is shared between all companies'), 'scrap_location': fields.boolean('Scrap Location', help='Check this box to allow using this location to put scrapped/damaged goods.'), 'valuation_in_account_id': fields.many2one('account.account', 'Stock Input Account',domain = [('type','=','other')], help='This account will be used to value stock moves that have this location as destination, instead of the stock output account from the product.'), - 'valuation_out_account_id': fields.many2one('account.account', 'Stock Output Account',domain = [('type','=','other')], help='This account will be used ta value stock moves that have this location as source, instead of the stock input account from the product.'), + 'valuation_out_account_id': fields.many2one('account.account', 'Stock Output Account',domain = [('type','=','other')], help='This account will be used to value stock moves that have this location as source, instead of the stock input account from the product.'), } _defaults = { 'active': True, From 01888e90a88f71cd5999bff0623c4cda1cdd052f Mon Sep 17 00:00:00 2001 From: jam-openerp Date: Tue, 18 Jan 2011 12:27:42 +0530 Subject: [PATCH 12/75] [BUG/FIX] project : lp:703969 lp bug: https://launchpad.net/bugs/703969 fixed bzr revid: jam@tinyerp.com-20110118065742-zkluzsey9e0bzezc --- addons/project/project.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/addons/project/project.py b/addons/project/project.py index 0851be60e4d..e2eaf51baba 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -475,8 +475,20 @@ class task(osv.osv): ids = child_ids return True + def _check_dates(self, cr, uid, ids, context=None): + if context == None: + context = {} + obj_task = self.browse(cr, uid, ids[0], context=context) + start = obj_task.date_start or False + end = obj_task.date_end or False + if start and end : + if start > end: + return False + return True + _constraints = [ - (_check_recursion, 'Error ! You cannot create recursive tasks.', ['parent_ids']) + (_check_recursion, 'Error ! You cannot create recursive tasks.', ['parent_ids']), + (_check_dates, 'Error ! Task end-date must be greater then task start-date', ['date_start','date_end']) ] # # Override view according to the company definition @@ -540,6 +552,7 @@ class task(osv.osv): """ request = self.pool.get('res.request') for task in self.browse(cr, uid, ids, context=context): + vals = {} project = task.project_id if project: # Send request to project manager @@ -562,7 +575,11 @@ class task(osv.osv): reopen = False if reopen: self.do_reopen(cr, uid, [parent_id.id]) - self.write(cr, uid, [task.id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0}) + vals.update({'state': 'done'}) + vals.update({'remaining_hours': 0.0}) + if not task.date_end: + vals.update({ 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')}) + self.write(cr, uid, [task.id],vals) message = _("The task '%s' is done") % (task.name,) self.log(cr, uid, task.id, message) return True From 111132c5692ff1396d9360a4bda1cad470ffaedf Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Tue, 18 Jan 2011 12:35:27 +0530 Subject: [PATCH 13/75] [FIX] crm: Recurrent meetings should not be allowed to set recurrent again. bzr revid: uco@tinyerp.com-20110118070527-nkm3gyhp71h1am8h --- addons/crm/crm_meeting_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index ae9f584d059..dd4bc34c73f 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -44,7 +44,7 @@ - + @@ -165,7 +165,7 @@ - + Date: Tue, 18 Jan 2011 14:53:13 +0530 Subject: [PATCH 14/75] [FIx]:Deliveries to Invoice lists "Put in new pack" twice lp bug: https://launchpad.net/bugs/704289 fixed bzr revid: ksa@tinyerp.co.in-20110118092313-13jnxzwszp1duwl8 --- addons/stock/stock_view.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 4a972185afd..b87076c12a8 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -704,10 +704,6 @@ groups="base.group_extended" icon="terp-stock_effects-object-colorize" states="draft,assigned,confirmed"/> -