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