validate($request, [ 'activity_id' => 'required', 'material_id' => 'required', 'qty_planning' => 'required', 'budget' => 'required' ]); $checkStock = MaterialResource::where("id", $request->material_id)->first(); $currentStock = $checkStock->qty; if((int)$currentStock < (int)$request->qty_planning){ return response()->json(['status'=>'failed','message'=>'Not enough stock in warehouse!','code'=>400]); die(); } $data = $request->all(); $data['created_by'] = $this->currentName; $result = AssignMaterial::create($data); if($result){ $checkStock = MaterialResource::find($request->material_id); $newStock = (int)$checkStock->qty - (int)$request->qty_planning; $dataUpdate = array( "qty"=>$newStock, "updated_by"=>$this->currentName ); $checkStock->update($dataUpdate); return response()->json(['status'=>'success','message'=>'Assign material successfull created','code'=>200]); }else{ return response()->json(['status'=>'failed','message'=>'Assign material failed created','code'=>400]); } } public function add(Request $request){ $this->validate($request, [ 'activity_id' => 'required', 'material_id' => 'required', 'qty_planning' => 'required' ]); $checkStock = RequestMaterial::where("id", $request->material_id)->first(); $currentStock = $checkStock->qty; $price = $checkStock->price; if((int)$currentStock < (int)$request->qty_planning){ return response()->json(['status'=>'failed','message'=>'Not enough stock !','code'=>400]); die(); } $data = $request->all(); $data['created_by'] = $this->currentName; $data['budget'] = $price; $result = AssignMaterial::create($data); if($result){ $updateActivity = Activity::find($request->activity_id); if($updateActivity){ $costPlanOld = $updateActivity==null? 0 : (int)$updateActivity->rencana_biaya; $costPlanNew = $costPlanOld + ($price*$request->qty_planning); $updateActivity->rencana_biaya = $costPlanNew; $updateActivity->save(); return response()->json(['status'=>'success','message'=>'Assign material successfull created, and update cost plan success '.$costPlanNew,'code'=>200]); }else{ return response()->json(['status'=>'success','message'=>'Assign material successfull created','code'=>200]); } }else{ return response()->json(['status'=>'failed','message'=>'Assign material failed created','code'=>400]); } } private function updateFromAdd($data){ $assignMaterial = AssignMaterial::where("activity_id", $data->activity_id)->where("material_id", $data->material_id)->first(); $newQty = (int)$assignMaterial->qty_planning + (int)$data->qty_planning; $newBudget = $assignMaterial->budget > $data->budget ? $assignMaterial->budget : $data->budget; $dataUpdate = array( "qty_planning"=>$newQty, "budget"=>$newBudget, "updated_by"=>$this->currentName ); $dataWillUpdate = AssignMaterial::where("activity_id", $data->activity_id)->where("material_id", $data->material_id); return $dataWillUpdate->update($dataUpdate); } public function update(Request $request, $id){ if(!$id || (int) $id < 0 || $id==""){ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); } $data = AssignMaterial::find($id); if($data){ $result = $data->update($request->all()); }else{ return response()->json(['status'=>'failed','message'=>'Data Assign material not found!','code'=>400], 400); die(); } if($result){ return response()->json(['status'=>'success','message'=>'Assign material successfully updated!','code'=>200], 200); }else{ return response()->json(['status'=>'failed','message'=>'Assign material failed updated!','code'=>400], 400); } } public function delete($id) { $data = AssignMaterial::find($id); if($data){ $id = $data->material_id; $stock = $data->qty_planning; $materialResource = MaterialResource::find($id); if($materialResource){ $oldStock = $materialResource->qty; $newStock = $oldStock + $stock; $dataUpdate = array( "qty"=>$newStock, "updated_by"=>$this->currentName ); $materialResource->update($dataUpdate); } $activity = Activity::where('id', $data->activity_id)->first(); $activity->rencana_biaya -= $data->budget * $data->qty_planning; $activity->save(); $delete = $data->delete(); }else{ return response()->json(['status'=>'failed','message'=>'Data Assign material not found!','code'=>400], 400); die(); } if($delete){ return response()->json(['status'=>'success','message'=>'Assign material successfully deleted!','code'=>200], 200); }else{ return response()->json(['status'=>'failed','message'=>'Assign material failed deleted!','code'=>400], 400); } } public function edit($id){ if(!$id || (int) $id < 0 || $id==""){ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); die(); } $result = AssignMaterial::find($id); if($result){ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); }else{ return response()->json(['status'=>'failed','message'=>'failed get data Assign material, please try again later!','code'=>400], 400); } } 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); }else{ return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400); } } public function datatables(Request $request){ $id_activity = $request->query('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(); 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'); $data = AssignMaterial::select(AssignMaterial::raw('SUM(qty_planning) as qty_planning'), "m.description as material_name", "assign_material_to_activity.activity_id as activity_id") ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->groupBy("m.description") ->groupBy("assign_material_to_activity.activity_id") ->where("assign_material_to_activity.activity_id", $id_activity)->get(); return Datatables::of($data) ->addIndexColumn() ->addColumn('qty_sum', function($row){ $val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") ->groupBy("m.description") ->where("m.description", strval($row->material_name)) ->where("ram.activity_id", $row->activity_id)->first(); return $val_qty_act ? $val_qty_act->qty_sum : '-'; }) ->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('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('action', function($row){ $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) { # code... $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); } } }