249 lines
8.6 KiB
PHP
249 lines
8.6 KiB
PHP
<?php namespace AhmadFatoni\ApiGenerator\Controllers\API;
|
|
|
|
use Cms\Classes\Controller;
|
|
use Illuminate\Http\Request;
|
|
use AhmadFatoni\ApiGenerator\Helpers\Helpers;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
use TPS\Birzha\Models\Product;
|
|
use TPS\Birzha\Models\Orders;
|
|
use TPS\Birzha\Models\OrderItems;
|
|
use TPS\Birzha\Models\VendorSales;
|
|
use RainLab\User\Models\User as UserClient;
|
|
use Sms\Sms\Models\SmsSender;
|
|
use RainLab\Translate\Models\Message;
|
|
|
|
class OrderApiController extends Controller
|
|
{
|
|
protected $Order;
|
|
|
|
protected $helpers;
|
|
|
|
public function __construct(Orders $Order, Helpers $helpers)
|
|
{
|
|
parent::__construct();
|
|
$this->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);
|
|
}
|
|
|
|
}
|