public WebStore.WebStoreCartResponse SaveCartItem(int catalogId, int productId, int quantity) { try { // NOTE: no need to check for cart id in context since the accessor will take care of this for us and create a cart if necessary SalesAcc.ICartAccessor cartAccessor = AccessorFactory.CreateAccessor <SalesAcc.ICartAccessor>(); // Save the cart item Cart storedCart = cartAccessor.SaveCartItem(catalogId, productId, quantity); // generate the pricing and taxes for the cart and convert to the public DTO var result = GenerateCartPricingAndTax(storedCart); // Return the cart return(new WebStore.WebStoreCartResponse() { Success = true, Cart = result }); } catch (Exception ex) { Logger.Error(ex); return(new WebStore.WebStoreCartResponse() { Success = false, Message = "There was a problem editting the cart" }); } }
public WebStore.WebStoreCartResponse UpdateShippingInfo(int catalogId, Address shippingInfo, bool billingSameAsShipping) { try { // NOTE: no need to check for cart id in context since the accessor will take care of this for us and create a cart if necessary SalesAcc.ICartAccessor cartAccessor = AccessorFactory.CreateAccessor <SalesAcc.ICartAccessor>(); // Save the billing info Cart storedCart = cartAccessor.SaveShippingInfo(catalogId, shippingInfo); // save the shipping info if the same if (billingSameAsShipping) { storedCart = cartAccessor.SaveBillingInfo(catalogId, shippingInfo); } // generate the pricing and taxes for the cart and convert to the public DTO var result = GenerateCartPricingAndTax(storedCart); // Return the cart return(new WebStore.WebStoreCartResponse() { Success = true, Cart = result }); } catch (Exception ex) { Logger.Error(ex); return(new WebStore.WebStoreCartResponse() { Success = false, Message = "There was a problem saving the shipping info" }); } }
public WebStore.WebStoreOrderResponse SubmitOrder(int catalogId, PaymentInstrument paymentInstrument) { try { var result = new WebStore.WebStoreOrder(); // Get the shopping cart SalesAcc.ICartAccessor cartAccessor = AccessorFactory.CreateAccessor <SalesAcc.ICartAccessor>(); var storedCart = cartAccessor.ShowCart(catalogId); // make sure we have a valid cart to start if (storedCart != null) { // Calculate the cart totals and tax var fullCart = GenerateCartPricingAndTax(storedCart); // create the order records SalesAcc.IOrderAccessor orderAccessor = AccessorFactory.CreateAccessor <SalesAcc.IOrderAccessor>(); var submittedOrder = new Order(); DTOMapper.Map(fullCart, submittedOrder); // validate the order var validationEngine = EngineFactory.CreateEngine <IOrderValidationEngine>(); var validationResponse = validationEngine.ValidateOrder(submittedOrder); if (validationResponse.Success) { submittedOrder.Status = OrderStatuses.Created; var savedOrder = orderAccessor.SaveOrder(catalogId, submittedOrder); // attempt the payment authorization if amount > 0 if (savedOrder.Total > 0) { SalesAcc.IPaymentAccessor paymentAccessor = AccessorFactory.CreateAccessor <SalesAcc.IPaymentAccessor>(); var authResult = paymentAccessor.Authorize(paymentInstrument, savedOrder.Id, savedOrder.Total); if (authResult.Success) { // save the auth code for use in capture savedOrder.AuthorizationCode = authResult.AuthCode; } else // problems with the authorization { // update the order status savedOrder.Status = OrderStatuses.Failed; savedOrder = orderAccessor.SaveOrder(catalogId, savedOrder); // Return the order response DTOMapper.Map(savedOrder, result); return(new WebStore.WebStoreOrderResponse() { Success = false, Message = "There was a problem processing the payment", Order = result }); } } // update the order status savedOrder.Status = OrderStatuses.Authorized; savedOrder = orderAccessor.SaveOrder(catalogId, savedOrder); // Delete the cart once the order is successful cartAccessor.DeleteCart(catalogId); // send order submission event UtilityFactory.CreateUtility <IAsyncUtility>().SendEvent(AsyncEventTypes.OrderSubmitted, savedOrder.Id); // Return the order response DTOMapper.Map(savedOrder, result); return(new WebStore.WebStoreOrderResponse() { Success = true, Order = result }); } // order is not valid return(new WebStore.WebStoreOrderResponse() { Success = false, Message = validationResponse.Message }); } // cart not found or not valid return(new WebStore.WebStoreOrderResponse() { Success = false, Message = "Cart is not valid" }); } catch (Exception ex) { Logger.Error(ex); return(new WebStore.WebStoreOrderResponse() { Success = false, Message = "There was a problem processing the order" }); } }