[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: POSController.php
<?php namespace App\Http\Controllers\Vendor; use App\Http\Controllers\Controller; use App\Models\Category; use App\Models\Food; use App\Models\User; use App\Models\Order; use App\Models\OrderDetail; use Brian2694\Toastr\Facades\Toastr; use Illuminate\Http\Request; use App\CentralLogics\Helpers; use Illuminate\Support\Facades\DB; class POSController extends Controller { public function index(Request $request) { // dd(session('cart')); $category = $request->query('category_id', 0); // $sub_category = $request->query('sub_category', 0); $categories = Category::active()->get(); $keyword = $request->query('keyword', false); $key = explode(' ', $keyword); $products = Food:: when($category, function($query)use($category){ $query->whereHas('category',function($q)use($category){ return $q->whereId($category)->orWhere('parent_id', $category); }); }) ->when($keyword, function($query)use($key){ return $query->where(function ($q) use ($key) { foreach ($key as $value) { $q->orWhere('name', 'like', "%{$value}%"); } }); }) ->latest()->paginate(10); return view('vendor-views.pos.index', compact('categories', 'products','category', 'keyword')); } public function quick_view(Request $request) { $product = Food::findOrFail($request->product_id); return response()->json([ 'success' => 1, 'view' => view('vendor-views.pos._quick-view-data', compact('product'))->render(), ]); } public function quick_view_card_item(Request $request) { $product = Food::findOrFail($request->product_id); $item_key = $request->item_key; $cart_item = session()->get('cart')[$item_key]; return response()->json([ 'success' => 1, 'view' => view('vendor-views.pos._quick-view-cart-item', compact('product', 'cart_item', 'item_key'))->render(), ]); } public function variant_price(Request $request) { $product = Food::find($request->id); $str = ''; $quantity = 0; $price = 0; $addon_price = 0; foreach (json_decode($product->choice_options) as $key => $choice) { if ($str != null) { $str .= '-' . str_replace(' ', '', $request[$choice->name]); } else { $str .= str_replace(' ', '', $request[$choice->name]); } } if($request['addon_id']) { foreach($request['addon_id'] as $id) { $addon_price+= $request['addon-price'.$id]*$request['addon-quantity'.$id]; } } if ($str != null) { $count = count(json_decode($product->variations)); for ($i = 0; $i < $count; $i++) { if (json_decode($product->variations)[$i]->type == $str) { $price = json_decode($product->variations)[$i]->price - Helpers::product_discount_calculate($product, json_decode($product->variations)[$i]->price,Helpers::get_restaurant_data()); } } } else { $price = $product->price - Helpers::product_discount_calculate($product, $product->price,Helpers::get_restaurant_data()); } return array('price' => Helpers::format_currency(($price * $request->quantity)+$addon_price)); } public function addToCart(Request $request) { $product = Food::find($request->id); $data = array(); $data['id'] = $product->id; $str = ''; $variations = []; $price = 0; $addon_price = 0; //Gets all the choice values of customer choice option and generate a string like Black-S-Cotton foreach (json_decode($product->choice_options) as $key => $choice) { $data[$choice->name] = $request[$choice->name]; $variations[$choice->title] = $request[$choice->name]; if ($str != null) { $str .= '-' . str_replace(' ', '', $request[$choice->name]); } else { $str .= str_replace(' ', '', $request[$choice->name]); } } $data['variations'] = $variations; $data['variant'] = $str; if ($request->session()->has('cart') && !isset($request->cart_item_key)) { if (count($request->session()->get('cart')) > 0) { foreach ($request->session()->get('cart') as $key => $cartItem) { if (is_array($cartItem) && $cartItem['id'] == $request['id'] && $cartItem['variant'] == $str) { return response()->json([ 'data' => 1 ]); } } } } //Check the string and decreases quantity for the stock if ($str != null) { $count = count(json_decode($product->variations)); for ($i = 0; $i < $count; $i++) { if (json_decode($product->variations)[$i]->type == $str) { $price = json_decode($product->variations)[$i]->price; } } } else { $price = $product->price; } $data['quantity'] = $request['quantity']; $data['price'] = $price; $data['name'] = $product->name; $data['discount'] = Helpers::product_discount_calculate($product, $price,Helpers::get_restaurant_data()); $data['image'] = $product->image; $data['add_ons'] = []; $data['add_on_qtys'] = []; if($request['addon_id']) { foreach($request['addon_id'] as $id) { $addon_price+= $request['addon-price'.$id]*$request['addon-quantity'.$id]; $data['add_on_qtys'][]=$request['addon-quantity'.$id]; } $data['add_ons'] = $request['addon_id']; } $data['addon_price'] = $addon_price; if ($request->session()->has('cart')) { $cart = $request->session()->get('cart', collect([])); if(isset($request->cart_item_key)) { $cart[$request->cart_item_key] = $data; $data = 2; } else { $cart->push($data); } } else { $cart = collect([$data]); $request->session()->put('cart', $cart); } return response()->json([ 'data' => $data ]); } public function cart_items() { return view('vendor-views.pos._cart'); } //removes from Cart public function removeFromCart(Request $request) { if ($request->session()->has('cart')) { $cart = $request->session()->get('cart', collect([])); $cart->forget($request->key); $request->session()->put('cart', $cart); } return response()->json([],200); } //updated the quantity for a cart item public function updateQuantity(Request $request) { $cart = $request->session()->get('cart', collect([])); $cart = $cart->map(function ($object, $key) use ($request) { if ($key == $request->key) { $object['quantity'] = $request->quantity; } return $object; }); $request->session()->put('cart', $cart); return response()->json([],200); } //empty Cart public function emptyCart(Request $request) { session()->forget('cart'); return response()->json([],200); } public function update_tax(Request $request) { $cart = $request->session()->get('cart', collect([])); $cart['tax'] = $request->tax; $request->session()->put('cart', $cart); return back(); } public function update_discount(Request $request) { $cart = $request->session()->get('cart', collect([])); $cart['discount'] = $request->discount; $cart['discount_type'] = $request->type; $request->session()->put('cart', $cart); return back(); } public function get_customers(Request $request){ $key = explode(' ', $request['q']); $data = User:: where(function ($q) use ($key) { foreach ($key as $value) { $q->orWhere('f_name', 'like', "%{$value}%") ->orWhere('l_name', 'like', "%{$value}%") ->orWhere('phone', 'like', "%{$value}%"); } }) ->limit(8) ->get([DB::raw('id, CONCAT(f_name, " ", l_name, " (", phone ,")") as text')]); $data[]=(object)['id'=>false, 'text'=>trans('messages.walk_in_customer')]; return response()->json($data); } public function place_order(Request $request) { if($request->session()->has('cart')) { if(count($request->session()->get('cart')) < 1) { Toastr::error(trans('messages.cart_empty_warning')); return back(); } } else { Toastr::error(trans('messages.cart_empty_warning')); return back(); } $restaurant = Helpers::get_restaurant_data(); $cart = $request->session()->get('cart'); $total_addon_price = 0; $product_price = 0; $restaurant_discount_amount = 0; $order_details = []; $order = new Order(); $order->id = 100000 + Order::all()->count() + 1; $order->payment_status = 'paid'; $order->order_status = 'delivered'; $order->order_type = 'pos'; $order->payment_method = $request->type; $order->restaurant_id = $restaurant->id; $order->user_id = $request->user_id; $order->delivery_charge = 0; $order->original_delivery_charge = 0; $order->created_at = now(); $order->updated_at = now(); foreach ($cart as $c) { if(is_array($c)) { $product = Food::find($c['id']); if ($product) { $price = $c['price']; $product->tax = $restaurant->tax; $product = Helpers::product_data_formatting($product); $addon_data = Helpers::calculate_addon_price(\App\Models\AddOn::whereIn('id',$c['add_ons'])->get(), $c['add_on_qtys']); $or_d = [ 'food_id' => $c['id'], 'item_campaign_id' => null, 'food_details' => json_encode($product), 'quantity' => $c['quantity'], 'price' => $price, 'tax_amount' => Helpers::tax_calculate($product, $price), 'discount_on_food' => Helpers::product_discount_calculate($product, $price, $restaurant), 'discount_type' => 'discount_on_product', 'variant' => json_encode($c['variant']), 'variation' => json_encode([$c['variations']]), 'add_ons' => json_encode($addon_data['addons']), 'total_add_on_price' => $addon_data['total_add_on_price'], '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; } } } if(isset($cart['discount'])) { $restaurant_discount_amount += $cart['discount_type']=='percent'&&$cart['discount']>0?((($product_price + $total_addon_price) * $cart['discount'])/100):$cart['discount']; } $total_price = $product_price + $total_addon_price - $restaurant_discount_amount; $tax = isset($cart['tax'])?$cart['tax']:$restaurant->tax; $total_tax_amount= ($tax > 0)?(($total_price * $tax)/100):0; try { $order->restaurant_discount_amount= $restaurant_discount_amount; $order->total_tax_amount= $total_tax_amount; $order->order_amount = $total_price + $total_tax_amount + $order->delivery_charge; $order->adjusment = $request->amount - ($total_price + $total_tax_amount + $order->delivery_charge); $order->save(); foreach ($order_details as $key => $item) { $order_details[$key]['order_id'] = $order->id; } OrderDetail::insert($order_details); session()->forget('cart'); session(['last_order' => $order->id]); Toastr::success(trans('messages.order_placed_successfully')); return back(); } catch (\Exception $e) { info($e); } Toastr::warning(trans('messages.failed_to_place_order')); return back(); } public function order_list() { $orders = Order::with(['customer']) ->where('order_type', 'pos') ->where('restaurant_id',\App\CentralLogics\Helpers::get_restaurant_id()) ->latest() ->paginate(config('default_pagination')); return view('vendor-views.pos.order.list', compact('orders')); } public function order_details($id) { $order = Order::with('details')->where(['id' => $id, 'restaurant_id' => Helpers::get_restaurant_id()])->first(); if (isset($order)) { return view('vendor-views.pos.order.order-view', compact('order')); } else { Toastr::info('No more orders!'); return back(); } } public function generate_invoice($id) { $order = Order::where('id', $id)->first(); return response()->json([ 'success' => 1, 'view' => view('vendor-views.pos.order.invoice', compact('order'))->render(), ]); } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium166.web-hosting.com
Server IP: 162.0.209.40
PHP Version: 8.1.34
Server Software: LiteSpeed
System: Linux premium166.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 75.3 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: kataubyb
User ID (UID): 624
Group ID (GID): 625
Script Owner UID: 624
Current Dir Owner: 624