public ActionResult Currency(string tab, ExchangeRateViewModel exchangeRateViewModel)
        {
            var currencies = this.repository.GetCurrencies();

            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Currency);
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;
            this.ViewData["Currencies"]        = currencies;
            this.ViewData["Tab"] = tab;
            this.ViewData["CurrenciesSelectList"] =
                currencies.Select(c => new SelectListItem {
                Text  = c.Text,
                Value = c.Id.ToString()
            }).ToList();

            if (exchangeRateViewModel == null)
            {
                exchangeRateViewModel = new ExchangeRateViewModel(this.repository);
            }
            else
            {
                exchangeRateViewModel.Initialize(this.repository);
            }

            return(this.View("Currency", exchangeRateViewModel));
        }
Example #2
0
        public new ActionResult User(Guid id, bool?activate, bool?unblock, bool?block)
        {
            this.ViewData["SettingsViewModel"]  = this.settingsViewModel;
            this.ViewData["MainMenuViewModel"]  = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Users);
            this.ViewData["UsersListViewModel"] = new UsersListViewModel(this.repository, id);

            var user = this.repository.GetUser(id);

            if (user == null)
            {
                return(this.HttpNotFound());
            }

            if (activate != null && activate.Value)
            {
                this.repository.ActivateUser(id);
                EmailManager.Send(user, this.repository, EmailType.EmailNewUserActivation);
                return(this.RedirectToAction("Users"));
            }
            if (unblock != null && unblock.Value)
            {
                this.repository.UnblockUser(id);
                EmailManager.Send(user, this.repository, EmailType.EmailNewUserActivation);
                return(this.RedirectToAction("Users"));
            }
            if (block != null && block.Value)
            {
                this.repository.BlockUser(id);
                EmailManager.Send(user, this.repository, EmailType.EmailUserBlocked);
                return(this.RedirectToAction("Users"));
            }

            return(this.View(new UserProfileViewModel(this.repository, id)));
        }
        public ActionResult Template(TemplateViewModel templateViewModel, string a, Guid?id)
        {
            if (templateViewModel == null || string.IsNullOrWhiteSpace(templateViewModel.Name))
            {
                return(this.HttpNotFound());
            }

            if (templateViewModel.Id == Guid.Empty)
            {
                templateViewModel.Id = this.repository.AddNewTemplate(new PropertyTemplate()
                {
                    Name = templateViewModel.Name
                });
            }
            else
            {
                var propertyTemplate = this.repository.GetTemplateById(templateViewModel.Id);
                propertyTemplate.Name = templateViewModel.Name;
                this.repository.UpdateTemplate(propertyTemplate, templateViewModel.Properties, false);
            }

            this.ViewData["SettingsViewModel"] = this.settingsViewModel;
            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Templates);

            this.ViewData["TemplatesList"] = this.repository.GetTemplates().Select(x => new TemplateViewModel()
            {
                Id = x.Id, Name = x.Name
            }).ToList();
            return(this.View(templateViewModel));
        }
 public ActionResult Pages(Guid?treeSelection)
 {
     this.ViewData["SettingsViewModel"]         = this.settingsViewModel;
     this.ViewData["MainMenuViewModel"]         = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Pages);
     this.ViewData["CategoryTreeRootViewModel"] = CategoryTreeItemViewModel.CreateNavigationTree(repository);
     this.ViewData["TreeSelection"]             = treeSelection;
     return(this.View(new PageViewModel()));
 }
Example #5
0
 protected virtual void Initialize(Guid pageId, PageIdentity pageIdentity = PageIdentity.Unknown, bool promoteProducts = true)
 {
     this.currentUser = this.HttpContext.CurrentUser() ?? UserIdentityManager.GetActiveUser(this.Request, this.repository);
     this.ViewData["SettingsViewModel"] = this.settingsViewModel;
     this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateDefaultMenu(this.repository, pageId, currentUser, pageIdentity);
     this.ViewData["ShowLeftRailLogin"] = currentUser == null;
     //this.ViewData["MediaListViewModel"] = promoteProducts ? CategoryViewModelFactory.CreatePopularProducts(this.repository, null) : null;
     this.ViewData["HttpReferrer"] = this.Request.UrlReferrer != null?this.Request.UrlReferrer.ToString() : null;
 }
