163 lines
6.0 KiB
PHP
163 lines
6.0 KiB
PHP
<?php
|
|
namespace app\Controllers;
|
|
|
|
use app\Models\PayrollModel;
|
|
use app\Models\HrPersonModel;
|
|
use app\Models\UserLogModel;
|
|
use app\Models\SystemSettingModel;
|
|
|
|
class KioskController extends Controller {
|
|
|
|
public function index() {
|
|
// Load the Kiosk UI
|
|
$this->view('kiosk/index');
|
|
}
|
|
|
|
public function search() {
|
|
header('Content-Type: application/json');
|
|
|
|
$nationalId = $_POST['national_id'] ?? null;
|
|
if (!$nationalId || strlen($nationalId) !== 13) {
|
|
echo json_encode(['status' => 'error', 'message' => 'รหัสบัตรประชาชนไม่ถูกต้อง']);
|
|
return;
|
|
}
|
|
|
|
$payrollModel = new PayrollModel();
|
|
$hrModel = new HrPersonModel();
|
|
|
|
// Check if person exists in HR DB
|
|
$person = $hrModel->getPersonByNationalId($nationalId);
|
|
|
|
$slips = $payrollModel->getAvailableSlipsByNationalId($nationalId);
|
|
$taxes = $payrollModel->getAvailableTaxesByNationalId($nationalId);
|
|
|
|
if (empty($slips) && empty($taxes)) {
|
|
echo json_encode(['status' => 'error', 'message' => 'ไม่พบข้อมูลเงินเดือนหรือใบเสียภาษีสำหรับรหัสบัตรประชาชนนี้']);
|
|
return;
|
|
}
|
|
|
|
$personName = $person ? trim($person['hr_fname'] . ' ' . $person['hr_lname']) : 'ไม่ทราบชื่อ';
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'data' => [
|
|
'name' => $personName,
|
|
'slips' => $slips,
|
|
'taxes' => $taxes
|
|
]
|
|
]);
|
|
}
|
|
|
|
public function printSlip() {
|
|
$nationalId = $_GET['national_id'] ?? null;
|
|
$month = $_GET['month'] ?? null;
|
|
$year = $_GET['year'] ?? null;
|
|
|
|
if (!$nationalId || !$month || !$year) {
|
|
die('ข้อมูลไม่ครบถ้วน');
|
|
}
|
|
|
|
$payrollModel = new PayrollModel();
|
|
$salary = $payrollModel->getSalaryByNationalId($nationalId, $month, $year);
|
|
|
|
if (!$salary) {
|
|
die('ไม่พบข้อมูลเงินเดือนของบุคคลนี้ในงวดที่เลือก');
|
|
}
|
|
|
|
// Log the action (null user_id)
|
|
$logModel = new UserLogModel();
|
|
$logModel->logAction(null, 'KIOSK_PRINT_SLIP', "ตู้ Kiosk: พิมพ์สลิปเงินเดือน งวด $month/$year สำหรับบัตรประชาชน $nationalId");
|
|
|
|
$incomes = $payrollModel->getEmployeeIncomes($salary['id']);
|
|
$deductions = $payrollModel->getEmployeeDeductions($salary['id']);
|
|
|
|
$hrModel = new HrPersonModel();
|
|
$hrData = $hrModel->getPersonByNationalId($nationalId);
|
|
if (!$hrData) {
|
|
$hrData = [];
|
|
}
|
|
|
|
require_once APP_ROOT . '/app/Views/reports/slip.php';
|
|
}
|
|
|
|
public function printSlipBulk() {
|
|
$nationalId = $_POST['national_id'] ?? null;
|
|
$periods = $_POST['periods'] ?? []; // format: 'MM-YYYY'
|
|
|
|
if (!$nationalId || empty($periods)) {
|
|
die('ข้อมูลไม่ครบถ้วน');
|
|
}
|
|
|
|
$payrollModel = new PayrollModel();
|
|
$hrModel = new HrPersonModel();
|
|
|
|
$hrData = $hrModel->getPersonByNationalId($nationalId);
|
|
if (!$hrData) {
|
|
$hrData = [];
|
|
}
|
|
$bankProfile = [
|
|
'bank_account_no' => $hrData['HR_BANK_ACCOUNT'] ?? '',
|
|
'bank_name' => '' // Not provided in HR data directly without another query
|
|
];
|
|
|
|
$bulkData = [];
|
|
foreach ($periods as $period) {
|
|
list($month, $year) = explode('-', $period);
|
|
$salary = $payrollModel->getSalaryByNationalId($nationalId, $month, $year);
|
|
if ($salary) {
|
|
$bulkData[] = [
|
|
'salary' => $salary,
|
|
'hrData' => $hrData,
|
|
'bankProfile' => $bankProfile,
|
|
'incomes' => $payrollModel->getEmployeeIncomes($salary['id']),
|
|
'deductions' => $payrollModel->getEmployeeDeductions($salary['id']),
|
|
'month' => $month,
|
|
'year' => $year
|
|
];
|
|
}
|
|
}
|
|
|
|
if (empty($bulkData)) {
|
|
die('ไม่พบข้อมูลเงินเดือนสำหรับช่วงที่เลือก');
|
|
}
|
|
|
|
// Log the action
|
|
$logModel = new UserLogModel();
|
|
$logModel->logAction(null, 'KIOSK_PRINT_SLIP', "ตู้ Kiosk: พิมพ์สลิปเงินเดือนแบบกลุ่ม (" . count($periods) . " เดือน) สำหรับบัตรประชาชน $nationalId");
|
|
|
|
require_once APP_ROOT . '/app/Views/kiosk/slip_bulk.php';
|
|
}
|
|
|
|
public function printTax() {
|
|
$nationalId = $_GET['national_id'] ?? null;
|
|
$year = $_GET['year'] ?? null;
|
|
|
|
if (!$nationalId || !$year) {
|
|
die('ข้อมูลไม่ครบถ้วน');
|
|
}
|
|
|
|
$payrollModel = new PayrollModel();
|
|
$yearlySummary = $payrollModel->getYearlyTaxSummary($nationalId, $year);
|
|
|
|
if (!$yearlySummary || $yearlySummary['total_income'] == 0) {
|
|
die('ไม่พบข้อมูลรายได้ในปีที่เลือก');
|
|
}
|
|
|
|
// Log the action
|
|
$logModel = new UserLogModel();
|
|
$logModel->logAction(null, 'KIOSK_PRINT_TAX', "ตู้ Kiosk: พิมพ์ใบ 50 ทวิ ปี $year สำหรับบัตรประชาชน $nationalId");
|
|
|
|
$hrModel = new HrPersonModel();
|
|
$hrData = $hrModel->getPersonByNationalId($nationalId);
|
|
if (!$hrData) {
|
|
$hrData = [];
|
|
}
|
|
|
|
$settingModel = new SystemSettingModel();
|
|
$orgTaxId = $settingModel->getSetting('org_tax_id', '');
|
|
|
|
require_once APP_ROOT . '/app/Views/reports/tax.php';
|
|
}
|
|
}
|
|
?>
|