public ActionResult Index(CheckoutPage currentPage, int?isGuest)
        {
            if (CartIsNullOrEmpty())
            {
                return(View("EmptyCart", new CheckoutMethodViewModel(currentPage)));
            }

            if (!Request.IsAuthenticated && (!isGuest.HasValue || isGuest.Value != 1))
            {
                return(RedirectToAction("CheckoutMethod", new { node = currentPage.ContentLink }));
            }

            if (CartWithValidationIssues.Cart.GetFirstShipment().ShippingMethodId == Guid.Empty)
            {
                _checkoutService.UpdateShippingMethods(CartWithValidationIssues.Cart, _shipmentViewModelFactory.CreateShipmentsViewModel(CartWithValidationIssues.Cart).ToList());
                _orderRepository.Save(CartWithValidationIssues.Cart);
            }

            var viewModel = CreateCheckoutViewModel(currentPage);

            viewModel.OrderSummary   = _orderSummaryViewModelFactory.CreateOrderSummaryViewModel(CartWithValidationIssues.Cart);
            viewModel.BillingAddress = _addressBookService.ConvertToModel(CartWithValidationIssues.Cart.GetFirstForm()?.Payments.FirstOrDefault()?.BillingAddress);
            _addressBookService.LoadAddress(viewModel.BillingAddress);

            if (viewModel.Shipments.Count == 1)
            {
                viewModel.BillingAddressType = 2;
            }
            else if (Request.IsAuthenticated)
            {
                viewModel.BillingAddressType = 1;
            }
            else
            {
                viewModel.BillingAddressType = 0;
            }

            var shippingAddressType = Request.IsAuthenticated ? 1 : 0;

            for (var i = 0; i < viewModel.Shipments.Count; i++)
            {
                if (string.IsNullOrEmpty(viewModel.Shipments[i].Address.AddressId))
                {
                    viewModel.Shipments[i].ShippingAddressType = shippingAddressType;
                }
                else
                {
                    viewModel.Shipments[i].ShippingAddressType = 1;
                }
            }

            if (TempData[Constant.ErrorMessages] != null)
            {
                ViewBag.ErrorMessages = (string)TempData[Constant.ErrorMessages];
            }

            return(View("Checkout", viewModel));
        }
        public IActionResult Index(SubscriptionDetailPage currentPage, int paymentPlanId = 0)
        {
            var paymentDetail = OrderContext.Current.Get <PaymentPlan>(paymentPlanId);

            var viewModel = new SubscriptionDetailViewModel(currentPage)
            {
                CurrentContent = currentPage,
                PaymentPlan    = paymentDetail
            };

            //Get order that created by
            var purchaseOrders = OrderContext.Current.LoadByCustomerId <PurchaseOrder>(PrincipalInfo.CurrentPrincipal.GetContactId())
                                 .OrderByDescending(x => x.Created)
                                 .Where(x => x.ParentOrderGroupId.Equals(paymentPlanId))
                                 .ToList();

            var orders = new OrderHistoryViewModel
            {
                Orders = new List <OrderViewModel>()
            };

            foreach (var purchaseOrder in purchaseOrders)
            {
                // Assume there is only one form per purchase.
                var form           = purchaseOrder.GetFirstForm();
                var billingAddress = new AddressModel();
                var payment        = form.Payments.FirstOrDefault();
                if (payment != null)
                {
                    billingAddress = _addressBookService.ConvertToModel(payment.BillingAddress);
                }
                var orderViewModel = new OrderViewModel
                {
                    PurchaseOrder = purchaseOrder,
                    Items         = form.GetAllLineItems().Select(lineItem => new OrderHistoryItemViewModel
                    {
                        LineItem = lineItem,
                    }).GroupBy(x => x.LineItem.Code).Select(group => group.First()),
                    BillingAddress    = billingAddress,
                    ShippingAddresses = new List <AddressModel>()
                };

                foreach (var orderAddress in purchaseOrder.OrderForms.Cast <IOrderForm>().SelectMany(x => x.Shipments).Select(s => s.ShippingAddress))
                {
                    var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                    orderViewModel.ShippingAddresses.Add(shippingAddress);
                }

                orders.Orders.Add(orderViewModel);
            }
            orders.OrderDetailsPageUrl =
                UrlResolver.Current.GetUrl(_settingsService.GetSiteSettings <ReferencePageSettings>()?.OrderDetailsPage ?? ContentReference.StartPage);

            viewModel.Orders = orders;

            return(View(viewModel));
        }
