public ActionResult Index(StartPage currentPage, string selectedMarket)
        {
            TempData["IsOnLine"] = CheckIfOnLine.IsInternetAvailable; // not the best way... improve this

            if (selectedMarket != null)
            {
                _currentMarketService.SetCurrentMarket(new MarketId(selectedMarket)); // outcommented in Adv.-starter
            }

            // just testing
            //Buy(currentPage);
            //CheckOnParentAndNode();
            //CheckInventory(); // native
            //CheckInventory2(); // AdjustOrRemove

            var model = new CommerceTraining.Models.ViewModels.PageViewModel <StartPage>(currentPage)
            {
                MainBodyStartPage = currentPage.MainBody,
                myPageChildren    = _contentLoader.GetChildren <IContent>(currentPage.ContentLink),
                Customer          = LoggedInOrNot(),

                // uncomment the below when the catalog is modelled
                topLevelCategories = FilterForVisitor.Filter(
                    _contentLoader.GetChildren <CatalogContentBase>(topCategory).OfType <NodeContent>()),
                markets        = _marketService.GetAllMarkets(),
                selectedMarket = _currentMarketService.GetCurrentMarket().MarketName,
                //selectedMarket = MarketId.Default.Value - starter in Adv.
                someInfo = GetStringInfo(currentPage)
            };

            return(View(model));
        }
        public void UpdateLanguage(string languageId)
        {
            var chosenLanguage = languageId;
            var cookieLanguage = _cookieService.Get(LanguageCookie);

            if (string.IsNullOrEmpty(chosenLanguage))
            {
                if (cookieLanguage != null)
                {
                    chosenLanguage = cookieLanguage;
                }
                else
                {
                    var currentMarket = _currentMarket.GetCurrentMarket();
                    if (currentMarket != null && currentMarket.DefaultLanguage != null)
                    {
                        chosenLanguage = currentMarket.DefaultLanguage.Name;
                    }
                }
            }

            _defaultUpdateCurrentLanguage.UpdateLanguage(chosenLanguage);

            if (cookieLanguage == null || cookieLanguage != chosenLanguage)
            {
                _cookieService.Set(LanguageCookie, chosenLanguage);
            }
        }
        public void Dump()
        {
            var languageBranch = _languageBranchRepository.ListAll().First();

            var currentMarket = _currentMarket.GetCurrentMarket();
            var market        = (MarketImpl)_marketService.GetMarket(currentMarket.MarketId);

            market.DefaultCurrency = Currency.EUR;
            market.DefaultLanguage = languageBranch.Culture;
            _marketService.UpdateMarket(market);

            var rootLink = _referenceConverter.GetRootLink();
            var catalog  = _contentRepository.GetDefault <CatalogContent>(rootLink, languageBranch.Culture);

            catalog.Name             = "Catalog";
            catalog.DefaultCurrency  = market.DefaultCurrency;
            catalog.CatalogLanguages = new ItemCollection <string> {
                languageBranch.LanguageID
            };
            catalog.DefaultLanguage = "en";
            catalog.WeightBase      = "kg";
            catalog.LengthBase      = "cm";
            var catalogRef = _contentRepository.Save(catalog, SaveAction.Publish, AccessLevel.NoAccess);

            var category = _contentRepository.GetDefault <NodeContent>(catalogRef);

            category.Name        = "Category";
            category.DisplayName = "Category";
            category.Code        = "category";
            var categoryRef = _contentRepository.Save(category, SaveAction.Publish, AccessLevel.NoAccess);

            var product = _contentRepository.GetDefault <ProductContent>(categoryRef);

            product.Name        = "Product";
            product.DisplayName = "Product";
            product.Code        = "product";
            var productRef = _contentRepository.Save(product, SaveAction.Publish, AccessLevel.NoAccess);

            var variant = _contentRepository.GetDefault <VariationContent>(productRef);

            variant.Name        = "Variant";
            variant.DisplayName = "Variant";
            variant.Code        = "test";
            variant.MinQuantity = 1;
            variant.MaxQuantity = 100;
            _contentRepository.Save(variant, SaveAction.Publish, AccessLevel.NoAccess);

            var price = new PriceValue
            {
                UnitPrice       = new Money(100, market.DefaultCurrency),
                CatalogKey      = new CatalogKey(variant.Code),
                MarketId        = market.MarketId,
                ValidFrom       = DateTime.Today.AddYears(-1),
                ValidUntil      = DateTime.Today.AddYears(1),
                CustomerPricing = CustomerPricing.AllCustomers,
                MinQuantity     = 0
            };

            _priceService.SetCatalogEntryPrices(price.CatalogKey, new[] { price });
        }
