diff --git a/app/ClassLib/PayrollComputation.php b/app/ClassLib/PayrollComputation.php index cebb71d..4ea43a7 100644 --- a/app/ClassLib/PayrollComputation.php +++ b/app/ClassLib/PayrollComputation.php @@ -4,6 +4,19 @@ namespace App\ClassLib; class PayrollComputation { + public array $workdays_type = [ + '261.0000' => 'No work and not paid on Sat and Sun or RD', + '313.0000' => 'No work and not paid on Sun or RD', + '365.0000' => 'No work but paid on RD, Reg. & Special Holidays', + '392.5000' => 'Has work including RD, Reg. & Special Holidays', + ]; + + public array $basic_salary_computations = [ + 'DAILY' => 'Rate Based on Daily Hrs Worked', + 'SEMIMONTHLY' => 'Apply Semi-Monthly Rate', + 'MONTHLY' => 'Apply Monthly Rate' + ]; + public function __construct() { } diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 7cbcac7..d7a99d4 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -42,7 +42,7 @@ $routes->get('payroll/paytype', 'PayrollController::payrollType'); $routes->post('payroll/addpaytype', 'PayrollController::addPayrollType'); $routes->get('payroll/emppayinfo', 'PayrollController::employeePayrollInfo'); -$routes->post('payroll/addemppayinfo', 'PayrollController::addEmployeePayrollInfo'); +$routes->post('payroll/saveemppayinfo', 'PayrollController::saveEmployeePayrollInfo'); $routes->get('payroll/delempayinfo/(:num)', 'PayrollController::deleteEmployeePayrollInfo/$1'); $routes->get('payroll/compben', 'PayrollController::employeeCompensationBenefits'); @@ -58,6 +58,7 @@ $routes->post('payroll/addpaytrans', 'PayrollController::addPayrollTransactions' $routes->get('payroll/emppaytrans/(:num)', 'PayrollController::employeePayrollTransactions/$1'); $routes->get('payroll/emppaytransinit/(:num)/(:num)/(:num)', 'PayrollController::empPayTransInitializePayroll/$1/$2/$3'); $routes->post('payroll/emppaytransupdateworkdays', 'PayrollController::employeePayrollTransactionsEditDaysWorked'); +$routes->get('payroll/emppaytransrecom/(:num)', 'PayrollController::employeePayrollTransactionsRecompute/$1'); $routes->post('payroll/emppaytransaddinded', 'PayrollController::addEmpPayTransIncomeDeduction'); $routes->get('payroll/emppaytransdelinded/(:num)/(:num)', 'PayrollController::deleteEmpPayTransIncomeDeduction/$1/$2'); diff --git a/app/Controllers/PayrollController.php b/app/Controllers/PayrollController.php index a5905b1..da01578 100644 --- a/app/Controllers/PayrollController.php +++ b/app/Controllers/PayrollController.php @@ -60,7 +60,18 @@ class PayrollController extends BaseController $empPayTrans = $empPayTransModel->find($emppaytransid); // Compute basic pay first - $empPayTrans->basic_pay = $empPayTrans->actual_work_days * $empPayTrans->basic_daily_pay; + // DAILY, SEMIMONTHLY, MONTHLY reference is in PayrollComputation + switch ($empPayTrans->basic_sal_computation) { + case 'DAILY': + $empPayTrans->basic_pay = $empPayTrans->actual_work_days * $empPayTrans->basic_daily_pay; + break; + case 'SEMIMONTHLY': + $empPayTrans->basic_pay = $empPayTrans->basic_semi_monthly_pay; + break; + case 'MONTHLY': + $empPayTrans->basic_pay = $empPayTrans->basic_monthly_pay; + break; + } $empPayTrans->taxable_income = $empPayTransInDedModel->getTotalIncomeDeduction($emppaytransid, 1, 1) + $empPayTrans->basic_pay; $empPayTrans->nontaxable_income = $empPayTransInDedModel->getTotalIncomeDeduction($emppaytransid, 1, 0); @@ -252,11 +263,14 @@ class PayrollController extends BaseController public function employeePayrollInfo() { + $payCompute = new PayrollComputation(); $empPayInfoModel = new EmployeePayrollInfoModel(); $empPayInfos = $empPayInfoModel->getAllEmpPayInfoXEmpPayType(); $data['employees'] = (new EmployeeModel())->findAll(); $data['paytypes'] = (new PayrollTypeModel())->findAll(); + $data['workdaystype'] = $payCompute->workdays_type; + $data['salarycomputations'] = $payCompute->basic_salary_computations; $empPayInfoHTMLTable = new \CodeIgniter\View\Table(); $empPayInfoHTMLTable->setTemplate(MiscLib::adminLTETableTemplate()); @@ -268,11 +282,33 @@ class PayrollController extends BaseController $empPayInfoHTMLTable->setHeading('ID', 'Payroll Type', 'Employee ID', 'Employee Name', 'Monthly', 'Semi-Monthly', 'Daily', 'Hourly', 'Action'); foreach($empPayInfos as $empPayInfo) - { + { + $empayHTMLData = 'data-emppay_id="'.$empPayInfo->emppay_id. + '" data-employee_id="'.$empPayInfo->employee_id. + '" data-paytype_id="'.$empPayInfo->paytype_id. + '" data-is_atm="'.$empPayInfo->is_ATM. + '" data-savings_account="'.$empPayInfo->savings_account. + '" data-work_days="'.$empPayInfo->work_days. + '" data-basic_sal_computation="'.$empPayInfo->basic_sal_computation. + '" data-basic_monthly_pay="'.$empPayInfo->basic_monthly_pay. + '" data-basic_semi_monthly_pay="'.$empPayInfo->basic_semi_monthly_pay. + '" data-basic_daily_pay="'.$empPayInfo->basic_daily_pay. + '" data-basic_hourly_pay="'.$empPayInfo->basic_hourly_pay. + '" data-has_cola="'.$empPayInfo->has_cola. + '" data-has_philhealth="'.$empPayInfo->has_philhealth. + '" data-has_hdmf="'.$empPayInfo->has_hdmf. + '" data-has_sss="'.$empPayInfo->has_sss. + '" data-has_gsis="'.$empPayInfo->has_gsis. + '" data-company_issued_id="'.$empPayInfo->company_issued_id. + '" data-last_name="'.$empPayInfo->last_name. + '" data-first_name="'.$empPayInfo->first_name.'"'; + + $iconView = ''; + $iconEdit = ''; $iconDelete = ''; - $empPayInfoHTMLTable->addRow($empPayInfo->emppay_id, $empPayInfo->paytype_name, $empPayInfo->company_issued_id, $empPayInfo->last_name . ', ' . $empPayInfo->first_name, $empPayInfo->basic_monthly_pay, $empPayInfo->basic_semi_monthly_pay, $empPayInfo->basic_daily_pay, $empPayInfo->basic_hourly_pay, $iconView." ".$iconDelete); + $empPayInfoHTMLTable->addRow($empPayInfo->emppay_id, $empPayInfo->paytype_name, $empPayInfo->company_issued_id, $empPayInfo->last_name . ', ' . $empPayInfo->first_name, $empPayInfo->basic_monthly_pay, $empPayInfo->basic_semi_monthly_pay, $empPayInfo->basic_daily_pay, $empPayInfo->basic_hourly_pay, $iconView." ".$iconEdit." ".$iconDelete); } $data['tblEmpPayInfo'] = $empPayInfoHTMLTable->generate(); @@ -281,7 +317,7 @@ class PayrollController extends BaseController return view('payroll/empinfoview', $data); } - public function addEmployeePayrollInfo() + public function saveEmployeePayrollInfo() { $empPayInfo = new EmployeePayrollInfo(); $empPayInfoModel = new EmployeePayrollInfoModel(); @@ -295,13 +331,17 @@ class PayrollController extends BaseController $rawData['has_sss'] = isset($rawData['has_sss']) ? 1 : 0; $rawData['has_gsis'] = isset($rawData['has_gsis']) ? 1 : 0; - $empPayInfo->fill($rawData); - $empPayInfoModel->save($empPayInfo); + $empPayInfo->fill($rawData);; - if($empPayInfoModel->getInsertID() == 0) - return redirect()->back()->withInput()->with('error', 'Failed to add employee payroll type'); + if($empPayInfoModel->save($empPayInfo)) + { + if(isset($rawData['emppay_id'])) + return redirect()->to('/payroll/emppayinfo')->with('message', 'Employee Payroll Successfully Updated'); + else + return redirect()->to('/payroll/emppayinfo')->with('message', 'Employee Payroll Type Added'); + } else - return redirect()->to('/payroll/emppayinfo')->with('message', 'Employee Payroll Type Added'); + return redirect()->back()->withInput()->with('error', 'Failed to add employee payroll type'); } public function deleteEmployeePayrollInfo($emppayid) @@ -552,7 +592,7 @@ class PayrollController extends BaseController 'has_sss' => $empPayInfo->has_sss, 'has_gsis' => $empPayInfo->has_gsis, 'actual_work_days' => $payTrans->no_of_days, - 'basic_pay' => $payTrans->no_of_days * $empPayInfo->basic_daily_pay, + 'basic_pay' => 0, 'gross_income' => 0, 'taxable_income' => 0, 'nontaxable_income' => 0, @@ -592,34 +632,9 @@ class PayrollController extends BaseController ); $empPayTransInDedModel->save($empPayTransInDed); - - // Updating EmpPayTransaction - - if($empPayInDed->is_income) - { - $empPayTransaction->gross_income += $amount; - $empPayTransaction->{$empPayInDed->is_taxable ? 'taxable_income' : 'nontaxable_income'} += $amount; - } - else - { - $empPayTransaction->total_deduction += $amount; - $empPayTransaction->{$empPayInDed->is_taxable ? 'taxable_deduction' : 'nontaxable_deduction'} += $amount; - } - - // Less nontaxable deduction to taxable income - $empPayTransaction->taxable_income -= $empPayTransaction->nontaxable_income; - - // Compute Income Tax - $payCompute = new PayrollComputation(); - $empPayTransaction->income_tax = $payCompute->computeIncomeTax($empPayTransaction->taxable_income); } - $empPayTransaction->gross_income += $empPayTransaction->basic_pay; - $empPayTransaction->taxable_income += $empPayTransaction->basic_pay; - $empPayTransaction->total_deduction += $empPayTransaction->income_tax; - $empPayTransaction->net_pay = $empPayTransaction->gross_income - $empPayTransaction->total_deduction; - - $empPayTransactionModel->save($empPayTransaction); + $this->computeEmployeePayroll($empPayTransaction->emppaytrans_id, true); } return redirect()->back()->withInput()->with('message', 'Payroll processed. Please verify the entries.'); @@ -637,6 +652,12 @@ class PayrollController extends BaseController return redirect()->back()->withInput()->with('message', 'Days worked updated.'); } + public function employeePayrollTransactionsRecompute($emppaytransid) + { + $this->computeEmployeePayroll($emppaytransid, true); + return redirect()->back()->with('message', 'Employee Payroll Recomputed'); + } + public function addEmpPayTransIncomeDeduction() { $empPayTransInDed = new EmpPayTransIncomeDeduction(); diff --git a/app/Database/Migrations/2024-09-19-095336_AddWorkDaysOnEmpPayInfo.php b/app/Database/Migrations/2024-09-19-095336_AddWorkDaysOnEmpPayInfo.php index b08606c..7de1dbd 100644 --- a/app/Database/Migrations/2024-09-19-095336_AddWorkDaysOnEmpPayInfo.php +++ b/app/Database/Migrations/2024-09-19-095336_AddWorkDaysOnEmpPayInfo.php @@ -10,8 +10,8 @@ class AddWorkDaysOnEmpPayInfo extends Migration { $fields = [ 'work_days' => [ - 'type' => 'INT', - 'constraint' => 11, + 'type' => 'DECIMAL', + 'constraint' => '12,4', 'null' => false, 'after' => 'savings_account', ], diff --git a/app/Database/Migrations/2024-10-17-134728_AddSalComputeOnEmpPayInfo.php b/app/Database/Migrations/2024-10-17-134728_AddSalComputeOnEmpPayInfo.php new file mode 100644 index 0000000..0d771bf --- /dev/null +++ b/app/Database/Migrations/2024-10-17-134728_AddSalComputeOnEmpPayInfo.php @@ -0,0 +1,30 @@ + [ + 'type' => 'VARCHAR', + 'constraint' => 35, + 'null' => true, + 'after' => 'work_days', + ], + ]; + $this->forge->addColumn('emp_pay_info', $fields); + } + + public function down() + { + $fields = [ + 'basic_sal_computation', + ]; + + $this->forge->dropColumn('emp_pay_info', $fields); + } +} diff --git a/app/Entities/EmployeePayrollInfo.php b/app/Entities/EmployeePayrollInfo.php index 8d67eb4..c3b6322 100644 --- a/app/Entities/EmployeePayrollInfo.php +++ b/app/Entities/EmployeePayrollInfo.php @@ -13,6 +13,7 @@ class EmployeePayrollInfo extends Entity 'is_ATM' => null, 'savings_account' => null, 'work_days' => null, + 'basic_sal_computation' => null, 'basic_monthly_pay' => null, 'basic_semi_monthly_pay' => null, 'basic_daily_pay' => null, diff --git a/app/Models/EmployeePayrollInfoModel.php b/app/Models/EmployeePayrollInfoModel.php index 655c23a..1c0ac7d 100644 --- a/app/Models/EmployeePayrollInfoModel.php +++ b/app/Models/EmployeePayrollInfoModel.php @@ -17,6 +17,7 @@ class EmployeePayrollInfoModel extends Model 'is_ATM', 'savings_account', 'work_days', + 'basic_sal_computation', 'basic_monthly_pay', 'basic_semi_monthly_pay', 'basic_daily_pay', diff --git a/app/Views/payroll/empinfoview.php b/app/Views/payroll/empinfoview.php index 24d6c85..cffabf4 100644 --- a/app/Views/payroll/empinfoview.php +++ b/app/Views/payroll/empinfoview.php @@ -31,11 +31,11 @@ section('main') ?> - - diff --git a/app/Views/payroll/paygroupview.php b/app/Views/payroll/paygroupview.php index 867f097..9369f57 100644 --- a/app/Views/payroll/paygroupview.php +++ b/app/Views/payroll/paygroupview.php @@ -78,7 +78,7 @@