Example #1
0
        public static void OrderStatusChanged(OrderInfo orderInfo, AfterOrderStatusChangedEventArgs e)
        {
            Log.Instance.LogDebug("AfterOrderStatusChanged Start");

            if (orderInfo == null || orderInfo.OrderLines.Count == 0)
            {
                return;
            }

            Log.Instance.LogDebug("AfterOrderStatusChanged e.OrderStatus: " + e.OrderStatus);

            Log.Instance.LogDebug("AfterOrderStatusChanged e.SendEmails: " + e.SendEmails);

            switch (e.OrderStatus)
            {
            case OrderStatus.Incomplete:
                break;

            case OrderStatus.Confirmed:
                // copy customerdata to shipping data if there is no shippingdata on the order
                OrderHelper.CopyCustomerToShipping(orderInfo);

                if (orderInfo.OrderNodeId == 0)
                {
                    if (orderInfo.CustomerInfo.CustomerInformation != null)
                    {
                        string customerEmail = null, customerFirstName = null, customerLastName = null;
                        foreach (var customerProperty in IO.Container.Resolve <ICMSDocumentTypeService>().GetByAlias(Order.NodeAlias).Properties.Where(x => x.Alias.StartsWith("customer")))
                        {
                            var element = orderInfo.CustomerInfo.CustomerInformation.Element(customerProperty.Alias);
                            if (element != null)
                            {
                                if (element.Name == "customerEmail")
                                {
                                    customerEmail = element.Value;
                                }
                                else if (element.Name == "customerFirstName")
                                {
                                    customerFirstName = element.Value;
                                }
                                else if (element.Name == "customerLastName")
                                {
                                    customerLastName = element.Value;
                                }
                            }
                        }
                        IO.Container.Resolve <IOrderRepository>().SetCustomerInfo(orderInfo.UniqueOrderId, customerEmail, customerFirstName, customerLastName);
                    }

                    // remove guid from cookie and expire it immediately
                    //OrderHelper.RemoveOrderCookie(orderInfo);
                    // set completed order id cookie to have access to old order after payment
                    OrderHelper.SetCompletedOrderCookie(orderInfo);

                    // update stock when no payment provider is chosen
                    if (orderInfo.PaymentInfo.Id == 0 || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentInStore || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentAtCustomer || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.Unknown)
                    {
                        OrderHelper.UpdateStock(orderInfo);
                    }
                }

                #region send emails

                if (e.SendEmails)
                {
                    int customerEmailNodeId;

                    int.TryParse(orderInfo.StoreInfo.Store.ConfirmationEmailCustomer, out customerEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.ConfirmationEmailStore, out storeEmailNodeId);


                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged Confirmed e.SendEmails == false");
                }

                if (orderInfo.PaymentInfo.Id == 0 && orderInfo.Status != OrderStatus.Confirmed)
                {
                    orderInfo.Status = OrderStatus.Confirmed;
                }

                if (orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentAtCustomer || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentInStore)
                {
                    orderInfo.Status = OrderStatus.OfflinePayment;
                }

                // if online payment set status to waiting for payment
                if (orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OnlinePayment)
                {
                    orderInfo.Status = OrderStatus.WaitingForPayment;

                    if (orderInfo.PaymentInfo.TransactionMethod == PaymentTransactionMethod.Inline)
                    {
                        var paymentProvider =
                            PaymentProviderHelper.GetAllPaymentProviders()
                            .FirstOrDefault(x => x.Id == orderInfo.PaymentInfo.Id);

                        orderInfo = new PaymentRequestHandler().HandleuWebshopPaymentResponse(paymentProvider, orderInfo);
                    }
                }

                orderInfo.Save();

                #endregion

                break;

            case OrderStatus.Cancelled:

                // return stock
                OrderHelper.ReturnStock(orderInfo);

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.CancelEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.CancelEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged Cancelled e.SendEmails == false");
                }

                break;

            case OrderStatus.Closed:

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.ClosedEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.ClosedEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged Closed e.SendEmails == false");
                }
                break;

            case OrderStatus.PaymentFailed:

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.PaymentFailedEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.PaymentFailedEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged PaymentFailed e.SendEmails == false");
                }
                break;

            case OrderStatus.OfflinePayment:

                OrderHelper.UpdateStock(orderInfo);

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.OfflinePaymentEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.OfflinePaymentEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged OfflinePayment e.SendEmails == false");
                }
                break;

            case OrderStatus.Pending:

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.PendingEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.PendingEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged Pending e.SendEmails == false");
                }
                break;

            case OrderStatus.ReadyForDispatch:

                Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch orderInfo.PaymentInfo.PaymentType: " + orderInfo.PaymentInfo.PaymentType);
                if (orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OnlinePayment)
                {
                    OrderHelper.UpdateStock(orderInfo);
                    Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch after update stock");
                }

                Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch before send emails");
                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.OnlinePaymentEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.OnlinePaymentEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch e.SendEmails == false");
                }

                Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch after send emails");
                break;

            case OrderStatus.ReadyForDispatchWhenStockArrives:

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.TemporaryOutOfStockEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.TemporaryOutOfStockEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatchWhenStockArrives e.SendEmails == false");
                }
                break;

            case OrderStatus.Dispatched:

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.DispatchEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.DispatchedEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged Dispatched e.SendEmails == false");
                }
                break;

            case OrderStatus.Undeliverable:

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.UndeliverableEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.UndeliverableEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }
                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged Undeliverable e.SendEmails == false");
                }
                break;

            case OrderStatus.WaitingForPayment:



                break;

            case OrderStatus.Returned:

                // return stock
                OrderHelper.ReturnStock(orderInfo);

                if (e.SendEmails)
                {
                    int customerEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.ReturnedEmailCustomer, out customerEmailNodeId);
                    int storeEmailNodeId;
                    int.TryParse(orderInfo.StoreInfo.Store.ReturnedEmailStore, out storeEmailNodeId);

                    if (customerEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
                    }

                    if (storeEmailNodeId != 0)
                    {
                        EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
                    }
                }
                else
                {
                    Log.Instance.LogDebug("AfterOrderStatusChanged Returned e.SendEmails == false");
                }

                break;
            }
        }
		public static void OrderStatusChanged(OrderInfo orderInfo, AfterOrderStatusChangedEventArgs e)
		{
			Log.Instance.LogDebug("AfterOrderStatusChanged Start");

			if (orderInfo == null || orderInfo.OrderLines.Count == 0)
				return;

			Log.Instance.LogDebug("AfterOrderStatusChanged e.OrderStatus: " + e.OrderStatus);

			Log.Instance.LogDebug("AfterOrderStatusChanged e.SendEmails: " + e.SendEmails);

			switch (e.OrderStatus)
			{
				case OrderStatus.Incomplete:
					break;
				case OrderStatus.Confirmed:
					// copy customerdata to shipping data if there is no shippingdata on the order
					OrderHelper.CopyCustomerToShipping(orderInfo);

					if (orderInfo.OrderNodeId == 0)
					{
						if (orderInfo.CustomerInfo.CustomerInformation != null)
						{
							string customerEmail = null, customerFirstName = null, customerLastName = null;
							foreach (var customerProperty in IO.Container.Resolve<ICMSDocumentTypeService>().GetByAlias(Order.NodeAlias).Properties.Where(x => x.Alias.StartsWith("customer")))
							{
								var element = orderInfo.CustomerInfo.CustomerInformation.Element(customerProperty.Alias);
								if (element != null)
								{
									if (element.Name == "customerEmail")
									{
										customerEmail = element.Value;
									}
									else if (element.Name == "customerFirstName")
									{
										customerFirstName = element.Value;
									}
									else if (element.Name == "customerLastName")
									{
										customerLastName = element.Value;
									}
								}
							}
							IO.Container.Resolve<IOrderRepository>().SetCustomerInfo(orderInfo.UniqueOrderId, customerEmail, customerFirstName, customerLastName);
						}

						// remove guid from cookie and expire it immediately
						//OrderHelper.RemoveOrderCookie(orderInfo);
						// set completed order id cookie to have access to old order after payment
						OrderHelper.SetCompletedOrderCookie(orderInfo);

						// update stock when no payment provider is chosen
						if (orderInfo.PaymentInfo.Id == 0 || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentInStore || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentAtCustomer || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.Unknown)
						{
							OrderHelper.UpdateStock(orderInfo);
						}
					}

					#region send emails

					if (e.SendEmails)
					{
						int customerEmailNodeId;

						int.TryParse(orderInfo.StoreInfo.Store.ConfirmationEmailCustomer, out customerEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.ConfirmationEmailStore, out storeEmailNodeId);


						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged Confirmed e.SendEmails == false");
					}

					if (orderInfo.PaymentInfo.Id == 0 && orderInfo.Status != OrderStatus.Confirmed)
					{
						orderInfo.Status = OrderStatus.Confirmed;
					}

					if (orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentAtCustomer || orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OfflinePaymentInStore)
					{
						orderInfo.Status = OrderStatus.OfflinePayment;
					}

					// if online payment set status to waiting for payment
					if (orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OnlinePayment)
					{
						orderInfo.Status = OrderStatus.WaitingForPayment;

						if (orderInfo.PaymentInfo.TransactionMethod == PaymentTransactionMethod.Inline)
						{
							var paymentProvider =
								PaymentProviderHelper.GetAllPaymentProviders()
									.FirstOrDefault(x => x.Id == orderInfo.PaymentInfo.Id);

							orderInfo = new PaymentRequestHandler().HandleuWebshopPaymentResponse(paymentProvider, orderInfo);
						}
					}

					orderInfo.Save();

					#endregion

					break;
				case OrderStatus.Cancelled:

					// return stock
					OrderHelper.ReturnStock(orderInfo);

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.CancelEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.CancelEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged Cancelled e.SendEmails == false");
					}

					break;
				case OrderStatus.Closed:

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.ClosedEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.ClosedEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged Closed e.SendEmails == false");
					}
					break;
				case OrderStatus.PaymentFailed:

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.PaymentFailedEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.PaymentFailedEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged PaymentFailed e.SendEmails == false");
					}
					break;
				case OrderStatus.OfflinePayment:

					OrderHelper.UpdateStock(orderInfo);

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.OfflinePaymentEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.OfflinePaymentEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged OfflinePayment e.SendEmails == false");
					}
					break;
				case OrderStatus.Pending:

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.PendingEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.PendingEmailStore, out storeEmailNodeId);
						
						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged Pending e.SendEmails == false");
					}
					break;
				case OrderStatus.ReadyForDispatch:

					Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch orderInfo.PaymentInfo.PaymentType: " + orderInfo.PaymentInfo.PaymentType);
					if (orderInfo.PaymentInfo.PaymentType == PaymentProviderType.OnlinePayment)
					{
						OrderHelper.UpdateStock(orderInfo);
						Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch after update stock");
					}
					
					Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch before send emails");
					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.OnlinePaymentEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.OnlinePaymentEmailStore, out storeEmailNodeId);
						
						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch e.SendEmails == false");
					}

					Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatch after send emails");
					break;
				case OrderStatus.ReadyForDispatchWhenStockArrives:

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.TemporaryOutOfStockEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.TemporaryOutOfStockEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged ReadyForDispatchWhenStockArrives e.SendEmails == false");
					}
					break;
				case OrderStatus.Dispatched:

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.DispatchEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.DispatchedEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged Dispatched e.SendEmails == false");
					}
					break;
				case OrderStatus.Undeliverable:

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.UndeliverableEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.UndeliverableEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}
						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged Undeliverable e.SendEmails == false");
					}
					break;
				case OrderStatus.WaitingForPayment:

					
					
					break;
				case OrderStatus.Returned:

					// return stock
					OrderHelper.ReturnStock(orderInfo);

					if (e.SendEmails)
					{
						int customerEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.ReturnedEmailCustomer, out customerEmailNodeId);
						int storeEmailNodeId;
						int.TryParse(orderInfo.StoreInfo.Store.ReturnedEmailStore, out storeEmailNodeId);

						if (customerEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailCustomer(customerEmailNodeId, orderInfo);
						}

						if (storeEmailNodeId != 0)
						{
							EmailHelper.SendOrderEmailStore(storeEmailNodeId, orderInfo);
						}
					}
					else
					{
						Log.Instance.LogDebug("AfterOrderStatusChanged Returned e.SendEmails == false");
					}

					break;
			}
		}