from datetime import timedelta, datetime, date from dateutil.relativedelta import relativedelta from odoo import api, fields, models, _ from odoo.http import request from odoo import http import babel.dates class HrPayslip(models.Model): _inherit = 'hr.payslip' @api.model def get_wage_register_data(self, date): if not date: now = fields.Datetime.now() date = babel.dates.format_datetime(now, "MMMM yyyy", locale='en') sql = """ SELECT e.name AS employee, job.name AS designation, e.doj AS date_of_joining, e.birthday AS date_of_birth, to_char(p.date_from, 'Month YYYY') AS month_of_wages, e.l10n_in_uan AS uan_no, e.l10n_in_esic_number AS esic_no, bank.acc_number AS bank_account_no, SUM(CASE WHEN pl.code = 'BASIC' THEN pl.total ELSE 0 END) AS basic, SUM(CASE WHEN pl.code = 'HRA' THEN pl.total ELSE 0 END) AS hra, SUM(CASE WHEN pl.code = 'SPA' THEN pl.total ELSE 0 END) AS other_allowance, SUM(CASE WHEN pl.code = 'GROSS' THEN pl.total ELSE 0 END) AS gross_wages, SUM(CASE WHEN pl.code = 'ESICS' THEN pl.total ELSE 0 END) AS esi, SUM(CASE WHEN pl.code = 'PF' THEN pl.total ELSE 0 END) AS pf, SUM(CASE WHEN pl.code = 'PT' THEN pl.total ELSE 0 END) AS pt, SUM(CASE WHEN pl.code = 'DED' THEN pl.total ELSE 0 END) AS total_deductions, SUM(CASE WHEN pl.code = 'LTA' THEN pl.total ELSE 0 END) AS lta, p.net_wage AS net_amount_payable FROM hr_payslip p JOIN hr_employee e ON p.employee_id = e.id LEFT JOIN hr_job job ON e.job_id = job.id LEFT JOIN hr_payslip_line pl ON pl.slip_id = p.id LEFT JOIN hr_salary_rule_category cat_earn ON cat_earn.code = 'GROSS' LEFT JOIN hr_salary_rule_category cat_deduct ON cat_deduct.code = 'DED' LEFT JOIN res_partner_bank bank ON bank.id = e.bank_account_id GROUP BY e.name, job.name, e.doj, e.birthday, p.date_from, e.l10n_in_uan, e.l10n_in_esic_number, e.bank_account_id, p.net_wage, bank.acc_number ORDER BY e.name; """ self.env.cr.execute(sql) result = self.env.cr.dictfetchall() data = [] for i in result: i['designation'] = i['designation']['en_US'] data.append(i) return data