query(); $parameters['user_id'] = ( $parameters['employee_id'] ?? null ); $validator = Validator::make($request->all(), [ 'start' => 'required', 'end' => 'required', ]); $validator->after(function ($validator) use ($parameters) { if ( !isset($parameters['employee_id']) && !isset($parameters['team_id'])) { $validator->errors()->add( 'error', 'You must provide either employee_id or team_id.' ); } }); if ($validator->fails()){ return response()->json($validator->errors(), 400); } if (isset($parameters['team_id'])) { $subtasks = SubTask::whereHas('mastertask', function ($query) use ($parameters) { $query->where('team_id', $parameters['team_id']); })->whereHas('timeblocks', function ($query) use ($parameters) { $query->where('start', '>=', $parameters['start']); $query->where('end', '<=', $parameters['end']); })->get(); } else if (isset($parameters['user_id'])) { $subtasks = SubTask::where('user_id', $parameters['user_id'])->whereHas('timeblocks', function ($query) use ($parameters) { $query->where('start', '>=', $parameters['start']); $query->where('end', '<=', $parameters['end']); })->get(); } return response()->json([ 'subtasks' => $subtasks ], 200); } public function store($mastertask_id, Request $request) { $validator = Validator::make($request->all(), [ 'data.employee_id' => 'required', 'data.duration' => 'required', ]); // validacia, ci uz subtask pre tohto usera a mastertask neexistuje $validator->after(function ($validator) use ($mastertask_id, $request) { if (SubTask::where('master_task_id', $mastertask_id)->where('user_id', $request->all()['data']['employee_id'])->exists()) { $validator->errors()->add( 'data.employee_id', 'Sub task already exists for this employee and master task.' ); } }); if ($validator->fails()){ return response()->json($validator->errors(), 400); } // upratanie requestu, pretoze frontend pouziva inu nomenklaturu fieldov ako appka $data['data'] = $request->all()['data']; $data['data']['user_id'] = $request->all()['data']['employee_id']; $data['data']['estimated_time'] = $request->all()['data']['duration']; $request->merge($data); $mastertask = MasterTask::find($mastertask_id); $subtask = $mastertask->subtasks()->create($request->all()['data']); // syncnutie timeblocks if (!empty($data['data']['timeblocks'])) { $subtask->syncTimeblocks($data['data']['timeblocks']); } // upload attachmentu if ($request->file('data')) { $attachments = Attachment::uploadAttachmentsToS3($request->file('data')['files'], $mastertask); $subtask->attachments()->createMany($attachments); } return response()->json([ 'message' => 'Sub Task created successfully', 'subtask' => $subtask ], 201); } // TODO zabezpecit, ze ked sa meni user, tak nech sa dvojmu nevlozia jeho vykazy public function update($id, Request $request) { $subtask = SubTask::find($id); $validator = Validator::make($request->all(), [ 'data.employee_id' => 'required', 'data.duration' => 'required', ]); if ($validator->fails()){ return response()->json($validator->errors(), 400); } // upratanie requestu, pretoze frontend pouziva inu nomenklaturu fieldov ako appka $data['data'] = $request->all()['data']; $data['data']['user_id'] = $request->all()['data']['employee_id']; $data['data']['estimated_time'] = $request->all()['data']['duration']; $request->merge($data); $subtask->update($request->all()['data']); // syncnutie vykazu if (!empty($data['data']['timesheets'])) { $subtask->syncTimesheets($data['data']['timesheets']); } // syncnutie timeblocks if (!empty($data['data']['timeblocks'])) { $subtask->syncTimeblocks($data['data']['timeblocks']); } return response()->json([ 'message' => 'Subtask updated successfully', 'subtask' => $subtask ]); } public function delete($id) { $subtask = SubTask::find($id); // ak existuje timesheet k subtasku, nemoze sa zmazat if ($subtask->timesheets()->exists()) { return response()->json([ 'message' => 'Cannot delete subtask with submitted timesheets.', ], 400); } $subtask->timeblocks()->delete(); // TODO budu mat attachmenty? // $subtask->attachments()->delete(); $subtask->delete(); return response()->json([ 'message' => 'Subtask deleted successfully.', 'subtask' => $subtask ]); } }