Exemple #1
0
        /// <summary>
        /// Получить список накладных возврата товара от клиента, дата принятия которых находится в диапазоне дат, по подзапросу сделок и списку команд
        /// </summary>
        /// <param name="allDealSubQuery">Подкритерий, ограничивающий множество сделок (без учета видимости)</param>
        /// <param name="teamDealSubQuery">Подкритерий, ограничивающий множество сделок (командная видимость)</param>
        /// <param name="personalDealSubQuery">Подкритерий, ограничивающий множество сделок (персональная видимость)</param>
        /// <param name="teamIdList">Список кодов команд. Null - все команды</param>
        /// <param name="startDate">Начальная дата</param>
        /// <param name="endDate">Конечная дата</param>
        /// <param name="user">Пользователь</param>
        private IDictionary <Guid, ReturnFromClientWaybill> GetReceiptedListInDateRangeByDealSubQuery(ISubQuery allDealSubQuery, ISubQuery teamDealSubQuery, ISubQuery personalDealSubQuery,
                                                                                                      IEnumerable <short> teamIdList, DateTime startDate, DateTime endDate, User user)
        {
            var dealSubQuery = dealIndicatorService.GetDealSubQueryByPermissionDistribution(allDealSubQuery, teamDealSubQuery, personalDealSubQuery,
                                                                                            Permission.ReturnFromClientWaybill_List_Details, user);

            ISubCriteria <Team> teamSubQuery = null;

            switch (user.GetPermissionDistributionType(Permission.Team_List_Details))
            {
            case PermissionDistributionType.All:
                teamSubQuery = teamRepository.GetTeamSubQueryByAllPermission();
                break;

            case PermissionDistributionType.Teams:
            case PermissionDistributionType.Personal:
                teamSubQuery = teamRepository.GetTeamSubQueryByTeamPermission(user.Id);
                break;

            case PermissionDistributionType.None:
                teamSubQuery = teamRepository.GetTeamSubQueryByNonePermission();
                break;
            }

            return(dealSubQuery != null?returnFromClientWaybillRepository.GetReceiptedListInDateRangeByDealSubQuery(startDate, endDate, dealSubQuery, teamIdList, teamSubQuery) :
                       new Dictionary <Guid, ReturnFromClientWaybill>());
        }
        /// <summary>
        /// Получить список оплат и возвратов оплат, дата которых находится в диапазоне дат, по подзапросу сделок
        /// </summary>
        /// <param name="startDate">Начальная дата</param>
        /// <param name="endDate">Конечная дата</param>
        /// <param name="dealSubQuery">Подзапрос сделок</param>
        /// <param name="teamIdList">Список кодов команд, оплаты по которым нужно учесть. null - учитываюстя все</param>
        /// <param name="teamSubQuery">Подзапрос на видимые команды</param>
        /// <param name="userIdList">Список кодов пользователей, оплаты по которым нужно учесть. null - учитываюстя все</param>
        /// <param name="userSubQuery">Подзапрос на видимых пользователей</param>
        public IDictionary <Guid, DealPayment> GetListInDateRangeByDealSubQuery(DateTime startDate, DateTime endDate, ISubQuery dealSubQuery, IEnumerable <short> teamIdList,
                                                                                ISubCriteria <Team> teamSubQuery, IEnumerable <int> userIdList, ISubCriteria <User> userSubQuery)
        {
            var result = Query <DealPayment>();

            if (teamIdList != null)
            {
                result = result.OneOf(x => x.Team.Id, teamIdList);
            }
            else
            {
                result = result.PropertyIn(x => x.Team.Id, teamSubQuery);
            }

            if (userIdList != null)
            {
                result = result.OneOf(x => x.User.Id, userIdList);
            }
            else if (userSubQuery != null)
            {
                result = result.PropertyIn(x => x.User.Id, userSubQuery);
            }

            return(result.Where(x => x.Date >= startDate && x.Date <= endDate)
                   .PropertyIn(x => x.Deal, dealSubQuery)
                   .ToList <DealPayment>()
                   .ToDictionary <DealPayment, Guid>(x => x.Id));
        }
        /// <summary>
        /// Получение списка накладных по МХ, кураторам в диапозоне дат
        /// </summary>
        /// <param name="logicState">Статус накладной</param>
        /// <param name="stateList">Список статусов, которые могут иметь накладные</param>
        /// <param name="storageIdList">Список кодов МХ</param>
        /// <param name="storageSubQuery">Подзапрос на видимые МХ</param>
        /// <param name="curatorIdList">Список кодов кураторов</param>
        /// <param name="curatorSubQuery">Подзапрос на видимых кураторов</param>
        /// <param name="startDate">Начало интервала</param>
        /// <param name="endDate">Конец интервала</param>
        /// <param name="writeoffWaybillSubQuery">Подзапрос на видимые накладные</param>
        /// <param name="dateType">Тип даты</param>
        /// <param name="priorToDate">Параметр "До даты"</param>
        /// <returns>Список накладных</returns>
        public IEnumerable <WriteoffWaybill> GetList(WriteoffWaybillLogicState logicState, ISubCriteria <WriteoffWaybill> writeoffWaybillSubQuery, IEnumerable <short> storageIdList,
                                                     ISubCriteria <Storage> storageSubQuery, IEnumerable <int> curatorIdList, ISubCriteria <User> curatorSubQuery, DateTime startDate, DateTime endDate,
                                                     int pageNumber, WaybillDateType dateType, DateTime?priorToDate)
        {
            var crit = Query <WriteoffWaybill>();

            GetDateTypeCriteria(startDate, endDate, dateType, ref crit);
            GetLogicStateCriteria(logicState, dateType, priorToDate, ref crit);

            crit.PropertyIn(x => x.Id, writeoffWaybillSubQuery)
            .PropertyIn(x => x.SenderStorage.Id, storageSubQuery)
            .PropertyIn(x => x.Curator.Id, curatorSubQuery)
            .OrderByAsc(x => x.Id);

            if (dateType != WaybillDateType.Date)
            {
                var stateList = GetStatelistForWriteoffWaybill(logicState);
                crit.OneOf(x => x.State, stateList);
            }
            if (storageIdList != null)
            {
                crit.OneOf(x => x.SenderStorage.Id, storageIdList);
            }
            if (curatorIdList != null)
            {
                crit.OneOf(x => x.Curator.Id, curatorIdList);
            }

            return(crit.SetFirstResult(100 * (pageNumber - 1)).SetMaxResults(100).ToList <WriteoffWaybill>());
        }
