public function editConsumableAction() { /** * @var General $apartmentServiceGeneral * @var Storage $storageService * @var Office $officeService * @var ApartmentGroup\Usages\Building $buildingService * @var AssetService $assetService */ $auth = $this->getServiceLocator()->get('library_backoffice_auth'); $hasAssetManagementGlobal = $auth->hasRole(Roles::ROLE_ASSET_MANAGEMENT_GLOBAL); if (!$hasAssetManagementGlobal) { return $this->redirect()->toUrl('/'); } $id = $this->params()->fromRoute('id', 0); $assetService = $this->getServiceLocator()->get('service_warehouse_asset'); $basicInfo = $assetService->getConsumableBasicInfoById($id); if (FALSE === $basicInfo) { Helper::setFlashMessage(['error' => TextConstants::ERROR_NO_ITEM]); return $this->redirect()->toUrl('/'); } $storageService = $this->getServiceLocator()->get('service_warehouse_storage'); $storageList = $storageService->searchStorageByName(false); $locationList = []; foreach ($storageList as $storage) { array_push($locationList, ['id' => AssetService::ENTITY_TYPE_STORAGE . '_' . $storage->getId(), 'info' => $storage->getCityName(), 'label' => 'storage', 'text' => $storage->getName(), 'type' => AssetService::ENTITY_TYPE_STORAGE]); } $categoryService = $this->getServiceLocator()->get('service_warehouse_category'); $allActiveConsumableCategories = $categoryService->getCategories([Category::CATEGORY_TYPE_CONSUMABLE]); $allActiveCategoriesArray = []; foreach ($allActiveConsumableCategories as $row) { $allActiveCategoriesArray[$row->getId()] = $row->getName(); } $assetConsumableForm = new AssetConsumableForm($id, $allActiveCategoriesArray, $basicInfo); $finalStatuses = OrderService::getIrreversiblyStatuses(); $orderService = $this->getServiceLocator()->get('service_wh_order_order'); $ordersRelated = $orderService->getRelatedOrders($basicInfo->getCategoryId(), $basicInfo->getLocationEntityId(), $basicInfo->getLocationEntityType(), $finalStatuses); $hasOrderManagementGlobal = $auth->hasRole(Roles::ROLE_WH_ORDER_MANAGEMENT_GLOBAL); /** * @var Logger $loggerService */ $loggerService = $this->getServiceLocator()->get('ActionLogger'); $actionLogs = $loggerService->getDatatableData(Logger::MODULE_ASSET_CONSUMABLE, $id); return ['id' => $id, 'basicInfo' => $basicInfo, 'form' => $assetConsumableForm, 'location' => $basicInfo->getLocationEntityType() . '_' . $basicInfo->getLocationEntityId(), 'locationList' => $locationList, 'ordersRelated' => $ordersRelated, 'hasOrderManagementGlobal' => $hasOrderManagementGlobal, 'historyData' => json_encode($actionLogs)]; }
/** * @param $offset * @param $limit * @param $sortCol * @param $sortDir * @param string $like * @param array $filters * @return array|bool */ public function getDatatableData($offset, $limit, $sortCol, $sortDir, $like = '', $filters = []) { try { $orderDao = $this->getOrderDao(); if (!empty($filters['status_shipping'])) { $filters['status_shipping'] = explode(',', $filters['status_shipping']); } /** * @var \Library\Authentication\BackofficeAuthenticationService $authService * @var \DDD\Dao\Team\TeamStaff $teamStaffDao */ $authService = $this->getServiceLocator()->get('library_backoffice_auth'); if (!$authService->hasRole(Roles::ROLE_WH_ORDER_MANAGEMENT_GLOBAL)) { $userId = $authService->getIdentity()->id; $query = DbTables::TBL_WM_ORDERS . '.creator_id = ' . $userId; /** * @var Procurement $teamUsageProcurementService */ $teamUsageProcurementService = $this->getServiceLocator()->get('service_team_usages_procurement'); $userProcurementTeams = $teamUsageProcurementService->getUserProcurementTeams($userId); $userProcurementTeamsIds = []; foreach ($userProcurementTeams as $userProcurementTeam) { $userProcurementTeamsIds[] = $userProcurementTeam->getId(); } if (!empty($userProcurementTeamsIds)) { $ids = implode(",", $userProcurementTeamsIds); $query .= ' OR ' . DbTables::TBL_WM_ORDERS . '.team_id in (' . $ids . ')'; } $filters['users_or_teams'] = $query; } $result = $orderDao->getAllOrders($offset, $limit, $sortCol, $sortDir, $like, $filters); $ordersList = $result['orders_list']; $ordersTotalCount = $result['total_count']; $data = []; if ($ordersList->count()) { /** * @var \DDD\Dao\Apartment\General $apartmentDao * @var \DDD\Dao\Warehouse\Storage $storageDao * @var \DDD\Dao\Office\OfficeManager $officeDao * @var \DDD\Dao\Finance\Supplier $supplierDao * @var \DDD\Dao\ApartmentGroup\ApartmentGroup $buildingDao */ $apartmentDao = $this->getServiceLocator()->get('dao_apartment_general'); $storageDao = $this->getServiceLocator()->get('dao_warehouse_storage'); $officeDao = $this->getServiceLocator()->get('dao_office_office_manager'); $supplierDao = $this->getServiceLocator()->get('dao_finance_supplier'); $buildingDao = $this->getServiceLocator()->get('dao_apartment_group_apartment_group'); $assetsCategoryColors = [AssetsCategory::CATEGORY_TYPE_CONSUMABLE => 'success', AssetsCategory::CATEGORY_TYPE_VALUABLE => 'primary']; foreach ($ordersList as $order) { $location = $category = ''; switch ($order['target_type']) { case self::ORDER_LOCATION_TYPE_APARTMENT: $apartmentData = $apartmentDao->getApartmentGeneralInfo($order['target_id']); $location = '<span class="label label-success" title="Apartment">A</span> ' . ' ' . $apartmentData['name']; break; case self::ORDER_LOCATION_TYPE_STORAGE: $storageData = $storageDao->getStorageDetails($order['target_id'], false); $location = '<span class="label label-primary" title="Storage">S</span> ' . ' ' . $storageData['name']; break; case self::ORDER_LOCATION_TYPE_OFFICE: $officeData = $officeDao->getOfficeDetailsById($order['target_id'], false); $location = '<span class="label label-info" title="Office">O</span> ' . ' ' . $officeData['name']; break; case self::ORDER_LOCATION_TYPE_BUILDING: $buildingData = $buildingDao->fetchOne(['id' => $order['target_id']], ['name']); $location = '<span class="label label-warning" title="Building">B</span> ' . ' ' . $buildingData->getName(); break; } $shippingStatus = '<span class="label label-' . self::getStatusesColor()[$order['status_shipping']] . '"' . ' title="' . self::getStatusesShipping()[$order['status_shipping']] . '">' . self::getShortShippingStatuses()[$order['status_shipping']] . '</span>'; if ($order['category_type']) { $category = '<span class="label label-' . $assetsCategoryColors[$order['category_type']] . '"' . ' title="' . AssetsCategory::$categoryTypes[$order['category_type']] . '">' . ' ' . substr(AssetsCategory::$categoryTypes[$order['category_type']], 0, 1) . '</span> ' . $order['category_name']; } $urlBtn = ''; if (!empty($order['url'])) { if ((stristr($order['url'], 'http://') || stristr($order['url'], 'https://')) === false) { $order['url'] = 'http://' . $order['url']; } $urlBtn = '<a href="' . $order['url'] . '" target="_blank" class="btn btn-xs btn-info pull-left"><i class="glyphicon glyphicon-globe"></i> <span class="hidden-sm hidden-xs">URL</span></a>'; } $editBtn = '<a href="/orders/edit/' . $order['id'] . '" target="_blank" class="btn btn-xs btn-primary pull-left">Edit</a>'; $status = Order::getStatusesByText()[$order['status']]; $data[] = ['<span class="label ' . $status[1] . '">' . $status[0] . '</span>', $shippingStatus, $order['title'], $category, $location, !empty($order['estimated_date_start']) ? date(Constants::GLOBAL_DATE_FORMAT, strtotime($order['estimated_date_start'])) : '', !empty($order['estimated_date_end']) ? date(Constants::GLOBAL_DATE_FORMAT, strtotime($order['estimated_date_end'])) : '', $urlBtn, $editBtn]; } } return ['data' => $data, 'total' => $ordersTotalCount]; } catch (\Exception $e) { $this->gr2logException($e, 'Cannot get Orders from datatable', ['offset' => $offset, 'limit' => $limit, 'sort_column' => $sortCol, 'sort_dir' => $sortDir, 'like' => $like]); } return false; }
public function getOrdersCreatedByMeAction() { $auth = $this->getServiceLocator()->get('library_backoffice_auth'); /** @var Order $orderService */ $orderService = $this->getServiceLocator()->get('service_wh_order_order'); $dataSet = $orderService->getOrdersCreatedByMe($auth->getIdentity()->id); $preparedData = []; $actionsColumn = ''; if ($dataSet && count($dataSet)) { $isOrderManager = $auth->hasRole(Roles::ROLE_WH_ORDER_MANAGEMENT) || $auth->hasRole(Roles::ROLE_WH_ORDER_MANAGEMENT_GLOBAL); foreach ($dataSet as $row) { $receivedColumn = " "; if ($isOrderManager) { $actionsColumn = ' <a href="/orders/edit/' . $row->getId() . '" class="btn btn-xs btn-primary" target="_blank" data-html-content="View"></a>'; } $archiveColumn = '<a href="javascript:void(0)"' . ' onClick="archiveOrders(this, ' . $row->getId() . ', event)" class="btn btn-xs btn-primary">Archive</a>'; if ($row->getStatus() == Order::STATUS_ORDER_APPROVED && ($row->getStatusShipping() == Order::STATUS_ORDERED || $row->getStatusShipping() == Order::STATUS_SHIPPED || $row->getStatusShipping() == Order::STATUS_DELIVERED || $row->getStatusShipping() == Order::STATUS_PARTIALLY_RECEIVED || $row->getStatusShipping() == Order::STATUS_ISSUE)) { $receivedColumn = '<a href="javascript:void(0)"' . ' onClick="markAsReceivedOrders(this, ' . $row->getId() . ', event)" class="btn btn-xs btn-success">Mark as Received</a>'; } $status = Order::getStatusesByText()[$row->getStatus()]; $classStatusShippingColor = Order::getStatusesColor()[$row->getStatusShipping()]; $statusShipping = Order::getStatusesShipping()[$row->getStatusShipping()]; $preparedData[] = [$row->getTitle(), '<span class="label ' . $status[1] . '">' . $status[0] . '</span>', '<span class="label label-' . $classStatusShippingColor . '">' . $statusShipping . '</span>', $row->getQuantity(), Order::getLabelForTargetType($row->getTargetType()) . $row->getLocationName(), $row->getOrderDate() ? date(Constants::GLOBAL_DATE_FORMAT, strtotime($row->getOrderDate())) : '', $row->getEstimatedDateStart() && $row->getEstimatedDateEnd() ? date(Constants::GLOBAL_DATE_FORMAT, strtotime($row->getEstimatedDateStart())) . ' - ' . date(Constants::GLOBAL_DATE_FORMAT, strtotime($row->getEstimatedDateEnd())) : '', $row->getTrackingUrl() ? '<a href="' . $row->getTrackingUrl() . '" class="btn btn-xs btn-success" target="_blank">Track</a>' : '', $receivedColumn, $archiveColumn, $actionsColumn]; } } return new JsonModel(["aaData" => $preparedData]); }
public function editAction() { /** * @var Procurement $teamUsageProcurementService * @var \DDD\Service\WHOrder\Order $orderService * @var BackofficeAuthenticationService $authenticationService * @var \DDD\Service\MoneyAccount $moneyAccountService * @var \DDD\Dao\Finance\Expense\Expenses $poDao * @var User $usersService * @var Logger $loggerService */ $teamUsageProcurementService = $this->getServiceLocator()->get('service_team_usages_procurement'); $orderService = $this->getServiceLocator()->get('service_wh_order_order'); $authenticationService = $this->getServiceLocator()->get('library_backoffice_auth'); $moneyAccountService = $this->getServiceLocator()->get('service_money_account'); $usersService = $this->getServiceLocator()->get('service_user'); $poDao = $this->getServiceLocator()->get('dao_finance_expense_expenses'); $request = $this->getRequest(); $orderId = $this->params()->fromRoute('order_id', 0); $orderData = $actionLogs = $orderOptions = []; $orderStatus = $orderService::STATUS_ORDER_NEW; $procurementTeams = $teamUsageProcurementService->getTeamsByUsage(); $hasPORol = $authenticationService->hasRole(Roles::ROLE_EXPENSE_MANAGEMENT); $hasOrderGlobalManagerRol = $authenticationService->hasRole(Roles::ROLE_WH_ORDER_MANAGEMENT_GLOBAL); $userId = $authenticationService->getIdentity()->id; $moneyAccountList = $moneyAccountService->getUserMoneyAccountListByPosession($userId, $moneyAccountService::OPERATION_ADD_TRANSACTION); // edit mode if ($orderId) { $orderData = $orderService->getOrder($orderId); if (!$orderData) { Helper::setFlashMessage(['error' => TextConstants::ERROR_NO_ITEM]); return $this->redirect()->toRoute('orders'); } // check permission if (!$hasOrderGlobalManagerRol && $userId != $orderData->getCreatorId() && !$orderService->isYourTeamOrder($orderId, $userId)) { Helper::setFlashMessage(['error' => TextConstants::ERROR_NO_VIEW_PERMISSION]); $this->redirect()->toRoute('orders'); } } $orderOptions = $orderService->getOptions($orderData); $orderTargetDetails = $orderOptions['orderTargetDetails']; $supplierDetails = $orderOptions['supplierDetails']; $currencyList = $orderOptions['currencyList']; $statusShipping = $orderOptions['statusShipping']; $peopleList = $usersService->getPeopleListWithManagersForSelect(); $budgetHoldersList = $usersService->getBudgetHolderList(); $itemForm = new ExpenseTicket($budgetHoldersList, $peopleList, \Library\Finance\Process\Expense\Helper::TYPE_ORDER_EXPENSE); $form = new OrderForm($orderData, $orderTargetDetails, $supplierDetails, $currencyList); $form->setInputFilter(new OrderFilter()); $form->prepare(); if ($request->isPost()) { $postData = $request->getPost(); $form->setData($postData); if ($form->isValid()) { $saveOrder = $orderService->saveOrder($postData, $orderId); if ($saveOrder['status'] == 'success') { Helper::setFlashMessage(['success' => $orderId ? TextConstants::SUCCESS_UPDATE : TextConstants::SUCCESS_ADD]); $this->redirect()->toRoute('orders/edit', ['controller' => 'warehouse_order', 'action' => 'edit', 'order_id' => $saveOrder['id']]); } else { Helper::setFlashMessage(['error' => $saveOrder['msg']]); $this->redirect()->toRoute('orders'); } } } else { // edit mode if ($orderId) { if ($orderData) { $orderStatus = $orderData->getStatus(); if (isset($orderService::getStatusesByText()[$orderStatus])) { $orderStatusText = $orderService::getStatusesByText()[$orderStatus]; } if (isset($orderOptions['objectData'])) { $form->populateValues($orderOptions['objectData']); } $poId = $orderData->getPoId(); if (!is_null($orderData->getPoItemId())) { /** * @var \DDD\Service\Finance\Expense\ExpenseTicket $financeService */ $financeService = $this->getServiceLocator()->get('service_finance_expense_expense_ticket'); $poItemAttachment = $financeService->getItemAttachment($poId); } $created = $orderData->getUser() . ' ' . date(Constants::GLOBAL_DATE_FORMAT, strtotime($orderData->getDateCreated())); $viewRejectedButton = $orderStatus != OrderService::STATUS_ORDER_APPROVED && $orderData->getStatusShipping() == OrderService::STATUS_TO_BE_ORDERED; $loggerService = $this->getServiceLocator()->get('ActionLogger'); $actionLogs = $loggerService->getDatatableData(Logger::MODULE_WH_ORDER, $orderId); } else { Helper::setFlashMessage(['error' => TextConstants::ERROR_NO_ITEM]); $this->redirect()->toRoute('orders'); } } } // user managed POs $poDao->setEntity(new \ArrayObject()); $userPOList = $poDao->getManagerPOs($userId); return new ViewModel(['form' => $form, 'itemForm' => $itemForm, 'statusShipping' => $statusShipping, 'orderId' => $orderId, 'orderShippingStatuses' => OrderService::getStatusesShipping(), 'historyData' => json_encode($actionLogs), 'orderStatus' => $orderStatus, 'isRejected' => $orderStatus == OrderService::STATUS_ORDER_REJECTED, 'orderStatusText' => isset($orderStatusText) ? $orderStatusText : '', 'hasPORol' => $hasPORol, 'poId' => isset($poId) ? $poId : 0, 'created' => isset($created) ? $created : '', 'viewRejectedButton' => isset($viewRejectedButton) && $viewRejectedButton ? true : false, 'orderData' => $orderData, 'procurementTeams' => $procurementTeams, 'moneyAccountList' => $moneyAccountList, 'userPOList' => $userPOList, 'currentStatusShipping' => $orderData ? $orderData->getStatusShipping() : 0, 'poItemAttachment' => isset($poItemAttachment) ? $poItemAttachment : false]); }