From 7fa68d62f36c76e290a61c060ac1e92dfaf65469 Mon Sep 17 00:00:00 2001 From: "Siwat T." Date: Sat, 21 Sep 2024 18:20:35 +0700 Subject: [PATCH] feat: allow faculty to edit participant list before approval --- app/Http/Controllers/ProjectController.php | 17 ++++ .../js/Components/ParticipantEditDialog.vue | 78 ++++++++++++++++ resources/js/Pages/ProjectApproval.vue | 90 +++++++++++-------- resources/js/types.ts | 67 ++++++++++++++ routes/web.php | 1 + 5 files changed, 216 insertions(+), 37 deletions(-) create mode 100644 resources/js/Components/ParticipantEditDialog.vue create mode 100644 resources/js/types.ts diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index dacf7e0..1b3e59b 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -533,6 +533,23 @@ public function removeParticipant(ProjectParticipant $participant) { return back()->with('flash.banner', 'ลบ ' . $participant->user->name . ' แล้ว')->with('flash.bannerStyle', 'success'); } + public function editParticipant(Request $request, ProjectParticipant $participant) { + $this->validate($request, [ + 'type' => 'required|string|in:organizer,staff,attendee', + 'title' => 'nullable|string|max:255', + ]); + $participant->load(['project', 'user']); + $this->authorize('update-project', $participant->project); + if ($participant->project->hasSubmittedClosure() and $request->user()->cannot('faculty-action')) { + return back()->with('flash.banner', 'ไม่อนุญาตให้แก้ไขหลังส่งรายงานผลโครงการ')->with('flash.bannerStyle', 'danger'); + } + $participant->type = $request->input('type'); + $participant->title = $request->input('title'); + $participant->save(); + + return back()->with('flash.banner', 'แก้ไข '.$participant->user->name.' แล้ว')->with('flash.bannerStyle', 'success'); + } + public function importParticipantUpload(Request $request, Project $project) { $this->validate($request, [ 'import' => 'required|file|mimes:csv,xlsx,xls' diff --git a/resources/js/Components/ParticipantEditDialog.vue b/resources/js/Components/ParticipantEditDialog.vue new file mode 100644 index 0000000..2f4fec2 --- /dev/null +++ b/resources/js/Components/ParticipantEditDialog.vue @@ -0,0 +1,78 @@ + + + diff --git a/resources/js/Pages/ProjectApproval.vue b/resources/js/Pages/ProjectApproval.vue index 3fb3e69..e5e4d98 100644 --- a/resources/js/Pages/ProjectApproval.vue +++ b/resources/js/Pages/ProjectApproval.vue @@ -107,15 +107,16 @@
-
+
- +
ชื่อ - เลขประจำตัวนิสิต + ตำแหน่ง @@ -127,12 +128,16 @@ scope="col" class="px-2 pb-1 text-left text-xs font-medium text-gray-500 tracking-wider"> อนุมัติ
-
-
-
เงื่อนไขจำนวนนิสิตผู้เกี่ยวข้อง เพื่อบันทึกใน Activity Transcript
-

- ไม่ตรงตามเงื่อนไข - เมื่อยืนยันและส่งเอกสารแล้ว ให้ติดต่อชี้แจงกับผู้ช่วยคณบดี/รองคณบดีที่ได้รับมอบหมาย -

-
    -
  • - ผู้รับผิดชอบ พึงมีจำนวนไม่เกินร้อยละ 20 ของจำนวนผู้ปฏิบัติงาน ยกเว้นโครงการที่ไม่มีนิสิตเป็นผู้ปฏิบัติงาน -
  • -
  • - ผู้ปฏิบัติงาน พึงมีจำนวนไม่เกิน 2 ใน 3 ของผู้มีส่วนร่วมในกิจกรรมทั้งหมด ทั้งผู้รับผิดชอบ ผู้ปฏิบัติงาน - และผู้เข้าร่วม ทั้งนิสิตและบุคคลภายนอก -
  • -
  • ผู้เข้าร่วม ต้องลงชื่อเข้าร่วมกิจกรรมทุกวัน ทุกครึ่งวัน หรือตามความเหมาะสมต่อลักษณะกิจกรรม - โดยมีหลักฐานว่าเข้าร่วมกิจกรรมไม่น้อยกว่า 2 ใน 3 ของระยะเวลากิจกรรมทั้งหมด - ให้ผู้รับผิดชอบโครงการเก็บรักษาหลักฐานดังกล่าวไว้ -
  • -
-
+
+
เงื่อนไขจำนวนนิสิตผู้เกี่ยวข้อง เพื่อบันทึกใน Activity Transcript
+

+ ไม่ตรงตามเงื่อนไข + เมื่อยืนยันและส่งเอกสารแล้ว ให้ติดต่อชี้แจงกับผู้ช่วยคณบดี/รองคณบดีที่ได้รับมอบหมาย +

+
    +
  • + ผู้รับผิดชอบ พึงมีจำนวนไม่เกินร้อยละ 20 ของจำนวนผู้ปฏิบัติงาน ยกเว้นโครงการที่ไม่มีนิสิตเป็นผู้ปฏิบัติงาน +
  • +
  • + ผู้ปฏิบัติงาน พึงมีจำนวนไม่เกิน 2 ใน 3 ของผู้มีส่วนร่วมในกิจกรรมทั้งหมด ทั้งผู้รับผิดชอบ ผู้ปฏิบัติงาน + และผู้เข้าร่วม ทั้งนิสิตและบุคคลภายนอก +
  • +
  • ผู้เข้าร่วม ต้องลงชื่อเข้าร่วมกิจกรรมทุกวัน ทุกครึ่งวัน หรือตามความเหมาะสมต่อลักษณะกิจกรรม + โดยมีหลักฐานว่าเข้าร่วมกิจกรรมไม่น้อยกว่า 2 ใน 3 ของระยะเวลากิจกรรมทั้งหมด + ให้ผู้รับผิดชอบโครงการเก็บรักษาหลักฐานดังกล่าวไว้ +
  • +
@@ -328,16 +339,18 @@
+ -