all(), [ 'data.name' => 'required', 'data.description' => 'required', 'data.duration' => 'required', 'data.deadline' => 'required', 'data.project_id' => 'required', 'data.employees' => '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']['title'] = $request->all()['data']['name']; $data['data']['estimated_time'] = $request->all()['data']['duration']; foreach ( $data['data']['employees'] as $key => $employee ) { $data['data']['employees'][$key]['user_id'] = $employee['id']; $data['data']['employees'][$key]['estimated_time'] = $employee['duration']; $data['data']['employees'][$key]['created_by'] = $request->all()['data']['created_by']; } $request->merge($data); $mastertask = MasterTask::create($request->all()['data']); $mastertask->subtasks()->createMany($request->all()['data']['employees']); // upload attachmentu if ($request->file('data')) { $attachments = Attachment::uploadAttachmentsToS3($request->file('data')['files'], $mastertask); $mastertask->attachments()->createMany($attachments); } return response()->json([ 'message' => 'Master Task created successfully', 'mastertask' => $mastertask ], 201); } public function update($id, Request $request) { $validator = Validator::make($request->all(), [ 'data.name' => 'required', 'data.description' => 'required', 'data.duration' => 'required', 'data.deadline' => 'required', 'data.project_id' => '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']['title'] = $request->all()['data']['name']; $data['data']['estimated_time'] = $request->all()['data']['duration']; $request->merge($data); $mastertask = MasterTask::find($id); // ak je Master task v stave ukončený, nedovolime update if ($mastertask->is_finished == 1) { return response()->json([ 'message' => 'Cannot update mastertask with is_finished 1.', ], 400); } $mastertask->update($request->all()['data']); // upload attachmentu // TODO prerobit na upsert if ($request->file('data')) { $attachments = Attachment::uploadAttachmentsToS3($request->file('data')['files'], $mastertask); $mastertask->attachments()->createMany($attachments); } return response()->json([ 'message' => 'Master Task updated successfully', 'mastertask' => $mastertask ]); // TODO V prípade, že sa menil zodpovedný team - Pre prebiehajúce sub tasky - Ukončia sa sub tasky pôvodného teamu a tie sa následne zarátajú do ERP Karat // TODO V prípade, že sa menil zodpovedný team - Pre nové sub tasky (s nenatrackovaným časom) budú tieto tasky zmazané } public function delete($id) { $mastertask = MasterTask::find($id); // nedovolit zmazanie mastertasku, ak existuje aspon jeden subtask s timesheetom foreach ($mastertask->subtasks as $subtask) { if ($subtask->timesheets()->exists()) { return response()->json([ 'message' => 'Cannot delete mastertask containing subtasks submitted timesheets.', ], 400); } } $mastertask->deleteAttachments(); foreach ( $mastertask->subtasks as $subtask ) { $subtask->timeblocks()->delete(); } $mastertask->subtasks()->delete(); $mastertask->delete(); return response()->json([ 'message' => 'Master Task deleted successfully.', 'mastertask' => $mastertask ]); } }