Example #1
0
 /**
  * Submits order to database, by getting records from Menu table, calculating 
  * Inserts into Order and Order details table with appropriate qty.
  * @param type $operationData
  * @param type $userInfo
  * @return type 
  */
 private function placeOrder($operationData, $userInfo)
 {
     $orderUploadRequest = UploadDTO\OrderUploadDto::Deserialize($operationData);
     if (!is_array($orderUploadRequest->orderDetails)) {
         Log::error("No menu items are provided or wrong element in JSON");
         return NULL;
     }
     $orderController = new OrderController();
     $orderCheck = $orderController->orderCheck($orderUploadRequest->custId, $userInfo->restaurantId, BILLED_ORDER_STATUS);
     if ($orderCheck) {
         $this->response->body(DTO\ErrorDto::prepareError(105));
         return;
     }
     $menuIdList = null;
     $menuIdLoopCounter = 0;
     $subMenuIdLoopCounter = 0;
     $subMenuList = null;
     foreach ($orderUploadRequest->orderDetails as $menuItemIndex => $menuItemRecord) {
         if ($menuItemRecord->orderQty) {
             if ($menuItemRecord->subMenuId) {
                 $subMenuList[$subMenuIdLoopCounter++] = $menuItemRecord->subMenuId;
             } else {
                 $menuIdList[$menuIdLoopCounter] = $menuItemRecord->menuId;
             }
         }
         if (isset($menuItemRecord->note)) {
             $note = $menuItemRecord->note;
         } else {
             $note = null;
         }
         $orderNote[$menuItemRecord->menuId] = $note;
         $menuIdLoopCounter++;
     }
     if (!count($menuIdList) and !count($subMenuList)) {
         $this->response->body(DTO\ErrorDto::prepareError(117));
         \Cake\Log\Log::error("request with zero menu quantity");
         return;
     }
     $orderTotalAmt = 0;
     $orderLoopCounter = 0;
     $orderDetailList[] = NULL;
     $MenuInfoList = null;
     $menuController = new MenuController();
     if (count($menuIdList)) {
         $MenuInfoList = $menuController->getMenuItemList($userInfo->restaurantId, $menuIdList);
     }
     $SubMenuInfo = null;
     if (count($subMenuList)) {
         $subMenuController = new SubMenuController();
         $SubMenuInfo = $subMenuController->getSubMenu($subMenuList);
     }
     if (is_null($MenuInfoList) and is_null($SubMenuInfo)) {
         $this->response->body(DTO\ErrorDto::prepareError(117));
         \Cake\Log\Log::error("request with zero menu quantity");
         return;
     }
     if ($MenuInfoList) {
         foreach ($MenuInfoList as $menuInfo) {
             $resultArray = $this->search($orderUploadRequest->orderDetails, "menuId", $menuInfo->menuId);
             $menuQty = $resultArray->orderQty;
             $orderTotalAmt += $menuQty * $menuInfo->price;
             $orderDetailEntryDto = new UploadDTO\OrderDetailEntryDto($orderUploadRequest->orderId, $menuQty, $menuQty * $menuInfo->price, $menuInfo->menuId, $menuInfo->subMenuId, $menuInfo->menuTitle, $menuInfo->price, $orderNote[$menuInfo->menuId]);
             $orderDetailList[$orderLoopCounter] = $orderDetailEntryDto;
             $orderLoopCounter++;
         }
     }
     if ($SubMenuInfo) {
         foreach ($SubMenuInfo as $menuInfo) {
             $resultArray = $this->subMenuSearch($orderUploadRequest->orderDetails, "menuId", $menuInfo->menuId, "subMenuId", $menuInfo->subMenuId);
             $menuQty = $resultArray->orderQty;
             $orderTotalAmt += $menuQty * $menuInfo->price;
             $orderDetailEntryDto = new UploadDTO\OrderDetailEntryDto($orderUploadRequest->orderId, $menuQty, $menuQty * $menuInfo->price, $menuInfo->menuId, $menuInfo->subMenuId, $menuInfo->menuTitle . '  ' . $menuInfo->subMenuTitle, $menuInfo->price, $orderNote[$menuInfo->menuId]);
             $orderDetailList[$orderLoopCounter] = $orderDetailEntryDto;
             $orderLoopCounter++;
         }
     }
     $orderStatus = PLACED_ORDER_STATUS;
     $rConfigSettingController = new RConfigSettingsController();
     if ($rConfigSettingController->allow($userInfo->restaurantId, KOT_CONFIG_KEY)) {
         $orderStatus = FULFILLED_ORDER_STATUS;
     }
     $this->transBegin();
     $maxOrderNo = $orderController->getMaxOrderNo($userInfo->restaurantId);
     $orderEntryDto = new UploadDTO\OrderEntryDto($orderUploadRequest->orderId, $maxOrderNo, $orderTotalAmt, $userInfo->restaurantId, $orderUploadRequest->custId, $this->isZero($orderUploadRequest->tableId), $orderStatus, $userInfo->userId, $this->isZero($orderUploadRequest->takeawayNo), $this->isZero($orderUploadRequest->deliveryNo), $orderUploadRequest->orderType);
     $orderHeaderEntrySucceded = $orderController->addOrderEntry($orderEntryDto);
     if ($orderHeaderEntrySucceded == 0) {
         $this->transRollback();
         Log::error('No order entry was inserted into db');
         return;
     }
     $orderDetailController = new OrderDetailsController();
     $orderDetailEntrySucceeded = $orderDetailController->addOrderEntries($orderDetailList, $userInfo);
     if ($orderDetailEntrySucceeded == 0) {
         $this->transRollback();
         Log::error('No order entry was inserted for order details into db');
         return;
     }
     $this->transCommit();
     return $orderHeaderEntrySucceded;
 }
Example #2
0
 public function placeOrder()
 {
     if (!$this->isLogin()) {
         $this->redirect('login');
     }
     $data = explode('/', $this->request->url);
     Log::debug($data);
     $userController = new UserController();
     $restaurantId = $this->readCookie('cri');
     $users = $userController->getUsers($restaurantId);
     $menuCategoryController = new MenuCategoryController();
     $categories = $menuCategoryController->getMenuCategories();
     $menuController = new MenuController();
     $menus = $menuController->getMenus($restaurantId);
     $tableId = $this->readCookie('cti');
     $takeawayNo = $this->readCookie('ctn');
     $deliveryNo = $this->readCookie('cdn');
     $rtableController = new RTablesController();
     if ($tableId) {
         $tableTransactionController = new TableTransactionController();
         $custId = $tableTransactionController->getCurrentCustomer($tableId, $restaurantId);
     } else {
         if ($takeawayNo) {
             $takeawayController = new TakeawayController();
             $custId = $takeawayController->getTakeawayCustomer($takeawayNo, $restaurantId);
         } else {
             if ($deliveryNo) {
                 $deliverycontroller = new DeliveryController();
                 $custId = $deliverycontroller->getCurrentCustomer($deliveryNo, $restaurantId);
             }
         }
     }
     $rconfigSettingcontroller = new RConfigSettingsController();
     $set = ['users' => $users, 'menus' => $menus, 'categories' => $categories, 'option' => $data[0], 'tableId' => $tableId, 'takeawayNo' => $takeawayNo, 'deliveryNo' => $deliveryNo, 'custId' => $custId, 'kot_permission' => $rconfigSettingcontroller->allow($restaurantId, KOT_CONFIG_KEY)];
     if ($tableId) {
         $set['isOccupied'] = $rtableController->isOccupied($tableId);
         $set['tableNo'] = $rtableController->getBillTableNo($tableId);
     }
     $this->set($set);
 }