Beispiel #3
0
        public ActionResult Index(OrderHistoryPage currentPage, int?page, int?size)
        {
            var pageNum        = page ?? 1;
            var pageSize       = size ?? 10;
            var orders         = _orderRepository.Load <IPurchaseOrder>(PrincipalInfo.CurrentPrincipal.GetContactId(), _cartService.DefaultCartName);
            var purchaseOrders = orders
                                 .OrderByDescending(x => x.Created)
                                 .Skip((pageNum - 1) * pageSize)
                                 .Take(pageSize)
                                 .ToList();

            var viewModel = new OrderHistoryViewModel(currentPage)
            {
                CurrentContent = currentPage,
                Orders         = new List <OrderViewModel>()
            };

            foreach (var purchaseOrder in purchaseOrders)
            {
                // Assume there is only one form per purchase.
                var form           = purchaseOrder.GetFirstForm();
                var billingAddress = new AddressModel();
                var payment        = form.Payments.FirstOrDefault();
                if (payment != null)
                {
                    billingAddress = _addressBookService.ConvertToModel(payment.BillingAddress);
                }
                var orderViewModel = new OrderViewModel
                {
                    PurchaseOrder = purchaseOrder,
                    Items         = form.GetAllLineItems().Select(lineItem => new OrderHistoryItemViewModel
                    {
                        LineItem = lineItem,
                    }).GroupBy(x => x.LineItem.Code).Select(group => group.First()),
                    BillingAddress    = billingAddress,
                    ShippingAddresses = new List <AddressModel>()
                };

                foreach (var orderAddress in purchaseOrder.Forms.SelectMany(x => x.Shipments).Select(s => s.ShippingAddress))
                {
                    var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                    orderViewModel.ShippingAddresses.Add(shippingAddress);
                }

                viewModel.Orders.Add(orderViewModel);
            }
            viewModel.OrderDetailsPageUrl =
                UrlResolver.Current.GetUrl(_contentLoader.Get <CommerceHomePage>(ContentReference.StartPage).OrderDetailsPage);

            viewModel.PagingInfo.PageNumber  = pageNum;
            viewModel.PagingInfo.TotalRecord = orders.Count();
            viewModel.PagingInfo.PageSize    = pageSize;
            viewModel.OrderHistoryUrl        = currentPage.StaticLinkURL;
            return(View(viewModel));
        }
        public ActionResult Index(OrderHistoryPage currentPage)
        {
            var storeAppPurchaseOrders = _orderRepository.Load <IPurchaseOrder>(_customerContext.CurrentContactId, "StoreApp")
                                         .OrderByDescending(x => x.Created)
                                         .ToList();

            var purchaseOrders = _orderRepository.Load <IPurchaseOrder>(_customerContext.CurrentContactId)
                                 .OrderByDescending(x => x.Created)
                                 .ToList();

            var viewModel = new OrderHistoryViewModel
            {
                CurrentPage = currentPage,
                Orders      = new List <OrderViewModel>()
            };

            foreach (var purchaseOrder in purchaseOrders.Union(storeAppPurchaseOrders).OrderByDescending(x => x.Created))
            {
                // Assume there is only one form per purchase.
                var form           = purchaseOrder.GetFirstForm();
                var billingAddress = new AddressModel();
                var payment        = form.Payments.FirstOrDefault();
                if (payment != null)
                {
                    billingAddress = _addressBookService.ConvertToModel(payment.BillingAddress);
                }
                var orderViewModel = new OrderViewModel
                {
                    PurchaseOrder = purchaseOrder,
                    Items         = form.GetAllLineItems().Select(lineItem => new OrderHistoryItemViewModel
                    {
                        LineItem = lineItem,
                    }).GroupBy(x => x.LineItem.Code).Select(group => group.First()),
                    BillingAddress    = billingAddress,
                    ShippingAddresses = new List <AddressModel>()
                };

                foreach (var orderAddress in purchaseOrder.Forms.SelectMany(x => x.Shipments).Select(s => s.ShippingAddress))
                {
                    var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                    orderViewModel.ShippingAddresses.Add(shippingAddress);
                }

                viewModel.Orders.Add(orderViewModel);
            }

            return(View(viewModel));
        }
        public virtual IEnumerable <ShipmentViewModel> CreateShipmentsViewModel(ICart cart)
        {
            foreach (var shipment in cart.GetFirstForm().Shipments)
            {
                var shipmentModel = new ShipmentViewModel
                {
                    ShipmentId      = shipment.ShipmentId,
                    CartItems       = new List <CartItemViewModel>(),
                    Address         = _addressBookService.ConvertToModel(shipment.ShippingAddress),
                    ShippingMethods = CreateShippingMethodViewModels(cart.Market, cart.Currency, shipment)
                };

                shipmentModel.ShippingMethodId = shipment.ShippingMethodId == Guid.Empty ? shipmentModel.ShippingMethods.First().Id : shipment.ShippingMethodId;

                var variants = _contentLoader.GetItems(shipment.LineItems.Select(x => _referenceConverter.GetContentLink(x.Code)),
                                                       _preferredCulture).OfType <VariationContent>();

                foreach (var lineItem in shipment.LineItems)
                {
                    var variant = variants.Single(x => x.Code == lineItem.Code);

                    var productLink = variant.GetParentProducts(_relationRepository).FirstOrDefault();
                    if (ContentReference.IsNullOrEmpty(productLink))
                    {
                        continue;
                    }

                    shipmentModel.CartItems.Add(_cartItemViewModelFactory.CreateCartItemViewModel(cart, lineItem, variant));
                }

                yield return(shipmentModel);
            }
        }
        public virtual IEnumerable <ShipmentViewModel> CreateShipmentsViewModel(ICart cart)
        {
            foreach (var shipment in cart.GetFirstForm().Shipments)
            {
                var shipmentModel = new ShipmentViewModel
                {
                    ShipmentId      = shipment.ShipmentId,
                    CartItems       = new List <CartItemViewModel>(),
                    Address         = _addressBookService.ConvertToModel(shipment.ShippingAddress),
                    ShippingMethods = CreateShippingMethodViewModels(cart.MarketId, cart.Currency, shipment)
                };

                shipmentModel.ShippingMethodId = shipment.ShippingMethodId == Guid.Empty && shipmentModel.ShippingMethods.Any() ?
                                                 shipmentModel.ShippingMethods.First().Id
                                               : shipment.ShippingMethodId;

                var entries = _catalogContentService.GetItems <EntryContentBase>(shipment.LineItems.Select(x => x.Code));

                foreach (var lineItem in shipment.LineItems)
                {
                    var entry = entries.FirstOrDefault(x => x.Code == lineItem.Code);
                    if (entry == null)
                    {
                        //Entry was deleted, skip processing.
                        continue;
                    }

                    shipmentModel.CartItems.Add(_cartItemViewModelFactory.CreateCartItemViewModel(cart, lineItem, entry));
                }

                yield return(shipmentModel);
            }
        }
        private IList <AddressModel> GetAvailableShippingAddresses(ICart cart)
        {
            var addresses = _addressBookService.List();

            foreach (var address in addresses.Where(x => string.IsNullOrEmpty(x.Name)))
            {
                address.Name = _localizationService.GetString("/Shared/Address/DefaultAddressName");
            }
            if (cart != null)
            {
                foreach (var shipment in cart.GetFirstForm().Shipments)
                {
                    if (shipment.ShippingAddress == null)
                    {
                        continue;
                    }
                    var shipmentAddress = _addressBookService.ConvertToModel(shipment.ShippingAddress);
                    var savedAddress    = addresses.FirstOrDefault(x => x.IsEqual(shipmentAddress));
                    if (savedAddress != null)
                    {
                        continue;
                    }
                    if (addresses.Any(x => x.AddressId.Equals(shipmentAddress.AddressId)))
                    {
                        shipmentAddress.AddressId = shipmentAddress.Name = Guid.NewGuid().ToString();
                    }
                    addresses.Add(shipmentAddress);
                }
            }
            return(addresses);
        }
