public void HandleDelete_CanDeleteEmployeeTest() { var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(true); using (var uow = UnitOfWorkFactory.CreateWithoutRoot("Тест на обработку удаления сотрудника")) { BuisnessLogicGlobalEventHandler.Init(ask, UnitOfWorkFactory); var nomenclatureType = new ItemsType(); nomenclatureType.Name = "Тестовый тип номенклатуры"; uow.Save(nomenclatureType); var nomenclature = new Nomenclature(); nomenclature.Type = nomenclatureType; uow.Save(nomenclature); var protectionTools = new ProtectionTools(); protectionTools.Name = "СИЗ для тестирования"; protectionTools.AddNomeclature(nomenclature); uow.Save(protectionTools); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Month; normItem.PeriodCount = 2; uow.Save(norm); var employee = new EmployeeCard(); uow.Save(employee); var warehouseOperation = new WarehouseOperation(); var expenseOp = new EmployeeIssueOperation(); expenseOp.OperationTime = warehouseOperation.OperationTime = new DateTime(2019, 1, 1); expenseOp.ExpiryByNorm = new DateTime(2019, 4, 1); expenseOp.ProtectionTools = protectionTools; expenseOp.Employee = employee; expenseOp.Nomenclature = warehouseOperation.Nomenclature = nomenclature; expenseOp.NormItem = normItem; warehouseOperation.Amount = expenseOp.Issued = 1; expenseOp.WarehouseOperation = warehouseOperation; uow.Save(nomenclature); uow.Save(normItem); uow.Save(warehouseOperation); uow.Save(expenseOp); uow.Commit(); //FIXME Временно чтобы переделака не вызвала конфликт мержа в 2.4 Configure.ConfigureDeletion(); var deletion = new DeleteCore(DeleteConfig.Main, uow); deletion.PrepareDeletion(typeof(EmployeeCard), employee.Id, CancellationToken.None); deletion.RunDeletion(CancellationToken.None); } }
protected IQueryOver <WarehouseOperation> ItemsQuery(IUnitOfWork uow) { StockBalanceJournalNode resultAlias = null; WarehouseOperation warehouseExpenseOperationAlias = null; WarehouseOperation warehouseIncomeOperationAlias = null; WarehouseOperation warehouseOperationAlias = null; Nomenclature nomenclatureAlias = null; ItemsType itemTypesAlias = null; MeasurementUnits unitsAlias = null; Size sizeAlias = null; Size heightAlias = null; // null == null => null null <=> null => true var expenseQuery = QueryOver.Of(() => warehouseExpenseOperationAlias) .Where(() => warehouseExpenseOperationAlias.Nomenclature.Id == nomenclatureAlias.Id && (warehouseExpenseOperationAlias.WearSize.Id == sizeAlias.Id || warehouseOperationAlias.WearSize == null && sizeAlias == null) && (warehouseExpenseOperationAlias.Height.Id == heightAlias.Id || warehouseOperationAlias.Height == null && heightAlias == null) && warehouseExpenseOperationAlias.WearPercent == warehouseOperationAlias.WearPercent) .Where(e => e.OperationTime < Filter.Date.AddDays(1)); if (Filter.Warehouse == null) { expenseQuery.Where(x => x.ExpenseWarehouse != null); } else { expenseQuery.Where(x => x.ExpenseWarehouse == Filter.Warehouse); } expenseQuery.Select(Projections .Sum(Projections .Property(() => warehouseExpenseOperationAlias.Amount))); var incomeSubQuery = QueryOver.Of(() => warehouseIncomeOperationAlias) .Where(() => warehouseIncomeOperationAlias.Nomenclature.Id == nomenclatureAlias.Id && (warehouseIncomeOperationAlias.WearSize.Id == sizeAlias.Id || warehouseOperationAlias.WearSize == null && sizeAlias == null) && (warehouseIncomeOperationAlias.Height.Id == heightAlias.Id || warehouseOperationAlias.Height == null && heightAlias == null) && warehouseIncomeOperationAlias.WearPercent == warehouseOperationAlias.WearPercent) .Where(e => e.OperationTime < Filter.Date.AddDays(1)); if (Filter.Warehouse == null) { incomeSubQuery.Where(x => x.ReceiptWarehouse != null); } else { incomeSubQuery.Where(x => x.ReceiptWarehouse == Filter.Warehouse); } incomeSubQuery.Select(Projections .Sum(Projections .Property(() => warehouseIncomeOperationAlias.Amount))); var projection = Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Int32, "( IFNULL(?1, 0) - IFNULL(?2, 0) )"), NHibernateUtil.Int32, Projections.SubQuery(incomeSubQuery), Projections.SubQuery(expenseQuery) ); var queryStock = uow.Session.QueryOver(() => warehouseOperationAlias); queryStock.Where(Filter.ShowNegativeBalance ? Restrictions.Not(Restrictions.Eq(projection, 0)) : Restrictions.Gt(projection, 0)); if (Filter.ItemTypeCategory != null) { queryStock.Where(() => itemTypesAlias.Category == Filter.ItemTypeCategory); } //Если у нас выключена способность показывать общие по всем складам остатки. //Но не указан склад мы должны показывать пустую таблицу. //Это заведомо ложное условие. if (ShowSummary == false && Filter.Warehouse == null) { queryStock.Where(x => x.Id == -1); } if (Filter.ProtectionTools != null) { queryStock.Where(x => x.Nomenclature.IsIn(Filter.ProtectionTools.MatchedNomenclatures.ToArray())); } return(queryStock .JoinAlias(() => warehouseOperationAlias.Nomenclature, () => nomenclatureAlias) .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias) .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias) .JoinAlias(() => warehouseOperationAlias.WearSize, () => sizeAlias, JoinType.LeftOuterJoin) .JoinAlias(() => warehouseOperationAlias.Height, () => heightAlias, JoinType.LeftOuterJoin) .Where(GetSearchCriterion( () => nomenclatureAlias.Number, () => nomenclatureAlias.Name, () => sizeAlias.Name, () => heightAlias.Name)) .SelectList(list => list .SelectGroup(() => nomenclatureAlias.Id).WithAlias(() => resultAlias.Id) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => nomenclatureAlias.Number).WithAlias(() => resultAlias.NomenclatureNumber) .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName) .SelectGroup(() => sizeAlias.Name).WithAlias(() => resultAlias.SizeName) .SelectGroup(() => heightAlias.Name).WithAlias(() => resultAlias.HeightName) .SelectGroup(() => sizeAlias.Id).WithAlias(() => resultAlias.SizeId) .SelectGroup(() => heightAlias.Id).WithAlias(() => resultAlias.HeightId) .SelectGroup(() => warehouseOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) .Select(projection).WithAlias(() => resultAlias.Amount) ) .OrderBy(() => nomenclatureAlias.Name).Asc .ThenBy(Projections.SqlFunction( new SQLFunctionTemplate( NHibernateUtil.String, "CAST(SUBSTRING_INDEX(?1, '-', 1) AS DECIMAL(5,1))"), NHibernateUtil.String, Projections.Property(() => sizeAlias.Name))).Asc .ThenBy(Projections.SqlFunction( new SQLFunctionTemplate( NHibernateUtil.String, "CAST(SUBSTRING_INDEX(?1, '-', 1) AS DECIMAL(5,1))"), NHibernateUtil.String, Projections.Property(() => heightAlias.Name))).Asc .TransformUsing(Transformers.AliasToBean <StockBalanceJournalNode>())); }
public IQueryOver <SubdivisionIssueOperation> ItemsQuery(IUnitOfWork unitOfWork) { SubdivisionBalanceJournalNode resultAlias = null; SubdivisionIssueOperation issueOperationAlias = null; Nomenclature nomenclatureAlias = null; ItemsType itemTypesAlias = null; MeasurementUnits unitsAlias = null; SubdivisionIssueOperation removeIssueOperationAlias = null; WarehouseOperation warehouseOperationAlias = null; Subdivision subdivisionAlias = null; var expense = unitOfWork.Session.QueryOver(() => issueOperationAlias); if (Filter.Subdivision != null) { expense.Where(e => e.Subdivision == Filter.Subdivision); } var subQueryRemove = QueryOver.Of(() => removeIssueOperationAlias) .Where(() => removeIssueOperationAlias.IssuedOperation == issueOperationAlias) .Select(Projections.Sum <SubdivisionIssueOperation>(o => o.Returned)); var balance = Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Int32, "( IFNULL(?1, 0) - IFNULL(?2, 0) )"), NHibernateUtil.Int32, Projections.Property(() => issueOperationAlias.Issued), Projections.SubQuery(subQueryRemove)); if (Filter.Subdivision != null) { expense .JoinAlias(() => issueOperationAlias.Nomenclature, () => nomenclatureAlias) .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias) .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias) .JoinAlias(() => issueOperationAlias.WarehouseOperation, () => warehouseOperationAlias) .JoinAlias(() => issueOperationAlias.Subdivision, () => subdivisionAlias) .Where(e => e.AutoWriteoffDate == null || e.AutoWriteoffDate > Filter.Date) .Where(Restrictions.Not(Restrictions.Eq(balance, 0))) .SelectList(list => list .SelectGroup(() => issueOperationAlias.Id).WithAlias(() => resultAlias.Id) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName) .Select(() => issueOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) .Select(() => issueOperationAlias.OperationTime).WithAlias(() => resultAlias.IssuedDate) .Select(() => issueOperationAlias.ExpiryOn).WithAlias(() => resultAlias.ExpiryDate) .Select(() => subdivisionAlias.Name).WithAlias(() => resultAlias.SubdivisionName) .Select(balance).WithAlias(() => resultAlias.Balance)); } else { expense .JoinAlias(() => issueOperationAlias.Nomenclature, () => nomenclatureAlias) .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias) .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias) .JoinAlias(() => issueOperationAlias.WarehouseOperation, () => warehouseOperationAlias) .JoinAlias(() => issueOperationAlias.Subdivision, () => subdivisionAlias) .Where(e => e.AutoWriteoffDate == null || e.AutoWriteoffDate > Filter.Date) .Where(Restrictions.Not(Restrictions.Eq(balance, 0))) .SelectList(list => list .Select(() => issueOperationAlias.Id).WithAlias(() => resultAlias.Id) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName) .Select(() => issueOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) .Select(() => issueOperationAlias.OperationTime).WithAlias(() => resultAlias.IssuedDate) .Select(() => issueOperationAlias.ExpiryOn).WithAlias(() => resultAlias.ExpiryDate) .Select(() => subdivisionAlias.Name).WithAlias(() => resultAlias.SubdivisionName) .Select(balance).WithAlias(() => resultAlias.Balance)); expense = expense.OrderBy(() => subdivisionAlias.Name).Asc; } return(expense.TransformUsing(Transformers.AliasToBean <SubdivisionBalanceJournalNode>())); }
protected IQueryOver <WarehouseOperation> ItemsQuery(IUnitOfWork uow) { StockMovmentsJournalNode resultAlias = null; WarehouseOperation warehouseOperationAlias = null; ExpenseItem expenseItemAlias = null; IncomeItem incomeItemAlias = null; TransferItem transferItemAlias = null; CollectiveExpenseItem collectiveExpenseItemAlias = null; WriteoffItem writeOffItemAlias = null; EmployeeCard employeeCardAlias = null; EmployeeIssueOperation employeeIssueOperationAlias = null; CompletionResultItem completionResultItemAlias = null; CompletionSourceItem completionSourceItemAlias = null; Nomenclature nomenclatureAlias = null; ItemsType itemTypesAlias = null; MeasurementUnits unitsAlias = null; Size sizeAlias = null; Size heightAlias = null; var queryStock = uow.Session.QueryOver(() => warehouseOperationAlias) .JoinAlias(() => warehouseOperationAlias.WearSize, () => sizeAlias, JoinType.LeftOuterJoin) .JoinAlias(() => warehouseOperationAlias.Height, () => heightAlias, JoinType.LeftOuterJoin); if (Filter.Warehouse != null) { queryStock.Where(x => x.ReceiptWarehouse == Filter.Warehouse || x.ExpenseWarehouse == Filter.Warehouse); } if (Filter.StartDate.HasValue) { queryStock.Where(x => x.OperationTime >= Filter.StartDate.Value); } if (Filter.EndDate.HasValue) { queryStock.Where(x => x.OperationTime < Filter.EndDate.Value.AddDays(1)); } if (Filter.StockPosition != null) { queryStock.Where(x => x.Nomenclature == Filter.StockPosition.Nomenclature); queryStock.Where(x => x.WearSize == Filter.StockPosition.WearSize); queryStock.Where(x => x.Height == Filter.StockPosition.Height); queryStock.Where(x => x.WearPercent == Filter.StockPosition.WearPercent); } if (Filter.Nomenclature != null) { queryStock.Where(x => x.Nomenclature == Filter.Nomenclature); } if (Filter.Size != null) { queryStock.Where(x => x.WearSize.Id == Filter.Size.Id); } if (Filter.Height != null) { queryStock.Where(x => x.Height.Id == Filter.Height.Id); } IProjection receiptProjection, expenseProjection; if (Filter.Warehouse != null) { receiptProjection = Projections.Conditional( Restrictions.Eq(Projections .Property <WarehouseOperation>(x => x.ReceiptWarehouse.Id), Filter.Warehouse.Id), Projections.Constant(true), Projections.Constant(false) ); expenseProjection = Projections.Conditional( Restrictions.Eq(Projections .Property <WarehouseOperation>(x => x.ExpenseWarehouse.Id), Filter.Warehouse.Id), Projections.Constant(true), Projections.Constant(false) ); switch (Filter.Direction) { case DirectionOfOperation.expense: queryStock.Where(x => x.ExpenseWarehouse.Id == Filter.Warehouse.Id); break; case DirectionOfOperation.receipt: queryStock.Where(x => x.ReceiptWarehouse.Id == Filter.Warehouse.Id); break; } } else { receiptProjection = Projections.Conditional( Restrictions.IsNotNull(Projections .Property <WarehouseOperation>(x => x.ReceiptWarehouse.Id)), Projections.Constant(true), Projections.Constant(false) ); expenseProjection = Projections.Conditional( Restrictions.IsNotNull(Projections .Property <WarehouseOperation>(x => x.ExpenseWarehouse.Id)), Projections.Constant(true), Projections.Constant(false) ); switch (Filter.Direction) { case DirectionOfOperation.expense: queryStock.Where(x => x.ReceiptWarehouse == null); break; case DirectionOfOperation.receipt: queryStock.Where(x => x.ExpenseWarehouse == null); break; } } queryStock .JoinAlias(() => warehouseOperationAlias.Nomenclature, () => nomenclatureAlias) .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias) .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias) .JoinEntityAlias(() => expenseItemAlias, () => expenseItemAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => collectiveExpenseItemAlias, () => collectiveExpenseItemAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => incomeItemAlias, () => incomeItemAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => transferItemAlias, () => transferItemAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => writeOffItemAlias, () => writeOffItemAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => employeeIssueOperationAlias, () => employeeIssueOperationAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => employeeCardAlias, () => employeeIssueOperationAlias.Employee.Id == employeeCardAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => completionResultItemAlias, () => completionResultItemAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => completionSourceItemAlias, () => completionSourceItemAlias.WarehouseOperation.Id == warehouseOperationAlias.Id, JoinType.LeftOuterJoin) .Where(GetSearchCriterion( () => employeeCardAlias.FirstName, () => employeeCardAlias.LastName, () => employeeCardAlias.Patronymic )); if (Filter.CollapseOperationItems) { queryStock.SelectList(list => list .SelectGroup(() => warehouseOperationAlias.Nomenclature.Id) .Select(() => warehouseOperationAlias.OperationTime).WithAlias(() => resultAlias.OperationTime) .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName) .Select(receiptProjection).WithAlias(() => resultAlias.Receipt) .Select(expenseProjection).WithAlias(() => resultAlias.Expense) .SelectSum(() => warehouseOperationAlias.Amount).WithAlias(() => resultAlias.Amount) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => employeeCardAlias.FirstName).WithAlias(() => resultAlias.EmployeeName) .Select(() => employeeCardAlias.LastName).WithAlias(() => resultAlias.EmployeeSurname) .Select(() => employeeCardAlias.Patronymic).WithAlias(() => resultAlias.EmployeePatronymic) //Ссылки .SelectGroup(() => expenseItemAlias.ExpenseDoc.Id).WithAlias(() => resultAlias.ExpenceId) .SelectGroup(() => collectiveExpenseItemAlias.Document.Id).WithAlias(() => resultAlias.CollectiveExpenseId) .SelectCount(() => employeeCardAlias.Id).WithAlias(() => resultAlias.NumberOfCollapsedRows) .SelectGroup(() => incomeItemAlias.Document.Id).WithAlias(() => resultAlias.IncomeId) .SelectGroup(() => transferItemAlias.Document.Id).WithAlias(() => resultAlias.TransferItemId) .SelectGroup(() => writeOffItemAlias.Document.Id).WithAlias(() => resultAlias.WriteoffId) .SelectGroup(() => completionResultItemAlias.Completion.Id).WithAlias(() => resultAlias.CompletionFromResultId) .SelectGroup(() => completionSourceItemAlias.Completion.Id).WithAlias(() => resultAlias.CompletionFromSourceId) .SelectGroup(() => sizeAlias.Name).WithAlias(() => resultAlias.WearSizeName) .SelectGroup(() => heightAlias.Name).WithAlias(() => resultAlias.HeightName) .SelectGroup(() => warehouseOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) ); } else { queryStock.SelectList(list => list .Select(() => warehouseOperationAlias.Id).WithAlias(() => resultAlias.Id) .Select(() => warehouseOperationAlias.OperationTime).WithAlias(() => resultAlias.OperationTime) .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName) .Select(receiptProjection).WithAlias(() => resultAlias.Receipt) .Select(expenseProjection).WithAlias(() => resultAlias.Expense) .Select(() => warehouseOperationAlias.Amount).WithAlias(() => resultAlias.Amount) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => sizeAlias.Name).WithAlias(() => resultAlias.WearSizeName) .Select(() => heightAlias.Name).WithAlias(() => resultAlias.HeightName) .Select(() => warehouseOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) //Ссылки .Select(() => expenseItemAlias.Id).WithAlias(() => resultAlias.ExpenceItemId) .Select(() => expenseItemAlias.ExpenseDoc.Id).WithAlias(() => resultAlias.ExpenceId) .Select(() => collectiveExpenseItemAlias.Id).WithAlias(() => resultAlias.CollectiveExpenseItemId) .Select(() => collectiveExpenseItemAlias.Document.Id).WithAlias(() => resultAlias.CollectiveExpenseId) .Select(() => incomeItemAlias.Id).WithAlias(() => resultAlias.IncomeItemId) .Select(() => incomeItemAlias.Document.Id).WithAlias(() => resultAlias.IncomeId) .Select(() => transferItemAlias.Id).WithAlias(() => resultAlias.TransferId) .Select(() => transferItemAlias.Document.Id).WithAlias(() => resultAlias.TransferItemId) .Select(() => writeOffItemAlias.Id).WithAlias(() => resultAlias.WriteoffItemId) .Select(() => writeOffItemAlias.Document.Id).WithAlias(() => resultAlias.WriteoffId) .Select(() => employeeCardAlias.FirstName).WithAlias(() => resultAlias.EmployeeName) .Select(() => employeeCardAlias.LastName).WithAlias(() => resultAlias.EmployeeSurname) .Select(() => employeeCardAlias.Patronymic).WithAlias(() => resultAlias.EmployeePatronymic) .Select(() => completionResultItemAlias.Id).WithAlias(() => resultAlias.CompletionResultItemId) .Select(() => completionSourceItemAlias.Id).WithAlias(() => resultAlias.CompletionSourceItemId) .Select(() => completionSourceItemAlias.Completion.Id).WithAlias(() => resultAlias.CompletionFromSourceId) .Select(() => completionResultItemAlias.Completion.Id).WithAlias(() => resultAlias.CompletionFromResultId) ); } return(queryStock .OrderBy(x => x.OperationTime).Desc .ThenBy(x => x.Id).Asc .TransformUsing(Transformers.AliasToBean <StockMovmentsJournalNode>())); }
public void CreateAndResaveDocWithWriteoff() { NewSessionWithSameDB(); var navigation = Substitute.For <INavigationManager>(); var validator = new ValidatorForTests(); var userService = Substitute.For <IUserService>(); var userRepository = Substitute.For <UserRepository>(); var interactive = Substitute.For <IInteractiveService>(); var commonMessages = Substitute.For <CommonMessages>(interactive); var featuresService = Substitute.For <FeaturesService>(); var baseParameters = Substitute.For <BaseParameters>(); var sizeService = Substitute.For <SizeService>(); var deleteService = Substitute.For <IDeleteEntityService>(); var stockRepository = new StockRepository(); var builder = new ContainerBuilder(); builder.RegisterType <ExpenseDocItemsEmployeeViewModel>().AsSelf(); builder.Register(x => featuresService).As <FeaturesService>(); builder.Register(x => navigation).As <INavigationManager>(); builder.Register(x => sizeService).As <SizeService>(); builder.Register(x => deleteService).As <IDeleteEntityService>(); builder.Register(x => baseParameters).As <BaseParameters>(); builder.Register(x => Substitute.For <IUserService>()).As <IUserService>(); var container = builder.Build(); using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) { var warehouse = new Warehouse(); uow.Save(warehouse); var user = new UserBase(); uow.Save(user); userService.GetCurrentUser(Arg.Any <IUnitOfWork>()).Returns(user); var itemType = new ItemsType { Name = "Тип" }; uow.Save(itemType); var nomenclature = new Nomenclature { Type = itemType }; uow.Save(nomenclature); var protectionTools = new ProtectionTools { Name = "Тестовый СИЗ", Type = itemType }; protectionTools.AddNomeclature(nomenclature); uow.Save(protectionTools); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Month; normItem.PeriodCount = 1; uow.Save(norm); var employee = new EmployeeCard(); employee.AddUsedNorm(norm); uow.Save(employee); var warehouseOperation = new WarehouseOperation { Amount = 10, ReceiptWarehouse = warehouse, Nomenclature = nomenclature, }; uow.Save(warehouseOperation); uow.Commit(); //Создаем предыдущую выдачу которая должна быть списана. using (var vmCreateLastIssue = new ExpenseEmployeeViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory, navigation, container.BeginLifetimeScope(), validator, userService, userRepository, interactive, stockRepository, commonMessages, featuresService, baseParameters)) { vmCreateLastIssue.Entity.Date = new DateTime(2022, 04, 1); vmCreateLastIssue.Entity.Warehouse = vmCreateLastIssue.UoW.GetById <Warehouse>(warehouse.Id); vmCreateLastIssue.Entity.Employee = vmCreateLastIssue.UoW.GetById <EmployeeCard>(employee.Id); Assert.That(vmCreateLastIssue.Entity.Items.Count, Is.EqualTo(1)); var itemLast = vmCreateLastIssue.Entity.Items.First(); itemLast.Amount = 1; Assert.That(itemLast.IsEnableWriteOff, Is.False); Assert.That(vmCreateLastIssue.Save(), Is.True); } //Создаем выдачу в место выданного ранее. int expenseIdForResave; using (var vmCreate = new ExpenseEmployeeViewModel(EntityUoWBuilder.ForCreate(), UnitOfWorkFactory, navigation, container.BeginLifetimeScope(), validator, userService, userRepository, interactive, stockRepository, commonMessages, featuresService, baseParameters, employee)) { vmCreate.Entity.Date = new DateTime(2022, 04, 12); vmCreate.Entity.Warehouse = vmCreate.UoW.GetById <Warehouse>(warehouse.Id); Assert.That(vmCreate.Entity.Items.Count, Is.EqualTo(1)); var item = vmCreate.Entity.Items.First(); item.Amount = 1; Assert.That(item.IsEnableWriteOff, Is.True); //Главное в этом тесте, устанавливаем галочку что выдача идет вместе со списанием. item.IsWriteOff = true; Assert.That(vmCreate.Save(), Is.True); expenseIdForResave = vmCreate.Entity.Id; } //Пересохраняем для проверки что это работает using (var vmResave = new ExpenseEmployeeViewModel(EntityUoWBuilder.ForOpen(expenseIdForResave), UnitOfWorkFactory, navigation, container.BeginLifetimeScope(), validator, userService, userRepository, interactive, stockRepository, commonMessages, featuresService, baseParameters)) { Assert.That(vmResave.Save(), Is.True); } } }
public void HandleDeleteEmployeeVacation_RecalculateDatesAndNextIssueTest() { var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(true); using (var uow = UnitOfWorkFactory.CreateWithoutRoot("Тест на обработку события удаления")) { BuisnessLogicGlobalEventHandler.Init(ask, UnitOfWorkFactory); var nomenclatureType = new ItemsType(); nomenclatureType.Name = "Тестовый тип номенклатуры"; uow.Save(nomenclatureType); var nomenclature = new Nomenclature(); nomenclature.Type = nomenclatureType; uow.Save(nomenclature); var protectionTools = new ProtectionTools(); protectionTools.Name = "СИЗ для тестирования"; protectionTools.AddNomeclature(nomenclature); uow.Save(protectionTools); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Month; normItem.PeriodCount = 2; uow.Save(norm); var employee = new EmployeeCard(); var vacationType = new VacationType(); vacationType.Name = "Тестовый отпуск"; vacationType.ExcludeFromWearing = true; var vacation = new EmployeeVacation(); vacation.BeginDate = new DateTime(2019, 2, 1); vacation.EndDate = new DateTime(2019, 3, 1); vacation.VacationType = vacationType; employee.AddVacation(vacation); uow.Save(vacationType); uow.Save(vacation); uow.Save(employee); var warehouseOperation = new WarehouseOperation(); warehouseOperation.Nomenclature = nomenclature; uow.Save(warehouseOperation); var expenseOp = new EmployeeIssueOperation(); expenseOp.OperationTime = new DateTime(2019, 1, 1); expenseOp.ExpiryByNorm = new DateTime(2019, 4, 1); expenseOp.Employee = employee; expenseOp.Nomenclature = nomenclature; expenseOp.ProtectionTools = protectionTools; expenseOp.NormItem = normItem; expenseOp.Issued = 1; expenseOp.WarehouseOperation = warehouseOperation; uow.Save(expenseOp); uow.Commit(); //Выполняем удаление employee.Vacations.Remove(vacation); uow.Delete(vacation); uow.Commit(); //проверяем данные using (var uow2 = UnitOfWorkFactory.CreateWithoutRoot("Тест на обработку события удаления uow2")) { var resultOp = uow2.GetById <EmployeeIssueOperation>(expenseOp.Id); Assert.That(resultOp.ExpiryByNorm, Is.EqualTo(new DateTime(2019, 3, 1))); } } }
public void HandleDeleteEmployeeVacation_RecalculateWithTwoIssuePerDayTest() { var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(true); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); using (var uow = UnitOfWorkFactory.CreateWithoutRoot("Тест на обработку события удаления")) { BuisnessLogicGlobalEventHandler.Init(ask, UnitOfWorkFactory); var nomenclatureType = new ItemsType(); nomenclatureType.Name = "Тестовый тип номенклатуры"; uow.Save(nomenclatureType); var nomenclature = new Nomenclature(); nomenclature.Type = nomenclatureType; uow.Save(nomenclature); var protectionTools = new ProtectionTools(); protectionTools.Name = "СИЗ для тестирования"; protectionTools.AddNomeclature(nomenclature); uow.Save(protectionTools); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Year; normItem.PeriodCount = 1; uow.Save(norm); var employee = new EmployeeCard(); employee.AddUsedNorm(norm); var vacationType = new VacationType(); vacationType.Name = "Тестовый отпуск"; vacationType.ExcludeFromWearing = true; var vacation = new EmployeeVacation(); vacation.BeginDate = new DateTime(2019, 2, 1); vacation.EndDate = new DateTime(2019, 2, 10); vacation.VacationType = vacationType; employee.AddVacation(vacation); uow.Save(vacationType); uow.Save(vacation); uow.Save(employee); uow.Commit(); var warehouseOperation = new WarehouseOperation(); warehouseOperation.Nomenclature = nomenclature; uow.Save(warehouseOperation); var expenseOp = new EmployeeIssueOperation(); expenseOp.OperationTime = new DateTime(2019, 1, 1, 14, 0, 0); expenseOp.AutoWriteoffDate = new DateTime(2020, 1, 1); expenseOp.Employee = employee; expenseOp.Nomenclature = nomenclature; expenseOp.ProtectionTools = protectionTools; expenseOp.NormItem = normItem; expenseOp.Issued = 1; expenseOp.WarehouseOperation = warehouseOperation; var graph = IssueGraph.MakeIssueGraph(uow, employee, protectionTools); expenseOp.RecalculateDatesOfIssueOperation(graph, baseParameters, ask); uow.Save(expenseOp); var warehouseOperation2 = new WarehouseOperation(); warehouseOperation2.Nomenclature = nomenclature; uow.Save(warehouseOperation2); var expenseOp2 = new EmployeeIssueOperation(); expenseOp2.OperationTime = new DateTime(2019, 1, 1, 13, 0, 0); expenseOp2.AutoWriteoffDate = new DateTime(2020, 1, 1); expenseOp2.Employee = employee; expenseOp2.Nomenclature = nomenclature; expenseOp2.ProtectionTools = protectionTools; expenseOp2.NormItem = normItem; expenseOp2.Issued = 1; expenseOp2.WarehouseOperation = warehouseOperation2; graph = IssueGraph.MakeIssueGraph(uow, employee, protectionTools); expenseOp2.RecalculateDatesOfIssueOperation(graph, baseParameters, ask); uow.Save(expenseOp2); uow.Commit(); vacation.UpdateRelatedOperations(uow, new EmployeeIssueRepository(), baseParameters, ask); uow.Commit(); Assert.That(employee.WorkwearItems[0].NextIssue, Is.EqualTo(new DateTime(2021, 1, 11))); //Выполняем удаление employee.Vacations.Remove(vacation); uow.Delete(vacation); uow.Commit(); //проверяем данные using (var uow2 = UnitOfWorkFactory.CreateWithoutRoot("Тест на обработку события удаления uow2")) { var resultEmployee = uow2.GetById <EmployeeCard>(employee.Id); Assert.That(resultEmployee.WorkwearItems[0].NextIssue, Is.EqualTo(new DateTime(2021, 1, 1))); } } }
public void FillWearRecivedInfo_NotMergeAnalogTest() { using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) { var nomenclatureType = new ItemsType(); nomenclatureType.Name = "Тестовый тип номенклатуры"; nomenclatureType.Category = ItemTypeCategory.wear; uow.Save(nomenclatureType); var nomenclature = new Nomenclature(); nomenclature.Type = nomenclatureType; nomenclature.Sex = ClothesSex.Men; uow.Save(nomenclature); var protectionToolsAnalog = new ProtectionTools(); protectionToolsAnalog.Name = "Номенклатура нормы Аналог"; protectionToolsAnalog.AddNomeclature(nomenclature); var protectionTools = new ProtectionTools(); protectionTools.Name = "Номенклатура нормы"; protectionTools.AddAnalog(protectionToolsAnalog); protectionTools.AddNomeclature(nomenclature); protectionToolsAnalog.AddAnalog(protectionTools); uow.Save(protectionToolsAnalog); uow.Save(protectionTools); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Year; normItem.PeriodCount = 1; var normItem2 = norm.AddItem(protectionToolsAnalog); normItem2.Amount = 2; normItem2.NormPeriod = NormPeriodType.Year; normItem2.PeriodCount = 1; uow.Save(norm); var employee = new EmployeeCard(); employee.AddUsedNorm(norm); employee.Sex = Sex.M; Assert.That(employee.WorkwearItems.Count, Is.GreaterThan(0)); uow.Save(employee); uow.Commit(); var warehouseOperation = new WarehouseOperation { Nomenclature = nomenclature, Amount = 1, OperationTime = new DateTime(2018, 1, 20), }; uow.Save(warehouseOperation); var operation = new EmployeeIssueOperation { Employee = employee, ExpiryByNorm = new DateTime(2019, 1, 20), Issued = 1, Nomenclature = nomenclature, NormItem = normItem, ProtectionTools = protectionTools, OperationTime = new DateTime(2018, 1, 20), WarehouseOperation = warehouseOperation, }; uow.Save(operation); var warehouseOperation2 = new WarehouseOperation { Nomenclature = nomenclature, Amount = 2, OperationTime = new DateTime(2018, 1, 20), }; uow.Save(warehouseOperation2); var operation2 = new EmployeeIssueOperation { Employee = employee, ExpiryByNorm = new DateTime(2019, 1, 20), Issued = 2, Nomenclature = nomenclature, NormItem = normItem2, ProtectionTools = protectionToolsAnalog, OperationTime = new DateTime(2018, 1, 20), WarehouseOperation = warehouseOperation, }; uow.Save(operation2); uow.Commit(); employee.FillWearRecivedInfo(new EmployeeIssueRepository(uow)); var item1 = employee.WorkwearItems.FirstOrDefault(x => x.ActiveNormItem == normItem); Assert.That(item1.Amount, Is.EqualTo(1)); var item2 = employee.WorkwearItems.FirstOrDefault(x => x.ActiveNormItem == normItem2); Assert.That(item2.Amount, Is.EqualTo(2)); } }
public void FillWearRecivedInfo_LastIssueDateExistAfterAutoWriteoffDateTest() { using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) { var nomenclatureType = new ItemsType(); nomenclatureType.Name = "Тестовый тип номенклатуры"; nomenclatureType.Category = ItemTypeCategory.wear; uow.Save(nomenclatureType); var nomenclature = new Nomenclature(); nomenclature.Type = nomenclatureType; nomenclature.Sex = ClothesSex.Men; uow.Save(nomenclature); var protectionTools = new ProtectionTools(); protectionTools.Name = "Номенклатура нормы"; protectionTools.AddNomeclature(nomenclature); uow.Save(protectionTools); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Year; normItem.PeriodCount = 1; uow.Save(norm); var employee = new EmployeeCard(); employee.AddUsedNorm(norm); employee.Sex = Sex.M; Assert.That(employee.WorkwearItems.Count, Is.GreaterThan(0)); uow.Save(employee); uow.Commit(); var warehouseOperation = new WarehouseOperation { Nomenclature = nomenclature, Amount = 1, OperationTime = new DateTime(2018, 1, 20), }; uow.Save(warehouseOperation); var operationIssue = new EmployeeIssueOperation { Employee = employee, ExpiryByNorm = new DateTime(2019, 1, 20), AutoWriteoffDate = new DateTime(2019, 1, 20), UseAutoWriteoff = true, Issued = 1, Nomenclature = nomenclature, NormItem = normItem, ProtectionTools = protectionTools, OperationTime = new DateTime(2018, 1, 20), StartOfUse = new DateTime(2018, 1, 20), WarehouseOperation = warehouseOperation, }; uow.Save(operationIssue); uow.Commit(); employee.FillWearRecivedInfo(new EmployeeIssueRepository(uow)); var item = employee.WorkwearItems.First(); Assert.That(item.Amount, Is.EqualTo(1)); Assert.That(item.LastIssue, Is.EqualTo(new DateTime(2018, 1, 20))); } }
public virtual IList <StockBalanceDTO> StockBalances( IUnitOfWork uow, Warehouse warehouse, IList <Nomenclature> nomenclatures, DateTime onTime, IEnumerable <WarehouseOperation> excludeOperations = null) { StockBalanceDTO resultAlias = null; WarehouseOperation warehouseExpenseOperationAlias = null; WarehouseOperation warehouseIncomeOperationAlias = null; WarehouseOperation warehouseOperationAlias = null; Nomenclature nomenclatureAlias = null; Size sizeAlias = null; Size heightAlias = null; var excludeIds = excludeOperations?.Select(x => x.Id).ToList(); // null == null => null null <=> null => true var expenseQuery = QueryOver.Of(() => warehouseExpenseOperationAlias) .Where(() => warehouseExpenseOperationAlias.Nomenclature.Id == nomenclatureAlias.Id && (warehouseExpenseOperationAlias.WearSize.Id == sizeAlias.Id || warehouseOperationAlias.WearSize == null && sizeAlias == null) && (warehouseExpenseOperationAlias.Height.Id == heightAlias.Id || warehouseOperationAlias.Height == null && heightAlias == null) && warehouseExpenseOperationAlias.WearPercent == warehouseOperationAlias.WearPercent) .Where(e => e.OperationTime <= onTime); if (warehouse == null) { expenseQuery.Where(x => x.ExpenseWarehouse != null); } else { expenseQuery.Where(x => x.ExpenseWarehouse == warehouse); } if (excludeIds != null && excludeIds.Count > 0) { expenseQuery.WhereNot(x => x.Id.IsIn(excludeIds)); } expenseQuery.Select(Projections .Sum(Projections .Property(() => warehouseExpenseOperationAlias.Amount))); var incomeSubQuery = QueryOver.Of(() => warehouseIncomeOperationAlias) .Where(() => warehouseIncomeOperationAlias.Nomenclature.Id == nomenclatureAlias.Id && (warehouseIncomeOperationAlias.WearSize.Id == sizeAlias.Id || warehouseOperationAlias.WearSize == null && sizeAlias == null) && (warehouseIncomeOperationAlias.Height.Id == heightAlias.Id || warehouseOperationAlias.Height == null && heightAlias == null) && warehouseIncomeOperationAlias.WearPercent == warehouseOperationAlias.WearPercent) .Where(e => e.OperationTime < onTime); if (warehouse == null) { incomeSubQuery.Where(x => x.ReceiptWarehouse != null); } else { incomeSubQuery.Where(x => x.ReceiptWarehouse == warehouse); } if (excludeIds != null && excludeIds.Count > 0) { incomeSubQuery.WhereNot(x => x.Id.IsIn(excludeIds)); } incomeSubQuery.Select(Projections .Sum(Projections .Property(() => warehouseIncomeOperationAlias.Amount))); var projection = Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Int32, "( IFNULL(?1, 0) - IFNULL(?2, 0) )"), NHibernateUtil.Int32, Projections.SubQuery(incomeSubQuery), Projections.SubQuery(expenseQuery) ); var queryStock = uow.Session.QueryOver(() => warehouseOperationAlias); queryStock.Where(Restrictions.Not(Restrictions.Eq(projection, 0))); queryStock.Where(() => warehouseOperationAlias.Nomenclature.IsIn(nomenclatures.ToArray())); var result = queryStock .JoinAlias(() => warehouseOperationAlias.Nomenclature, () => nomenclatureAlias) .JoinAlias(() => warehouseOperationAlias.WearSize, () => sizeAlias, JoinType.LeftOuterJoin) .JoinAlias(() => warehouseOperationAlias.Height, () => heightAlias, JoinType.LeftOuterJoin) .SelectList(list => list .SelectGroup(() => nomenclatureAlias.Id).WithAlias(() => resultAlias.NomenclatureId) .SelectGroup(() => warehouseOperationAlias.WearSize).WithAlias(() => resultAlias.WearSize) .SelectGroup(() => warehouseOperationAlias.Height).WithAlias(() => resultAlias.Height) .SelectGroup(() => warehouseOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) .Select(projection).WithAlias(() => resultAlias.Amount) ) .TransformUsing(Transformers.AliasToBean <StockBalanceDTO>()) .List <StockBalanceDTO>(); //Проставляем номенклатуру. result.ToList().ForEach(item => item.Nomenclature = nomenclatures.First(n => n.Id == item.NomenclatureId)); return(result); }
public IQueryOver <EmployeeIssueOperation> ItemsQuery(IUnitOfWork unitOfWork) { EmployeeBalanceJournalNode resultAlias = null; EmployeeIssueOperation expenseOperationAlias = null; Nomenclature nomenclatureAlias = null; ItemsType itemTypesAlias = null; MeasurementUnits unitsAlias = null; EmployeeIssueOperation removeOperationAlias = null; WarehouseOperation warehouseOperationAlias = null; Size sizeAlias = null; Size heightAlias = null; EmployeeCard employeeCardAlias = null; var query = unitOfWork.Session.QueryOver(() => expenseOperationAlias); if (Filter.Employee != null) { query.Where(e => e.Employee == Filter.Employee); } var subQueryRemove = QueryOver.Of(() => removeOperationAlias) .Where(() => removeOperationAlias.IssuedOperation.Id == expenseOperationAlias.Id) .Select(Projections.Sum <EmployeeIssueOperation>(o => o.Returned)); var balance = Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Int32, "( IFNULL(?1, 0) - IFNULL(?2, 0) )"), NHibernateUtil.Int32, Projections.Property(() => expenseOperationAlias.Issued), Projections.SubQuery(subQueryRemove) ); if (Filter.Employee != null) { query .JoinAlias(() => expenseOperationAlias.Nomenclature, () => nomenclatureAlias) .JoinAlias(() => expenseOperationAlias.WearSize, () => sizeAlias, JoinType.LeftOuterJoin) .JoinAlias(() => expenseOperationAlias.Height, () => heightAlias, JoinType.LeftOuterJoin) .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias) .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias) .JoinAlias(() => expenseOperationAlias.WarehouseOperation, () => warehouseOperationAlias, JoinType.LeftOuterJoin) .JoinAlias(() => expenseOperationAlias.Employee, () => employeeCardAlias) .Where(e => e.AutoWriteoffDate == null || e.AutoWriteoffDate > Filter.Date) .Where(Restrictions.Not(Restrictions.Eq(balance, 0))) .SelectList(list => list .SelectGroup(() => expenseOperationAlias.Id).WithAlias(() => resultAlias.Id) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName) .Select(() => sizeAlias.Name).WithAlias(() => resultAlias.WearSize) .Select(() => heightAlias.Name).WithAlias(() => resultAlias.Height) .Select(() => warehouseOperationAlias.Cost).WithAlias(() => resultAlias.AvgCost) .Select(() => expenseOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) .Select(() => expenseOperationAlias.OperationTime).WithAlias(() => resultAlias.IssuedDate) .Select(() => expenseOperationAlias.StartOfUse).WithAlias(() => resultAlias.StartUseDate) .Select(() => expenseOperationAlias.ExpiryByNorm).WithAlias(() => resultAlias.ExpiryDate) .Select(() => employeeCardAlias.FirstName).WithAlias(() => resultAlias.FirstName) .Select(() => employeeCardAlias.LastName).WithAlias(() => resultAlias.LastName) .Select(() => employeeCardAlias.Patronymic).WithAlias(() => resultAlias.Patronymic) .Select(balance).WithAlias(() => resultAlias.Balance)); } else { query .JoinAlias(() => expenseOperationAlias.Nomenclature, () => nomenclatureAlias) .JoinAlias(() => expenseOperationAlias.WearSize, () => sizeAlias, JoinType.LeftOuterJoin) .JoinAlias(() => expenseOperationAlias.Height, () => heightAlias, JoinType.LeftOuterJoin) .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias) .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias) .JoinAlias(() => expenseOperationAlias.WarehouseOperation, () => warehouseOperationAlias, JoinType.LeftOuterJoin) .JoinAlias(() => expenseOperationAlias.Employee, () => employeeCardAlias) .Where(e => e.AutoWriteoffDate == null || e.AutoWriteoffDate > Filter.Date) .Where(Restrictions.Not(Restrictions.Eq(balance, 0))) .SelectList(list => list .Select(() => expenseOperationAlias.Id).WithAlias(() => resultAlias.Id) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName) .Select(() => sizeAlias.Name).WithAlias(() => resultAlias.WearSize) .Select(() => heightAlias.Name).WithAlias(() => resultAlias.Height) .Select(() => warehouseOperationAlias.Cost).WithAlias(() => resultAlias.AvgCost) .Select(() => expenseOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent) .Select(() => expenseOperationAlias.OperationTime).WithAlias(() => resultAlias.IssuedDate) .Select(() => expenseOperationAlias.StartOfUse).WithAlias(() => resultAlias.StartUseDate) .Select(() => expenseOperationAlias.ExpiryByNorm).WithAlias(() => resultAlias.ExpiryDate) .Select(() => employeeCardAlias.FirstName).WithAlias(() => resultAlias.FirstName) .Select(() => employeeCardAlias.LastName).WithAlias(() => resultAlias.LastName) .Select(() => employeeCardAlias.Patronymic).WithAlias(() => resultAlias.Patronymic) .Select(balance).WithAlias(() => resultAlias.Balance)); query = query.OrderBy(() => employeeCardAlias.LastName).Asc .ThenBy(() => employeeCardAlias.FirstName).Asc .ThenBy(() => employeeCardAlias.Patronymic).Asc; } return(query.TransformUsing(Transformers.AliasToBean <EmployeeBalanceJournalNode>())); }