I'm trying to make a custom report parser following Axel Mendoza's post here (https://www.odoo.com/de_DE/forum/hilfe-1/question/how-to-define-a-custom-methods-functions-to-be-used-in-a-qweb-report-how-to-define-and-use-a-report-parser-92244).
It's not quite working for me, and i'd appreciate help and advice on this. I am using odoo 9 enterprise.
What i want to achieve: on a custom website with events (from event.event), i want to print a pdf file with a registration form. In this form, i am using data that come from a custom function that has been added to a model inheriting 'website'.
I'm getting this error:
|"old_api() takes at least 3 arguments (2 given)" while evaluating"event_details('o.id')['product_ver_nr']"|
I am not sure how
Structure of module:
--event_fax.xml |--models --report_parser.py
Each web page shows only one event and its id is shown in the url. I wrote an own controller in the main.py from the folder controllers to get the id of the event on the current page.
This is the content of the report in even_fax.xml:
|<report id="fax_event" model="event.event" string="Anmeldeformular" report_type="qweb-pdf" name="tra_event.event_fax" file="tra_event.event_fax" /> <template id="tra_event.event_fax"> <t t-name="tra_event.event_fax"> <div class="page"> <t t-foreach="docs" t-as="o"> Seminar: <span t-field="o.name"/> <br/> Sem.-Nr.: <span t-esc="event_details('o.id')['product_ver_nr']"/> </t></div></t>|
in this case, 'o' is the content of event.event, and i am able to print a report accessing only the standard odoo fields in event.event. It means that if i comment out the line <span t-esc="event_details('o.id')['product_ver_nr']"/>, the report is printed. If i don't comment it out, i get the error mentionned above.
This is the controller(in main.py):
|@http.route(['/event/print/<event_id>'], type='http', auth="public", website=True) def event_print(self, event_id, **post):|
cr, uid, context = request.cr, SUPERUSER_ID, request.context if event_id:
pdf = request.registry['report'].get_pdf(cr, uid, [int(event_id)], 'tra_event.event_fax', data=None, context=context) pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) else:
return request.redirect('/event') return request.redirect('#')
and this is the parser (in report_parser.py):
from openerp.report import report_sxwfrom openerp import api, models
def _get_event_details(self, event_id):
data = self.pool.get('website').get_event_details(event_id) return data
Firstly, i'm not sure how to call my custom function get_event_details from the file website.py in the folder models in my custom module. Is that the only part where i did a mistake, or did i do something wrong somewhere else in the code?
the function get_event_details is defined as new api with the decorator @api.models, i think that's what's causing the problem. so, how do i call my method properly?
if i just put an own dictionary named data in the parser and return it, i can access its elements in the report with <span t-esc="event_details(o.id)['key']/>. It means that the parser is working correctly and the problem lays within the calling of the method "get_event_details". Do someone know how to call a method written in new api from the parser?
Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!
About This Community
|Asked: 11/4/16, 6:54 PM|
|Seen: 112 times|
|Last updated: 11/5/16, 10:22 AM|