Example #4
0
        // GET: MarketsDemo
        public ActionResult Index()
        {
            var viewModel = new DemoMarketsViewModel();

            viewModel.MarketList     = _marketService.GetAllMarkets();
            viewModel.SelectedMarket = _currentMarket.GetCurrentMarket();

            var shirtRef = _referenceConverter.GetContentLink("Long Sleeve Shirt White Small_1");

            viewModel.Shirt = _contentLoader.Get <ShirtVariation>(shirtRef);

            GetTaxInfo(viewModel);
            GetPriceInfo(viewModel);

            return(View(viewModel));
        }
Example #5
0
        public ActionResult AddToCart(ShirtVariation currentContent, decimal Quantity, string Monogram)
        {
            // ToDo: (lab D1) add a LineItem to the Cart
            var cart = _orderRepository.LoadOrCreateCart <ICart>(PrincipalInfo.CurrentPrincipal.GetContactId(), "Default");
            var item = cart.GetAllLineItems().Where(i => i.Code == currentContent.Code).FirstOrDefault();

            if (item == null)
            {
                item          = cart.CreateLineItem(currentContent.Code);
                item.Quantity = Quantity;
                cart.AddLineItem(item);
            }
            else
            {
                item.Quantity += Quantity;
            }

            var validLineItem = _lineItemValidator.Validate(item, _currentMarket.GetCurrentMarket().MarketId, (li, issue) => { });

            if (validLineItem)
            {
                item.Properties["Monogram"] = Monogram;
                _orderRepository.Save(cart);
            }

            // if we want to redirect
            ContentReference cartRef  = _contentLoader.Get <StartPage>(ContentReference.StartPage).Settings.cartPage;
            CartPage         cartPage = _contentLoader.Get <CartPage>(cartRef);
            var    name         = cartPage.Name;
            var    lang         = ContentLanguage.PreferredCulture;
            string passingValue = cart.Name;

            // go to the cart page, if needed
            return(RedirectToAction("Index", lang + "/" + name, new { passedAlong = passingValue }));
        }
Example #6
0
        private Dictionary <ILineItem, List <ValidationIssue> > UpdateLineItemSku(ICart cart, int shipmentId, string oldCode, string newCode, decimal quantity)
        {
            RemoveLineItem(cart, shipmentId, oldCode);

            //merge same sku's
            var newLineItem = GetFirstLineItem(cart, newCode);

            if (newLineItem != null)
            {
                var shipment = cart.GetFirstForm().Shipments.First(s => s.ShipmentId == shipmentId || shipmentId <= 0);
                cart.UpdateLineItemQuantity(shipment, newLineItem, newLineItem.Quantity + quantity);
            }
            else
            {
                newLineItem          = cart.CreateLineItem(newCode, _orderGroupFactory);
                newLineItem.Quantity = quantity;
                cart.AddLineItem(newLineItem, _orderGroupFactory);

                var price = PriceCalculationService.GetSalePrice(newCode, cart.MarketId, _currentMarket.GetCurrentMarket().DefaultCurrency);
                if (price != null)
                {
                    newLineItem.PlacedPrice = price.UnitPrice.Amount;
                }
            }

            return(ValidateCart(cart));
        }
Example #7
0
        public IPurchaseOrder CreateFakePurchaseOrder()
        {
            var form = new InMemoryOrderForm
            {
                Payments =
                {
                    new InMemoryPayment
                    {
                        BillingAddress    = new InMemoryOrderAddress(),
                        PaymentMethodName = "CashOnDelivery"
                    }
                }
            };

            form.Shipments.First().ShippingAddress = new InMemoryOrderAddress();
            var market        = _currentMarket.GetCurrentMarket();
            var purchaseOrder = new InMemoryPurchaseOrder
            {
                Currency         = market.DefaultCurrency,
                MarketId         = market.MarketId,
                MarketName       = market.MarketName,
                PricesIncludeTax = market.PricesIncludeTax,
                OrderLink        = new OrderReference(0, string.Empty, Guid.Empty, typeof(IPurchaseOrder))
            };

            purchaseOrder.Forms.Add(form);

            return(purchaseOrder);
        }
