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,592 @@
<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/create" method="POST" id="tripForm">
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>">
<!-- ส่วนที่ 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" 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" 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">
</div>
</div>
<input type="hidden" name="doc_link" id="doc_link" value="">
<!-- ส่วนที่ 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" 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="ข้าราชการ">ข้าราชการ</option>
<option value="ลูกจ้างประจำ">ลูกจ้างประจำ</option>
<option value="พนักงานราชการ">พนักงานราชการ</option>
<option value="พนักงานกระทรวงฯ">พนักงานกระทรวงฯ</option>
<option value="ลูกจ้างชั่วคราว">ลูกจ้างชั่วคราว</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" required>
</div>
<div class="col-md-4">
<label class="form-label text-danger">วันที่สิ้นสุด *</label>
<input type="date" class="form-control" name="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" 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" 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="ระบุเหตุผลและวัตถุประสงค์ในการเดินทาง"></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="สำนักงาน" 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="บ้านพัก">
<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="อื่นๆ">
<label class="form-check-label" for="df3">อื่นๆ (ระบุที่อยู่)</label>
</div>
</div>
<div class="col-md-5">
<label class="form-label small">ประเทศไทย เลขที่ / ตำบล</label>
<select class="form-select form-select-sm tambon-select" data-target="depart_address">
<option value="">-- เลือกตำบล --</option>
<option value="อ่างทอง">อ่างทอง</option>
<option value="ลิปะน้อย">ลิปะน้อย</option>
<option value="ตลิ่งงาม">ตลิ่งงาม</option>
<option value="หน้าเมือง">หน้าเมือง</option>
<option value="มะเร็ต">มะเร็ต</option>
<option value="บ่อผุด">บ่อผุด</option>
<option value="แม่น้ำ">แม่น้ำ</option>
<option value="อื่นๆ">อื่นๆ (ระบุเอง)</option>
</select>
<input type="text" class="form-control form-control-sm mt-2 d-none" name="depart_address" id="depart_address" placeholder="ระบุที่อยู่ / ตำบลที่ต้องการ">
</div>
<div class="col-md-4">
<label class="form-label small">วันที่และเวลาออกเดินทาง</label>
<input type="datetime-local" class="form-control form-control-sm" name="depart_datetime">
</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="สำนักงาน" 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="บ้านพัก">
<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="อื่นๆ">
<label class="form-check-label" for="ar3">อื่นๆ (ระบุที่อยู่)</label>
</div>
</div>
<div class="col-md-5">
<label class="form-label small">ประเทศไทย เลขที่ / ตำบล</label>
<select class="form-select form-select-sm tambon-select" data-target="arrive_address">
<option value="">-- เลือกตำบล --</option>
<option value="อ่างทอง">อ่างทอง</option>
<option value="ลิปะน้อย">ลิปะน้อย</option>
<option value="ตลิ่งงาม">ตลิ่งงาม</option>
<option value="หน้าเมือง">หน้าเมือง</option>
<option value="มะเร็ต">มะเร็ต</option>
<option value="บ่อผุด">บ่อผุด</option>
<option value="แม่น้ำ">แม่น้ำ</option>
<option value="อื่นๆ">อื่นๆ (ระบุเอง)</option>
</select>
<input type="text" class="form-control form-control-sm mt-2 d-none" name="arrive_address" id="arrive_address" placeholder="ระบุที่อยู่ / ตำบลที่ต้องการ">
</div>
<div class="col-md-4">
<label class="form-label small">วันที่และเวลากลับถึง</label>
<input type="datetime-local" class="form-control form-control-sm" name="arrive_datetime">
</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="เครื่องบิน">เครื่องบิน</option>
<option value="รถยนต์ของทางราชการ">รถยนต์ของทางราชการ</option>
<option value="รถโดยสารประจำทาง">รถโดยสารประจำทาง</option>
<option value="พาหนะส่วนตัว">พาหนะส่วนตัว</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label">ทะเบียนรถ (กรณีรถส่วนตัว/รถราชการ)</label>
<input type="text" class="form-control" name="vehicle_plate" placeholder="เช่น กข 1234 สมุย">
</div>
</div>
<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="เงินบำรุง รพ.">เงินบำรุง รพ.</option>
<option value="ผู้จัดสนับสนุนทั้งหมด">ผู้จัดสนับสนุนทั้งหมด (ไม่ขอเบิก)</option>
<option value="ผู้จัดสนับสนุนบางส่วน">ผู้จัดสนับสนุนบางส่วน</option>
</select>
</div>
<div class="col-md-4 mb-3 mb-md-0 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="0.00">
</div>
<div class="col-md-3">
<label class="form-label">รายละเอียดเพิ่มเติม (ถ้ามี)</label>
<input type="text" class="form-control" name="budget_remark" placeholder="เช่น เบิกเฉพาะค่าที่พัก">
</div>
</div>
<div id="expense_section">
<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" 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">
<label class="form-check-label" for="budget_type_detail">แบบระบุรายละเอียด</label>
</div>
</div>
<!-- แบบประมาณการรวม -->
<div id="lump_sum_container" class="mb-3">
<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="0.00">
</div>
</div>
<!-- แบบระบุรายละเอียด -->
<div id="detailed_expense_container" class="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">
<!-- Items will be generated here -->
<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>
</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">
<!-- Items will be generated here -->
<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>
</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" 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" 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="text-end border-top pt-4">
<button type="reset" class="btn btn-light me-2 px-4">ล้างข้อมูล</button>
<button type="submit" class="btn btn-primary px-5 shadow"><i class="fa-solid fa-paper-plane me-1"></i> เสนอขออนุมัติ</button>
</div>
</form>
</div>
</div>
<?php
$extraScripts = '
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
// ฟังก์ชันแปลงวันที่รูปแบบไทย/ทั่วไป เป็น YYYY-MM-DD สำหรับ input[type="date"]
function parseDateToInputFormat(dateStr) {
if (!dateStr) return "";
// ถ้ามาเป็น YYYY-MM-DD อยู่แล้วก็คืนค่าได้เลย
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);
// ถ้าปีเป็น 25xx ให้แปลงเป็น ค.ศ.
if (y > 2400) y -= 543;
// ถ้าปีมาแค่ 2 หลัก (เช่น 66) ถือว่าเป็น 2566
else if (y > 50 && y < 100) y = (y + 2500) - 543;
// ถ้า d > 31 แสดงว่ามาในรูปแบบ YYYY/MM/DD
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() {
// จัดการ Select ตำบลเกาะสมุย
$(".tambon-select").on("change", function() {
var targetId = $(this).data("target");
var val = $(this).val();
if (val === "อื่นๆ") {
$("#" + targetId).removeClass("d-none").val("").focus();
} 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);
$("#doc_date").addClass("is-valid");
setTimeout(() => $("#doc_date").removeClass("is-valid"), 2000);
} else {
// ถ้าแปลงอัตโนมัติไม่ได้
Swal.fire("แจ้งเตือน", "ดึงวันที่ได้คือ \'" + data.doc_date + "\' แต่ระบบไม่สามารถจัดรูปแบบอัตโนมัติได้ กรุณาเลือกวันที่ด้วยตนเอง", "info");
}
}
Swal.fire({
icon: "success",
title: "ดึงข้อมูลสำเร็จ",
text: "พบหนังสือเรื่อง: " + (data.title || "-"),
timer: 1500,
showConfirmButton: false
});
} else {
Swal.fire("ไม่พบข้อมูล", "ไม่พบเลขที่หนังสือ \'" + q + "\' ในระบบ", "error");
}
},
error: function() {
btn.html(originalHtml).prop("disabled", false);
Swal.fire("เกิดข้อผิดพลาด", "ไม่สามารถเชื่อมต่อระบบค้นหาได้", "error");
}
});
});
// --- 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");
// clear budgets
$("#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;
// Accommodations
$(".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);
});
// Allowances
$(".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);
});
// Transport
var transport = parseFloat($("#expense_transport").val()) || 0;
total += transport;
// Registration
var registration = parseFloat($("#expense_registration").val()) || 0;
total += registration;
$("#detailed_total_display").text(total.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}));
// Also sync it to budget_lump_sum so the backend can just read \'budget\'
$("#budget_lump_sum").val(total.toFixed(2));
}
$(document).on("input", ".calc-trigger", calculateDetailedTotal);
// Initial setup
toggleExpenseUI();
});
</script>
';
$extraStyles = '';
?>