private ISubQuery GetWaybillSourceSubQuery(ISubQuery waybillRowsSubQuery, WaybillType waybillType) { return(SubQuery <WaybillRowArticleMovement>() .PropertyIn(x => x.DestinationWaybillRowId, waybillRowsSubQuery) .Where(x => x.SourceWaybillType == waybillType) .Select(x => x.SourceWaybillRowId)); }
/// <summary> /// Получить список хоз. субъектов по подзапросу сделок (выбираются субъекты из организаций договоров этих сделок) /// </summary> public void GetDealEconomicAgentList(ISubQuery dealSubQuery, out IDictionary <int, JuridicalPerson> juridicalPersonList, out IDictionary <int, PhysicalPerson> physicalPersonList) { var contractSubQuery = SubQuery <Deal>() .PropertyIn(x => x.Id, dealSubQuery) .Select(x => x.Contract.Id); var accountOrganizationSubQuery = SubQuery <ClientContract>() .PropertyIn(x => x.Id, contractSubQuery) .Select(x => x.AccountOrganization.Id); var economicAgentSubQuery = SubQuery <AccountOrganization>() .PropertyIn(x => x.Id, accountOrganizationSubQuery) .Select(x => x.EconomicAgent.Id); juridicalPersonList = Query <JuridicalPerson>() .PropertyIn(x => x.Id, economicAgentSubQuery) .ToList <JuridicalPerson>() .Distinct() .ToDictionary(x => x.Id); physicalPersonList = Query <PhysicalPerson>() .PropertyIn(x => x.Id, economicAgentSubQuery) .ToList <PhysicalPerson>() .Distinct() .ToDictionary(x => x.Id); }
/// <summary> /// Получение списка связей по подзапросу для позиций накладной /// </summary> /// <param name="waybillRowsSubQuery">Подзапросу для позиций накладной</param> /// <param name="storageId">Код МХ для фильтрации связей</param> /// <param name="accountOrganizationId">Код собственной организации для фильтрации связей</param> public IEnumerable <AccountingPriceListWaybillTaking> GetList(ISubQuery waybillRowsSubQuery, short storageId, int accountOrganizationId) { return(Query <AccountingPriceListWaybillTaking>() .Where(x => x.AccountOrganizationId == accountOrganizationId && x.StorageId == storageId) .PropertyIn(x => x.WaybillRowId, waybillRowsSubQuery) .ToList <AccountingPriceListWaybillTaking>()); }
/** * Creates a new SubQuery as a blank node in a given Model. * @param model the Model to create the SubQuery in * @param subQuery the nested query * @return a new SubQuery */ public static ISubQuery createSubQuery(SpinProcessor model, IQuery subQuery) { ISubQuery result = (ISubQuery)model.CreateResource(SP.ClassSubQuery).As(typeof(SubQueryImpl)); result.AddProperty(SP.PropertyQuery, subQuery); return(result); }
/// <summary> /// Получение списка показателей по параметрам >= указанной даты /// </summary> public IEnumerable <T> GetFrom(DateTime startDate, ISubQuery storageSubQuery) { return(Query <T>() .PropertyIn(x => x.StorageId, storageSubQuery) .Where(x => x.EndDate > startDate || x.EndDate == null) .ToList <T>()); }
/// <summary> /// Получение списка показателей по списку партий, МХ и организации на дату /// </summary> public IEnumerable <T> GetList(ISubQuery articleBatchIds, short storageId, int accountOrganizationId, DateTime date) { return(repository.Query <T>() .PropertyIn(x => x.BatchId, articleBatchIds) .Where(x => x.StartDate <= date && (x.EndDate > date || x.EndDate == null)) .Where(x => x.StorageId == storageId && x.AccountOrganizationId == accountOrganizationId && x.Count != 0) .ToList <T>()); }
/// <summary> /// Получение списка показателей по параметрам по всем товарам /// </summary> /// <param name="storages"></param> /// <param name="articleGroups"></param> /// <param name="date"></param> /// <returns></returns> public IEnumerable <T> GetList(ISubQuery storageIds, DateTime date) { return(repository.Query <T>() .PropertyIn(x => x.StorageId, storageIds) .Where(x => x.StartDate <= date && (x.EndDate > date || x.EndDate == null)) .Where(x => x.Count != 0) .ToList <T>()); }
/// <summary> /// Получение списка показателей по параметрам /// </summary> /// <param name="storageIds">Подзапрос для списка МХ</param> /// <param name="articleIds">Подзапрос для списка товаров</param> /// <param name="date"></param> /// <returns></returns> public IEnumerable <T> GetList(ISubQuery storageIds, ISubQuery articleIds, DateTime date) { // получаем все значения по критерию return(repository.Query <T>() .PropertyIn(x => x.StorageId, storageIds) .PropertyIn(x => x.ArticleId, articleIds) .Where(x => x.StartDate <= date && (x.EndDate > date || x.EndDate == null)) .Where(x => x.Count != 0) .ToList <T>()); }
/// <summary> /// Получение списка показателей по параметрам /// </summary> public IEnumerable <ArticleAccountingPriceIndicator> GetList(ISubQuery storageIds, ISubQuery articleIds, DateTime date) { // получаем все значения по критерию var list = articleAccountingPriceIndicatorRepository.Query <ArticleAccountingPriceIndicator>() .PropertyIn(x => x.ArticleId, articleIds) .PropertyIn(x => x.StorageId, storageIds) .Where(x => x.StartDate <= date && (x.EndDate > date || x.EndDate == null)) .ToList <ArticleAccountingPriceIndicator>(); return(FilterActualIndicators(list)); }
/// <summary> /// Получение списка позиций принятых накладных (поступивших в точное наличие) /// </summary> /// <param name="storageIdsSubQuery">Подзапрос для кодов МХ</param> /// <param name="articleIdsSubQuery">Подзапрос для кодов товаров</param> /// <param name="date">Дата выборки</param> public IEnumerable <IncomingWaybillRow> GetReceiptedWaybillRows(ISubQuery storageIdsSubQuery, ISubQuery articleIdsSubQuery, DateTime date) { var receiptWaybillRows = receiptWaybillRepository.GetReceiptedWaybillRows(storageIdsSubQuery, articleIdsSubQuery, date).Select(x => ConvertToIncomingWaybillRow(x)); var movementWaybillRows = movementWaybillRepository.GetReceiptedWaybillRows(storageIdsSubQuery, articleIdsSubQuery, date).Select(x => ConvertToIncomingWaybillRow(x)); var changeOwnerWaybillRows = changeOwnerWaybillRepository.GetReceiptedWaybillRows(storageIdsSubQuery, articleIdsSubQuery, date).Select(x => ConvertToIncomingWaybillRow(x)); var returnFromClientWaybillRows = returnFromClientWaybillRepository.GetReceiptedWaybillRows(storageIdsSubQuery, articleIdsSubQuery, date).Select(x => ConvertToIncomingWaybillRow(x)); return(receiptWaybillRows .Concat(movementWaybillRows) .Concat(changeOwnerWaybillRows) .Concat(returnFromClientWaybillRows)); }
/// <summary> /// Получение позиций входящих накладных, проведенных до указанной даты и из которых на текущий момент возможно зарезервировать товар /// </summary> /// <param name="articleBatchSubquery">Подзапрос для партий товаров</param> /// <param name="storage">МХ</param> /// <param name="organization">Собственная организация</param> /// <param name="date">Дата, ограничивающая дату проводки выбираемых накладных</param> public IEnumerable <IncomingWaybillRow> GetAvailableToReserveList(ISubQuery articleBatchSubquery, Storage storage, AccountOrganization organization, DateTime date) { var receiptWaybillRows = receiptWaybillRepository.GetAvailableToReserveRows(articleBatchSubquery, storage, organization, date).Select(x => ConvertToIncomingWaybillRow(x)); var movementWaybillRows = movementWaybillRepository.GetAvailableToReserveRows(articleBatchSubquery, storage, organization, date).Select(x => ConvertToIncomingWaybillRow(x)); var changeOwnerWaybillRows = changeOwnerWaybillRepository.GetAvailableToReserveRows(articleBatchSubquery, storage, organization, date).Select(x => ConvertToIncomingWaybillRow(x)); var returnFromClientWaybillRows = returnFromClientWaybillRepository.GetAvailableToReserveRows(articleBatchSubquery, storage, organization, date).Select(x => ConvertToIncomingWaybillRow(x)); return(receiptWaybillRows .Concat(movementWaybillRows) .Concat(changeOwnerWaybillRows) .Concat(returnFromClientWaybillRows)); }
/// <summary> /// Получить список клиентов по подзапросу сделок (выбираются клиенты этих сделок) /// </summary> /// <param name="dealSubQuery">подкритерий сделок</param> public IDictionary <int, Client> GetDealClientList(ISubQuery dealSubQuery) { var subQuery = SubQuery <Deal>() .PropertyIn(x => x.Id, dealSubQuery) .Select(x => x.Client.Id); return(Query <Client>() .PropertyIn(x => x.Id, subQuery) .ToList <Client>() .Distinct() .ToDictionary(x => x.Id)); }
public IEnumerable <IncomingWaybillRow> GetRows(ISubQuery incomingRowsIdSubQuery) { var receiptRows = receiptWaybillRepository.GetRows(incomingRowsIdSubQuery); var movementRows = movementWaybillRepository.GetRows(incomingRowsIdSubQuery); var changeOwnerRows = changeOwnerWaybillRepository.GetRows(incomingRowsIdSubQuery); var returnRows = returnFromClientWaybillRepository.GetRows(incomingRowsIdSubQuery); return(receiptRows.Select(x => ConvertToIncomingWaybillRow(x)) .Concat(movementRows.Select(x => ConvertToIncomingWaybillRow(x))) .Concat(changeOwnerRows.Select(x => ConvertToIncomingWaybillRow(x))) .Concat(returnRows.Select(x => ConvertToIncomingWaybillRow(x)))); }
/// <summary> /// Получение списка позиций проведенных, но не отгруженных накладных /// </summary> /// <param name="storageIdsSubQuery">Подзапрос для кодов МХ</param> /// <param name="articleIdsSubQuery">Подзапрос для кодов товаров</param> /// <param name="date">Дата выборки</param> public IEnumerable <WriteoffWaybillRow> GetAcceptedAndNotShippedWaybillRows(ISubQuery storageIdsSubQuery, ISubQuery articleIdsSubQuery, DateTime date) { var writeoffWaybillSubQuery = SubQuery <WriteoffWaybill>() .Where(x => x.AcceptanceDate < date && (x.WriteoffDate > date || x.WriteoffDate == null)) .PropertyIn(x => x.SenderStorage.Id, storageIdsSubQuery) .Select(x => x.Id); return(Query <WriteoffWaybillRow>() .PropertyIn(x => x.WriteoffWaybill.Id, writeoffWaybillSubQuery) .PropertyIn(x => x.Article.Id, articleIdsSubQuery) .ToList <WriteoffWaybillRow>()); }
/// <summary> /// Получение списка позиций исходящих накладных по подкритерию /// </summary> /// <param name="outgoingRowsIdSubQuery"></param> /// <returns></returns> public IEnumerable <OutgoingWaybillRow> GetRows(ISubQuery outgoingRowsIdSubQuery) { var expenditureWaybillRows = expenditureWaybillRepository.GetRows(outgoingRowsIdSubQuery); var movementWaybillRows = movementWaybillRepository.GetRows(outgoingRowsIdSubQuery); var changeOwnerWaybillRows = changeOwnerWaybillRepository.GetRows(outgoingRowsIdSubQuery); var writeoffWaybillRows = writeoffWaybillRepository.GetRows(outgoingRowsIdSubQuery); return(expenditureWaybillRows.Select(x => ConvertToOutgoingWaybillRow(x)) .Concat(movementWaybillRows.Select(x => ConvertToOutgoingWaybillRow(x))) .Concat(changeOwnerWaybillRows.Select(x => ConvertToOutgoingWaybillRow(x))) .Concat(writeoffWaybillRows.Select(x => ConvertToOutgoingWaybillRow(x)))); }
/// <summary> /// Получить учетные цены в виде массива result[код товара] /// </summary> /// <param name="storageId">Код МХ</param> /// <param name="articleSubQuery">Подзапрос для списка кодов товаров</param> /// <param name="date">Дата</param> /// <returns></returns> public DynamicDictionary <int, decimal?> GetAccountingPrice(short storageId, ISubQuery articleSubQuery) { var result = new DynamicDictionary <int, decimal?>(); foreach (var item in articleAccountingPriceIndicatorService.GetList(new List <short> { storageId }, articleSubQuery, DateTime.Now)) { result[item.ArticleId] = item.AccountingPrice; } return(result); }
/// <summary> /// Получение списка позиций принятых накладных (поступивших в точное наличие) /// </summary> /// <param name="storageIdsSubQuery">Подзапрос для кодов МХ</param> /// <param name="articleIdsSubQuery">Подзапрос для кодов товаров</param> /// <param name="date">Дата выборки</param> public IEnumerable <ChangeOwnerWaybillRow> GetReceiptedWaybillRows(ISubQuery storageIdsSubQuery, ISubQuery articleIdsSubQuery, DateTime date) { var changeOwnerWaybillSubquery = SubQuery <ChangeOwnerWaybill>() .Where(x => x.ChangeOwnerDate < date) .PropertyIn(x => x.Storage.Id, storageIdsSubQuery) .Select(x => x.Id); return(Query <ChangeOwnerWaybillRow>() .PropertyIn(x => x.ChangeOwnerWaybill.Id, changeOwnerWaybillSubquery) .PropertyIn(x => x.Article.Id, articleIdsSubQuery) .Where(x => (x.MovingCount > x.FinallyMovedCount)) // исключаем позиции, по которым ушел весь товар .ToList <ChangeOwnerWaybillRow>()); }
/// <summary> /// Получение списка проведенных РЦ по списку МХ и товаров и действующих на определенный момент /// </summary> /// <param name="storageIdsSubQuery">Подзапрос для кодов МХ</param> /// <param name="articleIdsSubQuery">Подзапрос для кодов товаров</param> /// <param name="minStartDate">Минимальная дата начала действия РЦ</param> /// <param name="date">Дата действия РЦ</param> public IEnumerable <AccountingPriceList> GetOverlappingPriceLists(ISubQuery storageIdsSubQuery, ISubQuery articleIdsSubQuery, DateTime minStartDate, DateTime date) { var query = Query <AccountingPriceList>() .Where(x => x.StartDate <date && x.StartDate> minStartDate && (x.EndDate > date || x.EndDate == null) && x.AcceptanceDate != null); query.Restriction <Storage>(x => x.Storages) .PropertyIn(x => x.Id, storageIdsSubQuery); query.Restriction <ArticleAccountingPrice>(x => x.ArticlePrices) .PropertyIn(x => x.Article, articleIdsSubQuery); return(query.ToList <AccountingPriceList>().Distinct()); }
/// <summary> /// Обновление значения показателя /// </summary> public void Update(short storageId, int accountOrganizationId, ISubQuery batchSubquery, IEnumerable <T> indicators) { // Если список индикаторов не пуст, ... if (indicators.Count() > 0) { // за начальную дату принимаем минимальную дату из индикаторов var startDate = indicators.Select(x => x.StartDate).Min(); // ... то обновляем показатели var fullList = GetFrom(storageId, accountOrganizationId, batchSubquery, startDate, indicators); Update(fullList.ToList(), indicators); } // иначе ничего не делаем. }
/// <summary> /// Приведение подзапроса от интерфейса к объекту класса /// </summary> /// <param name="subQuery"></param> /// <returns></returns> private global::NHibernate.Criterion.DetachedCriteria GetSubCriteria(ISubQuery subQuery) { var baseType = typeof(SubCriteria <>); //Базовый тип подзапроса var genericType = baseType.MakeGenericType(new Type[1] { subCriteria.GetParameterType() }); // Дженерик тип подзапроса var obj = Convert.ChangeType(subQuery, genericType); //Приводим интерфейс к дженерик типу подзапроса var methodCompile = genericType.GetMethod("Compile", Type.EmptyTypes); //Получаем метод компилирования return(methodCompile.Invoke(obj, null) as global::NHibernate.Criterion.DetachedCriteria); //Получаем критерий подзапроса NHibernate }
public IQueryable <T> Set <TResult>(Expression <Func <T, TResult> > column, ISubQuery subquery, bool condition = true) { if (condition) { if (_setBuffer.Length > 0) { _setBuffer.Append(","); } var columns = ExpressionUtil.BuildColumn(column, _param, _prefix).First(); _setBuffer.AppendFormat("{0} = {1}", columns.Value, subquery.Build(_param, _prefix)); } return(this); }
/// <summary> /// Получение списка позиций принятых накладных (поступивших в точное наличие) /// </summary> /// <param name="storageIdsSubQuery">Подзапрос для кодов МХ</param> /// <param name="articleIdsSubQuery">Подзапрос для кодов товаров</param> /// <param name="date">Дата выборки</param> public IEnumerable <ReturnFromClientWaybillRow> GetReceiptedWaybillRows(ISubQuery storageIdsSubQuery, ISubQuery articleIdsSubQuery, DateTime date) { var returnFromClientWaybillSubquery = SubQuery <ReturnFromClientWaybill>() .Where(x => x.ReceiptDate < date) .PropertyIn(x => x.RecipientStorage.Id, storageIdsSubQuery) .Select(x => x.Id); return(Query <ReturnFromClientWaybillRow>() .PropertyIn(x => x.ReturnFromClientWaybill.Id, returnFromClientWaybillSubquery) .PropertyIn(x => x.Article.Id, articleIdsSubQuery) .Where(x => (x.ReturnCount > x.FinallyMovedCount)) // исключаем позиции, по которым ушел весь товар .ToList <ReturnFromClientWaybillRow>()); }
/// <summary> /// Получение позиций накладных, проведенных до указанной даты и из которых на текущий момент возможно зарезервировать товар /// </summary> /// <param name="articleBatchSubquery">Подзапрос для партий товаров</param> /// <param name="storage">МХ</param> /// <param name="organization">Собственная организация</param> /// <param name="date">Дата, ограничивающая дату проводки выбираемых накладных</param> public IEnumerable <ReturnFromClientWaybillRow> GetAvailableToReserveRows(ISubQuery articleBatchSubquery, Storage storage, AccountOrganization organization, DateTime date) { var returnFromClientWaybills = SubQuery <ReturnFromClientWaybill>() .Where(x => x.RecipientStorage.Id == storage.Id && x.Recipient.Id == organization.Id && x.AcceptanceDate < date) .Select(x => x.Id); return(Query <ReturnFromClientWaybillRow>() .PropertyIn(x => x.ReturnFromClientWaybill, returnFromClientWaybills) .Where(x => x.AvailableToReserveCount > 0) .Restriction <ReceiptWaybillRow>(x => x.ReceiptWaybillRow) .PropertyIn(x => x.Id, articleBatchSubquery) .ToList <ReturnFromClientWaybillRow>()); }
/// <summary> /// Получить список собственных организаций по подзапросу сделок (выбираются организации из договоров этих сделок) /// </summary> /// <param name="dealSubQuery">Подзапрос сделок</param> public IDictionary <int, AccountOrganization> GetDealAccountOrganizationList(ISubQuery dealSubQuery) { var contractSubQuery = SubQuery <Deal>() .PropertyIn(x => x.Id, dealSubQuery) .Select(x => x.Contract.Id); var accountOrganizationSubQuery = SubQuery <ClientContract>() .PropertyIn(x => x.Id, contractSubQuery) .Select(x => x.AccountOrganization.Id); return(Query <AccountOrganization>() .PropertyIn(x => x.Id, accountOrganizationSubQuery) .ToList <AccountOrganization>() .Distinct() .ToDictionary(x => x.Id)); }
/// <summary> /// Обновление значения показателя /// </summary> public void Update(DateTime startDate, ISubQuery storageSubquery, IEnumerable <T> indicators) { // если коллекция показателей пуста - выходим if (!indicators.Any()) { return; } // получение показателей по параметрам, начиная с даты startDate var fullList = articleRevaluationIndicatorRepository.GetFrom(startDate, storageSubquery); foreach (var ind in indicators) { // ищем только по МХ и организации var list = fullList.Where(x => x.StorageId == ind.StorageId && x.AccountOrganizationId == ind.AccountOrganizationId).ToList(); // если нет показателя с датой окончания >= startDate или = null - добавляем его if (!list.Any()) { articleRevaluationIndicatorRepository.Save(ind); } else { // индикатор с минимальной датой начала среди индикаторов из list и сама эта дата var firstIndicator = list.OrderBy(x => x.StartDate).FirstOrDefault(); var minimalStartDate = firstIndicator.StartDate; // если дата нового показателя совпадает с датой начала минимального показателя из list if (startDate == minimalStartDate) { firstIndicator.RevaluationSum += ind.RevaluationSum; // меняем значение показателя } // если дата нового показателя меньше даты начала минимального показателя из list else if (startDate < minimalStartDate) { // добавляем новый показатель var _new = new T(); _new.StartDate = startDate; _new.EndDate = firstIndicator.StartDate; _new.StorageId = ind.StorageId; _new.AccountOrganizationId = ind.AccountOrganizationId; _new.RevaluationSum = ind.RevaluationSum; articleRevaluationIndicatorRepository.Save(_new); firstIndicator.PreviousId = _new.Id; // устанавливаем ссылку на добавленный показатель } // если дата нового показателя больше даты начала минимального показателя из list else { firstIndicator.EndDate = startDate; // завершаем действие текущего показателя // ищем следующий после firstIndicator показатель var secondIndicator = list.Where(x => x.StartDate > startDate).OrderBy(x => x.StartDate).FirstOrDefault(); // добавляем новый показатель после текущего var _new = new T(); _new.StartDate = startDate; _new.StorageId = ind.StorageId; _new.AccountOrganizationId = ind.AccountOrganizationId; _new.RevaluationSum = firstIndicator.RevaluationSum + ind.RevaluationSum; // сумма из текущего показателя + прирост _new.PreviousId = firstIndicator.Id; // выставляем ссылку на предыдущую запись articleRevaluationIndicatorRepository.Save(_new); // если есть следующий после firstIndicator показатель if (secondIndicator != null) { _new.EndDate = secondIndicator.StartDate; secondIndicator.PreviousId = _new.Id; } } // изменяем значение показателей с датой начала > minimalStartDate foreach (var item in list.Where(x => x.StartDate > startDate)) { item.RevaluationSum += ind.RevaluationSum; // меняем значение показателя } } } }
/// <summary> /// Проверка наличия возвратов (в любом статусе) по позициям реализаций /// </summary> /// <param name="saleWaybillRowsSubQuery">Подзапрос на позиции реализаций</param> /// <returns>True - возвраты имеются</returns> public bool AreReturnFromClientWaybillRowsForSaleWaybillRows(ISubQuery saleWaybillRowsSubQuery) { return(Query <ReturnFromClientWaybillRow>().PropertyIn("SaleWaybillRow.Id", saleWaybillRowsSubQuery).Count() > 0); }
/// <summary> /// Получить список накладных возврата товара от клиента, дата принятия которых находится в диапазоне дат, по подзапросу сделок /// </summary> /// <param name="startDate">Начальная дата</param> /// <param name="endDate">Конечная дата</param> /// <param name="dealSubQuery">Подзапрос сделок</param> /// <param name="teamIdList">Список кодов команд, накладные которых нужно учесть. null - учитываются все.</param> /// <param name="teamSubQuery">Подзапрос на видимые сделки</param> public IDictionary <Guid, ReturnFromClientWaybill> GetReceiptedListInDateRangeByDealSubQuery(DateTime startDate, DateTime endDate, ISubQuery dealSubQuery, IEnumerable <short> teamIdList, ISubCriteria <Team> teamSubQuery) { var result = Query <ReturnFromClientWaybill>(); if (teamIdList != null) { result.OneOf(x => x.Team.Id, teamIdList); } else { result = result.PropertyIn(x => x.Team.Id, teamSubQuery); } return(result.Where(x => x.ReceiptDate >= startDate && x.ReceiptDate <= endDate) .PropertyIn(x => x.Deal, dealSubQuery) .ToList <ReturnFromClientWaybill>() .ToDictionary <ReturnFromClientWaybill, Guid>(x => x.Id)); }
/// <summary> /// Получение списка позиций проведенных, но не принятых накладных /// </summary> /// <param name="storageIdsSubQuery">Подзапрос для кодов МХ</param> /// <param name="articleIdsSubQuery">Подзапрос для кодов товаров</param> /// <param name="date">Дата выборки</param> public IEnumerable <ReturnFromClientWaybillRow> GetAcceptedAndNotReceiptedWaybillRows(ISubQuery storageIdsSubQuery, ISubQuery articleIdsSubQuery, DateTime date) { var returnFromClientWaybillSubquery = SubQuery <ReturnFromClientWaybill>() .Where(x => x.AcceptanceDate < date && (x.ReceiptDate > date || x.ReceiptDate == null)) .PropertyIn(x => x.RecipientStorage.Id, storageIdsSubQuery) .Select(x => x.Id); return(Query <ReturnFromClientWaybillRow>() .PropertyIn(x => x.ReturnFromClientWaybill.Id, returnFromClientWaybillSubquery) .PropertyIn(x => x.Article.Id, articleIdsSubQuery) .ToList <ReturnFromClientWaybillRow>()); }
/// <summary> /// Получение позиций, которые использует одну из указанных позиций РЦ. Вернет null, если таких позиций нет. /// </summary> /// <param name="articleAccountingPrices">Подзапрос позиций РЦ</param> /// <param name="rowsCount">Необязательное ограничение на количество возвращаемых позиций</param> /// <returns></returns> public IEnumerable <ReturnFromClientWaybillRow> GetRowsThatUseArticleAccountingPrices(ISubQuery articleAccountingPrices, int?rowsCount = null) { var rowsQuery = Query <ReturnFromClientWaybillRow>().PropertyIn(y => y.ArticleAccountingPrice, articleAccountingPrices); if (rowsCount != null) { rowsQuery.SetMaxResults(1); } var rowsList = rowsQuery.ToList <ReturnFromClientWaybillRow>(); return(rowsList); }
/// <summary> /// Получение списка позиций накладных возврата от клиента по подзапросу /// </summary> public IEnumerable <ReturnFromClientWaybillRow> GetRows(ISubQuery rowsSubQuery) { return(base.GetRows <ReturnFromClientWaybillRow>(rowsSubQuery)); }
protected virtual ISubQuery VisitSubQueryRef(ISubQuery node) { this.Visit(node.Query); return node; }