【问题标题】:Odoo - How to get report data based on company_idOdoo - 如何根据 company_id 获取报表数据
【发布时间】:2016-05-02 13:46:56
【问题描述】:

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

这是我的代码:

在我的向导中:

类 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']

如何解决?

【问题讨论】:

    标签: python-2.7 report openerp odoo-8


    【解决方案1】:

    尝试:

    hr_payslip.company_id.id
    

    【讨论】:

    • 问题不在于 hr_payslip.company_id 而是 self.company_id 返回一个字符串值而不是 int .. 仍然不知道如何解决它
    【解决方案2】:

    我找到了问题的答案并解决了它

    而不是self.company_id in sql 查询

    将其替换为self.company_id[0]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-25
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多