Example #6
0
        public ActionResult Orders(char t = 'p', int o = 0, int c = 50)
        {
            var user = this.HttpContext.CurrentUser();

            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Orders);
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;

            OrderStatus status;

            if (!statusMap.TryGetValue(t, out status))
            {
                status = OrderStatus.Placed;
            }

            using (var context = new InstantStoreDataContext())
            {
                Func <Order, bool>       selector = (Order order) => (int)status == order.Status;
                Func <OrderUpdate, bool> orderSortDateSelector = (OrderUpdate update) => update.Status == (int)status;
                this.ViewData["OrdersTableViewModel"] = new TableViewModel
                {
                    Header = new List <TableCellViewModel>
                    {
                        new TableCellViewModel(StringResource.user_HistoryListHeaderTime),
                        new TableCellViewModel(StringResource.user_HistoryListHeaderUserName),
                        new TableCellViewModel(StringResource.user_HistoryListHeaderItemCount),
                        new TableCellViewModel(StringResource.user_HistoryListHeaderTotalPrice),
                        new TableCellViewModel(StringResource.user_HistoryListHeaderProcessTime)
                    },
                    Rows = context.Orders
                           .Where(selector)
                           .OrderByDescending(order => order.OrderUpdates
                                              .Where(orderSortDateSelector)
                                              .OrderByDescending(u => u.DateTime)
                                              .First().DateTime)
                           .Skip(o)
                           .Take(c)
                           .Select(ConvertOrderToTableRow)
                           .ToList(),
                    RowClickAction = new NavigationLink("Order"),
                    Pagination     = new PaginationViewModel(c, o, context.Orders.Count(selector))
                    {
                        Link = new NavigationLink("Orders", "Admin")
                        {
                            Parameters = new { t = t }
                        }
                    }
                };

                this.ViewData["OrdersHeaderViewModel"] = new TabControlViewModel
                {
                    Tabs = statusMap.Select(key => CreateOrderStatusHeader(key, t)).ToList()
                };
            }

            return(this.View());
        }
        public ActionResult Category(Guid?id, Guid?parentId)
        {
            this.ViewData["SettingsViewModel"]         = this.settingsViewModel;
            this.ViewData["MainMenuViewModel"]         = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Pages);
            this.ViewData["CategoryTreeRootViewModel"] = CategoryTreeItemViewModel.CreateNavigationTree(repository);
            var categoryViewModel = id != null ? new CategoryViewModel(this.repository, id.Value) : new CategoryViewModel();

            categoryViewModel.Content.ParentCategoryId = parentId ?? Guid.Empty;
            return(this.View("Category", categoryViewModel));
        }
Example #8
0
        public ActionResult Order(OrderDetailsViewModel orderViewModel)
        {
            var user = UserIdentityManager.GetActiveUser(this.Request, repository);

            if (user == null || !user.IsAdmin || orderViewModel == null)
            {
                return(this.HttpNotFound());
            }

            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Orders);
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;

            using (var context = new InstantStoreDataContext())
            {
                var order = context.Orders.FirstOrDefault(x => x.Id == orderViewModel.Id);
                if (order == null)
                {
                    return(this.HttpNotFound());
                }

                if (order.Comment != orderViewModel.Description ||
                    order.Status != (int)orderViewModel.Status)
                {
                    order.Comment = orderViewModel.Description;
                    if (order.Status != (int)orderViewModel.Status)
                    {
                        order.Status = (int)orderViewModel.Status;
                        context.OrderUpdates.InsertOnSubmit(new OrderUpdate
                        {
                            Status   = (int)orderViewModel.Status,
                            DateTime = DateTime.Now,
                            Id       = Guid.NewGuid(),
                            OrderId  = order.Id
                        });
                    }

                    var orderSubmitDate = order.OrderUpdates.FirstOrDefault(x => x.Status == (int)OrderStatus.Placed);

                    context.SubmitChanges();

                    EmailManager.Send(
                        order.User,
                        this.repository,
                        EmailType.EmailOrderHasBeenUpdated,
                        new Dictionary <string, string> {
                        { "%order.id%", order.Id.ToString() },
                        { "%order.user%", order.User.Name },
                        { "%order.date%", orderSubmitDate != null ? orderSubmitDate.DateTime.ToString("F", russianCulture) : string.Empty }
                    });
                }
            }

            return(this.RedirectToAction("Orders"));
        }
