diff --git a/app/Config/Routes.php b/app/Config/Routes.php index b7e8aa7..916aa43 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -44,6 +44,9 @@ $routes->post('payroll/addpaytype', 'PayrollController::addPayrollType'); $routes->get('payroll/emppayinfo', 'PayrollController::employeePayrollInfo'); $routes->post('payroll/addemppayinfo', 'PayrollController::addEmployeePayrollInfo'); +$routes->get('payroll/compben', 'PayrollController::employeeCompensationBenefits'); +$routes->post('payroll/addcompben', 'PayrollController::addEmployeeCompensationBenefits'); + // Administrator Routes $routes->get('adminuser', 'AdministratorController::index'); $routes->get('adminuser/newuser', 'AdministratorController::newUserView'); diff --git a/app/Controllers/PayrollController.php b/app/Controllers/PayrollController.php index ef1b3a0..3c04783 100644 --- a/app/Controllers/PayrollController.php +++ b/app/Controllers/PayrollController.php @@ -11,6 +11,7 @@ use App\Models\IncomeDeductionModel; use App\Models\PayrollTypeModel; use App\Models\EmployeePayrollInfoModel; use App\Models\EmployeeModel; +use App\Models\EmpPayIncomeDeductionModel; // Entities @@ -19,6 +20,7 @@ use App\Entities\IncomeDeduction; use App\Entities\PayrollType; use App\Entities\EmployeePayrollInfo; use App\Entities\Employee; +use App\Entities\EmpPayIncomeDeduction; // Class Library use App\ClassLib\MiscLib; @@ -238,4 +240,60 @@ class PayrollController extends BaseController else return redirect()->to('/payroll/emppayinfo')->with('message', 'Employee Payroll Type Added'); } + + public function employeeCompensationBenefits() + { + $empPayInfoModel = new EmployeePayrollInfoModel(); + $incomeDeductionModel = new IncomeDeductionModel(); + $empPayInDedModel = new EmpPayIncomeDeductionModel(); + + $data['incomeList'] = $incomeDeductionModel->where("is_income", 1)->findAll(); + $data['deductionList'] = $incomeDeductionModel->where("is_income", 0)->findAll(); + $data['empPayInfos'] = $empPayInfoModel->getAllEmpPayInfoJoinedEmpPayType(); + $data['empLoaded'] = false; + + if($this->request->getGet('empid') != null) + { + $data['empLoaded'] = true; + $data['selectedEmployee'] = $empPayInfoModel->getEmpPayInfoJoinedEmpPayTypeByEmpID($this->request->getGet('empid')); + $data['empPayIncomeList'] = $empPayInDedModel->getEmpPayInDedByEmpPayId($data['selectedEmployee']->emppay_id, true); + $data['empPayDeductionList'] = $empPayInDedModel->getEmpPayInDedByEmpPayId($data['selectedEmployee']->emppay_id, false); + } + + return view('payroll/compensationbenefitsview', $data); + } + + public function addEmployeeCompensationBenefits() + { + $empPayInDed = new EmpPayIncomeDeduction(); + $empPayInDedModel = new EmpPayIncomeDeductionModel(); + + $rawData = $this->request->getPost(); + + // Initialize all payroll type fields to 0 + $rawData['is_fixed_amt'] = 0; + $rawData['is_percent_amt'] = 0; + + // Handle radio button input + if (isset($rawData['amount_type'])) { + switch ($rawData['amount_type']) { + case 'fixed': + $rawData['is_fixed_amt'] = 1; + break; + case 'perc': + $rawData['is_percent_amt'] = 1; + break; + } + } + + $rawData['is_override'] = isset($rawData['is_override']) ? 1 : 0; + + $empPayInDed->fill($rawData); + $empPayInDedModel->save($empPayInDed); + + if($empPayInDedModel->getInsertID() == 0) + return redirect()->back()->withInput()->with('error', 'Failed to add employee compensation benefits'); + else + return redirect()->to('/payroll/compben?empid='.$this->request->getPost('emp_id'))->with('message', 'Employee Compensation Benefits Added'); + } } diff --git a/app/Database/Migrations/2024-09-20-165644_CreateEmpPayIncomeDeduction.php b/app/Database/Migrations/2024-09-20-165644_CreateEmpPayIncomeDeduction.php new file mode 100644 index 0000000..d09cdba --- /dev/null +++ b/app/Database/Migrations/2024-09-20-165644_CreateEmpPayIncomeDeduction.php @@ -0,0 +1,85 @@ +forge->addField([ + 'emppayinded_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + 'auto_increment' => true + ], + 'emppay_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'inded_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'is_fixed_amt' => [ + 'type' => 'TINYINT', + 'constraint' => 1, + 'null' => false + ], + 'is_percent_amt' => [ + 'type' => 'TINYINT', + 'constraint' => 1, + 'null' => false + ], + 'amount' => [ + 'type' => 'DECIMAL', + 'constraint' => '12,4', + 'null' => false + ], + 'is_override' => [ + 'type' => 'TINYINT', + 'constraint' => 1, + 'null' => false + ], + + + // Common fields + 'created_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'created_by' => [ + 'type' => 'VARCHAR', + 'constraint' => '20', + 'null' => true + ], + 'updated_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'updated_by' => [ + 'type' => 'VARCHAR', + 'constraint' => '20', + 'null' => true + ], + 'deleted_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + ]); + + $this->forge->addKey('emppayinded_id', true); + $this->forge->addForeignKey('emppay_id', 'emp_pay_info', 'emppay_id', 'CASCADE', 'RESTRICT'); + $this->forge->addForeignKey('inded_id', 'pay_income_deduction', 'inded_id', 'CASCADE', 'RESTRICT'); + $this->forge->createTable('emp_pay_inded'); + } + + public function down() + { + $this->forge->dropTable('emp_pay_inded'); + } +} diff --git a/app/Entities/EmpPayIncomeDeduction.php b/app/Entities/EmpPayIncomeDeduction.php new file mode 100644 index 0000000..ca1b334 --- /dev/null +++ b/app/Entities/EmpPayIncomeDeduction.php @@ -0,0 +1,22 @@ + null, + 'emppay_id' => null, + 'inded_id' => null, + 'is_fixed_amt' => null, + 'is_percent_amt' => null, + 'amount' => null, + 'is_override' => null, + ]; + + protected $datamap = []; + protected $dates = ['created_at', 'updated_at', 'deleted_at']; + protected $casts = []; +} diff --git a/app/Models/EmpPayIncomeDeductionModel.php b/app/Models/EmpPayIncomeDeductionModel.php new file mode 100644 index 0000000..35b5714 --- /dev/null +++ b/app/Models/EmpPayIncomeDeductionModel.php @@ -0,0 +1,72 @@ +user()->employee_id; + return $data; + } + + public function assignUpdatedAt(array $data) + { + $data['data']['updated_at'] = date('Y-m-d H:i:s'); + $data['data']['updated_by'] = auth()->user()->employee_id; + return $data; + } + + public function getEmpPayInDedByEmpPayId($empPayId, $isIncome) + { + $builder = $this->db->table('emp_pay_inded'); + $builder->select('*'); + $builder->join('pay_income_deduction', 'pay_income_deduction.inded_id = emp_pay_inded.inded_id'); + $builder->where(['emp_pay_inded.emppay_id' => $empPayId, 'pay_income_deduction.is_income' => $isIncome]); + return $builder->get()->getResult(); + } +} diff --git a/app/Models/EmployeePayrollInfoModel.php b/app/Models/EmployeePayrollInfoModel.php index 0e146f3..fc69b7f 100644 --- a/app/Models/EmployeePayrollInfoModel.php +++ b/app/Models/EmployeePayrollInfoModel.php @@ -76,4 +76,14 @@ class EmployeePayrollInfoModel extends Model $builder->join('pay_type', 'pay_type.paytype_id = emp_pay_info.paytype_id'); return $builder->get()->getResult(); } + + public function getEmpPayInfoJoinedEmpPayTypeByEmpID($empID) + { + $builder = $this->db->table('emp_pay_info'); + $builder->select('*'); + $builder->join('employee', 'employee.employee_id = emp_pay_info.employee_id'); + $builder->join('pay_type', 'pay_type.paytype_id = emp_pay_info.paytype_id'); + $builder->where('emp_pay_info.employee_id', $empID); + return $builder->get()->getRow(); + } } diff --git a/app/Views/payroll/compensationbenefitsview.php b/app/Views/payroll/compensationbenefitsview.php index cfb980b..c48a79c 100644 --- a/app/Views/payroll/compensationbenefitsview.php +++ b/app/Views/payroll/compensationbenefitsview.php @@ -27,13 +27,13 @@ section('main') ?> - -