public void UpdateOperations_EmployeeIssueOperation_CanChangeWearPercentTest() { var uow = Substitute.For <IUnitOfWork>(); var nomeclature = Substitute.For <Nomenclature>(); var employee = Substitute.For <EmployeeCard>(); var issueOperation = new EmployeeIssueOperation { OperationTime = new DateTime(2019, 1, 1), StartOfUse = new DateTime(2019, 1, 1), Issued = 10, Nomenclature = nomeclature, WearPercent = 0, ExpiryByNorm = new DateTime(2019, 1, 15), Employee = employee }; var writeoff = new Writeoff { Date = new DateTime(2019, 1, 15) }; writeoff.AddItem(issueOperation, 2); Assert.That(writeoff.Items[0].WearPercent, Is.EqualTo(1)); //Меняем значение процента износа writeoff.Items[0].WearPercent = 2; //Выполняем writeoff.UpdateOperations(uow); Assert.That(writeoff.Items[0].WearPercent, Is.EqualTo(2)); }
public void UpdateOperations_DontMoveDateIfWriteofAtIssueDate() { var uow = Substitute.For <IUnitOfWork>(); var employee = Substitute.For <EmployeeCard>(); var norm = Substitute.For <NormItem>(); norm.Amount.Returns(1); var nomeclature = Substitute.For <Nomenclature>(); var operationIssue = Substitute.For <EmployeeIssueOperation>(); operationIssue.Id.Returns(1); operationIssue.OperationTime.Returns(new DateTime(2019, 1, 15)); operationIssue.Issued.Returns(2); var operationWriteoff = Substitute.For <EmployeeIssueOperation>(); operationWriteoff.Id.Returns(2); operationWriteoff.IssuedOperation.Returns(operationIssue); operationWriteoff.OperationTime.Returns(new DateTime(2019, 1, 15)); operationWriteoff.Returned.Returns(2); var operation = new EmployeeIssueOperation(); operation.OperationTime = new DateTime(2019, 1, 15); operation.NormItem = norm; IssueGraph.MakeIssueGraphTestGap = (e, t) => new IssueGraph(new List <EmployeeIssueOperation>() { operation, operationIssue, operationWriteoff }); var expenseItem = new ExpenseItem(); expenseItem.Nomenclature = nomeclature; expenseItem.EmployeeIssueOperation = operation; expenseItem.Amount = 1; var expense = new Expense(); expense.Employee = employee; expense.Date = new DateTime(2019, 1, 15); expense.Operation = ExpenseOperations.Employee; expense.Items.Add(expenseItem); expenseItem.ExpenseDoc = expense; var ask = Substitute.For <IInteractiveQuestion>(); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); //Выполняем expense.UpdateOperations(uow, baseParameters, ask); //В данном сценарии мы не должны ничего спрашивать у пользователя. Предпологается что мы могли попросить передвинуть дату начала, на тот же день, так как списание было в этот день. реальный случай. ask.DidNotReceiveWithAnyArgs().Question(string.Empty); Assert.That(expense.Items[0].EmployeeIssueOperation.OperationTime, Is.EqualTo(new DateTime(2019, 1, 15)) ); }
public void RecalculateDatesOfIssueOperation_DontMoveStartOfUseTest() { var employee = Substitute.For <EmployeeCard>(); var protectionTools = Substitute.For <ProtectionTools>(); var norm = new NormItem() { Amount = 1, NormPeriod = NormPeriodType.Month, PeriodCount = 24, ProtectionTools = protectionTools }; var nomenclature = Substitute.For <Nomenclature>(); nomenclature.TypeName.Returns("fake"); var operation1 = Substitute.For <EmployeeIssueOperation>(); operation1.ProtectionTools.Returns(protectionTools); operation1.OperationTime.Returns(new DateTime(2019, 4, 30)); operation1.StartOfUse.Returns(new DateTime(2019, 4, 30)); operation1.AutoWriteoffDate.Returns(new DateTime(2021, 4, 30)); operation1.ExpiryByNorm.Returns(new DateTime(2021, 4, 30)); operation1.Issued.Returns(1); var issue = new EmployeeIssueOperation { ProtectionTools = protectionTools, Employee = employee, Nomenclature = nomenclature, NormItem = norm, OperationTime = new DateTime(2021, 4, 20), StartOfUse = new DateTime(2021, 4, 20), AutoWriteoffDate = new DateTime(2023, 4, 20), ExpiryByNorm = new DateTime(2023, 4, 20), Issued = 1 }; var operations = new List <EmployeeIssueOperation>() { operation1, issue }; var graph = new IssueGraph(operations); var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(Arg.Any <string>()).ReturnsForAnyArgs(false); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(15); issue.RecalculateDatesOfIssueOperation(graph, baseParameters, ask); Assert.That(issue.StartOfUse, Is.EqualTo(new DateTime(2021, 4, 20))); Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2023, 4, 20))); }
public int AmountAtEndOfDay(DateTime date, EmployeeIssueOperation excludeOperation = null) { var interval = IntervalOfDate(date); if (interval == null) { return(0); } return(interval.ActiveItems.Sum(x => x.AmountAtEndOfDay(date, excludeOperation))); }
public void RecalculateDatesOfIssueOperation_LifeTimeAppendOnVacationTest() { var vacationType = Substitute.For <VacationType>(); vacationType.ExcludeFromWearing.Returns(true); var employee = Substitute.For <EmployeeCard>(); var vacation = Substitute.For <EmployeeVacation>(); vacation.VacationType.Returns(vacationType); vacation.Employee.Returns(employee); vacation.BeginDate.Returns(new DateTime(2019, 2, 1)); vacation.EndDate.Returns(new DateTime(2019, 2, 10)); employee.Vacations.Returns(new List <EmployeeVacation> { vacation }); var protectionTools = Substitute.For <ProtectionTools>(); var norm = new NormItem(); norm.Amount = 2; norm.PeriodCount = 3; norm.NormPeriod = NormPeriodType.Month; var nomenclature = Substitute.For <Nomenclature>(); nomenclature.TypeName.Returns("fake"); var operations = new List <EmployeeIssueOperation>() { }; var graph = new IssueGraph(operations); var issue = new EmployeeIssueOperation(); issue.Employee = employee; issue.Nomenclature = nomenclature; issue.ProtectionTools = protectionTools; issue.NormItem = norm; issue.OperationTime = new DateTime(2019, 1, 10); issue.Issued = 2; var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(true); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); issue.RecalculateDatesOfIssueOperation(graph, baseParameters, ask); Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2019, 4, 20))); }
public void RecalculateDatesOfIssueOperation_MoveFirstLessNormTest() { var employee = Substitute.For <EmployeeCard>(); var protectionTools = Substitute.For <ProtectionTools>(); var operation1 = Substitute.For <EmployeeIssueOperation>(); operation1.ProtectionTools.Returns(protectionTools); operation1.OperationTime.Returns(new DateTime(2018, 1, 1)); operation1.AutoWriteoffDate.Returns(new DateTime(2018, 2, 1)); operation1.Issued.Returns(2); var norm = Substitute.For <NormItem>(); norm.Amount.Returns(2); norm.PeriodInMonths.Returns(1); norm.CalculateExpireDate(new DateTime(2018, 2, 1)).Returns(new DateTime(2018, 3, 1)); var nomenclature = Substitute.For <Nomenclature>(); nomenclature.TypeName.Returns("fake"); var operation2 = Substitute.For <EmployeeIssueOperation>(); operation2.ProtectionTools.Returns(protectionTools); operation2.OperationTime.Returns(new DateTime(2018, 2, 1)); var operations = new List <EmployeeIssueOperation>() { operation1, operation2 }; var graph = new IssueGraph(operations); var issue = new EmployeeIssueOperation(); issue.ProtectionTools = protectionTools; issue.Employee = employee; issue.Nomenclature = nomenclature; issue.NormItem = norm; issue.OperationTime = new DateTime(2018, 1, 15); issue.Issued = 2; var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(true); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); issue.RecalculateDatesOfIssueOperation(graph, baseParameters, ask); Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2018, 3, 1))); }
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); } }
public void CalculatePercentWear_Writeoff_WearPercentTest_50Percent() { var issue = new EmployeeIssueOperation(); issue.StartOfUse = new DateTime(2018, 1, 31); issue.ExpiryByNorm = new DateTime(2018, 2, 10); var atDate = new DateTime(2018, 2, 5); var result = issue.CalculatePercentWear(atDate); Assert.That(result, Is.EqualTo(0.5m)); }
public int UsedAmountAtEndOfDay(DateTime date, EmployeeIssueOperation excludeOperation = null) { var interval = IntervalOfDate(date); if (interval == null) { return(0); } return(interval.ActiveItems .Where(x => x.IssueOperation.StartOfUse == null || x.IssueOperation.StartOfUse.Value.Date <= date.Date) .Sum(x => x.AmountAtEndOfDay(date, excludeOperation))); }
public void CalculatePercentWear_Writeoff_WearPercentTest_StartPercentPlus10() { var issue = new EmployeeIssueOperation(); issue.WearPercent = 0.45m; issue.StartOfUse = new DateTime(2018, 1, 1); issue.ExpiryByNorm = new DateTime(2018, 1, 11); var atDate = new DateTime(2018, 1, 2); var result = issue.CalculatePercentWear(atDate); Assert.That(result, Is.EqualTo(0.55m)); }
public void UpdateOperations_DontMoveDateIfAtLastDateAmountEnough() { var uow = Substitute.For <IUnitOfWork>(); var employee = Substitute.For <EmployeeCard>(); var norm = Substitute.For <NormItem>(); norm.Amount.Returns(1); var nomeclature = Substitute.For <Nomenclature>(); var operationBeforeAndEnough = Substitute.For <EmployeeIssueOperation>(); operationBeforeAndEnough.OperationTime.Returns(new DateTime(2018, 10, 15)); operationBeforeAndEnough.Issued.Returns(2); var operation = new EmployeeIssueOperation(); operation.OperationTime = new DateTime(2019, 1, 15); operation.NormItem = norm; IssueGraph.MakeIssueGraphTestGap = (e, t) => new IssueGraph(new List <EmployeeIssueOperation>() { operation, operationBeforeAndEnough }); var expenseItem = new ExpenseItem(); expenseItem.Nomenclature = nomeclature; expenseItem.EmployeeIssueOperation = operation; expenseItem.Amount = 1; var expense = new Expense(); expense.Employee = employee; expense.Date = new DateTime(2019, 1, 15); expense.Operation = ExpenseOperations.Employee; expense.Items.Add(expenseItem); expenseItem.ExpenseDoc = expense; var ask = Substitute.For <IInteractiveQuestion>(); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); //Выполняем expense.UpdateOperations(uow, baseParameters, ask); //В данном сценарии мы не должны ничего спрашивать у пользователя. Предпологается что мы могли попросить передвинуть дату начала, не учитывая что на конец интервала количество все равно достаточное. ask.DidNotReceiveWithAnyArgs().Question(string.Empty); Assert.That(expense.Items[0].EmployeeIssueOperation.OperationTime, Is.EqualTo(new DateTime(2019, 1, 15)) ); }
public void UpdateOperations_IgnoreSelfOperationsWhenChangeDateOfDocument() { var uow = Substitute.For <IUnitOfWork>(); var employee = Substitute.For <EmployeeCard>(); var norm = Substitute.For <NormItem>(); norm.Amount.Returns(1); var incomeOperation = Substitute.For <EmployeeIssueOperation>(); var nomeclature = Substitute.For <Nomenclature>(); var operation = new EmployeeIssueOperation(); operation.OperationTime = new DateTime(2019, 1, 15); operation.NormItem = norm; operation.IssuedOperation = incomeOperation; IssueGraph.MakeIssueGraphTestGap = (e, t) => new IssueGraph(new List <EmployeeIssueOperation>() { operation }); var expenseItem = new ExpenseItem(); expenseItem.Nomenclature = nomeclature; expenseItem.EmployeeIssueOperation = operation; expenseItem.Amount = 1; var expense = new Expense(); expense.Employee = employee; expense.Date = new DateTime(2019, 1, 15); expense.Operation = ExpenseOperations.Employee; expense.Items.Add(expenseItem); expenseItem.ExpenseDoc = expense; var ask = Substitute.For <IInteractiveQuestion>(); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); //Выполняем expense.UpdateOperations(uow, baseParameters, ask); //В данном сценарии мы не должны ничего спрашивать у пользователя. Предпологается что мы могли попросить передвинуть дату начала, если бы не проигнорировали свою же операцию. ask.DidNotReceiveWithAnyArgs().Question(string.Empty); Assert.That(expense.Items[0].EmployeeIssueOperation.OperationTime, Is.EqualTo(new DateTime(2019, 1, 15)) ); }
public void RecalculateDatesOfIssueOperation_LifeTimeAppendProportionalTest() { var employee = Substitute.For <EmployeeCard>(); var protectionTools = Substitute.For <ProtectionTools>(); var operation1 = Substitute.For <EmployeeIssueOperation>(); operation1.OperationTime.Returns(new DateTime(2018, 1, 1)); operation1.AutoWriteoffDate.Returns(new DateTime(2018, 2, 1)); operation1.Issued.Returns(2); var norm = new NormItem(); norm.Amount = 2; norm.PeriodCount = 1; norm.NormPeriod = NormPeriodType.Month; var nomenclature = Substitute.For <Nomenclature>(); nomenclature.TypeName.Returns("fake"); var operations = new List <EmployeeIssueOperation>() { operation1 }; var graph = new IssueGraph(operations); var issue = new EmployeeIssueOperation(); issue.Employee = employee; issue.Nomenclature = nomenclature; issue.ProtectionTools = protectionTools; issue.NormItem = norm; issue.OperationTime = new DateTime(2018, 3, 10); issue.Issued = 3; var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(true); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); issue.RecalculateDatesOfIssueOperation(graph, baseParameters, ask); Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2018, 4, 25))); }
public void MakeIssueGraph_UseManualOperationsTest() { using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) { 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 employee = new EmployeeCard(); uow.Save(employee); //Операция без номеклатуры var manualOp = new EmployeeIssueOperation(); manualOp.OperationTime = new DateTime(2019, 1, 1, 14, 0, 0); manualOp.AutoWriteoffDate = new DateTime(2020, 1, 1); manualOp.Employee = employee; manualOp.ProtectionTools = protectionTools; manualOp.Issued = 1; manualOp.OverrideBefore = true; uow.Save(manualOp); var expenseOp = new EmployeeIssueOperation(); expenseOp.OperationTime = new DateTime(2020, 1, 1, 13, 0, 0); expenseOp.AutoWriteoffDate = new DateTime(2021, 1, 1); expenseOp.Employee = employee; expenseOp.Nomenclature = nomenclature; expenseOp.ProtectionTools = protectionTools; expenseOp.Issued = 1; uow.Save(expenseOp); uow.Commit(); var graph = IssueGraph.MakeIssueGraph(uow, employee, protectionTools); Assert.That(graph.Intervals.Count, Is.EqualTo(3)); var first = graph.OrderedIntervals.First(); Assert.That(first.StartDate, Is.EqualTo(new DateTime(2019, 1, 1))); } }
public virtual WriteoffItem AddItem(EmployeeIssueOperation operation, int count) { if (operation.Issued == 0) { throw new InvalidOperationException("Этот метод можно использовать только с операциями выдачи."); } if (Items.Any(p => DomainHelper.EqualDomainObjects(p.EmployeeWriteoffOperation?.IssuedOperation, operation))) { logger.Warn("Номенклатура из этой выдачи уже добавлена. Пропускаем..."); return(null); } var item = new WriteoffItem(this, operation, count); ObservableItems.Add(item); return(item); }
/// <summary> /// Количество числящееся на конец дня, включает списания произведенные в этот день. /// </summary> /// <param name="excludeOperation">Исключить из расчета указанные операции</param> public int AmountAtEndOfDay(DateTime date, EmployeeIssueOperation excludeOperation = null) { if (IssueOperation == excludeOperation || (IssueOperation.Id > 0 && IssueOperation.Id == excludeOperation?.Id)) { return(0); } if (IssueOperation.OperationTime.Date > date) { return(0); } if (IssueOperation.AutoWriteoffDate.HasValue && IssueOperation.AutoWriteoffDate.Value.Date <= date.Date) { return(0); } return(IssueOperation.Issued - WriteOffOperations.Where(x => !(x == excludeOperation || (x.Id > 0 && x.Id == excludeOperation?.Id))) .Where(x => x.OperationTime.Date <= date.Date).Sum(x => x.Returned)); }
public IList <EmployeeIssueOperation> GetLastIssueOperationsForEmployee( IEnumerable <EmployeeCard> employees, Action <IQueryOver <EmployeeIssueOperation, EmployeeIssueOperation> > makeEager = null, IUnitOfWork uow = null) { EmployeeIssueOperation employeeIssueOperationAlias = null; EmployeeIssueOperation employeeIssueOperation2Alias = null; var ids = employees.Select(x => x.Id).Distinct().ToArray(); var query = (uow ?? RepoUow).Session.QueryOver <EmployeeIssueOperation>(() => employeeIssueOperationAlias) .Where(o => o.Employee.IsIn(ids)) .Where(() => employeeIssueOperationAlias.Issued > 0) .JoinEntityAlias(() => employeeIssueOperation2Alias, () => employeeIssueOperationAlias.ProtectionTools.Id == employeeIssueOperation2Alias.ProtectionTools.Id && employeeIssueOperationAlias.Employee.Id == employeeIssueOperation2Alias.Employee.Id && employeeIssueOperation2Alias.Issued > 0 && employeeIssueOperationAlias.OperationTime < employeeIssueOperation2Alias.OperationTime , JoinType.LeftOuterJoin) .Where(() => employeeIssueOperation2Alias.Id == null); makeEager?.Invoke(query); return(query.List()); }
public static IList <EmployeeRecivedInfo> ItemsBalance(IUnitOfWork uow, EmployeeCard employee, DateTime onDate) { EmployeeRecivedInfo resultAlias = null; EmployeeIssueOperation employeeIssueOperationAlias = null; EmployeeIssueOperation employeeIssueOperationReceivedAlias = null; IProjection projection = Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Int32, "SUM(IFNULL(?1, 0) - IFNULL(?2, 0))"), NHibernateUtil.Int32, Projections.Property <EmployeeIssueOperation>(x => x.Issued), Projections.Property <EmployeeIssueOperation>(x => x.Returned) ); IProjection projectionIssueDate = Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Date, "MAX(CASE WHEN ?1 > 0 THEN ?2 END)"), NHibernateUtil.Date, Projections.Property <EmployeeIssueOperation>(x => x.Issued), Projections.Property <EmployeeIssueOperation>(x => x.OperationTime) ); return(uow.Session.QueryOver <EmployeeIssueOperation>(() => employeeIssueOperationAlias) .Left.JoinAlias(x => x.IssuedOperation, () => employeeIssueOperationReceivedAlias) .Where(x => x.Employee == employee) .Where(() => employeeIssueOperationAlias.AutoWriteoffDate == null || employeeIssueOperationAlias.AutoWriteoffDate > onDate) .Where(() => employeeIssueOperationReceivedAlias.AutoWriteoffDate == null || employeeIssueOperationReceivedAlias.AutoWriteoffDate > onDate) .SelectList(list => list .SelectGroup(() => employeeIssueOperationAlias.ProtectionTools.Id).WithAlias(() => resultAlias.ProtectionToolsId) .SelectGroup(() => employeeIssueOperationAlias.NormItem.Id).WithAlias(() => resultAlias.NormRowId) .Select(projectionIssueDate).WithAlias(() => resultAlias.LastReceive) .Select(projection).WithAlias(() => resultAlias.Amount) .Select(() => employeeIssueOperationAlias.Nomenclature.Id).WithAlias(() => resultAlias.NomenclatureId) ) .TransformUsing(Transformers.AliasToBean <EmployeeRecivedInfo>()) .List <EmployeeRecivedInfo>()); }
public IList <OperationToDocumentReference> GetReferencedDocuments(params int[] operationsIds) { OperationToDocumentReference docAlias = null; EmployeeIssueOperation employeeIssueOperationAlias = null; ExpenseItem expenseItemAlias = null; IncomeItem incomeItemAlias = null; CollectiveExpenseItem collectiveExpenseItemAlias = null; WriteoffItem writeoffItemAlias = null; var result = RepoUow.Session.QueryOver <EmployeeIssueOperation>(() => employeeIssueOperationAlias) .JoinEntityAlias(() => expenseItemAlias, () => expenseItemAlias.EmployeeIssueOperation.Id == employeeIssueOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => collectiveExpenseItemAlias, () => collectiveExpenseItemAlias.EmployeeIssueOperation.Id == employeeIssueOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => incomeItemAlias, () => incomeItemAlias.ReturnFromEmployeeOperation.Id == employeeIssueOperationAlias.Id, JoinType.LeftOuterJoin) .JoinEntityAlias(() => writeoffItemAlias, () => writeoffItemAlias.EmployeeWriteoffOperation.Id == employeeIssueOperationAlias.Id, JoinType.LeftOuterJoin) .Where(x => x.Id.IsIn(operationsIds)) .SelectList(list => list .Select(i => i.Id).WithAlias(() => docAlias.OperationId) .Select(() => expenseItemAlias.Id).WithAlias(() => docAlias.ExpenceItemId) .Select(() => expenseItemAlias.ExpenseDoc.Id).WithAlias(() => docAlias.ExpenceId) .Select(() => collectiveExpenseItemAlias.Id).WithAlias(() => docAlias.CollectiveExpenseItemId) .Select(() => collectiveExpenseItemAlias.Document.Id).WithAlias(() => docAlias.CollectiveExpenseId) .Select(() => incomeItemAlias.Id).WithAlias(() => docAlias.IncomeItemId) .Select(() => incomeItemAlias.Document.Id).WithAlias(() => docAlias.IncomeId) .Select(() => writeoffItemAlias.Id).WithAlias(() => docAlias.WriteoffItemId) .Select(() => writeoffItemAlias.Document.Id).WithAlias(() => docAlias.WriteoffId) ) .TransformUsing(Transformers.AliasToBean <OperationToDocumentReference>()) .List <OperationToDocumentReference>(); foreach (var item in result) { item.OperationType = OperationType.EmployeeIssue; } return(result); }
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 UpdateRelatedOperations_ChangeVacationRecalculateOperations() { var uow = Substitute.For <IUnitOfWork>(); var employee = new EmployeeCard(); var vacationType = Substitute.For <VacationType>(); vacationType.ExcludeFromWearing.Returns(true); var vacation = new EmployeeVacation(); vacation.Employee = employee; vacation.BeginDate = new DateTime(2019, 3, 1); vacation.EndDate = new DateTime(2019, 3, 10); vacation.VacationType = vacationType; employee.Vacations.Add(vacation); var norm = new NormItem(); norm.Amount = 1; norm.PeriodCount = 3; norm.NormPeriod = NormPeriodType.Month; var nomenclatureType = Substitute.For <ItemsType>(); var protectionTools = Substitute.For <ProtectionTools>(); var nomenclature = Substitute.For <Nomenclature>(); nomenclature.TypeName.Returns("fake"); nomenclature.Type.Returns(nomenclatureType); var issue = new EmployeeIssueOperation(); issue.UseAutoWriteoff = true; issue.Employee = employee; issue.Nomenclature = nomenclature; issue.ProtectionTools = protectionTools; issue.NormItem = norm; issue.OperationTime = new DateTime(2019, 2, 10); issue.StartOfUse = new DateTime(2019, 2, 10); issue.ExpiryByNorm = new DateTime(2019, 5, 10); issue.Issued = 1; var operations = new List <EmployeeIssueOperation>() { issue }; IssueGraph.MakeIssueGraphTestGap = (e, t) => new IssueGraph(operations); var employeeIssueRepository = Substitute.For <EmployeeIssueRepository>(uow); employeeIssueRepository.GetOperationsTouchDates(Arg.Any <IUnitOfWork>(), Arg.Any <EmployeeCard[]>(), Arg.Any <DateTime>(), Arg.Any <DateTime>(), Arg.Any <Action <IQueryOver <EmployeeIssueOperation, EmployeeIssueOperation> > >()) .Returns(operations); var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(false); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); vacation.UpdateRelatedOperations(uow, employeeIssueRepository, baseParameters, ask); Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2019, 5, 20))); Assert.That(issue.AutoWriteoffDate, Is.EqualTo(new DateTime(2019, 5, 20))); }
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 CalculatePercentWear_InfinityWhenDecimalConvert() { var result = EmployeeIssueOperation.CalculatePercentWear(new DateTime(2019, 8, 2), new DateTime(2019, 7, 17), new DateTime(2019, 7, 17), 0); Assert.That(result, Is.EqualTo(0)); }
public void CalculatePercentWear_NotOverflowExceptionForDecimalConvert() { var result = EmployeeIssueOperation.CalculatePercentWear(new DateTime(2019, 1, 1), new DateTime(2019, 1, 1), new DateTime(2019, 1, 1), 0); }
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 GetLastOperationsForEmployee_HappyPathTest() { using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) { var nomenclatureType = new ItemsType { Name = "Тестовый тип номенклатуры" }; uow.Save(nomenclatureType); var nomenclature = new Nomenclature { Type = nomenclatureType }; uow.Save(nomenclature); var protectionTools = new ProtectionTools { Name = "СИЗ для тестирования" }; protectionTools.AddNomeclature(nomenclature); uow.Save(protectionTools); var protectionTools2 = new ProtectionTools { Name = "СИЗ для тестирования 2" }; protectionTools2.AddNomeclature(nomenclature); uow.Save(protectionTools2); var employee = new EmployeeCard(); uow.Save(employee); var employee2 = new EmployeeCard(); uow.Save(employee2); //Лишний var employee3 = new EmployeeCard(); uow.Save(employee3); //Операция employee1 СИЗ 1 var opE1P1 = new EmployeeIssueOperation { OperationTime = new DateTime(2018, 1, 1, 14, 0, 0), AutoWriteoffDate = new DateTime(2020, 1, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools, Issued = 1 }; uow.Save(opE1P1); var op2E1P1 = new EmployeeIssueOperation { OperationTime = new DateTime(2019, 1, 1, 13, 0, 0), AutoWriteoffDate = new DateTime(2021, 1, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools, Issued = 1 }; uow.Save(op2E1P1); var opE1P2 = new EmployeeIssueOperation { OperationTime = new DateTime(2021, 1, 1, 13, 0, 0), AutoWriteoffDate = new DateTime(2021, 5, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools2, Issued = 1 }; uow.Save(opE1P2); var opE1P2Return = new EmployeeIssueOperation { OperationTime = new DateTime(2021, 2, 1, 13, 0, 0), AutoWriteoffDate = new DateTime(2021, 5, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools2, Issued = 0, Returned = 1 }; uow.Save(opE1P2Return); var opE2P2 = new EmployeeIssueOperation { OperationTime = new DateTime(2021, 2, 1, 14, 0, 0), AutoWriteoffDate = new DateTime(2021, 5, 1), Employee = employee2, Nomenclature = nomenclature, ProtectionTools = protectionTools2, Issued = 1 }; uow.Save(opE2P2); //Не хотим видеть в выборке от сотрудника 3 var opE3P2 = new EmployeeIssueOperation { OperationTime = new DateTime(2021, 2, 1, 14, 0, 0), AutoWriteoffDate = new DateTime(2021, 5, 1), Employee = employee3, Nomenclature = nomenclature, ProtectionTools = protectionTools2, Issued = 1 }; uow.Save(opE3P2); uow.Commit(); var repository = new EmployeeIssueRepository(uow); var result = repository.GetLastIssueOperationsForEmployee(new[] { employee, employee2 }); Assert.That(result, Has.No.Member(opE1P1)); Assert.That(result, Has.Member(op2E1P1)); Assert.That(result, Has.Member(opE1P2)); Assert.That(result, Has.No.Member(opE1P2Return)); Assert.That(result, Has.Member(opE2P2)); Assert.That(result, Has.No.Member(opE3P2)); } }
public void GetOperationsTouchDates_OneDateRangeTest() { using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) { var nomenclatureType = new ItemsType(); nomenclatureType.Name = "Тестовый тип номенклатуры"; uow.Save(nomenclatureType); var nomenclature = new Nomenclature { Type = nomenclatureType }; uow.Save(nomenclature); var protectionTools = new ProtectionTools { Name = "СИЗ для тестирования" }; protectionTools.AddNomeclature(nomenclature); uow.Save(protectionTools); var employee = new EmployeeCard(); uow.Save(employee); var opBefore = new EmployeeIssueOperation { OperationTime = new DateTime(2018, 12, 31, 14, 0, 0), AutoWriteoffDate = new DateTime(2020, 1, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools, Issued = 1 }; uow.Save(opBefore); var opInRange = new EmployeeIssueOperation { OperationTime = new DateTime(2019, 1, 1, 0, 0, 0), AutoWriteoffDate = new DateTime(2021, 1, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools, Issued = 1 }; uow.Save(opInRange); var opInRange2 = new EmployeeIssueOperation { OperationTime = new DateTime(2019, 1, 1, 13, 0, 0), AutoWriteoffDate = new DateTime(2021, 2, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools, Issued = 2 }; uow.Save(opInRange2); var opAfter = new EmployeeIssueOperation { OperationTime = new DateTime(2019, 1, 2, 13, 0, 0), AutoWriteoffDate = new DateTime(2021, 5, 1), Employee = employee, Nomenclature = nomenclature, ProtectionTools = protectionTools, Issued = 1 }; uow.Save(opAfter); uow.Commit(); var repository = new EmployeeIssueRepository(uow); var result = repository.GetOperationsByDates( new[] { employee }, new DateTime(2019, 1, 1), new DateTime(2019, 1, 1)); Assert.That(result.Any(x => x.OperationTime == new DateTime(2019, 1, 1, 0, 0, 0)), Is.True); Assert.That(result.Any(x => x.OperationTime == new DateTime(2019, 1, 1, 13, 0, 0)), Is.True); Assert.That(result.Count, Is.EqualTo(2)); } }
public GraphItem(EmployeeIssueOperation issueOperation) { IssueOperation = issueOperation; }
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 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))); } }