Example #8
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            var catalogSystem = Locate.Advanced.GetInstance <ICatalogSystem>();

            var currentMarket = _currentMarketService.GetCurrentMarket();

            // we need to use Variations responsegroup to get prices
            var entry = CurrentData.LoadEntry(CatalogEntryResponseGroup.ResponseGroup.Variations);

            var salePrice = StoreHelper.GetSalePrice(entry, 1);

            if (entry.IsAvailableInMarket(currentMarket.MarketId) && (salePrice != null))
            {
                var basePrice = salePrice.Money;
                var discount  = StoreHelper.GetDiscountPrice(entry).Money;
                if (discount.Amount == -1)
                {
                    discount = basePrice;
                }
                var saved = basePrice.Subtract(discount);

                ListPrice.Text       = basePrice.ToString();
                DiscountPricing.Text = discount.ToString();
                Savings.Text         = saved.ToString();

                return;
            }


            ListPrice.Text       = "Not available";
            DiscountPricing.Text = "Not available";
            Savings.Text         = "Not available";
        }
        public DeliveryReceipt(ICurrentMarket currentMarket, PurchaseOrderModel purchaseOrder)
        {
            if (purchaseOrder == null) throw new ArgumentNullException("purchaseOrder cannot be null");

            _purchaseOrder = purchaseOrder;
            _orderViewModel = new OrderViewModel(currentMarket.GetCurrentMarket().DefaultCurrency.Format, _purchaseOrder);

            To = _orderViewModel.Email;

            var localizationService = ServiceLocator.Current.GetInstance<LocalizationService>();
            IMarketService marketService = ServiceLocator.Current.GetInstance<IMarketService>();
            IMarket market = GetMarketForOrder(purchaseOrder, marketService, currentMarket);

            string emailSubject = localizationService.GetStringByCulture("/common/receipt/email/subject", market.DefaultLanguage);

            Subject = string.Format(emailSubject, _purchaseOrder.TrackingNumber);
            BackendOrderNumber = _orderViewModel.ErpOrderNumber;
            PurchaseOrderNumber = _purchaseOrder.TrackingNumber;

            // Get first shipment tracking number
            if (_purchaseOrder.OrderForms != null &&
                _purchaseOrder.OrderForms.Any() &&
                _purchaseOrder.OrderForms.First().Shipments != null &&
                _purchaseOrder.OrderForms.First().Shipments.Any())
            {
                TrackingNumber = _purchaseOrder.OrderForms.First().Shipments.First().ShipmentTrackingNumber;
            }
        }
        public Money?GetCurrentPrice(string code)
        {
            var market   = _currentMarket.GetCurrentMarket();
            var currency = _currencyService.GetCurrentCurrency();

            return(GetPrice(code, market.MarketId, currency));
        }
