private function updateOrderHeaderStatusProgress($idOrder)
 {
     $order = new MasterOrderModel();
     $order->getByID($idOrder);
     $od = OrderDetail::getOrderDetailsByIDOrder($idOrder);
     foreach ($od as $orderDetail) {
         if (!$order->status_progress == $orderDetail->status_progress) {
             $order->status_progress = min($order->status_progress, $orderDetail->status_progress);
         }
     }
     $order->save();
     return $order;
 }
 public function cancelPendingOrder()
 {
     $idOrder = Generic::mustCheck($_POST['id_order'], "ID Order Not Found");
     $idUser = Generic::mustCheck($_POST['id_user'], "ID User Not Found");
     $order = new MasterOrderModel();
     $order->getByID($idOrder);
     //reject if order already set
     if ($order->order_now == "1") {
         Generic::errorMsg("Order already been set");
     }
     $isLeader = $order->id_user == $idUser;
     if (!$isLeader) {
         $this->removeGuestOrder($idUser, $idOrder);
         $this->success();
     }
     //canceling order
     $order->status = "0";
     $order->save();
     $orderDetails = OrderDetail::getOrderDetailsByIDOrder($idOrder);
     foreach ($orderDetails as $orderDetail) {
         //canceling all detail order
         $oDetail = new OrderDetailModel();
         $oDetail->getByID($orderDetail['id_order']);
         $oDetail->status = "0";
         $oDetail->save();
     }
     $this->success();
 }
 public function emailExcelReportDayByDayOrder()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $idResto = $this->mustCheck($_GET['id_restaurant'], "NO ID Restaurant");
     $range = $_GET['range'] == null || $_GET['range'] == "" ? 30 : $_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'] . "'";
     ///EXCEL
     $ex = array();
     $resto = new MasterRestaurantModel();
     $resto->getByID($idResto);
     $text = "Report\t" . $resto->name . "\t" . date('Y-m-d H:i:s') . "\n";
     $text .= "Interval\t{$range} day(s)\n";
     $text .= "Server\t";
     if ($idServer == null || $idServer == "" || $idServer == "0") {
         $text .= "All Server\n";
     } else {
         $sr = new RestaurantUserModel();
         $sr->getByID($idServer);
         $text .= $sr->name . "\n";
     }
     $text .= "Type Order\t" . Generic::selectStringTypeOrder($_GET['type_order']) . "\n";
     $text .= "Order Status\t";
     $text .= $_GET['voided'] == null || $_GET['voided'] == "" || $_GET['voided'] == "0" ? "Finished Order\n" : "Voided Order\n";
     $text .= "Payment Method\t" . $this->selectTypePayment($_GET['status_payment']) . "\n\n";
     for ($i = 0; $i <= $range; $i++) {
         $date = date('Y-m-d', strtotime("-{$i} days"));
         $o = new MasterOrderModel();
         if ($range == 999) {
             $arrO = $o->getWhere("id_restaurant='{$idResto}' {$extraQ}");
         } else {
             $arrO = $o->getWhere("id_restaurant='{$idResto}' AND DATE(datetime_order)='{$date}' {$extraQ}");
         }
         if (count($arrO) == 0) {
             continue;
         }
         $text .= "Order ID " . $arrO[0]->id_order . "\n";
         if ($arrO[0]->id_server != null || $arrO[0]->id_server != "" || $arrO[0]->id_server != "0") {
             unset($sr);
             $sr = new RestaurantUserModel();
             $sr->getByID($idServer);
             $text .= "Server\t" . $sr->name . "\n";
         }
         $text .= "Time Order\t" . leap_mysqldate_isi($arrO[0]->id_server) . "\n";
         $text .= "Total\t" . $arrO[0]->total_cost . "\n";
         $text .= $arrO[0]->disc_mr == 0 ? "" : "Disc MR\t" . $arrO[0]->disc_mr . "\n";
         $text .= $arrO[0]->disc_resto == 0 ? "" : "Disc Resto\t" . $arrO[0]->disc_resto . "\n";
         $text .= $arrO[0]->disc_bank == 0 ? "" : "Disc Bank\t" . $arrO[0]->disc_bank . "\n";
         $text .= $arrO[0]->disc_other == 0 ? "" : "Disc Other\t" . $arrO[0]->disc_other . "\n";
         $text .= $arrO[0]->tax_pb1 == 0 ? "" : "Tax PB 1\t" . $arrO[0]->tax_pb1 . "\n";
         $text .= $arrO[0]->service_charge == 0 ? "" : "Service Charge\t" . $arrO[0]->service_charge . "\n";
         $text .= $arrO[0]->other_charge == 0 ? "" : "Other Charge\t" . $arrO[0]->other_charge . "\n";
         $text .= "Grand Total\t" . $arrO[0]->grand_total . "\n";
         $text .= "ID Details\tDish Name\tQuantity\tPrice\tVoided\tNote\n";
         foreach ($arrO as $or) {
             $ex[] = $or;
             $detailsOrder = OrderDetail::getOrderDetailsByIDOrder($or->id_order);
             foreach ($detailsOrder as $dor) {
                 $text .= $dor['id_order_detail'] . "\t";
                 $text .= $dor['name'] . "\t";
                 $text .= $dor['quantity'] . "\t";
                 $text .= $dor['price'] . "\t";
                 $text .= $dor['voided'] == "1" ? "YES\t" : "NO\t";
                 $text .= $dor['note'] . "\t";
                 $text .= "\n";
             }
         }
         $text .= "\n\n";
     }
     if (count($ex) <= 0) {
         //            Generic::errorMsg("Empty Record");
         $text .= "EMPTY RECORD\n\n";
     }
     $title = "Report_" . $resto->name . "_" . 1000 * strtotime(date('Y-m-d H:i:s'));
     header("Content-Disposition: attachment; filename=\"{$title}\".xls");
     header("Content-Type: application/vnd.ms-excel");
     $file = fopen($title, "w+");
     fwrite($file, $text);
     fclose($file);
     die;
 }
 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;
 }