From 2455ef94639e63f1887bceb598a5b3e3150ff48a Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Fri, 12 Apr 2013 14:49:14 +0200 Subject: [PATCH 1/4] [FIX]ir_translation: replace source field to show value of the term stored in db and reflect change directly in db when changing source value bzr revid: csn@openerp.com-20130412124914-8epmco1z37ge1oui --- openerp/addons/base/ir/ir_translation.py | 30 ++++++++++++++++++- .../addons/base/ir/ir_translation_view.xml | 6 ++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index 5d71568315f..a75304743a9 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -155,12 +155,40 @@ class ir_translation(osv.osv): lang_data = lang_model.read(cr, uid, lang_ids, ['code', 'name'], context=context) return [(d['code'], d['name']) for d in lang_data] + def _get_src(self, cr, uid, ids, name, arg, context): + res = {} + for record in self.browse(cr,uid,ids,context=context): + if record.type != 'model': + res[record.id] = record.src + else: + data = record.name.split(',') + model = self.pool.get(data[0]) + field = data[1] + context_wo_lang = context.copy() + context_wo_lang.pop('lang', None) + res[record.id] = model.read(cr, uid, record.res_id, [field], context=context_wo_lang)[field] + return res + + def _set_src(self, cr, uid, id, name, value, args=None, context=None): + if value: + record=self.browse(cr,uid,id,context=context) + if record.type == 'model': + name = record.name + data = name.split(',') + model = self.pool.get(data[0]) + field = data[1] + context_wo_lang = context.copy() + context_wo_lang.pop('lang', None) + model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) + return self.write(cr,uid,id, {'src': value}, context=context_wo_lang) + _columns = { 'name': fields.char('Translated field', required=True), 'res_id': fields.integer('Record ID', select=True), 'lang': fields.selection(_get_language, string='Language'), 'type': fields.selection(TRANSLATION_TYPE, string='Type', select=True), - 'src': fields.text('Source'), + 'src': fields.text('Old source'), + 'source': fields.function(_get_src, fnct_inv=_set_src, type='text', string='Source'), 'value': fields.text('Translation Value'), 'module': fields.char('Module', help="Module this term belongs to", select=True), diff --git a/openerp/addons/base/ir/ir_translation_view.xml b/openerp/addons/base/ir/ir_translation_view.xml index d1c790de758..64a02576091 100644 --- a/openerp/addons/base/ir/ir_translation_view.xml +++ b/openerp/addons/base/ir/ir_translation_view.xml @@ -14,7 +14,7 @@ domain="[('comments', 'like', 'openerp-web')]"/> - + @@ -38,7 +38,7 @@ - + @@ -55,7 +55,7 @@ ir.translation - + From 56badfcb46f385eb659fb1a0c011d2def0dda1ae Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Mon, 15 Apr 2013 12:09:14 +0200 Subject: [PATCH 2/4] [REF]ir_translation: improve _get_src and _set_src function bzr revid: csn@openerp.com-20130415100914-wm0wqhgg5mou2wxs --- openerp/addons/base/ir/ir_translation.py | 43 ++++++++++++++---------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index a75304743a9..0a7b83f86b5 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -155,32 +155,41 @@ class ir_translation(osv.osv): lang_data = lang_model.read(cr, uid, lang_ids, ['code', 'name'], context=context) return [(d['code'], d['name']) for d in lang_data] - def _get_src(self, cr, uid, ids, name, arg, context): + def _get_src(self, cr, uid, ids, name, arg, context=None): + ''' Get source name for the translation. If object type is model then + return the value store in db. Otherwise return value store in src field + ''' + if not context: + context = {} res = {} - for record in self.browse(cr,uid,ids,context=context): + for record in self.browse(cr, uid, ids, context=context): if record.type != 'model': res[record.id] = record.src else: - data = record.name.split(',') - model = self.pool.get(data[0]) - field = data[1] + model, field = record.name.split(',') + #We need to take the context without the language information, because we want to read the + #value store in db and not on the one associate with current language. context_wo_lang = context.copy() context_wo_lang.pop('lang', None) res[record.id] = model.read(cr, uid, record.res_id, [field], context=context_wo_lang)[field] return res - def _set_src(self, cr, uid, id, name, value, args=None, context=None): - if value: - record=self.browse(cr,uid,id,context=context) - if record.type == 'model': - name = record.name - data = name.split(',') - model = self.pool.get(data[0]) - field = data[1] - context_wo_lang = context.copy() - context_wo_lang.pop('lang', None) - model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) - return self.write(cr,uid,id, {'src': value}, context=context_wo_lang) + def _set_src(self, cr, uid, id, name, value, args, context=None): + ''' When changing source term of a translation, change its value in db for + the associated object, and the src field + ''' + if not context: + context = {} + if value and record.model == 'model': + record = self.browse(cr, uid, id, context=context) + model, field = record.name.split(',') + #We need to take the context without the language information, because we want to write on the + #value store in db and not on the one associate with current language. + #Also not removing lang from context trigger an error when lang is different + context_wo_lang = context.copy() + context_wo_lang.pop('lang', None) + model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) + return self.write(cr, uid, id, {'src': value}, context=context_wo_lang) _columns = { 'name': fields.char('Translated field', required=True), From 39c88d09229dbd7cfb3b13b823afe00dcd638f80 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 16 Apr 2013 15:26:21 +0200 Subject: [PATCH 3/4] [IMP] account: cash.box.in defines its _columns, do the same for cash.box.out. This is needed to solve an inheritance problem when adding a superclass `base.model` (I guess this is related to the fact some code in the orm does a copy from the class to the instance). bzr revid: vmt@openerp.com-20130416132621-xo0lckimczqpvyos --- addons/account/wizard/pos_box.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/account/wizard/pos_box.py b/addons/account/wizard/pos_box.py index 1d6d13e140b..874a8e3b7c9 100644 --- a/addons/account/wizard/pos_box.py +++ b/addons/account/wizard/pos_box.py @@ -67,6 +67,8 @@ class CashBoxIn(CashBox): class CashBoxOut(CashBox): _name = 'cash.box.out' + _columns = CashBox._columns.copy() + def _compute_values_for_statement_line(self, cr, uid, box, record, context=None): amount = box.amount or 0.0 return { From 3fe1f535148deedf4295b51c348104db7fa3662b Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 16 Apr 2013 17:18:44 +0200 Subject: [PATCH 4/4] [REF] get_module_resource() must imported from openerp.modules (instead of openerp.addons). bzr revid: vmt@openerp.com-20130416151844-gatbo4s2l2e6reme --- .../base_report_designer/base_report_designer.py | 15 ++++++++------- addons/base_report_designer/installer.py | 4 ++-- addons/crm/test/crm_lead_message.yml | 3 +-- addons/crm_claim/test/process/claim.yml | 3 +-- addons/document_webdav/test/webdav_test1.yml | 5 ++--- addons/document_webdav/webdav_server.py | 2 +- addons/hr/hr.py | 6 ++++-- addons/survey/wizard/survey_answer.py | 9 +++++---- addons/survey/wizard/survey_send_invitation.py | 9 +++++---- 9 files changed, 29 insertions(+), 27 deletions(-) diff --git a/addons/base_report_designer/base_report_designer.py b/addons/base_report_designer/base_report_designer.py index 6a0a2722755..bc7959a17df 100644 --- a/addons/base_report_designer/base_report_designer.py +++ b/addons/base_report_designer/base_report_designer.py @@ -20,12 +20,13 @@ ############################################################################## import base64 +from StringIO import StringIO + +from openerp.modules.module import get_module_resource import openerp.modules.registry from openerp.osv import osv from openerp_sxw2rml import sxw2rml -from StringIO import StringIO -from openerp import addons - + class report_xml(osv.osv): _inherit = 'ir.actions.report.xml' @@ -36,9 +37,9 @@ class report_xml(osv.osv): ''' sxwval = StringIO(base64.decodestring(file_sxw)) if file_type=='sxw': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') if file_type=='odt': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') return {'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read()))} def upload_report(self, cr, uid, report_id, file_sxw, file_type, context=None): @@ -47,9 +48,9 @@ class report_xml(osv.osv): ''' sxwval = StringIO(base64.decodestring(file_sxw)) if file_type=='sxw': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') if file_type=='odt': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') report = self.pool['ir.actions.report.xml'].write(cr, uid, [report_id], { 'report_sxw_content': base64.decodestring(file_sxw), 'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read())), diff --git a/addons/base_report_designer/installer.py b/addons/base_report_designer/installer.py index 0c0e6086df0..a21b6655af7 100644 --- a/addons/base_report_designer/installer.py +++ b/addons/base_report_designer/installer.py @@ -23,7 +23,7 @@ from openerp.osv import fields from openerp.osv import osv import base64 from openerp.tools.translate import _ -from openerp import addons +from openerp.modules.module import get_module_resource class base_report_designer_installer(osv.osv_memory): _name = 'base_report_designer.installer' @@ -31,7 +31,7 @@ class base_report_designer_installer(osv.osv_memory): def default_get(self, cr, uid, fields, context=None): data = super(base_report_designer_installer, self).default_get(cr, uid, fields, context=context) - plugin_file = open(addons.get_module_resource('base_report_designer','plugin', 'openerp_report_designer.zip'),'rb') + plugin_file = open(get_module_resource('base_report_designer','plugin', 'openerp_report_designer.zip'),'rb') data['plugin_file'] = base64.encodestring(plugin_file.read()) return data diff --git a/addons/crm/test/crm_lead_message.yml b/addons/crm/test/crm_lead_message.yml index 221a4ab634f..0f7d4655398 100644 --- a/addons/crm/test/crm_lead_message.yml +++ b/addons/crm/test/crm_lead_message.yml @@ -4,8 +4,7 @@ Mail script will fetch his request from mail server. Then I process that mail after read EML file. - !python {model: mail.thread}: | - from openerp import addons - request_file = open(addons.get_module_resource('crm','test', 'customer_request.eml'),'rb') + request_file = open(openerp.modules.module.get_module_resource('crm','test', 'customer_request.eml'),'rb') request_message = request_file.read() self.message_process(cr, uid, 'crm.lead', request_message) - diff --git a/addons/crm_claim/test/process/claim.yml b/addons/crm_claim/test/process/claim.yml index bacb073b4b9..a843372956e 100644 --- a/addons/crm_claim/test/process/claim.yml +++ b/addons/crm_claim/test/process/claim.yml @@ -4,8 +4,7 @@ Mail script will be fetched him request from mail server. so I process that mail after read EML file - !python {model: mail.thread}: | - from openerp import addons - request_file = open(addons.get_module_resource('crm_claim','test', 'customer_claim.eml'),'rb') + request_file = open(openerp.modules.module.get_module_resource('crm_claim','test', 'customer_claim.eml'),'rb') request_message = request_file.read() self.message_process(cr, uid, 'crm.claim', request_message) - diff --git a/addons/document_webdav/test/webdav_test1.yml b/addons/document_webdav/test/webdav_test1.yml index 82236f63846..ae91d7cd4a8 100644 --- a/addons/document_webdav/test/webdav_test1.yml +++ b/addons/document_webdav/test/webdav_test1.yml @@ -47,10 +47,9 @@ - !python {model: ir.attachment}: | from document_webdav import test_davclient as te - import addons dc = te.DAVClient() dc.get_creds(self, cr, uid) - tdp = addons.get_module_resource('document_webdav', 'test_davclient.py') + tdp = openerp.modules.module.get_module_resource('document_webdav', 'test_davclient.py') res = dc.gd_put(path=cr.dbname+'/Documents/test_davclient.py', srcpath=tdp) - I will try to get the file from the root @@ -60,5 +59,5 @@ import addons dc = te.DAVClient() dc.get_creds(self, cr, uid) - tdp = addons.get_module_resource('document_webdav', 'test_davclient.py') + tdp = openerp.modules.module.get_module_resource('document_webdav', 'test_davclient.py') res = dc.gd_get(path=cr.dbname+'/Documents/test_davclient.py', crange=(4,508), compare=tdp) diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py index 1804b9bfdb2..f67de272e29 100644 --- a/addons/document_webdav/webdav_server.py +++ b/addons/document_webdav/webdav_server.py @@ -608,7 +608,7 @@ try: if base_path and base_path == '/': dir_path = config.get_misc('static-http', 'dir_path', False) else: - dir_path = openerp.addons.get_module_resource('document_webdav','public_html') + dir_path = openerp.modules.module.get_module_resource('document_webdav','public_html') # an _ugly_ hack: we put that dir back in tools.config.misc, so that # the StaticHttpHandler can find its dir_path. config.misc.setdefault('static-http',{})['dir_path'] = dir_path diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 59e472b3717..585e5ce81a4 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -19,10 +19,12 @@ # ############################################################################## -from openerp import addons import logging + +from openerp.modules.module import get_module_resource from openerp.osv import fields, osv from openerp import tools + _logger = logging.getLogger(__name__) class hr_employee_category(osv.osv): @@ -259,7 +261,7 @@ class hr_employee(osv.osv): return {'value': {'work_email' : work_email}} def _get_default_image(self, cr, uid, context=None): - image_path = addons.get_module_resource('hr', 'static/src/img', 'default_image.png') + image_path = get_module_resource('hr', 'static/src/img', 'default_image.png') return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) _defaults = { diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index 181d6159109..6d473754988 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -25,7 +25,8 @@ from lxml import etree import os from time import strftime -from openerp import addons, tools +from openerp import tools +from openerp.modules.module import get_module_resource from openerp.osv import fields, osv import openerp.report from openerp.tools import to_xml @@ -412,7 +413,7 @@ class survey_question_wiz(osv.osv_memory): response_id = surv_name_wiz.read(cr, uid, context.get('sur_name_id',False))['response'] report = self.create_report(cr, uid, [survey_id], 'report.survey.browse.response', survey_data.title,context) attachments = {} - pdf_filename = addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf" + pdf_filename = get_module_resource('survey', 'report') + survey_data.title + ".pdf" if os.path.exists(pdf_filename): file = open(pdf_filename) file_data = "" @@ -424,7 +425,7 @@ class survey_question_wiz(osv.osv_memory): attachments[survey_data.title + ".pdf"] = file_data file.close() - os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf") + os.remove(get_module_resource('survey', 'report') + survey_data.title + ".pdf") context.update({'response_id':response_id}) user_email = user_obj.browse(cr, uid, uid, context).email resp_email = survey_data.responsible_id and survey_data.responsible_id.email or False @@ -466,7 +467,7 @@ class survey_question_wiz(osv.osv_memory): try: uid = 1 result, format = openerp.report.render_report(cr, uid, res_ids, report_name[len('report.'):], {}, context) - ret_file_name = addons.get_module_resource('survey', 'report') + file_name + '.pdf' + ret_file_name = get_module_resource('survey', 'report') + file_name + '.pdf' fp = open(ret_file_name, 'wb+'); fp.write(result); fp.close(); diff --git a/addons/survey/wizard/survey_send_invitation.py b/addons/survey/wizard/survey_send_invitation.py index a188ab7ce83..ca6a8e4b15d 100644 --- a/addons/survey/wizard/survey_send_invitation.py +++ b/addons/survey/wizard/survey_send_invitation.py @@ -26,7 +26,8 @@ import os import datetime import socket -from openerp import addons, tools +from openerp import tools +from openerp.modules.module import get_module_resource from openerp.osv import fields, osv import openerp.report from openerp.tools.translate import _ @@ -85,7 +86,7 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we if not report_name or not res_ids: return (False, Exception('Report name and Resources ids are required !!!')) try: - ret_file_name = addons.get_module_resource('survey', 'report') + file_name + '.pdf' + ret_file_name = get_module_resource('survey', 'report') + file_name + '.pdf' result, format = openerp.report.render_report(cr, uid, res_ids, report_name[len('report.'):], {}, {}) fp = open(ret_file_name, 'wb+'); fp.write(result); @@ -128,7 +129,7 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we new_user.append(use.id) for id in survey_ref.browse(cr, uid, survey_ids): report = self.create_report(cr, uid, [id.id], 'report.survey.form', id.title) - file = open(addons.get_module_resource('survey', 'report') + id.title +".pdf") + file = open(get_module_resource('survey', 'report') + id.title +".pdf") file_data = "" while 1: line = file.readline() @@ -137,7 +138,7 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we break file.close() attachments[id.title +".pdf"] = file_data - os.remove(addons.get_module_resource('survey', 'report') + id.title +".pdf") + os.remove(get_module_resource('survey', 'report') + id.title +".pdf") for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids): if not partner.email: