~openerp-commiter/openobject-addons/extra-6.0

« back to all changes in this revision

Viewing changes to account_voucher/report/rml_parse.py

  • Committer: Mantavya Gajjar
  • Date: 2009-04-16 13:01:59 UTC
  • mto: (3589.23.3 addons-extra)
  • mto: This revision was merged to the branch mainline in revision 3608.
  • Revision ID: mga@tinyerp.com-20090416130159-z5ec22atycrwcl1v
uploda the new reviewd clean code for the indian accounting

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
        
 
60
    def _ellipsis(self, string, maxlen=100, ellipsis = '...'):
 
61
        ellipsis = ellipsis or ''
 
62
        try:
 
63
            return string[:maxlen - len(ellipsis) ] + (ellipsis, '')[len(string) < maxlen]
 
64
        except Exception, e:
 
65
            return False
 
66
        
 
67
    def _strip_name(self, name, maxlen=50):
 
68
        return self._ellipsis(name, maxlen, '...')
 
69
 
 
70
    def _get_and_change_date_format_for_swiss (self,date_to_format):
 
71
        date_formatted=''
 
72
        if date_to_format:
 
73
            date_formatted = strptime (date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
 
74
        return date_formatted
 
75
 
 
76
    def _explode_name(self,chaine,length):
 
77
        # We will test if the size is less then account
 
78
        full_string = ''
 
79
        if (len(str(chaine)) <= length):
 
80
            return chaine
 
81
        #
 
82
        else:
 
83
            chaine = unicode(chaine,'utf8').encode('iso-8859-1')
 
84
            rup = 0
 
85
            for carac in chaine:
 
86
                rup = rup + 1
 
87
                if rup == length:
 
88
                    full_string = full_string + '\n'
 
89
                    full_string = full_string + carac
 
90
                    rup = 0
 
91
                else:
 
92
                    full_string = full_string + carac
 
93
 
 
94
        return full_string
 
95
 
 
96
    def makeAscii(self,str):
 
97
        try:
 
98
            Stringer = str.encode("utf-8")
 
99
        except UnicodeDecodeError:
 
100
            try:
 
101
                Stringer = str.encode("utf-16")
 
102
            except UnicodeDecodeError:
 
103
                print "UTF_16 Error"
 
104
                Stringer = str
 
105
            else:
 
106
                return Stringer
 
107
        else:
 
108
            return Stringer
 
109
        return Stringer
 
110
    
 
111
    def explode_this(self,chaine,length):
 
112
        #chaine = self.repair_string(chaine)
 
113
        chaine = rstrip(chaine)
 
114
        ast = list(chaine)
 
115
        i = length
 
116
        while i <= len(ast):
 
117
            ast.insert(i,'\n')
 
118
            i = i + length
 
119
        chaine = str("".join(ast))
 
120
        return chaine
 
121
    
 
122
    def repair_string(self,chaine):
 
123
        ast = list(chaine)
 
124
        UnicodeAst = []
 
125
        _previouslyfound = False
 
126
        i = 0
 
127
        #print str(ast)
 
128
        while i < len(ast):
 
129
            elem = ast[i]
 
130
            try:
 
131
                Stringer = elem.encode("utf-8")
 
132
            except UnicodeDecodeError:
 
133
                to_reencode = elem + ast[i+1]
 
134
                print str(to_reencode)
 
135
                Good_char = to_reencode.decode('utf-8')
 
136
                UnicodeAst.append(Good_char)
 
137
                i += i +2
 
138
            else:
 
139
                UnicodeAst.append(elem)
 
140
                i += i + 1
 
141
        return "".join(UnicodeAst)
 
142
 
 
143
    def ReencodeAscii(self,str):
 
144
        print sys.stdin.encoding
 
145
        try:
 
146
            Stringer = str.decode("ascii")
 
147
        except UnicodeEncodeError:
 
148
            print "REENCODING ERROR"
 
149
            return str.encode("ascii")
 
150
        except UnicodeDecodeError:
 
151
            print "DECODING ERROR"
 
152
            return str.encode("ascii")
 
153
        else:
 
154
            print Stringer
 
155
            return Stringer
 
156
 
 
157
    def _add_header(self, node, header=1):
 
158
        if header==2:
 
159
            rml_head =  self.rml_header2
 
160
        else:
 
161
            rml_head =  self.rml_header
 
162
        rml_head =  rml_head.replace('<pageGraphics>','''<pageGraphics> <image x="10" y="26cm" height="770.0" width="1120.0" >[[company.logo]] </image> ''')
 
163
        return True
 
164
 
 
165
 
 
166