public function Scan()
 {
     $userId = $_GET["user_id"];
     $qr = $_GET["QR"];
     $qrs = new QRModel();
     //////validate QR Code
     $resQrs = $qrs->getWhere("textQR='{$qr}'");
     if (count($resQrs) == 1) {
         if ($resQrs[0]->status == 0) {
             $this->error("Unasigned QR Code!");
         }
     } else {
         $this->error("Wrong QR Code!");
     }
     ///////fetch user details
     $user = new UserModel();
     $user->getByID($userId);
     //        pr($user);
     if ($user->user_name == null || $user->user_name == "") {
         $this->error("Who Are You ?!");
     }
     ///////validate Table
     $ta = new MasterTableModel();
     $arr = $ta->getWhere("QR='{$qr}'");
     if (count($arr) == 1) {
         //status 0 = OCCUPIED
         if ($arr[0]->status == 0) {
             if ($arr[0]->id_order == 0) {
                 $this->error("Empty Order ID");
             } else {
                 $this->requestJoinTable($user, $arr[0]->id_order);
             }
         } else {
             $this->requestRestoPermission($user, $arr[0]);
         }
     } else {
         $this->error("Wrong Table!");
     }
     die;
 }
 public static function setTableStatus($id_table, $field, $value)
 {
     $objTable = new MasterTableModel();
     $objTable->getByID($id_table);
     $objTable->{$field} = $value;
     $objTable->load = 1;
     $objTable->save();
     //        pr($objTable);
 }
 public function getMonthByMonthOrder()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $idResto = $this->mustCheck($_GET['id_restaurant'], "NO ID Restaurant");
     $range = $_GET['range'] == null || $_GET['range'] == "" ? 0 : $_GET['range'];
     $extraQ = $this->selectTypeOrder($_GET['type_order']);
     $idServer = $_GET['id_user'];
     $extraQ .= $idServer == null || $idServer == "" || $idServer == "0" ? "" : "AND id_server='{$idServer}'";
     $extraQ .= $_GET['voided'] == null || $_GET['voided'] == "" || $_GET['voided'] == "0" ? " AND status_progress='4' " : "AND status_progress='9' AND voided='1'";
     $extraQ .= $_GET['status_payment'] == null || $_GET['status_payment'] == "" || $_GET['status_payment'] == "999" ? "" : "AND status_payment='" . $_GET['status_payment'] . "'";
     $r = new MasterRestaurantModel();
     $r->getByID($idResto);
     $result["name"] = $r->name;
     $result['list_orders'] = array();
     $result['sum_total_grand_total'] = 0;
     $result['sum_total_order_count'] = 0;
     $result['sum_disc_mr'] = 0;
     $result['sum_disc_resto'] = 0;
     $result['sum_disc_bank'] = 0;
     $result['sum_disc_other'] = 0;
     $result['sum_tax_pb1'] = 0;
     $result['sum_service_charge'] = 0;
     $result['sum_other_charge'] = 0;
     $result['sum_other_charge'] = 0;
     if (!isset($range) || $range == 999) {
         $range = 4;
     }
     for ($i = 0; $i <= $range; $i++) {
         $date = date('m', strtotime("-{$i} months"));
         $o = new MasterOrderModel();
         $q = "status='1' AND id_restaurant='{$idResto}' AND MONTH(datetime_order)='{$date}' {$extraQ} ORDER BY id_order DESC";
         if ($_GET['is_debug']) {
             echo $q . "<br>";
         }
         $arrO = $o->getWhere($q);
         if (count($arrO) == 0) {
             continue;
         }
         unset($b);
         $b['date'] = $date;
         $b['header_id'] = $i;
         $b['order_count'] = 0;
         $b['order_sum'] = 0;
         $b['sum_disc_mr'] = 0;
         $b['sum_disc_resto'] = 0;
         $b['sum_disc_bank'] = 0;
         $b['sum_disc_other'] = 0;
         $b['sum_tax_pb1'] = 0;
         $b['sum_service_charge'] = 0;
         $b['sum_other_charge'] = 0;
         $b['sum_mr_fee'] = 0;
         $b['sum_cc_fee'] = 0;
         foreach ($arrO as $order) {
             unset($c);
             if (!$order instanceof MasterOrderModel) {
                 return;
             }
             $c['date'] = $date;
             //                $b['order_sum'] += (double)$order->grand_total;
             //                $b['order_count']++;
             //
             //                $b['sum_disc_mr'] += (double)$order->disc_mr;
             //                $b['sum_disc_resto'] += (double)$order->disc_resto;
             //                $b['sum_disc_bank'] += (double)$order->disc_bank;
             //                $b['sum_disc_other'] += (double)$order->disc_other;
             //                $b['sum_tax_pb1'] += (double)$order->tax_pb1;
             //                $b['sum_service_charge'] += (double)$order->service_charge;
             //                $b['sum_other_charge'] += (double)$order->other_charge;
             $c['header_id'] = $i;
             $c['id_order'] = $order->id_order;
             $c['id_table'] = $order->id_table;
             $c['id_server'] = $order->id_server;
             $c['server_name'] = $order->server_name;
             $c['type_order'] = $order->type_order;
             $c['status_progress'] = $order->status_progress;
             $c['datetime_order'] = $order->datetime_order;
             $c['datetime_done'] = $order->datetime_done;
             $c['grand_total'] = (double) $order->grand_total;
             $c['status'] = $order->status;
             $c['order_now'] = $order->order_now;
             $c['voided'] = $order->voided;
             $c['order_number'] = $order->order_number;
             $c['mr_fee'] = (double) $order->mr_fee;
             $c['cc_fee'] = (double) $order->cc_fee;
             $b['order_count']++;
             $b['order_sum'] += $order->grand_total;
             $b['sum_disc_mr'] += $order->disc_mr;
             $b['sum_disc_resto'] += $order->disc_resto;
             $b['sum_disc_bank'] += $order->disc_bank;
             $b['sum_disc_other'] += $order->disc_other;
             $b['sum_tax_pb1'] += $order->tax_pb1;
             $b['sum_service_charge'] += $order->service_charge;
             $b['sum_other_charge'] += $order->other_charge;
             $b['sum_mr_fee'] += $order->mr_fee;
             $b['sum_cc_fee'] += $order->cc_fee;
             if ($c['id_table'] == null || $c['id_table'] == 0) {
                 $c['table_number'] = "0";
             } else {
                 $t = new MasterTableModel();
                 $t->getByID($c['id_table']);
                 $c['table_number'] = $t->table_number;
             }
             $b['Orders'][] = $c;
         }
         $result['list_orders'][] = $b;
         $result['sum_total_grand_total'] += $b['order_sum'];
         $result['sum_total_order_count'] += $b['order_count'];
         $result['sum_disc_mr'] += $b['sum_disc_mr'];
         $result['sum_disc_resto'] += $b['sum_disc_resto'];
         $result['sum_disc_bank'] += $b['sum_disc_bank'];
         $result['sum_disc_other'] += $b['sum_disc_other'];
         $result['sum_tax_pb1'] += $b['sum_tax_pb1'];
         $result['sum_service_charge'] += $b['sum_service_charge'];
         $result['sum_other_charge'] += $b['sum_other_charge'];
         $result['sum_mr_fee'] += $b['sum_mr_fee'];
         $result['sum_cc_fee'] += $b['sum_cc_fee'];
     }
     $result['servers'] = array();
     $s = new RestaurantUserModel();
     $arrS = $s->getWhere("id_restaurant={$idResto} AND status='1' AND (role='Supervisor' OR role='Staff') ORDER BY role DESC");
     foreach ($arrS as $server) {
         unset($ss);
         $ss['id_user'] = $server->id_user;
         $ss['name'] = $server->name;
         $ss['role'] = $server->role;
         $result['servers'][] = $ss;
     }
     $json['status_code'] = 1;
     $json['results'] = $result;
     echo json_encode($json);
     die;
 }
 public static function clearTable($idTable)
 {
     $objTable = new MasterTableModel();
     $objTable->getByID($idTable);
     $objTable->id_order = "0";
     $objTable->waitingOrder = "0";
     $objTable->appOrder = Keys::$EMPTY;
     $objTable->cashPayment = Keys::$EMPTY;
     $objTable->status = Keys::$YES;
     $objTable->load = 1;
     $id_objTable = $objTable->save();
     return $id_objTable;
 }
 public static function getRestoIDByTable($id_table)
 {
     $objTable = new MasterTableModel();
     $arrTable = $objTable->getWhere("id_table = '{$id_table}'");
     pr($arrTable);
 }
 public function orderToKitchen()
 {
     $idOrder = Generic::mustCheck($_GET['id_order'], Keys::$ERR_NOT_FOUND_ID_ORDER);
     $idUser = Generic::mustCheck($_GET['id_user'], Keys::$ERR_NOT_FOUND_ID_USER);
     $allergy = Generic::getOrDefault($_GET['allergy'], Keys::$EMPTY);
     $generalNote = Generic::getOrDefault($_GET['generalNote'], Keys::$EMPTY);
     $order = new MasterOrderModel();
     $order->getByID($idOrder);
     if ($order->order_now) {
         $isExtra = 1;
     }
     if ($order->id_user != $idUser) {
         Generic::errorMsg(Keys::$ERR_ORDER_NOW_NOT_LEADER);
     }
     //restoran harus sudah buka
     if (!Util::isRestaurantOpen($order->id_restaurant)) {
         Generic::errorMsg(Keys::$ERR_RESTAURANT_CLOSED);
     }
     //order harus masih gueltig
     if ($order->status != Keys::$YES || $order->voided != Keys::$NO) {
         Generic::errorMsg(Keys::$ERR_ORDER_INVALID);
     }
     //        if ($order->status_payment == Keys::$PAYMENT_STATUS_PAID)
     //            Generic::errorMsg(Keys::$ERR_ORDER_PAID);
     //cek user gueltig
     $user = new UserModel();
     $user->getByID($idUser);
     if (Generic::IsNullOrEmptyString($user->id_user)) {
         Generic::errorMsg(Keys::$ERR_NOT_FOUND_USER);
     }
     //all order detail yang blom order_now di jadikan ordernow
     //update allergy
     //kabari kitchen
     //        Util::orderNowDineIn($order, $allergy, $generalNote);
     $invoice = new Invoice($order->id_order, true);
     //update totalan di row order model
     $order->disc_resto = $invoice->valDiscRestaurant;
     $order->disc_bank = $invoice->valDiscBank;
     $order->disc_mr = $invoice->valDiscMR;
     $order->tax_pb1 = $invoice->valTaxCharge;
     $order->service_charge = $invoice->valServiceCharge;
     $order->other_charge = $invoice->valOtherCharge;
     $order->cc_fee = $invoice->valFeeBank;
     $order->mr_fee = $invoice->valFeeMR;
     $order->total_cost = $invoice->subTotal;
     $order->grand_total = $invoice->grandTotal;
     $adaPerubahan = 0;
     $arrOrderDetails = Util::getDetailOrderByIdOrder($order->id_order);
     //semua order detail di flag order_now
     foreach ($arrOrderDetails as $orderDetail) {
         if (!$orderDetail instanceof OrderDetailModel) {
             continue;
         }
         if ($orderDetail->order_now) {
             continue;
         } else {
             $orderDetail->datetime_order = leap_mysqldate();
             $orderDetail->order_now = Keys::$YES;
             $orderDetail->load = 1;
             $orderDetail->save();
             $adaPerubahan = 1;
         }
         //notify kitchen
     }
     if (!$order->order_now) {
         $order->allergy = $allergy;
         $order->generalNote = $generalNote;
         if ($order->type_order == Keys::$ORDER_TYPE_TAKE_AWAY_APPS) {
             $resto = new MasterRestaurantModel();
             $resto->getByID($order->id_restaurant);
             $resto->order_number = $resto->order_number + 1;
             $resto->save();
             $order->order_number = $resto->order_number;
         }
     }
     $order->order_now = Keys::$YES;
     $order->datetime_order_now = leap_mysqldate();
     $order->save();
     //kasi flag ditablenya kalau occupied
     if ($order->type_order == Keys::$ORDER_TYPE_DINE_IN_APPS && !Generic::IsNullOrEmptyString($order->id_table)) {
         $table = new MasterTableModel();
         $table->getByID($order->id_table);
         $table->waitingOrder = Keys::$TABLE_IS_WAITING_ORDER;
         $table->save();
     }
     $j["id_order"] = $order->id_order;
     $j['datetime'] = date('Y-m-d H:i:s');
     $typePush = Keys::$typeNotifNewOrder;
     //new dine in order
     if ($isExtra) {
         $typePush = Keys::$typeNotifNewExtra;
         //extra dine in order
     }
     if ($order->type_order == Keys::$ORDER_TYPE_TAKE_AWAY_APPS || $order->type_order == Keys::$ORDER_TYPE_TAKE_AWAY_MANUAL) {
         $typePush = Keys::$typeNotifNewTakeAway;
         //take away order
     }
     return Util::pushNotifyRestaurant($order->id_restaurant, $typePush, $j);
 }
 public function getNormalDineInOrderByRestoId()
 {
     $id_restaurant = Generic::mustCheck($_GET["id_restaurant"], "No ID Restaurant Found!");
     $status_progress = Generic::mustCheck($_GET["status_progress"], "No Status Progress Found!");
     $type_order = Generic::mustCheck($_GET["type_order"], "No Type Order Found");
     $date = $_GET["date"];
     $json['status_code'] = 1;
     $queryBuilder = "id_restaurant='{$id_restaurant}' AND status_progress='{$status_progress}' AND type_order ='{$type_order}' ";
     if (isset($date)) {
         $queryBuilder .= " AND datetime_order LIKE '{$date}% '";
     }
     $queryBuilder .= " ORDER BY datetime_order DESC ";
     $o = new MasterOrderModel();
     $arrOrder = $o->getWhere($queryBuilder);
     $isDineIn = $type_order == "0" || $type_order == "1" ? true : false;
     $isAppOrder = $type_order == "1" || $type_order == "3" ? true : false;
     $c = array();
     foreach ($arrOrder as $order) {
         $table = new MasterTableModel();
         $table->getByID($order->id_table);
         $user = new UserModel();
         $user->getByID($order->id_user);
         $isPaid = $order->status_payment == "1" ? true : false;
         $allUsersIds = trim($order->id_user . $order->user_guest_id);
         if (count($allUsersIds) > 0) {
             foreach ($allUsersIds as $userId) {
                 $u[] = User::getUser($userId);
             }
         } else {
         }
         $c[] = array('table_number' => $table->table_number, 'type_order' => $order->type_order, 'server_name' => $order->server_name, 'datetime_order' => $order->datetime_order, 'id_restaurant' => $order->id_restaurant, 'id_user' => $order->id_user, 'user_guest_id' => $order->user_guest_id, 'full_name' => $user->full_name, 'grand_total' => $order->grand_total, 'status_progress' => $order->status_progress, 'status_payment' => $order->status_payment, 'status' => $order->status, 'allUsersIds' => $allUsersIds, 'isDineIn' => $isDineIn, 'IsAppOrder' => $isAppOrder, 'isPaid' => $isPaid, 'detail_orders' => OrderDetail::getOrderDetailsByIDOrder($order->id_order));
     }
     $json['results']["orders"] = $c;
     echo json_encode($json);
     die;
 }
 private function checkTablePosition($id_restaurant, $position)
 {
     $return = false;
     $objTable = new MasterTableModel();
     $arr = $objTable->getWhere("id_restaurant = {$id_restaurant} AND table_position = {$position}");
     if (count($arr) == 0) {
         //            echo "true";
         $return = true;
     }
     return $return;
 }
 public function scandinein()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $json = array();
     $json['status_code'] = 1;
     $id_user = isset($_GET['id_user']) ? addslashes($_GET['id_user']) : "";
     if (!$id_user) {
         Generic::errorMsg("Please login!");
     }
     if (!User::checkUserID($id_user)) {
         Generic::errorMsg("ID User not found!");
     }
     $QR = isset($_GET['QR']) ? addslashes($_GET['QR']) : "";
     if (!$QR) {
         Generic::errorMsg("No QR found!");
     }
     $id_order = isset($_GET['id_order']) ? addslashes($_GET['id_order']) : "";
     if (!id_order) {
         Generic::errorMsg("id_order not found!");
     }
     if (!MasterOrder::isIdorderValid($id_order)) {
         Generic::errorMsg("id_order not found!");
     }
     $objTableHlp = Mastertable::getTableBYQR($QR);
     $objTable = new MasterTableModel();
     $objTable->getByID($objTableHlp[0]->id_table);
     $objTable->appOrder = "1";
     $objTable->id_order = $id_order;
     $objTable->status = "0";
     $objTable->waitingOrder = "2";
     $objTable->load = 1;
     $objTable->save();
     $objOrder = new MasterOrderModel();
     $objOrder->getByID($id_order);
     $objOrder->id_table = $objTableHlp[0]->id_table;
     $objOrder->type_order = "1";
     $objOrder->load = 1;
     $objOrder->save();
     $objOrderHlp = new MasterOrderModel();
     $arrOrder = $objOrderHlp->getWhere("id_user='******' AND status_progress < 3 OR status_payment='0'");
     Generic::checkCountWithMsg($arrOrder, "No ID Order from the ID User found");
     $id_order = $arrOrder[0]->id_order;
     $order = MasterOrder::getOrder($id_order);
     $arrOrderDetails = OrderDetail::getOrderDetailsByIDOrderAndUserID($id_order, $id_user);
     $order['Order_Details'] = $arrOrderDetails;
     $order['restaurant'] = User::getRestaurant($order['id_restaurant']);
     $json['results'][] = $order;
     echo json_encode($json);
     die;
 }
 public static function getAllTableIDNowNachRestoID($id_restaurant)
 {
     $objTables = new MasterTableModel();
     $arrTables = $objTables->getWhere("id_restaurant='{$id_restaurant}' AND order_now ='1' ORDER BY id_order asc");
     return $arrTables;
 }
 public function overwriteRead($return)
 {
     $objs = $return['objs'];
     foreach ($objs as $obj) {
         if (isset($obj->datetime_order)) {
             $d = strtotime("{$obj->datetime_order}");
             $obj->datetime_order = date("d M, y h:m a", $d);
         }
         if (isset($obj->datetime_done)) {
             $d = strtotime("{$obj->datetime_done}");
             $obj->datetime_done = date("d M, y h:m a", $d);
         }
         if (isset($obj->type_order)) {
             $obj->type_order = $this->arrOrderType[$obj->type_order];
         }
         if (isset($obj->order_now)) {
             $obj->order_now = $this->arrOrderNow[$obj->order_now];
         }
         if (isset($obj->voided)) {
             $obj->voided = $this->arrYesNo[$obj->voided];
         }
         if (isset($obj->status_progress)) {
             $obj->status_progress = $this->arrStatusProgress[$obj->status_progress];
         }
         if (isset($obj->status)) {
             $obj->status = $this->arrStatusOrder[$obj->status];
         }
         if (isset($obj->id_table)) {
             if ($obj->id_table == "0") {
                 $obj->id_table = "Take Away";
             } else {
                 $tab = new MasterTableModel();
                 $tab->getByID($obj->id_table);
                 $obj->id_table = "Table ID " . $obj->id_table . " - Table No. " . $tab->table_number;
             }
         }
         if (isset($obj->id_restaurant)) {
             $resto = new MasterRestaurantModel();
             $resto->getByID($obj->id_restaurant);
             $obj->id_restaurant = $resto->name;
         }
     }
     return $return;
 }