/** * 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; }