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,667 @@
<div class="d-flex justify-content-between align-items-center mb-4">
<h1 class="h3 mb-0 text-gray-800">แก้ไขคำขอเดินทางไปราชการ/ประชุม</h1>
<a href="<?= BASE_URL ?>/" class="btn btn-outline-secondary shadow-sm"><i class="fa-solid fa-arrow-left me-1"></i> กลับ</a>
</div>
<div class="card shadow border-0 rounded-4 mb-5">
<div class="card-body p-4 p-md-5">
<form action="<?= BASE_URL ?>/trip/edit" method="POST" id="tripForm">
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>">
<input type="hidden" name="id" value="<?= $trip['id'] ?>">
<!-- ส่วนที่ 1: ข้อมูลหนังสือ -->
<h5 class="fw-bold mb-4 text-primary border-bottom pb-2"><i class="fa-solid fa-file-lines me-2"></i>อ้างถึงหนังสือ</h5>
<div class="row mb-4">
<div class="col-md-5 mb-3 mb-md-0">
<label class="form-label">เลขอ้างอิงหนังสือ</label>
<div class="input-group">
<select class="form-select" id="doc_year" style="max-width: 120px;">
<?php
$currentYearBE = date('Y') + 543;
echo '<option value="'.$currentYearBE.'">ปี '.$currentYearBE.'</option>';
echo '<option value="'.($currentYearBE - 1).'">ปี '.($currentYearBE - 1).'</option>';
?>
</select>
<input type="text" class="form-control" name="doc_number" id="doc_number" value="<?= htmlspecialchars($trip['doc_number'] ?? '') ?>" placeholder="เลขอ้างอิง (เช่น 123)">
<button class="btn btn-outline-primary" type="button" id="btnSearchDoc"><i class="fa-solid fa-magnifying-glass"></i> ค้นหา</button>
</div>
<div class="form-text text-muted small"><i class="fa-solid fa-circle-info"></i> ระบบจะค้นหาเลขอ้างอิงจากปีที่เลือก</div>
</div>
<div class="col-md-4 mb-3 mb-md-0">
<label class="form-label">เลขที่หนังสือ</label>
<input type="text" class="form-control" name="doc_no" id="doc_no" value="<?= htmlspecialchars($trip['doc_no'] ?? '') ?>" placeholder="เช่น ศธ 1234/567">
</div>
<div class="col-md-3">
<label class="form-label">ลงวันที่</label>
<input type="date" class="form-control" name="doc_date" id="doc_date" value="<?= htmlspecialchars($trip['doc_date'] ?? '') ?>">
</div>
</div>
<input type="hidden" name="doc_link" id="doc_link" value="<?= htmlspecialchars($trip['doc_link'] ?? '') ?>">
<!-- ส่วนที่ 2: ข้อมูลการประชุม/ไปราชการ -->
<h5 class="fw-bold mb-4 text-primary border-bottom pb-2 mt-5"><i class="fa-solid fa-briefcase me-2"></i>รายละเอียดการเดินทาง</h5>
<div class="mb-4">
<label class="form-label text-danger">เรื่อง *</label>
<input type="text" class="form-control" name="title" id="title" value="<?= htmlspecialchars($trip['title'] ?? '') ?>" required placeholder="หัวข้อการประชุมหรือเรื่องที่ไปราชการ">
</div>
<div class="row mb-4">
<div class="col-md-4 mb-3 mb-md-0">
<label class="form-label">ประเภทบุคลากร</label>
<select class="form-select" name="personnel_type">
<option value="ข้าราชการ" <?= ($trip['personnel_type'] ?? '') === 'ข้าราชการ' ? 'selected' : '' ?>>ข้าราชการ</option>
<option value="ลูกจ้างประจำ" <?= ($trip['personnel_type'] ?? '') === 'ลูกจ้างประจำ' ? 'selected' : '' ?>>ลูกจ้างประจำ</option>
<option value="พนักงานราชการ" <?= ($trip['personnel_type'] ?? '') === 'พนักงานราชการ' ? 'selected' : '' ?>>พนักงานราชการ</option>
<option value="พนักงานกระทรวงฯ" <?= ($trip['personnel_type'] ?? '') === 'พนักงานกระทรวงฯ' ? 'selected' : '' ?>>พนักงานกระทรวงฯ</option>
<option value="ลูกจ้างชั่วคราว" <?= ($trip['personnel_type'] ?? '') === 'ลูกจ้างชั่วคราว' ? 'selected' : '' ?>>ลูกจ้างชั่วคราว</option>
</select>
</div>
<div class="col-md-4 mb-3 mb-md-0">
<label class="form-label text-danger">วันที่เริ่มต้น *</label>
<input type="date" class="form-control" name="start_date" value="<?= htmlspecialchars($trip['start_date'] ?? '') ?>" required>
</div>
<div class="col-md-4">
<label class="form-label text-danger">วันที่สิ้นสุด *</label>
<input type="date" class="form-control" name="end_date" value="<?= htmlspecialchars($trip['end_date'] ?? '') ?>" required>
</div>
</div>
<div class="row mb-4">
<div class="col-md-6 mb-3 mb-md-0">
<label class="form-label text-danger">สถานที่ *</label>
<input type="text" class="form-control" name="location" list="locationList" value="<?= htmlspecialchars($trip['location'] ?? '') ?>" required placeholder="สถานที่จัดงาน / จังหวัด">
<datalist id="locationList">
<?php foreach($locations as $loc): ?>
<option value="<?= htmlspecialchars($loc) ?>">
<?php endforeach; ?>
</datalist>
</div>
<div class="col-md-6">
<label class="form-label">ผู้จัด</label>
<input type="text" class="form-control" name="organizer" list="organizerList" value="<?= htmlspecialchars($trip['organizer'] ?? '') ?>" placeholder="ระบุหน่วยงานที่จัด">
<datalist id="organizerList">
<?php foreach($organizers as $org): ?>
<option value="<?= htmlspecialchars($org) ?>">
<?php endforeach; ?>
</datalist>
</div>
</div>
<div class="mb-4">
<label class="form-label text-danger">วัตถุประสงค์ (เหตุผลที่ต้องไป) *</label>
<textarea class="form-control" name="objective" rows="2" required placeholder="ระบุเหตุผลและวัตถุประสงค์ในการเดินทาง"><?= htmlspecialchars($trip['objective'] ?? '') ?></textarea>
</div>
<!-- ส่วนที่ 3: กำหนดการเดินทาง (ไป-กลับ) -->
<h5 class="fw-bold mb-4 text-primary border-bottom pb-2 mt-5"><i class="fa-solid fa-route me-2"></i>กำหนดการเดินทาง</h5>
<!-- ขาไป -->
<div class="card bg-light border-0 mb-4">
<div class="card-body">
<h6 class="fw-bold mb-3">โดยเดินทางออกจาก</h6>
<div class="row g-3">
<div class="col-md-3">
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="depart_from" id="df1" value="สำนักงาน" <?= ($trip['depart_from'] ?? '') === 'สำนักงาน' ? 'checked' : '' ?>>
<label class="form-check-label" for="df1">สำนักงาน</label>
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="depart_from" id="df2" value="บ้านพัก" <?= ($trip['depart_from'] ?? '') === 'บ้านพัก' ? 'checked' : '' ?>>
<label class="form-check-label" for="df2">บ้านพัก</label>
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="depart_from" id="df3" value="อื่นๆ" <?= ($trip['depart_from'] ?? '') === 'อื่นๆ' ? 'checked' : '' ?>>
<label class="form-check-label" for="df3">อื่นๆ (ระบุที่อยู่)</label>
</div>
</div>
<div class="col-md-5">
<label class="form-label small">ประเทศไทย เลขที่ / ตำบล</label>
<?php
$dtambon = $trip['depart_address'] ?? '';
$isCustomDTambon = !in_array($dtambon, ['', 'อ่างทอง', 'ลิปะน้อย', 'ตลิ่งงาม', 'หน้าเมือง', 'มะเร็ต', 'บ่อผุด', 'แม่น้ำ']);
?>
<select class="form-select form-select-sm tambon-select" data-target="depart_address">
<option value="" <?= $dtambon == '' ? 'selected' : '' ?>>-- เลือกตำบล --</option>
<option value="อ่างทอง" <?= $dtambon == 'อ่างทอง' ? 'selected' : '' ?>>อ่างทอง</option>
<option value="ลิปะน้อย" <?= $dtambon == 'ลิปะน้อย' ? 'selected' : '' ?>>ลิปะน้อย</option>
<option value="ตลิ่งงาม" <?= $dtambon == 'ตลิ่งงาม' ? 'selected' : '' ?>>ตลิ่งงาม</option>
<option value="หน้าเมือง" <?= $dtambon == 'หน้าเมือง' ? 'selected' : '' ?>>หน้าเมือง</option>
<option value="มะเร็ต" <?= $dtambon == 'มะเร็ต' ? 'selected' : '' ?>>มะเร็ต</option>
<option value="บ่อผุด" <?= $dtambon == 'บ่อผุด' ? 'selected' : '' ?>>บ่อผุด</option>
<option value="แม่น้ำ" <?= $dtambon == 'แม่น้ำ' ? 'selected' : '' ?>>แม่น้ำ</option>
<option value="อื่นๆ" <?= $isCustomDTambon ? 'selected' : '' ?>>อื่นๆ (ระบุเอง)</option>
</select>
<input type="text" class="form-control form-control-sm mt-2 <?= $isCustomDTambon ? '' : 'd-none' ?>" name="depart_address" id="depart_address" value="<?= htmlspecialchars($dtambon) ?>" placeholder="ระบุที่อยู่ / ตำบลที่ต้องการ">
</div>
<div class="col-md-4">
<label class="form-label small">วันที่และเวลาออกเดินทาง</label>
<?php
$dt = $trip['depart_datetime'] ?? '';
if ($dt) {
$dt = date('Y-m-d\TH:i', strtotime($dt));
}
?>
<input type="datetime-local" class="form-control form-control-sm" name="depart_datetime" value="<?= $dt ?>">
</div>
</div>
</div>
</div>
<!-- ขากลับ -->
<div class="card bg-light border-0 mb-4">
<div class="card-body">
<h6 class="fw-bold mb-3">และกลับถึง</h6>
<div class="row g-3">
<div class="col-md-3">
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="arrive_at" id="ar1" value="สำนักงาน" <?= ($trip['arrive_at'] ?? '') === 'สำนักงาน' ? 'checked' : '' ?>>
<label class="form-check-label" for="ar1">สำนักงาน</label>
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="arrive_at" id="ar2" value="บ้านพัก" <?= ($trip['arrive_at'] ?? '') === 'บ้านพัก' ? 'checked' : '' ?>>
<label class="form-check-label" for="ar2">บ้านพัก</label>
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="arrive_at" id="ar3" value="อื่นๆ" <?= ($trip['arrive_at'] ?? '') === 'อื่นๆ' ? 'checked' : '' ?>>
<label class="form-check-label" for="ar3">อื่นๆ (ระบุที่อยู่)</label>
</div>
</div>
<div class="col-md-5">
<label class="form-label small">ประเทศไทย เลขที่ / ตำบล</label>
<?php
$atambon = $trip['arrive_address'] ?? '';
$isCustomATambon = !in_array($atambon, ['', 'อ่างทอง', 'ลิปะน้อย', 'ตลิ่งงาม', 'หน้าเมือง', 'มะเร็ต', 'บ่อผุด', 'แม่น้ำ']);
?>
<select class="form-select form-select-sm tambon-select" data-target="arrive_address">
<option value="" <?= $atambon == '' ? 'selected' : '' ?>>-- เลือกตำบล --</option>
<option value="อ่างทอง" <?= $atambon == 'อ่างทอง' ? 'selected' : '' ?>>อ่างทอง</option>
<option value="ลิปะน้อย" <?= $atambon == 'ลิปะน้อย' ? 'selected' : '' ?>>ลิปะน้อย</option>
<option value="ตลิ่งงาม" <?= $atambon == 'ตลิ่งงาม' ? 'selected' : '' ?>>ตลิ่งงาม</option>
<option value="หน้าเมือง" <?= $atambon == 'หน้าเมือง' ? 'selected' : '' ?>>หน้าเมือง</option>
<option value="มะเร็ต" <?= $atambon == 'มะเร็ต' ? 'selected' : '' ?>>มะเร็ต</option>
<option value="บ่อผุด" <?= $atambon == 'บ่อผุด' ? 'selected' : '' ?>>บ่อผุด</option>
<option value="แม่น้ำ" <?= $atambon == 'แม่น้ำ' ? 'selected' : '' ?>>แม่น้ำ</option>
<option value="อื่นๆ" <?= $isCustomATambon ? 'selected' : '' ?>>อื่นๆ (ระบุเอง)</option>
</select>
<input type="text" class="form-control form-control-sm mt-2 <?= $isCustomATambon ? '' : 'd-none' ?>" name="arrive_address" id="arrive_address" value="<?= htmlspecialchars($atambon) ?>" placeholder="ระบุที่อยู่ / ตำบลที่ต้องการ">
</div>
<div class="col-md-4">
<label class="form-label small">วันที่และเวลากลับถึง</label>
<?php
$at = $trip['arrive_datetime'] ?? '';
if ($at) {
$at = date('Y-m-d\TH:i', strtotime($at));
}
?>
<input type="datetime-local" class="form-control form-control-sm" name="arrive_datetime" value="<?= $at ?>">
</div>
</div>
</div>
</div>
<!-- ส่วนที่ 4: พาหนะและค่าใช้จ่าย -->
<h5 class="fw-bold mb-4 text-primary border-bottom pb-2 mt-5"><i class="fa-solid fa-car me-2"></i>พาหนะ และ แหล่งงบประมาณ</h5>
<div class="row mb-4">
<div class="col-md-6 mb-3 mb-md-0">
<label class="form-label">โดยสารพาหนะ</label>
<select class="form-select" name="vehicle_type">
<option value="">-- ระบุพาหนะ --</option>
<option value="เครื่องบิน" <?= ($trip['vehicle_type'] ?? '') === 'เครื่องบิน' ? 'selected' : '' ?>>เครื่องบิน</option>
<option value="รถยนต์ของทางราชการ" <?= ($trip['vehicle_type'] ?? '') === 'รถยนต์ของทางราชการ' ? 'selected' : '' ?>>รถยนต์ของทางราชการ</option>
<option value="รถโดยสารประจำทาง" <?= ($trip['vehicle_type'] ?? '') === 'รถโดยสารประจำทาง' ? 'selected' : '' ?>>รถโดยสารประจำทาง</option>
<option value="พาหนะส่วนตัว" <?= ($trip['vehicle_type'] ?? '') === 'พาหนะส่วนตัว' ? 'selected' : '' ?>>พาหนะส่วนตัว</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label">ทะเบียนรถ (กรณีรถส่วนตัว/รถราชการ)</label>
<input type="text" class="form-control" name="vehicle_plate" value="<?= htmlspecialchars($trip['vehicle_plate'] ?? '') ?>" placeholder="เช่น กข 1234 สมุย">
</div>
</div>
<?php
$budgetSource = $trip['budget_source'] ?? '';
$orgSupport = $trip['organizer_support_amount'] ?? '0.00';
$budgetType = $trip['budget_type'] ?? 'lump_sum';
$budgetLump = $trip['budget'] ?? '0.00';
$accItems = json_decode($trip['expense_accommodations'] ?? '[]', true) ?: [];
$alwItems = json_decode($trip['expense_allowances'] ?? '[]', true) ?: [];
$expTransport = $trip['expense_transport'] ?? '0.00';
$expRegistration = $trip['expense_registration'] ?? '0.00';
?>
<div class="card bg-light border-0 mb-5">
<div class="card-body">
<h6 class="fw-bold mb-3">รายละเอียดการเบิกจ่าย</h6>
<div class="row mb-4">
<div class="col-md-5 mb-3 mb-md-0">
<label class="form-label">ขอเบิกค่าใช้จ่ายในการเดินทางจาก</label>
<select class="form-select" name="budget_source" id="budget_source">
<option value="เงินบำรุง รพ." <?= $budgetSource === 'เงินบำรุง รพ.' ? 'selected' : '' ?>>เงินบำรุง รพ.</option>
<option value="ผู้จัดสนับสนุนทั้งหมด" <?= $budgetSource === 'ผู้จัดสนับสนุนทั้งหมด' ? 'selected' : '' ?>>ผู้จัดสนับสนุนทั้งหมด (ไม่ขอเบิก)</option>
<option value="ผู้จัดสนับสนุนบางส่วน" <?= $budgetSource === 'ผู้จัดสนับสนุนบางส่วน' ? 'selected' : '' ?>>ผู้จัดสนับสนุนบางส่วน</option>
</select>
</div>
<div class="col-md-4 mb-3 mb-md-0 <?= $budgetSource === 'ผู้จัดสนับสนุนบางส่วน' ? '' : 'd-none' ?>" id="organizer_support_container">
<label class="form-label text-danger">ระบุจำนวนเงินที่สนับสนุน (บาท) *</label>
<input type="number" step="0.01" min="0" class="form-control" name="organizer_support_amount" id="organizer_support_amount" value="<?= htmlspecialchars($orgSupport) ?>">
</div>
<div class="col-md-3">
<label class="form-label">รายละเอียดเพิ่มเติม (ถ้ามี)</label>
<input type="text" class="form-control" name="budget_remark" value="<?= htmlspecialchars($trip['budget_remark'] ?? '') ?>" placeholder="เช่น เบิกเฉพาะค่าที่พัก">
</div>
</div>
<div id="expense_section" class="<?= $budgetSource === 'ผู้จัดสนับสนุนทั้งหมด' ? 'd-none' : '' ?>">
<h6 class="fw-bold mb-3 border-top pt-3">รูปแบบการประมาณการค่าใช้จ่าย</h6>
<div class="mb-3">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="budget_type" id="budget_type_lump" value="lump_sum" <?= $budgetType !== 'detailed' ? 'checked' : '' ?>>
<label class="form-check-label" for="budget_type_lump">แบบประมาณการรวม (กรอกแค่ยอดรวม)</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="budget_type" id="budget_type_detail" value="detailed" <?= $budgetType === 'detailed' ? 'checked' : '' ?>>
<label class="form-check-label" for="budget_type_detail">แบบระบุรายละเอียด</label>
</div>
</div>
<!-- แบบประมาณการรวม -->
<div id="lump_sum_container" class="mb-3 <?= $budgetType === 'detailed' ? 'd-none' : '' ?>">
<label class="form-label">ประมาณการค่าใช้จ่ายรวม (บาท)</label>
<div class="input-group" style="max-width: 300px;">
<span class="input-group-text">฿</span>
<input type="number" step="0.01" min="0" class="form-control calc-total" name="budget" id="budget_lump_sum" value="<?= htmlspecialchars($budgetLump) ?>">
</div>
</div>
<!-- แบบระบุรายละเอียด -->
<div id="detailed_expense_container" class="<?= $budgetType === 'detailed' ? '' : 'd-none' ?>">
<div class="row">
<!-- ค่าที่พัก -->
<div class="col-12 mb-3">
<div class="d-flex justify-content-between align-items-center mb-2">
<label class="form-label mb-0 fw-bold"><i class="fa-solid fa-bed me-1"></i> ค่าที่พัก</label>
<button type="button" class="btn btn-sm btn-outline-primary" id="add_accommodation"><i class="fa-solid fa-plus"></i> เพิ่มที่พัก</button>
</div>
<div id="accommodations_list">
<?php if(empty($accItems)): ?>
<div class="row g-2 align-items-center mb-2 accommodation-item">
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">จำนวนคืน</span>
<input type="number" min="0" step="1" name="acc_days[]" class="form-control acc-days calc-trigger" placeholder="0">
</div>
</div>
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">ราคา/คืน</span>
<input type="number" min="0" step="0.01" name="acc_prices[]" class="form-control acc-prices calc-trigger" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<div class="col-md-2 text-end">
<button type="button" class="btn btn-sm btn-outline-danger btn-remove-row" disabled><i class="fa-solid fa-trash"></i></button>
</div>
</div>
<?php else: ?>
<?php foreach($accItems as $index => $acc): ?>
<div class="row g-2 align-items-center mb-2 accommodation-item">
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">จำนวนคืน</span>
<input type="number" min="0" step="1" name="acc_days[]" class="form-control acc-days calc-trigger" value="<?= htmlspecialchars($acc['days']) ?>" placeholder="0">
</div>
</div>
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">ราคา/คืน</span>
<input type="number" min="0" step="0.01" name="acc_prices[]" class="form-control acc-prices calc-trigger" value="<?= htmlspecialchars($acc['price']) ?>" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<div class="col-md-2 text-end">
<button type="button" class="btn btn-sm btn-outline-danger btn-remove-row" <?= count($accItems) > 1 ? '' : 'disabled' ?>><i class="fa-solid fa-trash"></i></button>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
<!-- ค่าเบี้ยเลี้ยง -->
<div class="col-12 mb-3">
<div class="d-flex justify-content-between align-items-center mb-2">
<label class="form-label mb-0 fw-bold"><i class="fa-solid fa-utensils me-1"></i> ค่าเบี้ยเลี้ยง</label>
<button type="button" class="btn btn-sm btn-outline-primary" id="add_allowance"><i class="fa-solid fa-plus"></i> เพิ่มเบี้ยเลี้ยง</button>
</div>
<div id="allowances_list">
<?php if(empty($alwItems)): ?>
<div class="row g-2 align-items-center mb-2 allowance-item">
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">จำนวนวัน</span>
<input type="number" min="0" step="0.5" name="alw_days[]" class="form-control alw-days calc-trigger" placeholder="0">
</div>
</div>
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">อัตรา/วัน</span>
<input type="number" min="0" step="0.01" name="alw_prices[]" class="form-control alw-prices calc-trigger" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<div class="col-md-2 text-end">
<button type="button" class="btn btn-sm btn-outline-danger btn-remove-row" disabled><i class="fa-solid fa-trash"></i></button>
</div>
</div>
<?php else: ?>
<?php foreach($alwItems as $index => $alw): ?>
<div class="row g-2 align-items-center mb-2 allowance-item">
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">จำนวนวัน</span>
<input type="number" min="0" step="0.5" name="alw_days[]" class="form-control alw-days calc-trigger" value="<?= htmlspecialchars($alw['days']) ?>" placeholder="0">
</div>
</div>
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">อัตรา/วัน</span>
<input type="number" min="0" step="0.01" name="alw_prices[]" class="form-control alw-prices calc-trigger" value="<?= htmlspecialchars($alw['price']) ?>" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<div class="col-md-2 text-end">
<button type="button" class="btn btn-sm btn-outline-danger btn-remove-row" <?= count($alwItems) > 1 ? '' : 'disabled' ?>><i class="fa-solid fa-trash"></i></button>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
<!-- ค่าโดยสารและค่าลงทะเบียน -->
<div class="col-md-6 mb-3">
<label class="form-label fw-bold"><i class="fa-solid fa-ticket me-1"></i> ค่าโดยสารทั้งหมด</label>
<div class="input-group input-group-sm">
<input type="number" min="0" step="0.01" name="expense_transport" id="expense_transport" class="form-control calc-trigger" value="<?= htmlspecialchars($expTransport) ?>" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<div class="col-md-6 mb-3">
<label class="form-label fw-bold"><i class="fa-solid fa-address-card me-1"></i> ค่าลงทะเบียน</label>
<div class="input-group input-group-sm">
<input type="number" min="0" step="0.01" name="expense_registration" id="expense_registration" class="form-control calc-trigger" value="<?= htmlspecialchars($expRegistration) ?>" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<!-- สรุปยอดรวม -->
<div class="col-12 mt-3 pt-3 border-top">
<div class="d-flex justify-content-end align-items-center">
<h5 class="mb-0 me-3">รวมเป็นเงินทั้งสิ้น:</h5>
<h4 class="mb-0 text-primary fw-bold" id="detailed_total_display">0.00</h4>
<span class="ms-2">บาท</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-between border-top pt-4">
<button type="button" class="btn btn-danger px-4 shadow" id="btnDeleteTrip"><i class="fa-solid fa-trash me-1"></i> ลบคำขอนี้</button>
<button type="submit" class="btn btn-primary px-5 shadow"><i class="fa-solid fa-save me-1"></i> บันทึกการแก้ไข</button>
</div>
</form>
</div>
</div>
<?php
$extraScripts = '
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
function parseDateToInputFormat(dateStr) {
if (!dateStr) return "";
if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) return dateStr;
var parts = dateStr.split(/[\/\-]/);
if (parts.length === 3) {
var d = parseInt(parts[0], 10);
var m = parseInt(parts[1], 10);
var y = parseInt(parts[2], 10);
if (y > 2400) y -= 543;
else if (y > 50 && y < 100) y = (y + 2500) - 543;
if (d > 31) {
var temp = d;
d = y;
y = temp;
}
var mm = m < 10 ? "0" + m : m;
var dd = d < 10 ? "0" + d : d;
return y + "-" + mm + "-" + dd;
}
return "";
}
$(document).ready(function() {
$(".tambon-select").on("change", function() {
var targetId = $(this).data("target");
var val = $(this).val();
if (val === "อื่นๆ") {
$("#" + targetId).removeClass("d-none").focus();
if ($("#" + targetId).val() === "อื่นๆ") $("#" + targetId).val("");
} else {
$("#" + targetId).addClass("d-none").val(val);
}
});
$("#btnSearchDoc").on("click", function() {
var q = $("#doc_number").val().trim();
var year = $("#doc_year").val();
if (!q) {
Swal.fire("กรุณาระบุ", "โปรดกรอกเลขที่หนังสือที่ต้องการค้นหา", "warning");
return;
}
var btn = $(this);
var originalHtml = btn.html();
btn.html(\'<i class="fa-solid fa-spinner fa-spin"></i>\').prop("disabled", true);
$.ajax({
url: "' . BASE_URL . '/trip/search-docs",
type: "GET",
dataType: "json",
data: { q: q, year: year },
success: function(res) {
btn.html(originalHtml).prop("disabled", false);
if (res.results && res.results.length > 0) {
var data = res.results[0];
if (data.title) {
$("#title").val(data.title);
$("#title").addClass("is-valid");
setTimeout(() => $("#title").removeClass("is-valid"), 2000);
}
if (data.doc_no) {
$("#doc_no").val(data.doc_no);
$("#doc_no").addClass("is-valid");
setTimeout(() => $("#doc_no").removeClass("is-valid"), 2000);
}
if (data.doc_link) {
$("#doc_link").val(data.doc_link);
}
if (data.doc_date) {
var parsedDate = parseDateToInputFormat(data.doc_date);
if (parsedDate) {
$("#doc_date").val(parsedDate).addClass("is-valid");
setTimeout(() => $("#doc_date").removeClass("is-valid"), 2000);
}
}
Swal.fire({
icon: "success",
title: "ดึงข้อมูลสำเร็จ",
text: "อัปเดตข้อมูลจากระบบส่วนกลางเรียบร้อย",
timer: 1500,
showConfirmButton: false
});
} else {
Swal.fire("ไม่พบข้อมูล", "ไม่พบเลขที่หนังสือ \'" + q + "\' ในระบบ", "error");
}
},
error: function() {
btn.html(originalHtml).prop("disabled", false);
Swal.fire("เกิดข้อผิดพลาด", "ไม่สามารถเชื่อมต่อระบบค้นหาได้", "error");
}
});
});
$("#btnDeleteTrip").on("click", function() {
Swal.fire({
title: "ยืนยันการลบ?",
text: "คุณต้องการลบคำขอเดินทางนี้ใช่หรือไม่? การกระทำนี้ไม่สามารถกู้คืนได้",
icon: "warning",
showCancelButton: true,
confirmButtonColor: "#d33",
cancelButtonColor: "#6c757d",
confirmButtonText: "ใช่, ลบเลย!",
cancelButtonText: "ยกเลิก"
}).then((result) => {
if (result.isConfirmed) {
var form = $("<form action=\'" . BASE_URL . "/trip/delete\' method=\'POST\'>" +
"<input type=\'hidden\' name=\'csrf_token\' value=\'" . $csrf_token . "\'>" +
"<input type=\'hidden\' name=\'id\' value=\'" . $trip['id'] . "\'>" +
"</form>");
$("body").append(form);
form.submit();
}
});
});
// --- Expense Logic ---
function toggleExpenseUI() {
var budgetSource = $("#budget_source").val();
if (budgetSource === "ผู้จัดสนับสนุนบางส่วน") {
$("#organizer_support_container").removeClass("d-none");
} else {
$("#organizer_support_container").addClass("d-none");
$("#organizer_support_amount").val("0.00");
}
if (budgetSource === "ผู้จัดสนับสนุนทั้งหมด") {
$("#expense_section").addClass("d-none");
$("#budget_lump_sum").val("0.00");
} else {
$("#expense_section").removeClass("d-none");
var budgetType = $("input[name=\'budget_type\']:checked").val();
if (budgetType === "detailed") {
$("#lump_sum_container").addClass("d-none");
$("#detailed_expense_container").removeClass("d-none");
calculateDetailedTotal();
} else {
$("#lump_sum_container").removeClass("d-none");
$("#detailed_expense_container").addClass("d-none");
}
}
}
$("#budget_source, input[name=\'budget_type\']").on("change", toggleExpenseUI);
// Add Row functions
$("#add_accommodation").click(function() {
var template = `
<div class="row g-2 align-items-center mb-2 accommodation-item">
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">จำนวนคืน</span>
<input type="number" min="0" step="1" name="acc_days[]" class="form-control acc-days calc-trigger" placeholder="0">
</div>
</div>
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">ราคา/คืน</span>
<input type="number" min="0" step="0.01" name="acc_prices[]" class="form-control acc-prices calc-trigger" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<div class="col-md-2 text-end">
<button type="button" class="btn btn-sm btn-outline-danger btn-remove-row"><i class="fa-solid fa-trash"></i></button>
</div>
</div>`;
$("#accommodations_list").append(template);
updateRemoveButtons("#accommodations_list");
});
$("#add_allowance").click(function() {
var template = `
<div class="row g-2 align-items-center mb-2 allowance-item">
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">จำนวนวัน</span>
<input type="number" min="0" step="0.5" name="alw_days[]" class="form-control alw-days calc-trigger" placeholder="0">
</div>
</div>
<div class="col-md-5">
<div class="input-group input-group-sm">
<span class="input-group-text">อัตรา/วัน</span>
<input type="number" min="0" step="0.01" name="alw_prices[]" class="form-control alw-prices calc-trigger" placeholder="0.00">
<span class="input-group-text">บาท</span>
</div>
</div>
<div class="col-md-2 text-end">
<button type="button" class="btn btn-sm btn-outline-danger btn-remove-row"><i class="fa-solid fa-trash"></i></button>
</div>
</div>`;
$("#allowances_list").append(template);
updateRemoveButtons("#allowances_list");
});
function updateRemoveButtons(listId) {
var items = $(listId).find(".btn-remove-row");
if (items.length > 1) {
items.prop("disabled", false);
} else {
items.prop("disabled", true);
}
}
$(document).on("click", ".btn-remove-row", function() {
var list = $(this).closest("div[id$=\'_list\']");
$(this).closest(".row").remove();
updateRemoveButtons("#" + list.attr("id"));
calculateDetailedTotal();
});
function calculateDetailedTotal() {
var total = 0;
$(".accommodation-item").each(function() {
var days = parseFloat($(this).find(".acc-days").val()) || 0;
var price = parseFloat($(this).find(".acc-prices").val()) || 0;
total += (days * price);
});
$(".allowance-item").each(function() {
var days = parseFloat($(this).find(".alw-days").val()) || 0;
var price = parseFloat($(this).find(".alw-prices").val()) || 0;
total += (days * price);
});
var transport = parseFloat($("#expense_transport").val()) || 0;
total += transport;
var registration = parseFloat($("#expense_registration").val()) || 0;
total += registration;
$("#detailed_total_display").text(total.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}));
$("#budget_lump_sum").val(total.toFixed(2));
}
$(document).on("input", ".calc-trigger", calculateDetailedTotal);
// Initial setup
toggleExpenseUI();
if ($("input[name=\'budget_type\']:checked").val() === "detailed") {
calculateDetailedTotal();
}
});
</script>
';
$extraStyles = '';
?>