public void UpdateOperations_IssuingMultipleRows_TwoNomenclatureSameNeedsTest() { var ask = Substitute.For <IInteractiveQuestion>(); ask.Question(string.Empty).ReturnsForAnyArgs(true); using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) { var warehouse = new Warehouse(); uow.Save(warehouse); var sizeType = new SizeType(); var heightType = new SizeType(); uow.Save(sizeType); uow.Save(heightType); var nomenclatureType = new ItemsType { Name = "Тестовый тип номенклатуры", SizeType = sizeType }; uow.Save(nomenclatureType); var nomenclature = new Nomenclature { Type = nomenclatureType }; uow.Save(nomenclature); var size = new Size { SizeType = sizeType }; var height = new Size { SizeType = heightType }; uow.Save(size); uow.Save(height); var position1 = new StockPosition(nomenclature, 0, size, height); var nomenclature2 = new Nomenclature { Type = nomenclatureType }; uow.Save(nomenclature2); var position2 = new StockPosition(nomenclature2, 0, size, height); var protectionTools = new ProtectionTools { Name = "СИЗ для тестирования" }; protectionTools.AddNomeclature(nomenclature); protectionTools.AddNomeclature(nomenclature2); 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); uow.Save(employee); uow.Commit(); var employeeSize = new EmployeeSize { Size = size, SizeType = sizeType, Employee = employee }; var employeeHeight = new EmployeeSize { Size = height, SizeType = heightType, Employee = employee }; employee.Sizes.Add(employeeSize); employee.Sizes.Add(employeeHeight); var income = new Income { Warehouse = warehouse, Date = new DateTime(2017, 1, 1), Operation = IncomeOperations.Enter }; var incomeItem1 = income.AddItem(nomenclature); incomeItem1.Amount = 10; var incomeItem2 = income.AddItem(nomenclature2); incomeItem2.Amount = 5; income.UpdateOperations(uow, ask); uow.Save(income); var expense = new Expense { Operation = ExpenseOperations.Employee, Warehouse = warehouse, Employee = employee, Date = new DateTime(2018, 10, 22) }; expense.AddItem(position1, 1); expense.AddItem(position2, 1); var baseParameters = Substitute.For <BaseParameters>(); baseParameters.ColDayAheadOfShedule.Returns(0); //Обновление операций expense.UpdateOperations(uow, baseParameters, ask); uow.Save(expense); uow.Commit(); expense.UpdateEmployeeWearItems(); //Тут ожидаем предложение перенести дату использование второй номенклатуры на год. ask.ReceivedWithAnyArgs().Question(String.Empty); Assert.That(employee.WorkwearItems[0].NextIssue, Is.EqualTo(new DateTime(2020, 10, 22)) ); } }
private void SetValue( SettingsMatchEmployeesViewModel settings, IUnitOfWork uow, EmployeeCard employee, SheetRowEmployee row, ImportedColumn <DataTypeEmployee> column) { var value = row.CellStringValue(column.Index); var dataType = column.DataType; if (String.IsNullOrWhiteSpace(value)) { return; } switch (dataType) { case DataTypeEmployee.CardKey: employee.CardKey = value; break; case DataTypeEmployee.PersonnelNumber: employee.PersonnelNumber = (settings.ConvertPersonnelNumber ? EmployeeParse.ConvertPersonnelNumber(value) : value)?.Trim(); break; case DataTypeEmployee.Phone: employee.PhoneNumber = phoneFormatter.FormatString(value); break; case DataTypeEmployee.LastName: employee.LastName = value; break; case DataTypeEmployee.FirstName: employee.FirstName = value; if (employee.Sex == Sex.None) { employee.Sex = personNames.GetSexByName(employee.FirstName); } break; case DataTypeEmployee.Patronymic: employee.Patronymic = value; break; case DataTypeEmployee.Sex: //Первая М английская, вторая русская. if (value.StartsWith("M", StringComparison.CurrentCultureIgnoreCase) || value.StartsWith("М", StringComparison.CurrentCultureIgnoreCase)) { employee.Sex = Sex.M; } if (value.StartsWith("F", StringComparison.CurrentCultureIgnoreCase) || value.StartsWith("Ж", StringComparison.CurrentCultureIgnoreCase)) { employee.Sex = Sex.F; } break; case DataTypeEmployee.Fio: value.SplitFullName(out var lastName, out var firstName, out var patronymic); if (!String.IsNullOrEmpty(lastName) && !String.Equals(employee.LastName, value, StringComparison.CurrentCultureIgnoreCase)) { employee.LastName = lastName; } if (!String.IsNullOrEmpty(firstName) && !String.Equals(employee.FirstName, value, StringComparison.CurrentCultureIgnoreCase)) { employee.FirstName = firstName; } if (!String.IsNullOrEmpty(patronymic) && !String.Equals(employee.Patronymic, value, StringComparison.CurrentCultureIgnoreCase)) { employee.Patronymic = patronymic; } if (employee.Sex == Sex.None && !String.IsNullOrWhiteSpace(employee.FirstName)) { employee.Sex = personNames.GetSexByName(employee.FirstName); } break; case DataTypeEmployee.HireDate: var hireDate = row.CellDateTimeValue(column.Index); if (hireDate != null) { employee.HireDate = hireDate; } break; case DataTypeEmployee.DismissDate: var dismissDate = row.CellDateTimeValue(column.Index); if (dismissDate != null) { employee.DismissDate = dismissDate; } break; case DataTypeEmployee.BirthDate: var birthDate = row.CellDateTimeValue(column.Index); if (birthDate != null) { employee.BirthDate = birthDate; } break; case DataTypeEmployee.Subdivision: case DataTypeEmployee.Department: case DataTypeEmployee.Post: //Устанавливаем в MakeChange; break; case DataTypeEmployee.Growth: var height = SizeParser.ParseSize(uow, value, sizeService, CategorySizeType.Height); if (height is null) { break; } var employeeHeight = employee.Sizes.FirstOrDefault(x => x.SizeType == height.SizeType); if (employeeHeight is null) { employeeHeight = new EmployeeSize { Size = height, SizeType = height.SizeType, Employee = employee }; employee.Sizes.Add(employeeHeight); } else { employeeHeight.Size = height; } break; case DataTypeEmployee.WearSize: var size = SizeParser.ParseSize(uow, value, sizeService, CategorySizeType.Size); if (size is null) { break; } var employeeSize = employee.Sizes.FirstOrDefault(x => x.SizeType == size.SizeType); if (employeeSize is null) { employeeSize = new EmployeeSize { Size = size, SizeType = size.SizeType, Employee = employee }; employee.Sizes.Add(employeeSize); } else { employeeSize.Size = size; } break; case DataTypeEmployee.ShoesSize: { var shoesSize = SizeParser.ParseSize(uow, value, sizeService, CategorySizeType.Size); if (shoesSize is null) { break; } var employeeShoesSize = employee.Sizes.FirstOrDefault(x => x.SizeType == shoesSize.SizeType); if (employeeShoesSize is null) { employeeShoesSize = new EmployeeSize { Size = shoesSize, SizeType = shoesSize.SizeType, Employee = employee }; employee.Sizes.Add(employeeShoesSize); } else { employeeShoesSize.Size = shoesSize; } } break; default: throw new NotSupportedException($"Тип данных {dataType} не поддерживается."); } }
public void MatchChanges( IProgressBarDisplayable progress, SettingsWorkwearItemsViewModel settings, CountersViewModel counters, IUnitOfWork uow, IEnumerable <SheetRowWorkwearItems> list, List <ImportedColumn <DataTypeWorkwearItems> > columns) { var personnelNumberColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.PersonnelNumber); var protectionToolsColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.ProtectionTools); var nomenclatureColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.Nomenclature); var issueDateColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.IssueDate); var countColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.Count); var postColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.Post); var subdivisionColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.Subdivision); var sizeAndGrowthColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.SizeAndGrowth); var sizeColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.Size); var growthColumn = columns.FirstOrDefault(x => x.DataType == DataTypeWorkwearItems.Growth); progress.Start(list.Count() * 2 + 3, text: "Загрузка сотрудников"); var personnelNumbers = list.Select(x => GetPersonalNumber(settings, x, personnelNumberColumn.Index)) .Where(x => !String.IsNullOrWhiteSpace(x)).Distinct().ToArray(); var employees = uow.Session.QueryOver <EmployeeCard>() .Where(x => x.PersonnelNumber.IsIn(personnelNumbers)) .Fetch(SelectMode.Fetch, x => x.WorkwearItems) .List(); foreach (var row in list) { progress.Add(text: "Сопоставление"); row.Date = ParseDateOrNull(row.CellStringValue(issueDateColumn.Index)); if (row.Date == null) { row.ProgramSkipped = true; row.AddColumnChange(issueDateColumn, ChangeType.ParseError); continue; } if (row.CellIntValue(countColumn.Index) == null) { row.ProgramSkipped = true; row.AddColumnChange(countColumn, ChangeType.ParseError); continue; } row.Employee = employees.FirstOrDefault(x => x.PersonnelNumber == GetPersonalNumber(settings, row, personnelNumberColumn.Index)); if (row.Employee == null) { logger.Warn( $"Не найден сотрудник в табельным номером [{GetPersonalNumber(settings, row, personnelNumberColumn.Index)}]. Пропускаем."); row.ProgramSkipped = true; row.AddColumnChange(personnelNumberColumn, ChangeType.NotFound); counters.AddCount(CountersWorkwearItems.EmployeeNotFound); continue; } var protectionToolName = row.CellStringValue(protectionToolsColumn.Index); row.WorkwearItem = row.Employee.WorkwearItems.FirstOrDefault(x => x.ProtectionTools.Name == protectionToolName); if (row.WorkwearItem == null && postColumn != null && subdivisionColumn != null) { if (!TryAddNorm(uow, row.CellStringValue(postColumn.Index), row.CellStringValue(subdivisionColumn.Index), row.Employee)) { row.AddColumnChange(postColumn, ChangeType.NotFound); row.AddColumnChange(subdivisionColumn, ChangeType.NotFound); } else { counters.AddCount(CountersWorkwearItems.EmployeesAddNorm); } } if (row.WorkwearItem != null) { continue; } row.ProgramSkipped = true; row.AddColumnChange(protectionToolsColumn, ChangeType.NotFound); } progress.Add(text: "Загрузка номенклатуры"); var nomenclatureTypes = new NomenclatureTypes(uow, sizeService, true); var nomenclatureNames = list.Select(x => x.CellStringValue(nomenclatureColumn.Index)).Where(x => x != null).Distinct().ToArray(); var nomenclatures = nomenclatureRepository.GetNomenclatureByName(uow, nomenclatureNames); progress.Add(text: "Загрузка операций выдачи"); var dates = list .Select(x => x.Date) .Where(x => x != null) .Select(x => x.Value); var startDate = dates.Min(); var endDate = dates.Max(); var employeeIds = list.Where(x => x.Employee != null) .Select(x => x.Employee.Id).Distinct().ToArray(); var operations = uow.Session.QueryOver <EmployeeIssueOperation>() .Where(x => x.Employee.Id.IsIn(employeeIds)) .Where(x => x.OperationTime >= startDate) .Where(x => x.OperationTime < endDate.AddDays(1)) .List() .GroupBy(x => x.Employee); foreach (var row in list) { progress.Add(text: "Обработка операций выдачи"); if (row.Skipped) { continue; } var nomenclatureName = row.CellStringValue(nomenclatureColumn.Index); if (String.IsNullOrWhiteSpace(nomenclatureName)) { row.AddColumnChange(nomenclatureColumn, ChangeType.NotFound); continue; } var nomenclature = UsedNomeclature.FirstOrDefault(x => String.Equals(x.Name, nomenclatureName, StringComparison.CurrentCultureIgnoreCase)); if (nomenclature == null) { nomenclature = nomenclatures.FirstOrDefault(x => String.Equals(x.Name, nomenclatureName, StringComparison.CurrentCultureIgnoreCase)); if (nomenclature == null) { nomenclature = new Nomenclature { Name = nomenclatureName, Type = row.WorkwearItem.ProtectionTools.Type, Comment = "Создана при импорте выдачи из Excel", }; nomenclature.Sex = nomenclatureTypes.ParseSex(nomenclature.Name) ?? ClothesSex.Universal; row.WorkwearItem.ProtectionTools.AddNomeclature(nomenclature); } UsedNomeclature.Add(nomenclature); } row.Operation = operations.FirstOrDefault(group => group.Key == row.Employee) ?.FirstOrDefault(x => x.OperationTime.Date == row.Date && x.Nomenclature == nomenclature); if (row.Operation != null) { //TODO Обновление операций не реализовано continue; } if (row.Operation != null) { continue; } { var count = row.CellIntValue(countColumn.Index).Value; var expenseDate = row.WorkwearItem.ActiveNormItem.CalculateExpireDate(row.Date.Value, count); row.Operation = new EmployeeIssueOperation { OperationTime = row.Date.Value, Employee = row.Employee, Issued = count, Nomenclature = nomenclature, AutoWriteoffDate = expenseDate, ExpiryByNorm = expenseDate, NormItem = row.WorkwearItem.ActiveNormItem, ProtectionTools = row.WorkwearItem.ProtectionTools, Returned = 0, StartOfUse = row.Date, UseAutoWriteoff = expenseDate != null, }; //Обрабатываем размер. if (TryParseSizeAndGrowth(uow, row, columns, out var sizeAndGrowth)) { row.Operation.WearSize = sizeAndGrowth.Size; row.Operation.Height = sizeAndGrowth.Growth; var sizeOk = nomenclature.Type.SizeType == sizeAndGrowth.Size.SizeType; var growthOk = nomenclature.Type.HeightType == sizeAndGrowth.Growth.SizeType; if (sizeAndGrowthColumn != null) { row.ChangedColumns.Add(sizeAndGrowthColumn, new ChangeState(sizeOk && growthOk ? ChangeType.NewEntity : ChangeType.ParseError)); } if (sizeColumn != null) { row.ChangedColumns.Add(sizeColumn, new ChangeState(sizeOk ? ChangeType.NewEntity : ChangeType.ParseError)); } if (growthColumn != null) { row.ChangedColumns.Add(growthColumn, new ChangeState(growthOk ? ChangeType.NewEntity : ChangeType.ParseError)); } } //Проставляем размер в сотрудника. if (row.Operation.Height != null) { var employeeSize = row.Employee.Sizes.FirstOrDefault(x => x.SizeType == row.Operation.Height.SizeType); if (employeeSize is null) { employeeSize = new EmployeeSize { Size = row.Operation.Height, SizeType = row.Operation.Height.SizeType, Employee = row.Employee }; row.Employee.Sizes.Add(employeeSize); } else { employeeSize.Size = row.Operation.Height; } ChangedEmployees.Add(row.Employee); counters.AddCount(CountersWorkwearItems.EmployeesSetSize); } if (row.Operation.WearSize != null) { var employeeSize = row.Employee.Sizes.FirstOrDefault(x => x.SizeType == row.Operation.WearSize.SizeType); if (employeeSize is null) { employeeSize = new EmployeeSize { Size = row.Operation.WearSize, SizeType = row.Operation.WearSize.SizeType, Employee = row.Employee }; row.Employee.Sizes.Add(employeeSize); } else { employeeSize.Size = row.Operation.WearSize; } ChangedEmployees.Add(row.Employee); counters.AddCount(CountersWorkwearItems.EmployeesSetSize); } var toSetChangeColumns = columns.Where( x => x.DataType != DataTypeWorkwearItems.Unknown && x.DataType != DataTypeWorkwearItems.SizeAndGrowth && x.DataType != DataTypeWorkwearItems.Size && x.DataType != DataTypeWorkwearItems.Growth ); foreach (var column in toSetChangeColumns) { if (!row.ChangedColumns.ContainsKey(column)) { row.ChangedColumns.Add(column, new ChangeState(ChangeType.NewEntity)); } } } } progress.Close(); }
public void BestChoise_SelfNomenclatureFirstTest() { 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()) { var warehouse = new Warehouse(); uow.Save(warehouse); var sizeType = new SizeType(); uow.Save(sizeType); var nomenclatureType = new ItemsType { Name = "Обувь", Category = ItemTypeCategory.wear, SizeType = sizeType }; uow.Save(nomenclatureType); var nomenclature = new Nomenclature { Type = nomenclatureType, Sex = ClothesSex.Men, }; uow.Save(nomenclature); var nomenclature2 = new Nomenclature { Type = nomenclatureType, Sex = ClothesSex.Men, }; uow.Save(nomenclature2); var protectionTools = new ProtectionTools { Name = "Номенклатура нормы" }; protectionTools.AddNomeclature(nomenclature); var protectionTools2 = new ProtectionTools { Name = "Номенклатура нормы_2" }; protectionTools2.AddNomeclature(nomenclature2); protectionTools.AddAnalog(protectionTools2); protectionTools2.AddAnalog(protectionTools); uow.Save(protectionTools); uow.Save(protectionTools2); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Year; normItem.PeriodCount = 1; var normItem2 = norm.AddItem(protectionTools2); normItem2.Amount = 1; 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.EqualTo(2)); uow.Save(employee); uow.Commit(); var size = new Size { SizeType = sizeType }; uow.Save(size); var employeeSize = new EmployeeSize { SizeType = sizeType, Size = size, Employee = employee }; uow.Save(employeeSize); employee.Sizes.Add(employeeSize); var income = new Income { Warehouse = warehouse, Date = new DateTime(2020, 07, 20), Operation = IncomeOperations.Enter }; var incomeItem1 = income.AddItem(nomenclature); incomeItem1.Amount = 1; incomeItem1.WearSize = size; var incomeItem2 = income.AddItem(nomenclature2); incomeItem2.Amount = 2; incomeItem2.WearSize = size; income.UpdateOperations(uow, ask); uow.Save(income); uow.Commit(); Assert.That(uow.GetAll <WarehouseOperation>().Count(), Is.EqualTo(2)); employee.FillWearInStockInfo(uow, baseParameters, warehouse, new DateTime(2020, 07, 22)); var item1 = employee.WorkwearItems.FirstOrDefault(x => x.ActiveNormItem == normItem); var item2 = employee.WorkwearItems.FirstOrDefault(x => x.ActiveNormItem == normItem2); Assert.That(item1.BestChoiceInStock.First().Nomenclature.Id, Is.EqualTo(nomenclature.Id)); Assert.That(item1.BestChoiceInStock.Count(), Is.EqualTo(2)); Assert.That(item2.BestChoiceInStock.First().Nomenclature.Id, Is.EqualTo(nomenclature2.Id)); Assert.That(item2.BestChoiceInStock.Count(), Is.EqualTo(2)); } }
public void BestChoise_IssuingMultipleRows_TwoNomeclatureShoesTypeSameNeedsTest() { 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()) { var warehouse = new Warehouse(); uow.Save(warehouse); var shoes = new SizeType { Name = "Обувь" }; uow.Save(shoes); var winterShoes = new SizeType { Name = "Зимняя обувь" }; uow.Save(winterShoes); var nomenclatureType = new ItemsType { Name = "Обувь", Category = ItemTypeCategory.wear, SizeType = shoes }; uow.Save(nomenclatureType); var nomenclatureType2 = new ItemsType { Name = "Зимняя обувь", Category = ItemTypeCategory.wear, SizeType = winterShoes }; uow.Save(nomenclatureType2); var nomenclature = new Nomenclature { Type = nomenclatureType, Sex = ClothesSex.Men }; uow.Save(nomenclature); var nomenclature2 = new Nomenclature { Type = nomenclatureType2, Sex = ClothesSex.Men }; uow.Save(nomenclature2); var nomenclature3 = new Nomenclature { Type = nomenclatureType, Sex = ClothesSex.Men }; uow.Save(nomenclature3); var protectionTools = new ProtectionTools { Name = "Номеклатура нормы" }; protectionTools.AddNomeclature(nomenclature); protectionTools.AddNomeclature(nomenclature3); uow.Save(protectionTools); var protectionTools2 = new ProtectionTools { Name = "Номенклатура нормы_2" }; protectionTools2.AddNomeclature(nomenclature2); uow.Save(protectionTools2); var norm = new Norm(); var normItem = norm.AddItem(protectionTools); normItem.Amount = 1; normItem.NormPeriod = NormPeriodType.Year; normItem.PeriodCount = 1; var normItem2 = norm.AddItem(protectionTools2); normItem2.Amount = 1; normItem2.NormPeriod = NormPeriodType.Year; normItem2.PeriodCount = 1; uow.Save(norm); var shoesSize = new Size { SizeType = shoes, Name = "42" }; var winterShoesSize = new Size { SizeType = winterShoes, Name = "43" }; uow.Save(shoesSize); uow.Save(winterShoesSize); 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 employeeShoesSize = new EmployeeSize { Size = shoesSize, SizeType = shoes, Employee = employee }; var employeeWinterShoesSize = new EmployeeSize { Size = winterShoesSize, SizeType = winterShoes, Employee = employee }; uow.Save(employeeShoesSize); uow.Save(employeeWinterShoesSize); employee.Sizes.Add(employeeShoesSize); employee.Sizes.Add(employeeWinterShoesSize); var income = new Income { Warehouse = warehouse, Date = new DateTime(2020, 07, 20), Operation = IncomeOperations.Enter }; var incomeItem1 = income.AddItem(nomenclature); incomeItem1.Amount = 1; incomeItem1.WearSize = shoesSize; var incomeItem2 = income.AddItem(nomenclature2); incomeItem2.Amount = 2; incomeItem2.WearSize = winterShoesSize; var incomeItem3 = income.AddItem(nomenclature3); incomeItem3.Amount = 3; incomeItem3.WearSize = shoesSize; income.UpdateOperations(uow, ask); uow.Save(income); uow.Commit(); Assert.That(uow.GetAll <WarehouseOperation>().Count(), Is.EqualTo(3)); employee.FillWearInStockInfo(uow, baseParameters, warehouse, new DateTime(2020, 07, 22)); Assert.That(employee.GetUnderreceivedItems(baseParameters).Count(), Is.GreaterThan(0)); Assert.That(employee.GetUnderreceivedItems(baseParameters).Count(), Is.EqualTo(2)); var employeeCardItem = employee.GetUnderreceivedItems(baseParameters).First(); Assert.That(employeeCardItem.InStock.Count(), Is.GreaterThan(0)); var bestChoiceInStock = employeeCardItem.BestChoiceInStock; var bestChoiceCount = employeeCardItem.BestChoiceInStock.Count(); Assert.That(employeeCardItem.BestChoiceInStock.Count(), Is.GreaterThan(0)); Assert.That(employeeCardItem.BestChoiceInStock.Count(), Is.EqualTo(2)); } }
public void BestChoise_IssuingMultipleRows_TwoNomeclatureWearTypeSameNeedsTest() { 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()) { var warehouse = new Warehouse(); uow.Save(warehouse); var sizeType = new SizeType { Name = "Тестовый тип", CategorySizeType = CategorySizeType.Size }; var heightType = new SizeType { Name = "Тестовый рост", CategorySizeType = CategorySizeType.Height }; uow.Save(sizeType); uow.Save(heightType); var nomenclatureType = new ItemsType { Name = "Тестовый тип номенклатуры", Category = ItemTypeCategory.wear, SizeType = sizeType, HeightType = heightType }; uow.Save(nomenclatureType); var nomenclature = new Nomenclature { Type = nomenclatureType, Sex = ClothesSex.Men, }; uow.Save(nomenclature); var nomenclature2 = new Nomenclature { Type = nomenclatureType, Sex = ClothesSex.Men, }; uow.Save(nomenclature2); var protectionTools = new ProtectionTools { Name = "Номенклатура нормы" }; protectionTools.AddNomeclature(nomenclature); protectionTools.AddNomeclature(nomenclature2); 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 size = new Size { Name = "50", SizeType = sizeType }; var height = new Size { Name = "176", SizeType = heightType }; uow.Save(size); uow.Save(height); var employee = new EmployeeCard(); employee.AddUsedNorm(norm); employee.Sex = Sex.M; Assert.That(employee.WorkwearItems.Count, Is.GreaterThan(0)); uow.Save(employee); var employeeSize = new EmployeeSize { Size = size, SizeType = sizeType, Employee = employee }; var employeeHeight = new EmployeeSize { Size = height, SizeType = heightType, Employee = employee }; uow.Save(employeeSize); uow.Save(employeeHeight); employee.Sizes.Add(employeeSize); employee.Sizes.Add(employeeHeight); uow.Commit(); var income = new Income { Warehouse = warehouse, Date = new DateTime(2020, 07, 20), Operation = IncomeOperations.Enter }; var incomeItem1 = income.AddItem(nomenclature); incomeItem1.Amount = 10; incomeItem1.WearSize = size; incomeItem1.Height = height; var incomeItem2 = income.AddItem(nomenclature2); incomeItem2.Amount = 5; incomeItem2.WearSize = size; incomeItem2.Height = height; income.UpdateOperations(uow, ask); uow.Save(income); uow.Commit(); Assert.That(uow.GetAll <WarehouseOperation>().Count(), Is.EqualTo(2)); employee.FillWearInStockInfo(uow, baseParameters, warehouse, new DateTime(2020, 07, 22)); Assert.That(employee.GetUnderreceivedItems(baseParameters).Count(), Is.GreaterThan(0)); var employeeCardItem = employee.GetUnderreceivedItems(baseParameters).First(); var employeeCardItemCount = employee.GetUnderreceivedItems(baseParameters).Count(); var inStock = employeeCardItem.InStock; Assert.That(employeeCardItem.InStock.Count, Is.GreaterThan(0)); var bestChoiceCount = employeeCardItem.BestChoiceInStock.Count(); Assert.That(employeeCardItem.BestChoiceInStock.Count(), Is.GreaterThan(0)); var bestChoice = employeeCardItem.BestChoiceInStock.First(); Assert.That(bestChoice.Nomenclature, Is.EqualTo(nomenclature)); } }