Beispiel #8
0
        private OrderSearchBlockViewModel CreateViewModel(OrderSearchBlock currentBlock, OrderFilter filter)
        {
            var purchaseOrders = OrderContext.Current.LoadByCustomerId <PurchaseOrder>(PrincipalInfo.CurrentPrincipal.GetContactId())
                                 .OrderByDescending(x => x.Created)
                                 .ToList();

            var viewModel = new OrderSearchBlockViewModel(currentBlock)
            {
                CurrentCustomer = _customerService.GetCurrentContact(),
                Filter          = filter
            };

            foreach (var purchaseOrder in purchaseOrders)
            {
                //Assume there is only one form per purchase.
                var form           = purchaseOrder.GetFirstForm();
                var billingAddress = form.Payments.FirstOrDefault() != null?form.Payments.First().BillingAddress : new OrderAddress();

                var orderViewModel = new OrderViewModel
                {
                    PurchaseOrder = purchaseOrder,
                    Items         = form.GetAllLineItems().Select(lineItem => new OrderHistoryItemViewModel
                    {
                        LineItem = lineItem,
                    }).GroupBy(x => x.LineItem.Code).Select(group => group.First()),
                    BillingAddress    = _addressBookService.ConvertToModel(billingAddress),
                    ShippingAddresses = new List <AddressModel>()
                };

                foreach (var orderAddress in form.Shipments.Select(s => s.ShippingAddress))
                {
                    var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                    orderViewModel.ShippingAddresses.Add(shippingAddress);
                    orderViewModel.OrderGroupId = purchaseOrder.OrderGroupId;
                }

                orderViewModel.OrderTotal    = _orderGroupCalculator.GetTotal(purchaseOrder);
                orderViewModel.OrderPayments = form.Payments.ToList();

                if (FilterOrder(filter, orderViewModel))
                {
                    viewModel.Orders.Add(orderViewModel);
                }
            }

            return(viewModel);
        }
        private List <OrderViewModel> GetOrderHistoryViewModels()
        {
            var purchaseOrders = _orderRepository.Load <IPurchaseOrder>(PrincipalInfo.CurrentPrincipal.GetContactId(), _cartService.DefaultCartName)
                                 .OrderByDescending(x => x.Created).ToList();

            if (purchaseOrders.Count > 3)
            {
                purchaseOrders = purchaseOrders.Take(3).ToList();
            }


            var viewModel = new List <OrderViewModel>();

            foreach (var purchaseOrder in purchaseOrders)
            {
                // Assume there is only one form per purchase.
                var form           = purchaseOrder.GetFirstForm();
                var billingAddress = new AddressModel();
                var payment        = form.Payments.FirstOrDefault();
                if (payment != null)
                {
                    billingAddress = _addressBookService.ConvertToModel(payment.BillingAddress);
                }
                var orderViewModel = new OrderViewModel
                {
                    PurchaseOrder = purchaseOrder,
                    Items         = form.GetAllLineItems().Select(lineItem => new OrderHistoryItemViewModel
                    {
                        LineItem = lineItem,
                    }).GroupBy(x => x.LineItem.Code).Select(group => group.First()),
                    BillingAddress    = billingAddress,
                    ShippingAddresses = new List <AddressModel>(),
                    OrderGroupId      = purchaseOrder.OrderLink.OrderGroupId
                };

                foreach (var orderAddress in purchaseOrder.Forms.SelectMany(x => x.Shipments).Select(s => s.ShippingAddress))
                {
                    var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                    orderViewModel.ShippingAddresses.Add(shippingAddress);
                }

                viewModel.Add(orderViewModel);
            }

            return(viewModel);
        }
