62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
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
|