to(base_url('/login'));
}
// Internally used functions
private function computeEmployeePayroll($emppaytransid, $save = false, $instanceOfEmpPayTransModel = null, $instanceOfEmpPayTransInDedModel = null)
{
if($instanceOfEmpPayTransModel == null)
$empPayTransModel = new EmployeePayTransactionModel();
else
$empPayTransModel = $instanceOfEmpPayTransModel;
if($instanceOfEmpPayTransInDedModel == null)
$empPayTransInDedModel = new EmpPayTransIncomeDeductionModel();
else
$empPayTransInDedModel = $instanceOfEmpPayTransInDedModel;
$empPayTrans = $empPayTransModel->find($emppaytransid);
// Compute basic pay first
// 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);
$empPayTrans->taxable_deduction = $empPayTransInDedModel->getTotalIncomeDeduction($emppaytransid, 0, 1);
$empPayTrans->nontaxable_deduction = $empPayTransInDedModel->getTotalIncomeDeduction($emppaytransid, 0, 0);
// Compute gross first before getting taxable income to avoid misscalculation of net income
$empPayTrans->gross_income = $empPayTrans->taxable_income + $empPayTrans->nontaxable_income;
// Deduct SSS, Philhealth, Pagibig and Union Dues
$empPayTrans->taxable_income -= $empPayTrans->nontaxable_deduction;
// Compute Income Tax after getting taxable income
$payCompute = new PayrollComputation();
$empPayTrans->income_tax = $payCompute->computeIncomeTax($empPayTrans->taxable_income);
// Deduction and net pay
$empPayTrans->total_deduction = $empPayTrans->taxable_deduction + $empPayTrans->nontaxable_deduction + $empPayTrans->income_tax;
$empPayTrans->net_pay = $empPayTrans->gross_income - $empPayTrans->total_deduction;
if($save) $empPayTransModel->save($empPayTrans);
}
private function printRaw($label, $data)
{
echo $label.": ";
print_r($data);
echo "
";
}
// --end-- Internally used functions
public function payrollGroup()
{
$payGroups = (new PayrollGroupModel())->findAll();
$payGroupHTMLTable = new \CodeIgniter\View\Table();
$payGroupHTMLTable->setTemplate(MiscLib::adminLTETableTemplate());
if($payGroups == null)
$data['tblPayGroup'] = '
No groups found.
'; else { $payGroupHTMLTable->setHeading('ID', 'Group Code', 'Group Name', 'Action'); foreach($payGroups as $group) { $iconView = ''; $payGroupHTMLTable->addRow($group->pay_group_id, $group->pay_group_code, $group->pay_group_name, "$iconView"); } $data['tblPayGroup'] = $payGroupHTMLTable->generate(); } return view('payroll/paygroupview', $data); } public function addPayrollGroup() { $payrollGroup = new PayrollGroup(); $payrollGroupModel = new PayrollGroupModel(); $rawData = $this->request->getPost(); $payrollGroup->fill($rawData); $payrollGroupModel->save($payrollGroup); if($payrollGroupModel->getInsertID() == 0) return redirect()->back()->withInput()->with('error', 'Failed to add payroll group'); else return redirect()->to('/payroll/paygroup')->with('message', 'Payroll Group Added'); } public function incomeDeduction() { $incomeDeductions = (new IncomeDeductionModel())->findAll(); $inDedHTMLTable = new \CodeIgniter\View\Table(); $inDedHTMLTable->setTemplate(MiscLib::adminLTETableTemplate()); if($incomeDeductions == null) $data['tblIncomeDeduction'] = 'No income and deduction found.
'; else { $inDedHTMLTable->setHeading('ID', 'Payslip Display', 'COA Code', 'Deduction Name', 'Income', 'Taxable', 'Include in Gross', 'Action'); foreach($incomeDeductions as $incomeDeduction) { $iconView = ''; $inDedHTMLTable->addRow($incomeDeduction->inded_id, $incomeDeduction->payslip_display, $incomeDeduction->coa_code, $incomeDeduction->income_deduction_name, ($incomeDeduction->is_income) ? 'Yes' : 'No', ($incomeDeduction->is_taxable) ? 'Yes' : 'No', ($incomeDeduction->include_in_gross) ? 'Yes' : 'No', $iconView); } $data['tblIncomeDeduction'] = $inDedHTMLTable->generate(); } return view('payroll/incomedeductionview', $data); } public function addIncomeDeduction() { $incomeDeduction = new IncomeDeduction(); $incomeDeductionModel = new IncomeDeductionModel(); $rawData = $this->request->getPost(); // Handle checkbox inputs $rawData['is_income'] = isset($rawData['is_income']) ? 1 : 0; // Set to 1 if checked, 0 if not $rawData['is_taxable'] = isset($rawData['is_taxable']) ? 1 : 0; // Same for taxable $rawData['include_in_gross'] = isset($rawData['include_in_gross']) ? 1 : 0; // Same for include in gross $incomeDeduction->fill($rawData); $incomeDeductionModel->save($incomeDeduction); if($incomeDeductionModel->getInsertID() == 0) return redirect()->back()->withInput()->with('error', 'Failed to add income or deduction'); else return redirect()->to('/payroll/inded')->with('message', 'Income or Deduction Added'); } public function payrollType() { $payrollTypes = (new PayrollTypeModel())->findAll(); $payTypeHTMLTable = new \CodeIgniter\View\Table(); $payTypeHTMLTable->setTemplate(MiscLib::adminLTETableTemplate()); if($payrollTypes == null) $data['tblPayrollType'] = 'No payroll type found.
'; else { $payTypeHTMLTable->setHeading('ID', 'Code', 'Name', 'Monthly', 'Semi-Monthly', 'Daily', 'Hourly', 'Action'); foreach($payrollTypes as $payrollType) { $iconView = ''; $payTypeHTMLTable->addRow($payrollType->paytype_id, $payrollType->paytype_code, $payrollType->paytype_name, ($payrollType->is_monthly) ? 'Yes' : 'No', ($payrollType->is_semi_monthly) ? 'Yes' : 'No', ($payrollType->is_daily) ? 'Yes' : 'No', ($payrollType->is_hourly) ? 'Yes' : 'No', $iconView); } $data['tblPayrollType'] = $payTypeHTMLTable->generate(); } return view('payroll/paytypeview', $data); } public function addPayrollType() { $payrollType = new PayrollType(); $payrollTypeModel = new PayrollTypeModel(); $rawData = $this->request->getPost(); // Initialize all payroll type fields to 0 $rawData['is_monthly'] = 0; $rawData['is_semi_monthly'] = 0; $rawData['is_daily'] = 0; $rawData['is_hourly'] = 0; // Handle radio button input if (isset($rawData['paytype_sched'])) { switch ($rawData['paytype_sched']) { case 'monthly': $rawData['is_monthly'] = 1; break; case 'semi_monthly': $rawData['is_semi_monthly'] = 1; break; case 'daily': $rawData['is_daily'] = 1; break; case 'hourly': $rawData['is_hourly'] = 1; break; } } $payrollType->fill($rawData); $payrollTypeModel->save($payrollType); if($payrollTypeModel->getInsertID() == 0) return redirect()->back()->withInput()->with('error', 'Failed to add payroll type'); else return redirect()->to('/payroll/paytype')->with('message', 'Payroll Type Added'); } 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()); if($empPayInfos == null) $data['tblEmpPayInfo'] = 'No employee payroll type found.
'; else { $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." ".$iconEdit." ".$iconDelete); } $data['tblEmpPayInfo'] = $empPayInfoHTMLTable->generate(); } return view('payroll/empinfoview', $data); } public function saveEmployeePayrollInfo() { $empPayInfo = new EmployeePayrollInfo(); $empPayInfoModel = new EmployeePayrollInfoModel(); $rawData = $this->request->getPost(); $rawData['is_ATM'] = isset($rawData['is_ATM']) ? 1 : 0; $rawData['has_cola'] = isset($rawData['has_cola']) ? 1 : 0; $rawData['has_philhealth'] = isset($rawData['has_philhealth']) ? 1 : 0; $rawData['has_hdmf'] = isset($rawData['has_hdmf']) ? 1 : 0; $rawData['has_sss'] = isset($rawData['has_sss']) ? 1 : 0; $rawData['has_gsis'] = isset($rawData['has_gsis']) ? 1 : 0; $empPayInfo->fill($rawData);; 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()->back()->withInput()->with('error', 'Failed to add employee payroll type'); } public function deleteEmployeePayrollInfo($emppayid) { $empPayInfoModel = new EmployeePayrollInfoModel(); if($empPayInfoModel->delete($emppayid)) return redirect()->back()->with('message', 'Employee Deleted on Payroll'); else return redirect()->back()->with('error', 'Failed to delete employee on payroll'); } public function employeeCompensationBenefits() { $empPayInfoModel = new EmployeePayrollInfoModel(); $incomeDeductionModel = new IncomeDeductionModel(); $empPayInDedModel = new EmpPayIncomeDeductionModel(); $data['paySchedules'] = (new PayrollScheduleModel())->findAll(); $data['incomeList'] = $incomeDeductionModel->where("is_income", 1)->findAll(); $data['deductionList'] = $incomeDeductionModel->where("is_income", 0)->findAll(); $data['empPayInfos'] = $empPayInfoModel->getAllEmpPayInfoXEmpPayType(); $data['empLoaded'] = false; if($this->request->getGet('empid') != null) { $settingsModel = new SettingsModel(); $iconView = ''; $iconEdit = ''; $iconDelete = ''; $data['empLoaded'] = true; $data['selectedEmployee'] = $empPayInfoModel->getEmpPayInfoXEmpPayTypeByEmpID($this->request->getGet('empid')); $data['empPayIncomeList'] = $empPayInDedModel->getEmpPayInDedByEmpPayIdSchedIdIsIncome($data['selectedEmployee']->emppay_id, $this->request->getGet('payschedid'), true); $data['empPayDeductionList'] = $empPayInDedModel->getEmpPayInDedByEmpPayIdSchedIdIsIncome($data['selectedEmployee']->emppay_id, $this->request->getGet('payschedid'),false); } return view('payroll/compensationbenefitsview', $data); } public function saveEmployeeCompensationBenefits() { $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; $rawData['worked_days_based'] = 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; case 'daysbased': $rawData['worked_days_based'] = 1; break; } } $rawData['is_override'] = isset($rawData['is_override']) ? 1 : 0; $empPayInDed->fill($rawData); if($empPayInDedModel->save($empPayInDed)) { if(isset($rawData['emppayinded_id'])) return redirect()->to('/payroll/compben?payschedid='.$this->request->getPost('payschedule_id').'&empid='.$this->request->getPost('emp_id'))->with('message', 'Employee Compensation Benefits edited'); else return redirect()->to('/payroll/compben?payschedid='.$this->request->getPost('payschedule_id').'&empid='.$this->request->getPost('emp_id'))->with('message', 'Employee Compensation Benefits Added'); } else return redirect()->back()->withInput()->with('error', 'Failed to add employee compensation benefits'); } public function deleteEmployeeCompensationBenefits() { $empPayInDedModel = new EmpPayIncomeDeductionModel(); if($empPayInDedModel->delete($this->request->getPost('emppayinded_id'))) return redirect()->to('/payroll/compben?payschedid='.$this->request->getPost('payschedule_id').'&empid='.$this->request->getPost('emp_id'))->with('message', 'Employee Compensation Benefits deleted'); else return redirect()->back()->with('error', 'Failed to delete employee compensation benefits'); } public function payrollSettings() { $incomeDeductionModel = new IncomeDeductionModel(); $settingsModel = new SettingsModel(); $settings = new Settings(); if($this->request->is('post')) { $settings->fill($this->request->getPost()); $settingsModel->save($settings); } $data['indedList'] = $incomeDeductionModel->findAll(); $data['basicSalVal'] = $settingsModel->where('key', 'BasicSalary')->first(); $data['COLAVal'] = $settingsModel->where('key', 'COLA')->first(); $data['PhilhealthVal'] = $settingsModel->where('key', 'Philhealth')->first(); $data['HDMFVal'] = $settingsModel->where('key', 'HDMF')->first(); $data['SSSVal'] = $settingsModel->where('key', 'SSS')->first(); $data['GSISVal'] = $settingsModel->where('key', 'GSIS')->first(); return view('payroll/paysettingsview', $data); } public function payrollTransactions() { $data['paytypes'] = (new PayrollTypeModel())->findAll(); $data['paySchedules'] = (new PayrollScheduleModel())->findAll(); $payTrans = (new PayrollTransactionModel())->orderBy('created_at', 'DESC')->findAll(); $payTransHTMLTable = new \CodeIgniter\View\Table(); $payTransHTMLTable->setTemplate(MiscLib::adminLTETableTemplate()); if($payTrans == null) $data['tblPayTrans'] = 'No transactions found.
'; else { $payTransHTMLTable->setHeading('ID', 'From', 'To', 'No. of Days', 'Status', 'Remarks', 'Action'); foreach($payTrans as $trans) { $iconEdit = ''; $payTransHTMLTable->addRow($trans->paytrans_id, $trans->payroll_from, $trans->payroll_to, $trans->no_of_days, $trans->is_open ? 'Open' : ' Closed', $trans->remarks, $iconEdit); } $data['tblPayTrans'] = $payTransHTMLTable->generate(); } return view('payroll/paytransactionview', $data); } public function addPayrollTransactions() { $payTransModel = new PayrollTransactionModel(); $payTrans = new PayrollTransaction(); $rawData = $this->request->getPost(); $payTrans->fill($rawData); if($payTransModel->save($payTrans)) return redirect()->to('/payroll/paytrans')->with('message', 'Payroll Transaction Added'); else return redirect()->back()->withInput()->with('error', 'Failed to add payroll transaction'); } public function employeePayrollTransactions($paytransid) { $incomeDeductionModel = new IncomeDeductionModel(); $data['paygroupid'] = $this->request->getGet('grpid'); $data['showInitBtn'] = false; $payTrans = (new PayrollTransactionModel())->where('paytrans_id', $paytransid)->first(); $data['paytransid'] = $paytransid; $data['initURL'] = $paytransid.'/'.$data['paygroupid'].'/'.$payTrans->paytype_id; $data['paygroups'] = (new PayrollGroupModel())->findAll(); $data['incomeList'] = $incomeDeductionModel->where("is_income", 1)->findAll(); $data['deductionList'] = $incomeDeductionModel->where("is_income", 0)->findAll(); $empPayTrans = (new EmployeePayTransactionModel())->getEmpPayTransByPayGroupId($data['paygroupid']); $empPayTransHTMLTable = new \CodeIgniter\View\Table(); $empPayTransHTMLTable->setTemplate(MiscLib::adminLTETableTemplate()); if($empPayTrans == null) { $empPayTrans = (new EmployeePayrollInfoModel())->getEmpPayInfoXEmpPayTypeByPayGrpId($data['paygroupid'], $payTrans->paytype_id); $data['showInitBtn'] = true; $empPayTransHTMLTable->setHeading('ID', 'Company ID', 'Name', 'Branch', 'Daily Basic'); foreach($empPayTrans as $trans) { $empPayTransHTMLTable->addRow($trans->employee_id, $trans->company_issued_id, $trans->last_name . ', ' . $trans->first_name, $trans->branch_code, $trans->basic_monthly_pay); } $data['tblEmpPayTrans'] = $empPayTransHTMLTable->generate(); } else { $empPayTransHTMLTable->setHeading('ID', 'Name', 'Branch', 'Basic Salary', 'Days Work', 'Gross', 'Deduction', 'Net', 'Action'); foreach($empPayTrans as $trans) { //$iconView = ''; $iconEdit = ''; $empPayTransHTMLTable->addRow($trans->employee_id, $trans->last_name . ', ' . $trans->first_name, $trans->branch_code, $trans->basic_pay, $trans->actual_work_days, $trans->gross_income, $trans->total_deduction, $trans->net_pay, $iconEdit); // Get Emp Trans In Ded $empPayTransInDedModel = new EmpPayTransIncomeDeductionModel(); $data['emppaytrans'][] = ["empPayTrans"=>$trans, "empPayTransInDedIncome"=>$empPayTransInDedModel->getEmpPayTransInDedxInDedByEmpTransIdIsIncome($trans->emppaytrans_id, true), "empPayTransInDedDeduction"=>$empPayTransInDedModel->getEmpPayTransInDedxInDedByEmpTransIdIsIncome($trans->emppaytrans_id, false)]; } $data['tblEmpPayTrans'] = $empPayTransHTMLTable->generate(); } return view('payroll/emppaytransactionview', $data); } public function empPayTransInitializePayroll($paytransid, $paygroupid, $transtypid) { $empPayInfos = (new EmployeePayrollInfoModel())->getEmpPayInfoXEmpPayTypeByPayGrpId($paygroupid, $transtypid); $payTrans = (new PayrollTransactionModel())->where('paytrans_id', $paytransid)->first(); $empPayTransactionModel = new EmployeePayTransactionModel(); foreach($empPayInfos as $empPayInfo) { $empPayTransaction = new EmployeePayTransaction(); $empPayTransaction->fill( ['paytrans_id' => $paytransid, 'company_id' => $empPayInfo->company_id, 'branch_code' => $empPayInfo->branch_code, 'dept_id' => $empPayInfo->dept_id, 'job_title_id' => $empPayInfo->job_title_id, 'pay_group_id' => $empPayInfo->pay_group_id, 'emp_status_id' => $empPayInfo->emp_status_id, 'employee_id' => $empPayInfo->employee_id, 'company_issued_id' => $empPayInfo->company_issued_id, 'last_name' => $empPayInfo->last_name, 'first_name' => $empPayInfo->first_name, 'middle_name' => $empPayInfo->middle_name, 'suffix' => $empPayInfo->suffix, 'email_address' => $empPayInfo->email_address, 'is_ATM' => $empPayInfo->is_ATM, 'savings_account' => $empPayInfo->savings_account, 'basic_sal_computation' => $empPayInfo->basic_sal_computation, 'basic_monthly_pay' => $empPayInfo->basic_monthly_pay, 'basic_semi_monthly_pay' => $empPayInfo->basic_semi_monthly_pay, 'basic_daily_pay' => $empPayInfo->basic_daily_pay, 'basic_hourly_pay' => $empPayInfo->basic_hourly_pay, 'has_cola' => $empPayInfo->has_cola, 'has_philhealth' => $empPayInfo->has_philhealth, 'has_hdmf' => $empPayInfo->has_hdmf, 'has_sss' => $empPayInfo->has_sss, 'has_gsis' => $empPayInfo->has_gsis, 'actual_work_days' => $payTrans->no_of_days, 'basic_pay' => 0, 'gross_income' => 0, 'taxable_income' => 0, 'nontaxable_income' => 0, 'income_tax' => 0, 'total_deduction' => 0, 'taxable_deduction' => 0, 'nontaxable_deduction' => 0, 'net_pay' => 0] ); $empPayTransactionModel->save($empPayTransaction); $empPayTransaction = $empPayTransactionModel->find($empPayTransactionModel->getInsertID()); $empPayInDeds = (new EmpPayIncomeDeductionModel())->getEmpPayInDedByEmpPayIdSchedId($empPayInfo->emppay_id, $payTrans->payschedule_id); foreach($empPayInDeds as $empPayInDed) { $empPayTransInDed = new EmpPayTransIncomeDeduction(); $empPayTransInDedModel = new EmpPayTransIncomeDeductionModel(); $payCompute = new PayrollComputation(); $amount = $payCompute->computeIncomeDeductionByComputationType($rawData, $empPayTransaction); $empPayTransInDed->fill( ['emppaytrans_id' => $empPayTransaction->emppaytrans_id, 'inded_id' => $empPayInDed->inded_id, 'payslip_display' => $empPayInDed->payslip_display, 'inded_name' => $empPayInDed->inded_name, 'coa_code' => $empPayInDed->coa_code, 'is_income' => $empPayInDed->is_income, 'is_taxable' => $empPayInDed->is_taxable, 'include_in_gross' => $empPayInDed->include_in_gross, 'is_fixed_amt' => $empPayInDed->is_fixed_amt, 'is_percent_amt' => $empPayInDed->is_percent_amt, 'worked_days_based' => $empPayInDed->worked_days_based, 'amount' => $amount, 'base_amount' => $empPayInDed->amount, 'is_override' => $empPayInDed->is_override] ); $empPayTransInDedModel->save($empPayTransInDed); } $this->computeEmployeePayroll($empPayTransaction->emppaytrans_id, true); } return redirect()->back()->withInput()->with('message', 'Payroll processed. Please verify the entries.'); } public function employeePayrollTransactionsEditDaysWorked() { $empPayTransModel = new EmployeePayTransactionModel(); $rawData = $this->request->getPost(); $empPayTransModel->changeActualDaysWorked($rawData['emppaytrans_id'], $rawData['actual_work_days']); $this->computeEmployeePayroll($rawData['emppaytrans_id'], true, $empPayTransModel); 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 saveEmpPayTransIncomeDeduction() { $empPayTransInDed = new EmpPayTransIncomeDeduction(); $empPayTransInDedModel = new EmpPayTransIncomeDeductionModel(); $empPayTransactionModel = new EmployeePayTransactionModel(); $incomeDeductionModel = new IncomeDeductionModel(); $rawData = $this->request->getPost(); // Initialize all payroll type fields to 0 $rawData['is_fixed_amt'] = 0; $rawData['is_percent_amt'] = 0; $rawData['worked_days_based'] = 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; case 'daysbased': $rawData['worked_days_based'] = 1; break; } } $rawData['is_override'] = isset($rawData['is_override']) ? 1 : 0; $empPayTrans = $empPayTransactionModel->find($rawData['emppaytrans_id']); $incomeDeduction = $incomeDeductionModel->find($rawData['inded_id']); //$amount = $rawData['is_fixed_amt'] ? $rawData['amount'] : ($rawData['amount'] / 100) * $empPayTrans->basic_pay; $payCompute = new PayrollComputation(); $amount = $payCompute->computeIncomeDeductionByComputationType($rawData, $empPayTrans); $empPayTransInDed->fill( ['emppaytransinded_id' => (isset($rawData['emppaytransinded_id'])) ? $rawData['emppaytransinded_id'] : null, 'emppaytrans_id' => $rawData['emppaytrans_id'], 'inded_id' => $rawData['inded_id'], 'payslip_display' => $incomeDeduction->payslip_display, 'inded_name' => $incomeDeduction->inded_name, 'coa_code' => $incomeDeduction->coa_code, 'is_income' => $incomeDeduction->is_income, 'is_taxable' => $incomeDeduction->is_taxable, 'include_in_gross' => $incomeDeduction->include_in_gross, 'is_fixed_amt' => $rawData['is_fixed_amt'], 'is_percent_amt' => $rawData['is_percent_amt'], 'worked_days_based' => $rawData['worked_days_based'], 'amount' => $amount, 'base_amount' => $rawData['amount'], 'is_override' => $rawData['is_override']] ); if($empPayTransInDedModel->save($empPayTransInDed)) { $this->computeEmployeePayroll($rawData['emppaytrans_id'], true, $empPayTransactionModel, $empPayTransInDedModel); if(isset($rawData['emppaytransinded_id'])) return redirect()->back()->with('message', 'Income or Deduction Updated'); else return redirect()->back()->with('message', 'Income or Deduction Added'); } else return redirect()->back()->withInput()->with('error', 'Failed to add income or deduction'); } public function deleteEmpPayTransIncomeDeduction($emppaytransindedid, $emppaytransid) { $empPayTransInDedModel = new EmpPayTransIncomeDeductionModel(); if($empPayTransInDedModel->delete($emppaytransindedid)) { $this->computeEmployeePayroll($emppaytransid, true, null, $empPayTransInDedModel); return redirect()->back()->with('message', 'Income or Deduction Deleted'); } else return redirect()->back()->with('error', 'Failed to delete income or deduction'); } }