public string Finalize() { if (order.ShippingStatus == ShippingStatus.ReadyForShippment) { throw new InvalidOperationException(); } var shippingProvider = purchaseProviderFactory.CreateShippingProvider(order); var invoice = purchaseProviderFactory.CreateInvoice(order); // Send invoice invoice.GenerateInvoice(); var summary = purchaseProviderFactory.CreateSummary(order); summary.Send(); // Send summary order.ShippingStatus = ShippingStatus.ReadyForShippment; return(shippingProvider.GenerateShippingLabelFor(order)); }
/// <summary> /// Creates shipping label for a specific order /// </summary> /// <returns></returns> public string FinalizeOrder() { ShippingProviderBase shippingProvider = purchaseProviderFactory.CreateShippingProvider(order); purchaseProviderFactory.CreateInvoice(order); var summary = purchaseProviderFactory.CreateSummary(order); summary.Send(); order.ShippingStatus = ShippingStatus.ReadyForShipment; return(shippingProvider.GenerateShippingLabel(order)); }
public string Finalize() { // Shopping cart no longer cares about implementation details of shipping // Recommend using GetShippingProvider // Finalise - involves shipping provider, invoice and order. Ideal for Abstract Factory pattern var shippingProvider = _shippingProviderFactory.CreateShippingProvider(order); order.ShippingStatus = ShippingStatus.ReadyForShippment; return(shippingProvider.GenerateShippingLabelFor(order)); }
public string Finalize() { var shippingProvider = purchaseProviderFactory.CreateShippingProvider(order); var invoice = purchaseProviderFactory.CreateInvoice(order); // send invoice... var summary = purchaseProviderFactory.CreateSummary(order); summary.Send(); order.ShippingStatus = ShippingStatus.ReadyForShippment; return(shippingProvider.GenerateShippingLabelFor(order)); }