Exemple #4
0
        /// <summary>
        /// Получение списка накладных
        /// </summary>
        /// <param name="logicState">Статус накладной</param>
        /// <param name="storageIdList">Список кодов мест хранения</param>
        /// <param name="storagePermission">Право, которым определяются доступные места хранения</param>
        /// <param name="curatorIdList">Список кодов кураторов</param>
        /// <param name="curatorPermission">Право, которым определяются доступные пользователи</param>
        /// <param name="startDate">Начальная дата</param>
        /// <param name="endDate">Конечная дата</param>
        /// <param name="pageNumber">Номер страницы, первая 1.</param>
        /// <param name="dateType">Тип даты</param>
        /// <param name="priorToDate">Параметр "До даты"</param>
        /// <param name="user">Пользователь</param>
        /// <returns>Список накладных</returns>
        public IEnumerable <MovementWaybill> GetList(MovementWaybillLogicState logicState, IEnumerable <short> storageIdList, Permission storagePermission,
                                                     IEnumerable <int> curatorIdList, Permission curatorPermission, DateTime startDate, DateTime endDate, int pageNumber,
                                                     WaybillDateType dateType, DateTime?priorToDate, User user)
        {
            ISubCriteria <Storage>         storageSubQuery         = null;
            ISubCriteria <User>            curatorSubQuery         = null;
            ISubCriteria <MovementWaybill> movementWaybillSubQuery = null;

            switch (user.GetPermissionDistributionType(storagePermission))
            {
            case PermissionDistributionType.All:
                storageSubQuery = storageRepository.GetStorageSubQueryByAllPermission();
                break;

            case PermissionDistributionType.Teams:
                storageSubQuery = storageRepository.GetStorageSubQueryByTeamPermission(user.Id);
                break;

            case PermissionDistributionType.None:
                return(new List <MovementWaybill>());
            }

            switch (user.GetPermissionDistributionType(curatorPermission))
            {
            case PermissionDistributionType.All:
                curatorSubQuery = userRepository.GetUserSubQueryByAllPermission();
                break;

            case PermissionDistributionType.Teams:
                curatorSubQuery = userRepository.GetUserSubQueryByTeamPermission(user.Id);
                break;

            case PermissionDistributionType.None:
                return(new List <MovementWaybill>());
            }

            switch (user.GetPermissionDistributionType(Permission.MovementWaybill_List_Details))
            {
            case PermissionDistributionType.All:
                movementWaybillSubQuery = movementWaybillRepository.GetMovementWaybillSubQueryByAllPermission();
                break;

            case PermissionDistributionType.Teams:
                movementWaybillSubQuery = movementWaybillRepository.GetMovementWaybillSubQueryByTeamPermission(user.Id);
                break;

            case PermissionDistributionType.Personal:
                movementWaybillSubQuery = movementWaybillRepository.GetMovementWaybillSubQueryByPersonalPermission(user.Id);
                break;

            case PermissionDistributionType.None:
                return(new List <MovementWaybill>());
            }

            return(movementWaybillRepository.GetList(logicState, movementWaybillSubQuery, storageIdList, storageSubQuery,
                                                     curatorIdList, curatorSubQuery, startDate, endDate, pageNumber, dateType, priorToDate));
        }
