Current File : /home/tradevaly/www/app/Http/Controllers/User/CheckOutController.php |
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\Cart;
use App\Models\User;
use App\Models\Country;
use App\Models\Order;
use App\Models\Product;
use App\Models\VendorOrder;
use App\Models\OrderItem;
use App\Models\Transaction;
use App\Models\AdminNotification;
use App\Models\ProductInvoices;
use Brian2694\Toastr\Facades\Toastr;
use App\Notifications\OrderSuccess;
use Illuminate\Support\Facades\Notification;
use Illuminate\Http\Request;
use Carbon\Carbon;
use shurjopayv2\ShurjopayLaravelPackage8\Http\Controllers\ShurjopayController;
class CheckOutController extends Controller
{
public function index(){
$user = User::where('id',auth()->id())->first();
$countries = Country::all();
$carts = Cart::where('user_id',auth()->id())->get();
if($carts->count()<1)
{
Toastr::warning('Please select a product');
return redirect()->route('products');
}else{
return view('user.pages.product.checkOut',compact('carts','user','countries'));
}
}
public function checkout(Request $request)
{
$carts = Cart::where('user_id',auth()->id())->get();
if($carts->count()<1)
{
Toastr::warning('There is No item in cart');
return redirect()->route('products');
}
else
{
$request->validate([
'name'=>'required',
'phone'=>'required|min:9',
'city'=>'required',
'country'=>'required',
'address_1'=>'required',
'email'=>'required|email',
]);
$name = $request->name;
$phone = $request->phone;
$email = $request->email;
$city = $request->city;
$country = $request->country;
$payment_type= $request->payment_type;
$address_1 = $request->address_1;
$address_2 = $request->address_2;
$randomText = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz"), 0, 7);
$order_id = rand(100000, 999999).$randomText;
$total_amount = 0;
$total_discount = 0;
$total_quantity = $carts->sum('quantity');
// calculate total
foreach($carts as $cart)
{
$total = ($cart->product->price * $cart->quantity);
$total_amount = $total_amount+ $total;
$total_discount = $total_discount + (($cart->product->discount_price/100) * $total);
}
// save transaction
$transaction = new Transaction();
$transaction->order_id = $order_id;
$transaction->total_amount = $total_amount;
$transaction->discount_amount = $total_discount;
$transaction->user_id = auth()->id();
$transaction->payment_type = $payment_type;
$transaction->order_from = 'product';
$transaction->order_status = 'new';
$transaction->save();
// save order
$order = new Order();
$order->order_id = $order_id;
$order->total_amount = $total_amount;
$order->total_discount=$total_discount;
$order->total_qty = $total_quantity;
$order->payment_status = "unpaid";
$order->payment_type = $payment_type;
$order->transaction_id = $transaction->id;
$order->buyer_id = auth()->id();
$order->name= $name;
$order->email=$email;
$order->address_1= $address_1;
$order->address_2= $address_2;
$order->country_id= $country;
$order->city=$city;
$order->phone= $phone;
$order->save();
// save order items
foreach ($carts as $cart)
{
$order_item = new OrderItem();
$order_item->order_id = $order_id;
$order_item->product_id= $cart->product_id;
$order_item->product_title=$cart->product->title;
$order_item->product_price=$cart->product->price;
$order_item->discount_price=$cart->product->discount_price/100 * $cart->product->price;
$order_item->quantity=$cart->quantity;
$order_item->vendor_id=$cart->product->supplier_id;
$order_item->status='new';
$order_item->save();
$vendor = VendorOrder::where('order_id',$order_id)->where('vendor_id',$cart->product->supplier_id)->first();
if(isset($vendor))
{
$total = $vendor->total_amount + ($cart->product->price * $cart->quantity);
$vendor->total_amount = $total;
$discount = $vendor->total_discount + ((($cart->product->discount_price/100)*($cart->product->price*$cart->quantity)));
$vendor->total_discount = $discount;
$vendor->save();
}else
{
$vendor_order = new VendorOrder();
$vendor_order->order_id=$order_id;
$vendor_order->vendor_id=$cart->product->supplier_id;
$vendor_order->total_amount=$cart->product->price * $cart->quantity;
$vendor_order->total_discount=(($cart->product->discount_price/100)*($cart->product->price*$cart->quantity));
$vendor_order->status='new';
$vendor_order->save();
$notification = New AdminNotification();
$notification->user_id=auth()->id();
$notification->type="order";
$notification->message="Order a New Product";
$notification->admin_reciver="yes";
$notification->reciver=$cart->product->supplier_id;
$notification->data=$order_id;
$notification->save();
}
$cart->delete();
}
$invoice = new ProductInvoices();
$invoice->order_id = $order_id;
$invoice->buyer_id = auth()->id();
$invoice->amount = $total_amount;
$invoice->discount_price = $total_discount;
$invoice->status = "unpaid";
$invoice->transaction_id=$transaction->id;
$invoice->payment_method=$payment_type;
$invoice->payment_type=$payment_type;
$invoice->payment_date = Carbon::now();
$invoice->save();
if($payment_type=="online")
{
$info = array(
'currency' => 'BDT',
// 'amount' => $total_amount - $total_discount,
'amount' => 1,
'order_id' => $order_id,
'discsount_amount' => 0,
'disc_percent' => 0,
'client_ip' => 'N\L',
'customer_name' => $name,
'customer_phone' => $phone,
'email' => $email,
'customer_address' => $address_1,
'customer_city' => $city,
'customer_state' => "N/L",
'customer_postcode' => "N/L",
'customer_country' => Country::find($country)->name
);
$shurjopay_service = new ShurjopayController();
return $shurjopay_service->checkout($info);
}
else{
$invoiceData = [
'name' => auth()->user()->name,
'amount' => $total_amount,
'discount' => $total_discount,
'payment' =>"unpaid",
'order_number' => $order_id,
'discount' => 0,
'transaction_id' => $transaction->id,
];
Notification::route('mail', 'rakib042002@gmail.com')->notify(new OrderSuccess($invoiceData));
// Notification::route('mail', $email)->notify(new OrderSuccess($invoiceData));
// Notification::route('mail', 'tradevalyb2b@gmail.com')->notify(new OrderSuccess($invoiceData));
Toastr::success('Order Successfully Placed');
return redirect()->route('products');
}
}
}
public function buy($id)
{
$iscart = Cart::where('user_id',auth()->id())->where('product_id',$id)->count();
if(auth()->user()->type == "seller"){
Toastr::warning('Warning!','You Cant buy your own product!');
return back();
}else{
if($iscart>0)
{
$cart = Cart::where('user_id',auth()->id())->where('product_id',$id)->latest()->first();
$cart->quantity = $cart->quantity + 1;
$cart->save();
return redirect()->route('user.check.index');
}
else{
$cart = new Cart();
$cart->product_id = $id;
$cart->user_id = auth()->id();
$cart->quantity = 1;
$cart->save();
return redirect()->route('user.check.index');
}
}
}
}