You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							1020 lines
						
					
					
						
							44 KiB
						
					
					
				
			
		
		
	
	
							1020 lines
						
					
					
						
							44 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers\Api\V1;
 | 
						|
 | 
						|
use App\Models\Food;
 | 
						|
use App\Models\Zone;
 | 
						|
use App\Models\Order;
 | 
						|
use App\Models\Coupon;
 | 
						|
use App\Models\Refund;
 | 
						|
use App\Models\Vehicle;
 | 
						|
use App\Models\Restaurant;
 | 
						|
use App\Models\OrderDetail;
 | 
						|
use App\Models\ItemCampaign;
 | 
						|
use App\Models\RefundReason;
 | 
						|
use App\Models\Subscription;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use App\CentralLogics\Helpers;
 | 
						|
use App\Models\BusinessSetting;
 | 
						|
use App\CentralLogics\OrderLogic;
 | 
						|
use App\Models\OrderCancelReason;
 | 
						|
use App\CentralLogics\CouponLogic;
 | 
						|
use Illuminate\Support\Facades\DB;
 | 
						|
use App\CentralLogics\CustomerLogic;
 | 
						|
use App\Http\Controllers\Controller;
 | 
						|
 | 
						|
use App\Models\SubscriptionSchedule;
 | 
						|
use Illuminate\Support\Facades\Mail;
 | 
						|
use Illuminate\Support\Facades\Validator;
 | 
						|
use Grimzy\LaravelMysqlSpatial\Types\Point;
 | 
						|
use Illuminate\Support\Facades\Http;
 | 
						|
 | 
						|
