Exemple #1
0
        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"
                });
            }
        }
Exemple #2
0
        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"
                });
            }
        }
Exemple #3
0
        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"
                });
            }
        }