Example #11
0
        protected void MarketList_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            var currentMarket = _currentMarket.GetCurrentMarket();
            var item          = e.Item;

            if (item.ItemType == ListItemType.Header)
            {
                // Set header to the current market
                ActOnControl <Literal>(item, "litCurrentMarket", c => c.Text = currentMarket.MarketName);
                return;
            }

            // If this line is not for current market, return
            var marketDataItem = item.DataItem as IMarket;

            if (marketDataItem == null || (marketDataItem.MarketId.Value != currentMarket.MarketId.Value))
            {
                return;
            }

            // Visually indicate that current market is active
            ActOnControl <HtmlGenericControl>(item, "liMarketItem", c => c.Attributes.Add("class", "active"));

            // Disable link to set this market as current (is already current...)
            ActOnControl <LinkButton>(item, "linkSetMarket", c => c.Enabled = false);
        }
        // lazy dev.
        private void LoadingExamples(ShirtVariation currentContent)
        {
            // some of this is / will be in Find
            //currentContent.LoadEntry(CatalogEntryResponseGroup.ResponseGroup.)

            ContentReference parent = currentContent.ParentLink; //...from "me" as the variation
            IEnumerable <EntryContentBase> nodeChildren = base._contentLoader.GetChildren <EntryContentBase>(parent);

            IEnumerable <ContentReference> allLinks = currentContent.GetCategories();

            IEnumerable <Relation> nodes = currentContent.GetNodeRelations();

            var theType = currentContent.GetOriginalType(); // handy

            var proxy = currentContent.GetType();

            IEnumerable <ContentReference> prodParents = currentContent.GetParentProducts();

            IEnumerable <ContentReference> parentPackages = currentContent.GetParentPackages();

            IMarket market    = _currentMarketService.GetCurrentMarket();
            bool    available = currentContent.IsAvailableInMarket(market.MarketId); // if we want to know about another market

            bool available2 = currentContent.IsAvailableInCurrentMarket();

            ISecurityDescriptor sec = currentContent.GetSecurityDescriptor();

            // CatalogContext.Current.GetCatalogEntriesDto()

            //currentContent.LoadEntryDt

            //ServiceLocator.Current.GetInstance<IOrderRepository>().Load<IOrderGroup>();
        }
Example #13
0
        private void MergePriorityProducts(Commerce.Models.Blocks.ProductSearchBlock currentContent, ProductSearchResults result)
        {
            var products = new List <EntryContentBase>();

            if (currentContent != null)
            {
                products = currentContent.PriorityProducts?.FilteredItems?.Select(x => x.GetContent() as EntryContentBase).ToList() ?? new List <EntryContentBase>();
            }

            products = products.Where(x => !result.ProductViewModels.Any(y => y.Code.Equals(x.Code)))
                       .Select(x => x)
                       .ToList();

            if (!products.Any())
            {
                return;
            }

            var market   = _currentMarket.GetCurrentMarket();
            var currency = _currencyService.GetCurrentCurrency();
            var ratings  = _reviewService.GetRatings(products.Select(x => x.Code)) ?? null;
            var newList  = result.ProductViewModels.ToList();

            newList.InsertRange(0, products.Select(document => document.GetProductTileViewModel(market, currency)));
            result.ProductViewModels = newList;
        }
Example #14
0
        public ActionResult Index()
        {
            var receiptPage = _contentRepository.Get <ReceiptPage>(_siteConfiguration.GetSettings().ReceiptPage);

            var            cartHelper     = new CartHelper(Cart.DefaultName);
            string         message        = "";
            OrderViewModel orderViewModel = null;

            if (cartHelper.Cart.OrderForms.Count > 0)
            {
                var orderNumber = cartHelper.Cart.GeneratePredictableOrderNumber();

                _log.Debug("Order placed - order number: " + orderNumber);

                cartHelper.Cart.OrderNumberMethod = CartExtensions.GeneratePredictableOrderNumber;

                var results = OrderGroupWorkflowManager.RunWorkflow(cartHelper.Cart, OrderGroupWorkflowManager.CartCheckOutWorkflowName);
                message = string.Join(", ", OrderGroupWorkflowManager.GetWarningsFromWorkflowResult(results));

                if (message.Length == 0)
                {
                    cartHelper.Cart.SaveAsPurchaseOrder();
                    cartHelper.Cart.Delete();
                    cartHelper.Cart.AcceptChanges();
                }

                var order = _orderService.GetOrderByTrackingNumber(orderNumber);

                // Must be run after order is complete,
                // This will release the order for shipment and
                // send the order receipt by email
                _paymentCompleteHandler.ProcessCompletedPayment(order, User.Identity);

                orderViewModel = new OrderViewModel(_currentMarket.GetCurrentMarket().DefaultCurrency.Format, order);
            }

            ReceiptViewModel model = new ReceiptViewModel(receiptPage);

            model.CheckoutMessage = message;
            model.Order           = orderViewModel;

            // Track successfull order in Google Analytics
            TrackAfterPayment(model);

            return(View("ReceiptPage", model));
        }
        private PaymentInfo GetPaymentInfo()
        {
            var paymentMethods = PaymentManager.GetPaymentMethods(_currentMarket.GetCurrentMarket().DefaultLanguage.ToString());
            var paymentInfo    = new PaymentInfo();

            foreach (var paymentMethodRow in paymentMethods.PaymentMethod.OrderBy(p => p.Ordering))
            {
                paymentInfo.PaymentMethods.Add(paymentMethodRow);
            }

            // if there is only 1 choice, select it as default
            if (paymentInfo.PaymentMethods.Count == 1)
            {
                paymentInfo.PaymentMethods.First().IsDefault = true;
            }
            return(paymentInfo);
        }
 protected IMarket GetMarketForOrder(PurchaseOrder purchaseOrder, IMarketService marketService, ICurrentMarket currentMarket)
 {
     if (purchaseOrder.MarketId != null && purchaseOrder.MarketId.Value != null)
     {
         return(marketService.GetMarket(purchaseOrder.MarketId));
     }
     return(currentMarket.GetCurrentMarket());
 }
