Orders = $Order; $this->helpers = $helpers; } public function createOrder(Request $request){ $data = $request->all(); $validator = Validator::make($data, [ 'note' => 'required', 'address' => 'required', 'items' => 'required', ]); // $validator = $this->validateForm($data, $rules); if($validator->fails()) { return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); } //dd($data); $currentUser = \JWTAuth::parseToken()->authenticate(); $order = new Orders; $order->user_id = $currentUser->id; $order->note = $data["note"]; $order->address = $data["address"]; $order->status = "new"; $order->save(); $this->sendSMS($currentUser->username, Message::trans('success.ordered')); // [{"item":34,"qty":1},{"item":35,"qty":3}] $orderItem = new OrderItems; $orderItem->order_id = $order->id; $orderItem->items = json_decode($data["items"]); $orderItem->save(); // dd($orderItem->items[0]["item"]); for ($i = 0; $i < count($orderItem->items); $i++) { $vendorSale = new VendorSales; $vendorSale->order_id = $order->id; $vendorSale->vendor_id = $orderItem->items[$i]["vendor_id"]; $vendorSale->product_id = $orderItem->items[$i]["item"]; $vendorSale->qty = $orderItem->items[$i]["qty"]; $vendorSale->price = $orderItem->items[$i]["price"]; $vendorSale->save(); } $vendorPhones = VendorSales::where("order_id", $order->id)->with("vendor")->groupBy("vendor_id")->get(); for ($x = 0; $x < count($vendorPhones); $x++) { $this->sendSMS($vendorPhones[$x]->vendor->username, Message::trans('success.ordered.vendor')); } if ($order && $orderItem && $vendorSale){ //return $this->helpers->apiArrayResponseBuilder(200, 'ok', [$order]); return response()->json($order, 200); }else{ return $this->helpers->apiArrayResponseBuilder(400, 'fail'); } } public function myOrders(Request $request){ $currentUser = \JWTAuth::parseToken()->authenticate(); //$orders = Orders::where("user_id", $currentUser->id)->with(["order_items"])->orderBy('id', 'DESC')->paginate(12); $orders = VendorSales::with("order")->whereHas('order', function ($query) use($currentUser) { $query->where('user_id', $currentUser->id); })->groupBy("order_id")->orderBy("id", "DESC")->paginate(12); for ($i = 0; $i < count($orders); $i++) { $products = VendorSales::where("order_id", $orders[$i]->order_id)->with(["product" => function($q){ $q->with([ 'translations:locale,model_id,attribute_data', 'images:attachment_id,attachment_type,disk_name,file_name', 'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram', 'place', ]); }])->get(); $orders[$i]->products = $products; } return response()->json($orders, 200); //return $this->helpers->apiArrayResponseBuilder(200, 'ok', [$orders]); } public function mySales(Request $request){ $data = $request->all(); $validator = Validator::make($data, [ 'order_id' => 'required', ]); // $validator = $this->validateForm($data, $rules); if($validator->fails()) { return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); } $currentUser = \JWTAuth::parseToken()->authenticate(); $sales = VendorSales::where('vendor_id', $currentUser->id)->where('order_id', $data["order_id"])->with(['order.user', 'product.images:attachment_id,attachment_type,disk_name,file_name', 'product.place', 'product.vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram'])->orderBy('id', 'DESC')->paginate(15); return response()->json($sales, 200); //return $this->helpers->apiArrayResponseBuilder(200, 'ok', [$orders]); } public function mySaleOrders(Request $request){ $currentUser = \JWTAuth::parseToken()->authenticate(); $sales = VendorSales::select('id', 'order_id', 'created_at', 'status')->where('vendor_id', $currentUser->id)->groupBy('order_id')->orderBy('id', 'DESC')->paginate(15); return response()->json($sales, 200); //return $this->helpers->apiArrayResponseBuilder(200, 'ok', [$orders]); } public function checkVendorSales(){ $currentUser = \JWTAuth::parseToken()->authenticate(); $counter = 0; $sales = VendorSales::where('vendor_id', $currentUser->id)->where('status', 'new')->get(); $newOrders = array( "new_order_count" => count($sales), ); return response()->json($newOrders, 200); //return $this->helpers->apiArrayResponseBuilder(200, 'ok', [$orders]); } public function confirmOrder(Request $request){ $data = $request->all(); $validator = Validator::make($data, [ 'order_id' => 'required', ]); // $validator = $this->validateForm($data, $rules); if($validator->fails()) { return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); } //dd($data); $currentUser = \JWTAuth::parseToken()->authenticate(); $vendorOrders = VendorSales::where('order_id', $data["order_id"])->get(); if((count($vendorOrders) != 0) && ($vendorOrders[0]->vendor_id == $currentUser->id)){ for ($i = 0; $i < count($vendorOrders); $i++) { $vendorOrders[$i]->status = "completed"; $vendorOrders[$i]->save(); } } if ($vendorOrders){ //return $this->helpers->apiArrayResponseBuilder(200, 'ok', [$order]); return response()->json($vendorOrders, 200); }else{ return $this->helpers->apiArrayResponseBuilder(400, 'fail'); } } protected function sendSMS($phone, $message){ $smsSender = new SmsSender(); $smsSender->phone = (string)'+993'.$phone; $smsSender->message = strval($message); $smsSender->save(); } public static function getAfterFilters() {return [];} public static function getBeforeFilters() {return [];} public static function getMiddleware() {return [];} public function callAction($method, $parameters=false) { return call_user_func_array(array($this, $method), $parameters); } }