diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml index 64f448cbfba..73c879ead52 100644 --- a/addons/account/report/account_balance.rml +++ b/addons/account/report/account_balance.rml @@ -98,22 +98,7 @@ - - - - - - - - - - - - - - - - + @@ -131,34 +116,13 @@ - - - - - - - [[ 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() -