def create_aeroo_report(self, cr, uid, ids, data, report_xml, context=None, output='odt'): """ Returns an aeroo report generated with aeroolib """ pool = pooler.get_pool(cr.dbname) if not context: context={} context = context.copy() if self.name=='report.printscreen.list': context['model'] = data['model'] context['ids'] = ids print_id = context.get('print_id', False) aeroo_print = self.active_prints[print_id] # Aeroo print object aeroo_print.subreports = [] #self.oo_subreports[print_id] = [] objects = self.getObjects_mod(cr, uid, ids, report_xml.report_type, context) or [] oo_parser = self.parser(cr, uid, self.name2, context=context) oo_parser.localcontext.update(context) oo_parser.set_context(objects, data, ids, report_xml.report_type) self.set_xml_data_fields(objects, oo_parser) # Get/Set XML oo_parser.localcontext['data'] = data oo_parser.localcontext['user_lang'] = context.get('lang', False) if len(objects)>0: oo_parser.localcontext['o'] = objects[0] xfunc = ExtraFunctions(cr, uid, report_xml.id, oo_parser.localcontext) oo_parser.localcontext.update(xfunc.functions) #company_id = objects and 'company_id' in objects[0]._table._columns.keys() and \ # objects[0].company_id and objects[0].company_id.id or False # for object company usage company_id = False style_io=self.get_styles_file(cr, uid, report_xml, company=company_id, context=context) if report_xml.tml_source in ('file', 'database'): if not report_xml.report_sxw_content or report_xml.report_sxw_content=='False': raise osv.except_osv(_('Error!'), _('No template found!')) file_data = base64.decodestring(report_xml.report_sxw_content) else: file_data = self.get_other_template(cr, uid, data, oo_parser) if not file_data and not report_xml.report_sxw_content: self.logger("End process %s (%s), elapsed time: %s" % (self.name, self.table, time.time() - aeroo_print.start_time), logging.INFO) # debug mode return False, output #elif file_data: # template_io = StringIO() # template_io.write(file_data or report_xml.report_sxw_content) # basic = Template(source=template_io, styles=style_io) else: if report_xml.preload_mode == 'preload' and hasattr(self, 'serializer'): serializer = copy.copy(self.serializer) serializer.apply_style(style_io) template_io = serializer.template else: template_io = StringIO() template_io.write(file_data or base64.decodestring(report_xml.report_sxw_content) ) serializer = OOSerializer(template_io, oo_styles=style_io) try: basic = Template(source=template_io, serializer=serializer) except Exception, e: self._raise_exception(e, print_id)
def create_genshi_raw_report(self, cr, uid, ids, data, report_xml, context=None, output='raw'): def preprocess(data): self.epl_images.reverse() while self.epl_images: img = self.epl_images.pop() data = data.replace('<binary_data>', img, 1) return data.replace('\n', '\r\n') if context is None: context = {} else: context = context.copy() # get parser and objects oo_parser = self.parser(cr, uid, self.name2, context=context) objects = self.getObjects_mod(cr, uid, ids, report_xml, context, parser=oo_parser) oo_parser.objects = objects self.set_xml_data_fields(objects, oo_parser) # Get/Set XML oo_parser.localcontext['objects'] = objects oo_parser.localcontext['data'] = data oo_parser.localcontext['user_lang'] = context.get('lang', False) if len(objects) > 0: oo_parser.localcontext['o'] = objects[0] xfunc = ExtraFunctions(cr, uid, report_xml.id, oo_parser.localcontext) oo_parser.localcontext.update(xfunc.functions) file_data = self.get_other_template( cr, uid, data, oo_parser) or report_xml.report_sxw_content # Get other Tamplate ################################################ if not file_data: return False, output oo_parser.localcontext['include_subreport'] = self._subreport( cr, uid, output='raw', aeroo_ooo=False, context=context) oo_parser.localcontext['epl2_gw'] = self._epl2_gw self.epl_images = [] basic = NewTextTemplate(source=base64.decodestring(file_data)) data = preprocess( basic.generate( **oo_parser.localcontext).render().decode('utf8').encode( report_xml.charset)) return self._onResult(cr, uid, objects, (data, output), context=context)
def create_genshi_raw_report(self, cr, uid, ids, data, report_xml, context=None, output='raw', tmpl=False): def preprocess(data, aeroo_print): aeroo_print.epl_images.reverse() while aeroo_print.epl_images: img = aeroo_print.epl_images.pop() data = data.replace('<binary_data>', img, 1) return data.replace('\n', '\r\n') print_id = context.get('print_id', False) aeroo_print = self.active_prints[print_id] # Aeroo print object if not aeroo_print.start_time: aeroo_print.start_time = time.time() if not context: context={} context = context.copy() objects = self.getObjects_mod(cr, uid, ids, report_xml.report_type, context) oo_parser = self.parser(cr, uid, self.name2, context=context) oo_parser.localcontext.update(context) oo_parser.set_context(objects, data, ids, report_xml.report_type) self.set_xml_data_fields(oo_parser.objects, oo_parser) # Get/Set XML oo_parser.localcontext['data'] = data oo_parser.localcontext['user_lang'] = context.get('lang', False) if len(objects)>0: oo_parser.localcontext['o'] = objects[0] xfunc = ExtraFunctions(cr, uid, report_xml.id, oo_parser.localcontext) oo_parser.localcontext.update(xfunc.functions) file_data = tmpl or self.get_other_template(cr, uid, data, oo_parser) or report_xml.report_sxw_content # Get other Tamplate if not file_data or file_data=='False': raise osv.except_osv(_('Error!'), _('No template found!')) ################################################ if not file_data: self.logger("End process %s (%s), elapsed time: %s" % (self.name, self.table, time.time() - aeroo_print.start_time), logging.INFO) # debug mode return False, output print_id = context.get('print_id', False) aeroo_print = self.active_prints[print_id] oo_parser.localcontext['include_subreport'] = self._subreport(cr, uid, aeroo_print, output='raw', aeroo_ooo=False, context=context) oo_parser.localcontext['epl2_gw'] = self._epl2_gw(aeroo_print) deferred = context.get('deferred_process') oo_parser.localcontext['progress_update'] = deferred and deferred.progress_update or (lambda:True) aeroo_print.epl_images = [] basic = NewTextTemplate(source=base64.decodestring(file_data)) #try: if genshi_version<='0.6': data = preprocess(basic.generate(**oo_parser.localcontext).render().decode('utf8').encode(report_xml.charset), aeroo_print) else: data = preprocess(basic.generate(**oo_parser.localcontext).render().encode(report_xml.charset), aeroo_print) #except Exception, e: # self.logger(str(e), logging.ERROR) # return False, output if report_xml.content_fname: output = report_xml.content_fname self.logger("End process %s (%s), elapsed time: %s" % (self.name, self.table, time.time() - aeroo_print.start_time), logging.INFO) # debug mode return data, output
def create_aeroo_report(self, cr, uid, ids, data, report_xml, context=None, output='odt'): """ Returns an aeroo report generated with aeroolib """ pool = pooler.get_pool(cr.dbname) if not context: context={} context = context.copy() if self.name=='report.printscreen.list': context['model'] = data['model'] context['ids'] = ids objects = not context.get('no_objects', False) and self.getObjects_mod(cr, uid, ids, report_xml.report_type, context) or [] oo_parser = self.parser(cr, uid, self.name2, context=context) oo_parser.objects = objects self.set_xml_data_fields(objects, oo_parser) # Get/Set XML oo_parser.localcontext['objects'] = objects oo_parser.localcontext['data'] = data oo_parser.localcontext['user_lang'] = context.get('lang', False) if len(objects)==1: oo_parser.localcontext['o'] = objects[0] xfunc = ExtraFunctions(cr, uid, report_xml.id, oo_parser.localcontext) oo_parser.localcontext.update(xfunc.functions) company_id = objects and 'company_id' in objects[0]._table._columns.keys() and \ objects[0].company_id and objects[0].company_id.id or False # for object company usage style_io=self.get_styles_file(cr, uid, report_xml, company=company_id, context=context) if report_xml.tml_source in ('file', 'database'): file_data = base64.decodestring(report_xml.report_sxw_content) else: file_data = self.get_other_template(cr, uid, data, oo_parser) if not file_data and not report_xml.report_sxw_content: return False, output #elif file_data: # template_io = StringIO() # template_io.write(file_data or report_xml.report_sxw_content) # basic = Template(source=template_io, styles=style_io) else: if report_xml.preload_mode == 'preload' and hasattr(self, 'serializer'): serializer = copy.copy(self.serializer) serializer.apply_style(style_io) template_io = serializer.template else: template_io = StringIO() template_io.write(file_data or base64.decodestring(report_xml.report_sxw_content) ) serializer = OOSerializer(template_io, oo_styles=style_io) basic = Template(source=template_io, serializer=serializer) #if not file_data: # return False, output #basic = Template(source=template_io, serializer=serializer) aeroo_ooo = context.get('aeroo_ooo', False) oo_parser.localcontext['include_subreport'] = self._subreport(cr, uid, output='odt', aeroo_ooo=aeroo_ooo, context=context) oo_parser.localcontext['include_document'] = self._include_document(aeroo_ooo) ####### Add counter functons to localcontext ####### oo_parser.localcontext.update({'def_inc':self._def_inc, 'get_inc':self._get_inc, 'prev':self._prev, 'next':self._next}) user_name = pool.get('res.users').browse(cr, uid, uid, {}).name model_id = pool.get('ir.model').search(cr, uid, [('model','=',context['active_model'])])[0] model_name = pool.get('ir.model').browse(cr, uid, model_id).name #basic = Template(source=None, filepath=odt_path) basic.Serializer.add_title(model_name) basic.Serializer.add_creation_user(user_name) module_info = load_information_from_description_file('report_aeroo') version = module_info['version'] basic.Serializer.add_generator_info('Aeroo Lib/%s Aeroo Reports/%s' % (aeroolib.__version__, version)) basic.Serializer.add_custom_property('Aeroo Reports %s' % version, 'Generator') basic.Serializer.add_custom_property('OpenERP %s' % release.version, 'Software') basic.Serializer.add_custom_property(module_info['website'], 'URL') basic.Serializer.add_creation_date(time.strftime('%Y-%m-%dT%H:%M:%S')) try: data = basic.generate(**oo_parser.localcontext).render().getvalue() except Exception, e: tb_s = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) self.logger(_("Report generation error!")+'\n'+tb_s, netsvc.LOG_ERROR) for sub_report in self.oo_subreports: os.unlink(sub_report) raise Exception(_("Aeroo Reports: Error while generating the report."), e, str(e), _("For more reference inspect error logs."))
def create_aeroo_report(self, cr, uid, ids, data, report_xml, context=None, output='odt'): """ Returns an aeroo report generated with aeroolib """ deferred = context.get('deferred_process') if deferred: deferred.set_status(_('Started')) pool = registry(cr.dbname) if not context: context={} context = context.copy() if self.name=='report.printscreen.list': context['model'] = data['model'] context['ids'] = ids print_id = context.get('print_id', False) aeroo_print = self.active_prints[print_id] # Aeroo print object aeroo_print.subreports = [] #self.oo_subreports[print_id] = [] oo_parser = self.parser(cr, uid, self.name2, context=context) aeroo_docs = self.aeroo_docs_enabled(cr) # Detect report_aeroo_docs module if (aeroo_docs and not report_xml.process_sep or not aeroo_docs) and getattr(oo_parser, 'single', False): ids = [ids[0]] objects = self.getObjects_mod(cr, uid, ids, report_xml.report_type, context) or [] # Esto es un parche por error de odoo en report_sxw.py al hacer # self.setCompany(objects[0].company_id) porque, como el registro # tiene el campo company, solo agrega al contexto del reporte la # compania del objeto y el usuario puede no tener permiso para dicha # cia objects_for_context = self.getObjects_mod(cr, 1, ids, report_xml.report_type, context) or [] oo_parser.localcontext.update(context) oo_parser.set_context(objects_for_context, data, ids, report_xml.report_type) # oo_parser.set_context(objects, data, ids, report_xml.report_type) self.set_xml_data_fields(objects, oo_parser) # Get/Set XML oo_parser.localcontext['data'] = data oo_parser.localcontext['user_lang'] = context.get('lang', False) if len(objects)>0: oo_parser.localcontext['o'] = objects[0] xfunc = ExtraFunctions(cr, uid, report_xml.id, oo_parser.localcontext) oo_parser.localcontext.update(xfunc.functions) #company_id = objects and 'company_id' in objects[0]._table._columns.keys() and \ # objects[0].company_id and objects[0].company_id.id or False # for object company usage company_id = False style_io=self.get_styles_file(cr, uid, report_xml, company=company_id, context=context) if report_xml.tml_source in ('file', 'database'): if not report_xml.report_sxw_content or report_xml.report_sxw_content=='False': raise osv.except_osv(_('Error!'), _('No template found!')) file_data = base64.decodestring(report_xml.report_sxw_content) else: model = context.get('active_model', data.get('model')) or data.get('model') rec_id = context.get('active_id', data.get('id')) or data.get('id') file_data = self.get_other_template(cr, uid, model, rec_id, oo_parser) if not file_data and not report_xml.report_sxw_content: self.logger("End process %s (%s), elapsed time: %s" % (self.name, self.table, time.time() - aeroo_print.start_time), logging.INFO) # debug mode return False, output #elif file_data: # template_io = StringIO() # template_io.write(file_data or report_xml.report_sxw_content) # basic = Template(source=template_io, styles=style_io) else: if report_xml.preload_mode == 'preload' and hasattr(self, 'serializer'): serializer = copy.copy(self.serializer) serializer.apply_style(style_io) template_io = serializer.template else: template_io = StringIO() template_io.write(file_data or base64.decodestring(report_xml.report_sxw_content) ) serializer = OOSerializer(template_io, oo_styles=style_io) try: basic = Template(source=template_io, serializer=serializer, lookup=DynamicLookup) except Exception, e: self._raise_exception(e, print_id)
def create_aeroo_report(self, cr, uid, ids, data, report_xml, context=None, output='odt', style_io=None): """ Returns an aeroo report generated with aeroolib """ pool = RegistryManager.get(cr.dbname) if context is None: context = {} else: context = context.copy() if self.name == 'report.printscreen.list': context['model'] = data['model'] context['ids'] = ids # create parser oo_parser = self.parser(cr, uid, self.name2, context=context) objects = not context.get('no_objects', False) and self.getObjects_mod( cr, uid, ids, report_xml, context, parser=oo_parser) or [] report_obj = pool.get("ir.actions.report.xml") # check for report forward if hasattr(oo_parser, "_report_forward"): report_forward = oo_parser._report_forward(objects) if report_forward: report_forward_inst = report_obj._lookup_report( cr, report_forward["name"]) forward_report_data, forward_report_format = report_forward_inst.create( cr, uid, report_forward["ids"], data, context) return self._onResult( cr, uid, objects, (forward_report_data, forward_report_format), context=context) # report replacement file_data = None if objects and len(objects) == 1: # get replacement repl_report_xml, style_io = report_obj._get_replacement( cr, uid, objects[0], report_xml, context=context) if repl_report_xml: if isinstance(repl_report_xml, basestring): file_data = base64.decodestring(repl_report_xml) elif repl_report_xml.id != report_xml.id: return self.create_aeroo_report(cr, uid, ids, data, repl_report_xml, context=context, output=output, style_io=style_io) oo_parser.objects = objects self.set_xml_data_fields(objects, oo_parser) # Get/Set XML oo_parser.localcontext['objects'] = objects oo_parser.localcontext['data'] = data oo_parser.localcontext['user_lang'] = context.get('lang', False) if len(objects) == 1: oo_parser.localcontext['o'] = objects[0] xfunc = ExtraFunctions(cr, uid, report_xml.id, oo_parser.localcontext) oo_parser.localcontext.update(xfunc.functions) # get style if not style_io: style_io = self.get_styles_file(cr, uid, report_xml, context) # get template if not file_data: if report_xml.tml_source in ('file', 'database'): file_data = base64.decodestring(report_xml.report_sxw_content) else: file_data = self.get_other_template(cr, uid, data, oo_parser) # process template if not file_data and not report_xml.report_sxw_content: return False, output else: if report_xml.preload_mode == 'preload' and hasattr( self, 'serializer'): serializer = copy.copy(self.serializer) serializer.apply_style(style_io) template_io = serializer.template else: template_io = StringIO() template_io.write( file_data or base64.decodestring(report_xml.report_sxw_content)) serializer = OOSerializer(template_io, oo_styles=style_io) basic = Template(source=template_io, serializer=serializer) aeroo_ooo = context.get('aeroo_ooo', False) oo_parser.localcontext['include_subreport'] = self._subreport( cr, uid, output='odt', aeroo_ooo=aeroo_ooo, context=context) oo_parser.localcontext['include_document'] = self._include_document( aeroo_ooo) ####### Add counter functons to localcontext ####### oo_parser.localcontext.update({ 'def_inc': self._def_inc, 'get_inc': self._get_inc, 'prev': self._prev, 'next': self._next }) user_name = pool.get('res.users').browse(cr, uid, uid, {}).name report_tile = report_xml.name eval_model = data.get("model", context.get("active_model")) if eval_model: modeldef_obj = pool.get('ir.model') modeldef_id = modeldef_obj.search(cr, uid, [('model', '=', eval_model)])[0] report_title = modeldef_obj.browse(cr, uid, modeldef_id).name #basic = Template(source=None, filepath=odt_path) basic.Serializer.add_title(report_tile) basic.Serializer.add_creation_user(user_name) version = addons.load_information_from_description_file( 'report_aeroo')['version'] basic.Serializer.add_generator_info('Aeroo Lib/%s Aeroo Reports/%s' % (aeroolib.__version__, version)) basic.Serializer.add_custom_property('Aeroo Reports %s' % version, 'Generator') basic.Serializer.add_custom_property('OpenERP %s' % release.version, 'Software') basic.Serializer.add_custom_property('http://www.alistek.com/', 'URL') basic.Serializer.add_creation_date(time.strftime('%Y-%m-%dT%H:%M:%S')) try: data = basic.generate(**oo_parser.localcontext).render().getvalue() except Exception, e: tb_s = reduce( lambda x, y: x + y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) logger.error(tb_s) self._cleanup_subreports() raise Exception( _("Aeroo Reports: Error while generating the report."), e, str(e), _("For more reference inspect error logs."))