Beispiel #10
0
        public ActionResult BillingInformation(CheckoutPage currentPage, int?addressType)
        {
            var viewModel = CreateCheckoutViewModel(currentPage);

            viewModel.OrderSummary   = _orderSummaryViewModelFactory.CreateOrderSummaryViewModel(CartWithValidationIssues.Cart);
            viewModel.BillingAddress = _addressBookService.ConvertToModel(CartWithValidationIssues.Cart.GetFirstForm()?.Payments.FirstOrDefault()?.BillingAddress);
            _addressBookService.LoadAddress(viewModel.BillingAddress);
            if (addressType == null && Request.IsAuthenticated)
            {
                viewModel.AddressType = 1;
            }
            else if (addressType == null)
            {
                viewModel.AddressType = 0;
            }
            else
            {
                viewModel.AddressType = addressType.Value;
            }
            return(View("BillingInformation", viewModel));
        }
Beispiel #11
0
        public virtual IEnumerable <ShipmentViewModel> CreateShipmentsViewModel(ICart cart)
        {
            var preferredCulture = _languageResolver.GetPreferredCulture();

            foreach (var shipment in cart.GetFirstForm().Shipments)
            {
                var shipmentModel = new ShipmentViewModel
                {
                    ShipmentId      = shipment.ShipmentId,
                    CartItems       = new List <CartItemViewModel>(),
                    Address         = _addressBookService.ConvertToModel(shipment.ShippingAddress),
                    ShippingMethods = CreateShippingMethodViewModels(cart.MarketId, cart.Currency, shipment)
                };


                var currentShippingMethod = shipmentModel.ShippingMethods.FirstOrDefault();
                if (shipment.ShippingMethodId != Guid.Empty)
                {
                    currentShippingMethod = shipmentModel.ShippingMethods.FirstOrDefault(x => x.Id == shipment.ShippingMethodId);
                }
                else
                {
                    currentShippingMethod = shipmentModel.ShippingMethods.FirstOrDefault();
                }

                shipmentModel.ShippingMethodId           = currentShippingMethod?.Id ?? shipment.ShippingMethodId;
                shipmentModel.CurrentShippingMethodName  = currentShippingMethod?.DisplayName ?? "In store pickup";
                shipmentModel.CurrentShippingMethodPrice = currentShippingMethod?.Price ?? new Money(0, cart.Currency);
                shipmentModel.WarehouseCode = shipment.WarehouseCode;

                var entries = _contentLoader.GetItems(shipment.LineItems.Select(x => _referenceConverter.GetContentLink(x.Code)),
                                                      preferredCulture).OfType <EntryContentBase>();

                foreach (var lineItem in shipment.LineItems)
                {
                    var entry = entries.FirstOrDefault(x => x.Code == lineItem.Code);
                    if (entry == null)
                    {
                        //Entry was deleted, skip processing.
                        continue;
                    }

                    shipmentModel.CartItems.Add(_cartItemViewModelFactory.CreateCartItemViewModel(cart, lineItem, entry));
                }

                yield return(shipmentModel);
            }
        }
