示例#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;
 }