public void ReserveOrder(OrderBindingModel model)
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    var element = new Order
                    {
                        ClientId    = model.ClientId,
                        DateCreate  = DateTime.Now,
                        TotalSum    = model.TotalSum,
                        OrderStatus = OrderStatus.Зарезервирован
                    };

                    context.Orders.Add(element);
                    context.SaveChanges();

                    var groupCars = model.OrderCars
                                    .GroupBy(rec => rec.CarId)
                                    .Select(rec => new { CarId = rec.Key, Amount = rec.Sum(r => r.Amount) });

                    foreach (var groupCar in groupCars)
                    {
                        var orderCar = new OrderCar
                        {
                            OrderId = element.Id,
                            CarId   = groupCar.CarId,
                            Amount  = groupCar.Amount
                        };

                        context.OrderCars.Add(orderCar);

                        var carDetails = context.CarDetails.Where(rec => rec.CarId == orderCar.CarId);

                        if (carDetails.All(rec =>
                                           rec.Amount <= context.Details.FirstOrDefault(r => r.Id == rec.DetailId).TotalAmount))
                        {
                            foreach (var carDetail in carDetails)
                            {
                                var detail = context.Details.FirstOrDefault(r => r.Id == carDetail.DetailId);

                                detail.TotalAmount  -= carDetail.Amount;
                                detail.TotalReserve += carDetail.Amount;
                            }
                        }
                        else
                        {
                            throw new Exception("Недостаточно деталей для резервации");
                        }

                        context.SaveChanges();
                    }
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                }
            }
        }
Пример #2
0
 public void Add(OrderCar itemCar)
 {
     FDIDB.OrderCars.Add(itemCar);
 }