668 lines
47 KiB
PHP
668 lines
47 KiB
PHP
<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 = '';
|
|
?>
|