Example #17
0
        //public ProductListViewModel GetProductListViewModel(WineSKUContent wineSkuContent)
        //{
        //    IProductListViewModelInitializer modelInitializer = wineSkuContent as IProductListViewModelInitializer;
        //    if (modelInitializer != null)
        //        return modelInitializer.Populate();
        //    return null;
        //}

        public ProductListViewModel GetProductListViewModel(IProductListViewModelInitializer productContent)
        {
            if (productContent != null)
            {
                return(productContent.Populate(_currentMarket.GetCurrentMarket()));
            }
            return(null);
        }
Example #18
0
        public ActionResult Index()
        {
            var receiptPage = _contentRepository.Get <ReceiptPage>(_siteConfiguration.GetSettings().ReceiptPage);

            var cartHelper = new CartHelper(Cart.DefaultName);

            if (cartHelper.IsEmpty && !PageEditing.PageIsInEditMode)
            {
                return(View("Error/_EmptyCartError"));
            }

            string         message        = "";
            OrderViewModel orderViewModel = null;

            if (cartHelper.Cart.OrderForms.Count > 0)
            {
                var orderNumber = cartHelper.Cart.GeneratePredictableOrderNumber();

                _log.Debug("Order placed - order number: " + orderNumber);

                cartHelper.Cart.OrderNumberMethod = CartExtensions.GeneratePredictableOrderNumber;

                System.Diagnostics.Trace.WriteLine("Running Workflow: " + OrderGroupWorkflowManager.CartCheckOutWorkflowName);
                var results = OrderGroupWorkflowManager.RunWorkflow(cartHelper.Cart, OrderGroupWorkflowManager.CartCheckOutWorkflowName);
                message = string.Join(", ", OrderGroupWorkflowManager.GetWarningsFromWorkflowResult(results));

                if (message.Length == 0)
                {
                    cartHelper.Cart.SaveAsPurchaseOrder();
                    cartHelper.Cart.Delete();
                    cartHelper.Cart.AcceptChanges();
                }

                System.Diagnostics.Trace.WriteLine("Loading Order: " + orderNumber);
                var order = _orderService.GetOrderByTrackingNumber(orderNumber);

                // Must be run after order is complete,
                // This might release the order for shipment and
                // send the order receipt by email
                System.Diagnostics.Trace.WriteLine(string.Format("Process Completed Payment: {0} (User: {1})", orderNumber, User.Identity.Name));
                _paymentCompleteHandler.ProcessCompletedPayment(order, User.Identity);

                orderViewModel = new OrderViewModel(_currentMarket.GetCurrentMarket().DefaultCurrency.Format, order);
            }

            ReceiptViewModel model = new ReceiptViewModel(receiptPage);

            model.CheckoutMessage = message;
            model.Order           = orderViewModel;

            // Track successfull order in Google Analytics
            TrackAfterPayment(model);

            _metricsLoggingService.Count("Purchase", "Purchase Success");
            _metricsLoggingService.Count("Payment", "Generic");

            return(View("ReceiptPage", model));
        }
        public List <StoreItemViewModel> GetEntryStoresViewModels(string entryCode)
        {
            var entry = _contentLoader.Get <EntryContentBase>(_referenceConverter.GetContentLink(entryCode, CatalogContentType.CatalogEntry));

            if (entry == null)
            {
                return(new List <StoreItemViewModel>());
            }

            var warehouses = _warehouseRepository.List().Where(x => x.IsActive && x.IsPickupLocation);
            var codes      = new List <string>();

            if (entry.ClassTypeId.Equals("Variation") || entry.ClassTypeId.Equals("Package"))
            {
                codes.Add(entryCode);
            }
            else if (entry.ClassTypeId.Equals("Product"))
            {
                var product = entry as ProductContent;
                if (product != null)
                {
                    codes.AddRange(product.GetVariants(_relationRepository).Select(x => _referenceConverter.GetCode(x)));
                }
            }

            if (!codes.Any())
            {
                return(new List <StoreItemViewModel>());
            }

            var records = _inventoryService.QueryByEntry(codes);

            if (!records.Any())
            {
                return(new List <StoreItemViewModel>());
            }

            var currentMarket = _currentMarket.GetCurrentMarket();

            return(warehouses
                   .Where(x => records.Any(y => y.WarehouseCode.Equals(x.Code) &&
                                           !string.IsNullOrEmpty(x.ContactInformation.CountryCode) && currentMarket.Countries.Any(z => x.ContactInformation.CountryCode.Equals(z))))
                   .Select(x => GetWarehoseViewModel(x, records.FirstOrDefault(y => y.WarehouseCode.Equals(x.Code))))
                   .ToList());
        }
