![]() Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : fdshops ( 1003) PHP Version : 8.2.21 Disable Function : NONE Directory : /home/fdshops/public_html/app/Utils/ |
<?php namespace App\Utils; use App\Restaurant\Booking; use App\Transaction; use App\TransactionSellLine; use App\User; use Illuminate\Support\Facades\DB; use Spatie\Permission\Models\Role; class RestaurantUtil extends Util { /** * Retrieves all orders/sales * * @param int $business_id * @param array $filter * *For new orders order_status is 'received' * @return obj $orders */ public function getAllOrders($business_id, $filter = []) { $query = Transaction::leftJoin('contacts', 'transactions.contact_id', '=', 'contacts.id') ->leftjoin( 'business_locations AS bl', 'transactions.location_id', '=', 'bl.id' ) ->leftjoin( 'res_tables AS rt', 'transactions.res_table_id', '=', 'rt.id' ) ->where('transactions.business_id', $business_id) ->where('transactions.type', 'sell') ->where('transactions.status', 'final'); // ->where('transactions.res_order_status', '!=' ,'served'); if (empty($filter['order_status'])) { $query->where(function ($q) { $q->where('res_order_status', '!=', 'served') ->orWhereNull('res_order_status'); }); } //For new orders order_status is 'received' if (! empty($filter['order_status']) && $filter['order_status'] == 'received') { $query->whereNull('res_order_status'); } if (! empty($filter['line_order_status'])) { if ($filter['line_order_status'] == 'received') { $query->whereHas('sell_lines', function ($q) { $q->whereNull('res_line_order_status') ->orWhere('res_line_order_status', 'received'); }, '>=', 1); } if ($filter['line_order_status'] == 'cooked') { $query->whereHas('sell_lines', function ($q) { $q->where('res_line_order_status', '!=', 'cooked'); }, '=', 0); } if ($filter['line_order_status'] == 'served') { $query->whereHas('sell_lines', function ($q) { $q->where('res_line_order_status', '!=', 'served'); }, '=', 0); } } if (! empty($filter['waiter_id'])) { $query->where('transactions.res_waiter_id', $filter['waiter_id']); } // for kitchen order if (! empty($filter['is_kitchen_order']) && $filter['is_kitchen_order'] == 1) { $query->where('is_kitchen_order', 1); } $permitted_locations = auth()->user()->permitted_locations(); if ($permitted_locations != 'all') { $query->whereIn('transactions.location_id', $permitted_locations); } $orders = $query->select( 'transactions.*', 'contacts.name as customer_name', 'bl.name as business_location', 'rt.name as table_name' )->with(['sell_lines']) ->orderBy('created_at', 'desc') ->get(); return $orders; } public function service_staff_dropdown($business_id) { //Get all service staff roles $service_staff_roles = Role::where('business_id', $business_id) ->where('is_service_staff', 1) ->get() ->pluck('name') ->toArray(); $service_staff = []; //Get all users of service staff roles if (! empty($service_staff_roles)) { $service_staff = User::where('business_id', $business_id)->role($service_staff_roles)->get()->pluck('first_name', 'id'); } return $service_staff; } public function is_service_staff($user_id) { $is_service_staff = false; $user = User::find($user_id); if ($user->roles->first()->is_service_staff == 1) { $is_service_staff = true; } return $is_service_staff; } /** * Retrieves line orders/sales * * @param int $business_id * @param array $filter * *For new orders order_status is 'received' * @return obj $orders */ public function getLineOrders($business_id, $filter = []) { $query = TransactionSellLine::with(['modifiers', 'modifiers.product', 'modifiers.variations']) ->leftJoin('transactions as t', 't.id', '=', 'transaction_sell_lines.transaction_id') ->leftJoin('contacts as c', 't.contact_id', '=', 'c.id') ->leftJoin('variations as v', 'transaction_sell_lines.variation_id', '=', 'v.id') ->leftJoin('products as p', 'v.product_id', '=', 'p.id') ->leftJoin('units as u', 'p.unit_id', '=', 'u.id') ->leftJoin('product_variations as pv', 'v.product_variation_id', '=', 'pv.id') ->leftJoin('users as line_service_staff', 'transaction_sell_lines.res_service_staff_id', '=', 'line_service_staff.id') ->leftjoin( 'business_locations AS bl', 't.location_id', '=', 'bl.id' ) ->leftjoin( 'res_tables AS rt', 't.res_table_id', '=', 'rt.id' ) ->where('t.business_id', $business_id) ->where('t.type', 'sell') ->where('t.status', 'final'); if (empty($filter['order_status'])) { $query->where(function ($q) { $q->where('res_line_order_status', '!=', 'served') ->orWhereNull('res_line_order_status'); }); } if (! empty($filter['waiter_id'])) { $query->where('transaction_sell_lines.res_service_staff_id', $filter['waiter_id']); } if (! empty($filter['line_id'])) { $query->where('transaction_sell_lines.id', $filter['line_id']); } $permitted_locations = auth()->user()->permitted_locations(); if ($permitted_locations != 'all') { $query->whereIn('t.location_id', $permitted_locations); } $orders = $query->select( 'p.name as product_name', 'p.type as product_type', 'v.name as variation_name', 'pv.name as product_variation_name', 't.id as transaction_id', 'c.name as customer_name', 'bl.name as business_location', 'rt.name as table_name', 't.created_at', 't.invoice_no', 'transaction_sell_lines.quantity', 'transaction_sell_lines.sell_line_note', 'transaction_sell_lines.res_line_order_status', 'u.short_name as unit', 'transaction_sell_lines.id', DB::raw("CONCAT(COALESCE(line_service_staff.surname, ''),' ',COALESCE(line_service_staff.first_name, ''),' ',COALESCE(line_service_staff.last_name,'')) as service_staff_name") ) ->orderBy('created_at', 'desc') ->get(); return $orders; } /** * Function to show booking events on a calendar * * @param array $filters * @return array */ public function getBookingsForCalendar($filters) { $start_date = request()->start; $end_date = request()->end; $query = Booking::where('business_id', $filters['business_id']) ->whereBetween(DB::raw('date(booking_start)'), [$filters['start_date'], $filters['end_date']]) ->with(['customer', 'table']); if (! empty($filters['user_id'])) { $query->where('created_by', $filters['user_id']); $query->where(function ($q) use ($filters) { $q->where('created_by', $filters['user_id']) ->orWhere('correspondent_id', $filters['user_id']) ->orWhere('waiter_id', $filters['user_id']); }); } if (! empty($filters['location_id'])) { $query->where('bookings.location_id', $filters['location_id']); } $bookings = $query->get(); $events = []; foreach ($bookings as $booking) { //Skip event if customer not found if (empty($booking->customer)) { continue; } $customer_name = $booking->customer->name; $table_name = $booking->table?->name; $backgroundColor = '#3c8dbc'; $borderColor = '#3c8dbc'; if ($booking->booking_status == 'completed') { $backgroundColor = '#00a65a'; $borderColor = '#00a65a'; } elseif ($booking->booking_status == 'cancelled') { $backgroundColor = '#f56954'; $borderColor = '#f56954'; } elseif ($booking->booking_status == 'waiting') { $backgroundColor = '#FFAD46'; $borderColor = '#FFAD46'; } if (! empty($filters['color'])) { $backgroundColor = $filters['color']; $borderColor = $filters['color']; } $title = $customer_name; if (! empty($table_name)) { $title .= ' - '.$table_name; } $events[] = [ 'title' => $title, 'title_html' => $customer_name.'<br>'.$table_name, 'start' => $booking->booking_start, 'end' => $booking->booking_end, 'customer_name' => $customer_name, 'table' => $table_name, 'url' => action([\App\Http\Controllers\Restaurant\BookingController::class, 'show'], [$booking->id]), 'event_url' => action([\App\Http\Controllers\Restaurant\BookingController::class, 'index']), // 'start_time' => $start_time, // 'end_time' => $end_time, 'backgroundColor' => $backgroundColor, 'borderColor' => $borderColor, 'allDay' => false, 'event_type' => 'bookings', ]; } return $events; } }