public static function checkRemoteQueue($service_id)
 {
     $date = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
     $allow_remote = QueueSettings::allowRemote($service_id);
     $remote_limit = QueueSettings::remoteLimit($service_id);
     $total_numbers_today = PriorityNumber::where('date', '=', $date)->select(DB::raw('COUNT(priority_number.track_id) as total_numbers_today'))->first()->total_numbers_today;
     $total_remote_today = PriorityNumber::where('date', '=', $date)->join('priority_queue', 'priority_queue.track_id', '=', 'priority_number.track_id')->where(function ($query) {
         $query->where('priority_queue.queue_platform', '=', 'remote')->orWhere('priority_queue.queue_platform', '=', 'android');
     })->select(DB::raw('COUNT(priority_number.track_id) as total_remote_today'))->first()->total_remote_today;
     $remote_queue_value = floor($total_numbers_today * ($remote_limit / 100));
     $result = $allow_remote && $remote_queue_value > $total_remote_today ? true : false;
     return $result;
 }
 public static function getTrackIdByServiceId($service_id)
 {
     return PriorityNumber::where('service_id', '=', $service_id)->select(array('track_id'))->get();
 }
 public static function sendNumberNextSms($transaction_number, $diff)
 {
     $phone = PriorityQueue::phone($transaction_number);
     $name = PriorityQueue::name($transaction_number);
     if ($phone) {
         $pq = Helper::firstFromTable('priority_queue', 'transaction_number', $transaction_number);
         $terminal_id = TerminalTransaction::terminalId($transaction_number);
         $service_id = PriorityNumber::serviceId($pq->track_id);
         $priority_number = PriorityQueue::priorityNumber($transaction_number);
         $current_number = ProcessQueue::currentNumber($service_id);
         $terminal_name = $terminal_id != 0 ? Terminal::name($terminal_id) : '';
         $business_name = $terminal_id != 0 ? Business::name(Business::getBusinessIdByTerminalId($terminal_id)) : '';
         $name = $name == null ? null : ' ' . $name;
         $message = "Hello{$name}, Your number, ({$priority_number}), will be called soon. ";
         $message .= "Number ({$current_number}) has been called by {$terminal_name}. ";
         if ($diff >= 1) {
             $message .= $diff == 1 ? "There is currently " . $diff . " person ahead of you " : "There are currently " . $diff . " people ahead of you ";
         }
         $message .= "at the {$terminal_name} at {$business_name}.";
         Notifier::sendServiceSms($message, $phone, $service_id);
     }
 }
 public static function getActiveBusinesses()
 {
     /*
     return DB::table('business')->join('branch', 'business.business_id', '=', 'branch.business_id')
       ->join('service', 'branch.branch_id', '=', 'service.branch_id')
       ->join('priority_number', 'service.service_id', '=', 'priority_number.service_id')
       ->join('priority_queue', 'priority_number.track_id', '=', 'priority_queue.track_id')
       ->join('terminal_transaction', 'priority_queue.transaction_number', '=', 'terminal_transaction.transaction_number')
       ->where('terminal_transaction.time_queued', '!=', 0)
       ->select(array('business.business_id', 'business.name', 'business.local_address'))
       ->get();
     */
     $active_businesses = array();
     $businesses = Business::all();
     foreach ($businesses as $count => $business) {
         $branches = Branch::getBranchesByBusinessId($business->business_id);
         foreach ($branches as $count2 => $branch) {
             $services = Service::getServicesByBranchId($branch->branch_id);
             foreach ($services as $count3 => $service) {
                 $priority_numbers = PriorityNumber::getTrackIdByServiceId($service->service_id);
                 foreach ($priority_numbers as $count4 => $priority_number) {
                     $priority_queues = PriorityQueue::getTransactionNumberByTrackId($priority_number->track_id);
                     foreach ($priority_queues as $count5 => $priority_queue) {
                         $terminal_transactions = TerminalTransaction::getTimesByTransactionNumber($priority_queue->transaction_number);
                         foreach ($terminal_transactions as $count6 => $terminal_transaction) {
                             $grace_period = time() - $terminal_transaction->time_queued;
                             // issued time must be on the current day to count as active
                             if ($terminal_transaction->time_queued != 0 && $terminal_transaction->time_completed == 0 && $terminal_transaction->time_removed == 0 && $grace_period < 86400) {
                                 // 1 day; 60secs * 60 min * 24 hours
                                 $active_businesses[$business->business_id] = array('local_address' => $business->local_address, 'name' => $business->name);
                                 break;
                             }
                         }
                         if (array_key_exists($business->business_id, $active_businesses)) {
                             break;
                         }
                     }
                     if (array_key_exists($business->business_id, $active_businesses)) {
                         break;
                     }
                 }
                 if (array_key_exists($business->business_id, $active_businesses)) {
                     break;
                 }
             }
             if (array_key_exists($business->business_id, $active_businesses)) {
                 break;
             }
         }
     }
     return $active_businesses;
 }