~openbias/bias-trunk/bias-public-trunk

« back to all changes in this revision

Viewing changes to hr_payroll/report/rml_parse.py

  • Committer: Jose Patricio
  • Date: 2011-10-19 03:16:40 UTC
  • Revision ID: josepato@bias.com.mx-20111019031640-05zd7r5lxwx084qu
el push inicial

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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