validate($request, [ 'activity_id' => 'required', 'material_id' => 'required', 'qty_planning' => 'required' ]); $activity = Activity::where('id', $request->activity_id)->first(); $checkStock = RequestMaterial::where("id", $request->material_id)->first(); $currentStock = $checkStock->qty; if ((int)$currentStock < (int)$request->qty_planning) { return response()->json(['status' => 'failed', 'message' => 'Stock is not enough!', 'code' => 500]); } $start_date = $activity->start_date; $start_date = substr($start_date, 0, 19); // remove the timezone offset $startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); $planDate = new \DateTime(date("Y-m-d", strtotime($request->plan_date))); $data = $request->all(); $data['created_by'] = $this->currentName; $data['budget'] = $checkStock->price; $data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']); if ($planDate >= $startDate) { $result = AssignMaterial::create($data); if($result) { return response()->json(['status' => 'success', 'message' => 'Data added!', 'code' => 200], 200); } else { return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 400], 400); } } else { return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 400], 400); } } public function update(Request $request, $id) { if (empty($id) || !is_int((int)$id)) return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400); $data = AssignMaterial::find($id); if (!$data) return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404); $result = $data->update($request->all()); if ($result) return response()->json(['status' => 'success', 'message' => 'Data updated!', 'code' => 200], 200); return response()->json(['status' => 'failed', 'message' => 'Failed to update!', 'code' => 500], 500); } public function delete($id) { $data = AssignMaterial::where('id', $id)->first(); $reports = ReportActivityMaterial::where('assign_material_id', $data->id)->get(); if (isset($reports)) { foreach ($reports as $report) { $report->delete(); } } if ($data->delete()) return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200); return response()->json(['status' => 'failed', 'message' => 'Failed to delete!', 'code' => 500], 500); } public function edit($id) { if (empty($id) || !is_int((int)$id)) return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400); $result = AssignMaterial::find($id); if ($result) return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200); return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404); } public function search(Request $request) { $payload = $request->all(); $dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); $builder = $dataBuilder['builder']; $countBuilder = $dataBuilder['count']; $dataGet = $builder->get(); $totalRecord = $countBuilder->count(); return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200); } public function list() { $data = AssignMaterial::all(); $countData = $data->count(); if ($data) return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200); return response()->json(['status' => 'failed', 'message' => 'Failed to get the data!', 'code' => 500], 500); } public function datatables(Request $request) { $id_activity = $request->query('idact'); $type = $request->query('type') ?? "material"; $data = AssignMaterial::select( "assign_material_to_activity.*", "m.description as material_name", "m.uom as uom" ) ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->where('assign_material_to_activity.activity_id', $id_activity) ->where('assign_material_to_activity.type', $type) ->orderBy('plan_date', 'desc') ->get(); return Datatables::of($data) ->addIndexColumn() ->addColumn('action', function ($row) { $actionBtn = ''; return $actionBtn; }) ->rawColumns(['action'])->make(true); } public function datatablesForReportActivity(Request $request) { $id_activity = $request->query('idact'); $query = AssignMaterial::select( DB::raw('SUM(assign_material_to_activity.qty_planning) as qty_planning'), "m.description as material_name", "assign_material_to_activity.activity_id", DB::raw('SUM(assign_material_to_activity.id) as id'), "m.uom", ) ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id"); $data = $query->groupBy("m.description") ->groupBy("assign_material_to_activity.activity_id") ->groupBy("m.uom") // ->groupBy("assign_material_to_activity.id") ->where("assign_material_to_activity.activity_id", $id_activity) ->get(); return Datatables::of($data) ->addIndexColumn() ->addColumn('status_activity', function ($row) { $val_status = AssignMaterial::select("status_activity") ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') ->where('m.description', '=', $row->material_name) ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); return $val_status ? $val_status->status_activity : null; }) ->addColumn('qty_sum', function($row){ $val_qty_actual = ReportActivityMaterial::where("report_activity_material.assign_material_id", $row->id) ->sum("qty"); return $val_qty_actual ? $val_qty_actual : null; }) ->addColumn('start_activity', function ($row) { $val_start = AssignMaterial::select("start_activity") ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') ->where('m.description', '=', $row->material_name) ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); return $val_start ? $val_start->start_activity : null; }) ->addColumn('finish_activity', function ($row) { $val_finish = AssignMaterial::select("finish_activity") ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') ->where('m.description', '=', $row->material_name) ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); return $val_finish ? $val_finish->finish_activity : null; }) // ->addColumn('uom', function ($row) { // $val_uom = RequestMaterial::select("uom") // ->where('description', '=', $row->material_name)->first(); // return $val_uom ? $val_uom->uom : null; // }) ->addColumn('assign_material_id', function ($row) { $assignMaterial = AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); return $assignMaterial ? $assignMaterial->id : null; }) ->addColumn('action', function ($row) { $dataPlan = AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); $actionBtn = ''; $actionBtn .= ''; return $actionBtn; }) ->rawColumns(['action'])->make(true); } public function ForReportActivityByMaterial(Request $request) { $id_activity = $request->idact; $data = AssignMaterial::select("assign_material_to_activity.*", "m.description as material_name", "m.uom as uom") ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->where('assign_material_to_activity.activity_id', $id_activity)->get(); foreach ($data as $key) { $val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty"); } $countData = $data->count(); if ($data) { return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200); } else { return response()->json(['status' => 'failed', 'message' => 'failed get Assign material, please try again later!', 'code' => 400], 400); } } }