Example #20
0
        private IEnumerable <ShippingMethodDto.ShippingMethodRow> GetShippingMethods()
        {
            ShippingMethodDto shippingMethodDto =
                ShippingManager.GetShippingMethodsByMarket(_currentMarket.GetCurrentMarket().MarketId.Value, false);

            return(shippingMethodDto.ShippingMethod.Rows.OfType <ShippingMethodDto.ShippingMethodRow>());
        }
 public DefaultVerifonePaymentService(ICurrentMarket currentMarket)
 {
     if (currentMarket == null)
     {
         throw new ArgumentNullException("currentMarket");
     }
     CurrentMarket = currentMarket.GetCurrentMarket();
     OrderContext  = OrderContext.Current;
 }
        public ReceiptViewModel BuildFor(DibsPaymentProcessingResult processingResult)
        {
            var receiptPage = _contentRepository.Get <ReceiptPage>(_siteConfiguration.GetSettings().ReceiptPage);
            var model       = new ReceiptViewModel(receiptPage);

            model.CheckoutMessage = processingResult.Message;
            model.Order           = new OrderViewModel(_currentMarket.GetCurrentMarket().DefaultCurrency.Format, processingResult.Order);
            return(model);
        }
        public IEnumerable <SortOrder> GetSortOrder()
        {
            var market   = _currentMarket.GetCurrentMarket();
            var currency = _currencyService.GetCurrentCurrency();

            return(new List <SortOrder>
            {
                new SortOrder {
                    Name = ProductSortOrder.PriceAsc, Key = IndexingHelper.GetPriceField(market.MarketId, currency), SortDirection = SortDirection.Ascending
                },
                new SortOrder {
                    Name = ProductSortOrder.Popularity, Key = "", SortDirection = SortDirection.Ascending
                },
                new SortOrder {
                    Name = ProductSortOrder.NewestFirst, Key = "created", SortDirection = SortDirection.Descending
                }
            });
        }
        private OrderViewModel CreateOrderViewModel(PurchaseOrderModel order)
        {
            var model = new OrderViewModel(_currentMarket.GetCurrentMarket().DefaultCurrency.Format, order);

            // TODO order-payment method
            model.PaymentMethod = order.ProviderId;

            return(model);
        }
Example #25
0
        public Currency GetCurrentCurrency()
        {
            var currentMaket   = _currentMarket.GetCurrentMarket();
            var currencyCookie = _cookieRepository.Get <CurrencyCookie>(CurrencyCookie.CookieName);

            if (currencyCookie == null)
            {
                return(currentMaket.DefaultCurrency);
            }
            var currency = currentMaket.Currencies.FirstOrDefault(x => x.CurrencyCode == currencyCookie.CurrencytId);

            if (currency != null)
            {
                return(currency);
            }

            return(currentMaket.DefaultCurrency);
        }
