Merge origin/5.0.4 into xrg
Conflicts: bin/addons/base/i18n/base.pot bzr revid: p_christ@hol.gr-20090828180203-xbavbj02nas6f0qy
This commit is contained in:
commit
6e6329bb7d
|
@ -1,6 +1,6 @@
|
||||||
Metadata-Version: 1.1
|
Metadata-Version: 1.1
|
||||||
Name: OpenERP
|
Name: OpenERP
|
||||||
Version: 5.0.3
|
Version: 5.0.4
|
||||||
Author: Tiny.be
|
Author: Tiny.be
|
||||||
Author-email: fp at tiny be
|
Author-email: fp at tiny be
|
||||||
Maintainer: Tiny.be
|
Maintainer: Tiny.be
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1040,8 +1040,8 @@
|
||||||
<page string="Technical Data" groups="base.group_extended">
|
<page string="Technical Data" groups="base.group_extended">
|
||||||
<separator string="Action to Trigger" colspan="4"/>
|
<separator string="Action to Trigger" colspan="4"/>
|
||||||
<field name="model" groups="base.group_extended"/>
|
<field name="model" groups="base.group_extended"/>
|
||||||
<field name="function" readonly="base.group_extended"/>
|
<field name="function"/>
|
||||||
<field colspan="4" name="args" readonly="base.group_extended"/>
|
<field colspan="4" name="args"/>
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -17,11 +17,11 @@
|
||||||
<fill color="black"/>
|
<fill color="black"/>
|
||||||
<stroke color="black"/>
|
<stroke color="black"/>
|
||||||
<drawString x="1cm" y="27.6cm"><xsl:value-of select="//corporate-header/corporation/name"/></drawString>
|
<drawString x="1cm" y="27.6cm"><xsl:value-of select="//corporate-header/corporation/name"/></drawString>
|
||||||
<lines>1cm 25.4cm 20cm 25.4cm</lines>
|
<lines>1cm 28.4cm 20cm 28.4cm</lines>
|
||||||
<!-- <lines>1cm 25.7cm 7cm 25.7cm</lines>-->
|
<lines>1cm 25.4cm 7cm 25.4cm</lines>
|
||||||
|
|
||||||
<setFont name="Helvetica" size="10"/>
|
<setFont name="Helvetica" size="10"/>
|
||||||
<drawRightString x="1cm" y="27.5cm"><xsl:value-of select="//corporate-header/corporation/rml_header1"/></drawRightString>
|
<drawRightString x="20cm" y="28.5cm"><xsl:value-of select="//corporate-header/corporation/rml_header1"/></drawRightString>
|
||||||
<drawString x="1cm" y="27cm"><xsl:value-of select="//corporate-header/corporation/address/street"/></drawString>
|
<drawString x="1cm" y="27cm"><xsl:value-of select="//corporate-header/corporation/address/street"/></drawString>
|
||||||
<drawString x="1cm" y="26.5cm">
|
<drawString x="1cm" y="26.5cm">
|
||||||
<xsl:value-of select="//corporate-header/corporation/address/zip"/>
|
<xsl:value-of select="//corporate-header/corporation/address/zip"/>
|
||||||
|
@ -34,17 +34,17 @@
|
||||||
<drawRightString x="7cm" y="26cm"><xsl:value-of select="//corporate-header/corporation/address/phone"/></drawRightString>
|
<drawRightString x="7cm" y="26cm"><xsl:value-of select="//corporate-header/corporation/address/phone"/></drawRightString>
|
||||||
<drawString x="1cm" y="25.5cm">Mail:</drawString>
|
<drawString x="1cm" y="25.5cm">Mail:</drawString>
|
||||||
<drawRightString x="7cm" y="25.5cm"><xsl:value-of select="//corporate-header/corporation/address/email"/></drawRightString>
|
<drawRightString x="7cm" y="25.5cm"><xsl:value-of select="//corporate-header/corporation/address/email"/></drawRightString>
|
||||||
|
|
||||||
|
|
||||||
<!--page bottom-->
|
<!--page bottom-->
|
||||||
|
|
||||||
<lines>1.5cm 1.2cm 19.9cm 1.2cm</lines>
|
<lines>1.5cm 2.2cm 19.9cm 2.2cm</lines>
|
||||||
<drawCentredString x="10.5cm" y="1.7cm"><xsl:value-of select="//corporate-header/corporation/rml_footer1"/></drawCentredString>
|
<drawCentredString x="10.5cm" y="1.7cm"><xsl:value-of select="//corporate-header/corporation/rml_footer1"/></drawCentredString>
|
||||||
<drawCentredString x="10.5cm" y="1.25cm"><xsl:value-of select="//corporate-header/corporation/rml_footer2"/></drawCentredString>
|
<drawCentredString x="10.5cm" y="1.25cm"><xsl:value-of select="//corporate-header/corporation/rml_footer2"/></drawCentredString>
|
||||||
<drawCentredString x="10.5cm" y="0.8cm">Your contact : <xsl:value-of select="//corporate-header/user/name"/></drawCentredString>
|
<drawCentredString x="10.5cm" y="0.8cm">Your contact : <xsl:value-of select="//corporate-header/user/name"/></drawCentredString>
|
||||||
|
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
|
|
||||||
<xsl:template name="other_pages_graphics_corporation">
|
<xsl:template name="other_pages_graphics_corporation">
|
||||||
<!--logo-->
|
<!--logo-->
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
<drawRightString x="7cm" y="25.5cm"><xsl:value-of select="//corporate-header/corporation/address/email"/></drawRightString>
|
<drawRightString x="7cm" y="25.5cm"><xsl:value-of select="//corporate-header/corporation/address/email"/></drawRightString>
|
||||||
|
|
||||||
<!--page bottom-->
|
<!--page bottom-->
|
||||||
|
|
||||||
<lines>1.5cm 1.2cm 19.9cm 1.2cm</lines>
|
<lines>1.5cm 1.2cm 19.9cm 1.2cm</lines>
|
||||||
<drawCentredString x="10.5cm" y="1.7cm"><xsl:value-of select="//corporate-header/corporation/rml_footer1"/></drawCentredString>
|
<drawCentredString x="10.5cm" y="1.7cm"><xsl:value-of select="//corporate-header/corporation/rml_footer1"/></drawCentredString>
|
||||||
<drawCentredString x="10.5cm" y="1.25cm"><xsl:value-of select="//corporate-header/corporation/rml_footer2"/></drawCentredString>
|
<drawCentredString x="10.5cm" y="1.25cm"><xsl:value-of select="//corporate-header/corporation/rml_footer2"/></drawCentredString>
|
||||||
|
|
|
@ -141,10 +141,10 @@
|
||||||
<field eval="[(6, 0, [ref('res_partner_category_1')])]" name="category_id"/>
|
<field eval="[(6, 0, [ref('res_partner_category_1')])]" name="category_id"/>
|
||||||
</record>
|
</record>
|
||||||
<record id="res_partner_9" model="res.partner">
|
<record id="res_partner_9" model="res.partner">
|
||||||
<field name="website">http://opensides.be</field>
|
<field name="website">http://www.openroad.be</field>
|
||||||
<field name="name">Opensides sprl</field>
|
<field name="name">OpenRoad</field>
|
||||||
<field eval="12000.00" name="credit_limit"/>
|
<field eval="12000.00" name="credit_limit"/>
|
||||||
<field name="ref">os</field>
|
<field name="ref">or</field>
|
||||||
<field name="user_id" ref="user_demo"/>
|
<field name="user_id" ref="user_demo"/>
|
||||||
<field eval="[(6, 0, [ref('res_partner_category_1')])]" name="category_id"/>
|
<field eval="[(6, 0, [ref('res_partner_category_1')])]" name="category_id"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -181,12 +181,12 @@
|
||||||
|
|
||||||
<record id="res_partner_address_1" model="res.partner.address">
|
<record id="res_partner_address_1" model="res.partner.address">
|
||||||
<field name="city">Bruxelles</field>
|
<field name="city">Bruxelles</field>
|
||||||
<field name="name">Benoit Mortier</field>
|
<field name="name">Michel Schumacher</field>
|
||||||
<field name="zip">1030</field>
|
<field name="zip">1000</field>
|
||||||
<field model="res.country" name="country_id" search="[('name','=','Belgium')]"/>
|
<field model="res.country" name="country_id" search="[('name','=','Belgium')]"/>
|
||||||
<field name="email">info@opensides.be</field>
|
<field name="email">info@openroad.be</field>
|
||||||
<field name="phone">(+32)2 211 34 83</field>
|
<field name="phone">(+32) 2 123 456</field>
|
||||||
<field name="street">Rue des Palais 44, bte 33</field>
|
<field name="street">Rue du flash 50</field>
|
||||||
<field name="type">default</field>
|
<field name="type">default</field>
|
||||||
<field name="partner_id" ref="res_partner_9"/>
|
<field name="partner_id" ref="res_partner_9"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -260,6 +260,8 @@ class OpenERPDispatcher:
|
||||||
Logger().notifyChannel('%s' % title, LOG_DEBUG_RPC, pformat(msg))
|
Logger().notifyChannel('%s' % title, LOG_DEBUG_RPC, pformat(msg))
|
||||||
|
|
||||||
def dispatch(self, service_name, method, params):
|
def dispatch(self, service_name, method, params):
|
||||||
|
if service_name not in GROUPS['web-services']:
|
||||||
|
raise Exception('AccessDenied')
|
||||||
try:
|
try:
|
||||||
self.log('service', service_name)
|
self.log('service', service_name)
|
||||||
self.log('method', method)
|
self.log('method', method)
|
||||||
|
@ -306,7 +308,7 @@ class SSLSocket(object):
|
||||||
return getattr(self.socket, name)
|
return getattr(self.socket, name)
|
||||||
|
|
||||||
class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
|
class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
|
||||||
rpc_paths = map(lambda s: '/xmlrpc/%s' % s, SERVICES.keys())
|
rpc_paths = map(lambda s: '/xmlrpc/%s' % s, GROUPS.get('web-services', {}).keys())
|
||||||
|
|
||||||
class SecureXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
class SecureXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
|
|
|
@ -641,6 +641,17 @@ class function(_column):
|
||||||
else:
|
else:
|
||||||
res = self._fnct(cr, obj._table, ids, name, self._arg, context)
|
res = self._fnct(cr, obj._table, ids, name, self._arg, context)
|
||||||
|
|
||||||
|
if self._type == "many2one" :
|
||||||
|
# Filtering only integer/long values if passed
|
||||||
|
res_ids = [x for x in res.values() if x and isinstance(x, (int,long))]
|
||||||
|
|
||||||
|
if res_ids:
|
||||||
|
obj_model = obj.pool.get(self._obj)
|
||||||
|
dict_names = dict(obj_model.name_get(cr, user, res_ids, context))
|
||||||
|
for r in res.keys():
|
||||||
|
if res[r] and res[r] in dict_names:
|
||||||
|
res[r] = (res[r], dict_names[res[r]])
|
||||||
|
|
||||||
if self._type == 'binary' and context.get('bin_size', False):
|
if self._type == 'binary' and context.get('bin_size', False):
|
||||||
# convert the data returned by the function with the size of that data...
|
# convert the data returned by the function with the size of that data...
|
||||||
res = dict(map(lambda (x, y): (x, tools.human_size(len(y or ''))), res.items()))
|
res = dict(map(lambda (x, y): (x, tools.human_size(len(y or ''))), res.items()))
|
||||||
|
|
|
@ -533,7 +533,7 @@ class orm_template(object):
|
||||||
warning = ''
|
warning = ''
|
||||||
warning_fields = []
|
warning_fields = []
|
||||||
for field in fields_export:
|
for field in fields_export:
|
||||||
if imp_comp and len(field)>1:
|
if imp_comp and len(field)>1:
|
||||||
warning_fields.append('/'.join(map(lambda x:x in cols and cols[x].string or x,field)))
|
warning_fields.append('/'.join(map(lambda x:x in cols and cols[x].string or x,field)))
|
||||||
elif len (field) <=1:
|
elif len (field) <=1:
|
||||||
if imp_comp and cols.get(field and field[0],False):
|
if imp_comp and cols.get(field and field[0],False):
|
||||||
|
@ -556,12 +556,20 @@ class orm_template(object):
|
||||||
fields = map(lambda x: x.split('/'), fields)
|
fields = map(lambda x: x.split('/'), fields)
|
||||||
logger = netsvc.Logger()
|
logger = netsvc.Logger()
|
||||||
ir_model_data_obj = self.pool.get('ir.model.data')
|
ir_model_data_obj = self.pool.get('ir.model.data')
|
||||||
|
|
||||||
|
def _check_db_id(self, model_name, db_id):
|
||||||
|
obj_model = self.pool.get(model_name)
|
||||||
|
ids = obj_model.search(cr, uid, [('id','=',int(db_id))])
|
||||||
|
if not len(ids):
|
||||||
|
raise Exception(_("Database ID doesn't exist: %s : %s") %(model_name, db_id))
|
||||||
|
return True
|
||||||
|
|
||||||
def process_liness(self, datas, prefix, current_module, model_name, fields_def, position=0):
|
def process_liness(self, datas, prefix, current_module, model_name, fields_def, position=0):
|
||||||
line = datas[position]
|
line = datas[position]
|
||||||
row = {}
|
row = {}
|
||||||
translate = {}
|
translate = {}
|
||||||
todo = []
|
todo = []
|
||||||
warning = ''
|
warning = []
|
||||||
data_id = False
|
data_id = False
|
||||||
data_res_id = False
|
data_res_id = False
|
||||||
is_xml_id = False
|
is_xml_id = False
|
||||||
|
@ -575,7 +583,37 @@ class orm_template(object):
|
||||||
raise Exception(_('Please check that all your lines have %d columns.') % (len(fields),))
|
raise Exception(_('Please check that all your lines have %d columns.') % (len(fields),))
|
||||||
if not line[i]:
|
if not line[i]:
|
||||||
continue
|
continue
|
||||||
field = fields[i]
|
field = fields[i]
|
||||||
|
if (len(field)==len(prefix)+1) and field[len(prefix)].endswith(':db_id'):
|
||||||
|
# Database ID
|
||||||
|
res = False
|
||||||
|
if line[i]:
|
||||||
|
field_name = field[0].split(':')[0]
|
||||||
|
model_rel = fields_def[field_name]['relation']
|
||||||
|
|
||||||
|
if fields_def[field[len(prefix)][:-6]]['type']=='many2many':
|
||||||
|
res_id = []
|
||||||
|
for db_id in line[i].split(config.get('csv_internal_sep')):
|
||||||
|
try:
|
||||||
|
_check_db_id(self, model_rel, db_id)
|
||||||
|
res_id.append(db_id)
|
||||||
|
except Exception,e:
|
||||||
|
warning += [tools.exception_to_unicode(e)]
|
||||||
|
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
||||||
|
tools.exception_to_unicode(e))
|
||||||
|
if len(res_id):
|
||||||
|
res = [(6, 0, res_id)]
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
_check_db_id(self, model_rel, line[i])
|
||||||
|
res = line[i]
|
||||||
|
except Exception,e:
|
||||||
|
warning += [tools.exception_to_unicode(e)]
|
||||||
|
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
||||||
|
tools.exception_to_unicode(e))
|
||||||
|
row[field_name] = res or False
|
||||||
|
continue
|
||||||
|
|
||||||
if (len(field)==len(prefix)+1) and field[len(prefix)].endswith(':id'):
|
if (len(field)==len(prefix)+1) and field[len(prefix)].endswith(':id'):
|
||||||
res_id = False
|
res_id = False
|
||||||
if line[i]:
|
if line[i]:
|
||||||
|
@ -630,30 +668,21 @@ class orm_template(object):
|
||||||
ir_model_data_obj.create(cr, uid, {'module':module, 'model':model_name, 'name':name, 'res_id':is_db_id})
|
ir_model_data_obj.create(cr, uid, {'module':module, 'model':model_name, 'name':name, 'res_id':is_db_id})
|
||||||
db_id = is_db_id
|
db_id = is_db_id
|
||||||
if is_db_id and int(db_id) != int(is_db_id):
|
if is_db_id and int(db_id) != int(is_db_id):
|
||||||
warning += ("Id is not the same than existing one: " + str(is_db_id) + " !\n")
|
warning += [_("Id is not the same than existing one: %s")%(is_db_id)]
|
||||||
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
||||||
"Id is not the same than existing one: " + str(is_db_id) + ' !\n')
|
_("Id is not the same than existing one: %s")%(is_db_id))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if field[len(prefix)] == "db_id":
|
if field[len(prefix)] == "db_id":
|
||||||
# Database ID
|
# Database ID
|
||||||
try:
|
try:
|
||||||
line[i]= int(line[i])
|
_check_db_id(self, model_name, line[i])
|
||||||
except Exception, e:
|
data_res_id = is_db_id = int(line[i])
|
||||||
warning += (str(e) + "!\n")
|
except Exception,e:
|
||||||
|
warning += [tools.exception_to_unicode(e)]
|
||||||
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
||||||
str(e) + '!\n')
|
tools.exception_to_unicode(e))
|
||||||
continue
|
continue
|
||||||
is_db_id = line[i]
|
|
||||||
obj_model = self.pool.get(model_name)
|
|
||||||
ids = obj_model.search(cr, uid, [('id','=',line[i])])
|
|
||||||
if not len(ids):
|
|
||||||
warning += ("Database ID doesn't exist: " + model_name + ": " + str(line[i]) + " !\n")
|
|
||||||
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
|
||||||
"Database ID doesn't exist: " + model_name + ": " + str(line[i]) + ' !\n')
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
data_res_id = ids[0]
|
|
||||||
data_ids = ir_model_data_obj.search(cr, uid, [('model','=',model_name),('res_id','=',line[i])])
|
data_ids = ir_model_data_obj.search(cr, uid, [('model','=',model_name),('res_id','=',line[i])])
|
||||||
if len(data_ids):
|
if len(data_ids):
|
||||||
d = ir_model_data_obj.read(cr, uid, data_ids, ['name','module'])[0]
|
d = ir_model_data_obj.read(cr, uid, data_ids, ['name','module'])[0]
|
||||||
|
@ -665,9 +694,9 @@ class orm_template(object):
|
||||||
if is_xml_id and not data_id:
|
if is_xml_id and not data_id:
|
||||||
data_id = is_xml_id
|
data_id = is_xml_id
|
||||||
if is_xml_id and is_xml_id!=data_id:
|
if is_xml_id and is_xml_id!=data_id:
|
||||||
warning += ("Id is not the same than existing one: " + str(line[i]) + " !\n")
|
warning += [_("Id is not the same than existing one: %s")%(line[i])]
|
||||||
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
logger.notifyChannel("import", netsvc.LOG_ERROR,
|
||||||
"Id is not the same than existing one: " + str(line[i]) + ' !\n')
|
_("Id is not the same than existing one: %s")%(line[i]))
|
||||||
|
|
||||||
continue
|
continue
|
||||||
if fields_def[field[len(prefix)]]['type'] == 'integer':
|
if fields_def[field[len(prefix)]]['type'] == 'integer':
|
||||||
|
@ -690,10 +719,10 @@ class orm_template(object):
|
||||||
break
|
break
|
||||||
if line[i] and not res:
|
if line[i] and not res:
|
||||||
logger.notifyChannel("import", netsvc.LOG_WARNING,
|
logger.notifyChannel("import", netsvc.LOG_WARNING,
|
||||||
"key '%s' not found in selection field '%s'" % \
|
_("key '%s' not found in selection field '%s'") % \
|
||||||
(line[i], field[len(prefix)]))
|
(line[i], field[len(prefix)]))
|
||||||
|
|
||||||
warning += "Key/value '"+ str(line[i]) +"' not found in selection field '"+str(field[len(prefix)])+"'"
|
warning += [_("Key/value '%s' not found in selection field '%s'")%(line[i],field[len(prefix)])]
|
||||||
|
|
||||||
elif fields_def[field[len(prefix)]]['type']=='many2one':
|
elif fields_def[field[len(prefix)]]['type']=='many2one':
|
||||||
res = False
|
res = False
|
||||||
|
@ -703,11 +732,9 @@ class orm_template(object):
|
||||||
line[i], [], operator='=', context=context)
|
line[i], [], operator='=', context=context)
|
||||||
res = (res2 and res2[0][0]) or False
|
res = (res2 and res2[0][0]) or False
|
||||||
if not res:
|
if not res:
|
||||||
warning += ('Relation not found: ' + line[i] + \
|
warning += [_("Relation not found: %s on '%s'")%(line[i],relation)]
|
||||||
' on ' + relation + ' !\n')
|
|
||||||
logger.notifyChannel("import", netsvc.LOG_WARNING,
|
logger.notifyChannel("import", netsvc.LOG_WARNING,
|
||||||
'Relation not found: ' + line[i] + \
|
_("Relation not found: %s on '%s'")%(line[i],relation))
|
||||||
' on ' + relation + ' !\n')
|
|
||||||
elif fields_def[field[len(prefix)]]['type']=='many2many':
|
elif fields_def[field[len(prefix)]]['type']=='many2many':
|
||||||
res = []
|
res = []
|
||||||
if line[i]:
|
if line[i]:
|
||||||
|
@ -717,12 +744,10 @@ class orm_template(object):
|
||||||
uid, word, [], operator='=', context=context)
|
uid, word, [], operator='=', context=context)
|
||||||
res3 = (res2 and res2[0][0]) or False
|
res3 = (res2 and res2[0][0]) or False
|
||||||
if not res3:
|
if not res3:
|
||||||
warning += ('Relation not found: ' + \
|
warning += [_("Relation not found: %s on '%s'")%(line[i],relation)]
|
||||||
line[i] + ' on '+relation + ' !\n')
|
|
||||||
logger.notifyChannel("import",
|
logger.notifyChannel("import",
|
||||||
netsvc.LOG_WARNING,
|
netsvc.LOG_WARNING,
|
||||||
'Relation not found: ' + line[i] + \
|
_("Relation not found: %s on '%s'")%(line[i],relation))
|
||||||
' on '+relation + ' !\n')
|
|
||||||
else:
|
else:
|
||||||
res.append(res3)
|
res.append(res3)
|
||||||
if len(res):
|
if len(res):
|
||||||
|
@ -787,9 +812,9 @@ class orm_template(object):
|
||||||
#try:
|
#try:
|
||||||
(res, other, warning, translate, data_id, res_id) = \
|
(res, other, warning, translate, data_id, res_id) = \
|
||||||
process_liness(self, datas, [], current_module, self._name, fields_def)
|
process_liness(self, datas, [], current_module, self._name, fields_def)
|
||||||
if warning:
|
if len(warning):
|
||||||
cr.rollback()
|
cr.rollback()
|
||||||
return (-1, res, 'Line ' + str(counter) +' : ' + warning, '')
|
return (-1, res, 'Line ' + str(counter) +' : ' + '!\n'.join(warning), '')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
id = ir_model_data_obj._update(cr, uid, self._name,
|
id = ir_model_data_obj._update(cr, uid, self._name,
|
||||||
|
@ -798,7 +823,7 @@ class orm_template(object):
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
import psycopg2
|
import psycopg2
|
||||||
if isinstance(e,psycopg2.IntegrityError):
|
if isinstance(e,psycopg2.IntegrityError):
|
||||||
msg= 'Insertion Failed!'
|
msg= _('Insertion Failed!')
|
||||||
for key in self.pool._sql_error.keys():
|
for key in self.pool._sql_error.keys():
|
||||||
if key in e[0]:
|
if key in e[0]:
|
||||||
msg = self.pool._sql_error[key]
|
msg = self.pool._sql_error[key]
|
||||||
|
|
|
@ -86,7 +86,6 @@ class osv_pool(netsvc.Service):
|
||||||
self._init = True
|
self._init = True
|
||||||
self._init_parent = {}
|
self._init_parent = {}
|
||||||
netsvc.Service.__init__(self, 'object_proxy', audience='')
|
netsvc.Service.__init__(self, 'object_proxy', audience='')
|
||||||
self.joinGroup('web-services')
|
|
||||||
self.exportMethod(self.obj_list)
|
self.exportMethod(self.obj_list)
|
||||||
self.exportMethod(self.exec_workflow)
|
self.exportMethod(self.exec_workflow)
|
||||||
self.exportMethod(self.execute)
|
self.exportMethod(self.execute)
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
name = 'openerp-server'
|
name = 'openerp-server'
|
||||||
version = '5.0.3'
|
version = '5.0.4'
|
||||||
major_version = '5.0'
|
major_version = '5.0'
|
||||||
description = 'OpenERP Server'
|
description = 'OpenERP Server'
|
||||||
long_desc = '''\
|
long_desc = '''\
|
||||||
|
|
|
@ -209,7 +209,6 @@ class document(object):
|
||||||
args = [self.eval(browser, arg) for arg in attrs['args'].split(',')]
|
args = [self.eval(browser, arg) for arg in attrs['args'].split(',')]
|
||||||
else:
|
else:
|
||||||
args = []
|
args = []
|
||||||
|
|
||||||
# get the object
|
# get the object
|
||||||
if attrs.has_key('model'):
|
if attrs.has_key('model'):
|
||||||
obj = self.pool.get(attrs['model'])
|
obj = self.pool.get(attrs['model'])
|
||||||
|
@ -232,6 +231,7 @@ class document(object):
|
||||||
newdatas = getattr(obj, attrs['name'])(self.cr, self.uid, ids, *args)
|
newdatas = getattr(obj, attrs['name'])(self.cr, self.uid, ids, *args)
|
||||||
|
|
||||||
def parse_result_tree(node, parent, datas):
|
def parse_result_tree(node, parent, datas):
|
||||||
|
if not node.tag == etree.Comment:
|
||||||
el = etree.Element(node.tag)
|
el = etree.Element(node.tag)
|
||||||
parent.append(el)
|
parent.append(el)
|
||||||
atr = self.node_attrs_get(node)
|
atr = self.node_attrs_get(node)
|
||||||
|
@ -251,7 +251,6 @@ class document(object):
|
||||||
|
|
||||||
elif attrs['type']=='zoom':
|
elif attrs['type']=='zoom':
|
||||||
value = self.get_value(browser, attrs['name'])
|
value = self.get_value(browser, attrs['name'])
|
||||||
|
|
||||||
if value:
|
if value:
|
||||||
if not isinstance(value, list):
|
if not isinstance(value, list):
|
||||||
v_list = [value]
|
v_list = [value]
|
||||||
|
@ -264,12 +263,16 @@ class document(object):
|
||||||
self.parse_node(el_cld, el, v)
|
self.parse_node(el_cld, el, v)
|
||||||
else:
|
else:
|
||||||
# if there is no "type" attribute in the node, copy it to the xml data and parse its childs
|
# if there is no "type" attribute in the node, copy it to the xml data and parse its childs
|
||||||
for el_cld in node:
|
if not node.tag == etree.Comment:
|
||||||
self.parse_node(el_cld, parent, browser)
|
if node.tag == parent.tag:
|
||||||
|
el = parent
|
||||||
|
else:
|
||||||
|
el = etree.Element(node.tag)
|
||||||
|
parent.append(el)
|
||||||
|
for el_cld in node:
|
||||||
|
self.parse_node(el_cld,el, browser)
|
||||||
def xml_get(self):
|
def xml_get(self):
|
||||||
#return self.doc.toxml('utf-8')
|
return etree.tostring(self.doc,encoding="utf-8",xml_declaration=True,pretty_print=True)
|
||||||
return etree.tostring(self.doc,encoding="utf-8",xml_declaration=True)
|
|
||||||
|
|
||||||
def parse_tree(self, ids, model, context=None):
|
def parse_tree(self, ids, model, context=None):
|
||||||
if not context:
|
if not context:
|
||||||
|
@ -282,7 +285,6 @@ class document(object):
|
||||||
context={}
|
context={}
|
||||||
# parses the xml template to memory
|
# parses the xml template to memory
|
||||||
self.dom = etree.XML(xml)
|
self.dom = etree.XML(xml)
|
||||||
|
|
||||||
# create the xml data from the xml template
|
# create the xml data from the xml template
|
||||||
self.parse_tree(ids, model, context)
|
self.parse_tree(ids, model, context)
|
||||||
|
|
||||||
|
|
|
@ -785,12 +785,12 @@ class _rml_template(object):
|
||||||
r = _rml_flowable(self.doc,self.localcontext, images=self.images, path=self.path, title=self.title)
|
r = _rml_flowable(self.doc,self.localcontext, images=self.images, path=self.path, title=self.title)
|
||||||
story_cnt = 0
|
story_cnt = 0
|
||||||
for node_story in node_stories:
|
for node_story in node_stories:
|
||||||
|
if story_cnt > 0:
|
||||||
|
fis.append(platypus.PageBreak())
|
||||||
fis += r.render(node_story)
|
fis += r.render(node_story)
|
||||||
if self.localcontext:
|
story_cnt += 1
|
||||||
story_cnt += 1
|
if self.localcontext:
|
||||||
if story_cnt == len(self.localcontext['objects']):
|
fis.append(PageCount())
|
||||||
fis.append(PageCount())
|
|
||||||
fis.append(platypus.PageBreak())
|
|
||||||
self.doc_tmpl.build(fis)
|
self.doc_tmpl.build(fis)
|
||||||
|
|
||||||
def parseNode(rml, localcontext = {},fout=None, images={}, path='.',title=None):
|
def parseNode(rml, localcontext = {},fout=None, images={}, path='.',title=None):
|
||||||
|
|
|
@ -97,7 +97,7 @@ def _child_get(node, self=None, tagname=None):
|
||||||
|
|
||||||
def _process_text(self, txt):
|
def _process_text(self, txt):
|
||||||
if not self.localcontext:
|
if not self.localcontext:
|
||||||
return txt
|
return str2xml(txt)
|
||||||
if not txt:
|
if not txt:
|
||||||
return ''
|
return ''
|
||||||
result = ''
|
result = ''
|
||||||
|
|
|
@ -796,6 +796,7 @@ def get_languages():
|
||||||
'es_AR': u'Spanish (AR) / Español (AR)',
|
'es_AR': u'Spanish (AR) / Español (AR)',
|
||||||
'es_ES': u'Spanish / Español',
|
'es_ES': u'Spanish / Español',
|
||||||
'et_EE': u'Estonian / Eesti keel',
|
'et_EE': u'Estonian / Eesti keel',
|
||||||
|
'fi_FI': u'Finland / Suomi',
|
||||||
'fr_BE': u'French (BE) / Français (BE)',
|
'fr_BE': u'French (BE) / Français (BE)',
|
||||||
'fr_CH': u'French (CH) / Français (CH)',
|
'fr_CH': u'French (CH) / Français (CH)',
|
||||||
'fr_FR': u'French / Français',
|
'fr_FR': u'French / Français',
|
||||||
|
@ -812,12 +813,14 @@ def get_languages():
|
||||||
'ro_RO': u'Romanian / limba română',
|
'ro_RO': u'Romanian / limba română',
|
||||||
'ru_RU': u'Russian / русский язык',
|
'ru_RU': u'Russian / русский язык',
|
||||||
'sl_SL': u'Slovenian / slovenščina',
|
'sl_SL': u'Slovenian / slovenščina',
|
||||||
|
'sq_AL': u'Albanian / Shqipëri',
|
||||||
'sv_SE': u'Swedish / svenska',
|
'sv_SE': u'Swedish / svenska',
|
||||||
'tr_TR': u'Turkish / Türkçe',
|
'tr_TR': u'Turkish / Türkçe',
|
||||||
|
'vi_VN': u'Vietnam / Cộng hòa xã hội chủ nghĩa Việt Nam',
|
||||||
'uk_UA': u'Ukrainian / украї́нська мо́ва',
|
'uk_UA': u'Ukrainian / украї́нська мо́ва',
|
||||||
'zh_CN': u'Chinese (CN) / 简体中文' ,
|
'zh_CN': u'Chinese (CN) / 简体中文',
|
||||||
'zh_TW': u'Chinese (TW) / 正體字',
|
'zh_TW': u'Chinese (TW) / 正體字',
|
||||||
"th_TH": u"Thai / ภาษาไทย"
|
'th_TH': u'Thai / ภาษาไทย',
|
||||||
}
|
}
|
||||||
return languages
|
return languages
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,62 @@
|
||||||
2009-08-21: 5.0.2
|
2009-08-28: 5.0.4
|
||||||
|
=================
|
||||||
|
|
||||||
|
Bugfixes (server)
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* Not linked to a bug report:
|
||||||
|
* no traceback when access denied
|
||||||
|
* Security fix
|
||||||
|
* remove bad translation files (bad name)
|
||||||
|
* Pagecount problem while all objects print on same page and printing special character on xsl report
|
||||||
|
* https://launchpad.net/bugs/415973
|
||||||
|
* import: support "<rel_field>:db_id" , better warning message
|
||||||
|
* https://launchpad.net/bugs/415391
|
||||||
|
* Functional fields with M2O relation can be printed on print screen now
|
||||||
|
* https://launchpad.net/bugs/415334
|
||||||
|
* ir_cron :function and its arguements are now editable
|
||||||
|
|
||||||
|
|
||||||
|
Improvements (server)
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* replace partner name and address in demo
|
||||||
|
* add translation names
|
||||||
|
* update translations files
|
||||||
|
* new translations
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes (addons)
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* Not linked to a bug report:
|
||||||
|
* Document : error on create if attachment not specified
|
||||||
|
* report_dcoument : changed the misleading name of action
|
||||||
|
* point_of_sale: fixed a wrong domain
|
||||||
|
* sale: bad indentation
|
||||||
|
* https://launchpad.net/bugs/416807
|
||||||
|
* report_document : Dashboard should not display partner with no files
|
||||||
|
* https://launchpad.net/bugs/401110
|
||||||
|
* Audittrail : Logs set in descending order
|
||||||
|
* https://launchpad.net/bugs/418541
|
||||||
|
* Project : Delegated tasks from O2M didnt have project_id
|
||||||
|
* https://launchpad.net/bugs/416767
|
||||||
|
* Account_tax_include : onchange of product on invoice line price type issue
|
||||||
|
|
||||||
|
|
||||||
|
Improvements (addons)
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* update translations
|
||||||
|
* base_module_quality: make minimal score for all test, add message if the score is below limit,varible for whether to activate the test or not
|
||||||
|
* process view node now links to parent document directory if no record selected.
|
||||||
|
* purchase: Merge purchases wizard: added keyword='client_action_multi'
|
||||||
|
* Auction : improved code
|
||||||
|
* Auction : improved auction reports
|
||||||
|
* Age Partner Balance report executed 7 queries per partner, reduced this a total of 7 queries in total.
|
||||||
|
|
||||||
|
|
||||||
|
2009-08-21: 5.0.3
|
||||||
=================
|
=================
|
||||||
|
|
||||||
Bugfixes (server)
|
Bugfixes (server)
|
||||||
|
@ -15,7 +73,6 @@ Bugfixes (server)
|
||||||
* security issue: avoid access to inactive users
|
* security issue: avoid access to inactive users
|
||||||
* security issue: avoid access with 'None' password (Thanks to P. Christeas for the bug report)
|
* security issue: avoid access with 'None' password (Thanks to P. Christeas for the bug report)
|
||||||
* avoid a bug when look in stack when translate code strings
|
* avoid a bug when look in stack when translate code strings
|
||||||
|
|
||||||
* https://launchpad.net/bugs/415257
|
* https://launchpad.net/bugs/415257
|
||||||
* import of boolean fields in csv files.
|
* import of boolean fields in csv files.
|
||||||
* https://launchpad.net/bugs/415014
|
* https://launchpad.net/bugs/415014
|
||||||
|
@ -55,7 +112,6 @@ Bugfixes (addons)
|
||||||
* Module:account Fix keyerror in general_ledger report
|
* Module:account Fix keyerror in general_ledger report
|
||||||
* Access rules stock / worker
|
* Access rules stock / worker
|
||||||
* mrp: fr_FR.po file had a duplicate message definition
|
* mrp: fr_FR.po file had a duplicate message definition
|
||||||
|
|
||||||
* https://launchpad.net/bugs/413699
|
* https://launchpad.net/bugs/413699
|
||||||
* https://launchpad.net/bugs/415014
|
* https://launchpad.net/bugs/415014
|
||||||
* report_task: regenerate translations files
|
* report_task: regenerate translations files
|
||||||
|
@ -123,7 +179,6 @@ Bugfixes (server)
|
||||||
* expression: correct the generated sql in case of _inherits
|
* expression: correct the generated sql in case of _inherits
|
||||||
* the <delete> tag doesn't crash if the referenced id does not exists
|
* the <delete> tag doesn't crash if the referenced id does not exists
|
||||||
* closed file pointer
|
* closed file pointer
|
||||||
|
|
||||||
* https://launchpad.net/bugs/380221
|
* https://launchpad.net/bugs/380221
|
||||||
* https://launchpad.net/bugs/403652
|
* https://launchpad.net/bugs/403652
|
||||||
* https://launchpad.net/bugs/369947
|
* https://launchpad.net/bugs/369947
|
||||||
|
@ -288,7 +343,6 @@ Bugfixes (addons)
|
||||||
* account_balance Module : Fix the Total problem and Put Indentation in Reports.C
|
* account_balance Module : Fix the Total problem and Put Indentation in Reports.C
|
||||||
* onchange of product_id on stock move corrected
|
* onchange of product_id on stock move corrected
|
||||||
* correct display of pyflakes result quality module
|
* correct display of pyflakes result quality module
|
||||||
|
|
||||||
* https://launchpad.net/bugs/310458
|
* https://launchpad.net/bugs/310458
|
||||||
* Simplify Migrations
|
* Simplify Migrations
|
||||||
* https://launchpad.net/bugs/382641
|
* https://launchpad.net/bugs/382641
|
||||||
|
|
Loading…
Reference in New Issue