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