public OrdersApiModel() { Order = new Order(); OrderDetail = new OrderDetail(); Customer = new Customer(); Orders = new List<OrderInquiry>(); Shippers = new List<Shipper>(); OrderDetails = new List<OrderDetails>(); }
/// <summary> /// Validate Order Detail Line Item /// </summary> /// <param name="order"></param> /// <param name="dataService"></param> public void ValidateOrderDetailLineItem(OrderDetail order, IOrdersDataService dataService) { ordersDataService = dataService; InitializeValidationRules(order); ValidateGreaterThanZero("Quantity", "Order Quantity"); }
/// <summary> /// Update Order Detail Line Item /// </summary> /// <param name="orderDetail"></param> public void UpdateOrderDetailLineItem(OrderDetail orderDetail) { OrderDetail order = dbConnection.OrderDetails.SingleOrDefault(o => o.OrderDetailID == orderDetail.OrderDetailID); int originalQuantity = order.Quantity; order.Quantity = orderDetail.Quantity; order.DateUpdated = DateTime.Now; Product product = dbConnection.Products.SingleOrDefault(p => p.ProductID == order.ProductID); decimal originalAmount = (originalQuantity * product.UnitPrice); decimal newAmount = (order.Quantity * product.UnitPrice); decimal diff = newAmount - originalAmount; Order orderHeader = dbConnection.Orders.Where(o => o.OrderID == orderDetail.OrderID).FirstOrDefault(); orderHeader.OrderTotal = orderHeader.OrderTotal + diff; }
/// <summary> /// Create Order Detail Line Item /// </summary> /// <param name="orderDetail"></param> public void CreateOrderDetailLineItem(OrderDetail orderDetail) { int count = dbConnection.OrderDetails.Where(o => o.OrderID == orderDetail.OrderID).Count(); int itemNumber = 0; if (count > 0) { var maxItemNumber = dbConnection.OrderDetails.Where(o => o.OrderID == orderDetail.OrderID).Max(i => (int?)i.LineItemNumber ?? 0); itemNumber = Convert.ToInt32(maxItemNumber); } itemNumber++; DateTime orderCreated = DateTime.Now; orderDetail.OrderDetailID = Guid.NewGuid(); orderDetail.LineItemNumber = itemNumber; orderDetail.DateCreated = orderCreated; orderDetail.DateUpdated = orderCreated; dbConnection.OrderDetails.Add(orderDetail); decimal orderTotal = 0; if (count > 0) { orderTotal = (from orderDetails in dbConnection.OrderDetails.Where(o => o.OrderID == orderDetail.OrderID) join products in dbConnection.Products on orderDetails.ProductID equals products.ProductID select new { products.UnitPrice, orderDetails.Quantity }).Sum(o => o.Quantity * o.UnitPrice); } Product product = dbConnection.Products.SingleOrDefault(p => p.ProductID == orderDetail.ProductID); orderTotal = orderTotal + ( orderDetail.Quantity * product.UnitPrice ); Order order = dbConnection.Orders.Where(o => o.OrderID == orderDetail.OrderID).FirstOrDefault(); order.OrderTotal = orderTotal; }
/// <summary> /// Update Order Detail Line Item /// </summary> /// <param name="orderID"></param> /// <param name="orderDetailID"></param> /// <param name="quantity"></param> /// <param name="transaction"></param> /// <returns></returns> public OrderDetail UpdateOrderDetailLineItem(long orderID, Guid orderDetailID, int quantity, out TransactionalInformation transaction) { transaction = new TransactionalInformation(); OrdersBusinessRules ordersBusinessRules = new OrdersBusinessRules(); OrderDetail order = new OrderDetail(); order.Quantity = quantity; order.OrderDetailID = orderDetailID; order.OrderID = orderID; try { ordersDataService.CreateSession(); ordersBusinessRules.ValidateOrderDetailLineItem(order, ordersDataService); if (ordersBusinessRules.ValidationStatus == true) { ordersDataService.BeginTransaction(); ordersDataService.UpdateOrderDetailLineItem(order); ordersDataService.CommitTransaction(true); transaction.ReturnStatus = true; transaction.ReturnMessage.Add("Order line item successfully updated."); } else { transaction.ReturnStatus = ordersBusinessRules.ValidationStatus; transaction.ReturnMessage = ordersBusinessRules.ValidationMessage; transaction.ValidationErrors = ordersBusinessRules.ValidationErrors; } } catch (Exception ex) { transaction.ReturnMessage = new List<string>(); string errorMessage = ex.Message; transaction.ReturnStatus = false; transaction.ReturnMessage.Add(errorMessage); } finally { ordersDataService.CloseSession(); } return order; }