Merge pull request 'update attendance and display emp without attendance' (#24) from paulcortezl5 into main

Reviewed-on: #24
pull/25/head
paul 6 months ago
commit a64f451963

@ -26,4 +26,11 @@ class MiscLib
return $template;
}
public static function searchFromAsocArray($column, $value, $data)
{
$key = array_search($value, array_column($data, $column));
return ($key !== false) ? $data[$key] : null;
}
}

@ -66,6 +66,8 @@ $routes->get('payroll/emppaytransrecom/(:num)', 'PayrollController::employeePayr
$routes->post('payroll/saveemppaytransaddinded', 'PayrollController::saveEmpPayTransIncomeDeduction');
$routes->get('payroll/emppaytransdelinded/(:num)/(:num)', 'PayrollController::deleteEmpPayTransIncomeDeduction/$1/$2');
$routes->get('payroll/paytransreview/(:num)', 'PayrollController::payrollTransactionsReview/$1');
//$routes->post('t', 'PayrollController::test');

@ -17,6 +17,7 @@ use App\Models\PayrollScheduleModel;
use App\Models\PayrollTransactionModel;
use App\Models\EmployeePayTransactionModel;
use App\Models\EmpPayTransIncomeDeductionModel;
use App\Models\AttendanceSummaryModel;
// Entities
@ -31,6 +32,7 @@ use App\Entities\PayrollSchedule;
use App\Entities\PayrollTransaction;
use App\Entities\EmployeePayTransaction;
use App\Entities\EmpPayTransIncomeDeduction;
use App\Entities\AttendanceSummary;
// Class Library
use App\ClassLib\MiscLib;
@ -476,9 +478,10 @@ class PayrollController extends BaseController
foreach($payTrans as $trans)
{
$iconView = '<a href="/payroll/paytransreview/'.$trans->paytrans_id.'" class="ml-3" data-toggle="tooltip" title="View Payroll Transaction"><i class="fas fa-eye "></i></a>';
$iconEdit = '<a href="/payroll/emppaytrans/'.$trans->paytrans_id.'" class="ml-3" data-toggle="tooltip" title="Edit Payroll Transaction"><i class="fas fa-edit"></i></a>';
$payTransHTMLTable->addRow($trans->paytrans_id, $trans->payroll_from, $trans->payroll_to, $trans->no_of_days, $trans->is_open ? 'Open' : ' Closed', $trans->remarks, $iconEdit);
$payTransHTMLTable->addRow($trans->paytrans_id, $trans->payroll_from, $trans->payroll_to, $trans->no_of_days, $trans->is_open ? 'Open' : ' Closed', $trans->remarks, $iconView.' '.$iconEdit);
}
$data['tblPayTrans'] = $payTransHTMLTable->generate();
@ -524,15 +527,20 @@ class PayrollController extends BaseController
if($empPayTrans == null)
{
$empPayTrans = (new EmployeePayrollInfoModel())->getEmpPayInfoXEmpPayTypeByPayGrpId($paytransid, $data['paygroupid'], $payTrans->paytype_id);
$data['showInitBtn'] = true;
$empPayTrans = (new EmployeePayrollInfoModel())->getEmpPayInfoXEmpPayTypeByPayGrpId($data['paygroupid'], $payTrans->paytype_id);
$attSummary = (new AttendanceSummaryModel())->where('paytrans_id', $paytransid)->findAll();
$empPayTransHTMLTable->setHeading('ID', 'Company ID', 'Name', 'Branch', 'Daily Basic', 'Work Days');
foreach($empPayTrans as $trans)
if($empPayTrans != null)
{
$empPayTransHTMLTable->addRow($trans->employee_id, $trans->company_issued_id, $trans->last_name . ', ' . $trans->first_name, $trans->branch_code, $trans->basic_monthly_pay, $trans->att_work_days);
$data['showInitBtn'] = true;
foreach($empPayTrans as $trans)
{
$empAttSum = MiscLib::searchFromAsocArray('employee_id', $trans->employee_id, $attSummary);
$empPayTransHTMLTable->addRow($trans->employee_id, $trans->company_issued_id, $trans->last_name . ', ' . $trans->first_name, $trans->branch_code, $trans->basic_monthly_pay, ($empAttSum === null) ? 0 : $empAttSum->att_work_days);
}
}
$data['tblEmpPayTrans'] = $empPayTransHTMLTable->generate();
@ -563,13 +571,15 @@ class PayrollController extends BaseController
public function empPayTransInitializePayroll($paytransid, $paygroupid, $transtypid)
{
$empPayInfos = (new EmployeePayrollInfoModel())->getEmpPayInfoXEmpPayTypeByPayGrpId($paytransid, $paygroupid, $transtypid);
$empPayInfos = (new EmployeePayrollInfoModel())->getEmpPayInfoXEmpPayTypeByPayGrpId($paygroupid, $transtypid);
$attSummary = (new AttendanceSummaryModel())->where('paytrans_id', $paytransid)->findAll();
$payTrans = (new PayrollTransactionModel())->where('paytrans_id', $paytransid)->first();
$empPayTransactionModel = new EmployeePayTransactionModel();
foreach($empPayInfos as $empPayInfo)
{
$empPayTransaction = new EmployeePayTransaction();
$empAttSum = MiscLib::searchFromAsocArray('employee_id', $empPayInfo->employee_id, $attSummary);
$empPayTransaction->fill(
['paytrans_id' => $paytransid,
@ -598,7 +608,7 @@ class PayrollController extends BaseController
'has_hdmf' => $empPayInfo->has_hdmf,
'has_sss' => $empPayInfo->has_sss,
'has_gsis' => $empPayInfo->has_gsis,
'actual_work_days' => $empPayInfo->att_work_days,
'actual_work_days' => ($empAttSum === null) ? 0 : $empAttSum->att_work_days,
'basic_pay' => 0,
'gross_income' => 0,
'taxable_income' => 0,
@ -752,4 +762,23 @@ class PayrollController extends BaseController
else
return redirect()->back()->with('error', 'Failed to delete income or deduction');
}
public function payrollTransactionsReview($paytransid)
{
$data['paytransid'] = $paytransid;
$payTransModel = new PayrollTransactionModel();
$data['payTrans'] = $payTransModel->getPayTransXPayTypeXPaySchedByPayTransId($paytransid);
$data['totalEmp'] = 0;
$data['totalGross'] = 0;
$data['totalDeduction'] = 0;
$data['totalNet'] = 0;
$data['totalSSSContri'] = 0;
$data['totalPhilhealthContri'] = 0;
$data['totalPagibigContri'] = 0;
$data['totalTax'] = 0;
return view('payroll/paytransactionreview', $data);
}
}

@ -203,8 +203,8 @@ class TKController extends BaseController
fclose($fileHandle);
if($rawAttLogModel->addBatchData($batchRawAttLog, true))
return redirect()->back()->with('message', 'Raw attendance log uploaded.');
if(!empty($batchRawAttLog) && $rawAttLogModel->addBatchData($batchRawAttLog, true))
return redirect()->back()->with('message', 'Raw attendance log uploaded. Please check the file if it matches selected date range.');
else
return redirect()->back()->with('error', 'Error uploading raw attendance log.');
}

@ -88,16 +88,14 @@ class EmployeePayrollInfoModel extends Model
return $builder->get()->getRow();
}
public function getEmpPayInfoXEmpPayTypeByPayGrpId($paytransid, $payGroupId, $payTypeId)
public function getEmpPayInfoXEmpPayTypeByPayGrpId($payGroupId, $payTypeId)
{
$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->join('att_log_summary', 'att_log_summary.employee_id = emp_pay_info.employee_id');
$builder->where(['employee.pay_group_id' => $payGroupId,
'emp_pay_info.paytype_id' => $payTypeId,
'att_log_summary.paytrans_id' => $paytransid,
'emp_pay_info.deleted_at' => null]);
return $builder->get()->getResult();
}

@ -59,4 +59,17 @@ class PayrollTransactionModel extends Model
$data['data']['updated_by'] = auth()->user()->employee_id;
return $data;
}
public function getPayTransXPayTypeXPaySchedByPayTransId($paytransid)
{
$builder = $this->db->table('pay_trans');
$builder->select('*');
$builder->join('pay_type', 'pay_type.paytype_id = pay_trans.paytype_id');
$builder->join('pay_schedule', 'pay_schedule.payschedule_id = pay_trans.payschedule_id');
$builder->where(['pay_trans.paytrans_id' => $paytransid,
'pay_trans.deleted_at' => null]);
$query = $builder->get();
return $query->getRow();
}
}