Example #9
0
        public ActionResult Offers(char t = 'a', int o = 0, int c = 50)
        {
            var user = UserIdentityManager.GetActiveUser(this.Request, repository);

            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Offers);
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;

            this.ViewData["OffersHeaderViewModel"] = new TabControlViewModel
            {
                Tabs = offerStatusMap.Select(key => CreateOfferStatusHeader(key, t)).ToList()
            };

            bool showActive;

            if (!offerStatusMap.TryGetValue(t, out showActive))
            {
                showActive = true;
            }

            using (var context = new InstantStoreDataContext())
            {
                Func <Offer, bool> selector = showActive
                    ? (Func <Offer, bool>)((Offer offer) => offer.IsActive)
                    : (Func <Offer, bool>)((Offer offer) => !offer.IsActive);

                this.ViewData["OffersTableViewModel"] = new TableViewModel
                {
                    Header = new List <TableCellViewModel>
                    {
                        new TableCellViewModel(StringResource.offerTableHeaderName),
                        new TableCellViewModel(StringResource.offerTableHeaderThreshold),
                        new TableCellViewModel(StringResource.offerTableHeaderDiscount),
                        new TableCellViewModel(string.Empty)
                    },
                    Rows = context.Offers
                           .Where(selector)
                           .OrderByDescending(offer => offer.Name)
                           .Skip(o)
                           .Take(c)
                           .Select(ConvertOfferToTableRow)
                           .ToList(),
                    RowClickAction = new NavigationLink("Offer"),
                    Pagination     = new PaginationViewModel(c, o, context.Offers.Count(selector))
                    {
                        Link = new NavigationLink("Offers", "Admin")
                        {
                            Parameters = new { t = t }
                        }
                    }
                };
            }

            return(this.View());
        }
        public ActionResult Templates()
        {
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;
            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Templates);
            var templates = this.repository.GetTemplates().Select(x => new TemplateViewModel()
            {
                Id = x.Id, Name = x.Name
            }).ToList();

            return(this.View(templates));
        }
Example #11
0
        public ActionResult Product(Guid?id, Guid?parentId)
        {
            var viewModel = id != null && id != Guid.Empty
                ? new ProductViewModel(this.repository, id.Value, parentId, null)
                : new ProductViewModel(this.repository, parentId);

            viewModel.InitializeRootCategory(this.repository);
            this.ViewData["MainMenuViewModel"]         = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Pages);
            this.ViewData["SettingsViewModel"]         = this.settingsViewModel;
            this.ViewData["CategoryTreeRootViewModel"] = CategoryTreeItemViewModel.CreateNavigationTree(repository);
            return(this.View("Product", viewModel));
        }
Example #12
0
        public ActionResult Users(char t = 'n', int o = 0, int c = 50)
        {
            UserStatus status;

            if (!userTabMap.TryGetValue(t, out status))
            {
                status = UserStatus.Active;
            }

            using (var context = new InstantStoreDataContext())
            {
                bool hasNewUsers = context.Users.Any(user => !user.IsActivated);
                status = status == UserStatus.New && !hasNewUsers ? UserStatus.Active : status;

                Func <User, bool> selector = (User user) => (status == UserStatus.New ? !user.IsActivated : (status == UserStatus.Blocked ? user.IsBlocked : (user.IsActivated && !user.IsBlocked))) && !user.IsAdmin;
                this.ViewData["UsersTableViewModel"] = new TableViewModel
                {
                    Header = new List <TableCellViewModel>
                    {
                        new TableCellViewModel(StringResource.form_Contact_Name),
                        new TableCellViewModel(StringResource.form_Reg_Region),
                        new TableCellViewModel(StringResource.form_Reg_CompanyName)
                    },
                    Rows = context.Users
                           .Where(selector)
                           .OrderBy(user => user.Name)
                           .Skip(o)
                           .Take(c)
                           .Select(ConvertUserToTableRow)
                           .ToList(),
                    RowClickAction = new NavigationLink("User"),
                    Pagination     = new PaginationViewModel(c, o, context.Users.Count(selector))
                    {
                        Link = new NavigationLink("Users", "Admin")
                        {
                            Parameters = new { t = t }
                        }
                    }
                };

                this.ViewData["UsersHeaderViewModel"] = new TabControlViewModel
                {
                    Tabs = userTabMap
                           .Where(x => hasNewUsers || x.Value != UserStatus.New)
                           .Select(key => CreateUserStatusHeader(key, t)).ToList()
                };
            }

            this.ViewData["SettingsViewModel"] = this.settingsViewModel;
            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Users);
            return(View());
        }
        private ActionResult ContentPage(ContentPage page, Guid id, User user, int c, int o)
        {
            // Page/Category view
            this.ViewData["BreadcrumbViewModel"]     = MenuViewModelFactory.CreateBreadcrumb(repository, id);
            this.ViewData["NavigationMenuViewModel"] = MenuViewModelFactory.CreateNavigationMenu(repository, id, this.Request);

            var viewModel = new PageViewModel(page, this.repository);

            this.ViewData["ProductItemsViewModel"] = CategoryViewModelFactory.CreateCategoryViewModel(user, page, c, o, ListingViewProductSettings.User);

            this.ViewData["IsPage"] = !viewModel.ContentPage.IsCategory();
            return(this.View(viewModel));
        }
