2023-10-12 20:59:00 +00:00
|
|
|
<?php namespace TPS\Birzha\Components;
|
|
|
|
|
|
|
|
|
|
use Cms\Classes\ComponentBase;
|
|
|
|
|
use Illuminate\Support\Facades\Config;
|
|
|
|
|
use October\Rain\Exception\AjaxException;
|
|
|
|
|
use October\Rain\Support\Facades\Event;
|
|
|
|
|
use TPS\Birzha\Models\Payment;
|
|
|
|
|
use RainLab\User\Facades\Auth;
|
2023-10-22 13:08:31 +00:00
|
|
|
use RainLab\User\Models\User as VendorModel;
|
2023-10-12 20:59:00 +00:00
|
|
|
use Validator;
|
|
|
|
|
use TPS\Birzha\Models\Product;
|
|
|
|
|
use TPS\Birzha\Models\Orders;
|
|
|
|
|
use TPS\Birzha\Models\OrderItems;
|
|
|
|
|
use TPS\Birzha\Models\VendorSales;
|
|
|
|
|
use Flash;
|
2023-10-22 13:08:31 +00:00
|
|
|
use Sms\Sms\Models\SmsSender;
|
2023-10-25 16:09:40 +00:00
|
|
|
use RainLab\Translate\Models\Message;
|
2023-10-31 19:02:17 +00:00
|
|
|
use ValidationException;
|
2023-10-12 20:59:00 +00:00
|
|
|
|
|
|
|
|
class Checkout extends ComponentBase
|
|
|
|
|
{
|
|
|
|
|
public function componentDetails()
|
|
|
|
|
{
|
|
|
|
|
return [
|
|
|
|
|
'name' => 'Checkout',
|
|
|
|
|
'description' => 'Checkout page'
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCreateOrder(){
|
|
|
|
|
$data = post();
|
|
|
|
|
$rules = [
|
|
|
|
|
'note' => 'required',
|
|
|
|
|
'address' => 'required',
|
2023-10-22 13:08:31 +00:00
|
|
|
'phone_custom' => 'required',
|
2023-10-12 20:59:00 +00:00
|
|
|
'items' => 'required',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$this->validateForm($data, $rules);
|
|
|
|
|
|
|
|
|
|
$objects = json_decode($data["items"], true);
|
|
|
|
|
if(count($objects) == 0){
|
|
|
|
|
Flash::error('Haryt ýok. Ýalňyşlyk');
|
|
|
|
|
return 500;
|
|
|
|
|
}
|
|
|
|
|
$order = new Orders;
|
|
|
|
|
$order->user_id = \Auth::user()->id;
|
|
|
|
|
$order->note = $data["note"];
|
|
|
|
|
$order->address = $data["address"];
|
2023-10-22 13:08:31 +00:00
|
|
|
$order->phone = $data["phone_custom"];
|
2023-10-12 20:59:00 +00:00
|
|
|
$order->status = "new";
|
|
|
|
|
$order->save();
|
|
|
|
|
|
2023-10-22 13:08:31 +00:00
|
|
|
$userPhone= \Auth::user()->username;
|
2023-10-12 20:59:00 +00:00
|
|
|
|
2023-10-25 16:09:40 +00:00
|
|
|
$this->sendSMS($userPhone, Message::trans('success.ordered'));
|
2023-10-22 13:08:31 +00:00
|
|
|
|
2023-10-12 20:59:00 +00:00
|
|
|
$orderItem = new OrderItems;
|
|
|
|
|
$orderItem->order_id = $order->id;
|
|
|
|
|
$orderItem->items = json_decode($data["items"]);
|
|
|
|
|
$orderItem->save();
|
|
|
|
|
|
2023-10-22 13:08:31 +00:00
|
|
|
|
2023-10-12 20:59:00 +00:00
|
|
|
for ($i = 0; $i < count($orderItem->items); $i++) {
|
|
|
|
|
$vendorSale = new VendorSales;
|
|
|
|
|
$vendorSale->order_id = $order->id;
|
|
|
|
|
$vendorSale->vendor_id = $orderItem->items[$i]["vendor"];
|
|
|
|
|
$vendorSale->product_id = $orderItem->items[$i]["item"];
|
|
|
|
|
$vendorSale->qty = $orderItem->items[$i]["qty"];
|
|
|
|
|
$vendorSale->price = $orderItem->items[$i]["price"];
|
|
|
|
|
$vendorSale->note = $data["note"];
|
|
|
|
|
$vendorSale->save();
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-22 13:08:31 +00:00
|
|
|
$vendorPhones = VendorSales::where("order_id", $order->id)->with("vendor")->groupBy("vendor_id")->get();
|
2023-10-12 20:59:00 +00:00
|
|
|
|
2023-10-22 13:08:31 +00:00
|
|
|
for ($x = 0; $x < count($vendorPhones); $x++) {
|
2023-10-25 16:09:40 +00:00
|
|
|
$this->sendSMS($vendorPhones[$x]->vendor->username, Message::trans('success.ordered.vendor'));
|
2023-10-22 13:08:31 +00:00
|
|
|
}
|
|
|
|
|
|
2023-10-12 20:59:00 +00:00
|
|
|
if ($order && $orderItem && $vendorSale){
|
|
|
|
|
Flash::success('Sargyt ugradyldy');
|
2023-10-25 16:09:40 +00:00
|
|
|
return [
|
|
|
|
|
'#checkoutMainDiv' => $this->renderPartial('@success')
|
|
|
|
|
];
|
2023-10-12 20:59:00 +00:00
|
|
|
}else{
|
|
|
|
|
Flash::error('Sargyt ugradylmady');
|
|
|
|
|
return 500;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-10-22 13:08:31 +00:00
|
|
|
|
|
|
|
|
protected function sendSMS($phone, $message){
|
|
|
|
|
|
|
|
|
|
$smsSender = new SmsSender();
|
|
|
|
|
$smsSender->phone = (string)'+993'.$phone;
|
|
|
|
|
$smsSender->message = strval($message);
|
|
|
|
|
$smsSender->save();
|
|
|
|
|
|
|
|
|
|
}
|
2023-10-12 20:59:00 +00:00
|
|
|
|
|
|
|
|
protected function validateForm($data, $rules) {
|
|
|
|
|
$validator = Validator::make($data, $rules);
|
|
|
|
|
|
|
|
|
|
if($validator->fails()) {
|
|
|
|
|
throw new ValidationException($validator);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|