Beispiel #12
0
        public override IViewComponentResult Invoke(OrderHistoryBlock currentBlock)
        {
            var purchaseOrders = OrderContext.Current.LoadByCustomerId <PurchaseOrder>(PrincipalInfo.CurrentPrincipal.GetContactId())
                                 .OrderByDescending(x => x.Created)
                                 .ToList();

            var viewModel = new OrderHistoryViewModel
            {
                CurrentBlock    = currentBlock,
                Orders          = new List <OrderViewModel>(),
                CurrentCustomer = _customerService.GetCurrentContact()
            };

            foreach (var purchaseOrder in purchaseOrders)
            {
                //Assume there is only one form per purchase.
                var form = purchaseOrder.GetFirstForm();

                var billingAddress = form.Payments.FirstOrDefault() != null?form.Payments.First().BillingAddress : new OrderAddress();

                var orderViewModel = new OrderViewModel
                {
                    PurchaseOrder = purchaseOrder,
                    Items         = form.GetAllLineItems().Select(lineItem => new OrderHistoryItemViewModel
                    {
                        LineItem = lineItem,
                    }).GroupBy(x => x.LineItem.Code).Select(group => group.First()),
                    BillingAddress    = _addressBookService.ConvertToModel(billingAddress),
                    ShippingAddresses = new List <AddressModel>()
                };

                foreach (var orderAddress in form.Shipments.Select(s => s.ShippingAddress))
                {
                    var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                    orderViewModel.ShippingAddresses.Add(shippingAddress);
                    orderViewModel.OrderGroupId = purchaseOrder.OrderGroupId;
                }

                if (!string.IsNullOrEmpty(purchaseOrder[Constant.Quote.QuoteStatus]?.ToString()) &&
                    (purchaseOrder.Status == OrderStatus.InProgress.ToString() || purchaseOrder.Status == OrderStatus.OnHold.ToString()))
                {
                    orderViewModel.QuoteStatus = purchaseOrder[Constant.Quote.QuoteStatus].ToString();
                    DateTime.TryParse(purchaseOrder[Constant.Quote.QuoteExpireDate].ToString(), out var quoteExpireDate);
                    if (DateTime.Compare(DateTime.Now, quoteExpireDate) > 0)
                    {
                        orderViewModel.QuoteStatus = Constant.Quote.QuoteExpired;
                        try
                        {
                            // Update order quote status to expired
                            purchaseOrder[Constant.Quote.QuoteStatus] = Constant.Quote.QuoteExpired;
                            _orderRepository.Save(purchaseOrder);
                        }
                        catch (Exception ex)
                        {
                            LogManager.GetLogger(GetType()).Error("Failed to update order status to Quote Expired.", ex.StackTrace);
                        }
                    }
                }

                viewModel.Orders.Add(orderViewModel);
            }

            viewModel.OrderDetailsPageUrl =
                UrlResolver.Current.GetUrl(_settingsService.GetSiteSettings <ReferencePageSettings>()?.OrderDetailsPage ?? ContentReference.StartPage);

            return(View(viewModel));
        }