Exemple #5
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");
            }
        }
        /// <summary>
        /// Получение договоров по подзапросу сделок, которые активны в указанный период (есть пересечение временных интервалов)
        /// </summary>
        /// <param name="subQuery">Подзапрос сделок</param>
        /// <returns></returns>
        public IEnumerable <ClientContract> GetList(DateTime startDate, DateTime endDate, ISubCriteria <Deal> subQuery)
        {
            ISubCriteria <Deal> sq = null;

            if (subQuery != null)
            {
                sq = SubQuery <Deal>().PropertyIn(x => x.Id, subQuery).Select(x => x.Contract.Id);
            }

            var result = Query <ClientContract>()
                         .Where(x => (x.StartDate >= startDate && x.StartDate <= endDate) || (x.EndDate >= startDate && x.EndDate <= endDate) ||
                                (x.StartDate < startDate && x.EndDate == null));

            if (sq != null)
            {
                result = result.PropertyIn(x => x.Id, sq);
            }

            return(result.ToList <ClientContract>());
        }
        /// <summary>
        /// Получение списка накладных по МХ, кураторам и клиентам в диапозоне дат
        /// </summary>
        /// <param name="logicState">Статус накладной</param>
        /// <param name="expenditureWaybillSubQuery">Подзапрос на видимые накладные</param>
        /// <param name="storageIdList">Список кодов МХ</param>
        /// <param name="storageSubQuery">Подзапрос на видимые МХ</param>
        /// <param name="curatorIdList">Список кодов кураторов</param>
        /// <param name="curatorSubQuery">Подзапрос на видимых кураторов</param>
        /// <param name="clientIdList">Список кодов выбранных клиентов. (Подзапроса нет, т.к. они или видны все или не видны вовсе)</param>
        /// <param name="startDate">Начало интервала</param>
        /// <param name="endDate">Конец интервала</param>
        /// <param name="dateType">Тип даты</param>
        /// <param name="priorToDate">Параметр "До даты"</param>
        /// <returns>Список накладных</returns>
        public IEnumerable <ExpenditureWaybill> GetList(ExpenditureWaybillLogicState logicState, ISubCriteria <ExpenditureWaybill> expenditureWaybillSubQuery, IEnumerable <short> storageIdList,
                                                        ISubCriteria <Storage> storageSubQuery, IEnumerable <int> curatorIdList, ISubCriteria <User> curatorSubQuery, IEnumerable <int> clientIdList, DateTime startDate,
                                                        DateTime endDate, int pageNumber, WaybillDateType dateType, DateTime?priorToDate)
        {
            var crit = Query <ExpenditureWaybill>();

            GetDateTypeCriteria(startDate, endDate, dateType, ref crit);
            GetLogicStateCriteria(logicState, dateType, priorToDate, ref crit);

            crit.PropertyIn(x => x.Id, expenditureWaybillSubQuery)
            .PropertyIn(x => x.SenderStorage.Id, storageSubQuery)
            .PropertyIn(x => x.Curator.Id, curatorSubQuery)
            .OrderByAsc(x => x.Id);

            if (dateType != WaybillDateType.Date)
            {
                var stateList = GetStateListForExpenditureWaybill(logicState);
                crit.OneOf(x => x.State, stateList);
            }
            if (storageIdList != null)
            {
                crit.OneOf(x => x.SenderStorage.Id, storageIdList);
            }
            if (curatorIdList != null)
            {
                crit.OneOf(x => x.Curator.Id, curatorIdList);
            }
            if (clientIdList != null)
            {
                // т.к. если на прямую написать .Oneof(x => x.Deal.Client.Id, clientIdList), то он не может разрешиться путь "Deal.Client.Id"
                var sq = SubQuery <Deal>()
                         .OneOf(x => x.Client.Id, clientIdList)
                         .Select(x => x.Id);
                crit.PropertyIn(x => x.Deal.Id, sq);
            }

            return(crit.SetFirstResult(100 * (pageNumber - 1)).SetMaxResults(100).ToList <ExpenditureWaybill>());
        }
