[[ repeatIn(lines(data['form']), 'a') ]][[ a['code'] or removeParentNode('tr') ]]
|
- [[ setTag('tr','tr',{'style':'TrLevel'+str(a['level']), 'paraStyle':('Level'+str(a['level']))}) ]]
- [[ a['name'] ]]
+
+ [[ (a['level']<3 and setTag('tr','tr',{'style':'TrLevel'+str(a['level']), 'paraStyle':('Level'+str(a['level']))})) or removeParentNode('font') ]]
+ [[ (a['level']>2 and setTag('tr','tr',{'style':'TrLevel', 'paraStyle':('Level')})) or removeParentNode('font') ]]
+ [[ '...'*(a['level']) ]] [[ a['name'] ]]
|
[[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['debit']) ]]
diff --git a/addons/account_report/account.py b/addons/account_report/account.py
index bf8c69754f7..29a2fe08f0f 100644
--- a/addons/account_report/account.py
+++ b/addons/account_report/account.py
@@ -59,9 +59,9 @@ class account_report(osv.osv):
def _calc_context(key,obj):
if key==0:
- return obj.find(cr,uid)
+ return obj.find(cr,uid,exception=False)
else:
- obj_key=obj.browse(cr,uid,obj.find(cr,uid))
+ obj_key=obj.browse(cr,uid,obj.find(cr,uid,exception=False))
if isinstance(obj_key,list):
obj_key=obj_key[0]
key_ids=obj.search(cr,uid,[('date_stop','<',obj_key.date_start)])
diff --git a/addons/document/document.py b/addons/document/document.py
index 039778915d3..0d33efc5a1c 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -155,6 +155,11 @@ class node_class(object):
where = self.object.domain and eval(self.object.domain, {'active_id':self.root}) or []
pool = pooler.get_pool(self.cr.dbname)
obj = pool.get(self.object.ressource_type_id.model)
+ if len(obj.fields_get(self.cr, self.uid, ['dirname'])):
+ _dirname_field = 'dirname'
+ else:
+ _dirname_field = 'name'
+
name_for = obj._name.split('.')[-1]
if nodename and nodename.find(name_for) == 0 :
id = int(nodename.replace(name_for,''))
@@ -164,16 +169,12 @@ class node_class(object):
nodename=nodename.replace('__','/')
for invalid in INVALID_CHARS:
if nodename.find(INVALID_CHARS[invalid]) :
- nodename=nodename.replace(INVALID_CHARS[invalid],invalid)
- where.append(('name','like',nodename))
-
+ nodename=nodename.replace(INVALID_CHARS[invalid],invalid)
+ where.append((_dirname_field,'like',nodename))
+
if self.object.ressource_tree:
if obj._parent_name in obj.fields_get(self.cr,self.uid):
- where.append((obj._parent_name,'=',self.object2 and self.object2.id or False))
- ids = obj.search(self.cr, self.uid, where, self.context)
- res = obj.browse(self.cr, self.uid, ids,self.context)
- result+= map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, root=x.id), res)
- return result
+ where.append((obj._parent_name,'=',self.object2 and self.object2.id or False))
else :
if self.object2:
return result
@@ -183,16 +184,30 @@ class node_class(object):
ids = obj.search(self.cr, self.uid, where, self.context)
- res = obj.browse(self.cr, self.uid, ids,self.context)
- for r in res:
- if not r.name:
- r.name = name_for+'%d'%r.id
- for invalid in INVALID_CHARS:
- if r.name.find(invalid) :
- r.name=r.name.replace(invalid,INVALID_CHARS[invalid])
- result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, root=x.id), res)
+ res = obj.browse(self.cr, self.uid, ids,self.context)
+ if _dirname_field == 'dirname':
+ for r in res:
+ if not r.dirname:
+ r.dirname = name_for+'%d'%r.id
+ for invalid in INVALID_CHARS:
+ if r.dirname.find(invalid) :
+ r.dirname=r.dirname.replace(invalid,INVALID_CHARS[invalid])
+ result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.dirname.replace('/','__'), self.object, x, root=x.id), res)
+
+ else:
+ for r in res:
+ if not r.name:
+ r.name = name_for+'%d'%r.id
+ for invalid in INVALID_CHARS:
+ if r.name.find(invalid) :
+ r.name=r.name.replace(invalid,INVALID_CHARS[invalid])
+ result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, root=x.id), res)
+
if result2:
- result = result2
+ if self.object.ressource_tree:
+ result += result2
+ else:
+ result = result2
return result
def children(self):
@@ -311,12 +326,12 @@ class document_directory(osv.osv):
object: the object.directory or object.directory.content
object2: the other object linked (if object.directory.content)
"""
- def get_object(self, cr, uid, uri, context={}):
+ def get_object(self, cr, uid, uri, context={}):
if not uri:
return node_class(cr, uid, '', False, type='database')
turi = tuple(uri)
- if False and (turi in self._cache):
- (path, oo, oo2, content,type,root) = self._cache[turi]
+ if False and (turi in self._cache):
+ (path, oo, oo2, content,type,root) = self._cache[turi]
if oo:
object = self.pool.get(oo[0]).browse(cr, uid, oo[1], context)
else:
diff --git a/addons/document/ftpserver/abstracted_fs.py b/addons/document/ftpserver/abstracted_fs.py
index a8c8c09a146..4e2ecd25d43 100644
--- a/addons/document/ftpserver/abstracted_fs.py
+++ b/addons/document/ftpserver/abstracted_fs.py
@@ -35,13 +35,13 @@ def _get_month_name(month):
def _to_unicode(s):
try:
- return s.encode('ascii')
+ return s.decode('utf-8')
except UnicodeError:
try:
- return s.decode('utf-8')
+ return s.decode('latin')
except UnicodeError:
try:
- return s.decode('latin')
+ return s.encode('ascii')
except UnicodeError:
return s
@@ -135,6 +135,11 @@ class abstracted_fs:
res = cr.fetchone()
if res and len(res):
self.db_name_list.append(db_name)
+ cr.commit()
+ except Exception,e:
+ log(e)
+ if cr:
+ cr.rollback()
finally:
if cr is not None:
cr.close()
@@ -184,10 +189,11 @@ class abstracted_fs:
def ftp2fs(self, path_orig, data):
path = self.ftpnorm(path_orig)
if path and path=='/':
- return None
- path=_to_unicode(path)
+ return None
path2 = filter(None,path.split('/'))[1:]
(cr, uid, pool) = data
+ if len(path2):
+ path2[-1]=_to_unicode(path2[-1])
res = pool.get('document.directory').get_object(cr, uid, path2[:])
if not res:
raise OSError(2, 'Not such file or directory.')
@@ -195,7 +201,15 @@ class abstracted_fs:
# Ok
def fs2ftp(self, node):
- res = node and ('/' + node.cr.dbname + '/' + _to_decode(node.path)) or '/'
+ res='/'
+ if node:
+ res=os.path.normpath(node.path)
+ res = res.replace("\\", "/")
+ while res[:2] == '//':
+ res = res[1:]
+ res='/' + node.cr.dbname + '/' + _to_decode(res)
+
+ #res = node and ('/' + node.cr.dbname + '/' + _to_decode(self.ftpnorm(node.path))) or '/'
return res
# Ok
@@ -274,7 +288,7 @@ class abstracted_fs:
s = file_wrapper('', cid, cr.dbname, uid, )
return s
- except Exception,e:
+ except Exception,e:
log(e)
raise OSError(1, 'Operation not permited.')
@@ -337,7 +351,7 @@ class abstracted_fs:
# Ok
- def chdir(self, path):
+ def chdir(self, path):
if not path:
self.cwd='/'
return None
@@ -737,8 +751,8 @@ class abstracted_fs:
except ValueError:
mname=_get_month_name(time.strftime("%m"))
mtime = mname+' '+time.strftime("%d %H:%M")
- # formatting is matched with proftpd ls output
- path=_to_decode(file.path) #file.path.encode('ascii','replace').replace('?','_')
+ # formatting is matched with proftpd ls output
+ path=_to_decode(file.path) #file.path.encode('ascii','replace').replace('?','_')
yield "%s %3s %-8s %-8s %8s %s %s\r\n" %(perms, nlinks, uname, gname,
size, mtime, path.split('/')[-1])
diff --git a/addons/hr_holidays/hr.py b/addons/hr_holidays/hr.py
index 2119cb262f7..3c3feb13ee1 100644
--- a/addons/hr_holidays/hr.py
+++ b/addons/hr_holidays/hr.py
@@ -283,7 +283,6 @@ class hr_holidays(osv.osv):
return True
hr_holidays()
-<<<<<<< TREE
class hr_holidays_per_user(osv.osv):
_name = "hr.holidays.per.user"
@@ -344,4 +343,3 @@ class holiday_user_log(osv.osv):
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
}
holiday_user_log()
-
|