diff --git a/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_pdf_template.xml b/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_pdf_template.xml index f660d14d9..6890e0583 100644 --- a/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_pdf_template.xml +++ b/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_pdf_template.xml @@ -1,9 +1,7 @@ - - Al-Bilad Bank Payroll Report (PDF) payroll.bank.wiz diff --git a/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_report.py b/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_report.py index a2c16c424..0958928d1 100644 --- a/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_report.py +++ b/odex25_hr/exp_payroll_albilad/report/payroll_bank_albilad_report.py @@ -75,7 +75,7 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): row += 3 sheet.write(row - 1, 1, bank.name, format3) - # English headers row + sheet.write(row, 2, 'Total Amount', format2) sheet.write(row, 3, 'Beneficiary Account IBAN', format2) sheet.write(row, 4, 'Beneficiary Name', format2) @@ -88,7 +88,7 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): sheet.write(row, 11, 'Beneficiary National/IqamaID', format2) row += 1 - # Arabic headers row + sheet.write(row, 2, 'المبلغ الاجمالي', format2) sheet.write(row, 3, 'رقم الايبان', format2) sheet.write(row, 4, 'اسم المستفيد', format2) @@ -139,16 +139,16 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): row += 1 # Write AlBilad format data - sheet.write(row, 2, data_list[4], format1) # Total Amount - sheet.write(row, 3, data_list[2], format1) # Beneficiary Account IBAN - sheet.write(row, 4, data_list[1], format1) # Beneficiary Name - sheet.write(row, 5, data_list[3], format1) # Beneficiary Bank CODE - sheet.write(row, 6, '', format1) # Payment Description (empty) - sheet.write(row, 7, data_list[6], format1) # Basic Salary - sheet.write(row, 8, data_list[7], format1) # Housing Allowance - sheet.write(row, 9, data_list[8], format1) # Other Earnings - sheet.write(row, 10, data_list[9], format1) # Deductions - sheet.write(row, 11, data_list[5], format1) # Beneficiary National/IqamaID + sheet.write(row, 2, data_list[4], format1) + sheet.write(row, 3, data_list[2], format1) + sheet.write(row, 4, data_list[1], format1) + sheet.write(row, 5, data_list[3], format1) + sheet.write(row, 6, '', format1) + sheet.write(row, 7, data_list[6], format1) + sheet.write(row, 8, data_list[7], format1) + sheet.write(row, 9, data_list[8], format1) + sheet.write(row, 10, data_list[9], format1) + sheet.write(row, 11, data_list[5], format1) elif report_type == 'allowance': row = self._write_allowance_data(sheet, row, date_from, date_to, entry_type, employees, salary, salary_ids, bank, branch, company_id, format1) @@ -226,20 +226,18 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): ] row += 1 - # Write AlBilad format data - sheet.write(row, 2, data_list[4], format1) # Total Amount - sheet.write(row, 3, data_list[2], format1) # Beneficiary Account IBAN - sheet.write(row, 4, data_list[1], format1) # Beneficiary Name - sheet.write(row, 5, data_list[3], format1) # Beneficiary Bank CODE - sheet.write(row, 6, '', format1) # Payment Description (empty) - sheet.write(row, 7, data_list[6], format1) # Basic Salary - sheet.write(row, 8, data_list[7], format1) # Housing Allowance - sheet.write(row, 9, data_list[8], format1) # Other Earnings - sheet.write(row, 10, data_list[9], format1) # Deductions - sheet.write(row, 11, data_list[5], format1) # Beneficiary National/IqamaID + sheet.write(row, 2, data_list[4], format1) + sheet.write(row, 3, data_list[2], format1) + sheet.write(row, 4, data_list[1], format1) + sheet.write(row, 5, data_list[3], format1) + sheet.write(row, 6, '', format1) + sheet.write(row, 7, data_list[6], format1) + sheet.write(row, 8, data_list[7], format1) + sheet.write(row, 9, data_list[8], format1) + sheet.write(row, 10, data_list[9], format1) + sheet.write(row, 11, data_list[5], format1) def _get_payslips(self, date_from, date_to, entry_type, employees, salary, salary_ids, bank): - """Helper method to get payslips based on criteria""" domain_base = [ ('date_from', '>=', date_from), ('date_to', '<=', date_to), @@ -289,12 +287,10 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): return self.sudo().env['hr.payslip'].search(domain) def _write_allowance_data(self, sheet, row, date_from, date_to, entry_type, employees, salary, salary_ids, bank, branch, company_id, format1): - """Write allowance data""" payslip_ids = self._get_payslips(date_from, date_to, entry_type, employees, salary, salary_ids, bank) if payslip_ids: for payslip in payslip_ids: - # For allowances, show total allowances in the basic salary column data_list = [ payslip.employee_id.emp_no, payslip.employee_id.name or ' ', @@ -306,26 +302,24 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): ] row += 1 - sheet.write(row, 2, data_list[4], format1) # Total Amount - sheet.write(row, 3, data_list[2], format1) # Beneficiary Account IBAN - sheet.write(row, 4, data_list[1], format1) # Beneficiary Name - sheet.write(row, 5, data_list[3], format1) # Beneficiary Bank CODE - sheet.write(row, 6, '', format1) # Payment Description (empty) - sheet.write(row, 7, data_list[6], format1) # Total Allowances - sheet.write(row, 8, data_list[7], format1) # Housing (0) - sheet.write(row, 9, data_list[8], format1) # Other (0) - sheet.write(row, 10, data_list[9], format1) # Deductions - sheet.write(row, 11, data_list[5], format1) # Beneficiary National/IqamaID + sheet.write(row, 2, data_list[4], format1) + sheet.write(row, 3, data_list[2], format1) + sheet.write(row, 4, data_list[1], format1) + sheet.write(row, 5, data_list[3], format1) + sheet.write(row, 6, '', format1) + sheet.write(row, 7, data_list[6], format1) + sheet.write(row, 8, data_list[7], format1) + sheet.write(row, 9, data_list[8], format1) + sheet.write(row, 10, data_list[9], format1) + sheet.write(row, 11, data_list[5], format1) return row def _write_overtime_data(self, sheet, row, date_from, date_to, entry_type, employees, salary, salary_ids, bank, branch, company_id, format1): - """Write overtime data""" payslip_ids = self._get_payslips(date_from, date_to, entry_type, employees, salary, salary_ids, bank) if payslip_ids: for payslip in payslip_ids: - # For overtime, show in "Other Earnings" column data_list = [ payslip.employee_id.emp_no, payslip.employee_id.name or ' ', @@ -337,16 +331,16 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): ] row += 1 - sheet.write(row, 2, data_list[4], format1) # Total Amount - sheet.write(row, 3, data_list[2], format1) # Beneficiary Account IBAN - sheet.write(row, 4, data_list[1], format1) # Beneficiary Name - sheet.write(row, 5, data_list[3], format1) # Beneficiary Bank CODE - sheet.write(row, 6, '', format1) # Payment Description (empty) - sheet.write(row, 7, data_list[6], format1) # Basic (0) - sheet.write(row, 8, data_list[7], format1) # Housing (0) - sheet.write(row, 9, data_list[8], format1) # Overtime in Other Earnings - sheet.write(row, 10, data_list[9], format1) # Deductions - sheet.write(row, 11, data_list[5], format1) # Beneficiary National/IqamaID + sheet.write(row, 2, data_list[4], format1) + sheet.write(row, 3, data_list[2], format1) + sheet.write(row, 4, data_list[1], format1) + sheet.write(row, 5, data_list[3], format1) + sheet.write(row, 6, '', format1) + sheet.write(row, 7, data_list[6], format1) + sheet.write(row, 8, data_list[7], format1) + sheet.write(row, 9, data_list[8], format1) + sheet.write(row, 10, data_list[9], format1) + sheet.write(row, 11, data_list[5], format1) return row @@ -368,26 +362,24 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): ] row += 1 - sheet.write(row, 2, data_list[4], format1) # Total Amount - sheet.write(row, 3, data_list[2], format1) # Beneficiary Account IBAN - sheet.write(row, 4, data_list[1], format1) # Beneficiary Name - sheet.write(row, 5, data_list[3], format1) # Beneficiary Bank CODE - sheet.write(row, 6, '', format1) # Payment Description (empty) - sheet.write(row, 7, data_list[6], format1) # Basic (0) - sheet.write(row, 8, data_list[7], format1) # Housing (0) - sheet.write(row, 9, data_list[8], format1) # Mission allowance in Other Earnings - sheet.write(row, 10, data_list[9], format1) # Deductions - sheet.write(row, 11, data_list[5], format1) # Beneficiary National/IqamaID + sheet.write(row, 2, data_list[4], format1) + sheet.write(row, 3, data_list[2], format1) + sheet.write(row, 4, data_list[1], format1) + sheet.write(row, 5, data_list[3], format1) + sheet.write(row, 6, '', format1) + sheet.write(row, 7, data_list[6], format1) + sheet.write(row, 8, data_list[7], format1) + sheet.write(row, 9, data_list[8], format1) + sheet.write(row, 10, data_list[9], format1) + sheet.write(row, 11, data_list[5], format1) return row def _write_training_data(self, sheet, row, date_from, date_to, entry_type, employees, salary, salary_ids, bank, branch, company_id, format1): - """Write training data""" payslip_ids = self._get_payslips(date_from, date_to, entry_type, employees, salary, salary_ids, bank) if payslip_ids: for payslip in payslip_ids: - # For training, show in "Other Earnings" column data_list = [ payslip.employee_id.emp_no, payslip.employee_id.name or ' ', @@ -399,28 +391,26 @@ class PayrollBankAlbiladReportXlsx(models.AbstractModel): ] row += 1 - sheet.write(row, 2, data_list[4], format1) # Total Amount - sheet.write(row, 3, data_list[2], format1) # Beneficiary Account IBAN - sheet.write(row, 4, data_list[1], format1) # Beneficiary Name - sheet.write(row, 5, data_list[3], format1) # Beneficiary Bank CODE - sheet.write(row, 6, '', format1) # Payment Description (empty) - sheet.write(row, 7, data_list[6], format1) # Basic (0) - sheet.write(row, 8, data_list[7], format1) # Housing (0) - sheet.write(row, 9, data_list[8], format1) # Training allowance in Other Earnings - sheet.write(row, 10, data_list[9], format1) # Deductions - sheet.write(row, 11, data_list[5], format1) # Beneficiary National/IqamaID + sheet.write(row, 2, data_list[4], format1) + sheet.write(row, 3, data_list[2], format1) + sheet.write(row, 4, data_list[1], format1) + sheet.write(row, 5, data_list[3], format1) + sheet.write(row, 6, '', format1) + sheet.write(row, 7, data_list[6], format1) + sheet.write(row, 8, data_list[7], format1) + sheet.write(row, 9, data_list[8], format1) + sheet.write(row, 10, data_list[9], format1) + sheet.write(row, 11, data_list[5], format1) return row class HrPayslipExtended(models.Model): - """Extend hr.payslip to support confirmed state filtering""" _inherit = 'hr.payslip' @api.model def search(self, args, offset=0, limit=None, order=None, count=False): - """Override search to use confirmed state when context flag is set""" - # Check if we should use confirmed state for XLSX reports + if self.env.context.get('use_payslip_run_confirmed_state'): modified_args = [] for item in args: @@ -439,24 +429,19 @@ class HrPayslipExtended(models.Model): class PayrollXlsxExtended(models.AbstractModel): - """Inherit parent XLSX report to use confirmed state for all bank types""" _inherit = 'report.exp_payroll_custom.report_payroll_bank_xlsx' @api.model def generate_xlsx_report(self, workbook, data, payslips): - """Override to use confirmed state in XLSX reports only""" - # Call parent with context flag to use confirmed state return super(PayrollXlsxExtended, self.with_context(use_payslip_run_confirmed_state=True)).generate_xlsx_report(workbook, data, payslips) class PayrollBankAlbiladReportPdf(models.AbstractModel): - """Al-Bilad Bank Payroll Report PDF""" _name = "report.exp_payroll_albilad.albilad_bank_pdf" _description = 'Al-Bilad Bank Payroll Report PDF' @api.model def _get_report_values(self, docids, data=None): - """Prepare data for PDF report""" if not data: return {} @@ -490,7 +475,6 @@ class PayrollBankAlbiladReportPdf(models.AbstractModel): payslip_data = [] - # Process payslips based on no_details flag if no_details: # Group by bank for bank in banks: @@ -519,7 +503,6 @@ class PayrollBankAlbiladReportPdf(models.AbstractModel): payslip_data = all_payslips - # Convert dates to strings for display date_from_str = str(date_from) if date_from else '' date_to_str = str(date_to) if date_to else '' @@ -550,7 +533,6 @@ class PayrollBankAlbiladReportPdf(models.AbstractModel): except: national_id = '' - # Get common fields safely iban = ' ' bank_code = ' ' if payslip.employee_id.bank_account_id: @@ -559,7 +541,6 @@ class PayrollBankAlbiladReportPdf(models.AbstractModel): bank_code = payslip.employee_id.bank_account_id.bank_id.bic or ' ' if report_type == 'salary': - # For salary, calculate basic, housing, and other salary_rules = self.env['hr.salary.rule'].search([]).sorted(key=lambda v: v.sequence).ids payslip_line_obj = self.env['hr.payslip.line'] diff --git a/odex25_hr/exp_payroll_albilad/report/payroll_bank_report_views.xml b/odex25_hr/exp_payroll_albilad/report/payroll_bank_report_views.xml index 28d636230..fe23bae59 100644 --- a/odex25_hr/exp_payroll_albilad/report/payroll_bank_report_views.xml +++ b/odex25_hr/exp_payroll_albilad/report/payroll_bank_report_views.xml @@ -1,6 +1,5 @@ - Al-Bilad Bank Payroll Report payroll.bank.wiz diff --git a/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report.py b/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report.py index 51d721058..aa3d29c97 100644 --- a/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report.py +++ b/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report.py @@ -13,7 +13,6 @@ class BankPayslipReportAlbilad(models.TransientModel): ) def print_report(self): - """Override print_report to use Al-Bilad report when albilad bank is selected""" if self.bank_type == 'albilad': # Validate that banks are selected if not self.bank_ids: @@ -47,13 +46,10 @@ class BankPayslipReportAlbilad(models.TransientModel): return self.env.ref('exp_payroll_albilad.report_payroll_bank_albilad_xlsx').report_action(self, data=datas) else: - # Call parent method for other bank types return super(BankPayslipReportAlbilad, self).print_report() def print_pdf_report(self): - """Print Al-Bilad PDF report when albilad bank is selected""" if self.bank_type == 'albilad': - # Validate that banks are selected if not self.bank_ids: raise UserError(_('Please select at least one bank to generate the report.')) @@ -89,7 +85,6 @@ class BankPayslipReportAlbilad(models.TransientModel): if hasattr(super(BankPayslipReportAlbilad, self), 'print_pdf_report'): return super(BankPayslipReportAlbilad, self).print_pdf_report() else: - # If parent doesn't have print_pdf_report, return a message return { 'type': 'ir.actions.client', 'tag': 'display_notification', diff --git a/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report_view.xml b/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report_view.xml index 9c6778fb0..f881ed522 100644 --- a/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report_view.xml +++ b/odex25_hr/exp_payroll_albilad/wizard/payroll_bank_report_view.xml @@ -1,12 +1,10 @@ - payroll.bank.wiz.form.albilad payroll.bank.wiz - {'required':[('bank_type','=','albilad')]}