'trying to combine multiple table for report in odoo, but it give me a blank error

I am new around here, and I need some help

so, I am trying to make a report in odoo with Base report CSV, in the table, I have 2 relational field, and I don't know how to combine those table, I tried combining the function from the module Base report CSV like below, but it give an error, a blank error which only make me confused, anyone got any idea how I could do this?

from odoo import models
import csv

class csvreport(models.AbstractModel):
    _name = 'report.hr_timesheet.report'
    _inherit = 'report.report_csv.abstract'
    def generate_csv_report(self, writer, data, partners):
        writer.writeheader()
        for obj in partners:
            employee = self.env.cr.execute("""select hr_employee.name where hr_employee.id = %s;""", (obj.employee_id))
            task = self.env.cr.execute("""select project_task.name where project_task.id = %s;""", (obj.project_id))
            writer.writerow({
                'name': obj.name,
                'date': obj.date,
                'unit_amount': obj.unit_amount,
                'responsible': employee.fetchall(),
                'task': task.fetchall(),
            })

    def csv_report_options(self):
        res = super().csv_report_options()
        res['fieldnames'].append('name')
        res['fieldnames'].append('date')
        res['fieldnames'].append('unit_amount')
        res['fieldnames'].append('responsible')
        res['fieldnames'].append('task')
        res['delimiter'] = ';'
        res['quoting'] = csv.QUOTE_ALL
        return res

The Error :
Since i can't post picture, i'll just post a gdrive link



Solution 1:[1]

You should see the following error message in the error log:

ValueError: SQL query parameters should be a tuple, list or dict; ...

To fix that error pass query arguments in a tuple:

employee = self.env.cr.execute(query_str, (obj.employee_id.id, ))

You can't pass obj.employee_id (a record), because psycopg2 can't adapt type hr.employee.

To get the employee name just use dot notation:

employee_name = obj.employee_id.name

The from clause is missing for both queries and you can't call fetchall on employee or task because self.env.cr.execute will return None, to fetch the result, use the cursor fetch*() methods.

self.env.cr.fetchall()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1