public override AddRmaResult Execute(IUnitOfWork unitOfWork, AddRmaParameter parameter, AddRmaResult result) { //Uncomment following lines to disable RMA for Canada. if (result.OrderHistory.CustomerNumber.ElementAt(0) != '1') { return(base.NextHandler.Execute(unitOfWork, parameter, result)); } CustomerOrder customerOrder = new CustomerOrder(); customerOrder = unitOfWork.GetRepository <CustomerOrder>().GetTable().Where(x => x.OrderNumber == result.OrderHistory.WebOrderNumber).FirstOrDefault(); if (customerOrder == null) { CreateCustomerOrderRecord createCustomerOrder = new CreateCustomerOrderRecord(this.CartPipeline); CustomerOrder cartObj = createCustomerOrder.CreateNewCart(unitOfWork, result.OrderHistory, parameter, result); if (cartObj == null) { return(this.CreateErrorServiceResult(result, SubCode.Forbidden, MessageProvider.Current.Cart_CartNotFound)); } result.Properties.Add("ReturnNumber", cartObj.OrderNumber); if (cartObj.Notes != null) { result.Properties.Add("InvoiceNumber", cartObj.Notes.Split('/')[0]); } cartObj.RecalculatePromotions = false; cartObj.RecalculateTax = false; // Build up the update cart paramter. var updatecartObjParameter = new UpdateCartParameter(); updatecartObjParameter.CartId = cartObj.Id; updatecartObjParameter.Status = "Return Requested"; updatecartObjParameter.IsJobQuote = false; updatecartObjParameter.IsPayPal = false; updatecartObjParameter.ShipToId = cartObj.ShipToId; updatecartObjParameter.ShipViaId = cartObj.ShipViaId; IHandler <UpdateCartParameter, UpdateCartResult> updateHandler = this.HandlerFactory.GetHandler <IHandler <UpdateCartParameter, UpdateCartResult> >(); var updateCartObjSubmitResult = updateHandler.Execute(unitOfWork, updatecartObjParameter, updateCartResult); LogHelper.For(this).Info(string.Format("{0}: RMA UpdateCart Message: {1}", string.IsNullOrEmpty(result.OrderHistory.WebOrderNumber) ? result.OrderHistory.ErpOrderNumber : result.OrderHistory.WebOrderNumber, updateCartObjSubmitResult.Message)); return(base.NextHandler.Execute(unitOfWork, parameter, result)); //return this.CreateErrorServiceResult(result, SubCode.NotFound, MessageProvider.Current.Order_NotFound); } var userProfile = unitOfWork.GetRepository <UserProfile>().GetTable().FirstOrDefault(x => x.Id == customerOrder.InitiatedByUserProfileId); var billTo = unitOfWork.GetRepository <Customer>().GetTable().FirstOrDefault(x => x.Id == customerOrder.CustomerId); var shipTo = unitOfWork.GetRepository <Customer>().GetTable().FirstOrDefault(x => x.Id == customerOrder.ShipToId); var website = unitOfWork.GetRepository <Website>().GetTable().FirstOrDefault(x => x.Id == customerOrder.WebsiteId); var currency = unitOfWork.GetRepository <Currency>().GetTable().FirstOrDefault(x => x.Id == customerOrder.CurrencyId); // Check for null before setting up the SiteContext object. if (userProfile == null || billTo == null || shipTo == null) { return(this.CreateErrorServiceResult(result, SubCode.NotFound, MessageProvider.Current.Order_NotFound)); } SiteContextDto siteContextDto = new SiteContextDto(SiteContext.Current); siteContextDto.UserProfileDto = new UserProfileDto(userProfile); siteContextDto.BillTo = billTo; siteContextDto.ShipTo = shipTo; siteContextDto.CurrencyDto = new CurrencyDto(currency); //create new Cart CustomerOrder cart = CreateNewCart(unitOfWork, customerOrder, parameter, result); if (cart == null) { return(this.CreateErrorServiceResult(result, SubCode.Forbidden, MessageProvider.Current.Cart_CartNotFound)); } cart.RecalculatePromotions = false; cart.RecalculateTax = false; // Build up the update cart paramter. var updateCartParameter = new UpdateCartParameter(); updateCartParameter.CartId = cart.Id; updateCartParameter.Status = "Return Requested"; updateCartParameter.IsJobQuote = false; updateCartParameter.IsPayPal = false; updateCartParameter.ShipToId = cart.ShipToId; updateCartParameter.ShipViaId = cart.ShipViaId; IHandler <UpdateCartParameter, UpdateCartResult> handler = this.HandlerFactory.GetHandler <IHandler <UpdateCartParameter, UpdateCartResult> >(); var updateCartSubmitResult = handler.Execute(unitOfWork, updateCartParameter, updateCartResult); LogHelper.For(this).Info(string.Format("{0}: RMA UpdateCart Message: {1}", string.IsNullOrEmpty(result.OrderHistory.WebOrderNumber) ? result.OrderHistory.ErpOrderNumber : result.OrderHistory.WebOrderNumber, updateCartSubmitResult.Message)); return(this.NextHandler.Execute(unitOfWork, parameter, result)); }
public CustomerOrder CreateNewCart(IUnitOfWork unitOfWork, OrderHistory customerOrder, AddRmaParameter parameter, AddRmaResult result) { var orderNumber = string.Empty; if (string.IsNullOrEmpty(customerOrder.WebOrderNumber) && !string.IsNullOrEmpty(customerOrder.ErpOrderNumber)) { orderNumber = customerOrder.ErpOrderNumber.Split('-')[0]; } else { orderNumber = customerOrder.WebOrderNumber.Substring(0, 1) == "W" ? customerOrder.WebOrderNumber.Substring(1) : customerOrder.WebOrderNumber.Split('-')[0]; } Customer customer = new Customer(); if (string.IsNullOrEmpty(customerOrder.CustomerSequence) || customerOrder.CustomerSequence.Equals(customerOrder.CustomerNumber)) { customer = unitOfWork.GetRepository <Customer>().GetTable().Where(x => x.CustomerNumber == customerOrder.CustomerNumber).FirstOrDefault(); } else { customer = unitOfWork.GetRepository <Customer>().GetTable().Where(x => x.CustomerNumber == customerOrder.CustomerNumber && x.CustomerSequence == customerOrder.CustomerSequence).FirstOrDefault(); } SiteContextDto siteContextDto = new SiteContextDto(SiteContext.Current); var websiteId = siteContextDto.Website.Id; var website = siteContextDto.Website; Salesperson salesperson = new Salesperson(); salesperson = unitOfWork.GetRepository <Salesperson>().GetTable().Where(x => x.Name.Equals(customerOrder.Salesperson)).FirstOrDefault(); ShipVia shipVia = unitOfWork.GetRepository <ShipVia>().GetTable().Where(x => x.ShipCode.ToLower().Equals(customerOrder.ShipCode.ToLower())).FirstOrDefault(); CustomerOrder cart = new CustomerOrder() { Id = new Guid(), OrderNumber = customSettings.RMA_OrderNumberPrefix + orderNumber, OrderDate = DateTimeProvider.Current.Now, Customer = customer, WebsiteId = websiteId, Website = website, Status = "Return Requested", CustomerPO = customerOrder.CustomerPO, Notes = customerOrder.Notes, Type = "Return Requested", Salesperson = salesperson, SalespersonId = salesperson.Id, ShippingCharges = customerOrder.ShippingCharges, ShipCode = customerOrder.ShipCode, ShipVia = shipVia }; foreach (var promotion in customerOrder.OrderHistoryPromotions.ToList()) { CustomerOrderPromotion orderPromotion = new CustomerOrderPromotion() { Id = new Guid(), CustomerOrderId = cart.Id, PromotionId = promotion.PromotionId, OrderLineId = promotion.OrderHistoryLineId, Amount = promotion.Amount, CustomProperties = promotion.CustomProperties }; cart.CustomerOrderPromotions.Add(orderPromotion); } this.CartPipeline.SetBillTo(new SetBillToParameter() { Cart = cart, BillTo = cart.Customer }); this.CartPipeline.SetShipTo(new SetShipToParameter() { Cart = cart, ShipTo = cart.ShipTo }); // Add the Returned Sequence in the Order Number var returnedSeq = unitOfWork.GetRepository <CustomerOrder>().GetTable().Where(x => x.OrderNumber.StartsWith(cart.OrderNumber)).Count(); if (returnedSeq != 0) { returnedSeq += 1; } else { returnedSeq = 1; } cart.OrderNumber = cart.OrderNumber + "/" + returnedSeq; // Getting the Invoice Number var invoiceNumber = string.Empty; if (!string.IsNullOrEmpty(result.OrderHistory.ErpOrderNumber)) { var erpNumber = result.OrderHistory.ErpOrderNumber.Split('-')[0]; var invoiceQuery = (from ih in unitOfWork.GetRepository <InvoiceHistory>().GetTable() join ihl in unitOfWork.GetRepository <InvoiceHistoryLine>().GetTable() on ih.Id equals ihl.InvoiceHistoryId where ihl.ErpOrderNumber == erpNumber select ih.InvoiceNumber); if (!string.IsNullOrEmpty(invoiceQuery.FirstOrDefault())) { invoiceNumber = invoiceQuery.FirstOrDefault().Split('-')[0].ToString(); } } foreach (var customProperty in customerOrder.CustomProperties) { cart.SetProperty(customProperty.Name, customProperty.Value); } var chkReturnType = 0; // To check partial return or full return based on quantity return foreach (var ol in customerOrder.OrderHistoryLines.ToList()) { RmaLineDto rmaLineDto = parameter.RmaLines.FirstOrDefault((RmaLineDto r) => r.Line.Equals(ol.LineNumber)) ?? new RmaLineDto(); if (rmaLineDto.RmaQtyRequested != 0) { AddCartLineParameter addCartLineParameter = new AddCartLineParameter(); addCartLineParameter.Cart = cart; addCartLineParameter.Product = unitOfWork.GetRepository <Product>().GetTable().Where(x => x.Name.Equals(ol.ProductErpNumber)).FirstOrDefault(); addCartLineParameter.QtyOrdered = rmaLineDto.RmaQtyRequested; addCartLineParameter.UnitOfMeasure = ol.UnitOfMeasure; addCartLineParameter.Notes = ol.Notes; addCartLineParameter.CustomProperties = ol.CustomProperties.ToList(); Insite.Cart.Services.Pipelines.Results.AddCartLineResult addCartLineResult = CartPipeline.AddCartLine(addCartLineParameter); addCartLineResult.CartLine.UnitCost = ol.UnitCost; addCartLineResult.CartLine.UnitListPrice = addCartLineParameter.Product.BasicListPrice; addCartLineResult.CartLine.UnitNetPrice = ol.UnitNetPrice; addCartLineResult.CartLine.UnitRegularPrice = ol.UnitRegularPrice; addCartLineResult.CartLine.TotalNetPrice = ol.TotalNetPrice; addCartLineResult.CartLine.TotalRegularPrice = ol.TotalRegularPrice; if (ol.QtyOrdered > rmaLineDto.RmaQtyRequested) { chkReturnType += 1; } } } if (chkReturnType != 0 || customerOrder.OrderHistoryLines.Count() > cart.OrderLines.Count()) { cart.Notes = invoiceNumber + "/" + 1; // 1 indicates the partial return } else { cart.Notes = invoiceNumber + "/" + 0; // 0 indicates the full return } unitOfWork.GetRepository <CustomerOrder>().Insert(cart); unitOfWork.Save(); return(cart); }