public void NotifyTransferSuccess(string pOrderNumber) { using (var lScope = new TransactionScope()) { var orderNumber = Guid.Parse(pOrderNumber); using (var lContainer = new VideoStoreEntityModelContainer()) { var order = lContainer.Orders.Include("Customer").Include("OrderItems.Media.Stocks").FirstOrDefault(pOrder => pOrder.OrderNumber == orderNumber); try { if (order != null) { order.UpdateStockLevels(); PlaceDeliveryForOrder(order); lContainer.Orders.ApplyChanges(order); lContainer.SaveChanges(); lScope.Complete(); } } catch (Exception lException) { SendOrderErrorMessage(order, lException); throw; } } } }
public void ChangeOrderPaymentStatus(Message pMessage) { TransferMessage tMessage = pMessage as TransferMessage; Guid pOrderNumber = tMessage.OrderGuid; Console.WriteLine("change ----- - - - --" + pOrderNumber); using (TransactionScope lScope = new TransactionScope()) { using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { Order order = lContainer.Orders.Include("OrderItems.Media.Stocks").Include("Customer.LoginCredential").Where((tOrder) => tOrder.OrderNumber == pOrderNumber).FirstOrDefault(); //LoadMediaStocks(order); MarkAppropriateUnchangedAssociations(order); Console.WriteLine("Change status"); if (tMessage.BTransfer) { order.OrderStatus = "payed"; } else { Console.WriteLine("revert stock"); order.OrderStatus = "fail"; order.RevertStockLevels(); } lContainer.Orders.ApplyChanges(order); lContainer.SaveChanges(); lScope.Complete(); } } }
public void PlaceDeliveryForOrder(Order pOrder) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { Delivery lDelivery = new Delivery() { ExternalDeliveryIdentifier = Guid.NewGuid(), DeliveryStatus = DeliveryStatus.Submitted, SourceAddress = "Video Store Address", DestinationAddress = pOrder.Customer.Address, Order = pOrder }; DeliveryServiceClient lClient = new DeliveryServiceClient(); lClient.SubmitDelivery(new DeliveryInfo() { DeliveryIdentifier = lDelivery.ExternalDeliveryIdentifier, OrderNumber = lDelivery.Order.OrderNumber.ToString(), SourceAddress = lDelivery.SourceAddress, DestinationAddress = lDelivery.DestinationAddress, DeliveryNotificationAddress = "net.msmq://localhost/private/DeliveryNotificationService" }); // update the number of stock corresponding to this order and save the delivery with the order //pOrder.UpdateStockLevels(); We are not updating the stock levels with putting deliver any more pOrder.Delivery = lDelivery; lContainer.Orders.ApplyChanges(pOrder); lContainer.Deliveries.ApplyChanges(lDelivery); lContainer.SaveChanges(); lScope.Complete(); } }
public void SubmitOrder(Entities.Order pOrder) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { try { // Only Request the transfer, delivery will be placed after the trasfer succeed pOrder.OrderNumber = Guid.NewGuid(); // update the stock levels for this order before the fund is transferred, //because the items should be reserved for this user // if there is anything wrong with the fund transfer, the stock levels will be added back pOrder.UpdateStockLevels(); TransferFundsFromCustomer(pOrder.OrderNumber, pOrder.Customer.BankAccountNumber, pOrder.Total ?? 0.0); Console.WriteLine("Fund transfer of order: " + pOrder.OrderNumber + " has been requested to the bank"); lContainer.Orders.ApplyChanges(pOrder); lContainer.SaveChanges(); } catch (Exception lException) { SendTransferErrorEmail(pOrder.OrderNumber, lException.Message); Console.WriteLine("Something wrong happened. The fund transferr request were not able to be placed."); Console.WriteLine("Exception Message:" + lException.Message); throw; } finally { lScope.Complete(); } } }
public void SubmitOrder(Order pOrder) { using (TransactionScope lScope = new TransactionScope()) { LoadMediaStocks(pOrder); MarkAppropriateUnchangedAssociations(pOrder); using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { try { Console.WriteLine("Saving temporary"); pOrder.OrderNumber = Guid.NewGuid(); lContainer.Orders.ApplyChanges(pOrder); TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0, pOrder.OrderNumber, pOrder.Customer.Id); Console.WriteLine("Funds Transfer Requested"); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { SendOrderErrorMessage(pOrder, lException); throw; } } } }
public void NotifyDeliveryProcessed(string orderNnmber, Guid pDeliveryId, DeliveryStatus status, String errorMsg) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { var orderN = Guid.Parse(orderNnmber); Delivery lDelivery = lContainer.Deliveries.Include("Order.Customer").Where((pDel) => pDel.Order.OrderNumber == orderN).FirstOrDefault(); if (lDelivery != null) { lDelivery.DeliveryStatus = status; if (status == DeliveryStatus.Submitted) { lDelivery.ExternalDeliveryIdentifier = pDeliveryId; SendOrderPlacedConfirmation(lDelivery.Order); } else if (status == DeliveryStatus.Failed) { SendOrderErrorMessage(lDelivery.Order, errorMsg); } lContainer.SaveChanges(); } lScope.Complete(); } }
public void SubmitOrder(Entities.Order pOrder) { using (TransactionScope lScope = new TransactionScope()) { LoadMediaStocks(pOrder); MarkAppropriateUnchangedAssociations(pOrder); using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { try { pOrder.OrderNumber = Guid.NewGuid(); if (pOrder.CheckStockLevels()) { pOrder.UpdateStockLevels(); TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0, pOrder.OrderNumber.ToString()); } else { Console.WriteLine("Insufficient stock"); throw new Exception("Insufficient stock!"); } lContainer.Orders.ApplyChanges(pOrder); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error occured while upload stocks: " + lException.Message); throw; } } } }
public void DeliverySubmitted(Guid pOrderNumber, Guid pDeliveryIdentifier) { using (TransactionScope lScope = new TransactionScope()) { using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { Order order = lContainer.Orders.Include("Customer") .Include("OrderItems") .Include("OrderItems.Media") .Include("OrderItems.Media.Stocks").FirstOrDefault(x => x.OrderNumber == pOrderNumber); Delivery lDelivery = new Delivery() { DeliveryStatus = DeliveryStatus.Submitted, SourceAddress = "Video Store Address", DestinationAddress = order.Customer.Address, Order = order, ExternalDeliveryIdentifier = pDeliveryIdentifier }; order.Delivery = lDelivery; order.UpdateStockLevels(); SendOrderPlacedConfirmation(order); lContainer.SaveChanges(); lScope.Complete(); } } }
public static void checkOrderPaymentTimeout() { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { List <Order> orders = lContainer.Orders.Include("OrderItems.Media.Stocks").Include("Customer.LoginCredential").Where((tOrder) => tOrder.OrderStatus == "unpayed").ToList(); Console.WriteLine(String.Format("Check Order Payment Timeout, order list length: {0}", orders.Count)); foreach (Order lOrder in orders) { DateTime orderTime = lOrder.OrderDate; DateTime now = DateTime.Now; TimeSpan timeSpan = now.Subtract(orderTime); double houres = timeSpan.TotalSeconds; if (houres > 110.0) { lOrder.OrderStatus = "expired"; //LoadMediaStocks(lOrder); MarkAppropriateUnchangedAssociations(lOrder); lOrder.RevertStockLevels(); lContainer.Orders.ApplyChanges(lOrder); lContainer.SaveChanges(); lScope.Complete(); } } } }
public void NotifyTransferResult(bool pResult, string pDescription, string pOrderNumber) { using (TransactionScope lScope = new TransactionScope()) { Console.WriteLine(pDescription); using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { Order lOrder = ServiceLocator.Current.GetInstance <IOrderProvider>().GetOrderByOrderNumber(Guid.Parse(pOrderNumber)); LoadMediaStocks(lOrder); MarkAppropriateUnchangedAssociations(lOrder); Console.WriteLine(lOrder.OrderItems[0].Media.Stocks.Quantity); Console.WriteLine(lOrder.OrderItems[0].Quantity); if (lOrder != null) { if (pResult) { SendOrderPlacedConfirmation(lOrder); PlaceDeliveryForOrder(lOrder); } else { SendOrderErrorMessage(lOrder); Console.WriteLine("Stocks have been rolled back"); lOrder.RollbackStockLevels(); } } lContainer.Orders.ApplyChanges(lOrder); lContainer.SaveChanges(); lScope.Complete(); } } }
public void SubmitOrder(Entities.Order pOrder) { using (TransactionScope lScope = new TransactionScope()) { LoadMediaStocks(pOrder); MarkAppropriateUnchangedAssociations(pOrder); using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { try { pOrder.OrderNumber = Guid.NewGuid(); TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0); pOrder.UpdateStockLevels(); PlaceDeliveryForOrder(pOrder); lContainer.Orders.ApplyChanges(pOrder); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { SendOrderErrorMessage(pOrder, lException); throw; } } } SendOrderPlacedConfirmation(pOrder); }
public void FundsTransferFailed(Guid pOrderGuid) { using (TransactionScope lScope = new TransactionScope()) { using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { try { Console.WriteLine("Funds Transfer Error"); var pOrder = lContainer.Orders .Include("Customer").FirstOrDefault(x => x.OrderNumber == pOrderGuid); EmailProvider.SendMessage(new EmailMessage() { ToAddress = pOrder.Customer.Email, Message = "There was an error with your credit. The purchase cannot proceed." }); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error in FundsTransferError: " + lException.Message); throw; } } } }
public void SubmitOrder(Order pOrder) { SystemWideLogging.LogServiceClient.LogEvent("VideoStore :: VideoStore.Business.Components\\OrderProvider.cs :: public void SubmitOrder(Entities.Order pOrder)", "New Order has been submitted from WebClient ( pOrder.Id=" + pOrder.Id + " )"); using (var lScope = new TransactionScope()) using (var lContainer = new VideoStoreEntityModelContainer()) { try { pOrder.OrderNumber = Guid.NewGuid(); SystemWideLogging.LogServiceClient.LogEvent("VideoStore :: VideoStore.Business.Components\\OrderProvider.cs :: public void SubmitOrder(Entities.Order pOrder)", "Requesting TransferFundsFromCustomer at Bank - asynchronously via MSMQ - ( pOrder.Id=" + pOrder.Id + " )"); TransferFundsFromCustomer(pOrder.Customer.BankAccountNumber, pOrder.Total ?? 0.0, pOrder.OrderNumber.ToString()); lContainer.Orders.ApplyChanges(pOrder); pOrder.UpdateStockLevels(); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { SystemWideLogging.LogServiceClient.LogEvent("VideoStore :: VideoStore.Business.Components\\OrderProvider.cs :: public void SubmitOrder(Entities.Order pOrder)", "Error occured while requesting TransferFundsFromCustomer at Bank - asynchronously via MSMQ - ( pOrder.Id=" + pOrder.Id + ", lException.Message=" + lException.Message + " )"); ConsoleHelper.WriteLine(ConsoleColor.Red, "Error: " + lException.Message); SendOrderErrorMessage(pOrder, lException); throw; } } }
public void DeleteUser(User pUser) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { lContainer.Users.DeleteObject(pUser); lContainer.SaveChanges(); } }
public void CreateUser(VideoStore.Business.Entities.User pUser) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { lContainer.Users.AddObject(pUser); lContainer.SaveChanges(); lScope.Complete(); } }
public void UpdateUser(User pUser) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { lContainer.Entry(pUser).State = EntityState.Modified; lContainer.SaveChanges(); lScope.Complete(); } }
public void DeleteReview(Review pReview) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { lContainer.Reviews.Remove(pReview); lContainer.SaveChanges(); lScope.Complete(); } }
public void UpdateUser(User pUser) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { lContainer.Users.Attach(pUser); lContainer.ObjectStateManager.ChangeObjectState(pUser, System.Data.EntityState.Modified); lContainer.SaveChanges(); lScope.Complete(); } }
private static void RollbackOrder(Guid pDeliveryId) { using (var lScope = new TransactionScope()) using (var lContainer = new VideoStoreEntityModelContainer()) { Delivery lDelivery = lContainer.Deliveries.Include("Order.Customer").Where((pDel) => pDel.ExternalDeliveryIdentifier == pDeliveryId).FirstOrDefault(); lDelivery.Order.RollbackStockLevels(); lContainer.SaveChanges(); lScope.Complete(); } }
public void SubmitOrder(Entities.Order pOrder) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { AttachEntitiesToContext(lContainer, pOrder); pOrder.UpdateStockLevels(); lContainer.SaveChanges(); lScope.Complete(); } }
private static void RollbackOrder(Guid orderNumber) { using (var lScope = new TransactionScope()) using (var lContainer = new VideoStoreEntityModelContainer()) { Order order = lContainer.Orders.Where(o => o.OrderNumber == orderNumber).SingleOrDefault(); if (order != null) { order.RollbackStockLevels(); lContainer.SaveChanges(); } lScope.Complete(); } }
private void UpdateDeliveryStatus(Guid pDeliveryId, DeliveryStatus status) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { Delivery lDelivery = lContainer.Deliveries.Where((pDel) => pDel.ExternalDeliveryIdentifier == pDeliveryId).FirstOrDefault(); if (lDelivery != null) { lDelivery.DeliveryStatus = status; lContainer.SaveChanges(); } lScope.Complete(); } }
private void RollbackOrder(Order pOrder) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { if (pOrder != null) { pOrder.RollbackStockLevels(); lContainer.Orders.ApplyChanges(pOrder); lContainer.SaveChanges(); } lScope.Complete(); } }
public static void LogEvent_WithinOwnAppInstance(string sSource, string sMessage) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { SystemLog SystemLogItem = new SystemLog(); SystemLogItem.EventTime = DateTime.Now; SystemLogItem.Source = sSource; SystemLogItem.Message = sMessage; lContainer.SystemLogs.AddObject(SystemLogItem); lContainer.SaveChanges(); lScope.Complete(); } }
public void NotifyDeliverySubmission(Guid orderNumber, Guid pDeliveryId) { using (var lScope = new TransactionScope()) using (var lContainer = new VideoStoreEntityModelContainer()) { Order order = lContainer.Orders.Include("Customer").Where(o => o.OrderNumber == orderNumber).FirstOrDefault(); Delivery delivery = lContainer.Deliveries.Where(d => d.ExternalDeliveryIdentifier == pDeliveryId).FirstOrDefault(); // Link them together if (order != null && delivery != null) { order.Delivery = delivery; lContainer.SaveChanges(); lScope.Complete(); EmailProvider.SendMessage(order.Customer.Email, "Your order " + orderNumber + " has been placed"); } } }
public void SubmitReview(Review pReview, Media pMedia, User pUser) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { // Update the media rating lContainer.Media.First(m => m.Id == pMedia.Id).RatingCount = pMedia.RatingCount; lContainer.Media.First(m => m.Id == pMedia.Id).RatingSum = pMedia.RatingSum; // Add the review to the reviews list pReview.User = pUser; pReview.Media = lContainer.Media.First(m => m.Id == pMedia.Id); lContainer.Reviews.Add(pReview); // Commit changes lContainer.SaveChanges(); lScope.Complete(); } }
public void CreateReview(Review pReview) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { Media media = lContainer.Media.FirstOrDefault(s => s.Id == pReview.MediaId); User user = lContainer.Users.FirstOrDefault(s => s.Id == pReview.UserId); pReview.Media = media; pReview.User = user; pReview.Date = DateTime.Now; // Update changes to Media. media.RatingsCount += 1; media.RatingsSum += pReview.Rating; lContainer.Reviews.Add(pReview); lContainer.SaveChanges(); lScope.Complete(); } }
public void CancelOrder(Entities.Order pOrder) { using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { try { pOrder.RevertStockLevels(); lContainer.Orders.ApplyChanges(pOrder); SendOrderDeclinedEmail(pOrder); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { SendOrderErrorMessage(pOrder, lException); throw; } } }
public void HandleBankNotification(Guid OrderNumber, String pMessage) { Order pOrder = this.FindOrderbyOrderNumber(OrderNumber); if (pMessage == "Success") { //request to start delivery this.PlaceDeliveryForOrder(pOrder); this.SendDeliverySubmittedEmail(OrderNumber); } else { //if the transfer fails, send email to the customer with fail message this.SendTransferErrorEmail(OrderNumber, pMessage); using (TransactionScope lScope = new TransactionScope()) using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { Console.Write("Calling Compensator to restore Stock levels"); // update the Stock by adding the stock quantity back pOrder.CompensateStockLevels(); //lContainer.Orders.ApplyChanges(pOrder); // see if the compensator works before saving changes foreach (OrderItem item in pOrder.OrderItems) { lContainer.Stocks.Attach(item.Media.Stocks); lContainer.ObjectStateManager.ChangeObjectState(item.Media.Stocks, System.Data.EntityState.Modified); //lContainer.Stocks.ApplyChanges(item.Media.Stocks); } //lContainer.Orders.ApplyChanges(pOrder); /*lContainer.ObjectStateManager.ChangeObjectState(pOrder, * System.Data.EntityState.Modified); * lContainer.Orders.ApplyChanges(pOrder);*/ lContainer.SaveChanges(); lScope.Complete(); Console.WriteLine("Easy! Stock levels have been restored."); } } }
public void SubmitOrder(Entities.Order pOrder) { using (TransactionScope lScope = new TransactionScope()) { LoadMediaStocks(pOrder); MarkAppropriateUnchangedAssociations(pOrder); using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer()) { try { //Specify the binding to be used for the client. NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None); //Specify the address to be used for the client. EndpointAddress address = new EndpointAddress("net.msmq://localhost/private/PublisherMessageQueue"); pOrder.OrderNumber = Guid.NewGuid(); OrderToOrderMessage lVisitor = new OrderToOrderMessage(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, RetrieveVideoStoreAccountNumber()); lVisitor.Visit(pOrder); PublisherServiceClient lClient = new PublisherServiceClient(binding, address); lClient.Publish(lVisitor.Result); //TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0); pOrder.UpdateStockLevels(); pOrder.OrderStatus = "unpayed"; //PlaceDeliveryForOrder(pOrder); lContainer.Orders.ApplyChanges(pOrder); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { // SendOrderErrorMessage(pOrder, lException); // throw; } } } }