예제 #1
0
        /// <summary>
        /// Executes this command.
        /// </summary>
        /// <param name="request">A filter to search for specific categories.</param>
        /// <returns>A list of categories.</returns>
        public SearchableGridViewModel <CategoryItemViewModel> Execute(SearchableGridOptions request)
        {
            SearchableGridViewModel <CategoryItemViewModel> model;

            request.SetDefaultSortingOptions("Name");

            Root.Models.Category  alias      = null;
            CategoryItemViewModel modelAlias = null;

            var query = UnitOfWork.Session
                        .QueryOver(() => alias)
                        .Where(() => !alias.IsDeleted);

            if (!string.IsNullOrWhiteSpace(request.SearchQuery))
            {
                var searchQuery = string.Format("%{0}%", request.SearchQuery);
                query = query.Where(Restrictions.InsensitiveLike(NHibernate.Criterion.Projections.Property(() => alias.Name), searchQuery));
            }

            query = query
                    .SelectList(select => select
                                .Select(() => alias.Id).WithAlias(() => modelAlias.Id)
                                .Select(() => alias.Name).WithAlias(() => modelAlias.Name)
                                .Select(() => alias.Version).WithAlias(() => modelAlias.Version))
                    .TransformUsing(Transformers.AliasToBean <CategoryItemViewModel>());

            var count      = query.ToRowCountFutureValue();
            var categories = query.AddSortingAndPaging(request).Future <CategoryItemViewModel>();

            model = new SearchableGridViewModel <CategoryItemViewModel>(categories.ToList(), request, count.Value);

            return(model);
        }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RenderPageCategoryViewModel" /> class.
 /// </summary>
 public RenderPageCategoryViewModel(Root.Models.Category category)
 {
     if (category != null)
     {
         Id      = category.Id;
         Version = category.Version;
         Name    = category.Name;
     }
 }
예제 #3
0
        /// <summary>
        /// Executes a command to save category.
        /// </summary>
        /// <param name="categoryItem">The category item.</param>
        /// <returns>
        /// true if category saved successfully; false otherwise.
        /// </returns>
        public CategoryItemViewModel Execute(CategoryItemViewModel categoryItem)
        {
            Root.Models.Category category;

            var categoryName = Repository.FirstOrDefault <Root.Models.Category>(c => c.Name == categoryItem.Name);

            if (categoryName != null && categoryName.Id != categoryItem.Id)
            {
                var message    = string.Format(RootGlobalization.SaveCategory_CategoryExists_Message, categoryItem.Name);
                var logMessage = string.Format("Category already exists. Category name: {0}, Id: {1}", categoryItem.Name, categoryItem.Id);

                throw new ValidationException(() => message, logMessage);
            }

            if (categoryItem.Id == default(Guid))
            {
                category = new Root.Models.Category();
            }
            else
            {
                category = Repository.AsProxy <Root.Models.Category>(categoryItem.Id);
            }

            category.Version = categoryItem.Version;
            category.Name    = categoryItem.Name;

            Repository.Save(category);
            UnitOfWork.Commit();

            if (categoryItem.Id == default(Guid))
            {
                Events.RootEvents.Instance.OnCategoryCreated(category);
            }
            else
            {
                Events.RootEvents.Instance.OnCategoryUpdated(category);
            }

            return(new CategoryItemViewModel
            {
                Id = category.Id,
                Version = category.Version,
                Name = category.Name
            });
        }