Nuevos cambios hechos de diseño
This commit is contained in:
257
desarrollo2/app/Http/Controllers/Api/V2/OrderController.php
Normal file
257
desarrollo2/app/Http/Controllers/Api/V2/OrderController.php
Normal file
@@ -0,0 +1,257 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V2;
|
||||
|
||||
use App\Models\Address;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Order;
|
||||
use App\Models\Cart;
|
||||
use App\Models\Product;
|
||||
use App\Models\OrderDetail;
|
||||
use App\Models\Coupon;
|
||||
use App\Models\CouponUsage;
|
||||
use App\Models\BusinessSetting;
|
||||
use App\Models\User;
|
||||
use DB;
|
||||
use \App\Utility\NotificationUtility;
|
||||
use App\Models\CombinedOrder;
|
||||
use App\Http\Controllers\AffiliateController;
|
||||
|
||||
class OrderController extends Controller
|
||||
{
|
||||
public function store(Request $request, $set_paid = false)
|
||||
{
|
||||
|
||||
|
||||
if (get_setting('minimum_order_amount_check') == 1) {
|
||||
$subtotal = 0;
|
||||
foreach (Cart::where('user_id', auth()->user()->id)->get() as $key => $cartItem) {
|
||||
$product = Product::find($cartItem['product_id']);
|
||||
$subtotal += cart_product_price($cartItem, $product, false, false) * $cartItem['quantity'];
|
||||
}
|
||||
if ($subtotal < get_setting('minimum_order_amount')) {
|
||||
return $this->failed("You order amount is less then the minimum order amount");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$cartItems = Cart::where('user_id', auth()->user()->id)->get();
|
||||
|
||||
if ($cartItems->isEmpty()) {
|
||||
return response()->json([
|
||||
'combined_order_id' => 0,
|
||||
'result' => false,
|
||||
'message' => translate('Cart is Empty')
|
||||
]);
|
||||
}
|
||||
|
||||
$user = User::find(auth()->user()->id);
|
||||
|
||||
|
||||
$address = Address::where('id', $cartItems->first()->address_id)->first();
|
||||
$shippingAddress = [];
|
||||
if ($address != null) {
|
||||
$shippingAddress['name'] = $user->name;
|
||||
$shippingAddress['email'] = $user->email;
|
||||
$shippingAddress['address'] = $address->address;
|
||||
$shippingAddress['country'] = $address->country->name;
|
||||
$shippingAddress['state'] = $address->state->name;
|
||||
$shippingAddress['city'] = $address->city->name;
|
||||
$shippingAddress['postal_code'] = $address->postal_code;
|
||||
$shippingAddress['phone'] = $address->phone;
|
||||
if ($address->latitude || $address->longitude) {
|
||||
$shippingAddress['lat_lang'] = $address->latitude . ',' . $address->longitude;
|
||||
}
|
||||
}
|
||||
|
||||
$combined_order = new CombinedOrder;
|
||||
$combined_order->user_id = $user->id;
|
||||
$combined_order->shipping_address = json_encode($shippingAddress);
|
||||
$combined_order->save();
|
||||
|
||||
$seller_products = array();
|
||||
foreach ($cartItems as $cartItem) {
|
||||
$product_ids = array();
|
||||
$product = Product::find($cartItem['product_id']);
|
||||
if (isset($seller_products[$product->user_id])) {
|
||||
$product_ids = $seller_products[$product->user_id];
|
||||
}
|
||||
array_push($product_ids, $cartItem);
|
||||
$seller_products[$product->user_id] = $product_ids;
|
||||
}
|
||||
|
||||
foreach ($seller_products as $seller_product) {
|
||||
$order = new Order;
|
||||
$order->combined_order_id = $combined_order->id;
|
||||
$order->user_id = $user->id;
|
||||
$order->shipping_address = $combined_order->shipping_address;
|
||||
|
||||
// $order->shipping_type = $cartItems->first()->shipping_type;
|
||||
// if ($cartItems->first()->shipping_type == 'pickup_point') {
|
||||
// $order->pickup_point_id = $cartItems->first()->pickup_point;
|
||||
// }
|
||||
|
||||
$order->order_from = 'app';
|
||||
$order->payment_type = $request->payment_type;
|
||||
$order->delivery_viewed = '0';
|
||||
$order->payment_status_viewed = '0';
|
||||
$order->code = date('Ymd-His') . rand(10, 99);
|
||||
$order->date = strtotime('now');
|
||||
if ($set_paid) {
|
||||
$order->payment_status = 'paid';
|
||||
} else {
|
||||
$order->payment_status = 'unpaid';
|
||||
}
|
||||
|
||||
$order->save();
|
||||
|
||||
$subtotal = 0;
|
||||
$tax = 0;
|
||||
$shipping = 0;
|
||||
$coupon_discount = 0;
|
||||
|
||||
//Order Details Storing
|
||||
foreach ($seller_product as $cartItem) {
|
||||
$product = Product::find($cartItem['product_id']);
|
||||
|
||||
$subtotal += cart_product_price($cartItem, $product, false, false) * $cartItem['quantity'];
|
||||
$tax += cart_product_tax($cartItem, $product, false) * $cartItem['quantity'];
|
||||
$coupon_discount += $cartItem['discount'];
|
||||
|
||||
$product_variation = $cartItem['variation'];
|
||||
|
||||
$product_stock = $product->stocks->where('variant', $product_variation)->first();
|
||||
if ($product->digital != 1 && $cartItem['quantity'] > $product_stock->qty) {
|
||||
$order->delete();
|
||||
$combined_order->delete();
|
||||
return response()->json([
|
||||
'combined_order_id' => 0,
|
||||
'result' => false,
|
||||
'message' => translate('The requested quantity is not available for ') . $product->name
|
||||
]);
|
||||
} elseif ($product->digital != 1) {
|
||||
$product_stock->qty -= $cartItem['quantity'];
|
||||
$product_stock->save();
|
||||
}
|
||||
|
||||
$order_detail = new OrderDetail;
|
||||
$order_detail->order_id = $order->id;
|
||||
$order_detail->seller_id = $product->user_id;
|
||||
$order_detail->product_id = $product->id;
|
||||
$order_detail->variation = $product_variation;
|
||||
$order_detail->price = cart_product_price($cartItem, $product, false, false) * $cartItem['quantity'];
|
||||
$order_detail->tax = cart_product_tax($cartItem, $product, false) * $cartItem['quantity'];
|
||||
$order_detail->shipping_type = $cartItem['shipping_type'];
|
||||
$order_detail->product_referral_code = $cartItem['product_referral_code'];
|
||||
$order_detail->shipping_cost = $cartItem['shipping_cost'];
|
||||
|
||||
$shipping += $order_detail->shipping_cost;
|
||||
|
||||
// if ($cartItem['shipping_type'] == 'pickup_point') {
|
||||
// $order_detail->pickup_point_id = $cartItem['pickup_point'];
|
||||
// }
|
||||
//End of storing shipping cost
|
||||
if (addon_is_activated('club_point')) {
|
||||
$order_detail->earn_point = $product->earn_point;
|
||||
}
|
||||
|
||||
$order_detail->quantity = $cartItem['quantity'];
|
||||
$order_detail->save();
|
||||
|
||||
$product->num_of_sale = $product->num_of_sale + $cartItem['quantity'];
|
||||
$product->save();
|
||||
|
||||
$order->seller_id = $product->user_id;
|
||||
//======== Added By Kiron ==========
|
||||
$order->shipping_type = $cartItem['shipping_type'];
|
||||
if ($cartItem['shipping_type'] == 'pickup_point') {
|
||||
$order->pickup_point_id = $cartItem['pickup_point'];
|
||||
}
|
||||
if ($cartItem['shipping_type'] == 'carrier') {
|
||||
$order->carrier_id = $cartItem['carrier_id'];
|
||||
}
|
||||
|
||||
if ($product->added_by == 'seller' && $product->user->seller != null) {
|
||||
$seller = $product->user->seller;
|
||||
$seller->num_of_sale += $cartItem['quantity'];
|
||||
$seller->save();
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (addon_is_activated('affiliate_system')) {
|
||||
if ($order_detail->product_referral_code) {
|
||||
$referred_by_user = User::where('referral_code', $order_detail->product_referral_code)->first();
|
||||
|
||||
$affiliateController = new AffiliateController;
|
||||
$affiliateController->processAffiliateStats($referred_by_user->id, 0, $order_detail->quantity, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$order->grand_total = $subtotal + $tax + $shipping;
|
||||
|
||||
if ($seller_product[0]->coupon_code != null) {
|
||||
// if (Session::has('club_point')) {
|
||||
// $order->club_point = Session::get('club_point');
|
||||
// }
|
||||
$order->coupon_discount = $coupon_discount;
|
||||
$order->grand_total -= $coupon_discount;
|
||||
|
||||
$coupon_usage = new CouponUsage;
|
||||
$coupon_usage->user_id = $user->id;
|
||||
$coupon_usage->coupon_id = Coupon::where('code', $seller_product[0]->coupon_code)->first()->id;
|
||||
$coupon_usage->save();
|
||||
}
|
||||
|
||||
$combined_order->grand_total += $order->grand_total;
|
||||
|
||||
if (strpos($request->payment_type, "manual_payment_") !== false) { // if payment type like manual_payment_1 or manual_payment_25 etc)
|
||||
|
||||
$order->manual_payment = 1;
|
||||
$order->save();
|
||||
}
|
||||
|
||||
$order->save();
|
||||
}
|
||||
$combined_order->save();
|
||||
|
||||
|
||||
|
||||
Cart::where('user_id', auth()->user()->id)->delete();
|
||||
|
||||
if (
|
||||
$request->payment_type == 'cash_on_delivery'
|
||||
|| $request->payment_type == 'wallet'
|
||||
|| strpos($request->payment_type, "manual_payment_") !== false // if payment type like manual_payment_1 or manual_payment_25 etc
|
||||
) {
|
||||
NotificationUtility::sendOrderPlacedNotification($order);
|
||||
}
|
||||
|
||||
|
||||
return response()->json([
|
||||
'combined_order_id' => $combined_order->id,
|
||||
'result' => true,
|
||||
'message' => translate('Your order has been placed successfully')
|
||||
]);
|
||||
}
|
||||
|
||||
public function order_cancel($id)
|
||||
{
|
||||
$order = Order::where('id', $id)->where('user_id', auth()->user()->id)->first();
|
||||
if ($order && ($order->delivery_status == 'pending' && $order->payment_status == 'unpaid')) {
|
||||
$order->delivery_status = 'cancelled';
|
||||
$order->save();
|
||||
|
||||
foreach ($order->orderDetails as $key => $orderDetail) {
|
||||
$orderDetail->delivery_status = 'cancelled';
|
||||
$orderDetail->save();
|
||||
product_restock($orderDetail);
|
||||
}
|
||||
|
||||
return $this->success(translate('Order has been canceled successfully'));
|
||||
} else {
|
||||
return $this->failed(translate('Something went wrong'));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user