~openerp-chinese-team/openerp-china/openerp-china

« back to all changes in this revision

Viewing changes to oecn_base_fonts/res_config.py

  • Committer: JoshuaJan
  • Date: 2013-03-28 09:08:19 UTC
  • Revision ID: popkar77@gmail.com-20130328090819-3h2qaqjnthe9ek68
moreĀ configure

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
 
3
 
from openerp.osv import osv, fields
4
 
from reportlab.lib.styles import ParagraphStyle
5
 
import openerp.report.render.rml2pdf.customfonts as cfonts
6
 
from openerp import SUPERUSER_ID
7
 
from report import report_sxw,interface
8
 
from lxml import etree
9
 
import base64
10
 
import pooler
11
 
import re
12
 
import tools
13
 
from copy import deepcopy
14
 
 
15
 
RMLS = ['rml_header','rml_header2','rml_header3']
16
 
OE_FONTS = ['Helvetica','DejaVuSans','Times','Times-Roman','Courier']
17
 
 
18
 
class font_configuration(osv.TransientModel):
19
 
    _inherit = 'base.config.settings'
20
 
 
21
 
    _columns = {
22
 
        'base_font' : fields.char('Font Url'),
23
 
        'cjk_wrap': fields.boolean('CJK Wrap', help="CJK warp"),
24
 
    }
25
 
            
26
 
    def get_default_base_font(self, cr, uid, ids, context=None):
27
 
        config_parameter_obj = self.pool.get("ir.config_parameter")
28
 
        base_font = config_parameter_obj.get_param(cr, uid, "font_url", context=context)
29
 
        #base_font_name = config_parameter_obj.get_param(cr, uid, "base_font_name", context=context)
30
 
        cjk_wrap = config_parameter_obj.get_param(cr, uid, "cjk_wrap", context=context)
31
 
        return {'base_font' : base_font,'cjk_wrap' : cjk_wrap}
32
 
    
33
 
    def set_base_font(self, cr, uid, ids, context=None):
34
 
        config_parameter_obj = self.pool.get("ir.config_parameter")
35
 
        company_obj = self.pool.get("res.company")
36
 
        company_ids = company_obj.search(cr, uid, [])
37
 
        for record in self.browse(cr, uid, ids, context=context):
38
 
            config_parameter_obj.set_param(cr, uid, "font_url", record.base_font or '', context=context)
39
 
            config_parameter_obj.set_param(cr, uid, "cjk_wrap", record.cjk_wrap or '', context=context)
40
 
            
41
 
def create_single_pdf(self, cr, uid, ids, data, report_xml, context=None):
42
 
    if not context:
43
 
        context={}
44
 
    logo = None
45
 
    context = context.copy()
46
 
    title = report_xml.name
47
 
    rml = report_xml.report_rml_content
48
 
    # if no rml file is found
49
 
    if not rml:
50
 
        return False
51
 
    rml_parser = self.parser(cr, uid, self.name2, context=context)
52
 
    objs = self.getObjects(cr, uid, ids, context)
53
 
    rml_parser.set_context(objs, data, ids, report_xml.report_type)
54
 
    processed_rml = etree.XML(rml)
55
 
    if report_xml.header:
56
 
        rml_parser._add_header(processed_rml, self.header)
57
 
    processed_rml = self.preprocess_rml(processed_rml,report_xml.report_type)
58
 
    if rml_parser.logo:
59
 
        logo = base64.decodestring(rml_parser.logo)
60
 
    create_doc = self.generators[report_xml.report_type]
61
 
    # change the fontname 
62
 
    install_ids = pooler.get_pool(cr.dbname).get('ir.module.module').search(cr, uid, [('name','=','oecn_base_fonts'),('state','=','installed')])
63
 
    originCustomTTFonts = deepcopy(cfonts.CustomTTFonts)
64
 
    if install_ids:
