public OrderShippingPartHandler(
            IRepository<OrderShippingPartRecord> repository,
            IRepository<OrderAddressRecord> orderAddressRepository)
        {
            Filters.Add(StorageFilter.For(repository));

            OnActivated<OrderShippingPart>((context, part) => {
                part._shippingDetails.Loader(shippingDetails => {
                    var orderPart = context.ContentItem.As<OrderPart>();
                    if (orderPart != null) {
                        return orderPart.Details.Where(d => d.DetailType == "Shipping");
                    }
                    else {
                        return new List<OrderDetail>();
                    }
                });

                part._shippingAddress.Loader(shippingAddress => orderAddressRepository.Get(part.ShippingAddressId));
            });

            OnCreated<OrderShippingPart>((context, part) => {
                part.ShippingAddressId = orderAddressRepository.CreateOrUpdate(part.ShippingAddress);
            });

            OnUpdated<OrderShippingPart>((context, part) => {
                part.ShippingAddressId = orderAddressRepository.CreateOrUpdate(part.ShippingAddress);
            });
        }
示例#2
0
        public OrderPartHandler(
            IRepository<OrderPartRecord> repository,
            IContentManager contentManager,
            IRepository<OrderDetailRecord> orderDetailsRepository,
            IOrdersService ordersService,
            IRepository<OrderAddressRecord> orderAddressRepository)
        {
            _orderDetailsRepository = orderDetailsRepository;

            Filters.Add(StorageFilter.For(repository));

            OnActivated<OrderPart>((context, part) => {
                // Details
                part._details.Loader(details => _orderDetailsRepository.Fetch(d => d.OrderId == part.Id)
                    .Select(d => new OrderDetail(d))
                    .ToList());

                // Order total
                part._orderTotal.Loader(orderTotal => BuildOrderTotal(part));

                // BillingAddress
                part._billingAddress.Loader(shippingAddress => orderAddressRepository.Get(part.BillingAddressId));
            });

            OnLoading<OrderPart>((context, part) => {
                // Order total
                part._orderTotal.Loader(orderTotal => part.Retrieve(x => x.OrderTotal));
            });

            OnCreating<OrderPart>((context, part) => {
                if (String.IsNullOrWhiteSpace(part.Reference)) {
                    part.Reference = ordersService.BuildOrderReference();
                }
            });

            OnCreated<OrderPart>((context, part) => {
                // Order total
                part.OrderTotal = BuildOrderTotal(part);

                SaveDetails(part);
                part.BillingAddressId = orderAddressRepository.CreateOrUpdate(part.BillingAddress);
            });

            OnUpdated<OrderPart>((context, part) => {
                // Order total
                part.OrderTotal = BuildOrderTotal(part);

                SaveDetails(part);
                part.BillingAddressId = orderAddressRepository.CreateOrUpdate(part.BillingAddress);
            });
        }