Odoo - 如何根据company_id获取报告数据

时间:2016-05-02 13:46:57

标签: python-2.7 report openerp odoo-8

我正在尝试根据company_id在报告中获取每个公司员工的工资核算数据。

这是我的代码:

在我的向导中:

class hr_wps_report(osv.osv_memory):

_name = 'hr.wps.report'

_description = 'WPS Report'

_columns = {

    'date_from':fields.date("Start Date"),

    'date_to':fields.date("End Date"),

    'company_id': fields.many2one('res.company', 'Company', select=True, required=False),

}

_defaults = {

    'date_from': lambda *a: time.strftime('%Y-%m-01'),

    'date_to': lambda *a: str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10],

    'company_id': lambda self, cr, uid, context: self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id,

}



def print_report(self, cr, uid, ids, data, context=None):

    if context is None:

        context = {}

    data['form'] = self.read(cr, uid, ids, ['date_from', 'date_to', 'company_id'], context=context)[0]

    return self.pool['report'].get_action(cr, uid, [], 'hr_wps.report_wpsreport', data=data, context=context)

在我的报告中:

class wpsreport(report_sxw.rml_parse):

    def __init__(self, cr, uid, name, context):

        super(wpsreport, self).__init__(cr, uid, name, context=context)

        self.localcontext.update({

            'time': time,

            'get_lines': self._get_lines,

        })



    def set_context(self, objects, data, ids, report_type=None):

        self.date_start = data['form'].get('date_from', time.strftime('%Y-%m-%d'))

        self.date_end = data['form'].get('date_to', time.strftime('%Y-%m-%d'))

        self.company_id = data['form'].get('company_id')



        return super(wpsreport, self).set_context(objects, data, ids, report_type=report_type)



    def _get_lines(self, form):

        res = []

        self.cr.execute("""SELECT hr_employee.name_related,

                                (SELECT hr_payslip_line.total

                                    FROM hr_payslip_line, hr_payslip

                                    WHERE hr_employee.id = hr_payslip.employee_id

                                        AND hr_payslip_line.slip_id = hr_payslip.id

                                        AND hr_payslip_line.code = 'BASIC'

                                        AND hr_payslip.date_from BETWEEN %s AND %s) as basic,

                                (SELECT hr_payslip_line.total

                                    FROM hr_payslip_line, hr_payslip

                                    WHERE hr_employee.id = hr_payslip.employee_id

                                        AND hr_payslip_line.slip_id = hr_payslip.id

                                        AND hr_payslip_line.code = 'ALLOWANCES'

                                        AND hr_payslip.date_from BETWEEN %s AND %s) as total_allowance,

                                (SELECT hr_payslip_line.total

                                    FROM hr_payslip_line, hr_payslip

                                    WHERE hr_employee.id = hr_payslip.employee_id

                                        AND hr_payslip_line.slip_id = hr_payslip.id

                                        AND hr_payslip_line.code = 'DEDUCTIONS'

                                        AND hr_payslip.date_from BETWEEN %s AND %s) as total_deduction,

                                (SELECT hr_payslip_line.total

                                    FROM hr_payslip_line, hr_payslip

                                    WHERE hr_employee.id = hr_payslip.employee_id

                                        AND hr_payslip_line.slip_id = hr_payslip.id

                                        AND hr_payslip_line.code = 'NET'

                                        AND hr_payslip.date_from BETWEEN %s AND %s) as total

                        FROM hr_employee,

                             hr_payslip,

                             res_company

                        WHERE hr_payslip.employee_id = hr_employee.id

                        AND hr_payslip.company_id = res_company.id                        

                        AND hr_payslip.date_from BETWEEN %s AND %s

                        AND hr_payslip.company_id = %s""", (self.date_start, self.date_end, self.date_start, self.date_end, self.date_start, self.date_end, self.date_start, self.date_end, self.date_start, self.date_end, self.company_id))



        employees = self.cr.dictfetchall()

        for emp in employees:

            value = {}

            value['name_related'] = emp['name_related']

            value['basic'] = emp['basic']

            value['total_allowance'] = emp['total_allowance']

            value['total_deduction'] = emp['total_deduction']

            value['total'] = emp['total']            

            value['No_working_days'] = 30

            value['extra_hours'] = 0

            res.append(value)

        return res

但我得错误了:

  

QWebException:“整数的输入语法无效:”Yourcompany“

     

AND hr_payslip.company_id = ARRAY [9,'Yourcompany']

如何解决?

2 个答案:

答案 0 :(得分:0)

尝试:

hr_payslip.company_id.id

答案 1 :(得分:0)

我找到了我的问题的答案并修复了它

而不是self.company_id in sql查询

将其替换为self.company_id[0]