Example #14
0
        /// <summary>
        /// Asynchronously builds menu.
        /// </summary>
        /// <returns></returns>
        public Task <IViewComponentResult> InvokeAsync()
        {
            MenuViewModelFactory factory = new MenuViewModelFactory(this, LoggerFactory);

            Stopwatch watch = new Stopwatch();

            watch.Start();
            MenuViewModel menu = factory.Create();

            watch.Stop();
            LoggerFactory.CreateLogger <MenuViewComponent>().LogInformation("Time to build menu content by MenuViewModelFactory: " + watch.ElapsedMilliseconds + " ms");
            return(Task.FromResult <IViewComponentResult>(View(menu)));
        }
        public ActionResult Page(Guid?id, Guid?parentId, string a, string c = null)
        {
            if (!string.IsNullOrEmpty(a) && id != null && id != Guid.Empty)
            {
                if (string.Equals("delete", a, StringComparison.OrdinalIgnoreCase))
                {
                    this.repository.DeletePage(id.Value);
                    return(this.RedirectToAction("Pages", new { treeSelection = parentId != null ? parentId.Value : Guid.Empty }));
                }
                if (string.Equals("moveup", a, StringComparison.OrdinalIgnoreCase))
                {
                    this.repository.ChangePagePosition(id.Value, false);
                    return(this.RedirectToAction("Pages", new { treeSelection = id.Value }));
                }
                if (string.Equals("movedown", a, StringComparison.OrdinalIgnoreCase))
                {
                    this.repository.ChangePagePosition(id.Value, true);
                    return(this.RedirectToAction("Pages", new { treeSelection = id.Value }));
                }
            }

            if (id == Guid.Empty)
            {
                return(this.RedirectToAction("Settings", new { t = "main" }));
            }

            if (c == "p")
            {
                return(this.Product(id, parentId));
            }

            var pageViewModel = id != null ? new PageViewModel(this.repository, id.Value) : new PageViewModel()
            {
                ParentCategoryId = parentId ?? Guid.Empty
            };

            if (pageViewModel.ContentPage != null && pageViewModel.ContentPage.IsCategory())
            {
                return(this.Category(id, parentId ?? pageViewModel.ParentCategoryId));
            }
            else
            {
                this.ViewData["SettingsViewModel"] = this.settingsViewModel;
                this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Pages);

                this.ViewData["CategoryTreeRootViewModel"] = CategoryTreeItemViewModel.CreateNavigationTree(repository);
                return(this.View(pageViewModel));
            }
        }
Example #16
0
        /// <summary>
        /// Asynchronously builds menu.
        /// </summary>
        /// <returns>IViewComponentResult object.</returns>
        public Task <IViewComponentResult> InvokeAsync()
        {
            MenuViewModelFactory factory = new MenuViewModelFactory(Storage, LoggerFactory);

#if DEBUG
            Stopwatch watch = new Stopwatch();
            watch.Start();
#endif
            MenuViewModel menu = factory.Create();
#if DEBUG
            watch.Stop();
            _logger.LogInformation("Time to build menu content by MenuViewModelFactory: " + watch.ElapsedMilliseconds + " ms");
#endif
            return(Task.FromResult <IViewComponentResult>(View(menu)));
        }
