private void RecallOrderItem(RecallRequestViewModel request, OrderDetail orderDetail, Order order) { var orderItemprice = orderDetail.Price ?? 0; var singleItemPrice = orderItemprice / orderDetail.Quantiy.Value; orderDetail.Quantiy -= request.quantity; var newOrderItemPrice = orderDetail.Quantiy * singleItemPrice; var priceDiff = orderDetail.Price - newOrderItemPrice; orderDetail.Price = newOrderItemPrice; var discountedPriceToRemove = orderDetail.Discount > 0 ? ApplyDiscountAmount(orderDetail.Discount.Value, priceDiff.Value) : priceDiff; order.Total -= discountedPriceToRemove; order.ModifiedOnUtc = DateTime.Now; order.Remark = "One or more item was recalled."; order.OrderStatus = (int)OrderStatus.RECALL; var currentUserId = User.Identity.GetUserId <int>(); order.ModifiedBy_Id = currentUserId; orderDetail.ModifiedBy_Id = currentUserId; order.ModifiedOnUtc = DateTime.Now; orderDetail.ModifiedOnUtc = DateTime.Now; if (orderDetail.Quantiy <= 0) { orderDetail.Discount = 0; } }
public HttpResponseMessage RecallOrder(RecallRequestViewModel request) { var response = new ApiResultViewModel <OrderDetailViewModel>(); try { if (request == null || Guid.Empty.Equals(request.itemId)) { response.errorStatus = true; response.errorMessage = "Invalid request. Please confirm and try again."; return(Request.CreateResponse(response)); } if (request.quantity <= 0 & request.price <= 0) { response.errorStatus = true; response.errorMessage = "Please enter a valid quantity and price to complete recall action."; return(Request.CreateResponse(response)); } var orderDetail = _orderDetailSvc.GetOrderDetailByUId(request.itemId); if (orderDetail == null) { response.errorStatus = true; response.errorMessage = "Transaction record not found."; return(Request.CreateResponse(response)); } if (request.quantity > orderDetail.Quantiy) { response.errorStatus = true; response.errorMessage = String.Format("Stock quantity supplied cannot exceed {0}.", orderDetail.Quantiy); return(Request.CreateResponse(response)); } if (request.price > orderDetail.Price) { response.errorStatus = true; response.errorMessage = String.Format("Stock price supplied cannot exceed N {0}.", orderDetail.Price); return(Request.CreateResponse(response)); } //var order = _orderSvc.GetOrderByUId(orderDetail.Order_UId); //if ((orderDetail == null || orderDetail.IsDeleted) || (order == null || order.IsDeleted)) //{ // response.errorStatus = true; // response.errorMessage = "Order not found."; // return Request.CreateResponse(response); //} //if (orderDetail.Quantiy < request.quantity) //{ // response.errorStatus = true; // response.errorMessage = "Quantity exceeds Order item quantity."; // return Request.CreateResponse(response); //} //RecallOrderItem(request, orderDetail, order); var stockRecalled = _productSvc.GetProductById(orderDetail.Product_Id.Value); OrderDetail newOrderDt = new OrderDetail(); newOrderDt.OrderDetailUId = Guid.NewGuid(); Order newOrder = new Order(); newOrder.OrderUId = Guid.NewGuid(); newOrder.EntryDate = DateTime.Now; newOrder.OrderStatus = (Int32)OrderStatus.RECALL; newOrder.Total = (request.quantity * -request.price); newOrder.User_Id = IposMembershipService.GetUserId(User.Identity.Name); newOrder.IsDiscounted = request.price < orderDetail.Price ? true : false; newOrder.CreatedBy_Id = User.Identity.GetUserId <Int32>(); newOrder.PaymentMethod = (Int32)PaymentMethod.CASH; newOrderDt.EntryDate = newOrder.EntryDate; newOrderDt.Order_UId = newOrder.OrderUId; newOrderDt.Price = -request.price; newOrderDt.Product_Id = orderDetail.Product_Id; newOrderDt.CostPrice = orderDetail.CostPrice; newOrderDt.CreatedBy_Id = User.Identity.GetUserId <int>(); newOrderDt.Discount = 0; //(Double?)(orderDetail.Price - request.price); newOrderDt.Quantiy = orderDetail.Quantiy; stockRecalled.Quantity += request.quantity; newOrder.Remark = String.Format("Recall of {0} price was update to {1} and quantity to {2} reason being {0}" , stockRecalled.Name + " " + stockRecalled.Description, request.price, stockRecalled.Quantity, request.comment); using (var uow = _orderDetailSvc.UnitOfWork) { _productSvc.Update(stockRecalled); _orderSvc.Add(newOrder); _orderDetailSvc.Add(newOrderDt); uow.SaveChanges(); } //response.result = Mapper.Map<OrderDetailViewModel>(orderDetail); response.message = "Recall action on stock item was successful."; } catch (Exception e) { _logger.Log(e); #if DEBUG response.errorMessage = e.Message; response.errorStatus = true; #else response.errorMessage = "Error occured, please contact admin."; response.errorStatus = true; #endif } return(Request.CreateResponse(response)); }