/// <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>()); }
/// <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 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>()); }
/// <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)); }
/// <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="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)); }
/// <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)); }