Example #17
0
        public ActionResult Order(Guid id)
        {
            var user = this.HttpContext.CurrentUser();

            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Orders);
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;

            using (var context = new InstantStoreDataContext())
            {
                var order = context.Orders.FirstOrDefault(x => x.Id == id);
                if (order == null)
                {
                    return(this.HttpNotFound());
                }

                this.ViewData["OrderStatusList"] = new[] { OrderStatus.Placed, OrderStatus.InProcess, OrderStatus.Completed }
                .Select(status => new SelectListItem
                {
                    Text     = orderStatusMap[status],
                    Selected = (OrderStatus)order.Status == status,
                    Value    = status.ToString()
                }).ToList();

                var submittedUpdate = order.OrderUpdates.FirstOrDefault(update => update.Status == (int)OrderStatus.Placed);
                var completeUpdate  = order.OrderUpdates.FirstOrDefault(update => update.Status == (int)OrderStatus.Completed);

                return(this.View(new OrderDetailsViewModel
                {
                    Id = order.Id,
                    Status = (OrderStatus)order.Status,
                    Products = order.OrderProducts.Select(CreateProductOrderViewModel).ToList(),
                    ItemsCount = order.OrderProducts.Sum(orderItem => orderItem.Count),
                    Total = order.TotalPrice != null ? new CurrencyString(order.TotalPrice.Value, order.Currency.Text) : null,
                    Description = order.Comment,
                    UserName = string.Concat(order.User.Name, ", ", order.User.City),
                    SubmitDate = submittedUpdate != null ? (DateTime?)submittedUpdate.DateTime : null,
                    ProcessedDate = completeUpdate != null ? (DateTime?)completeUpdate.DateTime : null,
                    Offer = order.Offer != null ? new OfferViewModel
                    {
                        Name = order.Offer.Name,
                        Type = (OfferDiscountType)order.Offer.DiscountType,
                        Discount = order.Offer.DiscountValue,
                        CurrencyText = order.Offer.Currency.Text
                    } : null
                }));
            }
        }
        public ActionResult Page(PageViewModel pageViewModel)
        {
            Guid?parentId = pageViewModel.ParentCategoryId == Guid.Empty ? (Guid?)null : pageViewModel.ParentCategoryId;

            if (parentId != null && pageViewModel.Id != null && pageViewModel.Id != Guid.Empty && ValidateParentId(parentId.Value, pageViewModel.Id))
            {
                this.ModelState.AddModelError("ParentCategoryId", StringResource.admin_CantAddPageToItselfParent);
            }

            var attachmentIds = pageViewModel.Attachments != null && pageViewModel.Attachments.Any() ? pageViewModel.Attachments.Select(x => x.AttachmentId.Value).ToList() : null;

            if (this.ModelState.IsValid)
            {
                var contentPage = pageViewModel.Id != Guid.Empty ? this.repository.GetPageById(pageViewModel.Id) : null;
                if (contentPage == null)
                {
                    contentPage = new ContentPage
                    {
                        Name       = pageViewModel.Name,
                        Text       = pageViewModel.Text,
                        ParentId   = parentId,
                        ShowInMenu = pageViewModel.ShowInMenu,
                        Position   = repository.GetPages(parentId, null).Count,
                    };

                    repository.NewPage(contentPage, attachmentIds);
                }
                else
                {
                    contentPage.Name       = pageViewModel.Name;
                    contentPage.Text       = pageViewModel.Text;
                    contentPage.ParentId   = parentId;
                    contentPage.ShowInMenu = pageViewModel.ShowInMenu;

                    this.repository.UpdateContentPage(contentPage, attachmentIds);
                }

                return(this.RedirectToAction("Pages", new { treeSelection = contentPage.Id }));
            }
            else
            {
                this.ViewData["SettingsViewModel"]         = this.settingsViewModel;
                this.ViewData["MainMenuViewModel"]         = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Pages);
                this.ViewData["CategoryTreeRootViewModel"] = CategoryTreeItemViewModel.CreateNavigationTree(repository);
                return(this.View(pageViewModel ?? new PageViewModel()));
            }
        }
        public ActionResult Template(string a, Guid?id)
        {
            PropertyTemplate template;

            if (id == null || id == Guid.Empty || (template = this.repository.GetTemplateById(id.Value)) == null)
            {
                return(this.RedirectToAction("Templates"));
            }

            if (string.Equals("delete", a))
            {
                this.repository.DeleteTemplate(id.Value);
                return(this.RedirectToAction("Templates"));
            }

            this.ViewData["SettingsViewModel"] = this.settingsViewModel;
            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Templates);
            return(this.View(new TemplateViewModel(template, repository)));
        }
        public ActionResult Page(Guid?id, Guid?parentId, int c = 200, int o = 0)
        {
            if (id == null || id == Guid.Empty)
            {
                return(this.RedirectToAction("Index"));
            }

            this.Initialize(id.Value);

            Product product;

            var user = UserIdentityManager.GetActiveUser(this.Request, repository);

            this.ViewData["Id"]      = id.Value;
            this.ViewData["IsAdmin"] = user != null && user.IsAdmin;

            var contentPage = this.repository.GetPageById(id.Value);

            if (contentPage != null)
            {
                return(this.ContentPage(contentPage, id.Value, user, c, o));
            }
            else if ((product = repository.GetProductById(id.Value)) != null)
            {
                this.ViewData["BreadcrumbViewModel"]     = MenuViewModelFactory.CreateBreadcrumb(repository, parentId);
                this.ViewData["NavigationMenuViewModel"] = MenuViewModelFactory.CreateNavigationMenu(repository, parentId, this.Request);

                //this.ViewData["MediaListViewModel"] = CategoryViewModelFactory.CreateSimilarProducts(repository, parentId);

                var productViewModel = new ProductViewModel(this.repository, id.Value, parentId, user);
                return(this.View("Product", productViewModel));
            }
            else
            {
                return(this.HttpNotFound());
            }
        }
