private ISubQuery GetWaybillSourceSubQuery(ISubQuery waybillRowsSubQuery, WaybillType waybillType)
 {
     return(SubQuery <WaybillRowArticleMovement>()
            .PropertyIn(x => x.DestinationWaybillRowId, waybillRowsSubQuery)
            .Where(x => x.SourceWaybillType == waybillType)
            .Select(x => x.SourceWaybillRowId));
 }
Пример #2
0
        /// <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);
        }
Пример #3
0
 /// <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>());
 }
Пример #4
0
        /**
         * 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>());
 }
Пример #6
0
 /// <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>());
 }
Пример #7
0
 /// <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>());
 }
Пример #8
0
 /// <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));
        }
Пример #10
0
        /// <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));
        }
Пример #11
0
        /// <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));
        }
Пример #12
0
        /// <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));
        }
Пример #13
0
        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))));
        }
Пример #16
0
        /// <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);
        }
Пример #17
0
        /// <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());
        }
Пример #19
0
        /// <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);
            }   // иначе ничего не делаем.
        }
Пример #20
0
        /// <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);
 }
Пример #22
0
        /// <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>());
        }
Пример #23
0
        /// <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;   // меняем значение показателя
                    }
                }
            }
        }
Пример #26
0
 /// <summary>
 /// Проверка наличия возвратов (в любом статусе) по позициям реализаций
 /// </summary>
 /// <param name="saleWaybillRowsSubQuery">Подзапрос на позиции реализаций</param>
 /// <returns>True - возвраты имеются</returns>
 public bool AreReturnFromClientWaybillRowsForSaleWaybillRows(ISubQuery saleWaybillRowsSubQuery)
 {
     return(Query <ReturnFromClientWaybillRow>().PropertyIn("SaleWaybillRow.Id", saleWaybillRowsSubQuery).Count() > 0);
 }
Пример #27
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));
        }
Пример #28
0
        /// <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>());
        }
Пример #29
0
        /// <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);
        }
Пример #30
0
 /// <summary>
 /// Получение списка позиций накладных возврата от клиента по подзапросу
 /// </summary>
 public IEnumerable <ReturnFromClientWaybillRow> GetRows(ISubQuery rowsSubQuery)
 {
     return(base.GetRows <ReturnFromClientWaybillRow>(rowsSubQuery));
 }
Пример #31
0
 protected virtual ISubQuery VisitSubQueryRef(ISubQuery node)
 {
     this.Visit(node.Query);
     return node;
 }