class OrderController extends Controller
 | 
						|
{
 | 
						|
    public function track_order(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'order_id' => 'required'
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
        $order = Order::with(['restaurant.restaurant_sub', 'refund', 'delivery_man.rating','subscription'])->withCount('details')->where(['id' => $request['order_id'], 'user_id' => $request->user()->id])->Notpos()->first();
 | 
						|
        if($order)
 | 
						|
        {
 | 
						|
            $order['restaurant'] = $order['restaurant']?Helpers::restaurant_data_formatting($order['restaurant']):$order['restaurant'];
 | 
						|
            $order['delivery_address'] = $order['delivery_address']?json_decode($order['delivery_address']):$order['delivery_address'];
 | 
						|
            $order['delivery_man'] = $order['delivery_man']?Helpers::deliverymen_data_formatting([$order['delivery_man']]):$order['delivery_man'];
 | 
						|
 | 
						|
            unset($order['details']);
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'schedule_at', 'message' => translate('messages.not_found')]
 | 
						|
                ]
 | 
						|
            ], 404);
 | 
						|
        }
 | 
						|
        return response()->json($order, 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function place_order(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'order_amount' => 'required',
 | 
						|
            'payment_method'=>'required|in:cash_on_delivery,digital_payment,wallet',
 | 
						|
            'order_type' => 'required|in:take_away,delivery',
 | 
						|
            'restaurant_id' => 'required',
 | 
						|
            'distance' => 'required_if:order_type,delivery',
 | 
						|
            'address' => 'required_if:order_type,delivery',
 | 
						|
            'longitude' => 'required_if:order_type,delivery',
 | 
						|
            'latitude' => 'required_if:order_type,delivery',
 | 
						|
            'dm_tips' => 'nullable|numeric'
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        if($request->payment_method == 'wallet' && Helpers::get_business_settings('wallet_status', false) != 1)
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'payment_method', 'message' => translate('messages.customer_wallet_disable_warning')]
 | 
						|
                ]
 | 
						|
            ], 203);
 | 
						|
        }
 | 
						|
        $coupon = null;
 | 
						|
        $delivery_charge = null;
 | 
						|
        $free_delivery_by = null;
 | 
						|
        $coupon_created_by = null;
 | 
						|
        $schedule_at = $request->schedule_at?\Carbon\Carbon::parse($request->schedule_at):now();
 | 
						|
        if($request->schedule_at && $schedule_at < now())
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order_time', 'message' => translate('messages.you_can_not_schedule_a_order_in_past')]
 | 
						|
                ]
 | 
						|
            ], 406);
 | 
						|
        }
 | 
						|
        $restaurant = Restaurant::with(['discount', 'restaurant_sub'])->selectRaw('*, IF(((select count(*) from `restaurant_schedule` where `restaurants`.`id` = `restaurant_schedule`.`restaurant_id` and `restaurant_schedule`.`day` = '.$schedule_at->format('w').' and `restaurant_schedule`.`opening_time` < "'.$schedule_at->format('H:i:s').'" and `restaurant_schedule`.`closing_time` >"'.$schedule_at->format('H:i:s').'") > 0), true, false) as open')->where('id', $request->restaurant_id)->first();
 | 
						|
 | 
						|
        if(!$restaurant)
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order_time', 'message' => translate('messages.restaurant_not_found')]
 | 
						|
                ]
 | 
						|
            ], 404);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        $rest_sub=$restaurant->restaurant_sub;
 | 
						|
        if ($restaurant->restaurant_model == 'subscription' && isset($rest_sub)) {
 | 
						|
            if($rest_sub->max_order != "unlimited" && $rest_sub->max_order <= 0){
 | 
						|
                return response()->json([
 | 
						|
                    'errors' => [
 | 
						|
                        ['code' => 'order-confirmation-error', 'message' => translate('messages.Sorry_the_restaurant_is_unable_to_take_any_order_!')]
 | 
						|
                    ]
 | 
						|
                ], 403);
 | 
						|
            }
 | 
						|
        } elseif( $restaurant->restaurant_model == 'unsubscribed'){
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order-confirmation-model', 'message' => translate('messages.Sorry_the_restaurant_is_unable_to_take_any_order_!')]
 | 
						|
                ]
 | 
						|
            ], 403);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        if($request->schedule_at && !$restaurant->schedule_order)
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'schedule_at', 'message' => translate('messages.schedule_order_not_available')]
 | 
						|
                ]
 | 
						|
            ], 406);
 | 
						|
        }
 | 
						|
 | 
						|
        if($restaurant->open == false && !$request->subscription_order)
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order_time', 'message' => translate('messages.restaurant_is_closed_at_order_time')]
 | 
						|
                ]
 | 
						|
            ], 406);
 | 
						|
        }
 | 
						|
 | 
						|
        if ($request['coupon_code']) {
 | 
						|
            $coupon = Coupon::active()->where(['code' => $request['coupon_code']])->first();
 | 
						|
            if (isset($coupon)) {
 | 
						|
                $staus = CouponLogic::is_valide($coupon, $request->user()->id ,$request['restaurant_id']);
 | 
						|
                if($staus==407)
 | 
						|
                {
 | 
						|
                    return response()->json([
 | 
						|
                        'errors' => [
 | 
						|
                            ['code' => 'coupon', 'message' => translate('messages.coupon_expire')]
 | 
						|
                        ]
 | 
						|
                    ], 407);
 | 
						|
                }
 | 
						|
                else if($staus==408)
 | 
						|
                {
 | 
						|
                    return response()->json([
 | 
						|
                        'errors' => [
 | 
						|
                            ['code' => 'coupon', 'message' => translate('messages.You_are_not_eligible_for_this_coupon')]
 | 
						|
                        ]
 | 
						|
                    ], 403);
 | 
						|
                }
 | 
						|
                else if($staus==406)
 | 
						|
                {
 | 
						|
                    return response()->json([
 | 
						|
                        'errors' => [
 | 
						|
                            ['code' => 'coupon', 'message' => translate('messages.coupon_usage_limit_over')]
 | 
						|
                        ]
 | 
						|
                    ], 406);
 | 
						|
                }
 | 
						|
                else if($staus==404)
 | 
						|
                {
 | 
						|
                    return response()->json([
 | 
						|
                        'errors' => [
 | 
						|
                            ['code' => 'coupon', 'message' => translate('messages.not_found')]
 | 
						|
                        ]
 | 
						|
                    ], 404);
 | 
						|
                }
 | 
						|
 | 
						|
                $coupon_created_by =$coupon->created_by;
 | 
						|
                if($coupon->coupon_type == 'free_delivery')
 | 
						|
                {
 | 
						|
                    $delivery_charge = 0;
 | 
						|
                    $free_delivery_by =  $coupon_created_by;
 | 
						|
                    $coupon_created_by = null;
 | 
						|
                    // $coupon = null;
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                return response()->json([
 | 
						|
                    'errors' => [
 | 
						|
                        ['code' => 'coupon', 'message' => translate('messages.not_found')]
 | 
						|
                    ]
 | 
						|
                ], 404);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        if(isset($coupon))
 | 
						|
        {
 | 
						|
            $coupon->increment('total_uses');
 | 
						|
        }
 | 
						|
        if(isset($coupon) && $coupon->coupon_type == 'free_delivery')
 | 
						|
        {
 | 
						|
            $coupon = null;
 | 
						|
        }
 | 
						|
 | 
						|
        $per_km_shipping_charge = 0;
 | 
						|
        $minimum_shipping_charge = 0;
 | 
						|
        $maximum_shipping_charge =  0;
 | 
						|
        $max_cod_order_amount_value=  0;
 | 
						|
        $increased=0;
 | 
						|
        $distance_data = $request->distance;
 | 
						|
 | 
						|
        $data = Vehicle::active()->
 | 
						|
        where(function ($query) use ($distance_data) {
 | 
						|
            $query->where('starting_coverage_area', '<=', $distance_data)->where('maximum_coverage_area', '>=', $distance_data)
 | 
						|
            ->orWhere(function ($query) use ($distance_data) {
 | 
						|
                $query->where('starting_coverage_area', '>=', $distance_data);
 | 
						|
            });
 | 
						|
        })
 | 
						|
            ->orderBy('starting_coverage_area')->first();
 | 
						|
 | 
						|
 | 
						|
        $extra_charges = (float) (isset($data) ? $data->extra_charges  : 0);
 | 
						|
        $vehicle_id= (isset($data) ? $data->id  : null);
 | 
						|
        if($request->latitude && $request->longitude)
 | 
						|
        {
 | 
						|
            $point = new Point($request->latitude,$request->longitude);
 | 
						|
            $zone = Zone::where('id', $restaurant->zone_id)->contains('coordinates', $point)->first();
 | 
						|
            if(!$zone)
 | 
						|
            {
 | 
						|
                $errors = [];
 | 
						|
                array_push($errors, ['code' => 'coordinates', 'message' => translate('messages.out_of_coverage')]);
 | 
						|
                return response()->json([
 | 
						|
                    'errors' => $errors
 | 
						|
                ], 403);
 | 
						|
            }
 | 
						|
            if( $zone->per_km_shipping_charge && $zone->minimum_shipping_charge ) {
 | 
						|
                $per_km_shipping_charge = $zone->per_km_shipping_charge;
 | 
						|
                $minimum_shipping_charge = $zone->minimum_shipping_charge;
 | 
						|
                $maximum_shipping_charge = $zone->maximum_shipping_charge;
 | 
						|
                $max_cod_order_amount_value= $zone->max_cod_order_amount;
 | 
						|
                if($zone->increased_delivery_fee_status == 1){
 | 
						|
                    $increased=$zone->increased_delivery_fee ?? 0;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        if($request['order_type'] != 'take_away' && !$restaurant->free_delivery &&  !isset($delivery_charge) && ($restaurant->restaurant_model == 'subscription' && isset($restaurant->restaurant_sub) && $restaurant->restaurant_sub->self_delivery == 1  || $restaurant->restaurant_model == 'commission' &&  $restaurant->self_delivery_system == 1 ))
 | 
						|
        {
 | 
						|
                $per_km_shipping_charge = $restaurant->per_km_shipping_charge;
 | 
						|
                $minimum_shipping_charge = $restaurant->minimum_shipping_charge;
 | 
						|
                $maximum_shipping_charge = $restaurant->maximum_shipping_charge;
 | 
						|
                $extra_charges= 0;
 | 
						|
                $vehicle_id=null;
 | 
						|
                $increased=0;
 | 
						|
        }
 | 
						|
 | 
						|
        if($restaurant->free_delivery || $free_delivery_by == 'vendor' ){
 | 
						|
            $per_km_shipping_charge = $restaurant->per_km_shipping_charge;
 | 
						|
            $minimum_shipping_charge = $restaurant->minimum_shipping_charge;
 | 
						|
            $maximum_shipping_charge = $restaurant->maximum_shipping_charge;
 | 
						|
            $extra_charges= 0;
 | 
						|
            $vehicle_id=null;
 | 
						|
            $increased=0;
 | 
						|
        }
 | 
						|
 | 
						|
        $original_delivery_charge = ($request->distance * $per_km_shipping_charge > $minimum_shipping_charge) ? $request->distance * $per_km_shipping_charge + $extra_charges  : $minimum_shipping_charge + $extra_charges;
 | 
						|
 | 
						|
        if($request['order_type'] == 'take_away')
 | 
						|
        {
 | 
						|
            $per_km_shipping_charge = 0;
 | 
						|
            $minimum_shipping_charge = 0;
 | 
						|
            $maximum_shipping_charge = 0;
 | 
						|
            $extra_charges= 0;
 | 
						|
            $distance_data = 0;
 | 
						|
            $vehicle_id=null;
 | 
						|
            $increased=0;
 | 
						|
            $original_delivery_charge =0;
 | 
						|
        }
 | 
						|
 | 
						|
        if ( $maximum_shipping_charge  > $minimum_shipping_charge  && $original_delivery_charge >  $maximum_shipping_charge ){
 | 
						|
            $original_delivery_charge = $maximum_shipping_charge;
 | 
						|
        }
 | 
						|
        else{
 | 
						|
            $original_delivery_charge = $original_delivery_charge;
 | 
						|
        }
 | 
						|
 | 
						|
        if(!isset($delivery_charge)){
 | 
						|
            $delivery_charge = ($request->distance * $per_km_shipping_charge > $minimum_shipping_charge) ? $request->distance * $per_km_shipping_charge : $minimum_shipping_charge;
 | 
						|
            if ( $maximum_shipping_charge  > $minimum_shipping_charge  && $delivery_charge + $extra_charges >  $maximum_shipping_charge ){
 | 
						|
                $delivery_charge =$maximum_shipping_charge;
 | 
						|
            }
 | 
						|
            else{
 | 
						|
                $delivery_charge =$extra_charges + $delivery_charge;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        if($increased > 0 ){
 | 
						|
            if($delivery_charge > 0){
 | 
						|
                $increased_fee = ($delivery_charge * $increased) / 100;
 | 
						|
                $delivery_charge = $delivery_charge + $increased_fee;
 | 
						|
            }
 | 
						|
            if($original_delivery_charge > 0){
 | 
						|
                $increased_fee = ($original_delivery_charge * $increased) / 100;
 | 
						|
                $original_delivery_charge = $original_delivery_charge + $increased_fee;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        $address = [
 | 
						|
            'contact_person_name' => $request->contact_person_name?$request->contact_person_name:$request->user()->f_name.' '.$request->user()->f_name,
 | 
						|
            'contact_person_number' => $request->contact_person_number?$request->contact_person_number:$request->user()->phone,
 | 
						|
            'address_type' => $request->address_type?$request->address_type:'Delivery',
 | 
						|
            'address' => $request->address,
 | 
						|
            'floor' => $request->floor,
 | 
						|
            'road' => $request->road,
 | 
						|
            'house' => $request->house,
 | 
						|
            'longitude' => (string)$request->longitude,
 | 
						|
            'latitude' => (string)$request->latitude,
 | 
						|
        ];
 | 
						|
 | 
						|
        $total_addon_price = 0;
 | 
						|
        $product_price = 0;
 | 
						|
        $restaurant_discount_amount = 0;
 | 
						|
 | 
						|
        $order_details = [];
 | 
						|
        $order = new Order();
 | 
						|
        $order->id = 100000 + Order::all()->count() + 1;
 | 
						|
        if (Order::find($order->id)) {
 | 
						|
            $order->id = Order::orderBy('id','desc')->first('id')->id + 1;
 | 
						|
        }
 | 
						|
        $order->distance = $distance_data;
 | 
						|
        $order->user_id = $request->user()->id;
 | 
						|
        $order->order_amount = $request['order_amount'];
 | 
						|
        $order->payment_status = $request['payment_method']=='wallet'?'paid':'unpaid';
 | 
						|
        $order->order_status = $request['payment_method']=='digital_payment'?'pending':($request->payment_method == 'wallet'?'confirmed':'pending');
 | 
						|
        $order->coupon_code = $request['coupon_code'];
 | 
						|
        $order->payment_method = $request->payment_method;
 | 
						|
        $order->transaction_reference = null;
 | 
						|
        $order->order_note = $request['order_note'];
 | 
						|
        $order->order_type = $request['order_type'];
 | 
						|
        $order->restaurant_id = $request['restaurant_id'];
 | 
						|
        $order->delivery_charge = round($delivery_charge, config('round_up_to_digit'))??0;
 | 
						|
        $order->original_delivery_charge = round($original_delivery_charge, config('round_up_to_digit'));
 | 
						|
        $order->delivery_address = json_encode($address);
 | 
						|
        $order->schedule_at = $schedule_at;
 | 
						|
        $order->scheduled = $request->schedule_at?1:0;
 | 
						|
        $order->otp = rand(1000, 9999);
 | 
						|
        $order->zone_id = $restaurant->zone_id;
 | 
						|
        $dm_tips_manage_status = BusinessSetting::where('key', 'dm_tips_status')->first()->value;
 | 
						|
        if ($dm_tips_manage_status == 1) {
 | 
						|
            $order->dm_tips = $request->dm_tips ?? 0;
 | 
						|
        } else {
 | 
						|
            $order->dm_tips = 0;
 | 
						|
        }
 | 
						|
        $order->vehicle_id = $vehicle_id;
 | 
						|
        $order->pending = now();
 | 
						|
        $order->confirmed = $request->payment_method == 'wallet' ? now() : null;
 | 
						|
        $order->created_at = now();
 | 
						|
        $order->updated_at = now();
 | 
						|
        foreach ($request['cart'] as $c) {
 | 
						|
            if ($c['item_campaign_id'] != null) {
 | 
						|
 | 
						|
                $product = ItemCampaign::active()->find($c['item_campaign_id']);
 | 
						|
                if ($product) {
 | 
						|
                    $product_variations = json_decode($product->variations, true);
 | 
						|
                    $variations=[];
 | 
						|
                    if (count($product_variations)) {
 | 
						|
                        $variation_data = Helpers::get_varient($product_variations, $c['variations']);
 | 
						|
                        $price = $product['price'] + $variation_data['price'];
 | 
						|
                        $variations = $variation_data['variations'];
 | 
						|
                    } else {
 | 
						|
                        $price = $product['price'];
 | 
						|
                    }
 | 
						|
                    $product->tax = $restaurant->tax;
 | 
						|
                    $product = Helpers::product_data_formatting($product, false, false, app()->getLocale());
 | 
						|
                    $addon_data = Helpers::calculate_addon_price(\App\Models\AddOn::whereIn('id',$c['add_on_ids'])->get(), $c['add_on_qtys']);
 | 
						|
 | 
						|
                    $or_d = [
 | 
						|
                        'food_id' => null,
 | 
						|
                        'item_campaign_id' => $c['item_campaign_id'],
 | 
						|
                        'food_details' => json_encode($product),
 | 
						|
                        'quantity' => $c['quantity'],
 | 
						|
                        'price' => round($price, config('round_up_to_digit')),
 | 
						|
                        'tax_amount' => Helpers::tax_calculate($product, $price),
 | 
						|
                        'discount_on_food' => Helpers::product_discount_calculate($product, $price, $restaurant),
 | 
						|
                        'discount_type' => 'discount_on_product',
 | 
						|
                        'variation' => json_encode($variations),
 | 
						|
                        'add_ons' => json_encode($addon_data['addons']),
 | 
						|
                        'total_add_on_price' => $addon_data['total_add_on_price'],
 | 
						|
                        'created_at' => now(),
 | 
						|
                        'updated_at' => now()
 | 
						|
                    ];
 | 
						|
                    $order_details[] = $or_d;
 | 
						|
                    $total_addon_price += $or_d['total_add_on_price'];
 | 
						|
                    $product_price += $price*$or_d['quantity'];
 | 
						|
                    $restaurant_discount_amount += $or_d['discount_on_food']*$or_d['quantity'];
 | 
						|
                } else {
 | 
						|
                    return response()->json([
 | 
						|
                        'errors' => [
 | 
						|
                            ['code' => 'campaign', 'message' => translate('messages.product_unavailable_warning')]
 | 
						|
                        ]
 | 
						|
                    ], 404);
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                $product = Food::active()->find($c['food_id']);
 | 
						|
                if ($product) {
 | 
						|
                        $product_variations = json_decode($product->variations, true);
 | 
						|
                        $variations=[];
 | 
						|
                        if (count($product_variations)) {
 | 
						|
                            $variation_data = Helpers::get_varient($product_variations, $c['variations']);
 | 
						|
                            $price = $product['price'] + $variation_data['price'];
 | 
						|
                            $variations =  $variation_data['variations'];
 | 
						|
                        } else {
 | 
						|
                        $price = $product['price'];
 | 
						|
                    }
 | 
						|
                    $product->tax = $restaurant->tax;
 | 
						|
                    $product = Helpers::product_data_formatting($product, false, false, app()->getLocale());
 | 
						|
                    $addon_data = Helpers::calculate_addon_price(\App\Models\AddOn::whereIn('id',$c['add_on_ids'])->get(), $c['add_on_qtys']);
 | 
						|
                    $or_d = [
 | 
						|
                        'food_id' => $c['food_id'],
 | 
						|
                        'item_campaign_id' => null,
 | 
						|
                        'food_details' => json_encode($product),
 | 
						|
                        'quantity' => $c['quantity'],
 | 
						|
                        'price' => round($price, config('round_up_to_digit')),
 | 
						|
                        'tax_amount' => round(Helpers::tax_calculate($product, $price), config('round_up_to_digit')),
 | 
						|
                        'discount_on_food' => Helpers::product_discount_calculate($product, $price, $restaurant),
 | 
						|
                        'discount_type' => 'discount_on_product',
 | 
						|
                        'variation' => json_encode($variations),
 | 
						|
                        'add_ons' => json_encode($addon_data['addons']),
 | 
						|
                        'total_add_on_price' => round($addon_data['total_add_on_price'], config('round_up_to_digit')),
 | 
						|
                        'created_at' => now(),
 | 
						|
                        'updated_at' => now()
 | 
						|
                    ];
 | 
						|
                    $total_addon_price += $or_d['total_add_on_price'];
 | 
						|
                    $product_price += $price*$or_d['quantity'];
 | 
						|
                    $restaurant_discount_amount += $or_d['discount_on_food']*$or_d['quantity'];
 | 
						|
                    $order_details[] = $or_d;
 | 
						|
                } else {
 | 
						|
                    return response()->json([
 | 
						|
                        'errors' => [
 | 
						|
                            ['code' => 'food', 'message' => translate('messages.product_unavailable_warning')]
 | 
						|
                        ]
 | 
						|
                    ], 404);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
      $order->discount_on_product_by = 'vendor';
 | 
						|
 | 
						|
        $restaurant_discount = Helpers::get_restaurant_discount($restaurant);
 | 
						|
        if(isset($restaurant_discount))
 | 
						|
        {
 | 
						|
            $order->discount_on_product_by = 'admin';
 | 
						|
 | 
						|
            if($product_price + $total_addon_price < $restaurant_discount['min_purchase'])
 | 
						|
            {
 | 
						|
                $restaurant_discount_amount = 0;
 | 
						|
            }
 | 
						|
 | 
						|
            if($restaurant_discount_amount > $restaurant_discount['max_discount'])
 | 
						|
            {
 | 
						|
                $restaurant_discount_amount = $restaurant_discount['max_discount'];
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $coupon_discount_amount = $coupon ? CouponLogic::get_discount($coupon, $product_price + $total_addon_price - $restaurant_discount_amount) : 0;
 | 
						|
        $total_price = $product_price + $total_addon_price - $restaurant_discount_amount - $coupon_discount_amount ;
 | 
						|
 | 
						|
        $tax = ($restaurant->tax > 0)?$restaurant->tax:0;
 | 
						|
        $order->tax_status = 'excluded';
 | 
						|
 | 
						|
        $tax_included =BusinessSetting::where(['key'=>'tax_included'])->first() ?  BusinessSetting::where(['key'=>'tax_included'])->first()->value : 0;
 | 
						|
        if ($tax_included ==  1){
 | 
						|
            $order->tax_status = 'included';
 | 
						|
        }
 | 
						|
 | 
						|
        $total_tax_amount=Helpers::product_tax($total_price,$tax,$order->tax_status =='included');
 | 
						|
 | 
						|
        $tax_a=$order->tax_status =='included'?0:$total_tax_amount;
 | 
						|
 | 
						|
        if($restaurant->minimum_order > $product_price + $total_addon_price )
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order_time', 'message' => translate('messages.you_need_to_order_at_least', ['amount'=>$restaurant->minimum_order.' '.Helpers::currency_code()])]
 | 
						|
                ]
 | 
						|
            ], 406);
 | 
						|
        }
 | 
						|
 | 
						|
        $free_delivery_over = BusinessSetting::where('key', 'free_delivery_over')->first()->value;
 | 
						|
        if(isset($free_delivery_over))
 | 
						|
        {
 | 
						|
            if($free_delivery_over <= $product_price + $total_addon_price - $coupon_discount_amount - $restaurant_discount_amount)
 | 
						|
            {
 | 
						|
                $order->delivery_charge = 0;
 | 
						|
                $free_delivery_by = 'admin';
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if($restaurant->free_delivery){
 | 
						|
            $order->delivery_charge = 0;
 | 
						|
            $free_delivery_by = 'vendor';
 | 
						|
        }
 | 
						|
 | 
						|
        $order->coupon_created_by = $coupon_created_by;
 | 
						|
 | 
						|
        // if($coupon)
 | 
						|
        // {
 | 
						|
        //     $coupon->increment('total_uses');
 | 
						|
        // }
 | 
						|
 | 
						|
        $order_amount = round($total_price + $tax_a + $order->delivery_charge , config('round_up_to_digit'));
 | 
						|
 | 
						|
        if($request->payment_method == 'wallet' && $request->user()->wallet_balance < $order_amount)
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order_amount', 'message' => translate('messages.insufficient_balance')]
 | 
						|
                ]
 | 
						|
            ], 203);
 | 
						|
        }
 | 
						|
        try {
 | 
						|
            $order->coupon_discount_amount = round($coupon_discount_amount, config('round_up_to_digit'));
 | 
						|
            $order->coupon_discount_title = $coupon ? $coupon->title : '';
 | 
						|
            $order->free_delivery_by = $free_delivery_by;
 | 
						|
            $order->restaurant_discount_amount= round($restaurant_discount_amount, config('round_up_to_digit'));
 | 
						|
            $order->total_tax_amount= round($total_tax_amount, config('round_up_to_digit'));
 | 
						|
            $order->order_amount = $order_amount + $order->dm_tips;
 | 
						|
 | 
						|
            if( $max_cod_order_amount_value > 0 && $order->payment_method == 'cash_on_delivery' && $order->order_amount > $max_cod_order_amount_value){
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order_amount', 'message' => translate('messages.You can not Order more then ').$max_cod_order_amount_value .Helpers::currency_symbol().' '. translate('messages.on COD order.')]
 | 
						|
                ]
 | 
						|
            ], 203);
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            // if ($request->subscription_order &&  $restaurant->restaurant_model == 'subscription' && isset($rest_sub) &&
 | 
						|
            // Carbon::parse($rest_sub->expiry_date)->format('Y-m-d') < Carbon::parse($request->subscription_end_at
 | 
						|
            // )){
 | 
						|
            //     return response()->json([
 | 
						|
            //         'errors' => [
 | 
						|
            //             ['code' => 'restaurant_subs_exp', 'message' => translate('messages.You_need_to_Set_end_date_before').' '.$rest_sub->expiry_date->format('Y-m-d')]
 | 
						|
            //         ]
 | 
						|
            //     ], 203);
 | 
						|
            // }
 | 
						|
 | 
						|
            DB::beginTransaction();
 | 
						|
 | 
						|
            // new Order Subscription create
 | 
						|
            if($request->subscription_order && $request->subscription_quantity){
 | 
						|
                $subscription = new Subscription();
 | 
						|
                $subscription->status = 'active';
 | 
						|
                $subscription->start_at = $request->subscription_start_at;
 | 
						|
                $subscription->end_at = $request->subscription_end_at;
 | 
						|
                $subscription->type = $request->subscription_type;
 | 
						|
                $subscription->quantity = $request->subscription_quantity;
 | 
						|
                $subscription->user_id = $request->user()->id;
 | 
						|
                $subscription->restaurant_id = $restaurant->id;
 | 
						|
                $subscription->save();
 | 
						|
                $order->subscription_id = $subscription->id;
 | 
						|
                // $subscription_schedules =  Helpers::get_subscription_schedules($request->subscription_type, $request->subscription_start_at, $request->subscription_end_at, json_decode($request->days, true));
 | 
						|
 | 
						|
                $days = array_map(function($day)use($subscription){
 | 
						|
                    $day['subscription_id'] = $subscription->id;
 | 
						|
                    $day['type'] = $subscription->type;
 | 
						|
                    $day['created_at'] = now();
 | 
						|
                    $day['updated_at'] = now();
 | 
						|
                    return $day;
 | 
						|
                },json_decode($request->subscription_days, true));
 | 
						|
                // info(['SubscriptionSchedule_____', $days]);
 | 
						|
                SubscriptionSchedule::insert($days);
 | 
						|
 | 
						|
                // $order->checked = 1;
 | 
						|
            }
 | 
						|
 | 
						|
            $order->save();
 | 
						|
            // new Order Subscription logs create for the order
 | 
						|
            OrderLogic::create_subscription_log($order->id);
 | 
						|
            // End Order Subscription.
 | 
						|
 | 
						|
            foreach ($order_details as $key => $item) {
 | 
						|
                $order_details[$key]['order_id'] = $order->id;
 | 
						|
            }
 | 
						|
            OrderDetail::insert($order_details);
 | 
						|
 | 
						|
            $customer = $request->user();
 | 
						|
            $customer->zone_id = $restaurant->zone_id;
 | 
						|
            $customer->save();
 | 
						|
 | 
						|
            $restaurant->increment('total_order');
 | 
						|
 | 
						|
            if ($restaurant->restaurant_model == 'subscription' && isset($rest_sub) && $request['payment_method'] != 'digital_payment'){
 | 
						|
                if ($rest_sub->max_order != "unlimited" && $rest_sub->max_order > 0 ) {
 | 
						|
                    $rest_sub->decrement('max_order' , 1);
 | 
						|
                    }
 | 
						|
            }
 | 
						|
 | 
						|
            DB::commit();
 | 
						|
 | 
						|
            // if($order->subscription_id == null){
 | 
						|
            //     Http::async()->get(url('/')."/api/v1/customer/order/send-notification/{$order->id}");
 | 
						|
            // }
 | 
						|
            Helpers::visitor_log('restaurant',$customer->id,$restaurant->id,true);
 | 
						|
            if($request->payment_method == 'wallet') CustomerLogic::create_wallet_transaction($order->user_id, $order->order_amount, 'order_place', $order->id);
 | 
						|
 | 
						|
            try{
 | 
						|
                if($order->order_status == 'pending')
 | 
						|
                {
 | 
						|
                    Mail::to($customer['email'])->send(new \App\Mail\OrderPlaced($order->id));
 | 
						|
                }
 | 
						|
            }catch (\Exception $ex) {
 | 
						|
                info($ex);
 | 
						|
            }
 | 
						|
            return response()->json([
 | 
						|
                'message' => translate('messages.order_placed_successfully'),
 | 
						|
                'order_id' => $order->id,
 | 
						|
                'total_ammount' => $total_price+$order->delivery_charge+$tax_a
 | 
						|
            ], 200);
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            info($e);
 | 
						|
            return response()->json([$e], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        return response()->json([
 | 
						|
            'errors' => [
 | 
						|
                ['code' => 'order_time', 'message' => translate('messages.failed_to_place_order')]
 | 
						|
            ]
 | 
						|
        ], 403);
 | 
						|
    }
 | 
						|
 | 
						|
    public function get_order_list(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'limit' => 'required',
 | 
						|
            'offset' => 'required',
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $paginator = Order::with(['restaurant', 'delivery_man.rating'])->withCount('details')->where(['user_id' => $request->user()->id])->
 | 
						|
        whereIn('order_status', ['delivered','canceled','refund_requested','refund_request_canceled','refunded','failed'])->Notpos()
 | 
						|
        ->whereNull('subscription_id')
 | 
						|
 | 
						|
        ->latest()->paginate($request['limit'], ['*'], 'page', $request['offset']);
 | 
						|
        $orders = array_map(function ($data) {
 | 
						|
            $data['delivery_address'] = $data['delivery_address']?json_decode($data['delivery_address']):$data['delivery_address'];
 | 
						|
            $data['restaurant'] = $data['restaurant']?Helpers::restaurant_data_formatting($data['restaurant']):$data['restaurant'];
 | 
						|
            $data['delivery_man'] = $data['delivery_man']?Helpers::deliverymen_data_formatting([$data['delivery_man']]):$data['delivery_man'];
 | 
						|
            return $data;
 | 
						|
        }, $paginator->items());
 | 
						|
        $data = [
 | 
						|
            'total_size' => $paginator->total(),
 | 
						|
            'limit' => $request['limit'],
 | 
						|
            'offset' => $request['offset'],
 | 
						|
            'orders' => $orders
 | 
						|
        ];
 | 
						|
        return response()->json($data, 200);
 | 
						|
    }
 | 
						|
    public function get_order_subscription_list(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'limit' => 'required',
 | 
						|
            'offset' => 'required',
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $paginator = Order::with(['restaurant', 'delivery_man.rating'])->withCount('details')->where(['user_id' => $request->user()->id])
 | 
						|
        // ->whereIn('order_status', ['delivered','canceled','refund_requested','refund_request_canceled','refunded','failed'])
 | 
						|
        ->Notpos()
 | 
						|
        ->whereNotNull('subscription_id')
 | 
						|
        ->latest()->paginate($request['limit'], ['*'], 'page', $request['offset']);
 | 
						|
        $orders = array_map(function ($data) {
 | 
						|
            $data['delivery_address'] = $data['delivery_address']?json_decode($data['delivery_address']):$data['delivery_address'];
 | 
						|
            $data['restaurant'] = $data['restaurant']?Helpers::restaurant_data_formatting($data['restaurant']):$data['restaurant'];
 | 
						|
            $data['delivery_man'] = $data['delivery_man']?Helpers::deliverymen_data_formatting([$data['delivery_man']]):$data['delivery_man'];
 | 
						|
            return $data;
 | 
						|
        }, $paginator->items());
 | 
						|
        $data = [
 | 
						|
            'total_size' => $paginator->total(),
 | 
						|
            'limit' => $request['limit'],
 | 
						|
            'offset' => $request['offset'],
 | 
						|
            'orders' => $orders
 | 
						|
        ];
 | 
						|
        return response()->json($data, 200);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public function get_running_orders(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'limit' => 'required',
 | 
						|
            'offset' => 'required',
 | 
						|
        ]);
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $paginator = Order::with(['restaurant', 'delivery_man.rating'])->withCount('details')->where(['user_id' => $request->user()->id])
 | 
						|
        ->whereNull('subscription_id')
 | 
						|
        // ->hasSubscriptionToday()
 | 
						|
        ->whereNotIn('order_status', ['delivered','canceled','refund_requested','refund_request_canceled','refunded','failed'])
 | 
						|
        ->Notpos()->latest()->paginate($request['limit'], ['*'], 'page', $request['offset']);
 | 
						|
 | 
						|
        $orders = array_map(function ($data) {
 | 
						|
            $data['delivery_address'] = $data['delivery_address']?json_decode($data['delivery_address']):$data['delivery_address'];
 | 
						|
            $data['restaurant'] = $data['restaurant']?Helpers::restaurant_data_formatting($data['restaurant']):$data['restaurant'];
 | 
						|
            $data['delivery_man'] = $data['delivery_man']?Helpers::deliverymen_data_formatting([$data['delivery_man']]):$data['delivery_man'];
 | 
						|
            return $data;
 | 
						|
        }, $paginator->items());
 | 
						|
        $data = [
 | 
						|
            'total_size' => $paginator->total(),
 | 
						|
            'limit' => $request['limit'],
 | 
						|
            'offset' => $request['offset'],
 | 
						|
            'orders' => $orders
 | 
						|
        ];
 | 
						|
        return response()->json($data, 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function get_order_details(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'order_id' => 'required'
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
        $order = Order::with('details','subscription.schedules')->where('user_id', $request->user()->id)->find($request->order_id);
 | 
						|
        $details = isset($order->details)?$order->details:null;
 | 
						|
 | 
						|
        if ($details != null && $details->count() > 0) {
 | 
						|
            $storage = [];
 | 
						|
            foreach ($details as $item) {
 | 
						|
                $item['add_ons'] = json_decode($item['add_ons']);
 | 
						|
                $item['variation'] = json_decode($item['variation']);
 | 
						|
                $item['food_details'] = json_decode($item['food_details'], true);
 | 
						|
                $item['zone_id'] = (int) (isset($order->zone_id) ? $order->zone_id :  $order->restaurant->zone_id);
 | 
						|
                array_push($storage, $item);
 | 
						|
            }
 | 
						|
            $data = $storage;
 | 
						|
            // $details = Helpers::order_details_data_formatting($details);
 | 
						|
            $subscription_schedules = $order->subscription ? $order->subscription->schedules : [];
 | 
						|
            return response()->json(['details'=>$data, 'subscription_schedules'=> $subscription_schedules,
 | 
						|
            ], 200);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        // $details = OrderDetail::whereHas('order', function($query)use($request){
 | 
						|
        //     return $query->where('user_id', $request->user()->id);
 | 
						|
        // })->where(['order_id' => $request['order_id']])->get();
 | 
						|
 | 
						|
 | 
						|
        // if ($details->count() > 0) {
 | 
						|
        //     $details = $details = Helpers::order_details_data_formatting($details);
 | 
						|
        //     return response()->json($details, 200);
 | 
						|
        // }
 | 
						|
        else {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order', 'message' => translate('messages.not_found')]
 | 
						|
                ]
 | 
						|
            ], 200);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function cancel_order(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'reason' => 'required|max:255'
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
        $order = Order::where(['user_id' => $request->user()->id, 'id' => $request['order_id']])->Notpos()->first();
 | 
						|
        if(!$order){
 | 
						|
                return response()->json([
 | 
						|
                    'errors' => [
 | 
						|
                        ['code' => 'order', 'message' => translate('messages.not_found')]
 | 
						|
                    ]
 | 
						|
                ], 404);
 | 
						|
        }
 | 
						|
        else if ($order->order_status == 'pending' || $order->order_status == 'failed' || $order->order_status == 'canceled'  ) {
 | 
						|
            $order->order_status = 'canceled';
 | 
						|
            $order->canceled = now();
 | 
						|
            $order->cancellation_reason = $request->reason;
 | 
						|
            $order->canceled_by = 'customer';
 | 
						|
            $order->save();
 | 
						|
 | 
						|
            //   if(!isset($order->confirmed) && isset($order->subscription_id)){
 | 
						|
            //     $order->subscription()->update(['status' => 'canceled']);
 | 
						|
            //         if($order->subscription->log){
 | 
						|
            //             $order->subscription->log()->update([
 | 
						|
            //                 'order_status' => $request->status,
 | 
						|
            //                 'canceled' => now(),
 | 
						|
            //                 ]);
 | 
						|
            //         }
 | 
						|
 | 
						|
            // }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
            Helpers::send_order_notification($order);
 | 
						|
 | 
						|
            Helpers::increment_order_count($order->restaurant);
 | 
						|
 | 
						|
            return response()->json(['message' => translate('messages.order_canceled_successfully')], 200);
 | 
						|
        }
 | 
						|
        return response()->json([
 | 
						|
            'errors' => [
 | 
						|
                ['code' => 'order', 'message' => translate('messages.you_can_not_cancel_after_confirm')]
 | 
						|
            ]
 | 
						|
        ], 403);
 | 
						|
    }
 | 
						|
 | 
						|
    public function refund_reasons(){
 | 
						|
        $refund_reasons=RefundReason::where('status',1)->get();
 | 
						|
        return response()->json([
 | 
						|
            'refund_reasons' => $refund_reasons
 | 
						|
        ], 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function refund_request(Request $request)
 | 
						|
    {
 | 
						|
        if(BusinessSetting::where(['key'=>'refund_active_status'])->first()->value == false){
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'order', 'message' => translate('You can not request for a refund')]
 | 
						|
                ]
 | 
						|
            ], 403);
 | 
						|
        }
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'customer_reason' => 'required|string|max:254',
 | 
						|
            'refund_method'=>'nullable|string|max:100',
 | 
						|
            'customer_note'=>'nullable|string|max:65535',
 | 
						|
            'image.*' => 'nullable|max:2048',
 | 
						|
        ]);
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $order = Order::where(['user_id' => $request->user()->id, 'id' => $request['order_id']])->Notpos()->first();
 | 
						|
        if(!$order){
 | 
						|
                return response()->json([
 | 
						|
                    'errors' => [
 | 
						|
                        ['code' => 'order', 'message' => translate('messages.not_found')]
 | 
						|
                    ]
 | 
						|
                ], 404);
 | 
						|
        }
 | 
						|
 | 
						|
        else if ($order->order_status == 'delivered' && $order->payment_status == 'paid') {
 | 
						|
 | 
						|
            $id_img_names = [];
 | 
						|
            if ($request->has('image')) {
 | 
						|
                foreach ($request->file('image') as $img) {
 | 
						|
                    $image_name = Helpers::upload('refund/', 'png', $img);
 | 
						|
                    array_push($id_img_names, $image_name);
 | 
						|
                }
 | 
						|
                $images = json_encode($id_img_names);
 | 
						|
            } else {
 | 
						|
                $images = json_encode([]);
 | 
						|
                // return response()->json(['message' => 'no_image'], 200);
 | 
						|
            }
 | 
						|
 | 
						|
            $refund_amount = round($order->order_amount - $order->delivery_charge- $order->dm_tips , config('round_up_to_digit'));
 | 
						|
 | 
						|
            $refund = new Refund();
 | 
						|
            $refund->order_id = $order->id;
 | 
						|
            $refund->user_id = $order->user_id;
 | 
						|
            $refund->order_status= $order->order_status;
 | 
						|
            $refund->refund_status= 'pending';
 | 
						|
            $refund->refund_method= $request->refund_method ?? 'wallet';
 | 
						|
            $refund->customer_reason= $request->customer_reason;
 | 
						|
            $refund->customer_note= $request->customer_note;
 | 
						|
            $refund->refund_amount= $refund_amount;
 | 
						|
            $refund->image = $images;
 | 
						|
            $refund->save();
 | 
						|
 | 
						|
            $order->order_status = 'refund_requested';
 | 
						|
            $order->refund_requested = now();
 | 
						|
            $order->save();
 | 
						|
            // Helpers::send_order_notification($order);
 | 
						|
            return response()->json(['message' => translate('messages.refund_request_placed_successfully')], 200);
 | 
						|
        }
 | 
						|
 | 
						|
        return response()->json([
 | 
						|
            'errors' => [
 | 
						|
                ['code' => 'order', 'message' => translate('messages.you_can_not_request_for_refund_after_delivery')]
 | 
						|
            ]
 | 
						|
        ], 403);
 | 
						|
    }
 | 
						|
 | 
						|
    public function update_payment_method(Request $request)
 | 
						|
    {
 | 
						|
        $config=Helpers::get_business_settings('cash_on_delivery');
 | 
						|
        if($config['status']==0)
 | 
						|
        {
 | 
						|
            return response()->json([
 | 
						|
                'errors' => [
 | 
						|
                    ['code' => 'cod', 'message' => translate('messages.Cash on delivery order not available at this time')]
 | 
						|
                ]
 | 
						|
            ], 403);
 | 
						|
        }
 | 
						|
        $order = Order::where(['user_id' => $request->user()->id, 'id' => $request['order_id']])->Notpos()->first();
 | 
						|
        if ($order) {
 | 
						|
            Order::where(['user_id' => $request->user()->id, 'id' => $request['order_id']])->update([
 | 
						|
                'payment_method' => 'cash_on_delivery', 'order_status'=>'pending', 'pending'=> now()
 | 
						|
            ]);
 | 
						|
 | 
						|
            $fcm_token = $request->user()->cm_firebase_token;
 | 
						|
            $value = Helpers::order_status_update_message('pending');
 | 
						|
            try {
 | 
						|
                if ($value) {
 | 
						|
                    $data = [
 | 
						|
                        'title' =>translate('messages.order_placed_successfully'),
 | 
						|
                        'description' => $value,
 | 
						|
                        'order_id' => $order->id,
 | 
						|
                        'image' => '',
 | 
						|
                        'type'=>'order_status',
 | 
						|
                    ];
 | 
						|
                    Helpers::send_push_notif_to_device($fcm_token, $data);
 | 
						|
                    DB::table('user_notifications')->insert([
 | 
						|
                        'data'=> json_encode($data),
 | 
						|
                        'user_id'=>$request->user()->id,
 | 
						|
                        'created_at'=>now(),
 | 
						|
                        'updated_at'=>now()
 | 
						|
                    ]);
 | 
						|
                }
 | 
						|
                if($order->order_type == 'delivery' && !$order->scheduled)
 | 
						|
                {
 | 
						|
                    $data = [
 | 
						|
                        'title' =>translate('messages.order_placed_successfully'),
 | 
						|
                        'description' => translate('messages.new_order_push_description'),
 | 
						|
                        'order_id' => $order->id,
 | 
						|
                        'image' => '',
 | 
						|
                    ];
 | 
						|
                    Helpers::send_push_notif_to_topic($data, $order->restaurant->zone->deliveryman_wise_topic, 'order_request');
 | 
						|
                }
 | 
						|
 | 
						|
            } catch (\Exception $e) {
 | 
						|
                info($e);
 | 
						|
            }
 | 
						|
            return response()->json(['message' => translate('messages.payment').' '.translate('messages.method').' '.translate('messages.updated_successfully')], 200);
 | 
						|
        }
 | 
						|
        return response()->json([
 | 
						|
            'errors' => [
 | 
						|
                ['code' => 'order', 'message' => translate('messages.not_found')]
 | 
						|
            ]
 | 
						|
        ], 404);
 | 
						|
    }
 | 
						|
 | 
						|
    public function cancellation_reason(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'limit' => 'required',
 | 
						|
            'offset' => 'required',
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $limit = $request->query('limit', 1);
 | 
						|
        $offset = $request->query('offset', 1);
 | 
						|
 | 
						|
        $reasons = OrderCancelReason::where('status', 1)->when($request->type,function($query) use($request){
 | 
						|
          return $query->where('user_type',$request->type);
 | 
						|
        })
 | 
						|
        ->paginate($limit, ['*'], 'page', $offset);
 | 
						|
        $data = [
 | 
						|
            'total_size' => $reasons->total(),
 | 
						|
            'limit' => $limit,
 | 
						|
            'offset' => $offset,
 | 
						|
            'reasons' => $reasons->items(),
 | 
						|
        ];
 | 
						|
        return response()->json($data, 200);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public function food_list(Request $request){
 | 
						|
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'food_id' => 'required',
 | 
						|
        ]);
 | 
						|
 | 
						|
        $food_ids= json_decode($request['food_id'], true);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
        $product = Food::active()->whereIn('id',$food_ids)->get();
 | 
						|
        return response()->json(Helpers::product_data_formatting($product, true, false, app()->getLocale()), 200);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public function order_notification(Request $request,$order_id){
 | 
						|
        $order = Order::where('user_id', $request->user()->id)->where('id',$order_id)->first();
 | 
						|
        if($order){
 | 
						|
            Helpers::send_order_notification($order);
 | 
						|
        }
 | 
						|
        return response()->json();
 | 
						|
    }
 | 
						|
}
 | 
						|
 |