/// <summary>
        /// Добавить в запрос условие соответсвующее полю "До даты"
        /// </summary>
        private void GetLogicStateCriteria(WriteoffWaybillLogicState logicState, WaybillDateType dateType, DateTime?priorToDate,
                                           ref ICriteria <WriteoffWaybill> crit)
        {
            if (dateType != WaybillDateType.Date)
            {
                return;
            }

            switch (logicState)
            {
            case WriteoffWaybillLogicState.All:
                break;

            case WriteoffWaybillLogicState.ExceptNotAccepted:
                crit.Where(x => x.AcceptanceDate <= priorToDate);
                break;

            case WriteoffWaybillLogicState.NotAccepted:
                crit.Where(x => x.AcceptanceDate > priorToDate || x.AcceptanceDate == null);
                break;

            case WriteoffWaybillLogicState.ReadyToWriteoff:
                crit.Where(x => x.AcceptanceDate <= priorToDate);
                break;

            case WriteoffWaybillLogicState.Writtenoff:
                crit.Where(x => x.WriteoffDate <= priorToDate);
                break;

            default:
                throw new Exception("Непредусмотренный статус накладной.");
            }
        }
        /// <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 #3
0
        /// <summary>
        /// Добавить в запрос условие соответсвующее полю "В диапозон должна попадать"
        /// </summary>
        private void GetDateTypeCriteria(DateTime startDate, DateTime endDate, WaybillDateType dateType,
                                         ref ICriteria <MovementWaybill> crit)
        {
            switch (dateType)
            {
            case WaybillDateType.Date:
                crit.Where(x => x.Date >= startDate && x.Date <= endDate);
                break;

            case WaybillDateType.AcceptanceDate:
                crit.Where(x => x.AcceptanceDate >= startDate && x.AcceptanceDate <= endDate);
                break;

            case WaybillDateType.ShippingDate:
                crit.Where(x => x.ShippingDate >= startDate && x.ShippingDate <= endDate);
                break;

            case WaybillDateType.ReceiptDate:
                crit = crit.Where(x => x.ReceiptDate >= startDate && x.ReceiptDate <= endDate);
                break;

            default:
                throw new Exception("Непредусмотренный тип даты.");
            }
        }
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 GetLogicStateCriteria(MovementWaybillLogicState logicState, WaybillDateType dateType, DateTime?priorToDate,
                                           ref ICriteria <MovementWaybill> crit)
        {
            if (dateType != WaybillDateType.Date)
            {
                return;
            }

            switch (logicState)
            {
            case MovementWaybillLogicState.All:
                break;

            case MovementWaybillLogicState.Accepted:
                crit.Where(x => x.AcceptanceDate <= priorToDate);
                break;

            case MovementWaybillLogicState.NotReceipted:
                crit.Where(x => x.ReceiptDate > priorToDate || x.ReceiptDate == null);
                break;

            case MovementWaybillLogicState.NotShipped:
                crit.Where(x => x.ShippingDate > priorToDate || x.ShippingDate == null);
                break;

            case MovementWaybillLogicState.AcceptedNotReceipted:
                crit.Where(x => (x.AcceptanceDate <= priorToDate) && (x.ReceiptDate > priorToDate || x.ReceiptDate == null));
                break;

            case MovementWaybillLogicState.Shipped:
                crit.Where(x => x.ShippingDate <= priorToDate);
                break;

            case MovementWaybillLogicState.NotAccepted:
                crit.Where(x => x.AcceptanceDate > priorToDate || x.AcceptanceDate == null);
                break;

            case MovementWaybillLogicState.AcceptedNotShipped:
                crit.Where(x => (x.AcceptanceDate <= priorToDate) && (x.ShippingDate > priorToDate || x.ShippingDate == null));
                break;

            case MovementWaybillLogicState.ShippedNotReceipted:
                crit.Where(x => (x.ShippingDate <= priorToDate) && (x.ReceiptDate > priorToDate || x.ReceiptDate == null));
                break;

            case MovementWaybillLogicState.Receipted:
                crit.Where(x => x.ReceiptDate <= priorToDate);
                break;

            default:
                throw new Exception("Непредусмотренный статус накладной.");
            }
        }
Exemple #6
0
        /// <summary>
        /// Получение списка накладных по МХ, кураторам и клиентам в диапозоне дат
        /// </summary>
        /// <param name="logicState">Статус накладной</param>
        /// <param name="returnFromClientWaybillSubQuery">Подзапрос на видимые накладные</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 <ReturnFromClientWaybill> GetList(ReturnFromClientWaybillLogicState logicState, ISubCriteria <ReturnFromClientWaybill> returnFromClientWaybillSubQuery,
                                                             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 <ReturnFromClientWaybill>();

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

            crit.PropertyIn(x => x.Id, returnFromClientWaybillSubQuery)
            .PropertyIn(x => x.RecipientStorage.Id, storageSubQuery)
            .PropertyIn(x => x.Curator.Id, curatorSubQuery)
            .OrderByAsc(x => x.Id);

            if (dateType != WaybillDateType.Date)
            {
                var stateList = GetStateListForReturnFromClientWaybill(logicState);
                crit.OneOf(x => x.State, stateList);
            }
            if (storageIdList != null)
            {
                crit.OneOf(x => x.RecipientStorage.Id, storageIdList);
            }
            if (curatorIdList != null)
            {
                crit.OneOf(x => x.Curator.Id, curatorIdList);
            }
            if (clientIdList != null)
            {
                // т.к. напрямую не может разрезолвить путь "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 <ReturnFromClientWaybill>());
        }