diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml index 38421b06549..59ccd5dde7c 100644 --- a/bin/addons/base/ir/ir.xml +++ b/bin/addons/base/ir/ir.xml @@ -115,8 +115,7 @@ - - + @@ -151,11 +150,11 @@ - - - - - + + + + + @@ -341,36 +340,36 @@ - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - -
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +
@@ -997,7 +996,7 @@ - + @@ -1217,13 +1216,12 @@ form
- - - - - - - + + + + + + @@ -1236,7 +1234,7 @@ - + @@ -1256,7 +1254,7 @@ - + diff --git a/bin/addons/base/ir/ir_sequence.py b/bin/addons/base/ir/ir_sequence.py index 48b6eb6eb4a..f48ea0f25c4 100644 --- a/bin/addons/base/ir/ir_sequence.py +++ b/bin/addons/base/ir/ir_sequence.py @@ -1,27 +1,27 @@ -# -*- coding: utf-8 -*- +# -*- encoding: utf-8 -*- ############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved +# $Id$ # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. +# GNU General Public License for more details. # -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # ############################################################################## import time from osv import fields,osv -from tools.safe_eval import safe_eval import pooler class ir_sequence_type(osv.osv): @@ -47,17 +47,12 @@ class ir_sequence(osv.osv): 'number_next': fields.integer('Next Number', required=True), 'number_increment': fields.integer('Increment Number', required=True), 'padding' : fields.integer('Number padding', required=True), - 'condition': fields.char('Condition', size=250, help="If set, sequence will only be used in case this python expression matches, and will precede other sequences."), - 'weight': fields.integer('Weight',required=True, help="If two sequences match, the highest weight will be used."), - 'company_id' : fields.many2one('res.company', 'Company'), } _defaults = { 'active': lambda *a: True, 'number_increment': lambda *a: 1, 'number_next': lambda *a: 1, 'padding' : lambda *a : 0, - 'weight' : lambda *a: 10, - 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'ir.sequence', context=c) } def _process(self, s): @@ -76,29 +71,10 @@ class ir_sequence(osv.osv): } def get_id(self, cr, uid, sequence_id, test='id=%s', context=None): - if not context: - context = {} try: - cr.execute('SELECT id, number_next, prefix, suffix, padding, condition \ - FROM ir_sequence \ - WHERE '+test+' AND active=%s ORDER BY weight DESC, length(COALESCE(condition,\'\')) DESC \ - FOR UPDATE', (sequence_id, True)) - for res in cr.dictfetchall(): - if res['condition']: - print "ir_seq: %s has condition:" %res['id'], res['condition'], - try: - bo = safe_eval(res['condition'],context) - if not bo: - print "not matched" - continue - except Exception,e: - # it would be normal to have exceptions, because - # the domain may contain errors - print "Exception.\ne:",e - print "Context:", context - continue - print "Matched!" - + cr.execute('SELECT id, number_next, prefix, suffix, padding FROM ir_sequence WHERE '+test+' AND active=%s FOR UPDATE', (sequence_id, True)) + res = cr.dictfetchone() + if res: cr.execute('UPDATE ir_sequence SET number_next=number_next+number_increment WHERE id=%s AND active=%s', (res['id'], True)) if res['number_next']: return self._process(res['prefix']) + '%%0%sd' % res['padding'] % res['number_next'] + self._process(res['suffix']) @@ -108,8 +84,8 @@ class ir_sequence(osv.osv): cr.commit() return False - def get(self, cr, uid, code, context = None): - return self.get_id(cr, uid, code, test='code=%s',context=context) + def get(self, cr, uid, code): + return self.get_id(cr, uid, code, test='code=%s') ir_sequence() diff --git a/bin/osv/fields.py b/bin/osv/fields.py index 8af3f27417c..800edf53e2b 100644 --- a/bin/osv/fields.py +++ b/bin/osv/fields.py @@ -304,6 +304,7 @@ class many2one(_column): for id in ids: res.setdefault(id, '') obj = obj.pool.get(self._obj) + # build a dictionary of the form {'id_of_distant_resource': name_of_distant_resource} from orm import except_orm try: @@ -313,7 +314,6 @@ class many2one(_column): iids = filter(None, res.values()) for iiid in iids: names[iiid] = '// Access Denied //' - for r in res.keys(): if res[r] and res[r] in names: res[r] = (res[r], names[res[r]])