/// <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>()); }
/// <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("Непредусмотренный тип даты."); } }
/// <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)); }
/// <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("Непредусмотренный статус накладной."); } }
/// <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>()); }