Initial commit

This commit is contained in:
Porawit Dongwang
2026-09-16 23:20:08 +07:00
commit 0041668dbb
32577 changed files with 3687927 additions and 0 deletions
@@ -0,0 +1,91 @@
<?php require_once APP_ROOT . '/app/Views/layouts/header.php'; ?>
<div class="flex flex-col md:flex-row md:items-center md:justify-between mb-6 gap-4">
<div>
<h2 class="text-2xl font-bold text-slate-800 dark:text-white">นำเข้าข้อมูลเงินเดือน (Import CSV)</h2>
<p class="text-slate-500 dark:text-slate-400 text-sm mt-1">อัปโหลดไฟล์ CSV เพื่อนำเข้าข้อมูลเงินเดือนของเจ้าหน้าที่</p>
</div>
<a href="#" class="inline-flex items-center justify-center px-4 py-2.5 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 text-slate-700 dark:text-slate-300 text-sm font-medium rounded-xl hover:bg-slate-50 dark:hover:bg-slate-700 transition-colors shadow-sm w-full md:w-auto">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 mr-2"><path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3" /></svg>
ดาวน์โหลด Template
</a>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<div class="lg:col-span-2">
<div class="bg-white dark:bg-slate-800 rounded-2xl shadow-sm border border-slate-100 dark:border-slate-700 p-6">
<form action="<?= BASE_URL ?>/import/upload" method="POST" enctype="multipart/form-data">
<div class="mb-6">
<label for="salary_month_id" class="block text-sm font-semibold text-slate-700 dark:text-slate-300 mb-2">เลือกงวดเงินเดือน</label>
<select id="salary_month_id" name="salary_month_id" required class="block w-full rounded-xl border-0 py-3 px-4 text-slate-900 dark:text-white shadow-sm ring-1 ring-inset ring-slate-300 dark:ring-slate-600 focus:ring-2 focus:ring-sky-500 bg-slate-50 dark:bg-slate-900 sm:text-sm">
<option value="">-- เลือกงวดเงินเดือนที่ต้องการนำเข้า --</option>
<?php foreach ($periods as $period): ?>
<option value="<?= $period['id'] ?>">งวดเดือน <?= $period['month_no'] ?>/<?= $period['year_no'] > 2500 ? $period['year_no'] : $period['year_no'] + 543 ?> (<?= $period['status'] ?>)</option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-6">
<label for="file_type" class="block text-sm font-semibold text-slate-700 dark:text-slate-300 mb-2">รูปแบบไฟล์ (File Format)</label>
<select id="file_type" name="file_type" required class="block w-full rounded-xl border-0 py-3 px-4 text-slate-900 dark:text-white shadow-sm ring-1 ring-inset ring-slate-300 dark:ring-slate-600 focus:ring-2 focus:ring-sky-500 bg-slate-50 dark:bg-slate-900 sm:text-sm">
<option value="csv">ไฟล์ CSV มาตรฐาน (Standard Template)</option>
<option value="cgd_txt">ไฟล์จากกรมบัญชีกลาง (.txt)</option>
</select>
</div>
<div class="mb-6">
<label class="block text-sm font-semibold text-slate-700 dark:text-slate-300 mb-2">อัปโหลดไฟล์</label>
<div class="mt-2 flex justify-center rounded-xl border border-dashed border-slate-300 dark:border-slate-600 px-6 py-10 bg-slate-50 dark:bg-slate-900/50 hover:bg-slate-100 dark:hover:bg-slate-800 transition-colors cursor-pointer" onclick="document.getElementById('csv_file').click()">
<div class="text-center">
<svg class="mx-auto h-12 w-12 text-slate-300 dark:text-slate-600" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd" d="M1.5 6a2.25 2.25 0 012.25-2.25h16.5A2.25 2.25 0 0122.5 6v12a2.25 2.25 0 01-2.25 2.25H3.75A2.25 2.25 0 011.5 18V6zM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0021 18v-1.94l-2.69-2.689a1.5 1.5 0 00-2.12 0l-.88.879.97.97a.75.75 0 11-1.06 1.06l-5.16-5.159a1.5 1.5 0 00-2.12 0L3 16.061zm10.125-7.81a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z" clip-rule="evenodd" />
</svg>
<div class="mt-4 flex text-sm leading-6 text-slate-600 dark:text-slate-400 justify-center">
<label for="csv_file" class="relative cursor-pointer rounded-md bg-transparent font-semibold text-sky-500 focus-within:outline-none focus-within:ring-2 focus-within:ring-sky-600 focus-within:ring-offset-2 hover:text-sky-400">
<span>คลิกเพื่อเลือกไฟล์</span>
<input id="csv_file" name="csv_file" type="file" class="sr-only" accept=".csv, .txt" required onchange="document.getElementById('fileNameDisplay').textContent = this.files[0].name">
</label>
<p class="pl-1">หรือลากไฟล์มาวางที่นี่</p>
</div>
<p class="text-xs leading-5 text-slate-500 dark:text-slate-500 mt-2">รองรับเฉพาะไฟล์ .csv หรือ .txt ตามรูปแบบที่เลือก</p>
<p id="fileNameDisplay" class="mt-3 text-sm font-bold text-slate-700 dark:text-slate-300"></p>
</div>
</div>
</div>
<div class="flex items-center justify-end gap-x-6">
<button type="submit" class="rounded-xl bg-sky-500 px-6 py-3 text-sm font-semibold text-white shadow-sm hover:bg-sky-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-600 transition-colors">
เริ่มนำเข้าข้อมูล
</button>
</div>
</form>
</div>
</div>
<div>
<div class="bg-white dark:bg-slate-800 rounded-2xl shadow-sm border border-slate-100 dark:border-slate-700 p-6">
<h3 class="text-lg font-bold text-slate-800 dark:text-white mb-4 flex items-center">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5 mr-2 text-amber-500"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2.25m0 4.5h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" /></svg>
คำแนะนำในการนำเข้า
</h3>
<ul class="space-y-3 text-sm text-slate-600 dark:text-slate-400">
<li class="flex items-start">
<span class="mr-2 mt-0.5 text-sky-500">•</span>
<span><b>กรณีไฟล์ CSV ปกติ:</b> กรุณาตรวจสอบคอลัมน์ในไฟล์ CSV ให้ตรงกับ Template ของระบบ ชื่อคอลัมน์จะต้องเหมือนกับ รหัสรายรับ และ รหัสรายจ่าย</span>
</li>
<li class="flex items-start">
<span class="mr-2 mt-0.5 text-sky-500">•</span>
<span><b>กรณีไฟล์กรมบัญชีกลาง:</b> ระบบจะใช้อ่านไฟล์ .txt (รหัส TIS-620/Windows-874) โดยอิงตามเลขฟิลด์มาตรฐานของกรมฯ</span>
</li>
<li class="flex items-start">
<span class="mr-2 mt-0.5 text-sky-500">•</span>
<span>หากเกิดข้อผิดพลาด ระบบจะบันทึกเฉพาะรายการที่นำเข้าสำเร็จหรือ Rollback กลับทั้งหมด</span>
</li>
</ul>
</div>
</div>
</div>
<?php require_once APP_ROOT . '/app/Views/layouts/footer.php'; ?>