public function indexAction() { $data = array(); $data['title'] = 'Orders'; $data['menu'] = array('link' => 'products', 'anchor' => 'View products'); $serviceLocator = $this->getServiceLocator(); $dbCheck = $serviceLocator->get('DbCheck'); if ($dbCheck['dbConnect'] === false) { $this->layout('db/error'); return false; } // if $stations = new PickingStationsLibrary($serviceLocator); $data['pickingStations'] = $stations->getPickingStations(); $currentPickingStation = $stations->getCurrentPickingStation(); $data['currentPickingStationName'] = $currentPickingStation['StationName']; $ordersModel = new OrdersModel($serviceLocator); $data['orders'] = $ordersModel->getOrders(); $request = $this->getRequest(); if (null !== $request->getQuery('view')) { $data['jsVars'] = 'var viewOrder = "' . $request->getQuery('view') . '";'; } $this->layout()->setVariables($data); return new ViewModel($data); }
public function indexAction() { $data = array(); $data['title'] = 'Products'; $data['new_order'] = true; $data['menu'] = array('link' => 'orders', 'anchor' => 'View orders'); $serviceLocator = $this->getServiceLocator(); $dbCheck = $serviceLocator->get('DbCheck'); if ($dbCheck['dbConnect'] === false) { $this->layout('db/error'); return false; } // if $stations = new PickingStationsLibrary($serviceLocator); $data['pickingStations'] = $stations->getPickingStations(); $currentPickingStation = $stations->getCurrentPickingStation(); $data['currentPickingStationName'] = $currentPickingStation['StationName']; $productsModel = new ProductsModel($serviceLocator); $form = new ProductsForm('newOrder'); $request = $this->getRequest(); if ($request->isPost()) { $filter = new ProductsFilter(); $form->setInputFilter($filter->getInputFilter()); $form->setData($request->getPost()); if (!$form->isValid()) { $messages = $form->getMessages(); return $this->raiseError(current($messages['ssf'])); } // if $products = $filter->isExtraValid($request->getPost('product')); if ($products === false) { return $this->raiseError('The "Send Order" operation encountered some problems. If this message persists, please refer to website\'s admin.'); } $productsIDs = array_keys($products); $availableStockUnitsAndLocations = $productsModel->getProductsAvailableUnitsAndLocations($productsIDs); $availableUnitsDB = array_column($availableStockUnitsAndLocations, 'AvailableStockUnits'); $productsIDsDB = array_column($availableStockUnitsAndLocations, 'ID'); $availableUnits = array_combine($productsIDsDB, $availableUnitsDB); foreach ($products as $id => $units) { if ($availableUnits[$id] < $units) { return $this->raiseError('There aren\'t enough available units to cover your request'); } } // foreach $warehouseLocationsDB = array_column($availableStockUnitsAndLocations, 'WarehouseLocation'); $warehouseLocations = array_combine($productsIDsDB, $warehouseLocationsDB); $routeCalculator = new RouteCalculatorLibrary(); $routeCalculator->init($currentPickingStation['StationAlias'], $warehouseLocations); $route = $routeCalculator->getRoute(); $routes = array_flip($route); $ordersModel = new OrdersModel($serviceLocator); $insertOrder = array('OrderDate' => date('Y-m-d H:i:s'), 'PickingStationID' => $currentPickingStation['ID']); $insertedOrderID = $ordersModel->newOrder($insertOrder); $insertOrderProducts = array(); foreach ($products as $productID => $orderedUnits) { $insertOrderProducts[] = array('OrderID' => $insertedOrderID, 'ProductID' => $productID, 'OrderedUnits' => $orderedUnits, 'Route' => $routes[$productID] + 1); } // foreach $insertedOrderProducts = $productsModel->addOrderProducts($insertOrderProducts); $updatedProducts = $productsModel->updateStockValue($products); return $this->redirect()->toRoute('orders', array(), array('query' => array('view' => $insertedOrderID))); } // if $data['form'] = $form; $data['letters'] = range('A', 'Z'); $products = $productsModel->getProducts(); $data['products'] = $this->sortProducts($products); $this->layout()->setVariables($data); return new ViewModel($data); }