Hello,
I'm trying to implement the code explained in this page
https://www.odoo.com/fr_FR/forum/aide-1/question/how-to-programatically-run-a-report-and-add-it-as-an-attachment-36449
But i get this error:
Traceback (most recent call last):
File "/opt/odoo/openerp/http.py", line 543, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/openerp/http.py", line 580, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/openerp/http.py", line 316, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/openerp/http.py", line 313, in checked_call
return self.endpoint(*a, **kw)
File "/opt/odoo/openerp/http.py", line 809, in __call__
return self.method(*args, **kw)
File "/opt/odoo/openerp/http.py", line 409, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/addons/web/controllers/main.py", line 955, in exec_workflow
return request.session.exec_workflow(model, id, signal)
File "/opt/odoo/openerp/http.py", line 1117, in exec_workflow
r = self.proxy('object').exec_workflow(self.db, self.uid, self.password, model, signal, id)
File "/opt/odoo/openerp/http.py", line 885, in proxy_method
result = dispatch_rpc(self.service_name, method, args)
File "/opt/odoo/openerp/http.py", line 115, in dispatch_rpc
result = dispatch(method, params)
File "/opt/odoo/openerp/service/model.py", line 37, in dispatch
res = fn(db, uid, *params)
File "/opt/odoo/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/openerp/service/model.py", line 188, in exec_workflow
return exec_workflow_cr(cr, uid, obj, signal, *args)
File "/opt/odoo/openerp/service/model.py", line 182, in exec_workflow_cr
return execute_cr(cr, uid, obj, 'signal_workflow', [res_id], signal)[res_id]
File "/opt/odoo/openerp/service/model.py", line 164, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/models.py", line 3571, in signal_workflow
result[res_id] = workflow.trg_validate(uid, self._name, res_id, signal, cr)
File "/opt/odoo/openerp/workflow/__init__.py", line 85, in trg_validate
return WorkflowService.new(cr, uid, res_type, res_id).validate(signal)
File "/opt/odoo/openerp/workflow/service.py", line 91, in validate
res2 = wi.validate(signal)
File "/opt/odoo/openerp/workflow/instance.py", line 80, in validate
wi.process(signal=signal, force_running=force_running, stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 120, in process
ok = self._split_test(activity['split_mode'], signal, stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 248, in _split_test
self._join_test(t[0], t[1], stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 257, in _join_test
WorkflowItem.create(self.session, self.record, activity, inst_id, stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 95, in create
workflow_item.process(stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 116, in process
if not self._execute(activity, stack):
File "/opt/odoo/openerp/workflow/workitem.py", line 162, in _execute
returned_action = self.wkf_expr_execute(activity)
File "/opt/odoo/openerp/workflow/workitem.py", line 313, in wkf_expr_execute
return self.wkf_expr_eval_expr(activity['action'])
File "/opt/odoo/openerp/workflow/workitem.py", line 291, in wkf_expr_eval_expr
result = eval(line, env, nocopy=True)
File "/opt/odoo/openerp/tools/safe_eval.py", line 314, in safe_eval
return eval(c, globals_dict, locals_dict)
File "", line 1, in <module>
File "/opt/odoo/openerp/api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "/opt/odoo/addons/vs_visite/models.py", line 54, in action_fact
(result, format) = openerp.report.render_report(cr, uid, record.id, report.report_name, {'model': self._name}, context=context)
File "/opt/odoo/openerp/report/__init__.py", line 40, in render_report
return registry['ir.actions.report.xml'].render_report(cr, uid, ids, name, data, context)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_actions.py", line 154, in render_report
return self.pool['report'].get_pdf(cr, uid, res_ids, new_report, data=data, context=context), 'pdf'
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/addons/report/models/report.py", line 199, in get_pdf
save_in_attachment = self._check_attachment_use(cr, uid, ids, report)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/addons/report/models/report.py", line 342, in _check_attachment_use
attach_ids = self.pool['ir.attachment'].search(cr, uid, alreadyindb)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/addons/calendar/calendar.py", line 1789, in search
return super(ir_attachment, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/models.py", line 1646, in search
return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_attachment.py", line 266, in _search
access_rights_uid=access_rights_uid)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/models.py", line 4686, in _search
query = self._where_calc(cr, user, args, context=context)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/models.py", line 4499, in _where_calc
where_clause, where_params = e.to_sql()
File "/opt/odoo/openerp/osv/expression.py", line 1277, in to_sql
q, p = self.__leaf_to_sql(leaf)
File "/opt/odoo/openerp/osv/expression.py", line 1144, in __leaf_to_sql
"Invalid value %r in domain term %r" % (right, leaf)
ValueError: "Invalid value vs_visite.consultation(3,) in domain term ('res_id', '=', vs_visite.consultation(3,))" while evaluating
u'action_fact()'This is my code:
# -*- coding: utf-8 -*-
from openerp import models, fields, api,netsvc
from pprint import pprint
import openerp
class Consultation(models.Model):
_name = 'vs_visite.consultation'
name = fields.Char(string="NomCli", required=True)
state = fields.Selection([
('rdv', "Rendez-vous"),
('consul', "Consultn"),
('fin', "Clot"),
('fact', "Fact"),
], default='rdv')
@api.multi
def action_rdv(self):
self.state = 'rdv'
@api.multi
def action_consultation(self):
self.state = 'consul'
@api.multi
def action_fin(self):
self.state = 'fin'
@api.multi
def action_fact(self):
self.state = 'fact'
#,cr, uid, ids, field_name, arg,
cr= self._cr
uid= self._uid
ids= self._ids
context=None
attachment_obj = self.pool.get('ir.attachment')
print("before")
for record in self.browse(self):
print("for")
ir_actions_report = self.pool.get('ir.actions.report.xml')
print("snd")
matching_reports = ir_actions_report.search(cr, uid, [('name','=','Consultation')])
print("after")
if matching_reports:
report = ir_actions_report.browse(cr, uid, matching_reports[0])
report_service = 'report.' + report.report_name
#service = netsvc.LocalService(report_service)
print('pretest')
pprint(record.id)
(result, format) = openerp.report.render_report(cr, uid, record.id, report.report_name, {'model': self._name}, context=context)
print('succes')
#(result, format) = service.create(cr, uid, [record.id], {'model': self._name}, context=context)
eval_context = {'time': time, 'object': record}
if not report.attachment or not eval(report.attachment, eval_context):
# no auto-saving of report as attachment, need to do it manually
result = base64.b64encode(result)
file_name = re.sub(r'[^a-zA-Z0-9_-]', '_', 'Your Report Name')
file_name += ".pdf"
attachment_id = attachment_obj.create(cr, uid,
{
'name': file_name,
'datas': result,
'datas_fname': file_name,
'res_model': self._name,
'res_id': record.id,
'type': 'binary'
}, context=context)
self.name = self.name + ' - Facturé'
return True
I think this is a simple error, but I'm a beginner and i can't find where is the problem
Thank you for your help