예제 #1
0
        public async Task <OrderCreateViewModel> AddCancellations(OrderCreateViewModel model)
        {
            var order = new Order
            {
                isOrder     = false,
                report_date = model.reportDate,
                shop_id     = model.shopId
            };

            order.OrderDetails = model.products.Select(p => new OrderDetail
            {
                prod_id = p.id,
                cost    = costRepo.GetByProdId(p.id).FirstOrDefault() != null && costRepo.GetByProdId(p.id).FirstOrDefault().value.HasValue ?
                          costRepo.GetByProdId(p.id).FirstOrDefault().value.Value : 0,
                count = p.count
            }).ToList();

            var id = 0;

            try
            {
                id = await ordersRepo.AddCancellationAsync(order);

                var orderDal = (await ordersRepo.GetCancellationsByShopIdInDateRange(order.shop_id, model.reportDate.AddSeconds(-1), model.reportDate)).Last(p => p.id == id);
                await strategy.UpdateAverageCost(Direction.Cancellation, orderDal);
            }
            catch (Exception)
            {
                throw new Exception("Добавление списания не удалось.");
            }

            model.id = id;
            return(model);
        }
예제 #2
0
        public async Task MoveStocks(UserProfile user, StockMoveRequestViewModel model)
        {
            var dtNow = DateTime.Now;
            var order = new Order
            {
                isOrder     = false,
                report_date = dtNow,
                shop_id     = model.shopFrom
            };

            order.OrderDetails = model.products.Select(p => new OrderDetail
            {
                prod_id = p.id,
                cost    = 0,
                count   = p.value
            }).ToList();

            try
            {
                var id = await ordersRepo.AddCancellationAsync(order);

                var orderDal = (await ordersRepo.GetCancellationsByShopIdInDateRange(order.shop_id, dtNow.AddSeconds(-1), dtNow)).Last(p => p.id == id);

                foreach (var orderDetail in order.OrderDetails)
                {
                    var cost = costRepo.GetByProdId(orderDetail.prod_id).FirstOrDefault();
                    orderDetail.cost = cost != null && cost.value.HasValue ? cost.value.Value : 0;
                }

                await strategy.UpdateAverageCost(Direction.Cancellation, orderDal);

                order.isOrder = true;
                order.shop_id = model.shopTo;
                id            = await ordersRepo.AddCancellationAsync(order);

                orderDal = (await ordersRepo.GetCancellationsByShopIdInDateRange(order.shop_id, dtNow.AddSeconds(-1), dtNow)).Last(p => p.id == id);
                await strategy.UpdateAverageCost(Direction.Order, orderDal);
            }
            catch (Exception)
            {
                throw new Exception("Перемещение не удалось.");
            }
        }