Viewing file: PosController.php (5.51 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers;
use App\Models\Item; use App\Models\Order; use App\Models\OrderDetails; use App\Models\Restaurant; use App\Models\User; use Illuminate\Http\Request;
class PosController extends Controller { public function index() { $auth = auth()->user(); $currentPlan=isset($auth->current_plans[0])?$auth->current_plans[0]:''; if($currentPlan->pos_system=='no'){ return abort('404'); } $data['customers'] = User::where('type', 'customer') ->where('status', 'approved') ->select('id', 'name')->get(); $data['restaurents'] = auth()->user()->restaurants()->where('status', 'active')->select('id', 'name')->get();; return view('pos.index', $data); }
public function get_items(Request $request){ $all_items = []; $items = auth()->user()->items() ->where('restaurant_id', $request->restaurant_id) ->when($request->item_name, function ($query, $item_name) { $keywords = explode(' ', $item_name); foreach ($keywords as $keyword) { $query->where('name', 'like', '%' . $keyword . '%'); } return $query; }) ->get(); foreach ($items as $item) { $all_items[] = [ 'id' => $item->id, 'name' => $item->name, 'image' => $item->image, 'price' => $item->price, 'discount' => $item->discount, 'discount_type' => $item->discount_type, 'tax_amount' => $item->tax->amount, 'tax_type' => $item->tax->type, 'currency_symbol' => $item->restaurant->currency_symbol ]; } return response()->json(['data'=>$all_items,'status'=>'success']);
}
public function store(Request $request){ $request->validate([ 'items.*' => 'required', 'restaurant_id' => 'required', 'customer_id' => 'required', ]);
$restaurant = Restaurant::find($request->restaurant_id); if (!$restaurant) return response()->json(['message' => 'Restaurant Not Found','status'=>'failed']); $orderStatus = json_decode(get_settings('manage_place_order')); if (isset($orderStatus->admin_order_status) && $orderStatus->admin_order_status == 'disable' && isset($restaurant->order_status) && $restaurant->order_status == 'disable') { return response()->json(['message' => trans('You can not place order right now, please try again later'),'status'=>'failed']); } $auth = auth()->user(); $order = new Order(); $order->user_id = $auth ? $auth->id : null; $order->restaurant_id = $request->restaurant_id; $order->name = ($request->customer_id == 'walk_in_customer') ? 'walk_in_customer' : $request->customer_id; $order->payment_status = 'paid'; $order->type = 'pos'; $order->status = 'approved'; $order->save(); $totalPrice = 0; $totalTax = 0; $orderDetailsData = []; $i = 0; foreach ($request['items'] as $key => $req_item) { $orderQuantity = $req_item['item_quantity']; $item = Item::where(['id' => $req_item['item_id'], 'restaurant_id' => $request->restaurant_id])->first(); $price = $item->price; $discountPrice = 0;
if ($item) { if ($item->discount > 0) { if ($item->discount_type == 'flat') { $discountPrice = $item->discount; $price = $item->price - $discountPrice; } elseif ($item->discount_type == 'percent') { $discountPrice = ($item->price * $item->discount) / 100; $price = $item->price - $discountPrice; } } else { $price = $item->price; } $taxAmount = 0; if ($item->tax && $item->tax->type) { $taxAmount = $item->tax->amount; if ($item->tax->type == 'percentage') { $taxAmount = ($taxAmount * $price) / 100; } } $totalTax += $taxAmount * $orderQuantity;
$orderDetailsData[$i]['order_id'] = $order->id; $orderDetailsData[$i]['item_id'] = $item->id; $orderDetailsData[$i]['price'] = $price; $orderDetailsData[$i]['quantity'] = $orderQuantity; $orderDetailsData[$i]['discount'] = $discountPrice; $orderDetailsData[$i]['total'] = $price * $orderQuantity; $orderDetailsData[$i]['tax_amount'] = $taxAmount * $orderQuantity; $orderDetailsData[$i]['status'] = 'approved'; $orderDetailsData[$i]['created_at'] = now(); $orderDetailsData[$i]['updated_at'] = now(); $totalPrice += ($price * $orderQuantity); $i++; } } OrderDetails::insert($orderDetailsData); if($request->discount && $request->discount > 0){ $order->total_price = ($totalPrice + $totalTax)-$request->discount; }else{ $order->total_price = $totalPrice + $totalTax; } $order->save(); return response()->json(['message' => 'A new order has been placed','status'=>'success']); } }
|