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 setTableStatus($id_table, $field, $value)
 {
     $objTable = new MasterTableModel();
     $objTable->getByID($id_table);
     $objTable->{$field} = $value;
     $objTable->load = 1;
     $objTable->save();
     //        pr($objTable);
 }
 public function orderKitchenDone()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $orderId = $this->mustCheck($_POST["id_order"], "No Order ID");
     $order = new MasterOrderModel();
     $order->getByID($orderId);
     if ($order->status_progress == 2) {
         $order->status_progress = 3;
         $order->save();
     } elseif ($order->status_progress == 3) {
         Generic::errorMsg("Order Already Paid");
     } elseif ($order->status_progress == 4) {
         Generic::errorMsg("Order Already Done");
     } elseif ($order->status_progress == 9) {
         Generic::errorMsg("Order Voided");
     } else {
         Generic::errorMsg("Some Dishes Might Not Complete");
     }
     $o = new OrderDetailModel();
     $orderDetails = $o->getWhere("id_order='{$orderId}'");
     foreach ($orderDetails as $orderDetail) {
         if ($orderDetail->status_progress != 9) {
             $orderDetail->load = 1;
             $orderDetail->status_progress = 3;
             $orderDetail->save();
         }
     }
     $table = new MasterTableModel();
     $table->getByID($order->id_table);
     $table->waitingOrder = "0";
     $table->save();
     if ($order->type_order == "0" || $order->type_order == "1") {
         $this->pushToRestoCashier($order->id_restaurant, "", "", Push::$typeNotifRefreshViewTable);
     } else {
         $this->pushToRestoCashier($order->id_restaurant, "", "", Push::$typeNotifRefreshViewTakeAway);
     }
     $json = array();
     $json['status_code'] = 1;
     $json['results']["message"] = "Success";
     echo json_encode($json);
     die;
 }
 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 setTable()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $json = array();
     $cmd = isset($_GET['cmd']) ? addslashes($_GET['cmd']) : "";
     if (!$cmd) {
         $json['status_code'] = 0;
         $json['status_message'] = "No ID Found";
         echo json_encode($json);
         die;
     }
     $id_restaurant = isset($_GET['id_restaurant']) ? addslashes($_GET['id_restaurant']) : "";
     if (!$id_restaurant) {
         $json['status_code'] = 0;
         $json['status_message'] = "No ID Found";
         echo json_encode($json);
         die;
     }
     $objRestaurant = new MasterRestaurantModel();
     if ($cmd == "initTable") {
         $tableQuantity = isset($_GET['tblQty']) ? addslashes($_GET['tblQty']) : "";
         if (!$tableQuantity) {
             $json['status_code'] = 0;
             $json['status_message'] = "No ID Found";
             echo json_encode($json);
             die;
         }
         $tableColumns = isset($_GET['tblCol']) ? addslashes($_GET['tblCol']) : "";
         if (!$tableColumns) {
             $json['status_code'] = 0;
             $json['status_message'] = "No ID Found";
             echo json_encode($json);
             die;
         }
         $arr = $objRestaurant->getWhere("id_restaurant='{$id_restaurant}' AND new_set_table !='1' ");
         // pr($arr);
         if (count($arr) <= 0) {
             $json['status_code'] = 0;
             $json['status_message'] = "No ID Found";
             echo json_encode($json);
             die;
         } else {
             for ($j = 1; $j <= $tableQuantity; $j++) {
                 if ($this->checkTablePosition($id_restaurant, $j) == 1) {
                     // create new datensatz in table Table
                     //                        echo $this->checkTablePosition($id_restaurant, $j);
                     $objTable = new MasterTableModel();
                     $objTable->table_number = $j;
                     $objTable->table_position = $j;
                     $objTable->id_restaurant = $id_restaurant;
                     $objTable->status = '1';
                     $objTable->availability = '1';
                     $id = $objTable->save();
                     if (!$id) {
                         $json['status_code'] = 0;
                         $json['status_message'] = Lang::t('save failed');
                         //$json['err'] = array("all" => Lang::t('save failed'));
                     } else {
                         $json['status_code'] = 1;
                         $json['results'] = "Sukses";
                     }
                 }
             }
         }
     } elseif ($cmd == "edit") {
         $arr = $objRestaurant->getWhere("id_restaurant='{$id_restaurant}' AND new_set_table='1' ");
         if (count($arr) <= 0) {
             $json['status_code'] = 0;
             $json['status_message'] = "No ID Found";
             echo json_encode($json);
             die;
         }
         $tableColumns = isset($_GET['tblCol']) ? addslashes($_GET['tblCol']) : "";
         if (!$tableColumns) {
             $tableColumns = $arr[0]->table_column;
         }
         $tableQuantity = isset($_GET['tblQty']) ? addslashes($_GET['tblQty']) : "";
         if (!$tableQuantity) {
             $tableQuantity = $arr[0]->table_quantity;
         } else {
             // jika qty baru > besar dr yg skrg, maka add baru
             // jika qty baru < qty skrf
         }
     } elseif ($cmd == "updateTable") {
         $arr = $objRestaurant->getWhere("id_restaurant='{$id_restaurant}'  ");
         if (count($arr) <= 0) {
             $json['status_code'] = 0;
             $json['status_message'] = "No ID Found";
             echo json_encode($json);
             die;
         }
         $tableColumns = isset($_GET['tblCol']) ? addslashes($_GET['tblCol']) : "";
         if (!$tableColumns) {
             $tableColumns = $arr[0]->table_column;
         }
         $tableQuantity = isset($_GET['tblQty']) ? addslashes($_GET['tblQty']) : "";
         if (!$tableQuantity) {
             $tableQuantity = $arr[0]->table_quantity;
         } else {
             // update di table restaurant
             //
             // jika qty baru > besar dr yg skrg, maka add baru
             if ($tableQuantity > $arr[0]->table_quantity) {
                 //10 - 5
                 //                    echo "arr[0]->table_quantity: " . $arr[0]->table_quantity . "<br>";
                 //                    echo "tableQuantity: " . $tableQuantity . "<br>";
                 for ($j = $arr[0]->table_quantity + 1; $j <= $tableQuantity; $j++) {
                     if ($this->checkTablePosition($id_restaurant, $j) == 1) {
                         // create new datensatz in table Table
                         //                        echo $this->checkTablePosition($id_restaurant, $j);
                         $objTable = new MasterTableModel();
                         $objTable->table_number = $j;
                         $objTable->table_position = $j;
                         $objTable->id_restaurant = $id_restaurant;
                         $objTable->status = '1';
                         $objTable->availability = '0';
                         $id = $objTable->save();
                         if (!$id) {
                             $json['status_code'] = 0;
                             $json['status_message'] = Lang::t('save failed');
                         } else {
                             $json['status_code'] = 1;
                             $json['results']['message'] = "success";
                         }
                     }
                 }
             } elseif ($tableQuantity < $arr[0]->table_quantity) {
                 for ($j = $tableQuantity + 1; $j <= $arr[0]->table_quantity; $j++) {
                     $objTable = new MasterTableModel();
                     // echo $j . "<br>";
                     $arrTable = $objTable->getWhere("id_restaurant={$id_restaurant} AND table_number= {$j}");
                     foreach ($arrTable as $val) {
                         $val->availability = "0";
                         $val->load = 1;
                         $id_objTable = $val->save();
                         if (!$id_objTable) {
                             $json['status_code'] = 0;
                             $json['results'] = Lang::t('save failed');
                         } else {
                             $json['status_code'] = 1;
                             $json['results']['message'] = "success";
                         }
                     }
                 }
             }
             // jika qty baru < qty skrf
         }
     } else {
         $json['status_code'] = 0;
         $json['status_message'] = "No ID Found";
         echo json_encode($json);
         die;
     }
     $objRestaurant->getById($id_restaurant);
     if ($cmd == "initTable") {
         $onlyUpdates = array("table_quantity" => $tableQuantity, "table_column" => $tableColumns, "new_set_table" => "1");
     } elseif ($cmd == "edit" || $cmd == "updateTable") {
         $onlyUpdates = array("table_quantity" => $tableQuantity, "table_column" => $tableColumns);
     }
     $objRestaurant->fill($onlyUpdates);
     $id_obj = $objRestaurant->save();
     if (!$id_obj) {
         $json['status_code'] = 0;
         $json['status_message'] = Lang::t('save failed');
     } else {
         $json['status_code'] = 1;
         $json['results']['message'] = "success";
     }
     echo json_encode($json);
     die;
 }
 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 function orderNow()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $json = array();
     $json['status_code'] = 1;
     $id_user = isset($_POST['id_user']) ? addslashes($_POST['id_user']) : "";
     if (!$id_user) {
         Generic::errorMsg("Please login!");
     }
     if (!User::checkUserID($id_user)) {
         Generic::errorMsg("ID User not found!");
     }
     $id_order = isset($_POST['id_order']) ? addslashes($_POST['id_order']) : "";
     if (!$id_order) {
         Generic::errorMsg("ID Order not found!");
     }
     $allergy = isset($_POST['allergy']) ? addslashes($_POST['allergy']) : "";
     $generalNote = isset($_POST['generalNote']) ? addslashes($_POST['generalNote']) : "";
     $objOrder = new MasterOrderModel();
     $arrOrder = $objOrder->getWhere("id_user='******'  AND id_order = '{$id_order}' AND status != '0' AND status_payment = '0' AND order_now = '0'");
     Generic::checkCountWithMsg($arrOrder, "ID Order not found!");
     $id_order = $arrOrder[0]->id_order;
     $dineIn = true;
     if ($arrOrder[0]->type_order == 3) {
         $dineIn = false;
     }
     $id_restaurant = $arrOrder[0]->id_restaurant;
     $arrOrder[0]->datetime_order = $this->setCurrentDate();
     $arrOrder[0]->order_now = "1";
     $arrOrder[0]->datetime_order = leap_mysqldate();
     $arrOrder[0]->generalNote = $generalNote;
     $arrOrder[0]->allergy = $allergy;
     $arrOrder[0]->load = 1;
     $id = $arrOrder[0]->save();
     // cari orderdetails yg id_order
     $objOrderDetails = new OrderDetailModel();
     $arrOrderdetails = $objOrderDetails->getWhere("id_order='{$id_order}'");
     Generic::checkCountWithMsg($arrOrderdetails, "ID Order Details not found!");
     foreach ($arrOrderdetails as $orderdetails) {
         $orderdetails->datetime_order = $this->setCurrentDate();
         $orderdetails->load = 1;
         $orderdetails->save();
     }
     $objTable = new MasterTableModel();
     $objTable->getByID($arrOrder[0]->id_table);
     $objTable->waitingOrder = "1";
     $objTable->load = 1;
     $objTable->save();
     //        pr($objTable);
     $json['results'] = MasterOrder::getOrder($id_order);
     echo json_encode($json);
     $j["id_order"] = $id_order;
     $j['datetime'] = date('Y-m-d H:i:s');
     $msg = $dineIn ? "Table {$objTable->table_number} : New Apps Dine In Order " : "New Apps Take Away Order";
     $pushType = $dineIn ? Push::$typeNotifNewOrder : Push::$typeNotifNewTakeAway;
     $this->pushToRestoCashier($id_restaurant, $msg, $j, $pushType);
     die;
 }