示例#1
0
文件: Order.php 项目: arbi/MyCode
 /**
  * @param $data
  * @param $orderId
  * @param boolean $traverse
  * @return int
  */
 public function saveOrder($data, $orderId, $traverse = true)
 {
     $orderDao = $this->getOrderDao();
     if ($traverse) {
         $data = array_filter(iterator_to_array($data));
     }
     $oldData = $orderDao->fetchOne(['id' => $orderId]);
     if (isset($data['title'])) {
         $params['title'] = $data['title'];
     }
     if (isset($data['price']) && !($oldData && $oldData->getStatus() != Order::STATUS_ORDER_NEW)) {
         $params['price'] = $data['price'];
     }
     if (isset($data['currency'])) {
         $params['currency_id'] = $data['currency'];
     }
     if (isset($data['asset_category_id'])) {
         $params['asset_category_id'] = $data['asset_category_id'];
     }
     if (isset($data['location_target']) && $data['location_target']) {
         $orderTarget = explode('_', $data['location_target']);
         if (isset($data['asset_category_id']) && $data['asset_category_id'] && !$this->checkAssetCategoryAndLocationTargetCompliance($data['asset_category_id'], $orderTarget[0])) {
             return ['status' => 'error', 'msg' => TextConstants::WAREHOUSE_ORDER_CATEGORY_DOES_NOT_CORRESPOND_WITH_LOCATION];
         }
         $params['target_type'] = $orderTarget[0];
         $params['target_id'] = $orderTarget[1];
     }
     if (isset($data['quantity'])) {
         $params['quantity'] = $data['quantity'];
     }
     if (isset($data['quantity_type'])) {
         $params['quantity_type'] = $data['quantity_type'];
     }
     if (isset($data['supplier_id'])) {
         $params['supplier_id'] = $data['supplier_id'];
         if ($orderId) {
             $orderExpenseItemId = $orderDao->fetchOne(['id' => $orderId], ['po_item_id'])->getPoItemId();
             if (!is_null($orderExpenseItemId) && $orderExpenseItemId) {
                 $transactionAccountsDao = $this->getServiceLocator()->get('dao_finance_transaction_transaction_accounts');
                 $transactionAccountId = $transactionAccountsDao->fetchOne(['holder_id' => $data['supplier_id'], 'type' => 4], ['id'])->getId();
                 if (is_null($transactionAccountId)) {
                     return false;
                 }
                 $expenseItemDao = new ExpenseItem($this->getServiceLocator(), '\\ArrayObject');
                 $expenseItemDao->save(['account_id' => $transactionAccountId], ['id' => $orderExpenseItemId]);
             }
         }
     } else {
         $params['supplier_id'] = null;
         if ($orderId) {
             $orderExpenseItemId = $orderDao->fetchOne(['id' => $orderId], ['po_item_id'])->getPoItemId();
             if (!is_null($orderExpenseItemId) && $orderExpenseItemId) {
                 $expenseItemDao = new ExpenseItem($this->getServiceLocator(), '\\ArrayObject');
                 $expenseItemDao->save(['account_id' => null], ['id' => $orderExpenseItemId]);
             }
         }
     }
     if (isset($data['supplier_tracking_number'])) {
         $params['supplier_tracking_number'] = $data['supplier_tracking_number'];
     }
     if (isset($data['supplier_transaction_id'])) {
         $params['supplier_transaction_id'] = $data['supplier_transaction_id'];
     }
     if (isset($data['supplier_transaction_id'])) {
         $params['url'] = $data['url'];
     }
     if (isset($data['estimated_delivery_date_range']) && $data['estimated_delivery_date_range']) {
         $dataRange = explode(' - ', $data['estimated_delivery_date_range']);
         $params['estimated_date_start'] = date("Y-m-d H:i:s", strtotime($dataRange[0]));
         $params['estimated_date_end'] = date("Y-m-d H:i:s", strtotime($dataRange[1]));
     }
     if (isset($data['description'])) {
         $params['description'] = $data['description'];
     }
     if (isset($data['received_date'])) {
         $params['received_date'] = date('Y-m-j H:i:s', strtotime($data['received_date']));
     }
     if (isset($data['received_quantity'])) {
         $params['received_quantity'] = $data['received_quantity'];
     }
     if (isset($data['order_date'])) {
         $params['order_date'] = date('Y-m-j H:i:s', strtotime($data['order_date']));
     }
     if (isset($data['tracking_url'])) {
         $params['tracking_url'] = $data['tracking_url'];
     }
     try {
         if ($orderId) {
             if (isset($data['status_shipping']) && $data['status_shipping'] != $oldData->getStatusShipping()) {
                 $params['status_shipping'] = $data['status_shipping'];
                 /**
                  * @var Logger $loggerService
                  */
                 $loggerService = $this->getServiceLocator()->get('ActionLogger');
                 $loggerService->save(Logger::MODULE_WH_ORDER, $orderId, Logger::ACTION_WH_ORDER_STATUS_CHANGED, 'Order Status changed from the "' . Order::getStatusesShipping()[$oldData->getStatusShipping()] . '" to "' . Order::getStatusesShipping()[$data['status_shipping']] . '"');
             }
             if (isset($data['team_id'])) {
                 $params['team_id'] = $data['team_id'];
             }
             $orderDao->save($params, ['id' => $orderId]);
         } else {
             $auth = $this->getServiceLocator()->get('library_backoffice_auth');
             $params['creator_id'] = $auth->getIdentity()->id;
             $params['date_created'] = date('Y-m-d');
             $params['status_shipping'] = self::STATUS_TO_BE_ORDERED;
             $params['team_id'] = Team::TEAM_PROCUREMENT;
             $orderId = $orderDao->save($params);
         }
     } catch (\Exception $e) {
         return ['status' => 'error', 'msg' => TextConstants::ERROR];
     }
     return ['status' => 'success', 'id' => $orderId];
 }
    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]);
    }
示例#3
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]);
 }