[ADD]: add other files to the hr_payroll module
[odoo/odoo.git] / addons / hr_payroll / report / rml_parse.py
1 # -*- encoding: utf-8 -*-
2 ##############################################################################
3 #
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
6 #    $Id$
7 #
8 #    This program is free software: you can redistribute it and/or modify
9 #    it under the terms of the GNU General Public License as published by
10 #    the Free Software Foundation, either version 3 of the License, or
11 #    (at your option) any later version.
12 #
13 #    This program is distributed in the hope that it will be useful,
14 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
15 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 #    GNU General Public License for more details.
17 #
18 #    You should have received a copy of the GNU General Public License
19 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 #
21 ##############################################################################
22 from report import report_sxw
23 import xml.dom.minidom
24 import os, time
25 import osv
26 import re
27 import tools
28 import pooler
29 import re
30 import sys
31
32
33 class rml_parse(report_sxw.rml_parse):
34     def __init__(self, cr, uid, name, context):
35         super(rml_parse, self).__init__(cr, uid, name, context=None)
36         self.localcontext.update({
37             'comma_me': self.comma_me,
38             'format_date': self._get_and_change_date_format_for_swiss,
39             'strip_name' : self._strip_name,
40             'explode_name' : self._explode_name,
41         })
42
43     def comma_me(self,amount):
44         #print "#" + str(amount) + "#"
45         if not amount:
46             amount = 0.0
47         if  type(amount) is float :
48             amount = str('%.2f'%amount)
49         else :
50             amount = str(amount)
51         if (amount == '0'):
52              return ' '
53         orig = amount
54         new = re.sub("^(-?\d+)(\d{3})", "\g<1>'\g<2>", amount)
55         if orig == new:
56             return new
57         else:
58             return self.comma_me(new)
59     def _ellipsis(self, string, maxlen=100, ellipsis = '...'):
60         ellipsis = ellipsis or ''
61         try:
62             return string[:maxlen - len(ellipsis) ] + (ellipsis, '')[len(string) < maxlen]
63         except Exception, e:
64             return False
65     def _strip_name(self, name, maxlen=50):
66         return self._ellipsis(name, maxlen, '...')
67
68     def _get_and_change_date_format_for_swiss (self,date_to_format):
69         date_formatted=''
70         if date_to_format:
71             date_formatted = strptime (date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
72         return date_formatted
73
74     def _explode_name(self,chaine,length):
75         # We will test if the size is less then account
76         full_string = ''
77         if (len(str(chaine)) <= length):
78             return chaine
79         #
80         else:
81             chaine = unicode(chaine,'utf8').encode('iso-8859-1')
82             rup = 0
83             for carac in chaine:
84                 rup = rup + 1
85                 if rup == length:
86                     full_string = full_string + '\n'
87                     full_string = full_string + carac
88                     rup = 0
89                 else:
90                     full_string = full_string + carac
91
92         return full_string
93
94     def makeAscii(self,str):
95         try:
96             Stringer = str.encode("utf-8")
97         except UnicodeDecodeError:
98             try:
99                 Stringer = str.encode("utf-16")
100             except UnicodeDecodeError:
101                 print "UTF_16 Error"
102                 Stringer = str
103             else:
104                 return Stringer
105         else:
106             return Stringer
107         return Stringer
108     
109     def explode_this(self,chaine,length):
110         #chaine = self.repair_string(chaine)
111         chaine = rstrip(chaine)
112         ast = list(chaine)
113         i = length
114         while i <= len(ast):
115             ast.insert(i,'\n')
116             i = i + length
117         chaine = str("".join(ast))
118         return chaine
119     
120     def repair_string(self,chaine):
121         ast = list(chaine)
122         UnicodeAst = []
123         _previouslyfound = False
124         i = 0
125         #print str(ast)
126         while i < len(ast):
127             elem = ast[i]
128             try:
129                 Stringer = elem.encode("utf-8")
130             except UnicodeDecodeError:
131                 to_reencode = elem + ast[i+1]
132                 print str(to_reencode)
133                 Good_char = to_reencode.decode('utf-8')
134                 UnicodeAst.append(Good_char)
135                 i += i +2
136             else:
137                 UnicodeAst.append(elem)
138                 i += i + 1
139         return "".join(UnicodeAst)
140
141     def ReencodeAscii(self,str):
142         print sys.stdin.encoding
143         try:
144             Stringer = str.decode("ascii")
145         except UnicodeEncodeError:
146             print "REENCODING ERROR"
147             return str.encode("ascii")
148         except UnicodeDecodeError:
149             print "DECODING ERROR"
150             return str.encode("ascii")
151
152         else:
153             print Stringer
154             return Stringer
155
156     def _add_header(self, node, header=1):
157         if header==2:
158             rml_head =  self.rml_header2
159         else:
160             rml_head =  self.rml_header
161         rml_head =  rml_head.replace('<pageGraphics>','''<pageGraphics> <image x="10" y="26cm" height="770.0" width="1120.0" >[[company.logo]] </image> ''')
162         return True