Example #26
0
        public decimal GetDefaultPrice(ContentReference reference)
        {
            var currentMarket     = _currentMarket.GetCurrentMarket();
            var priceDetailValues = _priceDetailService.List(reference);

            var price = priceDetailValues.FirstOrDefault(d => d.MarketId == currentMarket.MarketId);

            return(price?.UnitPrice.Amount ?? 0.0m);
        }
        public ICart LoadCart(string name)
        {
            var cart = _orderRepository.LoadCart <ICart>(_customerContext.GetCurrentUserGuid(), name, _currentMarket);

            if (cart != null)
            {
                SetCartCurrency(cart, _currentMarket.GetCurrentMarket().DefaultCurrency);

                var validationIssues = ValidateCart(cart);
                // After validate, if there is any change in cart, saving cart.
                if (validationIssues.Any())
                {
                    _orderRepository.Save(cart);
                }
            }

            return(cart);
        }
Example #28
0
        public decimal GetTheRightPrice(EntryContentBase CurrentContent)
        {
            IEnumerable <IPriceValue> priceValues;

            // need to check if anonymous or not ... so the EffectiveGroup does not bother
            // Anonymous... could use the DefaultPrice, but may miss the tiered price if set at Anonymous
            if (CustomerContext.Current.CurrentContact == null)
            {
                PriceFilter filter = new PriceFilter()
                {
                    Quantity        = 1M,
                    Currencies      = new Currency[] { _marketService.GetCurrentMarket().Currencies.FirstOrDefault() }, // only have one at the moment...
                    CustomerPricing = new CustomerPricing[]
                    {
                        new CustomerPricing(CustomerPricing.PriceType.AllCustomers, null),
                    },
                    ReturnCustomerPricing = false //
                };

                // The rest needed, CatKey, Market, TimeStamp
                CatalogKey catalogKey = new CatalogKey(CurrentContent.Code); // 3 overloads

                priceValues = _priceService.GetPrices(
                    currentMarket.Service.GetCurrentMarket().MarketId.Value, FrameworkContext.Current.CurrentDateTime, catalogKey, filter);
            }
            else
            {
                // Logged on
                // no custom PriceTypes... yet
                PriceFilter filter = new PriceFilter()
                {
                    Quantity        = 1M,
                    Currencies      = new Currency[] { _marketService.GetCurrentMarket().Currencies.FirstOrDefault() }, // only have one at the moment...
                    CustomerPricing = new CustomerPricing[]
                    {
                        new CustomerPricing(CustomerPricing.PriceType.AllCustomers, null),
                        new CustomerPricing(CustomerPricing.PriceType.PriceGroup, CustomerContext.Current.CurrentContact.EffectiveCustomerGroup), // or several...
                        new CustomerPricing(CustomerPricing.PriceType.UserName, CustomerContext.Current.CurrentContact.FirstName)
                    },
                    ReturnCustomerPricing = false //
                                                  // ... if true; gets all that applies
                };

                // The rest needed, CatKey, Market, TimeStamp
                CatalogKey catalogKey = new CatalogKey(new Guid(CurrentContent.ApplicationId), CurrentContent.Code); // 3 overloads

                priceValues = _priceService.GetPrices(
                    currentMarket.Service.GetCurrentMarket().MarketId.Value, FrameworkContext.Current.CurrentDateTime, catalogKey, filter);
            }

            if (priceValues.Count() > 0)
            {
                return(priceValues.ToList().OrderBy(x => x.UnitPrice.Amount).FirstOrDefault().UnitPrice.Amount);
            }
            else
            {
                return(0); // should not actually, could use default price... it's a demo
            }
        }
