【发布时间】: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