示例#1
0
文件: Asset.php 项目: arbi/MyCode
 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)];
 }
示例#2
0
文件: Order.php 项目: arbi/MyCode
 /**
  * @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 = "&nbsp;";
                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]);
    }
示例#4
0
 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]);
 }