Пример #1
0
        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));
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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();
            }
        }