Exemple #1
0
        public DTO.OrderItem CreateOrderItem(DataAccess.OrderItem orderItem, bool includeOnlyActive = false, Func <DataAccess.Order, bool> predicate = null)
        {
            CheckHelper.ArgumentNotNull(orderItem, "orderItem");
            CheckHelper.ArgumentWithinCondition(!orderItem.IsNew(), "!orderItem.IsNew()");

            return
                (_dtoCache.Get(
                     orderItem,
                     oi =>
            {
                var result =
                    new DTO.OrderItem
                {
                    Id = oi.Id,
                    Quantity = oi.Quantity,
                    Active = oi.Active,
                    Price = oi.Price,
                    PurchaserPaid = oi.PurchaserPaid,
                    CreateUserId = oi.CreateUserId
                };

                CopyTrackableFields(result, oi);

                return result;
            },
                     (oiDto, oi) =>
            {
                oiDto.Order = CreateOrder(oi.Order, includeOnlyActive, predicate);
                oiDto.ProductSize = CreateProductSize(oi.ProductSize);
            }));
        }
Exemple #2
0
 public static Models.OrderItem ToDatabaseModel(this DTO.OrderItem op)
 {
     return(new Models.OrderItem
     {
         OrderID = op.OrderID,
         ProductId = op.ProductID,
         Quantity = op.Quantity,
         Order = op.Orders?.ToDatabaseModel(),
         Product = op.Products?.ToDatabaseModel()
     });
 }
Exemple #3
0
        public void CreateOrderItem(DTO.OrderItem createdOrderItem)
        {
            CheckHelper.ArgumentNotNull(createdOrderItem, "createdOrderItem");
            CheckHelper.ArgumentWithinCondition(createdOrderItem.IsNew(), "Order item is not new.");
            Container.Get <IValidateService>().CheckIsValid(createdOrderItem);

            CheckHelper.WithinCondition(SecurityService.IsLoggedIn, "User is not logged in.");
            CheckHelper.WithinCondition(SecurityService.IsCurrentUserSeller, "Only seller can create order item.");

            var persistentService = Container.Get <IPersistentService>();

            var order = persistentService.GetEntityById <DataAccess.Order>(createdOrderItem.Order.Id);

            CheckHelper.NotNull(order, "Order does not exist");

            CheckHelper.WithinCondition(order.CreatedBy.Id == SecurityService.CurrentUser.Id, "Order is created by another seller.");

            var doesAnotherOrderItemWithTheSameProductSizeExist =
                persistentService
                .GetEntitySet <OrderItem>()
                .Any(oi =>
                     oi.OrderId == order.Id &&
                     oi.ProductSizeId == createdOrderItem.ProductSize.Id);

            if (doesAnotherOrderItemWithTheSameProductSizeExist)
            {
                throw new OrderServiceException("Строка заказа с заданным размером товара уже существует в текущем заказе.");
            }

            var orderItem =
                new OrderItem
            {
                Price      = createdOrderItem.Price,
                Quantity   = createdOrderItem.Quantity,
                TotalPrice = createdOrderItem.Price * createdOrderItem.Quantity,
                Active     = createdOrderItem.Active
            };

            UpdateOrder(orderItem, createdOrderItem.Order);
            UpdateProductSize(orderItem, createdOrderItem.ProductSize);
            orderItem.UpdateTrackFields(Container);

            persistentService.Add(orderItem);
            persistentService.SaveChanges();

            createdOrderItem.Id         = orderItem.Id;
            createdOrderItem.CreateDate = orderItem.CreateDate;
            createdOrderItem.CreateUser = orderItem.CreatedBy.GetFullName();
            createdOrderItem.ChangeDate = orderItem.ChangeDate;
            createdOrderItem.ChangeUser = orderItem.ChangedBy.GetFullName();

            createdOrderItem.PurchaserPaid = 0m;
        }
Exemple #4
0
        public void UpdateOrderItem(DTO.OrderItem updatedOrderItem)
        {
            CheckHelper.ArgumentNotNull(updatedOrderItem, "updatedOrderItem");
            CheckHelper.ArgumentWithinCondition(!updatedOrderItem.IsNew(), "Order item is new.");
            Container.Get <IValidateService>().CheckIsValid(updatedOrderItem);

            CheckHelper.WithinCondition(SecurityService.IsLoggedIn, "User is not logged in.");
            CheckHelper.WithinCondition(
                SecurityService.IsCurrentUserSeller ||
                SecurityService.IsCurrentUserPurchaser,
                "Only seller and purchaser can change order item.");

            var persistentService = Container.Get <IPersistentService>();

            var order = persistentService.GetEntityById <DataAccess.Order>(updatedOrderItem.Order.Id);

            CheckHelper.NotNull(order, "Order does not exist");

            CheckHelper.WithinCondition(
                SecurityService.IsCurrentUserPurchaser ||
                IsCurrentUserSellerForOrder(order),
                "Order is created by another seller.");

            var doesAnotherOrderItemWithTheSameProductSizeExist =
                persistentService
                .GetEntitySet <OrderItem>()
                .Any(oi =>
                     oi.Id != updatedOrderItem.Id &&
                     oi.OrderId == order.Id &&
                     oi.ProductSizeId == updatedOrderItem.ProductSize.Id);

            if (doesAnotherOrderItemWithTheSameProductSizeExist)
            {
                throw new OrderServiceException("Строка заказа с заданным размером товара уже существует в текущем заказе.");
            }

            var orderItem = persistentService.GetEntityById <OrderItem>(updatedOrderItem.Id);

            CheckHelper.NotNull(order, "Order item does not exist");

            if (IsCurrentUserSellerForOrder(order))
            {
                orderItem.Price      = updatedOrderItem.Price;
                orderItem.Quantity   = updatedOrderItem.Quantity;
                orderItem.TotalPrice = updatedOrderItem.TotalPrice;
                orderItem.Active     = updatedOrderItem.Active;

                UpdateOrder(orderItem, updatedOrderItem.Order);
                UpdateProductSize(orderItem, updatedOrderItem.ProductSize);
            }
            else
            {
                updatedOrderItem.Price    = orderItem.Price;
                updatedOrderItem.Quantity = orderItem.Quantity;
                updatedOrderItem.Active   = orderItem.Active;

                Func <DataAccess.Order, bool> predicate = null;
                if (SecurityService.IsCurrentUserSeller && !SecurityService.IsCurrentUserPurchaser)
                {
                    predicate = o => o.CreateUserId == SecurityService.CurrentUser.Id;
                }
                updatedOrderItem.Order = Container.Get <IDtoService>().CreateOrder(orderItem.Order, false, predicate);

                updatedOrderItem.ProductSize = Container.Get <IDtoService>().CreateProductSize(orderItem.ProductSize);
            }

            if (SecurityService.IsCurrentUserPurchaser)
            {
                orderItem.PurchaserPaid = updatedOrderItem.PurchaserPaid;
            }
            else
            {
                updatedOrderItem.PurchaserPaid = orderItem.PurchaserPaid;
            }

            orderItem.UpdateTrackFields(Container);

            persistentService.SaveChanges();
        }