From ca3a65d9adcbc22ceb832e7573bc94ab2f25894f Mon Sep 17 00:00:00 2001 From: Yogesh Sakhreliya Date: Wed, 24 Nov 2010 14:42:07 +0530 Subject: [PATCH 1/7] Confirm message support translation and export--author=Margarita Manterola bzr revid: ysa@tinyerp.com-20101124091207-5gccf6h5h0hgu06i --- bin/osv/orm.py | 6 ++++++ bin/tools/translate.py | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index fb9381ed0b1..0af78ab1cca 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1386,6 +1386,12 @@ class orm_template(object): trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('string')) if trans: node.set('string', trans) + if node.get('confirm'): + trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('confirm').encode('utf8')) + if not trans and ('base_model_name' in context): + trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('confirm').encode('utf8')) + if trans: + node.set('confirm', trans) if node.get('sum'): trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('sum')) if trans: diff --git a/bin/tools/translate.py b/bin/tools/translate.py index 807de0d2cde..176e2825ea4 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -166,7 +166,7 @@ class GettextAlias(object): cr = pooler.get_db(dbs[0]).cursor() is_new_cr = True return cr, is_new_cr - + def _get_lang(self, frame): lang = frame.f_locals.get('context', {}).get('lang', False) if not lang: @@ -178,7 +178,7 @@ class GettextAlias(object): c = getattr(s, 'localcontext', {}) lang = c.get('lang', False) return lang - + def __call__(self, source): is_new_cr = False res = source @@ -464,6 +464,8 @@ def trans_parse_view(de): res.append(de.get('string').encode("utf8")) if de.get("sum"): res.append(de.get('sum').encode("utf8")) + if de.get("confirm"): + res.append(de.get('confirm').encode("utf8")) for n in de: res.extend(trans_parse_view(n)) return res From 8940877f64d82e762df90bffbd179044c9fe0882 Mon Sep 17 00:00:00 2001 From: Yogesh Sakhreliya Date: Wed, 24 Nov 2010 15:04:35 +0530 Subject: [PATCH 2/7] revert rev no :-3030 bzr revid: ysa@tinyerp.com-20101124093435-3d7ioctc8raaf1j2 --- bin/osv/orm.py | 6 ------ bin/tools/translate.py | 6 ++---- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 0af78ab1cca..fb9381ed0b1 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1386,12 +1386,6 @@ class orm_template(object): trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('string')) if trans: node.set('string', trans) - if node.get('confirm'): - trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('confirm').encode('utf8')) - if not trans and ('base_model_name' in context): - trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('confirm').encode('utf8')) - if trans: - node.set('confirm', trans) if node.get('sum'): trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('sum')) if trans: diff --git a/bin/tools/translate.py b/bin/tools/translate.py index 176e2825ea4..807de0d2cde 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -166,7 +166,7 @@ class GettextAlias(object): cr = pooler.get_db(dbs[0]).cursor() is_new_cr = True return cr, is_new_cr - + def _get_lang(self, frame): lang = frame.f_locals.get('context', {}).get('lang', False) if not lang: @@ -178,7 +178,7 @@ class GettextAlias(object): c = getattr(s, 'localcontext', {}) lang = c.get('lang', False) return lang - + def __call__(self, source): is_new_cr = False res = source @@ -464,8 +464,6 @@ def trans_parse_view(de): res.append(de.get('string').encode("utf8")) if de.get("sum"): res.append(de.get('sum').encode("utf8")) - if de.get("confirm"): - res.append(de.get('confirm').encode("utf8")) for n in de: res.extend(trans_parse_view(n)) return res From b140c3cacbedb2bd0ce121f6daedc1277eca84ad Mon Sep 17 00:00:00 2001 From: Margarita Manterola <> Date: Wed, 24 Nov 2010 15:06:47 +0530 Subject: [PATCH 3/7] Confirm message support translation and export bzr revid: ysa@tinyerp.com-20101124093647-hbh2gzghkf39desi --- bin/osv/orm.py | 6 ++++++ bin/tools/translate.py | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index fb9381ed0b1..0af78ab1cca 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1386,6 +1386,12 @@ class orm_template(object): trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('string')) if trans: node.set('string', trans) + if node.get('confirm'): + trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('confirm').encode('utf8')) + if not trans and ('base_model_name' in context): + trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('confirm').encode('utf8')) + if trans: + node.set('confirm', trans) if node.get('sum'): trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('sum')) if trans: diff --git a/bin/tools/translate.py b/bin/tools/translate.py index 807de0d2cde..176e2825ea4 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -166,7 +166,7 @@ class GettextAlias(object): cr = pooler.get_db(dbs[0]).cursor() is_new_cr = True return cr, is_new_cr - + def _get_lang(self, frame): lang = frame.f_locals.get('context', {}).get('lang', False) if not lang: @@ -178,7 +178,7 @@ class GettextAlias(object): c = getattr(s, 'localcontext', {}) lang = c.get('lang', False) return lang - + def __call__(self, source): is_new_cr = False res = source @@ -464,6 +464,8 @@ def trans_parse_view(de): res.append(de.get('string').encode("utf8")) if de.get("sum"): res.append(de.get('sum').encode("utf8")) + if de.get("confirm"): + res.append(de.get('confirm').encode("utf8")) for n in de: res.extend(trans_parse_view(n)) return res From 2bf0a92b7f1574c1ecaded4e54625abaf2315a95 Mon Sep 17 00:00:00 2001 From: "Tristan Hill (credativ)" <> Date: Wed, 24 Nov 2010 15:11:33 +0530 Subject: [PATCH 4/7] add error log message if raise exception on database connect bzr revid: ysa@tinyerp.com-20101124094133-ayl5pppdjqkx534q --- bin/sql_db.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/sql_db.py b/bin/sql_db.py index 6c2c17beeb3..feafc72d6d8 100644 --- a/bin/sql_db.py +++ b/bin/sql_db.py @@ -290,7 +290,11 @@ class ConnectionPool(object): # note: this code is called only if the for loop has completed (no break) raise PoolError('The Connection Pool Is Full') - result = psycopg2.connect(dsn=dsn, connection_factory=PsycoConnection) + try: + result = psycopg2.connect(dsn=dsn, connection_factory=PsycoConnection) + except psycopg2.Error, e: + self.__logger.log(logging.ERROR, 'connect:%s', e) + raise self._connections.append((result, True)) self._debug('Create new connection') return result From 2e8ab9079ab68fe284eaddeb2caf8f3716648061 Mon Sep 17 00:00:00 2001 From: Don Kirkby <> Date: Wed, 24 Nov 2010 15:17:21 +0530 Subject: [PATCH 5/7] [FIX] workaround infinite loop while duplicating records in lp:673194 bzr revid: ysa@tinyerp.com-20101124094721-h831hkof77cuvaez --- bin/osv/orm.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 0af78ab1cca..b3a832667ff 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -4166,6 +4166,8 @@ class orm(orm_template): old_children = sorted(old_record[field_name]) new_children = sorted(new_record[field_name]) for (old_child, new_child) in zip(old_children, new_children): + if target_obj == self and old_child == old_id: + continue # avoid infinite loop with self-inheritance # recursive copy of translations here target_obj.copy_translations(cr, uid, old_child, new_child, context=context) # and for translatable fields we keep them for copy From 60634423993216d6dbee9fde23dea5c9edbd5175 Mon Sep 17 00:00:00 2001 From: Yogesh Sakhreliya Date: Wed, 24 Nov 2010 17:06:28 +0530 Subject: [PATCH 6/7] ir_sequece now compatible with multicompany and improve get_id method of ir_sequece objects. bzr revid: ysa@tinyerp.com-20101124113628-9tppvqpfp00h4olg --- bin/addons/base/ir/ir_sequence.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/bin/addons/base/ir/ir_sequence.py b/bin/addons/base/ir/ir_sequence.py index 83ab79f20ac..aeeae1a789b 100644 --- a/bin/addons/base/ir/ir_sequence.py +++ b/bin/addons/base/ir/ir_sequence.py @@ -74,14 +74,17 @@ class ir_sequence(osv.osv): def get_id(self, cr, uid, sequence_id, test='id', context=None): assert test in ('code','id') - cr.execute('SELECT id, number_next, prefix, suffix, padding FROM ir_sequence WHERE '+test+'=%s AND active=%s FOR UPDATE NOWAIT', (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']) + company_id = self.pool.get('res.users').browse(cr, uid, uid, context).company_id.id + seq_id = self.search(cr, uid, [(test,'=',sequence_id),('active','=',True),('company_id','=',company_id)]) + if not seq_id: + seq_id = self.search(cr, uid, [(test,'=',sequence_id),('active','=',True),('company_id','=',False)]) + if seq_id: + sequece_data = self.browse(cr, uid, seq_id[0], context) + self.write(cr, uid, sequece_data.id, {'number_next': sequece_data.number_next + sequece_data.number_increment}) + if sequece_data.number_next: + return self._process(sequece_data.prefix) + '%%0%sd' % sequece_data.padding % sequece_data.number_next + self._process(sequece_data.suffix) else: - return self._process(res['prefix']) + self._process(res['suffix']) + return self._process(sequece_data.prefix) + self._process(sequece_data.suffix) return False def get(self, cr, uid, code): From 456579b198cd0ec544c90c36226308d298ea93fa Mon Sep 17 00:00:00 2001 From: Yogesh Sakhreliya Date: Thu, 25 Nov 2010 15:04:24 +0530 Subject: [PATCH 7/7] [FIX] add unique constraint in many2many field. bzr revid: ysa@tinyerp.com-20101125093424-thmqvllabcx0sxpw --- bin/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 0f6253a2e09..0037c2e7de0 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -2525,7 +2525,7 @@ class orm(orm_template): raise except_orm('Programming Error', ('There is no reference available for %s') % (f._obj,)) ref = self.pool.get(f._obj)._table # ref = f._obj.replace('.', '_') - cr.execute('CREATE TABLE "%s" ("%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE, "%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE) WITH OIDS' % (f._rel, f._id1, self._table, f._id2, ref)) + cr.execute('CREATE TABLE "%s" ("%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE, "%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE, UNIQUE("%s","%s")) WITH OIDS' % (f._rel, f._id1, self._table, f._id2, ref, f._id1, f._id2)) cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id1, f._rel, f._id1)) cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id2, f._rel, f._id2)) cr.execute("COMMENT ON TABLE \"%s\" IS 'RELATION BETWEEN %s AND %s'" % (f._rel, self._table, ref))