1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/l10n_hk_hr_payroll/models/l10n_hk_ir56e.py
2024-12-10 09:04:09 +07:00

94 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models, _
from odoo.tools import format_date
class L10nHkIr56e(models.Model):
_name = 'l10n_hk.ir56e'
_inherit = 'l10n_hk.ird'
_description = 'IR56E Sheet'
_order = 'submission_date'
@api.depends('submission_date')
def _compute_display_name(self):
for sheet in self:
sheet.display_name = format_date(self.env, sheet.submission_date, date_format="MMMM y", lang_code=self.env.user.lang)
def _get_rendering_data(self, employees):
self.ensure_one()
employees_error = self._check_employees(employees)
if employees_error:
return {'error': employees_error}
main_data = self._get_main_data()
employees_data = []
for employee in employees:
hkid, ppnum = '', ''
if employee.identification_id:
hkid = employee.identification_id.strip().upper()
else:
ppnum = f'{employee.passport_id}, {employee.l10n_hk_passport_place_of_issue}'
spouse_name, spouse_hkid, spouse_passport = '', '', ''
if employee.marital == 'married':
spouse_name = employee.spouse_complete_name.upper()
if employee.l10n_hk_spouse_identification_id:
spouse_hkid = employee.l10n_hk_spouse_identification_id.strip().upper()
if employee.l10n_hk_spouse_passport_id or employee.l10n_hk_spouse_passport_place_of_issue:
spouse_passport = ', '.join(i for i in [employee.l10n_hk_spouse_passport_id, employee.l10n_hk_spouse_passport_place_of_issue] if i)
employee_address = ', '.join(i for i in [
employee.private_street, employee.private_street2, employee.private_city, employee.private_state_id.name, employee.private_country_id.name] if i)
sheet_values = {
'employee': employee,
'employee_id': employee.id,
'HKID': hkid,
'TypeOfForm': self.type_of_form,
'Surname': employee.l10n_hk_surname,
'GivenName': employee.l10n_hk_given_name,
'NameInChinese': employee.l10n_hk_name_in_chinese,
'Sex': 'M' if employee.gender == 'male' else 'F',
'MaritalStatus': 2 if employee.marital == 'married' else 1,
'PpNum': ppnum,
'SpouseName': spouse_name,
'SpouseHKID': spouse_hkid,
'SpousePpNum': spouse_passport,
'employee_address': employee_address,
'Capacity': employee.job_title,
'date_of_commencement': employee.first_contract_date,
'monthly_salary': employee.contract_id.wage,
'PlaceOfResInd': int(bool(employee.l10n_hk_rental_id)),
}
if employee.l10n_hk_rental_id:
sheet_values.update({
'AddrOfPlace': employee.l10n_hk_rental_id.address,
'NatureOfPlace': employee.l10n_hk_rental_id.nature,
'RentPaidEe': employee.l10n_hk_rental_id.amount,
'RentRefund': employee.l10n_hk_rental_id.amount,
})
employees_data.append(sheet_values)
return {'data': main_data, 'employees_data': employees_data}
def _get_pdf_report(self):
return self.env.ref('l10n_hk_hr_payroll.action_report_employee_ir56e')
def _get_pdf_filename(self, employee):
self.ensure_one()
return _('%s_-_IR56E-%s', employee.name, self.submission_date)
def _post_process_rendering_data_pdf(self, rendering_data):
result = {}
for sheet_values in rendering_data['employees_data']:
result[sheet_values['employee']] = {**sheet_values, **rendering_data['data']}
return result
def _get_posted_document_owner(self, employee):
return employee.contract_id.hr_responsible_id or self.env.user