Beispiel #13
0
        public ActionResult Index(OrderHistoryPage currentPage, OrderFilter filter, int?page, int?size, int?isPaging)
        {
            if (isPaging.HasValue)
            {
                filter = GetFilter();
            }
            else
            {
                SetCookieFilter(filter);
            }
            var pageNum        = page ?? 1;
            var pageSize       = size ?? 10;
            var orders         = _orderRepository.Load <IPurchaseOrder>(PrincipalInfo.CurrentPrincipal.GetContactId(), _cartService.DefaultCartName);
            var purchaseOrders = FilterOrders(orders, filter)
                                 .OrderByDescending(x => x.Created)
                                 .Skip((pageNum - 1) * pageSize)
                                 .Take(pageSize)
                                 .ToList();

            var viewModel = new OrderHistoryViewModel(currentPage)
            {
                CurrentContent = currentPage,
                Orders         = new List <OrderViewModel>(),
            };

            OrderFilter.LoadDefault(filter, _paymentMethodViewModelFactory);
            LoadAvailableAddresses(filter);

            foreach (var purchaseOrder in purchaseOrders)
            {
                // Assume there is only one form per purchase.
                var form           = purchaseOrder.GetFirstForm();
                var billingAddress = new AddressModel();
                var payment        = form.Payments.FirstOrDefault();
                if (payment != null)
                {
                    billingAddress = _addressBookService.ConvertToModel(payment.BillingAddress);
                }
                var orderViewModel = new OrderViewModel
                {
                    PurchaseOrder = purchaseOrder,
                    Items         = form.GetAllLineItems().Select(lineItem => new OrderHistoryItemViewModel
                    {
                        LineItem = lineItem,
                    }).GroupBy(x => x.LineItem.Code).Select(group => group.First()),
                    BillingAddress    = billingAddress,
                    ShippingAddresses = new List <AddressModel>()
                };

                foreach (var orderAddress in purchaseOrder.Forms.SelectMany(x => x.Shipments).Select(s => s.ShippingAddress))
                {
                    var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                    orderViewModel.ShippingAddresses.Add(shippingAddress);
                }

                viewModel.Orders.Add(orderViewModel);
            }
            viewModel.OrderDetailsPageUrl =
                UrlResolver.Current.GetUrl(_settingsService.GetSiteSettings <ReferencePageSettings>()?.OrderDetailsPage ?? ContentReference.StartPage);

            viewModel.PagingInfo.PageNumber  = pageNum;
            viewModel.PagingInfo.TotalRecord = purchaseOrders.Count();
            viewModel.PagingInfo.PageSize    = pageSize;
            viewModel.OrderHistoryUrl        = Request.Url.PathAndQuery;
            viewModel.Filter = filter;
            return(View(viewModel));
        }
