public MyHostService(IProcessManager processManager, IOrderEventHandler orderEventHandler, IProductEventHandler productEventHandler, IUserEventHandler userEventHandler ) { this.processManager = processManager; this.orderEventHandler = orderEventHandler; this.productEventHandler = productEventHandler; this.userEventHandler = userEventHandler; }
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); } }
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; } } }); }
/// <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; }