meetingRepository = $meetingRepository; $this->clientRepository = $clientRepository; $this->employee = $employee; $this->meetingMinute = $meetingMinute; } public function index() { $data['title'] = 'Meeting Lists'; $data['meetingLists'] = $this->meetingRepository->findAll(); return view('meeting::meeting.index', $data); } /** * Show the form for creating a new resource. */ public function create() { $data['title'] = 'Create Meeting'; $data['editable'] = false; $data['status'] = Meeting::STATUS; $data['clientList'] = $this->clientRepository->pluck(); $data['employeeList'] = $this->employee->pluck(); return view('meeting::meeting.create', $data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'title' => 'required', 'date' => 'required', ]); $logData = "Meeting Details: " . "Title: {$request->title}, " . "Date: " . Carbon::parse($request->date)->format('M j, Y') . ", " . "Start Time: " . Carbon::parse($request->start_time)->format('g:i a') . ", " . "End Time: " . ($request->end_time ? Carbon::parse($request->end_time)->format('g:i a') : 'Not specified') . ", " . "Location: " . ($request->location ?? 'Not specified'); if ($validator->fails()) { if ($request->ajax()) { return response()->json([ 'status' => false, 'msg' => $validator->errors(), ], 422); } return to_route('meeting.create')->withError($validator->errors()->all()); } try { if (!$request->has('status')) { $request->merge(['status' => 11]); } $meetingModel = $this->meetingRepository->create($request->all()); if ($request->filled('members')) { $userModels = User::whereIn('employee_id', $request->members['ids'])->get(); sendNotification($userModels, [ 'msg' => $meetingModel->title . ' meeting assigned', 'link' => route('meeting.show', $meetingModel->id), ]); // Log creation for employees foreach ($request->members['ids'] as $empId) { $employee = $this->employee->getEmployeeById($empId); $employee->user->createLog([ 'title' => 'Meeting Created', 'data' => $logData ]); } } else if ($request->client_id) { $client = $this->clientRepository->getClientById($request->client_id); $client->createLog([ 'title' => 'Meeting Created', 'data' => $logData ]); } if ($request->ajax()) { return response()->json([ 'status' => true, 'data' => [ "id" => $meetingModel->id, "title" => $meetingModel->title, "type" => 'meeting', "start_date" => $meetingModel->date, "location" => $meetingModel->location, "desc" => $meetingModel->description, "className" => "bg-warning", ], 'msg' => 'Meeting Created', ]); } return redirect()->route('meeting.index')->withSucess('Meeting Created'); } catch (\Throwable $th) { if ($request->ajax()) { return response()->json([ 'status' => false, 'msg' => $th->getMessage(), ], 422); } return redirect()->route('meeting.index')->withError($th->getMessage()); } } /** * Show the specified resource. */ public function show($id) { $data['title'] = 'Meeting Details'; $data['item'] = $this->meetingRepository->getMeetingById($id); $data['minutes'] = $this->meetingMinute->getMeetingMinuteByMeetingId($id); $data['employeeList'] = $this->employee->pluck(); return view('meeting::meeting.show', $data); } /** * Show the form for editing the specified resource. */ public function edit($id) { $data['title'] = 'Edit Leave'; $data['editable'] = true; $data['meeting'] = $this->meetingRepository->getMeetingById($id); $data['status'] = Meeting::STATUS; $data['clientList'] = $this->clientRepository->pluck(); $data['employeeList'] = $this->employee->pluck(); return view('meeting::meeting.edit', $data); } /** * Update the specified resource in storage. */ public function update(Request $request, $id): RedirectResponse { $meeting = $this->meetingRepository->getMeetingById($id); $logData = "Meeting Details: " . "Title: {$request->title}, " . "Date: " . Carbon::parse($request->date)->format('M j, Y') . ", " . "Start Time: " . Carbon::parse($request->start_time)->format('g:i a') . ", " . "End Time: " . ($request->end_time ? Carbon::parse($request->end_time)->format('g:i a') : 'Not specified') . ", " . "Location: " . ($request->location ?? 'Not specified'); $prevMemberIds = $meeting->members['ids'] ?? []; $currentMemberIds = array_intersect($prevMemberIds, $request->members['ids']); $newMemberIds = array_diff($request->members['ids'], $prevMemberIds); // Update meeting details $inputData = $request->except(['_method', '_token']); $this->meetingRepository->update($id, $inputData); // Log for employees if ($newMemberIds) { // Create logs for new members foreach ($newMemberIds as $newMemberId) { Employee::findOrFail($newMemberId)->createLog([ 'title' => 'Meeting Created', 'data' => $logData, ]); } } if ($currentMemberIds) { // Create logs for existing members still part of the meeting foreach ($currentMemberIds as $currentMemberId) { Employee::findOrFail($currentMemberId)->createLog([ 'title' => 'Meeting Updated', 'data' => $logData, ]); } } // Log for client if applicable if ($request->client_id) { $prevClientId = $meeting->client_id; $currentClientId = (int) $request->client_id; if ($prevClientId !== $currentClientId) { // Log for new client $this->clientRepository->getClientById($currentClientId)->createLog([ 'title' => 'Meeting Created', 'data' => $logData, ]); } // Log for updated client $this->clientRepository->getClientById($currentClientId)->createLog([ 'title' => 'Meeting Updated', 'data' => $logData, ]); } return redirect()->route('meeting.index')->withSuccess('Meeting Updated'); } /** * Remove the specified resource from storage. */ public function destroy($id) { $this->meetingRepository->delete($id); flash()->success('Meeting Deleted Succesfully'); } public function sendEmail($id) { $meetingData = $this->meetingRepository->getMeetingById($id); if (!$meetingData) { return response()->json(['error' => 'Meeting not found.'], 404); } try { $emailSent = true; if ($emailSent) { return response()->json(['message' => 'Email sent successfully!'], 200); } else { return response()->json(['error' => 'Failed to send email.'], 500); } } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } } //End Method // public function calendarByAjax(Request $request) // { // $filters['start_date'] = $request->start; // $filters['end_date'] = $request->end; // $meetings = Meeting::when($filters, function ($query) use ($filters) { // if (isset($filters["start_date"])) { // $query->whereDate("date", ">=", $filters["start_date"]); // } // if (isset($filters["end_date"])) { // $query->whereDate("date", "<=", $filters["end_date"]); // } // })->get(); // foreach ($meetings as $meeting) { // $list[] = [ // "id" => $meeting->meeting_id, // "title" => $meeting->title, // "type" => 'meeting', // "start" => $meeting->date, // "className" => "bg-warning-subtle", // "location" => $meeting->location, // "desc" => $meeting->description, // ]; // } // return $list; // } public function storeSubTask(Request $request) { $validator = Validator::make($request->all(), [ // 'meeting_id' => 'required', // 'agenda' => 'required', // 'attendees' => 'required', ]); if ($validator->fails()) { if ($request->ajax()) { return response()->json([ 'status' => false, 'msg' => $validator->errors(), ], 422); } return to_route('meeting.create')->withError($validator->errors()->all()); } $this->meetingMinute->create($request->all()); // if ($request->ajax()) { // return response()->json([ // 'status' => true, // 'data' => [ // "id" => $meetingModel->id, // "title" => $meetingModel->title, // "type" => 'meeting', // "start_date" => $meetingModel->date, // "location" => $meetingModel->location, // "desc" => $meetingModel->description, // "className" => "bg-warning", // ], // 'msg' => 'Meeting Created', // ]); // } return redirect()->route('meeting.index')->withSucess('Meeting Minute Created'); // } catch (\Throwable $th) { // if ($request->ajax()) { // return response()->json([ // 'status' => false, // 'msg' => $th->getMessage(), // ], 422); // } // return redirect()->route('meeting.index')->withError($th->getMessage()); // } } }