Beispiel #14
0
        private OrderDetailsViewModel GetModel(int orderGroupId, OrderDetailsPage currentPage)
        {
            var orderViewModel = new OrderDetailsViewModel
            {
                CurrentContent  = currentPage,
                CurrentCustomer = _customerService.GetCurrentContactViewModel()
            };

            var purchaseOrder = OrderContext.Current.Get <PurchaseOrder>(orderGroupId);

            if (purchaseOrder == null)
            {
                return(orderViewModel);
            }

            var currentContact      = _customerService.GetCurrentContact();
            var currentOrganization = currentContact.FoundationOrganization;

            if (currentOrganization != null)
            {
                var usersOrganization = _customerService.GetContactsForOrganization(currentOrganization);
                if (!usersOrganization.Where(x => x.ContactId == purchaseOrder.CustomerId).Any())
                {
                    return(orderViewModel);
                }
            }
            else
            {
                if (currentContact.ContactId != purchaseOrder.CustomerId)
                {
                    return(orderViewModel);
                }
            }

            // Assume there is only one form per purchase.
            var form = purchaseOrder.GetFirstForm();

            var billingAddress = form.Payments.FirstOrDefault() != null
                ? form.Payments.First().BillingAddress
                : new OrderAddress();

            orderViewModel.PurchaseOrder = purchaseOrder;

            orderViewModel.Items = form.Shipments.SelectMany(shipment => shipment.LineItems.Select(lineitem => new OrderDetailsItemViewModel
            {
                LineItem      = lineitem,
                Shipment      = shipment,
                PurchaseOrder = orderViewModel.PurchaseOrder as PurchaseOrder,
            }
                                                                                                   ));

            orderViewModel.BillingAddress    = _addressBookService.ConvertToModel(billingAddress);
            orderViewModel.ShippingAddresses = new List <AddressModel>();

            foreach (var orderAddress in form.Shipments.Select(s => s.ShippingAddress))
            {
                var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                orderViewModel.ShippingAddresses.Add(shippingAddress);
                orderViewModel.OrderGroupId = purchaseOrder.OrderGroupId;
            }
            if (purchaseOrder[Constant.Quote.QuoteExpireDate] != null &&
                !string.IsNullOrEmpty(purchaseOrder[Constant.Quote.QuoteExpireDate].ToString()))
            {
                DateTime.TryParse(purchaseOrder[Constant.Quote.QuoteExpireDate].ToString(), out var quoteExpireDate);
                if (DateTime.Compare(DateTime.Now, quoteExpireDate) > 0)
                {
                    orderViewModel.QuoteStatus = Constant.Quote.QuoteExpired;
                    try
                    {
                        // Update order quote status to expired
                        purchaseOrder[Constant.Quote.QuoteStatus] = Constant.Quote.QuoteExpired;
                        _orderRepository.Save(purchaseOrder);
                    }
                    catch (Exception ex)
                    {
                        LogManager.GetLogger(GetType()).Error("Failed to update order status to Quote Expired.", ex.StackTrace);
                    }
                }
            }

            if (!string.IsNullOrEmpty(purchaseOrder["QuoteStatus"]?.ToString()) &&
                (purchaseOrder.Status == OrderStatus.InProgress.ToString() ||
                 purchaseOrder.Status == OrderStatus.OnHold.ToString()))
            {
                orderViewModel.QuoteStatus = purchaseOrder["QuoteStatus"].ToString();
            }

            orderViewModel.BudgetPayment = _ordersService.GetOrderBudgetPayment(purchaseOrder);
            return(orderViewModel);
        }