Exemple #8
0
        /// <summary>
        /// Получить договора по видимым сделкам, которые открыты в заданном временном интервале
        /// </summary>
        /// <param name="startDate">дата начала интервала</param>
        /// <param name="endDate">дата окончания интервала</param>
        /// <param name="user">Пользователь</param>
        /// <returns></returns>
        public IEnumerable <ClientContract> GetList(DateTime startDate, DateTime endDate, User user)
        {
            ISubCriteria <Deal> subQuery = null;

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

            case PermissionDistributionType.Personal:
                subQuery = dealRepository.GetSubQueryForDealIdOnPersonalPermission(user.Id).Select(y => y.Id);
                break;

            case PermissionDistributionType.Teams:
                subQuery = dealRepository.GetSubQueryForDealIdOnTeamPermission(user.Id).Select(y => y.Id);
                break;

            case PermissionDistributionType.All:
                break;
            }

            return(clientContractRepository.GetList(startDate, endDate, subQuery));
        }
Exemple #9
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));
        }
Exemple #10
0
        /// <summary>
        /// Получить список корректировок сальдо, дата которых находится в диапазоне дат, по подзапросу сделок
        /// </summary>
        /// <param name="startDate">Начальная дата</param>
        /// <param name="endDate">Конечная дата</param>
        /// <param name="dealSubQuery">Подзапрос сделок</param>
        /// <param name="teamIdList">Список кодов команд</param>
        /// <param name="teamSubQuery">Подзапрос на видимые команды</param>
        public IDictionary <Guid, DealInitialBalanceCorrection> GetListInDateRangeByDealSubQuery(DateTime startDate, DateTime endDate, ISubQuery dealSubQuery, IEnumerable <short> teamIdList,
                                                                                                 ISubCriteria <Team> teamSubQuery)
        {
            var result = Query <DealInitialBalanceCorrection>();

            if (teamIdList != null)
            {
                result = result.OneOf(x => x.Team.Id, teamIdList);
            }
            else
            {
                result = result.PropertyIn(x => x.Team.Id, teamSubQuery);
            }

            return(result.Where(x => x.Date >= startDate && x.Date <= endDate)
                   .PropertyIn(x => x.Deal, dealSubQuery)
                   .ToList <DealInitialBalanceCorrection>()
                   .ToDictionary <DealInitialBalanceCorrection, Guid>(x => x.Id));
        }
Exemple #11
0
        /// <summary>
        /// Получение списка видимых сделок по активным договорам за указанный период
        /// </summary>
        /// <param name="startDate">Начальная дата интервала</param>
        /// <param name="endDate">Конечная дата интервала</param>
        /// <param name="deals">Подзапрос на видимые сделки</param>
        /// <returns>Список сделок</returns>
        public IEnumerable <Deal> GetListByActiveContract(DateTime startDate, DateTime endDate, ISubCriteria <Deal> deals)
        {
            var sq = SubQuery <ClientContract>()
                     .Where(x => x.StartDate <= endDate && (x.EndDate >= startDate || x.EndDate == null))
                     .Select(x => x.Id);

            return(Query <Deal>()
                   .PropertyIn(x => x.Contract.Id, sq)
                   .PropertyIn(x => x.Id, deals)
                   .ToList <Deal>());
        }
 /// <summary>
 /// Получение списка сущностей по Id с учетом подкритерия для видимости
 /// </summary>
 /// <param name="idList">Список идентификаторов сущности</param>
 /// <returns>Словарь сущностей</returns>
 public IDictionary <Guid, DealDebitInitialBalanceCorrection> GetById(IEnumerable <Guid> idList, ISubCriteria <Deal> dealSubQuery)
 {
     return(Query <DealDebitInitialBalanceCorrection>()
            .OneOf(x => x.Id, idList.Distinct())
            .PropertyIn(x => x.Deal, dealSubQuery)
            .ToList <DealDebitInitialBalanceCorrection>()
            .ToDictionary(x => x.Id));
 }
 /// <summary>
 /// Получение списка накладных по Id с учетом подкритерия для видимости
 /// </summary>
 /// <param name="idList">Список идентификаторов накладных</param>
 /// <returns>Словарь сущностей</returns>
 public IDictionary <Guid, ExpenditureWaybill> GetById(IEnumerable <Guid> idList, ISubCriteria <Deal> dealSubQuery)
 {
     return(Query <ExpenditureWaybill>()
            .OneOf(x => x.Id, idList.Distinct())
            .PropertyIn(x => x.Deal, dealSubQuery)
            .ToList <ExpenditureWaybill>()
            .ToDictionary(x => x.Id));
 }