Example #21
0
 public MenuViewComponent(MenuViewModelFactory viewmodelFactory)
 {
     this.viewmodelFactory = viewmodelFactory;
 }
        public ActionResult Settings(Guid?i = null, Guid?id = null, int c = 25, int o = 0)
        {
            if (i == null)
            {
                this.ViewData["SettingsViewModel"]     = this.settingsViewModel;
                this.ViewData["MainMenuViewModel"]     = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Settings);
                this.ViewData["SettingsMenuViewModel"] = settingsNavigationTree;
                this.ViewData["SettingsMenuSelection"] = id;
                return(View());
            }
            else
            {
                CustomViewModel settingsViewModel = null;
                var             item = i != null?this.GetItemById(i.Value, settingsNavigationTree) : null;

                if (item == null || item.Id == Guid.Empty)
                {
                }
                else
                {
                    if (item.Key.StartsWith("Email"))
                    {
                        settingsViewModel = this.CreateEmailSettingsViewModel(item);
                    }
                    else
                    {
                        switch (item.Key)
                        {
                        case "PagesHeader":
                            settingsViewModel = this.CreateContentSettingsViewModel(
                                StringResource.Settings_HeaderLabel, SettingsKey.HeaderHtml);
                            break;

                        case "PagesFooter":
                            settingsViewModel = this.CreateContentSettingsViewModel(
                                StringResource.Settings_FooterLabel, SettingsKey.FooterHtml);
                            break;

                        case "MainContent":
                            settingsViewModel = this.CreateContentSettingsViewModel(
                                StringResource.Settings_MainTextLabel, SettingsKey.MainPageHtml);
                            break;

                        case "Feedback":
                            using (var context = new InstantStoreDataContext())
                            {
                                settingsViewModel = new TableViewModel
                                {
                                    Title = StringResource.admin_SettingsNode_FeedbackGroup,
                                    Rows  = context.Feedbacks
                                            .OrderByDescending(feedback => feedback.Submitted)
                                            .Skip(o)
                                            .Take(c)
                                            .ToList()
                                            .Select(feedback => new TableRowViewModel
                                    {
                                        Cells = new List <TableCellViewModel>
                                        {
                                            new TableCellViewModel(string.Format(StringResource.admin_FeedbackNameFormat, feedback.Name, feedback.Email, feedback.Submitted.ToString("F", new CultureInfo("ru-RU")))),
                                            new TableCellViewModel(feedback.Message)
                                        }
                                    })
                                            .ToList(),
                                    Pagination = new PaginationViewModel(c, o, context.Feedbacks.Count()),
                                    ViewName   = "TableView"
                                };
                            }
                            break;

                        case "GroupEmail":
                            settingsViewModel = this.CreatePropertyListViewModel(
                                StringResource.admin_Settings_EmailConfiguration,
                                new List <PropertyInfo>
                            {
                                new PropertyInfo(
                                    SettingsKey.EmailSettings_SmtpServer.ToString(),
                                    StringResource.admin_Settings_EmailSettings_SmtpServer,
                                    this.repository.GetSettings(SettingsKey.EmailSettings_SmtpServer)),
                                new PropertyInfo(
                                    SettingsKey.EmailSettings_EnableSSL.ToString(),
                                    StringResource.admin_Settings_EnableSSL,
                                    this.repository.GetSettings(SettingsKey.EmailSettings_EnableSSL)),
                                new PropertyInfo(
                                    SettingsKey.EmailSettings_SmtpServerPort.ToString(),
                                    StringResource.admin_Settings_SmtpServerPort,
                                    this.repository.GetSettings(SettingsKey.EmailSettings_SmtpServerPort)),
                                new PropertyInfo(
                                    SettingsKey.EmailSettings_SmtpServerLogin.ToString(),
                                    StringResource.admin_Settings_SmtpLogin,
                                    this.repository.GetSettings(SettingsKey.EmailSettings_SmtpServerLogin)),
                                new PropertyInfo(
                                    SettingsKey.EmailSettings_SmtpServerPassword.ToString(),
                                    StringResource.admin_Settings_SmtpPassword,
                                    this.repository.GetSettings(SettingsKey.EmailSettings_SmtpServerPassword)),
                                new PropertyInfo(
                                    SettingsKey.EmailSettings_EmailFrom.ToString(),
                                    StringResource.admin_Settings_EmailSettings_EmailFrom,
                                    this.repository.GetSettings(SettingsKey.EmailSettings_EmailFrom)),
                                new PropertyInfo(
                                    SettingsKey.EmailSettings_EmailAdmin.ToString(),
                                    StringResource.admin_Settings_EmailAdmin,
                                    this.repository.GetSettings(SettingsKey.EmailSettings_EmailAdmin)),
                            });
                            break;

                        case "LostPages":
                            settingsViewModel = this.CreatePageRecoveryViewModel(this.repository, c, o, i.Value);
                            break;
                        }
                    }
                }

                if (settingsViewModel != null)
                {
                    //settingsViewModel.Id = i ?? Guid.Empty;
                    return(View(settingsViewModel.ViewName, settingsViewModel));
                }
                else
                {
                    return(null);
                }
            }
        }
