52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
from odoo import api, models
 | 
						|
from odoo.report import report_sxw
 | 
						|
 | 
						|
 | 
						|
class ReportHelper(report_sxw.rml_parse):
 | 
						|
 | 
						|
    def __init__(self, cr, uid, name, context):
 | 
						|
        super(ReportHelper, self).__init__(cr, uid, name, context=context)
 | 
						|
        self.localcontext.update({
 | 
						|
            'field_set_in_lines': self._field_set_in_lines,
 | 
						|
            'formatLang': self._formatLang,
 | 
						|
        })
 | 
						|
 | 
						|
    @api.model
 | 
						|
    def _field_set_in_lines(self, lines, field):
 | 
						|
        fields = field.split('.')
 | 
						|
        for line in lines:
 | 
						|
            temp = None
 | 
						|
            for idx, field in enumerate(fields):
 | 
						|
                if not temp and idx == 0:
 | 
						|
                    temp = line.__getattribute__(field)
 | 
						|
                elif not temp and idx != 0:
 | 
						|
                    return False
 | 
						|
                else:
 | 
						|
                    temp = temp.__getattribute__(field)
 | 
						|
            if not temp:
 | 
						|
                return False
 | 
						|
        return True
 | 
						|
 | 
						|
    @api.model
 | 
						|
    def _formatLang(self, value, currency=True):
 | 
						|
        lang = self.partner_id.lang
 | 
						|
        lang_objs = self.env['res.lang'].search([('code', '=', lang)])
 | 
						|
        if not lang_objs:
 | 
						|
            lang_objs = self.env['res.lang'].search([], limit=1)
 | 
						|
        lang_obj = lang_objs[0]
 | 
						|
 | 
						|
        res = lang_obj.format('%.' + str(2) + 'f', value, grouping=True, monetary=True)
 | 
						|
        currency_obj = self.currency_id
 | 
						|
 | 
						|
        if currency_obj and currency_obj.symbol and currency:
 | 
						|
            if currency_obj.position == 'after':
 | 
						|
                res = '%s %s' % (res, currency_obj.symbol)
 | 
						|
            elif currency_obj and currency_obj.position == 'before':
 | 
						|
                res = '%s %s' % (currency_obj.symbol, res)
 | 
						|
        return res
 | 
						|
 | 
						|
 | 
						|
class AbstractReport(models.AbstractModel):
 | 
						|
    _inherit = 'report.abstract_report'
 | 
						|
    _wrapped_report_class = ReportHelper
 |