65
 
        config_parameter_obj = pooler.get_pool(cr.dbname).get("ir.config_parameter")
66
 
        base_font = config_parameter_obj.get_param(cr, uid, "font_url")
67
 
        #base_font_name = config_parameter_obj.get_param(cr, uid, "base_font_name")
68
 
        cjk_wrap = config_parameter_obj.get_param(cr, uid, "cjk_wrap")
69
 
        fonts_map = []
70
 
        if base_font:
71
 
            for font in OE_FONTS:
72
 
                fonts_map += [(font, 'myFont', base_font, 'all')]
73
 
        cfonts.CustomTTFonts = fonts_map
74
 
        ParagraphStyle.defaults['wordWrap'] = cjk_wrap and 'CJK' or ''
75
 
        for p in processed_rml.findall('.//setFont'):
76
 
            p.set('name','myFont')
77
 
        for p in processed_rml.findall('.//*[@fontName]'):
78
 
            p.set('fontName','myFont')
79
 
    
80
 
    # change the fontname 
81
 
    pdf = create_doc(etree.tostring(processed_rml),rml_parser.localcontext,logo,title.encode('utf8'))
82
 
    # use the origin one
83
 
    cfonts.CustomTTFonts = originCustomTTFonts
84
 
    return pdf, report_xml.report_type
85
 
 
86
 
# xsl:xml report
87
 
def create(self, cr, uid, ids, datas, context):
88
 
    xml = self.create_xml(cr, uid, ids, datas, context)
89
 
    xml = tools.ustr(xml).encode('utf8')
90
 
    report_type = datas.get('report_type', 'pdf')
91
 
    if report_type == 'raw':
92
 
        return xml, report_type
93
 
    rml = self.create_rml(cr, xml, uid, context)
94
 
    pool = pooler.get_pool(cr.dbname)
95
 
    ir_actions_report_xml_obj = pool.get('ir.actions.report.xml')
96
 
    report_xml_ids = ir_actions_report_xml_obj.search(cr, uid, [('report_name', '=', self.name[7:])], context=context)
97
 
    self.title = report_xml_ids and ir_actions_report_xml_obj.browse(cr,uid,report_xml_ids)[0].name or 'OpenERP Report'
98
 
    create_doc = self.generators[report_type]
99
 
    # change the fontname
100
 
    install_ids = pool.get('ir.module.module').search(cr, uid, [('name','=','oecn_base_fonts'),('state','=','installed')])
101
 
    originCustomTTFonts = deepcopy(cfonts.CustomTTFonts)
102
 
    if install_ids:
103
 
        p1 = re.compile('<setFont name=".*?" ')
104
 
        p2 = re.compile('fontName=".*?" ')        
105
 
        config_parameter_obj = pooler.get_pool(cr.dbname).get("ir.config_parameter")
106
 
        base_font = config_parameter_obj.get_param(cr, uid, "font_url")
107
 
        cjk_wrap = config_parameter_obj.get_param(cr, uid, "cjk_wrap")
108
 
        fonts_map = []
109
 
        if base_font:
110
 
            for font in OE_FONTS:
111
 
                fonts_map += [(font, 'myFont', base_font, 'all')]
112
 
        cfonts.CustomTTFonts = fonts_map          
113
 
        ParagraphStyle.defaults['wordWrap'] = cjk_wrap and 'CJK' or ''
114
 
        rml = p1.sub('<setFont name="' + 'myFont' + '" ', rml)
115
 
        rml = p2.sub('fontName="' + 'myFont' + '" ', rml)
116
 
    # change the fontname
117
 
    pdf = create_doc(rml, title=self.title)
118
 
    cfonts.CustomTTFonts = originCustomTTFonts
119
 
    return pdf, report_type
120
 
 
121
 
interface.report_rml.create = create
122
 
report_sxw.report_sxw.create_single_pdf = create_single_pdf
 
 
b'\\ No newline at end of file'