Example #23
0
 protected override void Initialize(Guid pageId, PageIdentity pageIdentity = PageIdentity.Unknown, bool promoteProducts = true)
 {
     base.Initialize(pageId);
     this.ViewData["NavigationMenuViewModel"] = MenuViewModelFactory.CreateNavigationMenu(repository, null, this.Request);
     this.ViewData["BreadcrumbViewModel"]     = MenuViewModelFactory.CreateBreadcrumb(repository, null);
 }
Example #24
0
        public ActionResult Offer(Guid?id)
        {
            var user = UserIdentityManager.GetActiveUser(this.Request, repository);

            if (user == null || !user.IsAdmin)
            {
                return(this.HttpNotFound());
            }

            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Offers);
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;

            OfferViewModel viewModel;

            using (var context = new InstantStoreDataContext())
            {
                if (id != null && id != Guid.Empty)
                {
                    var offer = context.Offers.FirstOrDefault(x => x.VersionId == id.Value);
                    if (offer == null)
                    {
                        return(this.HttpNotFound());
                    }

                    viewModel = new OfferViewModel
                    {
                        Id             = offer.VersionId,
                        IsActive       = offer.IsActive,
                        Name           = offer.Name,
                        IsMultiApply   = offer.MultiApply,
                        Priority       = offer.Priority,
                        Type           = (OfferDiscountType)offer.DiscountType,
                        CurrencyId     = offer.CurrencyId,
                        ThresholdPrice = offer.ThresholdPriceValue,
                        Discount       = offer.DiscountValue
                    };
                }
                else
                {
                    viewModel = new OfferViewModel
                    {
                        IsActive = true
                    };
                }

                this.ViewData["CurrencyList"] = context.Currencies.Select(
                    currency =>
                    new SelectListItem
                {
                    Text  = currency.Text,
                    Value = currency.Id.ToString()
                }).ToList();

                this.ViewData["DiscountTypeList"] = new[] { OfferDiscountType.Percent, OfferDiscountType.LumpSum }.Select(
                    type =>
                    new SelectListItem
                {
                    Text = type == OfferDiscountType.Percent
                        ? StringResource.offerDetailsDiscountType_Percent
                        : StringResource.offerDetailsDiscountType_LumpSum,
                    Value = type.ToString()
                }).ToList();
            }

            return(this.View(viewModel));
        }
