public PackingOrderModel FindOrder(string number) { WebSession.EnsureUserRight(OrdersPackingUserRights.OpenOrderPackingApplication); number = number.Trim(); if (number.Length < 3) { throw new Exception("Musí být alespoň tři čísla"); } var seek = m_orderRepository.SearchOrder(number, OrderStatus.ReadyToPack.Id); IPurchaseOrder filtered = null; if (seek != null) { filtered = m_orderRepository.GetOrder(seek.Value); } if (filtered == null) { Log.Info("Číslo objednávky nenalezeno"); Log.Info("Spojuji se se Zásilkovnou..."); var orderNumber = m_shipmentProvider.GetOrderNumberByPackageNumber(number); if (string.IsNullOrWhiteSpace(orderNumber)) { throw new Exception($"Objednávka {number} nebyla nalezena"); } var paid = m_orderRepository.GetOrdersByStatus( OrderStatus.ReadyToPack, DateTime.Now.AddDays(-90), DateTime.Now.AddDays(1)).ToList(); var order = paid.FirstOrDefault(o => (o.PreInvoiceId == orderNumber) || (o.OrderNumber == orderNumber)); if (order == null) { Log.Info("Aplikace nemá načtenu tuto zásilku, je třeba aktualizovat seznam zásilek z Floxu..."); paid = m_ordersFacade.GetAndSyncPaidOrders(DateTime.Now.AddDays(-30)).ToList(); order = paid.FirstOrDefault(o => (o.PreInvoiceId == orderNumber) || (o.OrderNumber == orderNumber)); if (order == null) { Log.Error("Nenalezeno"); throw new Exception($"Trasovací číslo bylo nalezeno v Zásilkovně pro objednávku č. {orderNumber}, která ale není mezi objednávkami k zabalení. Zkontrolujte objednávku ve FLOXu."); } } Log.Info("Objednávka nalezena"); return(MapOrder(order)); } return(MapOrder(filtered)); }
public PackingOrderModel SetItemBatchAllocation(BatchAllocationChangeRequest request) { WebSession.EnsureUserRight(OrdersPackingUserRights.OrderBatchAssignment); PackingOrderModel result; using (var tx = m_database.OpenTransaction()) { var order = m_orderRepository.GetOrder(request.OrderId); if (order == null) { throw new InvalidOperationException("Objednávka nebyla v systému nalezena"); } if (!string.IsNullOrWhiteSpace(request.OriginalBatchNumber)) { m_batchFacade.ChangeOrderItemBatchAssignment( order, request.OrderItemId, request.OriginalBatchNumber, request.NewAmount); order = m_orderRepository.GetOrder(order.Id); if (request.NewAmount > 0m) { request.NewBatchSearchQuery = request.NewBatchSearchQuery ?? request.OriginalBatchNumber; } } var item = m_ordersFacade.GetAllConcreteOrderItems(order).FirstOrDefault(i => i.Id == request.OrderItemId).Ensure(); if (!string.IsNullOrWhiteSpace(request.NewBatchSearchQuery) && ((request.NewAmount ?? item.Quantity) > 0m)) { var material = m_virtualProductFacade.GetOrderItemMaterialForSingleUnit(order, item); var batch = m_batchFacade.FindBatchBySearchQuery(material.MaterialId, request.NewBatchSearchQuery); result = MapOrder( order, new Tuple <long, BatchKey, decimal>(item.Id, batch, request.NewAmount ?? item.Quantity)); } else { result = MapOrder(order); } tx.Commit(); return(result); } }
public void PackOrder(long orderId) { WebSession.EnsureUserRight(OrdersPackingUserRights.MarkOrderPacked); using (var tx = m_database.OpenTransaction()) { var order = m_orderRepository.GetOrder(orderId); if (order == null) { throw new InvalidOperationException("Objednavka nenalezena"); } var mapped = MapOrder(order); foreach (var item in mapped.Items) { foreach (var kit in item.KitItems) { if (kit.GroupItems.Any() && (kit.SelectedItem == null)) { throw new InvalidOperationException( $"Objednavka nemuze byt dokoncena - ve skupine '{kit.GroupName}' neni vybrana polozka"); } } ValidateItemBatches(item); } if (m_config.MarkOrdersSentAsync) { m_ordersFacade.SetOrderSentAsync(orderId); } else { m_ordersFacade.SetOrderSent(orderId); } tx.Commit(); } }