From 2ad998497dbffec3a6ddc480d51a42ee8a0c01f0 Mon Sep 17 00:00:00 2001 From: arieeefajar Date: Tue, 11 Feb 2025 19:40:33 +0700 Subject: [PATCH] feat(assessment-history-officer): create assessment history page for office with read data --- .../AssessmentHistoryController.php | 6 + .../js/pages/customJs/assessment/officer.js | 382 ++++++++++++++++++ resources/views/assessment/officer.blade.php | 306 ++++++++++++++ resources/views/partials/sidebar.blade.php | 4 +- routes/web.php | 4 + 5 files changed, 700 insertions(+), 2 deletions(-) create mode 100644 public/assets/js/pages/customJs/assessment/officer.js create mode 100644 resources/views/assessment/officer.blade.php diff --git a/app/Http/Controllers/AssessmentHistoryController.php b/app/Http/Controllers/AssessmentHistoryController.php index d33d48f..156c9bd 100644 --- a/app/Http/Controllers/AssessmentHistoryController.php +++ b/app/Http/Controllers/AssessmentHistoryController.php @@ -13,4 +13,10 @@ public function index() $evaluations = Evaluation::with('land', 'evaluationDetails.indicator')->orderBy('created_at', 'desc')->get(); return view('assessment.index', compact('evaluations')); } + + public function officer() + { + $evaluations = Evaluation::with('land', 'evaluationDetails.indicator')->where('user_id', auth()->user()->id)->orderBy('created_at', 'desc')->get(); + return view('assessment.officer', compact('evaluations')); + } } diff --git a/public/assets/js/pages/customJs/assessment/officer.js b/public/assets/js/pages/customJs/assessment/officer.js new file mode 100644 index 0000000..96d6566 --- /dev/null +++ b/public/assets/js/pages/customJs/assessment/officer.js @@ -0,0 +1,382 @@ +function detailData(data) { + var form = document.getElementById("detail-form"); + var detailModal = form.querySelector("#detail-body"); + + detailModal.innerHTML = ""; + + if (Array.isArray(data)) { + data.forEach((item) => { + let row = `
+ + +
`; + detailModal.innerHTML += row; + }); + } else { + detailModal.innerHTML = + "

Data tidak ditemukan

"; + } +} + +var checkAll = document.getElementById("checkAll"); +checkAll && + (checkAll.onclick = function () { + for ( + var e = document.querySelectorAll( + '.form-check-all input[type="checkbox"]' + ), + t = 0; + t < e.length; + t++ + ) + (e[t].checked = this.checked), + e[t].checked + ? e[t].closest("tr").classList.add("table-active") + : e[t].closest("tr").classList.remove("table-active"); + }); +var perPage = 10, + options = { + valueNames: ["id", "customer_name", "email", "date", "phone", "status"], + page: perPage, + pagination: !0, + plugins: [ListPagination({ left: 2, right: 2 })], + }, + customerList = new List("customerList", options).on( + "updated", + function (e) { + 0 == e.matchingItems.length + ? (document.getElementsByClassName( + "noresult" + )[0].style.display = "block") + : (document.getElementsByClassName( + "noresult" + )[0].style.display = "none"); + var t = 1 == e.i, + a = e.i > e.matchingItems.length - e.page; + document.querySelector(".pagination-prev.disabled") && + document + .querySelector(".pagination-prev.disabled") + .classList.remove("disabled"), + document.querySelector(".pagination-next.disabled") && + document + .querySelector(".pagination-next.disabled") + .classList.remove("disabled"), + t && + document + .querySelector(".pagination-prev") + .classList.add("disabled"), + a && + document + .querySelector(".pagination-next") + .classList.add("disabled"), + e.matchingItems.length <= perPage + ? (document.querySelector( + ".pagination-wrap" + ).style.display = "none") + : (document.querySelector( + ".pagination-wrap" + ).style.display = "flex"), + e.matchingItems.length == perPage && + document + .querySelector(".pagination.listjs-pagination") + .firstElementChild.children[0].click(), + 0 < e.matchingItems.length + ? (document.getElementsByClassName( + "noresult" + )[0].style.display = "none") + : (document.getElementsByClassName( + "noresult" + )[0].style.display = "block"); + } + ); +isCount = new DOMParser().parseFromString( + customerList.items.slice(-1)[0]._values.id, + "text/html" +); +var isValue = isCount.body.firstElementChild.innerHTML, + idField = document.getElementById("id-field"), + customerNameField = document.getElementById("customername-field"), + emailField = document.getElementById("email-field"), + dateField = document.getElementById("date-field"), + phoneField = document.getElementById("phone-field"), + statusField = document.getElementById("status-field"), + addBtn = document.getElementById("add-btn"), + editBtn = document.getElementById("edit-btn"), + removeBtns = document.getElementsByClassName("remove-item-btn"), + editBtns = document.getElementsByClassName("edit-item-btn"); +function filterContact(e) { + var t = e; + customerList.filter(function (e) { + matchData = new DOMParser().parseFromString( + e.values().status, + "text/html" + ); + e = matchData.body.firstElementChild.innerHTML; + return "All" == e || "All" == t || e == t; + }), + customerList.update(); +} +function updateList() { + var a = document.querySelector("input[name=status]:checked").value; + (data = userList.filter(function (e) { + var t = !1; + return ( + "All" == a + ? (t = !0) + : ((t = e.values().sts == a), console.log(t, "statusFilter")), + t + ); + })), + userList.update(); +} +refreshCallbacks(), + filterContact("All"), + document + .getElementById("showModal") + .addEventListener("show.bs.modal", function (e) { + e.relatedTarget.classList.contains("edit-item-btn") + ? ((document.getElementById("exampleModalLabel").innerHTML = + "Edit Customer"), + (document + .getElementById("showModal") + .querySelector(".modal-footer").style.display = "block"), + (document.getElementById("add-btn").style.display = "none"), + (document.getElementById("edit-btn").style.display = "block")) + : e.relatedTarget.classList.contains("add-btn") + ? ((document.getElementById("exampleModalLabel").innerHTML = + "Add Customer"), + (document + .getElementById("showModal") + .querySelector(".modal-footer").style.display = "block"), + (document.getElementById("edit-btn").style.display = "none"), + (document.getElementById("add-btn").style.display = "block")) + : ((document.getElementById("exampleModalLabel").innerHTML = + "List Customer"), + (document + .getElementById("showModal") + .querySelector(".modal-footer").style.display = "none")); + }), + ischeckboxcheck(), + document + .getElementById("showModal") + .addEventListener("hidden.bs.modal", function () { + clearFields(); + }), + document + .querySelector("#customerList") + .addEventListener("click", function () { + refreshCallbacks(), ischeckboxcheck(); + }); +var table = document.getElementById("customerTable"), + tr = table.getElementsByTagName("tr"), + trlist = table.querySelectorAll(".list tr"), + count = Number(isValue.replace(/[^0-9]/g, "")) + 1; +addBtn.addEventListener("click", function (e) { + "" !== customerNameField.value && + "" !== emailField.value && + "" !== dateField.value && + "" !== phoneField.value && + (customerList.add({ + id: + '#VZ' + + count + + "", + customer_name: customerNameField.value, + email: emailField.value, + date: dateField.value, + phone: phoneField.value, + status: isStatus(statusField.value), + }), + document.getElementById("close-modal").click(), + clearFields(), + refreshCallbacks(), + filterContact("All"), + count++); +}), + editBtn.addEventListener("click", function (e) { + (document.getElementById("exampleModalLabel").innerHTML = + "Edit Customer"), + customerList.get({ id: idField.value }).forEach(function (e) { + (isid = new DOMParser().parseFromString( + e._values.id, + "text/html" + )), + isid.body.firstElementChild.innerHTML == itemId && + e.values({ + id: + '' + + idField.value + + "", + customer_name: customerNameField.value, + email: emailField.value, + date: dateField.value, + phone: phoneField.value, + status: isStatus(statusField.value), + }); + }), + document.getElementById("close-modal").click(), + clearFields(); + }); +var statusVal = new Choices(statusField); +function isStatus(e) { + switch (e) { + case "Active": + return ( + '' + + e + + "" + ); + case "Block": + return ( + '' + + e + + "" + ); + } +} +function ischeckboxcheck() { + document.getElementsByName("checkAll").forEach(function (e) { + e.addEventListener("click", function (e) { + e.target.checked + ? e.target.closest("tr").classList.add("table-active") + : e.target.closest("tr").classList.remove("table-active"); + }); + }); +} +function refreshCallbacks() { + removeBtns.forEach(function (e) { + e.addEventListener("click", function (e) { + e.target.closest("tr").children[1].innerText, + (itemId = e.target.closest("tr").children[1].innerText), + customerList.get({ id: itemId }).forEach(function (e) { + deleteid = new DOMParser().parseFromString( + e._values.id, + "text/html" + ); + var t = deleteid.body.firstElementChild; + deleteid.body.firstElementChild.innerHTML == itemId && + document + .getElementById("delete-record") + .addEventListener("click", function () { + customerList.remove("id", t.outerHTML), + document + .getElementById("deleteRecordModal") + .click(); + }); + }); + }); + }), + editBtns.forEach(function (e) { + e.addEventListener("click", function (e) { + e.target.closest("tr").children[1].innerText, + (itemId = e.target.closest("tr").children[1].innerText), + customerList.get({ id: itemId }).forEach(function (e) { + isid = new DOMParser().parseFromString( + e._values.id, + "text/html" + ); + var t = isid.body.firstElementChild.innerHTML; + t == itemId && + ((idField.value = t), + (customerNameField.value = e._values.customer_name), + (emailField.value = e._values.email), + (dateField.value = e._values.date), + (phoneField.value = e._values.phone), + statusVal && statusVal.destroy(), + (statusVal = new Choices(statusField)), + (val = new DOMParser().parseFromString( + e._values.status, + "text/html" + )), + (t = val.body.firstElementChild.innerHTML), + statusVal.setChoiceByValue(t), + flatpickr("#date-field", { + dateFormat: "d M, Y", + defaultDate: e._values.date, + })); + }); + }); + }); +} +function clearFields() { + (customerNameField.value = ""), + (emailField.value = ""), + (dateField.value = ""), + (phoneField.value = ""); +} +document + .querySelector(".pagination-next") + .addEventListener("click", function () { + !document.querySelector(".pagination.listjs-pagination") || + (document + .querySelector(".pagination.listjs-pagination") + .querySelector(".active") && + document + .querySelector(".pagination.listjs-pagination") + .querySelector(".active") + .nextElementSibling.children[0].click()); + }), + document + .querySelector(".pagination-prev") + .addEventListener("click", function () { + !document.querySelector(".pagination.listjs-pagination") || + (document + .querySelector(".pagination.listjs-pagination") + .querySelector(".active") && + document + .querySelector(".pagination.listjs-pagination") + .querySelector(".active") + .previousSibling.children[0].click()); + }); +var attroptions = { + valueNames: [ + "name", + "born", + { data: ["id"] }, + { attr: "src", name: "image" }, + { attr: "href", name: "link" }, + { attr: "data-timestamp", name: "timestamp" }, + ], + }, + attrList = new List("users", attroptions); +attrList.add({ + name: "Leia", + born: "1954", + image: "assets/images/users/avatar-5.jpg", + id: 5, + timestamp: "67893", +}); +var existOptionsList = { valueNames: ["contact-name", "contact-message"] }, + existList = new List("contact-existing-list", existOptionsList), + fuzzySearchList = new List("fuzzysearch-list", { valueNames: ["name"] }), + paginationList = new List("pagination-list", { + valueNames: ["pagi-list"], + page: 3, + pagination: !0, + }); diff --git a/resources/views/assessment/officer.blade.php b/resources/views/assessment/officer.blade.php new file mode 100644 index 0000000..7face15 --- /dev/null +++ b/resources/views/assessment/officer.blade.php @@ -0,0 +1,306 @@ +@extends('layouts.app') +@push('title', 'Riwayat Penilaian Petugas') +@section('content') +
+
+ +
+
+
+

Riwayat Penilaian

+ +
+ +
+
+
+
+ + +
+
+
+
+

Riwayat Penilaian

+
+ + +
+
+
+ {{--
+
+ +
+
--}} +
+
+ +
+
+
+ +
+ + + + + + + + + + + @foreach ($evaluations as $evaluation) + + + + + + + + @endforeach + +
+ No + + Lahan + + Nilai Presentase + Action
{{ $loop->iteration }}{{ $evaluation->land->name }} + {{ number_format($evaluation->cf_value, 2) * 100 }}% + +
+
+ +
+
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + +
+ +
+ + @push('other-js') + + + + + + + + + + @endpush +@endsection diff --git a/resources/views/partials/sidebar.blade.php b/resources/views/partials/sidebar.blade.php index d8cac08..9a53129 100644 --- a/resources/views/partials/sidebar.blade.php +++ b/resources/views/partials/sidebar.blade.php @@ -101,8 +101,8 @@ class="nav-link {{ request()->routeIs('master_data.aturan.*') ? 'active' : '' }}