@ -535,12 +535,8 @@
<?php endif; ?>
</div>
<div class="card-footer">
<?php if($showInitBtn && !($paygroupid == null || $paygroupid == -1)): ?>
<?php if($showInitBtn): ?>
<a class="btn btn-warning" href="/payroll/emppaytransinit/<?= $initURL ?>">Initialize Payroll</a>
<?php elseif($paygroupid == null || $paygroupid == -1): ?>
<button type="button" class="btn btn-warning" disabled>Initialize Payroll</button>
<?php else: ?>
<button type="button" class="btn btn-primary">Generate Payslip</button>
<?php endif; ?>
</div>
</div>

@ -0,0 +1,191 @@
<!-- Extend area where template is defined -->
<?= $this->extend('templates/adminlte/generalcontent') ?>
<!-- .Extend -->
<!-- Title of the page -->
<?= $this->section('title') ?>Pay Trans Review &amp; Approval<?= $this->endSection() ?>
<!-- .Title -->
<!-- CSS of the page -->
<?= $this->section('css') ?>
<?= $this->endSection() ?>
<!-- .CSS -->
<!-- body attribute - class definition -->
<?= $this->section('bodyclass') ?>sidebar-mini<?= $this->endSection() ?>
<!-- .body attribute -->
<!-- Container title -->
<?= $this->section('containertitle') ?>Payroll Transaction<span class="text-sm text-muted"> Review &amp; Approval</span><?= $this->endSection() ?>
<!-- .Container title -->
<!-- Active breadcrumb -->
<?= $this->section('breadcrumbs') ?>
<li class="breadcrumb-item active">Payroll Transaction Review &amp; Approval</li>
<?= $this->endSection() ?>
<!-- .Active breadcrumb -->
<!-- Main content -->
<?= $this->section('main') ?>
<!-- Modal Add Branch -->
<div class="modal fade" id="mdlAddPayTrans">
<div class="modal-dialog">
<div class="modal-content">
<form action="<?= url_to('payroll/addpaytrans') ?>" method="post">
<div class="modal-header">
<h4 class="modal-title" >New Payroll Transaction</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-12">
<p class="lead">Payroll Group Information</p>
<div class="row">
<div class="col-12">
<div class="form-group">
<label>Select Payroll Type</label>
<select class="form-control" name="paytype_id">
<option value="-1">-- Select Payroll Type --</option>
</select>
</div>
<div class="form-group">
<label for="txtNoOfDays">Number of Days</label>
<input class="form-control" type="text" id="txtNoOfDays" name="no_of_days" value="<?= old('no_of_days') ?>" readonly>
</div>
<div class="form-group">
<label for="txtRemarks">Remarks</label>
<textarea class="form-control" rows="3" placeholder="Enter remarks here..." name="remarks" id="txtRemarks"><?= old('remarks') ?></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Save changes</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</form>
</div>
</div>
</div>
<?php if($payTrans->is_open): ?>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">Information of Payroll Transaction</h3>
</div>
<div class="card-body">
<p>Payroll Period: <?= $payTrans->payroll_from ?> to <?= $payTrans->payroll_to ?> [Total Days: <?= $payTrans->no_of_days ?>]</p>
<p>Payroll Type: <?= $payTrans->paytype_name ?></p>
<p>Schedule: <?= $payTrans->sched_name ?></p>
<p>Total Employee: <?= $payTrans->total_emp ?></p>
<p>Total Gross: <?= $payTrans->total_gross ?></p>
<p>Status: <?= ($payTrans->is_open) ? 'Open' : 'Closed' ?></p>
<table class="table table-bordered">
<tr>
<th>Total Employee</th>
<th>Total Gross</th>
<th>Total Deduction</th>
<th>Total Net</th>
<th>Total SSS Contribution</th>
<th>Total Philhealth Contribution</th>
<th>Total Pagibig Contribution</th>
<th>Total Tax</th>
</tr>
<tr>
<td><?= $totalEmp ?></td>
<td><?= number_format($totalGross, 2, '.', ',') ?></td>
<td><?= number_format($totalDeduction, 2, '.', ',') ?></td>
<td><?= number_format($totalNet, 2, '.', ',') ?></td>
<td><?= number_format($totalSSSContri, 2, '.', ',') ?></td>
<td><?= number_format($totalPhilhealthContri, 2, '.', ',') ?></td>
<td><?= number_format($totalPagibigContri, 2, '.', ',') ?></td>
<td><?= number_format($totalTax, 2, '.', ',') ?></td>
</tr>
</table>
</div>
<div class="card-footer">
<?php if($payTrans->is_open): ?>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mdlClosePayTrans">Close Payroll Transaction</button>
<?php else: ?>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mdlOpenPayTrans">Open Payroll Transaction</button>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php else: ?>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">Information of Payroll Transaction</h3>
</div>
<div class="card-body">
<p>Payroll Period: <?= $payTrans->payroll_from ?> to <?= $payTrans->payroll_to ?> [Total Days: <?= $payTrans->no_of_days ?>]</p>
<p>Payroll Type: <?= $payTrans->paytype_name ?></p>
<p>Schedule: <?= $payTrans->sched_name ?></p>
<p>Total Employee: <?= $payTrans->total_emp ?></p>
<p>Total Gross: <?= $payTrans->total_gross ?></p>
<p>Status: <?= ($payTrans->is_open) ? 'Open' : 'Closed' ?></p>
<table class="table table-bordered">
<tr>
<th>Total Employee</th>
<th>Total Gross</th>
<th>Total Deduction</th>
<th>Total Net</th>
<th>Total SSS Contribution</th>
<th>Total Philhealth Contribution</th>
<th>Total Pagibig Contribution</th>
<th>Total Tax</th>
</tr>
<tr>
<td><?= $totalEmp ?></td>
<td><?= number_format($totalGross, 2, '.', ',') ?></td>
<td><?= number_format($totalDeduction, 2, '.', ',') ?></td>
<td><?= number_format($totalNet, 2, '.', ',') ?></td>
<td><?= number_format($totalSSSContri, 2, '.', ',') ?></td>
<td><?= number_format($totalPhilhealthContri, 2, '.', ',') ?></td>
<td><?= number_format($totalPagibigContri, 2, '.', ',') ?></td>
<td><?= number_format($totalTax, 2, '.', ',') ?></td>
</tr>
</table>
</div>
<div class="card-footer">
<?php if($payTrans->is_open): ?>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mdlClosePayTrans">Close Payroll Transaction</button>
<?php else: ?>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mdlOpenPayTrans">Open Payroll Transaction</button>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php endif; ?>
<?= $this->endSection() ?>
<!-- .Main content -->
<!-- Javascript -->
<?= $this->section('js') ?>
<script>
$(document).ready(function() {
});
</script>
<?= $this->endSection() ?>
<!-- .Javascript -->
Loading…
Cancel
Save