Example #25
0
        public ActionResult Offer(OfferViewModel viewModel)
        {
            var user = UserIdentityManager.GetActiveUser(this.Request, repository);

            if (user == null || !user.IsAdmin)
            {
                return(this.HttpNotFound());
            }

            if (this.ModelState.IsValid)
            {
                if (viewModel.Type == OfferDiscountType.Percent && viewModel.Discount >= 100)
                {
                    this.ModelState.AddModelError(string.Empty, StringResource.offer_ErrorDiscountPercentRange);
                }
                else
                {
                    using (var context = new InstantStoreDataContext())
                    {
                        if (viewModel.Id == Guid.Empty)
                        {
                            context.Offers.InsertOnSubmit(new Offer
                            {
                                Id                  = Guid.NewGuid(),
                                Name                = viewModel.Name,
                                IsActive            = viewModel.IsActive,
                                MultiApply          = viewModel.IsMultiApply,
                                Priority            = viewModel.Priority,
                                CurrencyId          = viewModel.CurrencyId,
                                DiscountType        = (int)viewModel.Type,
                                DiscountValue       = viewModel.Discount,
                                ThresholdPriceValue = viewModel.ThresholdPrice,
                                Version             = 1,
                                VersionId           = Guid.NewGuid()
                            });

                            context.SubmitChanges();
                        }
                        else
                        {
                            // check if offer is being used in any order.
                            var offer = context.Offers.FirstOrDefault(o => o.VersionId == viewModel.Id);
                            if (offer == null)
                            {
                                return(this.HttpNotFound());
                            }

                            bool increaseVersion = context.Orders.Any(order => order.OfferId == viewModel.Id);
                            if (increaseVersion)
                            {
                                context.Offers.InsertOnSubmit(new Offer
                                {
                                    Id                  = offer.Id,
                                    Name                = viewModel.Name,
                                    IsActive            = viewModel.IsActive,
                                    MultiApply          = viewModel.IsMultiApply,
                                    Priority            = viewModel.Priority,
                                    CurrencyId          = viewModel.CurrencyId,
                                    DiscountType        = (int)viewModel.Type,
                                    DiscountValue       = viewModel.Discount,
                                    ThresholdPriceValue = viewModel.ThresholdPrice,
                                    Version             = offer.Version + 1,
                                    VersionId           = Guid.NewGuid()
                                });
                            }
                            else
                            {
                                offer.Name                = viewModel.Name;
                                offer.IsActive            = viewModel.IsActive;
                                offer.MultiApply          = viewModel.IsMultiApply;
                                offer.Priority            = viewModel.Priority;
                                offer.CurrencyId          = viewModel.CurrencyId;
                                offer.DiscountType        = (int)viewModel.Type;
                                offer.DiscountValue       = viewModel.Discount;
                                offer.ThresholdPriceValue = viewModel.ThresholdPrice;
                            }

                            context.SubmitChanges();
                        }
                    }

                    return(this.RedirectToAction("Offers"));
                }
            }

            this.ViewData["MainMenuViewModel"] = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Offers);
            this.ViewData["SettingsViewModel"] = this.settingsViewModel;

            using (var context = new InstantStoreDataContext())
            {
                this.ViewData["CurrencyList"] = context.Currencies.Select(
                    currency =>
                    new SelectListItem
                {
                    Text  = currency.Text,
                    Value = currency.Id.ToString()
                }).ToList();
            }

            this.ViewData["DiscountTypeList"] = new[] { OfferDiscountType.Percent, OfferDiscountType.LumpSum }.Select(
                type =>
                new SelectListItem
            {
                Text = type == OfferDiscountType.Percent
                    ? StringResource.offerDetailsDiscountType_Percent
                    : StringResource.offerDetailsDiscountType_LumpSum,
                Value = type.ToString()
            }).ToList();

            return(this.View(viewModel));
        }
        public ActionResult Category(CategoryViewModel categoryViewModel)
        {
            Guid?parentId = categoryViewModel.Content.ParentCategoryId == Guid.Empty ? (Guid?)null : categoryViewModel.Content.ParentCategoryId;

            if (parentId != null && categoryViewModel.Content.Id != null && categoryViewModel.Content.Id != Guid.Empty && ValidateParentId(parentId.Value, categoryViewModel.Content.Id))
            {
                this.ModelState.AddModelError("ParentCategoryId", StringResource.admin_CantAddPageToItselfParent);
            }

            if (this.ModelState.IsValid)
            {
                Guid pageId = categoryViewModel.Content.Id;

                if (categoryViewModel.Content.Id != Guid.Empty)
                {
                    var contentPage = repository.GetPageById(categoryViewModel.Content.Id);
                    if (contentPage == null || contentPage.CategoryId == null)
                    {
                        throw new InvalidOperationException(string.Format("Model is invalid state. Category for guid {0} has not been found.", categoryViewModel.Content.Id));
                    }

                    contentPage.Name       = categoryViewModel.Content.Name;
                    contentPage.Text       = categoryViewModel.Content.Text;
                    contentPage.ShowInMenu = categoryViewModel.Content.ShowInMenu;
                    contentPage.ParentId   = parentId;
                    repository.UpdateContentPage(contentPage, null);

                    var category = repository.GetCategoryById(contentPage.CategoryId.Value);
                    category.Name        = categoryViewModel.Content.Name;
                    category.ListType    = categoryViewModel.ListType;
                    category.Description = categoryViewModel.Content.Text;
                    category.ImageId     = categoryViewModel.CategoryImage;
                    category.IsImportant = categoryViewModel.IsImportant;
                    repository.UpdateCategory(category);
                }
                else
                {
                    var categoryId = repository.NewCategory(new Category()
                    {
                        Name        = categoryViewModel.Content.Name,
                        ListType    = categoryViewModel.ListType,
                        Description = categoryViewModel.Content.Text,
                        ImageId     = categoryViewModel.CategoryImage,
                    });

                    pageId = repository.NewPage(new ContentPage
                    {
                        Name       = categoryViewModel.Content.Name,
                        Text       = categoryViewModel.Content.Text,
                        ShowInMenu = categoryViewModel.Content.ShowInMenu,
                        ParentId   = parentId,
                        Position   = repository.GetPages(parentId, null).Count + 1,
                        CategoryId = categoryId,
                    }, null);
                }

                return(this.RedirectToAction("Pages", new { treeSelection = pageId }));
            }
            else
            {
                this.ViewData["SettingsViewModel"]         = this.settingsViewModel;
                this.ViewData["MainMenuViewModel"]         = MenuViewModelFactory.CreateAdminMenu(repository, ControlPanelPage.Pages);
                this.ViewData["CategoryTreeRootViewModel"] = CategoryTreeItemViewModel.CreateNavigationTree(repository);
                return(this.View(categoryViewModel ?? new CategoryViewModel()));
            }
        }