/// <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"); } }
/// <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)); }