Beispiel #15
0
        //[OutputCache(Duration = 0, NoStore = true)]
        public IActionResult Index(CheckoutPage currentPage, int?isGuest)
        {
            if (CartIsNullOrEmpty())
            {
                return(View("EmptyCart", new CheckoutMethodViewModel(currentPage)));
            }

            if (!HttpContext.User.Identity.IsAuthenticated && (!isGuest.HasValue || isGuest.Value != 1))
            {
                return(RedirectToAction("CheckoutMethod", new { node = currentPage.ContentLink }));
            }

            if (CartWithValidationIssues.Cart.GetFirstShipment().ShippingMethodId == Guid.Empty)
            {
                _checkoutService.UpdateShippingMethods(CartWithValidationIssues.Cart, _shipmentViewModelFactory.CreateShipmentsViewModel(CartWithValidationIssues.Cart).ToList());
                _orderRepository.Save(CartWithValidationIssues.Cart);
            }

            var viewModel = CreateCheckoutViewModel(currentPage);

            viewModel.OrderSummary   = _orderSummaryViewModelFactory.CreateOrderSummaryViewModel(CartWithValidationIssues.Cart);
            viewModel.BillingAddress = _addressBookService.ConvertToModel(CartWithValidationIssues.Cart.GetFirstForm()?.Payments.FirstOrDefault()?.BillingAddress);
            _addressBookService.LoadAddress(viewModel.BillingAddress);

            var shipmentBillingTypes = TempData["ShipmentBillingTypes"] as List <KeyValuePair <string, int> >;

            if (shipmentBillingTypes != null && shipmentBillingTypes.Any(x => x.Key == "Billing"))
            {
                viewModel.BillingAddressType = 0;
            }
            else
            {
                if (viewModel.Shipments.Count == 1)
                {
                    viewModel.BillingAddressType = 2;
                }
                else if (HttpContext.User.Identity.IsAuthenticated)
                {
                    viewModel.BillingAddressType = 1;
                }
                else
                {
                    viewModel.BillingAddressType = 0;
                }
            }

            var shippingAddressType = HttpContext.User.Identity.IsAuthenticated ? 1 : 0;

            for (var i = 0; i < viewModel.Shipments.Count; i++)
            {
                if (shipmentBillingTypes != null && shipmentBillingTypes.Where(x => x.Key == "Shipment").Any(x => x.Value == i))
                {
                    viewModel.Shipments[i].ShippingAddressType = 0;
                }
                else
                {
                    if (string.IsNullOrEmpty(viewModel.Shipments[i].Address.AddressId))
                    {
                        viewModel.Shipments[i].ShippingAddressType = shippingAddressType;
                    }
                    else
                    {
                        viewModel.Shipments[i].ShippingAddressType = 1;
                    }
                }
            }

            if (TempData[Constant.ErrorMessages] != null)
            {
                ViewBag.ErrorMessages = (string)TempData[Constant.ErrorMessages];
            }

            var tempDataState = TempData["ModelState"] as List <KeyValuePair <string, string> >;

            if (tempDataState != null)
            {
                foreach (var e in tempDataState)
                {
                    ViewData.ModelState.AddModelError(e.Key, e.Value);
                }
            }

            return(View("Checkout", viewModel));
        }
        public ActionResult Index(OrderDetailsPage currentPage, int orderGroupId = 0)
        {
            var orderViewModel = new OrderDetailsViewModel
            {
                CurrentPage     = currentPage,
                CurrentCustomer = _customerService.GetCurrentContact()
            };

            var purchaseOrder = OrderContext.Current.GetPurchaseOrderById(orderGroupId);

            if (purchaseOrder == null)
            {
                return(View(orderViewModel));
            }

            // Assume there is only one form per purchase.
            var form = purchaseOrder.GetFirstForm();

            var billingAddress = form.Payments.FirstOrDefault() != null
                ? form.Payments.First().BillingAddress
                : new OrderAddress();

            orderViewModel.PurchaseOrder = purchaseOrder;
            orderViewModel.Items         = form.GetAllLineItems().Select(lineItem => new OrderDetailsItemViewModel
            {
                LineItem = lineItem,
            }).GroupBy(x => x.LineItem.Code).Select(group => @group.First());
            orderViewModel.BillingAddress    = _addressBookService.ConvertToModel(billingAddress);
            orderViewModel.ShippingAddresses = new List <AddressModel>();

            foreach (var orderAddress in form.Shipments.Select(s => s.ShippingAddress))
            {
                var shippingAddress = _addressBookService.ConvertToModel(orderAddress);
                orderViewModel.ShippingAddresses.Add(shippingAddress);
                orderViewModel.OrderGroupId = purchaseOrder.OrderGroupId;
            }
            if (purchaseOrder[Constants.Quote.QuoteExpireDate] != null &&
                !string.IsNullOrEmpty(purchaseOrder[Constants.Quote.QuoteExpireDate].ToString()))
            {
                DateTime quoteExpireDate;
                DateTime.TryParse(purchaseOrder[Constants.Quote.QuoteExpireDate].ToString(), out quoteExpireDate);
                if (DateTime.Compare(DateTime.Now, quoteExpireDate) > 0)
                {
                    orderViewModel.QuoteStatus = Constants.Quote.QuoteExpired;
                    try
                    {
                        // Update order quote status to expired
                        purchaseOrder[Constants.Quote.QuoteStatus] = Constants.Quote.QuoteExpired;
                        _orderRepository.Save(purchaseOrder);
                    }
                    catch (Exception ex)
                    {
                        LogManager.GetLogger(GetType()).Error("Failed to update order status to Quote Expired.", ex.StackTrace);
                    }
                }
            }


            if (!string.IsNullOrEmpty(purchaseOrder["QuoteStatus"]?.ToString()) &&
                (purchaseOrder.Status == OrderStatus.InProgress.ToString() ||
                 purchaseOrder.Status == OrderStatus.OnHold.ToString()))
            {
                orderViewModel.QuoteStatus = purchaseOrder["QuoteStatus"].ToString();
            }

            orderViewModel.BudgetPayment = _ordersService.GetOrderBudgetPayment(purchaseOrder);

            return(View(orderViewModel));
        }