diff --git a/MANIFEST.in b/MANIFEST.in
index b25045b8213..84ed45985a9 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,7 +9,8 @@ include bin/server.pkey
include bin/gpl.txt
include man/openerp-server.1
include man/openerp_serverrc.5
-recursive-include pixmaps
+recursive-include pixmaps *
+recursive-include win32 *
recursive-include doc *
recursive-include bin *xml *xsl *sql *rml *sxw *csv *rng
graft bin/addons/
diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml
index edafae1af1c..1169798fe8e 100644
--- a/bin/addons/base/ir/ir.xml
+++ b/bin/addons/base/ir/ir.xml
@@ -1302,14 +1302,14 @@
-
+
-
+
diff --git a/bin/addons/base/ir/ir_actions.py b/bin/addons/base/ir/ir_actions.py
index dd5cbc833b4..6c51ab2f771 100644
--- a/bin/addons/base/ir/ir_actions.py
+++ b/bin/addons/base/ir/ir_actions.py
@@ -455,7 +455,7 @@ class actions_server(osv.osv):
'type': lambda *a: 'ir.actions.server',
'sequence': lambda *a: 5,
'code': lambda *a: """# You can use the following variables
-# - object
+# - object or obj
# - time
# - cr
# - uid
@@ -532,7 +532,6 @@ class actions_server(osv.osv):
def run(self, cr, uid, ids, context={}):
logger = netsvc.Logger()
-
for action in self.browse(cr, uid, ids, context):
obj_pool = self.pool.get(action.model_id.model)
obj = obj_pool.browse(cr, uid, context['active_id'], context=context)
@@ -554,19 +553,26 @@ class actions_server(osv.osv):
return self.pool.get(action.action_id.type)\
.read(cr, uid, action.action_id.id, context=context)
- if action.state == 'code':
- localdict = {
- 'self': self.pool.get(action.model_id.model),
- 'context': context,
- 'time': time,
- 'ids': ids,
- 'cr': cr,
- 'uid': uid,
- 'object':obj
- }
- exec action.code in localdict
- if 'action' in localdict:
- return localdict['action']
+ if config['server_actions_allow_code']:
+ localdict = {
+ 'self': self.pool.get(action.model_id.model),
+ 'context': context,
+ 'time': time,
+ 'ids': ids,
+ 'cr': cr,
+ 'uid': uid,
+ 'object':obj,
+ 'obj': obj,
+ }
+ exec action.code in localdict
+ if 'action' in localdict:
+ return localdict['action']
+ else:
+ netsvc.Logger().notifyChannel(
+ self._name, netsvc.LOG_ERROR,
+ "%s is a `code` server action, but "
+ "it isn't allowed in this configuration.\n\n"
+ "See server options to enable it"%action)
if action.state == 'email':
user = config['email_from']
@@ -580,7 +586,7 @@ class actions_server(osv.osv):
logger.notifyChannel('email', netsvc.LOG_INFO, 'Partner Email address not Specified!')
continue
if not user:
- raise osv.except_osv(_('Error'), _("Please specify server option --smtp-from !"))
+ raise osv.except_osv(_('Error'), _("Please specify server option --email-from !"))
subject = self.merge_message(cr, uid, action.subject, action, context)
body = self.merge_message(cr, uid, action.message, action, context)
diff --git a/bin/addons/base/ir/ir_cron.py b/bin/addons/base/ir/ir_cron.py
index dcf76945904..66ead94be48 100644
--- a/bin/addons/base/ir/ir_cron.py
+++ b/bin/addons/base/ir/ir_cron.py
@@ -146,16 +146,19 @@ class ir_cron(osv.osv, netsvc.Agent):
def create(self, cr, uid, vals, context=None):
res = super(ir_cron, self).create(cr, uid, vals, context=context)
cr.commit()
+ self.cancel(cr.dbname)
self._poolJobs(cr.dbname)
return res
def write(self, cr, user, ids, vals, context=None):
res = super(ir_cron, self).write(cr, user, ids, vals, context=context)
cr.commit()
+ self.cancel(cr.dbname)
self._poolJobs(cr.dbname)
return res
def unlink(self, cr, uid, ids, context=None):
res = super(ir_cron, self).unlink(cr, uid, ids, context=context)
cr.commit()
+ self.cancel(cr.dbname)
self._poolJobs(cr.dbname)
return res
ir_cron()
diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py
index f6412e85b75..888432e7968 100644
--- a/bin/addons/base/ir/ir_model.py
+++ b/bin/addons/base/ir/ir_model.py
@@ -82,6 +82,8 @@ class ir_model(osv.osv):
return super(ir_model,self).write(cr, user, ids, vals, context)
def create(self, cr, user, vals, context=None):
+ if context is None:
+ context = {}
if context and context.get('manual',False):
vals['state']='manual'
res = super(ir_model,self).create(cr, user, vals, context)
@@ -260,6 +262,8 @@ class ir_model_fields(osv.osv):
if 'model_id' in vals:
model_data = self.pool.get('ir.model').browse(cr, user, vals['model_id'])
vals['model'] = model_data.model
+ if context is None:
+ context = {}
if context and context.get('manual',False):
vals['state'] = 'manual'
res = super(ir_model_fields,self).create(cr, user, vals, context)
@@ -267,7 +271,7 @@ class ir_model_fields(osv.osv):
if not vals['name'].startswith('x_'):
raise except_orm(_('Error'), _("Custom fields must have a name that starts with 'x_' !"))
- if 'relation' in vals and not self.pool.get('ir.model').search(cr, user, [('model','=',vals['relation'])]):
+ if vals.get('relation',False) and not self.pool.get('ir.model').search(cr, user, [('model','=',vals['relation'])]):
raise except_orm(_('Error'), _("Model %s Does not Exist !" % vals['relation']))
if self.pool.get(vals['model']):
@@ -286,7 +290,7 @@ class ir_model_access(osv.osv):
_columns = {
'name': fields.char('Name', size=64, required=True),
'model_id': fields.many2one('ir.model', 'Object', required=True),
- 'group_id': fields.many2one('res.groups', 'Group'),
+ 'group_id': fields.many2one('res.groups', 'Group', ondelete='cascade'),
'perm_read': fields.boolean('Read Access'),
'perm_write': fields.boolean('Write Access'),
'perm_create': fields.boolean('Create Access'),
@@ -453,7 +457,7 @@ class ir_model_data(osv.osv):
def _get_id(self, cr, uid, module, xml_id):
ids = self.search(cr, uid, [('module','=',module),('name','=', xml_id)])
if not ids:
- raise Exception('No references to %s.%s' % (module, xml_id))
+ raise ValueError('No references to %s.%s' % (module, xml_id))
# the sql constraints ensure us we have only one result
return ids[0]
diff --git a/bin/addons/base/ir/ir_translation.py b/bin/addons/base/ir/ir_translation.py
index 73536ac339f..8e575b6b242 100644
--- a/bin/addons/base/ir/ir_translation.py
+++ b/bin/addons/base/ir/ir_translation.py
@@ -150,8 +150,8 @@ class ir_translation(osv.osv):
if not context:
context = {}
ids = super(ir_translation, self).create(cursor, user, vals, context=context)
- for trans_obj in self.read(cursor, user, [ids], ['name','type','res_id'], context=context):
- self._get_source.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], lang=context.get('lang','en_US'))
+ for trans_obj in self.read(cursor, user, [ids], ['name','type','res_id','src','lang'], context=context):
+ self._get_source.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], trans_obj['lang'], source=trans_obj['src'])
self._get_ids.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], context.get('lang','en_US'), [trans_obj['res_id']])
return ids
@@ -159,16 +159,16 @@ class ir_translation(osv.osv):
if not context:
context = {}
result = super(ir_translation, self).write(cursor, user, ids, vals, context=context)
- for trans_obj in self.read(cursor, user, ids, ['name','type','res_id'], context=context):
- self._get_source.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], lang=context.get('lang','en_US'))
+ for trans_obj in self.read(cursor, user, ids, ['name','type','res_id','src','lang'], context=context):
+ self._get_source.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], trans_obj['lang'], source=trans_obj['src'])
self._get_ids.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], context.get('lang','en_US'), [trans_obj['res_id']])
return result
def unlink(self, cursor, user, ids, context=None):
if not context:
context = {}
- for trans_obj in self.read(cursor, user, ids, ['name','type','res_id'], context=context):
- self._get_source.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], lang=context.get('lang','en_US'))
+ for trans_obj in self.read(cursor, user, ids, ['name','type','res_id','src','lang'], context=context):
+ self._get_source.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], trans_obj['lang'], source=trans_obj['src'])
self._get_ids.clear_cache(cursor.dbname, user, trans_obj['name'], trans_obj['type'], context.get('lang','en_US'), [trans_obj['res_id']])
result = super(ir_translation, self).unlink(cursor, user, ids, context=context)
return result
diff --git a/bin/addons/base/ir/ir_ui_menu.py b/bin/addons/base/ir/ir_ui_menu.py
index a33686e1eb9..87afaf821fe 100644
--- a/bin/addons/base/ir/ir_ui_menu.py
+++ b/bin/addons/base/ir/ir_ui_menu.py
@@ -31,6 +31,10 @@ def one_in(setA, setB):
return True
return False
+def cond(C, X, Y):
+ if C: return X
+ return Y
+
class many2many_unique(fields.many2many):
def set(self, cr, obj, id, name, values, user=None, context=None):
if not values:
@@ -63,19 +67,24 @@ class ir_ui_menu(osv.osv):
# radical but this doesn't frequently happen
self._cache = {}
- def search(self, cr, uid, args, offset=0, limit=2000, order=None,
- context=None, count=False):
- if context is None:
- context = {}
- ids = osv.orm.orm.search(self, cr, uid, args, offset, limit, order, context=context, count=(count and uid==1))
+ def search(self, cr, uid, args, offset=0, limit=None, order=None,
+ context=None, count=False):
+
+ super_offset = cond(uid == 1, offset, 0)
+ super_limit = cond(uid == 1, limit, None)
+ super_count = cond(uid == 1, count, False)
+
+ ids = super(ir_ui_menu, self).search(cr, uid, args, super_offset,
+ super_limit, order,
+ context=context, count=super_count)
+ if uid == 1 or count:
+ return ids
if not ids:
if count:
return 0
return []
- if count and ids:
- return ids
modelaccess = self.pool.get('ir.model.access')
user_groups = set(self.pool.get('res.users').read(cr, 1, uid, ['groups_id'])['groups_id'])
@@ -123,6 +132,11 @@ class ir_ui_menu(osv.osv):
result.append(menu.id)
self._cache[key] = True
+ if offset:
+ result = result[long(offset):]
+ if limit:
+ result = result[:long(limit)]
+
if count:
return len(result)
return result
diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py
index b04343e821f..a4b6923c672 100644
--- a/bin/addons/base/ir/ir_ui_view.py
+++ b/bin/addons/base/ir/ir_ui_view.py
@@ -200,6 +200,10 @@ class view_sc(osv.osv):
'resource': lambda *a: 'ir.ui.menu',
'user_id': lambda obj, cr, uid, context: uid,
}
+ _sql_constraints = [
+ ('shortcut_unique', 'unique(res_id, user_id)', 'Shortcut for this menu already exists!'),
+ ]
+
view_sc()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py
index 0a427427515..1f5f2393c19 100644
--- a/bin/addons/base/module/module.py
+++ b/bin/addons/base/module/module.py
@@ -146,11 +146,13 @@ class module(osv.osv):
], string='State', readonly=True),
'demo': fields.boolean('Demo data'),
'license': fields.selection([
- ('GPL-2', 'GPL-2'),
+ ('GPL-2', 'GPL Version 2'),
('GPL-2 or any later version', 'GPL-2 or later version'),
- ('GPL-3', 'GPL-3'),
+ ('GPL-3', 'GPL Version 3'),
('GPL-3 or any later version', 'GPL-3 or later version'),
- ('Other proprietary', 'Other proprietary')
+ ('AGPL-3', 'Affero GPL-3'),
+ ('Other OSI approved licence', 'Other OSI Approved Licence'),
+ ('Other proprietary', 'Other Proprietary')
], string='License', readonly=True),
'menus_by_module': fields.function(_get_views, method=True, string='Menus', type='text', multi="meta", store=True),
'reports_by_module': fields.function(_get_views, method=True, string='Reports', type='text', multi="meta", store=True),
@@ -161,7 +163,7 @@ class module(osv.osv):
_defaults = {
'state': lambda *a: 'uninstalled',
'demo': lambda *a: False,
- 'license': lambda *a: 'GPL-2',
+ 'license': lambda *a: 'AGPL-3',
}
_order = 'name'
diff --git a/bin/addons/base/res/partner/partner_demo.xml b/bin/addons/base/res/partner/partner_demo.xml
index f5d70a2490d..915ab903a3e 100644
--- a/bin/addons/base/res/partner/partner_demo.xml
+++ b/bin/addons/base/res/partner/partner_demo.xml
@@ -275,6 +275,26 @@
default
+
+ Wavre
+ Paul Lelitre
+ 5478
+ M.
+
+ 71 rue de Chimay
+ delivery
+
+
+
+ Wavre
+ Serge Lelitre
+ 5478
+ M.
+
+ 69 rue de Chimay
+ invoice
+
+ ParisArthur Grosbonnet
diff --git a/bin/addons/base/res/res_lang.py b/bin/addons/base/res/res_lang.py
index 8427b366703..66c1463eba9 100644
--- a/bin/addons/base/res/res_lang.py
+++ b/bin/addons/base/res/res_lang.py
@@ -60,11 +60,11 @@ class lang(osv.osv):
('name_uniq', 'unique (name)', 'The name of the language must be unique !'),
('code_uniq', 'unique (code)', 'The code of the language must be unique !'),
]
-
+
@tools.cache(skiparg=3)
def _lang_data_get(self, cr, uid, lang_id, monetary=False):
conv = localeconv()
- lang_obj=self.browse(cr,uid,lang_id)
+ lang_obj = self.browse(cr, uid, lang_id)
thousands_sep = lang_obj.thousands_sep or conv[monetary and 'mon_thousands_sep' or 'thousands_sep']
decimal_point = lang_obj.decimal_point
grouping = lang_obj.grouping
@@ -80,6 +80,7 @@ class lang(osv.osv):
if not grouping:
return (s, 0)
+
result = ""
seps = 0
spaces = ""
@@ -129,7 +130,7 @@ class lang(osv.osv):
parts = formatted.split('.')
if grouping:
- parts[0], seps = self._group(cr,uid,ids,parts[0], monetary=monetary, grouping=lang_grouping, thousands_sep=thousands_sep)
+ parts[0], seps = self._group(cr,uid,ids,parts[0], monetary=monetary, grouping=lang_grouping, thousands_sep=thousands_sep)
formatted = decimal_point.join(parts)
while seps:
diff --git a/bin/addons/base/res/res_security.xml b/bin/addons/base/res/res_security.xml
index 8aae3a40ae7..9d935ca3248 100644
--- a/bin/addons/base/res/res_security.xml
+++ b/bin/addons/base/res/res_security.xml
@@ -6,9 +6,13 @@
Partner Manager
-
-
-
+
+
+
+
+
+
+
diff --git a/bin/addons/base/res/res_user.py b/bin/addons/base/res/res_user.py
index 72be48dcf0a..1e5f142ee0c 100644
--- a/bin/addons/base/res/res_user.py
+++ b/bin/addons/base/res/res_user.py
@@ -106,10 +106,11 @@ roles()
def _lang_get(self, cr, uid, context={}):
obj = self.pool.get('res.lang')
- ids = obj.search(cr, uid, [])
+ ids = obj.search(cr, uid, [('translatable','=',True)])
res = obj.read(cr, uid, ids, ['code', 'name'], context)
res = [(r['code'], r['name']) for r in res]
return res
+
def _tz_get(self,cr,uid, context={}):
return [(x, x) for x in pytz.all_timezones]
@@ -245,6 +246,15 @@ class users(osv.osv):
result = override_password(result)
else:
result = map(override_password, result)
+
+ if isinstance(result, list):
+ for rec in result:
+ if not rec.get('action_id',True):
+ rec['action_id'] = (self._get_menu(cr, uid),'Menu')
+ else:
+ if not result.get('action_id',True):
+ result['action_id'] = (self._get_menu(cr, uid),'Menu')
+
return result
@@ -467,6 +477,13 @@ class groups2(osv.osv): ##FIXME: Is there a reason to inherit this object ?
_columns = {
'users': fields.many2many('res.users', 'res_groups_users_rel', 'gid', 'uid', 'Users'),
}
+
+ def unlink(self, cr, uid, ids, context=None):
+ for record in self.read(cr, uid, ids, ['users'], context=context):
+ if record['users']:
+ raise osv.except_osv(_('Warning !'), _('Make sure you have no users linked with the group(s)!'))
+ return super(groups2, self).unlink(cr, uid, ids, context=context)
+
groups2()
class res_config_view(osv.osv_memory):
diff --git a/bin/addons/base/security/ir.model.access.csv b/bin/addons/base/security/ir.model.access.csv
index cf0f73a5cc9..e0f7f653ad6 100644
--- a/bin/addons/base/security/ir.model.access.csv
+++ b/bin/addons/base/security/ir.model.access.csv
@@ -19,7 +19,7 @@
"access_ir_module_module_group_user","ir_module_module group_user","model_ir_module_module","group_system",1,1,1,1
"access_ir_module_module_dependency_group_system","ir_module_module_dependency group_system","model_ir_module_module_dependency","group_system",1,1,1,1
"access_ir_property_group_user","ir_property group_user","model_ir_property",,1,0,0,0
-"access_ir_property_group_user_manager","ir_property group_manager","model_ir_property","base.group_partner_manager",1,1,1,1
+"access_ir_property_group_user_manager","ir_property group_manager","model_ir_property","base.group_partner_manager",1,1,1,0
"access_ir_report_custom_group_system","ir_report_custom group_system","model_ir_report_custom",,1,0,0,0
"access_ir_report_custom_fields_group_system","ir_report_custom_fields group_system","model_ir_report_custom_fields",,1,0,0,0
"access_ir_rule_group_user","ir_rule group_user","model_ir_rule",,1,0,0,0
diff --git a/bin/import_xml.rng b/bin/import_xml.rng
index c852d421e17..e139238acfe 100644
--- a/bin/import_xml.rng
+++ b/bin/import_xml.rng
@@ -47,11 +47,12 @@
-
+
+
-
+
@@ -59,7 +60,7 @@
-
+
diff --git a/bin/netsvc.py b/bin/netsvc.py
index 04e29f444e7..f0fe4687417 100644
--- a/bin/netsvc.py
+++ b/bin/netsvc.py
@@ -382,7 +382,8 @@ class OpenERPDispatcherException(Exception):
class OpenERPDispatcher:
def log(self, title, msg):
- Logger().notifyChannel('%s' % title, LOG_DEBUG_RPC, pformat(msg))
+ if tools.config['log_level'] == logging.DEBUG_RPC:
+ Logger().notifyChannel('%s' % title, LOG_DEBUG_RPC, pformat(msg))
def dispatch(self, service_name, method, params):
try:
diff --git a/bin/osv/expression.py b/bin/osv/expression.py
index 4e6e1aade6f..2ca19bbf418 100644
--- a/bin/osv/expression.py
+++ b/bin/osv/expression.py
@@ -280,8 +280,11 @@ class expression(object):
c = context.copy()
c['active_test'] = False
res_ids = field_obj.name_search(cr, uid, right, [], operator, limit=None, context=c)
- right = map(lambda x: x[0], res_ids)
- self.__exp[i] = (left, 'in', right)
+ if not res_ids:
+ self.__exp[i] = ('id','=',0)
+ else:
+ right = map(lambda x: x[0], res_ids)
+ self.__exp[i] = (left, 'in', right)
else:
# other field type
# add the time part to datetime field when it's not there:
diff --git a/bin/osv/fields.py b/bin/osv/fields.py
index a38301ba184..dbddbb913e9 100644
--- a/bin/osv/fields.py
+++ b/bin/osv/fields.py
@@ -39,7 +39,7 @@ from psycopg2 import Binary
import warnings
import tools
-
+from tools.translate import _
def _symbol_set(symb):
if symb == None or symb == False:
@@ -748,7 +748,7 @@ class related(function):
ids=[ids]
objlst = obj.browse(cr, uid, ids)
for data in objlst:
- t_id=None
+ t_id = None
t_data = data
relation = obj._name
for i in range(len(self.arg)):
diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index d9fce0c765b..e3514df8ae0 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -49,6 +49,7 @@ import string
import sys
import time
import traceback
+import datetime
import types
import fields
@@ -58,6 +59,7 @@ from tools.translate import _
import copy
import sys
+import operator
try:
from lxml import etree
@@ -86,7 +88,6 @@ def last_day_of_current_month():
def intersect(la, lb):
return filter(lambda x: x in lb, la)
-
class except_orm(Exception):
def __init__(self, name, value):
self.name = name
@@ -276,7 +277,7 @@ class browse_record(object):
else:
new_data[n] = data[n]
self._data[data['id']].update(new_data)
-
+
if not name in self._data[self._id]:
#how did this happen?
self.logger.notifyChannel("browse_record", netsvc.LOG_ERROR,
@@ -447,7 +448,7 @@ class orm_template(object):
'name': k,
'field_description': f.string.replace("'", " "),
'ttype': f._type,
- 'relation': f._obj or 'NULL',
+ 'relation': f._obj or '',
'view_load': (f.view_load and 1) or 0,
'select_level': tools.ustr(f.select or 0),
'readonly':(f.readonly and 1) or 0,
@@ -544,6 +545,8 @@ class orm_template(object):
return browse_null()
def __export_row(self, cr, uid, row, fields, context=None):
+ if context is None:
+ context = {}
def check_type(field_type):
if field_type == 'float':
@@ -597,9 +600,9 @@ class orm_template(object):
cols = selection_field(self._inherits)
if cols and cols._type == 'selection':
sel_list = cols.selection
- if type(sel_list) == type([]):
- r = [x[1] for x in sel_list if r==x[0]][0]
-
+ if r and type(sel_list) == type([]):
+ r = [x[1] for x in sel_list if r==x[0]]
+ r = r and r[0] or False
if not r:
if f[i] in self._columns:
r = check_type(self._columns[f[i]]._type)
@@ -626,7 +629,7 @@ class orm_template(object):
for rr in r :
if isinstance(rr.name, browse_record):
rr = rr.name
- rr_name = self.pool.get(rr._table_name).name_get(cr, uid, [rr.id])
+ rr_name = self.pool.get(rr._table_name).name_get(cr, uid, [rr.id], context=context)
rr_name = rr_name and rr_name[0] and rr_name[0][1] or ''
dt += tools.ustr(rr_name or '') + ','
data[fpos] = dt[:-1]
@@ -639,7 +642,7 @@ class orm_template(object):
i += 1
if i == len(f):
if isinstance(r, browse_record):
- r = self.pool.get(r._table_name).name_get(cr, uid, [r.id])
+ r = self.pool.get(r._table_name).name_get(cr, uid, [r.id], context=context)
r = r and r[0] and r[0][1] or ''
data[fpos] = tools.ustr(r or '')
return [data] + lines
@@ -795,12 +798,12 @@ class orm_template(object):
module, xml_id = line[i].rsplit('.', 1)
else:
module, xml_id = current_module, line[i]
- id = ir_model_data_obj._get_id(cr, uid, module, xml_id)
-
- res_res_id = ir_model_data_obj.read(cr, uid, [id],
- ['res_id'])
- if res_res_id:
- res_id = res_res_id[0]['res_id']
+ record_id = ir_model_data_obj._get_id(cr, uid, module, xml_id)
+ ir_model_data = ir_model_data_obj.read(cr, uid, [record_id], ['res_id'])
+ if ir_model_data:
+ res_id = ir_model_data[0]['res_id']
+ else:
+ raise ValueError('No references to %s.%s' % (module, xml_id))
row[field[-1][:-3]] = res_id or False
continue
if (len(field) == len(prefix)+1) and \
@@ -994,7 +997,8 @@ class orm_template(object):
msg = _('Insertion Failed! ' + e[1])
return (-1, res, 'Line ' + str(counter) +' : ' + msg, '' )
#Raising Uncaught exception
- raise
+ return (-1, res, 'Line ' + str(counter) +' : ' + str(e), '' )
+
for lang in translate:
context2 = context.copy()
context2['lang'] = lang
@@ -1003,6 +1007,8 @@ class orm_template(object):
data = pickle.load(file(config.get('import_partial')))
data[filename] = initial_size - len(datas) + original_value
pickle.dump(data, file(config.get('import_partial'),'wb'))
+ if context.get('defer_parent_store_computation'):
+ self._parent_store_compute(cr)
cr.commit()
#except Exception, e:
@@ -1016,6 +1022,8 @@ class orm_template(object):
#
# TODO: Send a request with the result and multi-thread !
#
+ if context.get('defer_parent_store_computation'):
+ self._parent_store_compute(cr)
return (done, 0, 0, 0)
def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
@@ -1108,8 +1116,7 @@ class orm_template(object):
if getattr(self._columns[f], arg, None):
res[f][arg] = getattr(self._columns[f], arg)
- #TODO: optimize
- res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context.get('lang', False) or 'en_US')
+ res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context.get('lang', False) or 'en_US', self._columns[f].string)
if res_trans:
res[f]['string'] = res_trans
help_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'help', context.get('lang', False) or 'en_US')
@@ -1724,7 +1731,8 @@ class orm_template(object):
for lang in langs:
for field in vals:
if field in self._columns:
- self.pool.get('ir.translation')._set_ids(cr, uid, self._name+','+field, 'field', lang, [0], vals[field])
+ src = self._columns[field].string
+ self.pool.get('ir.translation')._set_ids(cr, uid, self._name+','+field, 'field', lang, [0], vals[field], src)
for table in self._inherits:
cols = intersect(self._inherit_fields.keys(), vals)
if cols:
@@ -2137,6 +2145,8 @@ class orm(orm_template):
return (tables, where_clause)
def _parent_store_compute(self, cr):
+ if not self._parent_store:
+ return
logger = netsvc.Logger()
logger.notifyChannel('orm', netsvc.LOG_INFO, 'Computing parent left and right for table %s...' % (self._table, ))
def browse_rec(root, pos=0):
@@ -2225,8 +2235,8 @@ class orm(orm_template):
logger.notifyChannel('orm', netsvc.LOG_ERROR, 'create a column parent_left on object %s: fields.integer(\'Left Parent\', select=1)' % (self._table, ))
if 'parent_right' not in self._columns:
logger.notifyChannel('orm', netsvc.LOG_ERROR, 'create a column parent_right on object %s: fields.integer(\'Right Parent\', select=1)' % (self._table, ))
- if self._columns[self._parent_name].ondelete<>'cascade':
- logger.notifyChannel('orm', netsvc.LOG_ERROR, "the columns %s on object must be set as ondelete='cascasde'" % (self._name, self._parent_name))
+ if self._columns[self._parent_name].ondelete != 'cascade':
+ logger.notifyChannel('orm', netsvc.LOG_ERROR, "The column %s on object %s must be set as ondelete='cascade'" % (self._parent_name, self._name))
cr.execute('ALTER TABLE "%s" ADD COLUMN "parent_left" INTEGER' % (self._table,))
cr.execute('ALTER TABLE "%s" ADD COLUMN "parent_right" INTEGER' % (self._table,))
cr.commit()
@@ -2472,6 +2482,8 @@ class orm(orm_template):
cr.execute("SELECT relname FROM pg_class WHERE relkind in ('r','v') AND relname=%s", (self._table,))
create = not bool(cr.fetchone())
+ cr.commit() # start a new transaction
+
for (key, con, _) in self._sql_constraints:
conname = '%s_%s' % (self._table, key)
cr.execute("SELECT conname FROM pg_constraint where conname=%s", (conname,))
@@ -2481,6 +2493,7 @@ class orm(orm_template):
cr.commit()
except:
logger.notifyChannel('orm', netsvc.LOG_WARNING, 'unable to add \'%s\' constraint on table %s !\n If you want to have it, you should update the records and execute manually:\nALTER table %s ADD CONSTRAINT %s_%s %s' % (con, self._table, self._table, self._table, key, con,))
+ cr.rollback()
if create:
if hasattr(self, "_sql"):
@@ -2491,6 +2504,7 @@ class orm(orm_template):
cr.commit()
if store_compute:
self._parent_store_compute(cr)
+ cr.commit()
return todo_end
def __init__(self, cr):
@@ -2646,11 +2660,16 @@ class orm(orm_template):
for i in range(len(field_value)):
field_value2.append({})
for field2 in field_value[i]:
- if obj._columns[field2]._type in ('many2one', 'one2one'):
+ if field2 in obj._columns.keys() and obj._columns[field2]._type in ('many2one', 'one2one'):
obj2 = self.pool.get(obj._columns[field2]._obj)
if not obj2.search(cr, uid,
[('id', '=', field_value[i][field2])]):
continue
+ elif field2 in obj._inherit_fields.keys() and obj._inherit_fields[field2][2]._type in ('many2one', 'one2one'):
+ obj2 = self.pool.get(obj._inherit_fields[field2][2]._obj)
+ if not obj2.search(cr, uid,
+ [('id', '=', field_value[i][field2])]):
+ continue
# TODO add test for many2many and one2many
field_value2[i][field2] = field_value[i][field2]
field_value = field_value2
@@ -3107,6 +3126,24 @@ class orm(orm_template):
self.pool.get('ir.model.access').check(cr, user, self._name, 'write', context=context)
+ # No direct update of parent_left/right
+ vals.pop('parent_left', None)
+ vals.pop('parent_right', None)
+
+ parents_changed = []
+ if self._parent_store and (self._parent_name in vals):
+ # The parent_left/right computation may take up to
+ # 5 seconds. No need to recompute the values if the
+ # parent is the same. Get the current value of the parent
+ base_query = 'SELECT id FROM %s WHERE id IN %%s AND %s' % \
+ (self._table, self._parent_name)
+ params = (tuple(ids),)
+ parent_val = vals[self._parent_name]
+ if parent_val:
+ cr.execute(base_query + " != %s", params + (parent_val,))
+ else:
+ cr.execute(base_query + " IS NULL", params)
+ parents_changed = map(operator.itemgetter(0), cr.fetchall())
upd0 = []
upd1 = []
@@ -3196,41 +3233,48 @@ class orm(orm_template):
self.pool.get(table).write(cr, user, nids, v, context)
self._validate(cr, user, ids, context)
-# TODO: use _order to set dest at the right position and not first node of parent
- if self._parent_store and (self._parent_name in vals):
+
+ # TODO: use _order to set dest at the right position and not first node of parent
+ # We can't defer parent_store computation because the stored function
+ # fields that are computer may refer (directly or indirectly) to
+ # parent_left/right (via a child_of domain)
+ if parents_changed:
if self.pool._init:
self.pool._init_parent[self._name]=True
else:
- for id in ids:
- # Find Position of the element
- if vals[self._parent_name]:
- cr.execute('select parent_left,parent_right,id from '+self._table+' where '+self._parent_name+'=%s order by '+(self._parent_order or self._order), (vals[self._parent_name],))
- else:
- cr.execute('select parent_left,parent_right,id from '+self._table+' where '+self._parent_name+' is null order by '+(self._parent_order or self._order))
- result_p = cr.fetchall()
- position = None
- for (pleft,pright,pid) in result_p:
- if pid == id:
- break
- position = pright+1
+ order = self._parent_order or self._order
+ parent_val = vals[self._parent_name]
+ if parent_val:
+ clause, params = '%s=%%s' % (self._parent_name,), (parent_val,)
+ else:
+ clause, params = '%s IS NULL' % (self._parent_name,), ()
+ cr.execute('SELECT parent_right, id FROM %s WHERE %s ORDER BY %s' % (self._table, clause, order), params)
+ parents = cr.fetchall()
- # It's the first node of the parent: position = parent_left+1
- if not position:
- if not vals[self._parent_name]:
- position = 1
- else:
- cr.execute('select parent_left from '+self._table+' where id=%s', (vals[self._parent_name],))
- position = cr.fetchone()[0]+1
-
- # We have the new position !
- cr.execute('select parent_left,parent_right from '+self._table+' where id=%s', (id,))
- pleft,pright = cr.fetchone()
+ for id in parents_changed:
+ cr.execute('SELECT parent_left, parent_right FROM %s WHERE id=%%s' % (self._table,), (id,))
+ pleft, pright = cr.fetchone()
distance = pright - pleft + 1
- if position>pleft and position<=pright:
+ # Find Position of the element
+ position = None
+ for (parent_pright, parent_id) in parents:
+ if parent_id == id:
+ break
+ position = parent_pright+1
+
+ # It's the first node of the parent
+ if not position:
+ if not parent_val:
+ position = 1
+ else:
+ cr.execute('select parent_left from '+self._table+' where id=%s', (parent_val,))
+ position = cr.fetchone()[0]+1
+
+ if pleft < position <= pright:
raise except_orm(_('UserError'), _('Recursivity Detected.'))
- if pleft=%s', (distance, position))
cr.execute('update '+self._table+' set parent_right=parent_right+%s where parent_right>=%s', (distance, position))
cr.execute('update '+self._table+' set parent_left=parent_left+%s, parent_right=parent_right+%s where parent_left>=%s and parent_left<%s', (position-pleft,position-pleft, pleft, pright))
@@ -3411,7 +3455,7 @@ class orm(orm_template):
self.check_access_rule(cr, user, [id_new], 'create', context=context)
upd_todo.sort(lambda x, y: self._columns[x].priority-self._columns[y].priority)
- if self._parent_store:
+ if self._parent_store and not context.get('defer_parent_store_computation'):
if self.pool._init:
self.pool._init_parent[self._name]=True
else:
@@ -3639,8 +3683,9 @@ class orm(orm_template):
* '&' (default), '|', '!'
"""
- if not context:
+ if context is None:
context = {}
+ self.pool.get('ir.model.access').check(cr, user, self._name, 'read', context=context)
# compute the where, order by, limit and offset clauses
(qu1, qu2, tables) = self._where_calc(cr, user, args, context=context)
dom = self.pool.get('ir.rule').domain_get(cr, user, self._name, 'read', context=context)
@@ -3750,9 +3795,9 @@ class orm(orm_template):
:return: dictionary containing all the field values
"""
- if not context:
+ if context is None:
context = {}
- if not default:
+ if default is None:
default = {}
if 'state' not in default:
if 'state' in self._defaults:
@@ -3761,7 +3806,11 @@ class orm(orm_template):
else:
default['state'] = self._defaults['state']
- data = self.read(cr, uid, [id], context=context)[0]
+ context_wo_lang = context
+ if 'lang' in context:
+ del context_wo_lang['lang']
+ data = self.read(cr, uid, [id], context=context_wo_lang)[0]
+
fields = self.fields_get(cr, uid, context=context)
trans_data=[]
for f in fields:
@@ -3796,17 +3845,14 @@ class orm(orm_template):
trans_obj = self.pool.get('ir.translation')
#TODO: optimize translations
- trans_name=''
for f in fields:
- trans_flag=True
+ trans_name = ''
if f in self._columns and self._columns[f].translate:
- trans_name=self._name+","+f
+ trans_name = self._name+","+f
elif f in self._inherit_fields and self._inherit_fields[f][2].translate:
- trans_name=self._inherit_fields[f][0]+","+f
- else:
- trans_flag=False
+ trans_name = self._inherit_fields[f][0] + "," + f
- if trans_flag:
+ if trans_name:
trans_ids = trans_obj.search(cr, uid, [
('name', '=', trans_name),
('res_id','=',data['id'])
diff --git a/bin/osv/osv.py b/bin/osv/osv.py
index a528d418089..08f62e50230 100644
--- a/bin/osv/osv.py
+++ b/bin/osv/osv.py
@@ -253,7 +253,8 @@ class osv(osv_base, orm.orm):
for c in cls.__dict__.get(s, []):
exist = False
for c2 in range(len(new)):
- if new[c2][2]==c[2]:
+ #For _constraints, we should check field and methods as well
+ if new[c2][2]==c[2] and new[c2][0]==c[0]:
new[c2] = c
exist = True
break
diff --git a/bin/release.py b/bin/release.py
index f5fde69f1a9..817994e7d46 100644
--- a/bin/release.py
+++ b/bin/release.py
@@ -21,8 +21,8 @@
##############################################################################
name = 'openerp-server'
-version = '5.2dev'
-major_version = '5.2'
+version = '6.0dev'
+major_version = '6.0'
description = 'OpenERP Server'
long_desc = '''\
OpenERP is a complete ERP and CRM. The main features are accounting (analytic
diff --git a/bin/report/custom.py b/bin/report/custom.py
index e476b296056..d4309b31ab9 100644
--- a/bin/report/custom.py
+++ b/bin/report/custom.py
@@ -36,6 +36,7 @@ from pychart import *
import misc
import cStringIO
from lxml import etree
+from tools.translate import _
class external_pdf(render.render):
def __init__(self, pdf):
diff --git a/bin/report/preprocess.py b/bin/report/preprocess.py
index 35234bc7ef1..c84ce66b472 100644
--- a/bin/report/preprocess.py
+++ b/bin/report/preprocess.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# GNU Affero 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -35,7 +35,7 @@ class report(object):
for node in root_node:
if node.tag == etree.Comment:
continue
- if node.text:
+ if node.text or node.tail:
def _sub3(txt):
n = node
while n.tag != txt.group(2):
@@ -71,9 +71,9 @@ class report(object):
n = n.getparent()
n.set('rml_loop', txt.group(2))
return '[['+txt.group(1)+"''"+txt.group(4)+']]'
- t = _regex1.sub(_sub1, node.text)
+ t = _regex1.sub(_sub1, node.text or node.tail)
if t == " ":
- t = _regex11.sub(_sub1, node.text)
+ t = _regex11.sub(_sub1, node.text or node.tail)
t = _regex3.sub(_sub3, t)
node.text = _regex2.sub(_sub2, t)
self.preprocess_rml(node,type)
diff --git a/bin/report/render/rml2pdf/trml2pdf.py b/bin/report/render/rml2pdf/trml2pdf.py
index fa1595e13a4..a5912cd7a13 100644
--- a/bin/report/render/rml2pdf/trml2pdf.py
+++ b/bin/report/render/rml2pdf/trml2pdf.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# GNU Affero 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -52,13 +52,20 @@ class _rml_styles(object,):
def __init__(self, nodes, localcontext):
self.localcontext = localcontext
self.styles = {}
+ self.styles_obj = {}
self.names = {}
self.table_styles = {}
+ self.default_style = reportlab.lib.styles.getSampleStyleSheet()
+
for node in nodes:
for style in node.findall('blockTableStyle'):
self.table_styles[style.get('id')] = self._table_style_get(style)
for style in node.findall('paraStyle'):
- self.styles[style.get('name')] = self._para_style_update(style)
+ sname = style.get('name')
+ self.styles[sname] = self._para_style_update(style)
+
+ self.styles_obj[sname] = reportlab.lib.styles.ParagraphStyle(sname, self.default_style["Normal"], **self.styles[sname])
+
for variable in node.findall('initialize'):
for name in variable.findall('name'):
self.names[ name.get('id')] = name.get('value')
@@ -126,17 +133,19 @@ class _rml_styles(object,):
def para_style_get(self, node):
style = False
- if node.get('style'):
- if node.get('style') in self.styles:
- styles = reportlab.lib.styles.getSampleStyleSheet()
- sname = node.get('style')
- style = reportlab.lib.styles.ParagraphStyle(sname, styles["Normal"], **self.styles[sname])
+ sname = node.get('style')
+ if sname:
+ if sname in self.styles_obj:
+ style = self.styles_obj[sname]
else:
sys.stderr.write('Warning: style not found, %s - setting default!\n' % (node.get('style'),) )
if not style:
- styles = reportlab.lib.styles.getSampleStyleSheet()
- style = styles['Normal']
- style.__dict__.update(self._para_style_update(node))
+ style = self.default_style['Normal']
+ para_update = self._para_style_update(node)
+ if para_update:
+ # update style only is necessary
+ style = copy.deepcopy(style)
+ style.__dict__.update(para_update)
return style
class _rml_doc(object):
@@ -167,7 +176,7 @@ class _rml_doc(object):
from reportlab.lib.fonts import addMapping
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
-
+
pdfmetrics.registerFont(TTFont(fontname, filename ))
if (mode == 'all'):
addMapping(face, 0, 0, fontname) #normal
@@ -417,11 +426,11 @@ class _rml_canvas(object):
self.canvas.drawPath(self.path, **utils.attr_get(node, [], {'fill':'bool','stroke':'bool'}))
def setFont(self, node):
- from reportlab.pdfbase import pdfmetrics
+ from reportlab.pdfbase import pdfmetrics
fname = node.get('name')
- #TODO : other fonts should be supported
+ #TODO : other fonts should be supported
if fname not in pdfmetrics.standardFonts:
- fname = self.canvas._fontname
+ fname = self.canvas._fontname
return self.canvas.setFont(fname, utils.unit_get(node.get('size')))
def render(self, node):
@@ -565,7 +574,7 @@ class _rml_flowable(object):
def _illustration(self, node):
class Illustration(platypus.flowables.Flowable):
def __init__(self, node, localcontext, styles, self2):
- self.localcontext = localcontext
+ self.localcontext = localcontext.copy()
self.node = node
self.styles = styles
self.width = utils.unit_get(node.get('width'))
diff --git a/bin/report/report_sxw.py b/bin/report/report_sxw.py
index a85bac84f5c..9d2fb97362c 100644
--- a/bin/report/report_sxw.py
+++ b/bin/report/report_sxw.py
@@ -441,8 +441,8 @@ class report_sxw(report_rml, preprocess.report):
rml_parser.set_context(objs, data, ids, report_xml.report_type)
processed_rml = etree.XML(rml)
if report_xml.header:
- rml_parser._add_header(processed_rml)
- processed_rml = self.preprocess_rml(processed_rml,report_xml.report_type)
+ rml_parser._add_header(processed_rml, self.header)
+ processed_rml = self.preprocess_rml(processed_rml,report_xml.report_type)
if rml_parser.logo:
logo = base64.decodestring(rml_parser.logo)
create_doc = self.generators[report_xml.report_type]
diff --git a/bin/service/web_services.py b/bin/service/web_services.py
index 308a7aa18a9..7719caa063f 100644
--- a/bin/service/web_services.py
+++ b/bin/service/web_services.py
@@ -283,8 +283,8 @@ class db(netsvc.ExportService):
## Not True: in fact, check if connection to database is possible. The database may exists
return bool(sql_db.db_connect(db_name))
- def exp_list(self):
- if not tools.config['list_db']:
+ def exp_list(self, document=False):
+ if not tools.config['list_db'] and not document:
raise Exception('AccessDenied')
db = sql_db.db_connect('template1')
diff --git a/bin/tools/config.py b/bin/tools/config.py
index c18a7422e2c..a629e97fc11 100644
--- a/bin/tools/config.py
+++ b/bin/tools/config.py
@@ -123,7 +123,6 @@ class configmanager(object):
parser.add_option("--assert-exit-level", dest='assert_exit_level', type="choice", choices=self._LOGLEVELS.keys(),
help="specify the level at which a failed assertion will stop the server. Accepted values: %s" % (self._LOGLEVELS.keys(),))
parser.add_option('--price_accuracy', dest='price_accuracy', default='2', help='deprecated since v6.0, replaced by module decimal_precision')
- parser.add_option('--no-database-list', action="store_false", dest='list_db', default=True, help="disable the ability to return the list of databases")
if self.has_ssl:
group = optparse.OptionGroup(parser, "SSL Configuration")
@@ -136,7 +135,7 @@ class configmanager(object):
default="server.pkey",
help="specify the private key file for the SSL connection")
parser.add_option_group(group)
-
+
# Testing Group
group = optparse.OptionGroup(parser, "Testing Configuration")
group.add_option("--test-disable", action="store_true", dest="test_disable",
@@ -144,7 +143,7 @@ class configmanager(object):
group.add_option("--test-commit", action="store_true", dest="test_commit",
default=False, help="Commit database changes performed by tests.")
parser.add_option_group(group)
-
+
# Logging Group
group = optparse.OptionGroup(parser, "Logging Configuration")
group.add_option("--logfile", dest="logfile", help="file where the server log will be stored")
@@ -161,8 +160,7 @@ class configmanager(object):
group.add_option('--email-from', dest='email_from', default='', help='specify the SMTP email address for sending email')
group.add_option('--smtp', dest='smtp_server', default='', help='specify the SMTP server for sending email')
group.add_option('--smtp-port', dest='smtp_port', default='25', help='specify the SMTP port', type="int")
- if self.has_ssl:
- group.add_option('--smtp-ssl', dest='smtp_ssl', default='', help='specify the SMTP server support SSL or not')
+ group.add_option('--smtp-ssl', dest='smtp_ssl', default='', help='specify the SMTP server support SSL or not')
group.add_option('--smtp-user', dest='smtp_user', default='', help='specify the SMTP username for sending email')
group.add_option('--smtp-password', dest='smtp_password', default='', help='specify the SMTP password for sending email')
parser.add_option_group(group)
@@ -199,6 +197,13 @@ class configmanager(object):
action="callback", callback=self._check_addons_path, nargs=1, type="string")
parser.add_option_group(group)
+ security = optparse.OptionGroup(parser, 'Security-related options')
+ security.add_option('--no-database-list', action="store_false", dest='list_db', default=True, help="disable the ability to return the list of databases")
+ security.add_option('--enable-code-actions', action='store_true',
+ dest='server_actions_allow_code', default=False,
+ help='Enables server actions of state "code". Warning, this is a security risk.')
+ parser.add_option_group(security)
+
def parse_config(self):
(opt, args) = self.parser.parse_args()
@@ -244,13 +249,13 @@ class configmanager(object):
self.options['pidfile'] = False
keys = ['interface', 'port', 'db_name', 'db_user', 'db_password', 'db_host',
- 'db_port', 'list_db', 'logfile', 'pidfile', 'smtp_port', 'cache_timeout',
+ 'db_port', 'list_db', 'logfile', 'pidfile', 'smtp_port', 'cache_timeout','smtp_ssl',
'email_from', 'smtp_server', 'smtp_user', 'smtp_password', 'price_accuracy',
'netinterface', 'netport', 'db_maxconn', 'import_partial', 'addons_path',
'netrpc', 'xmlrpc', 'syslog', 'without_demo', 'timezone',]
if self.has_ssl:
- keys.extend(['smtp_ssl', 'secure_cert_file', 'secure_pkey_file'])
+ keys.extend(['secure_cert_file', 'secure_pkey_file'])
keys.append('secure')
for arg in keys:
@@ -258,7 +263,8 @@ class configmanager(object):
self.options[arg] = getattr(opt, arg)
keys = ['language', 'translate_out', 'translate_in', 'debug_mode',
- 'stop_after_init', 'logrotate', 'without_demo', 'netrpc', 'xmlrpc', 'syslog', 'list_db']
+ 'stop_after_init', 'logrotate', 'without_demo', 'netrpc', 'xmlrpc', 'syslog',
+ 'list_db', 'server_actions_allow_code']
if self.has_ssl and not self.options['secure']:
keys.append('secure')
diff --git a/bin/tools/convert.py b/bin/tools/convert.py
index 1188f6deaa8..a7e002e1a61 100644
--- a/bin/tools/convert.py
+++ b/bin/tools/convert.py
@@ -26,11 +26,9 @@ import os.path
import pickle
import re
import sys
-import time
from datetime import datetime
from lxml import etree
-
import ir
import misc
import netsvc
@@ -79,6 +77,7 @@ def _eval_xml(self,node, pool, cr, uid, idref, context=None):
return f_val
a_eval = node.get('eval','')
if a_eval:
+ import time
idref2 = idref.copy()
idref2['time'] = time
idref2['DateTime'] = datetime
@@ -253,6 +252,14 @@ form: module.record_id""" % (xml_id,)
self.pool.get(d_model).unlink(cr, self.uid, ids)
self.pool.get('ir.model.data')._unlink(cr, self.uid, d_model, ids)
+ def _remove_ir_values(self, cr, name, value, model):
+ ir_value_ids = self.pool.get('ir.values').search(cr, self.uid, [('name','=',name),('value','=',value),('model','=',model)])
+ if ir_value_ids:
+ self.pool.get('ir.values').unlink(cr, self.uid, ir_value_ids)
+ self.pool.get('ir.model.data')._unlink(cr, self.uid, 'ir.values', ir_value_ids)
+
+ return True
+
def _tag_report(self, cr, rec, data_node=None):
res = {}
for dest,f in (('name','string'),('model','model'),('report_name','name')):
@@ -262,16 +269,17 @@ form: module.record_id""" % (xml_id,)
if rec.get(field):
res[dest] = rec.get(field).encode('utf8')
if rec.get('auto'):
- res['auto'] = eval(rec.get('auto'))
+ res['auto'] = eval(rec.get('auto','False'))
if rec.get('sxw'):
sxw_content = misc.file_open(rec.get('sxw')).read()
res['report_sxw_content'] = sxw_content
if rec.get('header'):
- res['header'] = eval(rec.get('header'))
+ res['header'] = eval(rec.get('header','False'))
if rec.get('report_type'):
res['report_type'] = rec.get('report_type')
- res['multi'] = rec.get('multi') and eval(rec.get('multi'))
+ res['multi'] = rec.get('multi') and eval(rec.get('multi','False'))
+
xml_id = rec.get('id','').encode('utf8')
self._test_xml_id(xml_id)
@@ -291,12 +299,16 @@ form: module.record_id""" % (xml_id,)
id = self.pool.get('ir.model.data')._update(cr, self.uid, "ir.actions.report.xml", self.module, res, xml_id, noupdate=self.isnoupdate(data_node), mode=self.mode)
self.idref[xml_id] = int(id)
- if not rec.get('menu') or eval(rec.get('menu','')):
+ if not rec.get('menu') or eval(rec.get('menu','False')):
keyword = str(rec.get('keyword', 'client_print_multi'))
keys = [('action',keyword),('res_model',res['model'])]
value = 'ir.actions.report.xml,'+str(id)
replace = rec.get('replace', True)
self.pool.get('ir.model.data').ir_set(cr, self.uid, 'action', keyword, res['name'], [res['model']], value, replace=replace, isobject=True, xml_id=xml_id)
+ elif self.mode=='update' and eval(rec.get('menu','False'))==False:
+ # Special check for report having attribute menu=False on update
+ value = 'ir.actions.report.xml,'+str(id)
+ self._remove_ir_values(cr, res['name'], value, res['model'])
return False
def _tag_function(self, cr, rec, data_node=None):
@@ -313,7 +325,7 @@ form: module.record_id""" % (xml_id,)
name = rec.get("name",'').encode('utf8')
xml_id = rec.get('id','').encode('utf8')
self._test_xml_id(xml_id)
- multi = rec.get('multi','') and eval(rec.get('multi',''))
+ multi = rec.get('multi','') and eval(rec.get('multi','False'))
res = {'name': string, 'wiz_name': name, 'multi': multi, 'model': model}
if rec.get('groups'):
@@ -332,12 +344,16 @@ form: module.record_id""" % (xml_id,)
id = self.pool.get('ir.model.data')._update(cr, self.uid, "ir.actions.wizard", self.module, res, xml_id, noupdate=self.isnoupdate(data_node), mode=self.mode)
self.idref[xml_id] = int(id)
# ir_set
- if (not rec.get('menu') or eval(rec.get('menu',''))) and id:
+ if (not rec.get('menu') or eval(rec.get('menu','False'))) and id:
keyword = str(rec.get('keyword','') or 'client_action_multi')
keys = [('action',keyword),('res_model',model)]
value = 'ir.actions.wizard,'+str(id)
replace = rec.get("replace",'') or True
self.pool.get('ir.model.data').ir_set(cr, self.uid, 'action', keyword, string, [model], value, replace=replace, isobject=True, xml_id=xml_id)
+ elif self.mode=='update' and (rec.get('menu') and eval(rec.get('menu','False'))==False):
+ # Special check for wizard having attribute menu=False on update
+ value = 'ir.actions.wizard,'+str(id)
+ self._remove_ir_values(cr, string, value, model)
def _tag_url(self, cr, rec, data_node=None):
url = rec.get("string",'').encode('utf8')
@@ -351,12 +367,16 @@ form: module.record_id""" % (xml_id,)
id = self.pool.get('ir.model.data')._update(cr, self.uid, "ir.actions.url", self.module, res, xml_id, noupdate=self.isnoupdate(data_node), mode=self.mode)
self.idref[xml_id] = int(id)
# ir_set
- if (not rec.get('menu') or eval(rec.get('menu',''))) and id:
+ if (not rec.get('menu') or eval(rec.get('menu','False'))) and id:
keyword = str(rec.get('keyword','') or 'client_action_multi')
keys = [('action',keyword)]
value = 'ir.actions.url,'+str(id)
replace = rec.get("replace",'') or True
self.pool.get('ir.model.data').ir_set(cr, self.uid, 'action', keyword, url, ["ir.actions.url"], value, replace=replace, isobject=True, xml_id=xml_id)
+ elif self.mode=='update' and (rec.get('menu') and eval(rec.get('menu','False'))==False):
+ # Special check for URL having attribute menu=False on update
+ value = 'ir.actions.url,'+str(id)
+ self._remove_ir_values(cr, url, value, "ir.actions.url")
def _tag_act_window(self, cr, rec, data_node=None):
name = rec.get('name','').encode('utf-8')
@@ -379,11 +399,12 @@ form: module.record_id""" % (xml_id,)
uid = self.uid
# def ref() added because , if context has ref('id') eval wil use this ref
- active_id=str("active_id") # for further reference in client/bin/tools/__init__.py
+ active_id = str("active_id") # for further reference in client/bin/tools/__init__.py
def ref(str_id):
return self.id_get(cr, None, str_id)
context = eval(context)
+# domain = eval(domain) # XXX need to test this line -> uid, active_id, active_ids, ...
res = {
'name': name,
diff --git a/bin/tools/misc.py b/bin/tools/misc.py
index 07e0fc38f8e..e60213ca740 100644
--- a/bin/tools/misc.py
+++ b/bin/tools/misc.py
@@ -820,6 +820,22 @@ class cache(object):
def to_xml(s):
return s.replace('&','&').replace('<','<').replace('>','>')
+def get_encodings():
+ yield 'utf8'
+ from locale import getpreferredencoding
+ prefenc = getpreferredencoding()
+ if prefenc:
+ yield prefenc
+
+ prefenc = {
+ 'latin1': 'latin9',
+ 'iso-8859-1': 'iso8859-15',
+ 'cp1252': '1252',
+ }.get(prefenc.lower())
+ if prefenc:
+ yield prefenc
+
+
def ustr(value):
"""This method is similar to the builtin `str` method, except
it will return Unicode string.
@@ -829,29 +845,25 @@ def ustr(value):
@rtype: unicode
@return: unicode string
"""
+ orig = value
+ if isinstance(value, Exception):
+ return exception_to_unicode(value)
if isinstance(value, unicode):
return value
- if hasattr(value, '__unicode__'):
+ try:
return unicode(value)
-
- if not isinstance(value, str):
- value = str(value)
-
- try: # first try utf-8
- return unicode(value, 'utf-8')
except:
pass
- try: # then extened iso-8858
- return unicode(value, 'iso-8859-15')
- except:
- pass
+ for ln in get_encodings():
+ try:
+ return unicode(value, ln)
+ except:
+ pass
+ raise UnicodeError('unable de to convert %r' % (orig,))
- # else use default system locale
- from locale import getlocale
- return unicode(value, getlocale()[1])
def exception_to_unicode(e):
if (sys.version_info[:2] < (2,6)) and hasattr(e, 'message'):
@@ -914,7 +926,7 @@ def get_languages():
'fr_BE': u'French (BE) / Français (BE)',
'fr_CH': u'French (CH) / Français (CH)',
'fr_FR': u'French / Français',
- 'gl_ES': u'Galician / Spain',
+ 'gl_ES': u'Galician / Galego',
'gu_IN': u'Gujarati / India',
'hi_IN': u'Hindi / India',
'hr_HR': u'Croatian / hrvatski jezik',
@@ -939,8 +951,8 @@ def get_languages():
'ro_RO': u'Romanian / limba română',
'ru_RU': u'Russian / русский язык',
'si_LK': u'Sinhalese / Sri Lanka',
- 'sk_SK': u'Slovak / Slovakia',
- 'sl_SL': u'Slovenian / slovenščina',
+ 'sl_SI': u'Slovenian / slovenščina',
+ 'sk_SK': u'Slovak / Slovenský jazyk',
'sq_AL': u'Albanian / Shqipëri',
'sr_RS': u'Serbian / Serbia',
'sv_SE': u'Swedish / svenska',
diff --git a/bin/tools/translate.py b/bin/tools/translate.py
index 05f7f95e9b4..9277bf6924b 100644
--- a/bin/tools/translate.py
+++ b/bin/tools/translate.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# GNU Affero 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -596,23 +596,30 @@ def trans_generate(lang, modules, dbname=None):
push_translation(module, 'model', name, xml_name, encode(trad))
# parse source code for _() calls
- def get_module_from_path(path,mod_paths=None):
- if not mod_paths:
- # First, construct a list of possible paths
- def_path = os.path.abspath(os.path.join(tools.config['root_path'], 'addons')) # default addons path (base)
- ad_paths= map(lambda m: os.path.abspath(m.strip()),tools.config['addons_path'].split(','))
- mod_paths=[def_path]
- for adp in ad_paths:
- mod_paths.append(adp)
- if not adp.startswith('/'):
- mod_paths.append(os.path.join(def_path,adp))
- elif adp.startswith(def_path):
- mod_paths.append(adp[len(def_path)+1:])
-
- for mp in mod_paths:
- if path.startswith(mp) and (os.path.dirname(path) != mp):
- path = path[len(mp)+1:]
- return path.split(os.path.sep)[0]
+ def get_module_from_path(path, mod_paths=None):
+# if not mod_paths:
+## First, construct a list of possible paths
+# def_path = os.path.abspath(os.path.join(tools.config['root_path'], 'addons')) # default addons path (base)
+# ad_paths= map(lambda m: os.path.abspath(m.strip()),tools.config['addons_path'].split(','))
+# mod_paths=[def_path]
+# for adp in ad_paths:
+# mod_paths.append(adp)
+# if not adp.startswith('/'):
+# mod_paths.append(os.path.join(def_path,adp))
+# elif adp.startswith(def_path):
+# mod_paths.append(adp[len(def_path)+1:])
+# for mp in mod_paths:
+# if path.startswith(mp) and (os.path.dirname(path) != mp):
+# path = path[len(mp)+1:]
+# return path.split(os.path.sep)[0]
+ path_dir = os.path.dirname(path[1:])
+ if path_dir:
+ if os.path.exists(os.path.join(tools.config['addons_path'],path[1:])):
+ return path.split(os.path.sep)[1]
+ else:
+ root_addons = os.path.join(tools.config['root_path'], 'addons')
+ if os.path.exists(os.path.join(root_addons,path[1:])):
+ return path.split(os.path.sep)[1]
return 'base' # files that are not in a module are considered as being in 'base' module
modobj = pool.get('ir.module.module')
@@ -699,6 +706,11 @@ def trans_load_data(db_name, fileobj, fileformat, lang, strict=False, lang_name=
if not lang_name:
lang_name = tools.get_languages().get(lang, lang)
+ def fix_xa0(s):
+ if s == '\xa0':
+ return '\xc2\xa0'
+ return s
+
lang_info = {
'code': lang,
'iso_code': iso_lang,
@@ -706,9 +718,10 @@ def trans_load_data(db_name, fileobj, fileformat, lang, strict=False, lang_name=
'translatable': 1,
'date_format' : str(locale.nl_langinfo(locale.D_FMT).replace('%y', '%Y')),
'time_format' : str(locale.nl_langinfo(locale.T_FMT)),
- 'decimal_point' : str(locale.localeconv()['decimal_point']).replace('\xa0', '\xc2\xa0'),
- 'thousands_sep' : str(locale.localeconv()['thousands_sep']).replace('\xa0', '\xc2\xa0'),
+ 'decimal_point' : fix_xa0(str(locale.localeconv()['decimal_point'])),
+ 'thousands_sep' : fix_xa0(str(locale.localeconv()['thousands_sep'])),
}
+
try:
lang_obj.create(cr, uid, lang_info)
finally:
@@ -767,7 +780,7 @@ def trans_load_data(db_name, fileobj, fileformat, lang, strict=False, lang_name=
# the same source
obj = pool.get(model)
if obj:
- if not field in obj._columns:
+ if field not in obj.fields_get_keys(cr, uid):
continue
ids = obj.search(cr, uid, [(field, '=', dic['src'])])
diff --git a/doc/Changelog b/doc/Changelog
index 85f3271ebc6..3c63a7ee22d 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,10 +1,385 @@
-2009-12-03: 5.0.7
+2010-05-05: 5.0.10
+==================
+
+Bugfixes (server)
+-----------------
+
+ * Not linked to a bug report:
+ * Server Actions: Cleaner legend help and error message
+ * use of tail text in preprocessor of report engine
+ * added support for missing Persian/Farsi (official language in Iran), with backport of the translations from trunk for base module
+ * https://launchpad.net/bugs/534769
+ * https://launchpad.net/bugs/452854
+ * res_currency: revert to correct rounding mechanism
+ * https://launchpad.net/bugs/540840
+ * Groups if removed, should remove relavent access rights too
+ * https://launchpad.net/bugs/558460
+ * Add the pixmaps and win32 directories in the MANIFEST to have
+ * https://launchpad.net/bugs/559346
+ * Copy() of ir_model_fields corected
+ * https://launchpad.net/bugs/541545
+ * https://launchpad.net/bugs/574394
+ * Workflow : print of workflow should not be broken if there is no flow_stop
+ * https://launchpad.net/bugs/552386
+ * _store_function dictionary should get updated when field changes its type from function to any other storable
+ * https://launchpad.net/bugs/535559
+ * Illustration tag beahvior corrected
+ * https://launchpad.net/bugs/552457
+ * Raise a detailed exception if the record does not exist in the ir_model_data object
+ * https://launchpad.net/bugs/513278
+ * res_currency: revert to correct rounding mechanism
+ * https://launchpad.net/bugs/564926
+ * _constraints : Multiple constraints on the same field should be allowed
+
+
+Improvements (server)
+---------------------
+
+ * setup.cfg: Improve the setup of the server
+
+
+Bugfixes (addons)
+-----------------
+
+ * Not linked to a bug report:
+ * Remove the bad translation files
+ * Rename the oc_OC translation files to oc_FR
+ * l10n_be: intracom declaration compliancy with Intervat 5.1.0
+ * l10n_be: compliancy of belgian vat declaration with Intervat 5.1.0 (from 05 feb 2010)
+ * account: fixed the onchange partner of bank_statement
+ * audittrail: context={} -> context=None in method signature
+ * audittrail: indentation problems
+ * audittrail: wrong class passed to super
+ * https://launchpad.net/bugs/515590
+ * https://launchpad.net/bugs/552455
+ * Account_analytic_default : Invoice creation from SO corected
+ * https://launchpad.net/bugs/546004
+ * Account : Overdue report corrected
+ * https://launchpad.net/bugs/552519
+ * account_invoice_layout : Added translation entries
+ * https://launchpad.net/bugs/571978
+ * https://launchpad.net/bugs/553881
+ * Account : Added a link to view unreconciled receivables/payables from Invoices
+ * https://launchpad.net/bugs/566185
+ * Remove the unused translation files
+ * https://launchpad.net/bugs/559478
+ * only Grouped field should appear in groupby clause, graph orientation corrected
+ * https://launchpad.net/bugs/570652
+ * Locations when M2O,should not be among view type
+ * https://launchpad.net/bugs/519133
+ * Account : Added centralization check on write() of move line
+ * https://launchpad.net/bugs/532728
+ * sale: UoS qty visible for everyone
+ * https://launchpad.net/bugs/559347
+ * Purchase : Product_uom_change should respect fiscal position related to product_id_change
+ * https://launchpad.net/bugs/570132
+ * Account : code improved for move line creation
+ * https://launchpad.net/bugs/551522
+ * Account : Manual reconcilation should work with the option of Skip Draft Entries of Journal
+ * https://launchpad.net/bugs/539408
+ * Audittrail : Correction made to avoid crash on configuration wizard
+ * https://launchpad.net/bugs/564530
+ * Account : Copying bank statement should not copy move lines
+ * https://launchpad.net/bugs/568537
+ * Account : __compute() optimized a little
+ * https://launchpad.net/bugs/461801
+ * https://launchpad.net/bugs/568436
+ * Purchase : Merge PO should consider fiscal position
+ * https://launchpad.net/bugs/552447
+ * Account : Tax :If type=code,python_compute has to be mandatory;if applicable_type=python_code,python_appliacble has to be mandatory
+ * https://launchpad.net/bugs/561318
+ * Account/Document_ICS/MRP_Operations : datetime.datetime.strptime() replaced by mx.DateTime.strptime()
+ * https://launchpad.net/bugs/559055
+ * account_payment: Remove the duplicated 'bank_id' field in the payment.line tree view
+ * https://launchpad.net/bugs/564779
+ * Mrp_repair : Corrected make invoice process and Quotation report
+ * https://launchpad.net/bugs/557501
+ * Account_Voucher : Correction in creating account.move from voucher
+ * https://launchpad.net/bugs/519034
+ * Sale : progressbar for picking should be set when SO is picked 100%(including its procurement is done)
+ * https://launchpad.net/bugs/569036
+ * mrp_subproduct : Corrected action_confirm method
+ * https://launchpad.net/bugs/562803
+ * Membership : Copy() overridden for setting membership lines blank
+ * https://launchpad.net/bugs/552503
+ * Account : Raising an exception when journal_id is missing
+ * https://launchpad.net/bugs/564486
+ * Base_report_creator : Export method corrected
+ * https://launchpad.net/bugs/532073
+ * https://launchpad.net/bugs/489239
+ * mrp_operations : starting production order should start work order too.
+ * https://launchpad.net/bugs/557373
+ * https://launchpad.net/bugs/515507
+ * Support for ftp_server_host for setting the FTP interface for DMS server,
+ * https://launchpad.net/bugs/535109
+ * Account:
+ * https://launchpad.net/bugs/399817
+ * https://launchpad.net/bugs/452854
+ * account: finish fix of generation of account.move.lines from invoice by providing extension hook
+ * account: corrected move balance check - rounding correctly based on price_accuracy
+ * https://launchpad.net/bugs/570561
+ * Account_payment : Import of move line should include the date of search due date
+ * https://launchpad.net/bugs/567987
+ * Account_analytic_default : Invoice creation from SO corected
+ * https://launchpad.net/bugs/563713
+ * account_analytic_plans : Minor correction on a method to unlink entries
+ * https://launchpad.net/bugs/513278
+ * account: corrected move balance check - rounding correctly based on price_accuracy
+ * https://launchpad.net/bugs/551570
+ * Account_payment : Date will be asked to user while importing payment order into bank statement
+ * https://launchpad.net/bugs/550742
+ * Account : Refund invoice wizard should have current_date as default
+
+
+Improvements (addons)
+---------------------
+
+ * Add the new version of Swiss Localization:
+ * sale: unit tests for bug #461801
+ * sale: warning instead of error in some unit tests
+ * sale: demo tax account type
+ * account: test case for bug #452854
+ * account: renamed test
+ * sale: minor test changes
+ * Account_followup : Domain improved for an act_window from Partner
+
+
+2010-04-06: 5.0.9
+=================
+
+Bugfixes (server)
+-----------------
+
+ * https://launchpad.net/bugs/556634
+ * By pass a missing field in the translation
+
+
+2010-04-02: 5.0.8
=================
Bugfixes (server)
-----------------
* Not linked to a bug report:
+ * res_lang : if value of thousands_sep is not present in language,method will give error- 'moentary' name is not defined [IMP] clear cache of language on write,to be sure to get right value if value of language is changed before cache timeout
+ * bin/tools/convert.py: no need to import time since the eval(domain) is probably going to be removed or wrapped in an exception handler
+ * sql_db: avoid deadlock when releasing leaked cursors
+ * bin/tools/convert.py: reverted revision 2017.1.1: could not eval some strings. Need a dict with uid, active_id, active_ids, ...
+ * bin/tools/convert.py: missing time module
+ * i18n: fr_FR: missing information
+ * In the case we want to generate the RPM package, we change the version
+ * DONT pformat() each RPC request !
+ * reporting: change the way that para style are computed
+ * add cache to res.lang format() function
+ * fixed a bug in copy_data: it now copies the original (not translated) field value as the source value
+ * disabled "code" server action due to the security threat it poses, added --enable-code-actions command-line flag to enable it
+ * only admin can delete ir.property
+ * when deleting ir.property, do not delete the linked field
+ * correct import rng file
+ * 'Partner Manager' group should see the Partner menu
+ * removed python-xml from list of debian packages in doc/INSTALL
+ * remove ubuntu-related pyxml/python-xml hacks from openerp-server.py as pyxml shouldn't be used anywhere anymore
+ * Remove python-xml reference in setup.py
+ * https://launchpad.net/bugs/495948
+ * Corrected language code for Slovenian and Danish locales. Renamed corresponding PO files.
+ * https://launchpad.net/bugs/531430
+ * Remove the default values on the --no-netrpc and --no-xmlrpc
+ * https://launchpad.net/bugs/538399
+ * netrpc: Close the socket if there is a raised exception
+ * https://launchpad.net/bugs/532365
+ * Document : It should be allowed to browse through FTP,disregard to --no-databse-list option
+ * https://launchpad.net/bugs/531026
+ * Exploit Broken : Search should have checked access rights of read
+ * https://launchpad.net/bugs/513290
+ * Export should honor the current locale(language) settings of the user.
+ * https://launchpad.net/bugs/535551
+ * Uninstalling a board_* module removes dashboard action, but user shuold be allowed to login with default action
+ * https://launchpad.net/bugs/514273
+ * Remove the libxml2 and libxslt dependencies for the packaging
+ * https://launchpad.net/bugs/314973
+ * do not keep connections to template1, template0 and postgres in the connection pool
+ * https://launchpad.net/bugs/544087
+ * Behaviour of fields.related corrected for copy() and write() calls
+ * https://launchpad.net/bugs/551664
+ * Evaluate domain in act_window element is now possible
+ * https://launchpad.net/bugs/528624
+ * Import : Any exception should be raised in well-manner
+ * https://launchpad.net/bugs/543521
+ * Export : Correction made when selection field value if False.
+ * https://launchpad.net/bugs/516568
+ * retro-compatibility: 'obj' is available in ir.action.server code
+ * https://launchpad.net/bugs/380955
+ * setup.py: add the missing librairies for the windows packaging
+ * https://launchpad.net/bugs/497364
+ * base: respect the limit and offset arguments of the search method
+
+
+Improvements (server)
+---------------------
+
+ * sql_db: improve logging
+ * The act_window does not show groups.This adds groups and rearranges the view with a notebook to ensure that the addition of this m2m field doesnt introduce a scroll
+
+
+Bugfixes (addons)
+-----------------
+
+ * Not linked to a bug report:
+ * base_contact: res.partner.job: when partner is set, the address is required. Add onchange on partner and on address.
+ * membership: bugfix + improved inheritance of membership_state field.function
+ * Base_contact : search() of job improved
+ * account_payment: added journal_id field in account.move.line.tree view
+ * Sale : Fiscal position from SO for invoice should be priorly taken from SO rather than Partner's properties
+ * Delivery : Better functional computation of weight based on move
+ * sale: move the product_uos_qty and product_uos fields to the
+ * event: made wizard of invoice creating more flexible (use onchange) + code refactoring
+ * audittrail: Check if the object exists or Not and raise an exception if it's not the case'
+ * hr_timesheet_sheet: Add a default value for the context keyword
+ * Improved mrp_jit smoke test in case the sale config wizard was run before installing mrp_jit. There is a side-effect but it's only on demo databases, and we'll fix this test in trunk when we can write better tests.
+ * account: product_id onchange on invoice lines were returning {} when no product_id was given. This was causing problems in other modules (account_analytic_default, account_analytic_plans) that inherited because of a key error 'value'. It now returns {'value':{}}.
+ * l10n_be: adaptation du module de localisation belge conformément à la nouvelle législation TVA pour les services intracom
+ * event: invoice creation from registrations
+ * purchase: security file update: added rights for manager. Fixed rights for user
+ * https://launchpad.net/bugs/524521
+ * Account : USer will be notified for unreconciling partial reconcilatins if he tries to cancel the invoice
+ * https://launchpad.net/bugs/540128
+ * https://launchpad.net/bugs/535098
+ * Account : Only those accounts are eligible to be Parents which have type=View
+ * https://launchpad.net/bugs/552455
+ * Sale : Make Invoice wizard should only create invoice for uninvoiced lines
+ * https://launchpad.net/bugs/528889
+ * Account : name_search() of account.tax.code overridden for better search
+ * https://launchpad.net/bugs/519220
+ * Delivery : Proper Weight calculation of stock picking
+ * https://launchpad.net/bugs/535058
+ * Purchase : Seperate packign should not be created if chained locations are used
+ * https://launchpad.net/bugs/545032
+ * Stock : Invoice from Stock should respect context for translations.
+ * stock: context lost in invoice wizard
+ * https://launchpad.net/bugs/530081
+ * Sale : Sale order's Invoice should have invoice reference of customer Invoice
+ * https://launchpad.net/bugs/545868
+ * Sale_crm : proper options set on wizard makesale
+ * https://launchpad.net/bugs/467880
+ * MRP : stock.warehouse.orderpoint for qty_multiple check of 0
+ * https://launchpad.net/bugs/544287
+ * Invoice object's Partner onchange had wrong parameter
+ * https://launchpad.net/bugs/535655
+ * Base_setup : Better display of Currency selection(Name + Code)
+ * https://launchpad.net/bugs/532728
+ * sale: Remove the product.group_uos group on the product_uos and product_uos_qty fields.
+ * https://launchpad.net/bugs/540443
+ * Sale : Fiscal position value has to be passed when Invoice is created from SO
+ * https://launchpad.net/bugs/532673
+ * delivery: replace 'id' with active_id in passing context of order(takes built in function id in webclient).
+ * https://launchpad.net/bugs/528871
+ * Account : Dupliacting tax code should not copy move lines
+ * https://launchpad.net/bugs/539707
+ * https://launchpad.net/bugs/514273
+ * Base_report_designer : Replaced libxslt/libxsml2 code by lxml
+ * https://launchpad.net/bugs/540946
+ * Hr_holidays : Constraint corrected for Holidays request(start date cannot be greater than end date)
+ * https://launchpad.net/bugs/548494
+ * Account : Account should not be removed/deactivated if it is linked to any property/partner
+ * https://launchpad.net/bugs/418080
+ * Document : Browse__files_using_ftp wizard corrected
+ * https://launchpad.net/bugs/541006
+ * MRP/Purchase : Seller delay has to be converted into integer for date calculations.
+ * https://launchpad.net/bugs/528978
+ * https://launchpad.net/bugs/528929
+ * Account : Tax code tree view should have company.
+ * https://launchpad.net/bugs/552461
+ * Scrum : Burndown chart was crashing when a taskwork entry is without date
+ * https://launchpad.net/bugs/553168
+ * Account : Journal's name_search() did not use context well
+ * https://launchpad.net/bugs/494352
+ * Sale : account_invoice_end() corrected/optimized so that it does not create any regression of duplicated pickings for SO
+ * https://launchpad.net/bugs/531238
+ * improved regression tests in sale and mrp_jit modules to test separately auto-chained locations. (bug 531238)
+ * mrp: use correct location chaining by calling action_confirm() on stock move instead of directly writing the status (bug 531238).
+ * https://launchpad.net/bugs/540151
+ * Event : Notify user before sending an email on confirming event
+ * https://launchpad.net/bugs/542379
+ * Account : Terp file had duplicated author,depends keys
+ * https://launchpad.net/bugs/539073
+ * account_date_check: If the date of the move line, is not in the
+ * https://launchpad.net/bugs/532073
+ * https://launchpad.net/bugs/526081
+ * MRP : Ondelete=cascade applied to important fields of stock.warehouse.orderpoint
+ * https://launchpad.net/bugs/535642
+ * Stock : Unlink() of Move corrected
+ * Stock :Picking removal should remove moves too
+ * https://launchpad.net/bugs/506431
+ * Use the file name instead of the content
+ * https://launchpad.net/bugs/531638
+ * Sale_crm : Code improved for partner onchange to take effect on SO
+ * https://launchpad.net/bugs/530926
+ * Account : Invoice group was missing access rights for tax and tax code
+ * https://launchpad.net/bugs/531416
+ * https://launchpad.net/bugs/535601
+ * Account : Proper query generation for computing debit.credit,balance
+ * https://launchpad.net/bugs/532365
+ * Document : It should be allowed to browse through FTP,disregard to --no-databse-list option
+ * https://launchpad.net/bugs/399817
+ * Sale : Cancelled partial packing should affect Sale order's Shipped field
+ * https://launchpad.net/bugs/538064
+ * Sale : Translations for RML texts entered into po/pot
+ * https://launchpad.net/bugs/531479
+ * Stock : drop view check added for stock_report_prodlots
+ * https://launchpad.net/bugs/504353
+ * Product : Conversion from unmatched categorized UoM now raises exception
+ * https://launchpad.net/bugs/532716
+ * MRP : Split production wizard corrected
+ * https://launchpad.net/bugs/538419
+
+
+Improvements (addons)
+---------------------
+
+ * base_contact: res.partner.address: use domain instead of value in context
+ * Stock :Layout for Moves under Picking Improved
+ * Account : Fiscalyear and Period now have name_search
+ * Product : Duplicated demo data corrected
+ * purchase: moved smoke test into separate test dir and renamed demo data for consistency with sale/mrp smoke tests
+ * l10n_be: attribution de nouveaux codes plus explicites pour les taxes
+ * Account_voucher : Accounting entries should only be available for non-view accounts
+ * Account : Better view of Reconciled and Partially Reconciled entried with Entry Lines
+ * Account : Setting tax code name translateable (to be consistent with tax name)
+
+
+2010-03-01: 5.0.7
+=================
+
+Bugfixes (server)
+-----------------
+
+ * Not linked to a bug report:
+ * --smtp-ssl is not a dependent on the server ssl mode
+ * bug:504718
+ * orm: ensure the cursor is valid before computing parent_store values
+ * correct ustr. avoid a crash if getlocale() return None
+ * Fields.function : if store={}/True is removed,column should be dropped with cascaded effect
+ * Base.sql : added relation field column to ir_model_feilds
+ * Fields : relational field was not getting written to ir_model_fields,in case of one2many
+ * allow to create menu executing ir.actions.server
+ * orm: bug when browsing _inherits object
+ * Search made working for function/related fields with store=True/{...} or fnct_search=method
+ * _inherits table may delete the record which is parental to other object but not required.
+ * remove the lock on database connections
+ * correct threading problems in cache
+ * Server Action : Email can be sent with non-English characters now
+ * quality_integration_server: if db exits, db should removed on database creation
+ * Currency : Rounding improved
+ * Importation when fails,needs cursor to be rolled back
+ * handle the case of missing "#:" formated comment in po files
+ * custom report xml creation
+ * better locking when accessing to template1 database
+ * remove minidom from report/custom, replace with lxml
+ * leftover call to minidom in ps_form even though minidom isn't imported there anymore
+ * Remove leftover instances of libxslt and libxml2, replace them by lxml
+ * hang in OSX when trying to shutdown server via SIGINT
+ * set absolute path for the config file to avoid the save() method breaking on single file, since os.path.exists('') returns false and you can't create the current directory
+ * quality_integration_server: fixed problem in make link
* translation: modify msg id where it contains python code in translations po files
* use env for python shebang rather than hardcoding /usr/bin/python
* base: wrong fr_FR translation for 'Delete Permission'
@@ -32,65 +407,188 @@ Bugfixes (server)
* recursive child_of on one2many and many2many
* default context
* https://launchpad.net/bugs/463415
- * https://launchpad.net/bugs/490604
- * RAW reports creation corrected
+ * https://launchpad.net/bugs/525962
+ * Ir_model : Made an offensive check of context
* https://launchpad.net/bugs/430133
* Name_search() is having now record limit to be 80 instead of None
- * https://launchpad.net/bugs/434341
- * Export : Selection field gets imported by its external name if export is not import compatible
- * https://launchpad.net/bugs/489355
- * fields: '_fnct_write' should pass context object to the 'write' method
- * https://launchpad.net/bugs/410191
- * Record rule : domain evaluation problem corrected
- * https://launchpad.net/bugs/420507
- * Domain was getting failed when trying to work upon M2M,O2M field of object
- * https://launchpad.net/bugs/453269
- * Amount to text conversions made better
- * https://launchpad.net/bugs/488234
- * connection pool when database password is provided (thanks to Syleam Crew)
+ * https://launchpad.net/bugs/407667
+ * Allowed SQL reserved keywords to be used in _order,group by ,etc.[Make sure , your _order should look like _order='to' instead of to]
+ * https://launchpad.net/bugs/495636
+ * Warning for reports for header attributes used in .py
+ * https://launchpad.net/bugs/523071
+ * Default_get : fields of _inherits for default values should be considered
+ * https://launchpad.net/bugs/493548
+ * Ir_actions : Unicode error corrected
+ * https://launchpad.net/bugs/409354
+ * Browse with _inherits issue fixed if more than one M2O to parent objct exists
* https://launchpad.net/bugs/430805
* Import made successful when field is O2M and it has relation under that.
- * https://launchpad.net/bugs/480301
- * M2M : values filtering on set()
* https://launchpad.net/bugs/462506
* Priority on fields.function with store dictionary made working.
+ * https://launchpad.net/bugs/483527
+ * https://launchpad.net/bugs/373176
+ * Behavior of server corrected if addons-path is wrong
+ * https://launchpad.net/bugs/489355
+ * fields: '_fnct_write' should pass context object to the 'write' method
+ * https://launchpad.net/bugs/491867
+ * revert bad fix
+ * fields.related were misbehaving
* https://launchpad.net/bugs/433886
* Update Module : Float8 to float and numeric to float casting made possible
- * https://launchpad.net/bugs/491365
- * Translation: Error parsing .po files when application puts comments in a single line
- * https://launchpad.net/bugs/460560
- * Ir_attachment : Context updation corrected on preview
- * https://launchpad.net/bugs/356628
- * allow related fields to point to one2many and many2many fields
- * https://launchpad.net/bugs/483527
- * https://launchpad.net/bugs/435933
- * Encoding error corrected for client_action(ir_values-tree view)
+ * https://launchpad.net/bugs/410191
+ * Record rule : domain evaluation problem corrected
+ * https://launchpad.net/bugs/519468
+ * Fields : Only one2many fields can have relation_field,avoid checks for others
+ * https://launchpad.net/bugs/523971
+ * Missing imports of _ of tools.translate provided
+ * https://launchpad.net/bugs/500571
+ * Record Rules : domain_force made working
+ * https://launchpad.net/bugs/519204
+ * Base : Country can be searched on Country codes independent to case
+ * https://launchpad.net/bugs/493545
+ * Allowed to be added into an inherited view(under field)
+ * https://launchpad.net/bugs/456978
+ * O2M should check existing relations for its concerned M2O
+ * https://launchpad.net/bugs/522227
+ * Fixed error notification on parent_store=true with a column without ondelete=cascade
+ * https://launchpad.net/bugs/516030
+ * Export translations + Cache on translations + Resynchronization wizard Corrections
* https://launchpad.net/bugs/430728
* Allowing sql keywords as fields(don't use them in order by clause)
- * https://launchpad.net/bugs/487836
- * Custom Object xml arch needed encoding.
- * https://launchpad.net/bugs/487723
- * Module informtion was not getting updated on upgrading module
* https://launchpad.net/bugs/480782
- * https://launchpad.net/bugs/478724
- * Export : M2M field name was missing last character
+ * https://launchpad.net/bugs/524588
+ * translate: error with workaround about \xa0 in decimal_point and thousands_sep
+ * https://launchpad.net/bugs/453269
+ * Amount_To_Text Corrected
+ * Amount to text conversions made better
+ * https://launchpad.net/bugs/490604
+ * RAW reports creation corrected
+ * https://launchpad.net/bugs/425350
+ * Menu attribute to report/wizard/url made behaving correctly
+ * https://launchpad.net/bugs/504584
+ * https://launchpad.net/bugs/495948
+ * Corrected language code for Slovenian and Danish locales. Renamed corresponding PO files.
+ * https://launchpad.net/bugs/480301
+ * M2M : values filtering on set()
+ * https://launchpad.net/bugs/503278
+ * Search : searching translated fields made possible(related,one2many,many2many)
+ * https://launchpad.net/bugs/504243
+ * https://launchpad.net/bugs/490125
+ * Custom fields should be removed from _columns too
+ * https://launchpad.net/bugs/490337
+ * Corrections made when removing a module and updating the module database: Entry from ir_model_data should also be removed when moudle is removed
+ * https://launchpad.net/bugs/496433
+ * Server Action: Help message of Legend corrected
+ * https://launchpad.net/bugs/417023
+ * Installation should alert user if any no pool record found for M2M/M2O.
+ * https://launchpad.net/bugs/493657
+ * Custom fields won't disturb anything while updating server
+ * https://launchpad.net/bugs/435933
+ * Encoding error corrected for client_action(ir_values-tree view)
+ * https://launchpad.net/bugs/514231
+ * M2O : Unfair behavior of M2O for access denial records and normal ones(All records were hidden by access denied if one had failed to meet access rights).
+ * https://launchpad.net/bugs/499501
+ * Report : Proper Message notification when RML file is not found
+ * https://launchpad.net/bugs/523762
+ * Expression.py corrected when M2O search returns no IDs
+ * https://launchpad.net/bugs/420507
+ * Domain was getting failed when trying to work upon M2M,O2M field of object
+ * https://launchpad.net/bugs/523123
+ * Not allowing Duplicate shortcuts
+ * https://launchpad.net/bugs/516469
+ * Wizard should raise exception to user when writte inside 'choice' type
+ * https://launchpad.net/bugs/488234
+ * connection pool when database password is provided (thanks to Syleam Crew)
+ * https://launchpad.net/bugs/491365
+ * Translation: Error parsing .po files when application puts comments in a single line
+ * https://launchpad.net/bugs/433395
+ * https://launchpad.net/bugs/462285
+ * Remove the useless cr.commit() in the get_id() method of the ir.sequence object
+ * https://launchpad.net/bugs/356628
+ * allow related fields to point to one2many and many2many fields
+ * https://launchpad.net/bugs/460560
+ * Ir_attachment : Context updation corrected on preview
* https://launchpad.net/bugs/437729
* Export Translation : Warning on Non-existing record instead of breaking flow
+ * https://launchpad.net/bugs/503445
+ * Partner : Name_get() of res.partner.address corrected
+ * https://launchpad.net/bugs/445252
+ * Translation was not getting inserted to DB on write()
+ * https://launchpad.net/bugs/497364
+ * revert previous patch about linked bug (lp:497364)
+ * Menu : Search method corrected for the non-Admin user
+ * https://launchpad.net/bugs/434341
+ * Export : Selection field gets imported by its external name if export is not import compatible
+ * https://launchpad.net/bugs/489573
+ * Manual object and field creation with searchable
+ * https://launchpad.net/bugs/520854
+ * https://launchpad.net/bugs/449516
+ * Warning raised for server action with SMS facility
+ * https://launchpad.net/bugs/519699
+ * Export translations: module name from path calculations corrected
+ * https://launchpad.net/bugs/516965
+ * User / Preferences should always display translatable languages.
+ * https://launchpad.net/bugs/516964
+ * default_FIELD from context should not overwrite modified FIELD value while creating record
+ * https://launchpad.net/bugs/516044
+ * Graph : report corrected
+ * https://launchpad.net/bugs/516962
+ * modifying a cron from client make it run concurrently multiple times
+ * https://launchpad.net/bugs/447819
+ * Ir_values : reading of default values correted
+ * https://launchpad.net/bugs/510600
+ * Import should raise an uncaught exception if not identified
+ * https://launchpad.net/bugs/413121
+ * Related with O2M behavior corrected
+ * https://launchpad.net/bugs/487836
+ * Custom Object xml arch needed encoding.
+ * https://launchpad.net/bugs/516969
+ * https://launchpad.net/bugs/487723
+ * Module informtion was not getting updated on upgrading module
+ * https://launchpad.net/bugs/372747
+ * Disable the cache for the ir.rules
+ * https://launchpad.net/bugs/478724
+ * Export : M2M field name was missing last character
+ * https://launchpad.net/bugs/497423
+ * FormatLang : Dates if specified into String,will be formatted into language-specific format
* https://launchpad.net/bugs/429519
- * https://launchpad.net/bugs/433395
* https://launchpad.net/bugs/479915
* Added lxml as required module on setup
+ * https://launchpad.net/bugs/495374
+ * Partner : titlee can have a choice to be null
+ * https://launchpad.net/bugs/509629
+ * Expression : Domain calculation of M2M/O2M corrected
+ * https://launchpad.net/bugs/504720
+ * https://launchpad.net/bugs/516568
+ * Server Actions: evaluating dict corrected
+ * https://launchpad.net/bugs/512682
+ * avoid sql injection in sequences
* https://launchpad.net/bugs/400614
* Use an alternative for the locale.RADIXCHAR if this one doesn't exist
* https://launchpad.net/bugs/491462
* Pickling issue solved with ir_values (get method)
+ * https://launchpad.net/bugs/507429
+ * Encoding problm corrected on report contents
+ * If RML contains unicode characters and title in the same ,it would have failed.
Improvements (server)
---------------------
+ * orm: allow import and record creation to defer the computation of parent_left/right
+ * orm: do not update parent_left/right if the parent haven't been changed
+ * Licensing options : Added AGPL-3 and others in choices
+ * Groups : Better duplication terminology.
+ * sql_db: better logging
+ * osv: log (in debug) access errors
+ * web_service: remove log (debug) when creating database
+ * exported method check_connectivity
+ * Sequence : Legend improved to help user understand the usage of %(year)s
+ * remove useless comment
+ * Launchpad export translation files
+ * removal of usages of the deprecated node.getchildren call, better usage of the attributes & tostring ET APIs, style fixes
+ * improve usage of the ET API, use SubElement instead of Element/append, kwarg attributes setting instead of node.set
* add option to disable the database listing
- * sql_log
* quality_integration_server: added net_port option in script
* better connection pool (global)
* ir_cron : added active feild on list view
@@ -101,18 +599,75 @@ Improvements (server)
* base_quality_interrrogation: put message if the score of quality less then minimal and remove unit test condition
* quality_integration_server: quality log : add new option to specify qualitylog path to store html pages of log
* default value for module
+ * updated changelog file for 5.0.6 release
Bugfixes (addons)
-----------------
* Not linked to a bug report:
+ * event: make invoice wizard now creates invoice line with better label
+ * membership:
+ * Sale : Onchange of product/qty corrected when uos is present.Product: Help corrected for uom to uos conversion.
+ * Remove the bad translation files
+ * membership: membership amount field corect name of digits in field defination
+ * audittrail: correct dependencies
+ * audittrail: ensure cursor is closed
+ * invoice: translate the product description only if partner's language is set.
+ * account: avoid a traceback if credit/debit/balance sum can be computed
+ * mrp: fixed demo data when default_code is overridded in a custom module
+ * crm: removed debugging code
+ * document: fixed problem on window on filezilla
+ * sale_crm: CRM->Opportunities: 'convert to quote' now sets the salesman from the partner (or the user if there is none)
+ * sale: onchange on partner_id now set the partner's dedicated salesman as the sale salesman or the user if there is no dedicated salesman on that partner
+ * base_contact: search for a contact in a contact job now searches in firstname and lastname
+ * product: pricelist: ondelete cascade to avoid errors when deleting pricelists and versions ('null value in column "price_version_id" violates not-null constraint')
+ * sale_delivery_report: production lot reference was missing
+ * sale: onchange on partner_id now set the partner's dedicated salesman as the sale salesman
+ * sale_delivery_report: typo in french translation file
+ * Analytic_user_function : Corrected the Wrong way call to the method of product.uom
+ * base_contact: search in "Contact's Jobs" now also search in firstname and lastname of contacts
+ * Base_report_creator : ilike query generation problem corrected
+ * account: At the time of invoice cancel it will remove partial reconcile id from entry
+ * Account: Bank statement line,if has write-off entries,should pass write off account to move line
+ * account: set correct journal while opening customer and supplier invoices and refunds
+ * fix a prolem for the wiki content for the indexing
+ * product: Now pricelist objects price get function will pass context to price_get method of product and compute method of currency object
+ * base_module_quality: add import statment for _ and give size to name field on save report wizard so that it can display long name also
+ * Account : Wrong residual amount comes if company currency and invoice currency are different(provided no currency defined on journal)
+ * account: wizard of fiscal year closing fixed: the entries of all previous fiscal years have to be deffered, not only the last one
+ * l10n_be: fixed data of l10n_be module
+ * Analytic account report corrected
+ * Account_Voucher : Reports corrected
+ * Sale_CRM : write() was sending wrong data
+ * MRP : Accounting Entries were duplicated when processing production order with accounting configuration for locations.
+ * base_contact: domain problem on job object
+ * project: extra info tab of task view shouldn't be readonly if the task'state is 'draft'
+ * account_followup: the followup level of a partner which was removed from the proposed partner to remind was still raised although we didn't select him.
+ * change class names for all model in voucher from Account = account_account
+ * Base_report_creator : Wizard is available only for custom query,not for the custom result
+ * Point_of_sale : Receipt report corrected
+ * Account_tax_include : improvements when invoice lines are created prior to invoice
+ * Account_tax_include : Minor modif
+ * account_analytic_plans: analytic distribution are now created on invoice line when confirming sale orders (if a line is matching account analytic default rule)
+ * account: partial reconciliation check was wrongly computed
+ * base_module_quality: get_ids method problem
+ * account: no need to do a call to 'translate', method '_' is sufficient.
+ * base_module_quality: solve translate string error
+ * Stock: Moves have no state 'auto',its 'waiting'
+ * base_module_record second range problem when second is 59
+ * Project_timesheet : Removal of task with task work should affect Analytic lines
+ * Track Incoming / Outgoing products:
+ * account_analytic_default: add stock dependancy
+ * removed print statement
+ * picked in SO
* Project : remove unused import causing a DeprecationWarning under Python 2.6
* l10n_be: corrected internal type of vat account in l10n_be: set other instead of payable/receivable
* Hr_timesheet_sheet : setting type=workflow to 2 buttons
* Account: text made translatable
- * Stock : Added Product UoS to the Stock Move view
* fix the problem of menus uring installation
+ * Regression in SO from Jeroen and Jay, picked state see bug #491375
+ * Stock : Added Product UoS to the Stock Move view
* Base_contact : Making Email field of address visible on Address form view
* Stock : Added translations
* Account_invoice_layout : Reports improved and SXWs made compatible to RML
@@ -148,177 +703,376 @@ Bugfixes (addons)
* set the access right
* base_module_quality: speed test if read method has exception
* account_analytic_plans: avoid encoding errors
- * https://launchpad.net/bugs/458415
- * document_ics : solved accent problem
- * https://launchpad.net/bugs/447402
- * Project_timesheet : Wrong synchro on analytic line creation fro tasks(for name).
- * https://launchpad.net/bugs/490318
- * Account : Ondelete=cascade added to bank statement line
- * https://launchpad.net/bugs/446520
- * [account_followup] wrong sender for email
- * https://launchpad.net/bugs/454536
- * Warning : Onchange Methods were malfunctioned.Corrected and made messages available for translations
- * https://launchpad.net/bugs/450180
- * Hr_timesheet_invoice : Wrong domain was sent for opening invoices created
- * https://launchpad.net/bugs/383057
- * Stock-MRP : Split production wizard made individual to mrp if mrp is not installed
- * https://launchpad.net/bugs/488869
- * Stock/MRP : Track line wizard improved
- * https://launchpad.net/bugs/446681
- * Account : Refund wuzard malfunctioned with modify invoice option
- * https://launchpad.net/bugs/446391
- * Base_report_creator : Allowing to use current userid
- * https://launchpad.net/bugs/479747
- * https://launchpad.net/bugs/470359
- * https://launchpad.net/bugs/460701
- * Document : Attachment with document can now be deleted
- * https://launchpad.net/bugs/439469
- * Product : Pricelist types getting translated on Pricelist
- * https://launchpad.net/bugs/489355
- * account, invoice, sale: description (product sold, invoice line and account entry line) was not translated
- * https://launchpad.net/bugs/435160
- * [IMP] Correct write-off date, add analytic account, better interface between all way to reconcile
- * https://launchpad.net/bugs/481524
- * Stock : Forecast report: unicode error corrected
- * https://launchpad.net/bugs/458553
- * Account : Onchange of amount/base amount of Invocie tax corrected
- * https://launchpad.net/bugs/438705
- * Stock : Stock move lines on Production Order well-structured
- * https://launchpad.net/bugs/441609
- * Account : Fiscal Position Template was missing a requireed field in form view
- * https://launchpad.net/bugs/467880
- * MRP : Procurement can only be confirmed when qty>0.0
- * https://launchpad.net/bugs/486783
- * Point_of_sale : Report for Reciept corrected
- * https://launchpad.net/bugs/448591
- * Account : Refund wizard wasnt calculating taxes for new invoices
- * https://launchpad.net/bugs/395160
- * Project_timesheet : Analytic line creation/edition takes user based information
- * https://launchpad.net/bugs/436008
- * Sale: Passing Contact address for invoices from SO
- * https://launchpad.net/bugs/428926
- * account_payment when importing payment lines (currency not set correctly)
- * https://launchpad.net/bugs/439041
- * Report_project :wrong average of closing days counting
- * https://launchpad.net/bugs/396637
- * account_analytic_analysis : Analytic account functional field methods corrected.
- * Account : Analytic account functional field methods corrected.
- * https://launchpad.net/bugs/445547
- * Stock: Picking report correction
- * https://launchpad.net/bugs/443069
- * Project: wrong domain for 'Tasks in Progress' menuitem
- * https://launchpad.net/bugs/483723
- * CRM : Case form view priority issue resolved
- * https://launchpad.net/bugs/427869
- * Residual amount in invoice when currency rating change
+ * https://launchpad.net/bugs/528289
+ * membership: printing report crashes on graph view
+ * https://launchpad.net/bugs/522696
+ * Stock : Split moves wizard should respect current language
+ * https://launchpad.net/bugs/528281
+ * membership: membership state not correctly updated with associated partner
+ * https://launchpad.net/bugs/524425
* https://launchpad.net/bugs/416810
* Document: attachment linked with Files
- * https://launchpad.net/bugs/461801
- * Sale : Workflow behaviour fixed when order is set to draft
- * https://launchpad.net/bugs/461720
- * Scrum : Wrong view,widgetless fields on scrum view made correct
- * https://launchpad.net/bugs/474337
- * [CRITICAL] warning : missing import statement for "_"
- * https://launchpad.net/bugs/443132
- * Sale : Passing customer ref. of picking to invoice
- * https://launchpad.net/bugs/488809
- * Sale : State was written wrongly
- * https://launchpad.net/bugs/465010
- * Stock : Notification Message made translatable
- * https://launchpad.net/bugs/490342
- * Account : making the default_get() eTiny compatible
+ * https://launchpad.net/bugs/470359
+ * https://launchpad.net/bugs/438725
+ * Purchase : Setting the value of payment term while creatying invoice from PO
+ * https://launchpad.net/bugs/492793
+ * Project_gtd : Improved fields_view_get() andmade it compatible to stable
+ * https://launchpad.net/bugs/525314
+ * membership: membership date from and to required now on product form
* https://launchpad.net/bugs/453030
* Avoid display write-off in pay invoice wizard : take care of partial payment
* Avoid display write-off in pay invoice wizard. Put the right date and currency for conversion
+ * https://launchpad.net/bugs/448591
+ * Account : Refund wizard wasnt calculating taxes for new invoices
+ * https://launchpad.net/bugs/489241
+ * mrp_operations : work order calculation corrected
+ * https://launchpad.net/bugs/493704
+ * Small stock tracking problem
+ * https://launchpad.net/bugs/518914
+ * Unable to validate supplier invoice/refund with reference greater than 32 characters. The reference is used as reference for the move lines and the analytic account line but the reference of these objects are limited to 32 characters, raising an sql error. It also broke the workflow of the invoice.
+ * https://launchpad.net/bugs/481130
+ * Stock: Shipping Address has to be in.po/.pot
+ * https://launchpad.net/bugs/427869
+ * Residual amount in invoice when currency rating change
+ * https://launchpad.net/bugs/474337
+ * [CRITICAL] warning : missing import statement for "_"
+ * https://launchpad.net/bugs/513983
+ * Sale : Order lines should be not editable for non-draft SO.
+ * https://launchpad.net/bugs/433898
+ * fix a problem Point of sale create outgoing shipments incl. service items
+ * https://launchpad.net/bugs/516746
+ * Account : Bank statements should not be altered/removed when state is confirmed
* https://launchpad.net/bugs/445267
* Mrp_subproduct : Wrong calculation of QTYs corrected(Product qty,UOS qty)
- * https://launchpad.net/bugs/401035
- * Audittrail : Assigned Access Rights to non-admin user.
- * https://launchpad.net/bugs/421636
- * Account : Restricting Payment term lines percentage insertion from 0 to 1
- * https://launchpad.net/bugs/425671
- * Stock : Moves offer onchange on UOM to affect UOS
- * https://launchpad.net/bugs/489083
- * Account :customer refund was displaying supplier invoice view, corrected
- * https://launchpad.net/bugs/480856
- * Warning : the super of onchange may return {},covered the same
- * https://launchpad.net/bugs/459196
- * Account : Partner Ledger Report formatting problem solved
- * https://launchpad.net/bugs/483583
- * Sale/Purcghase : Function fields did not have digits attribute for precision accuracy
- * https://launchpad.net/bugs/475135
- * Account : Warning message was missing _ import
+ * https://launchpad.net/bugs/496889
+ * Account : wizard_pay_invoice corrected (Check made to calculate only receivable,payable lines)
+ * Account: Better calculation of invoice amount
+ * https://launchpad.net/bugs/428926
+ * account_payment when importing payment lines (currency not set correctly)
+ * https://launchpad.net/bugs/502984
+ * Hr_holidays: leaves' calculation corrected on removal of leaves
+ * https://launchpad.net/bugs/434628
+ * Account : In bank statements,Move Lines should be imported only once
+ * https://launchpad.net/bugs/503741
+ * Purchase : Purchase/user was missing account.tax access rights
* https://launchpad.net/bugs/457188
* Account_analytic_analysis : Summary of Months calculation Corrected
- * https://launchpad.net/bugs/435178
- * [CRITICAL]subscription: crash subscription process
- * https://launchpad.net/bugs/480035
- * CRM : action name improved
- * https://launchpad.net/bugs/487091
- * Stock :Invoice created from manual picking might miss UoS.
- * https://launchpad.net/bugs/435298
- * Subscription : Disallowed to change the Object linked to the document type.
- * https://launchpad.net/bugs/436651
- * mrp : workcentre load report had a query malformed
- * https://launchpad.net/bugs/479886
- * Account : Total field on supplier invoice set to 0.0 to amke it Web-client compatible
- * https://launchpad.net/bugs/479195
- * Base_vat : Romania VAT validation corrected
+ * https://launchpad.net/bugs/528292
+ * membership: membership cancel date is not updated
* https://launchpad.net/bugs/351083
* Account : Partner Balance report gets printed with respect to the company selected
- * https://launchpad.net/bugs/451310
- * https://launchpad.net/bugs/449583
- * Sale : Better error message when account is missing from SOL for Invioce
- * https://launchpad.net/bugs/486794
- * Hr_holidays: Spell mistake corrected
- * https://launchpad.net/bugs/351167
- * https://launchpad.net/bugs/438725
- * Purchase : Setting the value of payment term while creatying invoice from PO
- * https://launchpad.net/bugs/471052
- * Product : Pricelist Item cannot use Main pricelist as the other pricelist
- * https://launchpad.net/bugs/481372
- * Project : If company has no Project time unit,it would have crashed.
- * https://launchpad.net/bugs/458030
- * Account : Ledger Report Landscape report adjusted for A4.
+ * https://launchpad.net/bugs/497365
+ * Account : Supplier Invoices new record creation corrected for web client
+ * https://launchpad.net/bugs/435298
+ * Subscription : Disallowed to change the Object linked to the document type.
+ * https://launchpad.net/bugs/490883
+ * MRP: Proper context value passed for PO creation from packing via SO
+ * https://launchpad.net/bugs/479886
+ * Account : Total field on supplier invoice set to 0.0 to amke it Web-client compatible
+ * https://launchpad.net/bugs/398562
+ * MRP : Accounting Entries were duplicated when processing production order with accounting configuration for locations.
+ * https://launchpad.net/bugs/445547
+ * Stock: Picking report correction
+ * https://launchpad.net/bugs/507694
+ * Properly cancel a draft purchase.order when unlinking it, so correct workflow signals can be propagated to parent workflows if there are any.
+ * https://launchpad.net/bugs/460924
+ * Stock : force_assign won't create duplicate entries
+ * https://launchpad.net/bugs/516100
+ * Account : Invoice line should display complete name of product from the onchange
+ * Stock : Onchange corrected to have an effect of translations
+ * https://launchpad.net/bugs/492174
+ * Base_report_creator : encoding eror corrected on adding filters
* https://launchpad.net/bugs/446205
* CRM : Mailgate script has host as parameter now onwards
- * https://launchpad.net/bugs/487641
- * Purchase : MOQ-pricing problem corrected
- * https://launchpad.net/bugs/476428
- * Stock : Partial Picking wizard was missing translation import statement
- * https://launchpad.net/bugs/366944
- * Base_vat : Spanish numbers validation corrected
- * https://launchpad.net/bugs/466658
- * Account : Action window of anlytic entries was missing name
+ * https://launchpad.net/bugs/501625
+ * Account : General Ledger report in Landscape made transltable
* https://launchpad.net/bugs/440557
* Purchase : POL had a wrong tree view which is unused till now
* https://launchpad.net/bugs/452854
* Correct the validate function for balanced move into account.py (after Fabien Warning)
* Use price_accuracy to verify balanced entry insteed of fixed '0,0001'. Add price_accuracy on debit and credit move lines
- * https://launchpad.net/bugs/491241
- * Stock : Removal of picking shuold affect product stock
- * https://launchpad.net/bugs/490327
- * Reverted bad commit from Joel@CamptoCamp
- * https://launchpad.net/bugs/440734
- * Stock : Picking did not have 'type' field on display(inconsistent behavior from eTiny,koo) to work upon domain.
- * https://launchpad.net/bugs/436174
- * Account: Supplier invoices was not taking product price on onchange of product
+ * https://launchpad.net/bugs/522532
+ * Stock : Priority assigned to stock.location list view
+ * https://launchpad.net/bugs/522629
+ * https://launchpad.net/bugs/480035
+ * CRM : action name improved
+ * https://launchpad.net/bugs/439469
+ * Product : Pricelist types getting translated on Pricelist
+ * https://launchpad.net/bugs/512682
+ * avoid sql injection in sequences
+ * https://launchpad.net/bugs/476343
+ * https://launchpad.net/bugs/447402
+ * Project_timesheet : Wrong synchro on analytic line creation fro tasks(for name).
+ * https://launchpad.net/bugs/490318
+ * Account : Ondelete=cascade added to bank statement line
+ * https://launchpad.net/bugs/459027
+ * Sale : SOL's subtotal was missign price-accuracy
+ * https://launchpad.net/bugs/509496
+ * Account_tax_include : Refund of invioce was not counting price_type.
+ * https://launchpad.net/bugs/366944
+ * Base_vat : Spanish numbers validation corrected
+ * https://launchpad.net/bugs/488869
+ * Stock/MRP : Track line wizard improved
* https://launchpad.net/bugs/474340
* Stock : Wizard improvements from Lionel
- * https://launchpad.net/bugs/440711
- * Purchase : PO with different pricelists should not be merged
+ * https://launchpad.net/bugs/445306
+ * document: put warning message in module descrition regarding lost files which are exits before installing document
+ * https://launchpad.net/bugs/491867
+ * base_contact: fix bad related field
+ * https://launchpad.net/bugs/481524
+ * Stock : Forecast report: unicode error corrected
+ * https://launchpad.net/bugs/493369
+ * Hr_attendance : Sign out entries were not possible when we 'change work'
+ * https://launchpad.net/bugs/438705
+ * Stock : Stock move lines on Production Order well-structured
+ * https://launchpad.net/bugs/500096
+ * Base_report_creator : Support of count(*) added
+ * https://launchpad.net/bugs/521106
+ * Account : Analytic charts of accounts was raising exception on displaying chart
+ * https://launchpad.net/bugs/464578
+ * project_timesheet: analytic entries are fully not updated, when changing task project
+ * https://launchpad.net/bugs/483583
+ * Sale/Purcghase : Function fields did not have digits attribute for precision accuracy
+ * https://launchpad.net/bugs/461720
+ * Scrum : Wrong view,widgetless fields on scrum view made correct
+ * https://launchpad.net/bugs/491898
+ * Purchase : Fields set readonly on done state
+ * https://launchpad.net/bugs/480856
+ * Warning : the super of onchange may return {},covered the same
+ * https://launchpad.net/bugs/496898
+ * Account : Fields were missing in Account chart template form view
+ * https://launchpad.net/bugs/502065
+ * Stock : Product Packaging field was missing domain
+ * https://launchpad.net/bugs/351167
+ * https://launchpad.net/bugs/459196
+ * Account : Partner Ledger Report formatting problem solved
+ * https://launchpad.net/bugs/465010
+ * Stock : Notification Message made translatable
+ * https://launchpad.net/bugs/491892
+ * Reconcilation problem corrected when foreign currency rate changes
+ * https://launchpad.net/bugs/504781
+ * Project : Task delegation was calling write() wrongly
+ * https://launchpad.net/bugs/494245
+ * Services product included on BOM now creates a task on Project
+ * https://launchpad.net/bugs/475135
+ * Account : Warning message was missing _ import
+ * https://launchpad.net/bugs/467880
+ * MRP : Procurement can only be confirmed when qty>0.0
+ * https://launchpad.net/bugs/401801
+ * Sale/Purchase : Worfklow instance had to ve removed while setting record's workflow back to draft state
+ * https://launchpad.net/bugs/449583
+ * Sale : Better error message when account is missing from SOL for Invioce
+ * https://launchpad.net/bugs/439041
+ * Report_project :wrong average of closing days counting
+ * https://launchpad.net/bugs/517018
+ * https://launchpad.net/bugs/487641
+ * Purchase : MOQ-pricing problem corrected
+ * https://launchpad.net/bugs/500062
+ * Account : On Confirming the statement, Moves shoould have the bank statement line date
+ * https://launchpad.net/bugs/525229
+ * call fields_view_get with not specify the context raise an exception on product with stock module installed
+ * https://launchpad.net/bugs/441609
+ * Account : Fiscal Position Template was missing a requireed field in form view
+ * https://launchpad.net/bugs/483723
+ * CRM : Case form view priority issue resolved
+ * https://launchpad.net/bugs/440734
+ * Stock : Picking did not have 'type' field on display(inconsistent behavior from eTiny,koo) to work upon domain.
+ * https://launchpad.net/bugs/419720
+ * Sale : Delivery Date delay computation made corrected when days are passed with fractions
* https://launchpad.net/bugs/439208
* Hr_timesheet : Allowing user to enter Analytic Journal if not linked with employee(Working hours tree view)
* https://launchpad.net/bugs/379118
* Stock : Partial Picking wizard was making the back order reference jump to 2 numbers,notification given on packing done.
- * https://launchpad.net/bugs/476343
- * https://launchpad.net/bugs/419720
- * Sale : Delivery Date delay computation made corrected when days are passed with fractions
+ * https://launchpad.net/bugs/526930
+ * Account : act_link added for better options of viewing move lines from partner
+ * Account : act_link from partners for account entries should contain only receivable/payable accounts
+ * https://launchpad.net/bugs/526417
+ * Sale_delivery_report : Report corrected
+ * https://launchpad.net/bugs/450180
+ * Hr_timesheet_invoice : Wrong domain was sent for opening invoices created
+ * https://launchpad.net/bugs/446391
+ * Base_report_creator : Allowing to use current userid
+ * https://launchpad.net/bugs/519225
+ * https://launchpad.net/bugs/522011
+ * fix a problem of 0 amount entries
+ * https://launchpad.net/bugs/505697
+ * Account : Analytic check report should consider expenses are debits
+ * https://launchpad.net/bugs/519220
+ * Weight on Picking has to be calculated from the Moves
+ * https://launchpad.net/bugs/519433
+ * Sale : Invoice from packing should pass proper notes to invoice
+ * https://launchpad.net/bugs/500078
+ * https://launchpad.net/bugs/527151
+ * CRM_configuration : Menu action for all Unassigned opportunities had wrong domain
+ * https://launchpad.net/bugs/486783
+ * Point_of_sale : Report for Reciept corrected
+ * https://launchpad.net/bugs/503894
+ * Base_report_crearor :Models with _inherits made working
+ * https://launchpad.net/bugs/371681
+ * Residual amount was calculated wrongly when invoice had payment term lines
+ * https://launchpad.net/bugs/454536
+ * Warning : Onchange Methods were malfunctioned.Corrected and made messages available for translations
+ * https://launchpad.net/bugs/504670
+ * Functional fields should have context as an argument when we use fnct_searc method
+ * https://launchpad.net/bugs/507094
+ * https://launchpad.net/bugs/396637
+ * account_analytic_analysis : Analytic account functional field methods corrected.
+ * Account : Analytic account functional field methods corrected.
+ * https://launchpad.net/bugs/495948
+ * Corrected language code for Slovenian and Danish locales and renamed corresponding PO files.
+ * https://launchpad.net/bugs/470815
+ * l10n_chart_uk_minimal : Demo account.tax.code needed negative sign
+ * https://launchpad.net/bugs/513240
+ * https://launchpad.net/bugs/421636
+ * Account : Restricting Payment term lines percentage insertion from 0 to 1
+ * https://launchpad.net/bugs/516636
+ * Project_timesheet: Product_uom supplied to Analytic entries
+ * https://launchpad.net/bugs/492211
+ * MRP : procurement does not need cancel button when its Running
+ * https://launchpad.net/bugs/401035
+ * Audittrail : Assigned Access Rights to non-admin user.
+ * https://launchpad.net/bugs/511198
+ * https://launchpad.net/bugs/499120
+ * Stock : While removing the picking,moves should not call picking's write()
+ * https://launchpad.net/bugs/438690
+ * Account : Accounts containing moves cannot be deleted
+ * https://launchpad.net/bugs/490965
+ * Sale : SO was getting stuck when invoice is cancelled and SOL is with product.
+ * https://launchpad.net/bugs/446520
+ * [account_followup] wrong sender for email
+ * https://launchpad.net/bugs/528418
+ * membership: all products are considered to be memberships
+ * https://launchpad.net/bugs/522862
+ * document: Fixed non-closed Cursor problem
+ * https://launchpad.net/bugs/451310
+ * https://launchpad.net/bugs/479747
+ * https://launchpad.net/bugs/486794
+ * Hr_holidays: Spell mistake corrected
+ * https://launchpad.net/bugs/443132
+ * Sale : Passing customer ref. of picking to invoice
+ * https://launchpad.net/bugs/481372
+ * Project : If company has no Project time unit,it would have crashed.
+ * https://launchpad.net/bugs/476428
+ * Stock : Partial Picking wizard was missing translation import statement
+ * https://launchpad.net/bugs/500591
+ * Account: Spell corrected in order to display separator on subscription wizard
+ * Account: Creation of Moves to Subscription entries Corrected
+ * https://launchpad.net/bugs/436174
+ * Account: Supplier invoices was not taking product price on onchange of product
+ * https://launchpad.net/bugs/488809
+ * Sale : State was written wrongly
+ * https://launchpad.net/bugs/490327
+ * Reverted bad commit from Joel@CamptoCamp
+ * https://launchpad.net/bugs/383057
+ * Stock-MRP : Split production wizard made individual to mrp if mrp is not installed
+ * https://launchpad.net/bugs/440711
+ * Purchase : PO with different pricelists should not be merged
+ * https://launchpad.net/bugs/516143
+ * Base_report_designer : Latin-1 encoding replaced by utf-8
+ * https://launchpad.net/bugs/525768
+ * membership: now membership state not depends on current date
+ * https://launchpad.net/bugs/513230
+ * Product :Uom conversion was made 2 times
+ * https://launchpad.net/bugs/522977
+ * Fixed mrp to ensure that mrp_jit can trigger the procurement assignation properly. See bug 522977.
+ * https://launchpad.net/bugs/510692
+ * Account : Onchange of product should affect price on supplier invoice line
+ * https://launchpad.net/bugs/458415
+ * document_ics : solved accent problem
+ * https://launchpad.net/bugs/428873
+ * purchase: chain location does not work
+ * https://launchpad.net/bugs/489355
+ * account, invoice, sale: description (product sold, invoice line and account entry line) was not translated
+ * https://launchpad.net/bugs/515590
+ * https://launchpad.net/bugs/499645
+ * Project_mrp: Better effect for service products creating tasks/projects
+ * https://launchpad.net/bugs/466658
+ * Account : Action window of anlytic entries was missing name
+ * https://launchpad.net/bugs/510217
+ * Added Missing import statements of translations( from tools.translate import _)
+ * https://launchpad.net/bugs/460701
+ * Document : Attachment with document can now be deleted
+ * https://launchpad.net/bugs/498047
+ * Account_tax_include : Rounding corrections
+ * https://launchpad.net/bugs/435160
+ * [IMP] Correct write-off date, add analytic account, better interface between all way to reconcile
+ * https://launchpad.net/bugs/458553
+ * Account : Onchange of amount/base amount of Invocie tax corrected
+ * https://launchpad.net/bugs/446681
+ * Account : Refund wuzard malfunctioned with modify invoice option
+ * https://launchpad.net/bugs/493444
+ * Account_analytic_default : Analytic Account value set from picking,sale
+ * account_analytic_default: now it will make entry in anayltic account on invoice line when picking done
+ * https://launchpad.net/bugs/395160
+ * Project_timesheet : Analytic line creation/edition takes user based information
+ * https://launchpad.net/bugs/425671
+ * Stock : Moves offer onchange on UOM to affect UOS
+ * https://launchpad.net/bugs/489083
+ * Account :customer refund was displaying supplier invoice view, corrected
+ * https://launchpad.net/bugs/499038
+ * CRM_profiling : Segmentation form was missing one field
+ * https://launchpad.net/bugs/496991
+ * HR_Timesheet_sheet : timesheet cannot be deleted which have attendance entries encoded
+ * https://launchpad.net/bugs/507638
+ * Account : General Ledger report corrected for debit/credit if 0
+ * https://launchpad.net/bugs/461801
+ * Sale : Workflow behaviour fixed when order is set to draft
+ * https://launchpad.net/bugs/516361
+ * POS : for Invoice created from POS,Consistency should be maintained as SO.
+ * https://launchpad.net/bugs/439027
+ * MRP :Arguemnt of context was missing
+ * https://launchpad.net/bugs/490342
+ * Account : making the default_get() eTiny compatible
+ * https://launchpad.net/bugs/504824
+ * account: credit/debit/balance of consolidated accounts
+ * https://launchpad.net/bugs/522632
+ * Sale : Sale order list view should have sum attribute
+ * https://launchpad.net/bugs/435178
+ * [CRITICAL]subscription: crash subscription process
+ * https://launchpad.net/bugs/522161
+ * base_module_quality: speed_test
+ * https://launchpad.net/bugs/487091
+ * Stock :Invoice created from manual picking might miss UoS.
+ * https://launchpad.net/bugs/379581
+ * Base_report_creator: Export of custom reports made working
+ * https://launchpad.net/bugs/479195
+ * Base_vat : Romania VAT validation corrected
+ * https://launchpad.net/bugs/436008
+ * Sale: Passing Contact address for invoices from SO
+ * https://launchpad.net/bugs/443069
+ * Project: wrong domain for 'Tasks in Progress' menuitem
+ * https://launchpad.net/bugs/518824
+ * Project : 100% completed project should dislay proper message on Gantt chart,instead of getting failed
+ * https://launchpad.net/bugs/471052
+ * Product : Pricelist Item cannot use Main pricelist as the other pricelist
+ * https://launchpad.net/bugs/458030
+ * Account : Ledger Report Landscape report adjusted for A4.
+ * https://launchpad.net/bugs/495933
+ * Account : Made amount field of account.move searchable
+ * https://launchpad.net/bugs/440248
+ * Hr_timesheet_invoice : Line once invoiced,should not be invoiced again
+ * https://launchpad.net/bugs/491241
+ * Stock : Removal of picking shuold affect product stock
+ * https://launchpad.net/bugs/510604
+ * Account: Sequence and main seq. should be different
+ * https://launchpad.net/bugs/436651
+ * mrp : workcentre load report had a query malformed
Improvements (addons)
---------------------
+ * Update Translations
+ * Don't specify default value for dict, that return None if value doesn't exists
+ * Account_payment: showing account feild on move line when importing invoice for payment
+ * Account/base_iban : bank and iban displayed on list view of O2M to partner
+ * MRP : BOM structure report should follow hierarchy.
+ * event_project: change the string on event object all task to remaining task and put the domain on retro planning wizard(open only projects with state=template)
+ * Account : Reference allocation to move/move.line improved
+ * Launchpad export translation files
+ * Added GNU licence
+ * Unit Test cases for Sale
+ * unit test in base quality module
* MRP : mrp.routing.workcenter made deletable on cascade effect
* Account : Entry Line action Name Improved
* Stock : Improved names of Stock move tree view
diff --git a/setup.cfg b/setup.cfg
index d8e3b9cd962..c920547962b 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -6,7 +6,7 @@ formats=rpm
[bdist_rpm]
# release must exactly match 'release' as set in bin/release.py
-release=3
+release=10
requires=python >= 2.4
#build-requires=python-devel >= 2.3
diff --git a/setup.py b/setup.py
index 38426f83df5..cb51961ed3c 100755
--- a/setup.py
+++ b/setup.py
@@ -44,7 +44,7 @@ sys.path.append(join(os.path.abspath(os.path.dirname(__file__)), "bin"))
execfile(join('bin', 'release.py'))
-if sys.argv[1] == 'bdist_rpm':
+if 'bdist_rpm' in sys.argv:
version = version.split('-')[0]
# get python short version
@@ -177,11 +177,14 @@ options = {
"compressed": 1,
"optimize": 2,
"dist_dir": 'dist',
- "packages": ["lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
- "lxml.objectify", "decimal", "xml", "encodings",
- "dateutil", "wizard", "pychart", "PIL", "pyparsing",
- "pydot", "asyncore","asynchat", "reportlab", "vobject",
- "HTMLParser", "select", "yaml", "pywebdav"],
+ "packages": [
+ "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
+ "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath",
+ "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing",
+ "pydot", "asyncore","asynchat", "reportlab", "vobject",
+ "HTMLParser", "select", "mako", "poplib",
+ "imaplib", "smtplib", "email", "yaml","pywebdav",
+ ],
"excludes" : ["Tkconstants","Tkinter","tcl"],
}
}