Esempio n. 1
0
        /// <summary>
        /// Добавление ограничения по товару
        /// </summary>
        private void AddArticleRestriction(ParameterString param, ISubCriteria <ReturnFromClientWaybill> x)
        {
            if (param.Keys.Contains("Article"))
            {
                if (!String.IsNullOrEmpty((param["Article"].Value as List <string>)[0]))
                {
                    var articleId = ValidationUtils.TryGetInt((param["Article"].Value as List <string>)[0]);

                    x.Restriction <ReturnFromClientWaybillRow>(y => y.Rows)
                    .Where(y => y.Article.Id == articleId);
                }
                param.Delete("Article");
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Определяем собственный метод фильтрации организаций контрагента
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="criteria"></param>
        protected override void CreateFilter <T>(Infrastructure.Repositories.Criteria.ICriteria <T> criteria)
        {
            Infrastructure.Repositories.Criteria.ICriteria <DealQuota> query = (Infrastructure.Repositories.Criteria.ICriteria <DealQuota>)criteria;

            ParameterString df = parameterString;

            if (df["DealId"] != null && df["DealId"].Value != null)
            {
                string str = df["DealId"].Value is IList <string>?(df["DealId"].Value as IList <string>)[0] : df["DealId"].Value as string;
                if (str.Length > 0)
                {
                    var dealId   = ValidationUtils.TryGetInt(str);
                    var subQuery = SubQuery <Deal>().Where(x => x.Id == dealId);
                    subQuery.Restriction <DealQuota>(x => x.Quotas).Select(x => x.Id);

                    string modeStr = df["Mode"].Value is IList <string>?(df["Mode"].Value as IList <string>)[0] : df["Mode"].Value as string;

                    switch (modeStr)
                    {
                    case "Sale":
                        query.PropertyIn(x => x.Id, subQuery); break;

                    case "Deal":
                        query.PropertyNotIn(x => x.Id, subQuery); break;

                    default:
                        throw new Exception("Неверное значение входного параметра.");
                    }
                }
            }

            df.Delete("DealId");
            df.Delete("Mode");

            base.CreateFilter <T>(criteria);
        }
        public IList <AccountingPriceList> GetFilteredList(object state, ParameterString parameterString, User user)
        {
            Func <ISubCriteria <AccountingPriceList>, ISubCriteria <AccountingPriceList> > cond = null;

            short storageId = 0;

            if (parameterString.Keys.Contains("Storage"))
            {
                if (!String.IsNullOrEmpty(parameterString["Storage"].Value as string))
                {
                    storageId = Convert.ToInt16(parameterString["Storage"].Value);
                    cond      = crit => { crit.Select(x => x.Id).Restriction <Storage>(x => x.Storages).Where(x => x.Id == storageId); return(crit); };
                }
                parameterString.Delete("Storage");
            }

            switch (user.GetPermissionDistributionType(Permission.AccountingPriceList_List_Details))
            {
            case PermissionDistributionType.None:
                return(new List <AccountingPriceList>());

            case PermissionDistributionType.Personal:
                parameterString.Add("Curator", ParameterStringItem.OperationType.Eq, user.Id.ToString());
                break;

            case PermissionDistributionType.Teams:
                var list = user.Teams.SelectMany(x => x.Storages).Distinct().ToList();

                if (storageId > 0)
                {
                    cond = crit => { crit.Select(x => x.Id).Restriction <Storage>(x => x.Storages).OneOf(x => x.Id, list.Select(x => x.Id)).Where(x => x.Id == storageId); return(crit); };
                }
                else
                {
                    cond = crit => { crit.Select(x => x.Id).Restriction <Storage>(x => x.Storages).OneOf(x => x.Id, list.Select(x => x.Id)); return(crit); };
                }
                break;
            }

            return(accountingPriceListRepository.GetFilteredList(state, parameterString, cond: cond));
        }