Exemplo n.º 1
0
 public MyHostService(IProcessManager processManager,
                      IOrderEventHandler orderEventHandler,
                      IProductEventHandler productEventHandler,
                      IUserEventHandler userEventHandler
                      )
 {
     this.processManager      = processManager;
     this.orderEventHandler   = orderEventHandler;
     this.productEventHandler = productEventHandler;
     this.userEventHandler    = userEventHandler;
 }
Exemplo n.º 2
0
        private void SaveDetails(OrderPart part, IRepository <OrderDetailRecord> detailsRepository, IOrderEventHandler orderEventHandler)
        {
            if (part.Id <= 0)
            {
                return;
            }

            var oldDetails = detailsRepository.Fetch(d => d.OrderId == part.Id);

            foreach (var detail in part.Details.Where(d => !oldDetails.Where(od => od.Id == d.Id).Any()))
            {
                // New details
                var newRecord = detail.Record;
                newRecord.OrderId = part.Id;
                detailsRepository.Create(newRecord);
                orderEventHandler.OrderDetailCreated(part.ContentItem, newRecord);
            }
            foreach (var detail in part.Details.Join(oldDetails, d => d.Id, od => od.Id, (d, od) => new { updated = d, stored = od }))
            {
                // Updated details
                if (detail.updated.Quantity <= 0)
                {
                    detailsRepository.Delete(detail.stored);
                    orderEventHandler.OrderDetailDeleted(part.ContentItem, detail.stored);
                }
                else
                {
                    detailsRepository.Update(detail.updated.Record);
                    orderEventHandler.OrderDetailUpdated(part.ContentItem, detail.stored, detail.updated.Record);
                }
            }
            foreach (var removed in oldDetails.Where(od => !part.Details.Where(d => d.Id == od.Id).Any()))
            {
                // Removed details
                detailsRepository.Delete(removed);
                orderEventHandler.OrderDetailDeleted(part.ContentItem, removed);
            }
        }
Exemplo n.º 3
0
        public OrderPartHandler(
            IRepository <OrderPartRecord> repository,
            IContentManager contentManager,
            IRepository <OrderDetailRecord> orderDetailsRepository,
            IOrdersService ordersService,
            IRepository <OrderAddressRecord> orderAddressRepository,
            IOrderEventHandler orderEventHandler)
        {
            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, orderDetailsRepository, orderEventHandler);
                part.BillingAddressId = orderAddressRepository.CreateOrUpdate(part.BillingAddress);

                orderEventHandler.OrderCreated(context.ContentItem);
            });

            OnUpdating <OrderPart>((context, part) => {
                // Status
                part.OriginalStatus = part.OrderStatus;
            });

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

                SaveDetails(part, orderDetailsRepository, orderEventHandler);
                part.BillingAddressId = orderAddressRepository.CreateOrUpdate(part.BillingAddress);

                if (part.OrderStatus != part.OriginalStatus)
                {
                    switch (part.OrderStatus)
                    {
                    case OrderStatus.Canceled:
                        orderEventHandler.OrderCanceled(context.ContentItem);
                        break;

                    case OrderStatus.Completed:
                        orderEventHandler.OrderCompleted(context.ContentItem);
                        break;
                    }
                }
            });
        }
Exemplo n.º 4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="orderRepository"></param>
 /// <param name="orderEvents"></param>
 /// <param name="orderEventHandler"></param>
 public OrderEventListener(IOrderRepository orderRepository, IOrderEvents orderEvents, IOrderEventHandler orderEventHandler)
 {
     _orderRepository   = orderRepository;
     _orderEvents       = orderEvents;
     _orderEventHandler = orderEventHandler;
 }
 public OrderEventListener(IOrderEventSubscriber subscriber, IOrderEventHandler eventHandler)
 {
     _subscriber   = subscriber;
     _eventHandler = eventHandler;
 }