Example #29
0
        public ActionResult Initiate()
        {
            var configuration = _configurationLoader.GetConfiguration(_currentMarket.GetCurrentMarket().MarketId);
            var vippsApi      = _vippsServiceApiFactory.Create(configuration);
            var viewModel     = new VippsTestViewModel();

            try
            {
                var orderId = OrderNumberHelper.GenerateOrderNumber();
                var initiatePaymentRequest = new InitiatePaymentRequest
                {
                    CustomerInfo = new CustomerInfo(),
                    MerchantInfo = new MerchantInfo
                    {
                        CallbackPrefix        = EnsureCorrectUrl(configuration.SiteBaseUrl, "vippscallback/"),
                        ConsentRemovalPrefix  = EnsureCorrectUrl(configuration.SiteBaseUrl, "vippscallback/"),
                        FallBack              = EnsureCorrectUrl(configuration.SiteBaseUrl, $"vippstest/fallback?orderId={orderId}"),
                        ShippingDetailsPrefix = EnsureCorrectUrl(configuration.SiteBaseUrl, "vippscallback/"),
                        IsApp = false,
                        MerchantSerialNumber = Convert.ToInt32(configuration.MerchantSerialNumber),
                        PaymentType          = VippsConstants.RegularCheckout
                    },
                    Transaction = new Transaction
                    {
                        Amount          = 20000,
                        OrderId         = orderId,
                        TimeStamp       = DateTime.Now,
                        TransactionText = "test"
                    }
                };

                var result = vippsApi.Initiate(initiatePaymentRequest).Result;

                return(Redirect(result.Url));
            }

            catch (Exception ex)
            {
                viewModel.Message = $"Initiate payment failed. Exception: {ex.Message} {ex.InnerException} {ex.StackTrace}";
                return(View("Index", viewModel));
            }
        }
Example #30
0
        public IEnumerable <CartItem> GetCartItems()
        {
            if (CartHelper.IsEmpty)
            {
                return(Enumerable.Empty <CartItem>());
            }

            var cartItems = new List <CartItem>();
            var lineItems = CartHelper.Cart.GetAllLineItems();

            // In order to show the images for the items in the cart, we need to load the variants
            var variants = _contentLoader.GetItems(lineItems.Select(x => _referenceConverter.GetContentLink(x.Code)),
                                                   _preferredCulture).OfType <VariationContent>();

            var marketId = _currentMarket.GetCurrentMarket().MarketId;
            var currency = _currencyService.GetCurrentCurrency();

            foreach (var lineItem in lineItems)
            {
                VariationContent variant = variants.FirstOrDefault(x => x.Code == lineItem.Code);
                ProductContent   product = _contentLoader.Get <ProductContent>(variant.GetParentProducts().FirstOrDefault());
                CartItem         item    = new CartItem
                {
                    Code          = lineItem.Code,
                    DisplayName   = lineItem.DisplayName,
                    ImageUrl      = variant.GetAssets <IContentImage>(_contentLoader, _urlResolver).FirstOrDefault() ?? "",
                    ExtendedPrice = GetExtendedPrice(lineItem, marketId, currency),
                    PlacedPrice   = lineItem.ToMoney(lineItem.PlacedPrice),
                    DiscountPrice = lineItem.ToMoney(currency.Round(((lineItem.PlacedPrice * lineItem.Quantity) - lineItem.Discounts.Cast <LineItemDiscount>().Sum(x => x.DiscountValue)) / lineItem.Quantity)),
                    Quantity      = lineItem.Quantity,
                    Url           = lineItem.GetUrl(),
                    Variant       = variant,
                    Discounts     = lineItem.Discounts.Cast <LineItemDiscount>().Select(x => new OrderDiscountModel
                    {
                        Discount    = new Money(x.DiscountAmount, new Currency(CartHelper.Cart.BillingCurrency)),
                        Displayname = x.DisplayMessage
                    }),
                    IsAvailable = _pricingService.GetCurrentPrice(variant.Code).HasValue
                };

                if (product is FashionProduct)
                {
                    var fashionProduct = (FashionProduct)product;
                    var fashionVariant = (FashionVariant)variant;
                    item.Brand = fashionProduct.Brand;
                    var variations = _productService.GetVariations(fashionProduct);
                    item.AvailableSizes = variations.Where(x => x.Color == fashionVariant.Color).Select(x => x.Size);
                }

                cartItems.Add(item);
            }

            return(cartItems);
        }
 protected IMarket GetMarketForOrder(PurchaseOrderModel purchaseOrder, IMarketService marketService, ICurrentMarket currentMarket)
 {
     if (purchaseOrder.MarketId != null && purchaseOrder.MarketId.Value != null)
     {
         return marketService.GetMarket(purchaseOrder.MarketId);
     }
     return currentMarket.GetCurrentMarket();
 }