Пример #1
0
        public void CanAddMultiRowWithSameNomenclatureTest()
        {
            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();
                uow.Save(sizeType);

                var nomenclatureType = new ItemsType {
                    Name = "Тестовый тип номенклатуры", SizeType = sizeType
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var sizeX = new Size {
                    Name = "X", SizeType = sizeType
                };
                var sizeXl = new Size {
                    Name = "XL", SizeType = sizeType
                };
                uow.Save(sizeX);
                uow.Save(sizeXl);

                var income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.WearSize = sizeX;
                incomeItem1.Amount   = 10;
                var incomeItem2 = income.AddItem(nomenclature);
                incomeItem2.WearSize = sizeXl;
                incomeItem2.Amount   = 5;
                income.UpdateOperations(uow, ask);
                var validator = new QS.Validation.ObjectValidator();
                Assert.That(validator.Validate(income), Is.True);
                uow.Save(income);
                uow.Commit();

                var stock = new StockRepository()
                            .StockBalances(uow, warehouse, new List <Nomenclature> {
                    nomenclature
                }, new DateTime(2017, 1, 2));
                Assert.That(stock.Count, Is.EqualTo(2));
            }
        }
Пример #2
0
        public void UpdateIncomeTest()
        {
            var ask = Substitute.For <IInteractiveQuestion>();

            ask.Question(string.Empty).ReturnsForAnyArgs(true);

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var warehouse = new Warehouse {
                    Name = "TestWarehouse"
                };
                uow.Save(warehouse);

                var income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var nomenclature1 = new Nomenclature {
                    Name = "TestNomenclature1"
                };
                uow.Save(nomenclature1);
                var nomenclature2 = new Nomenclature {
                    Name = "TestNomenclature2"
                };
                uow.Save(nomenclature2);
                var item1 = income.AddItem(nomenclature1);
                var item2 = income.AddItem(nomenclature2);

                income.UpdateOperations(uow, ask);
                uow.Save(income);
                uow.Commit();

                var stockRepository = new StockRepository();
                var stock1          = stockRepository.StockBalances(uow, warehouse,
                                                                    new List <Nomenclature> {
                    nomenclature1, nomenclature2
                },
                                                                    new DateTime(2017, 1, 2));
                Assert.That(stock1.Count(), Is.EqualTo(2));

                income.RemoveItem(item1);
                income.UpdateOperations(uow, ask);
                uow.Save(income);
                uow.Commit();

                var stock2 = stockRepository.StockBalances(uow, warehouse,
                                                           new List <Nomenclature> {
                    nomenclature1, nomenclature2
                },
                                                           new DateTime(2017, 1, 2));

                Assert.That(stock2.Count(), Is.EqualTo(1));
            }
        }
Пример #3
0
        public void UpdateEmployeeWearItems_NextIssueDiffIdsTest()
        {
            NewSessionWithSameDB();
            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);


                //Поднимаем id номенклатуры до 2.
                uow.Save(new Nomenclature());

                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);

                //Поднимаем id сиза до 3.
                uow.Save(new ProtectionTools {
                    Name = "Id = 1"
                });
                uow.Save(new ProtectionTools {
                    Name = "Id = 2"
                });

                var protectionTools = new 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 = 1;
                uow.Save(norm);

                var employee = new EmployeeCard();
                employee.AddUsedNorm(norm);
                uow.Save(employee);
                uow.Commit();

                var income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.Amount = 10;
                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);

                var baseParameters = Substitute.For <BaseParameters>();
                baseParameters.ColDayAheadOfShedule.Returns(0);

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Commit();

                expense.UpdateEmployeeWearItems();
                uow.Commit();

                using (var uow2 = UnitOfWorkFactory.CreateWithoutRoot()) {
                    var employeeTest = uow2.GetById <EmployeeCard>(employee.Id);
                    Assert.That(employeeTest.WorkwearItems[0].NextIssue, Is.EqualTo(new DateTime(2018, 11, 22)));
                }
            }
        }
        public void IssuingToSubdivisionTest()
        {
            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     = "Тестовый тип номенклатуры",
                    SizeType = sizeType
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Name = "Тестовая номеклатура",
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var size = new Size {
                    SizeType = sizeType
                };
                var height = new Size();
                uow.Save(size);
                uow.Save(height);

                var position1 = new StockPosition(nomenclature, 0, size, height);

                var subdivision = new Subdivision {
                    Name = "Тестовое подразделение"
                };
                uow.Save(subdivision);

                var place = new SubdivisionPlace {
                    Name        = "Тестовое место",
                    Subdivision = subdivision
                };
                uow.Save(place);

                var income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.Amount = 10;
                income.UpdateOperations(uow, ask);
                uow.Save(income);

                var expense = new Expense {
                    Operation   = ExpenseOperations.Object,
                    Warehouse   = warehouse,
                    Subdivision = subdivision,
                    Date        = new DateTime(2018, 10, 22)
                };
                var item1 = expense.AddItem(position1, 1);
                item1.SubdivisionPlace = place;

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Commit();

                var listed  = SubdivisionRepository.ItemsBalance(uow, subdivision);
                var balance = listed.First();
                Assert.That(balance.Amount, Is.EqualTo(1));
                Assert.That(balance.NomeclatureName, Is.EqualTo("Тестовая номеклатура"));
                Assert.That(balance.Place, Is.EqualTo("Тестовое место"));
                Assert.That(balance.WearPercent, Is.EqualTo(0m));
            }
        }
Пример #5
0
        public void GetReferencedDocuments_ReturnTest()
        {
            var interactive = Substitute.For <IInteractiveQuestion>();

            interactive.Question(string.Empty).ReturnsForAnyArgs(true);
            var baseParameters = Substitute.For <BaseParameters>();

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var warehouse = new Warehouse();
                uow.Save(warehouse);

                var nomenclatureType = new ItemsType {
                    Name = "Тестовый тип номенклатуры"
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var employee = new EmployeeCard();
                uow.Save(employee);

                var expense = new Expense {
                    Date      = new DateTime(2021, 9, 10),
                    Employee  = employee,
                    Operation = ExpenseOperations.Employee,
                    Warehouse = warehouse,
                };

                var size   = new Size();
                var height = new Size();
                uow.Save(size);
                uow.Save(height);

                var stockPosition = new StockPosition(nomenclature, 0, size, height);
                var item          = expense.AddItem(stockPosition, 10);

                expense.UpdateOperations(uow, baseParameters, interactive);
                uow.Save(expense);

                //Возвращаем 2 штуки
                var income = new Income {
                    Date         = new DateTime(2021, 9, 11),
                    Operation    = IncomeOperations.Return,
                    EmployeeCard = employee,
                    Warehouse    = warehouse,
                };

                var returnItem = income.AddItem(item.EmployeeIssueOperation, 2);
                income.UpdateOperations(uow, interactive);
                uow.Save(income);
                uow.Commit();

                var repository = new EmployeeIssueRepository(uow);
                var result     = repository.GetReferencedDocuments(returnItem.ReturnFromEmployeeOperation.Id);
                Assert.That(result.First().DocumentType, Is.EqualTo(StokDocumentType.IncomeDoc));
                Assert.That(result.First().DocumentId, Is.EqualTo(income.Id));
                Assert.That(result.First().ItemId, Is.EqualTo(returnItem.Id));
            }
        }
Пример #6
0
        public void WriteoffMainTest()
        {
            var ask = Substitute.For <IInteractiveQuestion>();

            ask.Question(string.Empty).ReturnsForAnyArgs(true);
            var baseParameters = Substitute.For <BaseParameters>();

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var warehouse = new Warehouse();
                uow.Save(warehouse);

                var nomenclatureType = new ItemsType {
                    Name = "Тестовый тип номенклатуры"
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var size   = new Size();
                var height = new Size();
                uow.Save(size);
                uow.Save(height);

                var position1 = new StockPosition(nomenclature, 0, size, height);

                var protectionTools = new ProtectionTools {
                    Name = "СИЗ для тестирования"
                };
                protectionTools.AddNomeclature(nomenclature);
                uow.Save(protectionTools);

                var employee = new EmployeeCard();
                uow.Save(employee);
                uow.Commit();

                var income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.Amount = 10;
                income.UpdateOperations(uow, ask);
                uow.Save(income);

                var expense = new Expense {
                    Operation = ExpenseOperations.Employee,
                    Warehouse = warehouse,
                    Employee  = employee,
                    Date      = new DateTime(2018, 10, 22)
                };
                var item = expense.AddItem(position1, 3);

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Commit();

                var balance = EmployeeRepository.ItemsBalance(uow, employee, new DateTime(2018, 10, 30));
                Assert.That(balance.First().Amount, Is.EqualTo(3));

                //Списываем
                var writeoff = new Writeoff {
                    Date = new DateTime(2018, 10, 25)
                };
                writeoff.AddItem(item.EmployeeIssueOperation, 1);

                //Обновление операций
                writeoff.UpdateOperations(uow);
                uow.Save(writeoff);
                uow.Commit();

                var balanceAfter = EmployeeRepository.ItemsBalance(uow, employee, new DateTime(2018, 10, 30));
                Assert.That(balanceAfter.First().Amount, Is.EqualTo(2));
            }
        }
Пример #7
0
        public void UpdateOperations_DeleteRowTest()
        {
            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 warehouse = new Warehouse();
                uow.Save(warehouse);

                var nomenclatureType = new ItemsType();
                nomenclatureType.Name = "Тестовый тип номенклатуры";
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature();
                nomenclature.Type = nomenclatureType;
                uow.Save(nomenclature);

                var position1 = new StockPosition(nomenclature, 0, null, null);

                var nomenclatureType2 = new ItemsType();
                nomenclatureType2.Name = "Тестовый тип номенклатуры2";
                uow.Save(nomenclatureType2);

                var nomenclature2 = new Nomenclature();
                nomenclature2.Type = nomenclatureType2;
                uow.Save(nomenclature2);

                var protectionTools1 = new ProtectionTools();
                protectionTools1.Name = "СИЗ для тестирования";
                protectionTools1.AddNomeclature(nomenclature);
                uow.Save(protectionTools1);

                var protectionTools2 = new ProtectionTools();
                protectionTools2.Name = "СИЗ для тестирования2";
                protectionTools2.AddNomeclature(nomenclature2);
                uow.Save(protectionTools2);

                var position2 = new StockPosition(nomenclature2, 0, null, null);

                var norm     = new Norm();
                var normItem = norm.AddItem(protectionTools1);
                normItem.Amount      = 1;
                normItem.NormPeriod  = NormPeriodType.Year;
                normItem.PeriodCount = 1;
                var normItem2 = norm.AddItem(protectionTools2);
                normItem2.Amount      = 1;
                normItem2.NormPeriod  = NormPeriodType.Month;
                normItem2.PeriodCount = 4;
                uow.Save(norm);

                var employee = new EmployeeCard();
                employee.HireDate = new DateTime(2018, 1, 15);
                employee.AddUsedNorm(norm);
                uow.Save(employee);
                uow.Commit();

                var income = new Income();
                income.Warehouse = warehouse;
                income.Date      = new DateTime(2017, 1, 1);
                income.Operation = IncomeOperations.Enter;
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.Amount = 10;
                var incomeItem2 = income.AddItem(nomenclature2);
                incomeItem2.Amount = 10;
                income.UpdateOperations(uow, ask);
                uow.Save(income);

                var expense = new Expense();
                expense.Warehouse = warehouse;
                expense.Employee  = employee;
                expense.Date      = new DateTime(2018, 4, 22);
                expense.Operation = ExpenseOperations.Employee;
                expense.AddItem(position1, 1);
                expense.AddItem(position2, 1);

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Commit();
                expense.UpdateEmployeeWearItems();
                employee.WorkwearItems.First(e => e.ProtectionTools.IsSame(protectionTools2)).Created = new DateTime(2018, 4, 22);
                uow.Save(expense.Employee);
                uow.Commit();

                Assert.That(employee.WorkwearItems.First(e => e.ProtectionTools.IsSame(protectionTools2)).NextIssue,
                            Is.EqualTo(new DateTime(2018, 8, 22))
                            );

                //Выполняем удаление
                expense.RemoveItem(expense.Items.First(e => e.Nomenclature.Type.IsSame(nomenclatureType2)));
                uow.Save(expense);
                uow.Commit();

                //проверяем данные
                using (var uow2 = UnitOfWorkFactory.CreateWithoutRoot("Тест на обработку события удаления uow2")) {
                    var resultEmployee = uow2.GetById <EmployeeCard>(employee.Id);
                    Assert.That(resultEmployee.WorkwearItems.First(e => e.ProtectionTools.IsSame(protectionTools2)).NextIssue,
                                Is.EqualTo(new DateTime(2018, 4, 22)));
                }
            }
        }
        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));
            }
        }
Пример #9
0
        public void IncomeOnTwoWarehousesTest()
        {
            var ask = Substitute.For <IInteractiveQuestion>();

            ask.Question(string.Empty).ReturnsForAnyArgs(true);

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var warehouse = new Warehouse();
                uow.Save(warehouse);

                var warehouse2 = new Warehouse();
                uow.Save(warehouse2);

                var sizeType = new SizeType();
                uow.Save(sizeType);

                var nomenclatureType = new ItemsType {
                    Name     = "Тестовый тип номенклатуры",
                    SizeType = sizeType
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var sizeX = new Size {
                    Name = "X", SizeType = sizeType
                };
                uow.Save(sizeX);

                var income1 = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income1.AddItem(nomenclature);
                incomeItem1.WearSize = sizeX;
                incomeItem1.Amount   = 10;
                var incomeItem2 = income1.AddItem(nomenclature);
                incomeItem2.WearSize = sizeX;
                incomeItem2.Amount   = 5;
                income1.UpdateOperations(uow, ask);
                uow.Save(income1);

                var income2 = new Income {
                    Warehouse = warehouse2,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var income2Item1 = income2.AddItem(nomenclature);
                income2Item1.WearSize = sizeX;
                income2Item1.Amount   = 7;
                income2.UpdateOperations(uow, ask);
                uow.Save(income2);

                uow.Commit();
                var stockRepository = new StockRepository();
                var stock1          = stockRepository.StockBalances(uow, warehouse, new List <Nomenclature> {
                    nomenclature
                }, new DateTime(2017, 1, 2));
                Assert.That(stock1.Sum(x => x.Amount), Is.EqualTo(15));
                var stock2 = stockRepository.StockBalances(uow, warehouse2, new List <Nomenclature> {
                    nomenclature
                }, new DateTime(2017, 1, 2));
                Assert.That(stock2.Sum(x => x.Amount), Is.EqualTo(7));
            }
        }
Пример #10
0
        public void UpdateEmployeeWearItems_NextIssueDiffIdsTest()
        {
            NewSessionWithSameDB();
            var ask = Substitute.For <IInteractiveQuestion>();

            ask.Question(string.Empty).ReturnsForAnyArgs(true);

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var warehouse = new Warehouse();
                uow.Save(warehouse);

                var nomenclatureType = new ItemsType {
                    Name = "Тестовый тип номенклатуры"
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType,
                    Name = "Тестовая номенклатура"
                };
                uow.Save(nomenclature);

                var protectionTools = new 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 = 1;
                uow.Save(norm);

                var employee = new EmployeeCard();
                employee.AddUsedNorm(norm);
                uow.Save(employee);
                uow.Commit();

                var income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.Amount = 10;
                income.UpdateOperations(uow, ask);
                uow.Save(income);

                var baseParameters = Substitute.For <BaseParameters>();
                baseParameters.ColDayAheadOfShedule.Returns(0);

                employee.FillWearInStockInfo(uow, baseParameters, warehouse, new DateTime(2018, 10, 22));

                var expense = new Expense {
                    Operation = ExpenseOperations.Employee,
                    Warehouse = warehouse,
                    Employee  = employee,
                    Date      = new DateTime(2018, 10, 22)
                };
                var itemExpense = expense.AddItem(employee.WorkwearItems.First(), baseParameters);
                itemExpense.Nomenclature = nomenclature;
                itemExpense.Amount       = 1;

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Commit();

                expense.UpdateEmployeeWearItems();
                uow.Commit();

                using (var uow2 = UnitOfWorkFactory.CreateWithoutRoot()) {
                    var employeeTest = uow2.GetById <EmployeeCard>(employee.Id);
                    Assert.That(employeeTest.WorkwearItems[0].NextIssue, Is.EqualTo(new DateTime(2018, 11, 22)));
                }

                var returnOnStock = new Income {
                    Operation    = IncomeOperations.Return,
                    Warehouse    = warehouse,
                    EmployeeCard = employee,
                    Date         = new DateTime(2018, 11, 2)
                };
                returnOnStock.AddItem(expense.Items.First().EmployeeIssueOperation, 1);
                returnOnStock.UpdateOperations(uow, ask);
                uow.Save(returnOnStock);
                uow.Commit();

                returnOnStock.UpdateEmployeeWearItems();
                uow.Commit();

                using (var uow2 = UnitOfWorkFactory.CreateWithoutRoot()) {
                    var employeeTest = uow2.GetById <EmployeeCard>(employee.Id);
                    Assert.That(employeeTest.WorkwearItems[0].NextIssue, Is.EqualTo(new DateTime(2018, 11, 2)));
                }
            }
        }
        public void UpdateOperations_RecalculeteDatesAfterCreateVacation()
        {
            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 nomenclatureType = new ItemsType();
                nomenclatureType.Name = "Тестовый тип номенклатуры";
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature();
                nomenclature.Type = nomenclatureType;
                uow.Save(nomenclature);

                var position1 = new StockPosition(nomenclature, 0, null, null);

                var nomenclature2 = new Nomenclature();
                nomenclature2.Type = nomenclatureType;
                uow.Save(nomenclature2);

                var protectionTools = new ProtectionTools();
                protectionTools.AddNomeclature(nomenclature);
                protectionTools.AddNomeclature(nomenclature2);
                protectionTools.Name = "СИЗ для тестирования";
                uow.Save(protectionTools);

                var position2 = new StockPosition(nomenclature2, 0, null, null);

                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 income = new Income();
                income.Warehouse = warehouse;
                income.Date      = new DateTime(2017, 1, 1);
                income.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();
                expense.Warehouse = warehouse;
                expense.Employee  = employee;
                expense.Date      = new DateTime(2018, 5, 10);
                expense.Operation = ExpenseOperations.Employee;
                expense.AddItem(position1, 1);
                expense.AddItem(position2, 1);

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Commit();

                expense.UpdateEmployeeWearItems();
                uow.Commit();

                Assert.That(employee.WorkwearItems[0].NextIssue,
                            Is.EqualTo(new DateTime(2020, 5, 10))
                            );

                //Добавляем новый отпуск на 10 дней.
                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);
                vacation.UpdateRelatedOperations(uow, new workwear.Repository.Operations.EmployeeIssueRepository(), baseParameters, ask);
                uow.Save(vacationType);
                uow.Save(vacation);
                uow.Save(employee);

                Assert.That(employee.WorkwearItems[0].NextIssue,
                            Is.EqualTo(new DateTime(2020, 5, 20))
                            );
            }
        }
Пример #12
0
        public void Deletion_ExpenseEmployeeDocumentTest()
        {
            NewSessionWithSameDB();
            var ask = Substitute.For <IInteractiveQuestion>();

            ask.Question(string.Empty).ReturnsForAnyArgs(true);
            var navigation = Substitute.For <INavigationManager>();

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var warehouse = new Warehouse();
                uow.Save(warehouse);

                var nomenclatureType = new ItemsType {
                    Name = "Тестовый тип номенклатуры"
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var position1 = new StockPosition(nomenclature, 0, null, null);

                var nomenclature2 = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature2);

                var position2 = new StockPosition(nomenclature2, 0, null, null);

                var protectionTools = new ProtectionTools {
                    Name = "СИЗ для тестирования"
                };
                protectionTools.AddNomeclature(nomenclature);
                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.Month;
                normItem2.PeriodCount = 1;
                uow.Save(norm);

                var employee = new EmployeeCard();
                employee.AddUsedNorm(norm);
                uow.Save(employee);
                uow.Commit();

                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.CreateIssuanceSheet(null);

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Save(expense.IssuanceSheet);
                uow.Commit();

                expense.UpdateEmployeeWearItems();
                uow.Commit();

                var docs = uow.GetAll <Expense>().ToList();
                Assert.That(docs.Count, Is.EqualTo(1));

                //Непосредственно удаление документа
                var cancel = new CancellationTokenSource();
                using (var uowDel = UnitOfWorkFactory.CreateWithoutRoot()) {
                    var deletionService = new DeleteCore(DeleteConfig.Main, uowDel);
                    deletionService.PrepareDeletion(typeof(Expense), expense.Id, cancel.Token);
                    Assert.That(deletionService.TotalLinks, Is.GreaterThan(0));
                    deletionService.RunDeletion(cancel.Token);
                }

                //Проверяем удаление
                var expenseId = expense.Id;
                using (var uowCheck = UnitOfWorkFactory.CreateWithoutRoot()) {
                    //Проверяем что удалили документ.
                    docs = uow.GetAll <Expense>().ToList();
                    Assert.That(docs.Count, Is.Zero);

                    //Проверяем что случайно не удалили СИЗ и номеклатуру.
                    var protections = uow.GetAll <ProtectionTools>().ToList();
                    Assert.That(protections.Count, Is.EqualTo(2));
                    var nomenclatures = uow.GetAll <Nomenclature>().ToList();
                    Assert.That(nomenclatures.Count, Is.EqualTo(2));
                }
            }
        }
        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_TwoNomeclatureSameNeedsTest()
        {
            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 nomenclatureType = new ItemsType();
                nomenclatureType.Name     = "Тестовый тип номенклатуры";
                nomenclatureType.Category = ItemTypeCategory.wear;
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var nomenclature2 = new Nomenclature {
                    Type = nomenclatureType
                };
                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 employee = new EmployeeCard();
                employee.AddUsedNorm(norm);
                Assert.That(employee.WorkwearItems.Count, Is.GreaterThan(0));
                uow.Save(employee);
                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;
                var incomeItem2 = income.AddItem(nomenclature2);
                incomeItem2.Amount = 5;
                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();
                Assert.That(employeeCardItem.BestChoiceInStock.Count(), Is.GreaterThan(0));

                var bestChoice = employeeCardItem.BestChoiceInStock.First();

                Assert.That(bestChoice.Nomenclature, Is.EqualTo(nomenclature));
            }
        }
Пример #15
0
        public void IssueAndCreateIssuanceSheetTest()
        {
            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();
                var heightType = new SizeType();
                uow.Save(sizeType);
                uow.Save(heightType);

                var nomenclatureType = new ItemsType {
                    Name       = "Тестовый тип номенклатуры",
                    SizeType   = sizeType,
                    HeightType = heightType
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var protectionTools = new ProtectionTools {
                    Name = "СИЗ для тестирования"
                };
                protectionTools.AddNomeclature(nomenclature);
                uow.Save(protectionTools);

                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 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 income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.Amount = 10;
                income.UpdateOperations(uow, ask);
                uow.Save(income);

                var expense = new Expense {
                    Operation = ExpenseOperations.Employee,
                    Warehouse = warehouse,
                    Employee  = employee,
                    Date      = new DateTime(2018, 10, 22)
                };
                var expenseItem = expense.AddItem(position1, 1);

                expense.CreateIssuanceSheet(null);

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                expense.UpdateIssuanceSheet();
                uow.Save(expense.IssuanceSheet);
                uow.Save(expense);
                uow.Commit();
                expense.UpdateEmployeeWearItems();
                uow.Commit();

                Assert.That(expense.IssuanceSheet, Is.Not.Null);
                var issuanceItem = expense.IssuanceSheet.Items.First();
                Assert.That(issuanceItem.ExpenseItem, Is.EqualTo(expenseItem));
            }
        }
Пример #16
0
        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))
                            );
            }
        }
        public void ViewModelStandartScriptTest()
        {
            var interactive = Substitute.For <IInteractiveQuestion>();

            interactive.Question(string.Empty).ReturnsForAnyArgs(true);

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot())
            {
                //Ложим на склад первоначальные остатки;
                var warehouseSource = new Warehouse {
                    Name = "Склад комплектующих"
                };
                uow.Save(warehouseSource);
                var warehouseResult = new Warehouse {
                    Name = "Склад получение"
                };
                uow.Save(warehouseResult);
                var sizeType = new SizeType();
                uow.Save(sizeType);
                var nomenclatureType = new ItemsType {
                    Name = "Тестовый тип номенклатуры", SizeType = sizeType
                };
                uow.Save(nomenclatureType);

                var nomenclature1 = new Nomenclature {
                    Type = nomenclatureType, Name = "Комплектующий"
                };
                uow.Save(nomenclature1);
                var nomenclature2 = new Nomenclature {
                    Type = nomenclatureType, Name = "Результат"
                };
                uow.Save(nomenclature2);

                var sizeX = new Size {
                    Name = "X", SizeType = sizeType
                };
                uow.Save(sizeX);
                var sizeXl = new Size {
                    Name = "XL", SizeType = sizeType
                };
                uow.Save(sizeXl);

                var income1 = new Income {
                    Warehouse = warehouseSource,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income1.AddItem(nomenclature1);
                incomeItem1.WearSize = sizeX;
                incomeItem1.Amount   = 10;
                income1.UpdateOperations(uow, interactive);
                uow.Save(income1);

                var income2 = new Income {
                    Warehouse = warehouseResult,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var income2Item1 = income2.AddItem(nomenclature2);
                income2Item1.WearSize = sizeXl;
                income2Item1.Amount   = 7;
                income2.UpdateOperations(uow, interactive);
                uow.Save(income2);
                uow.Commit();

                var stockRepository = new StockRepository();
                var stock1          = stockRepository
                                      .StockBalances(uow, warehouseSource, new List <Nomenclature> {
                    nomenclature1
                }, new DateTime(2017, 1, 2));
                Assert.That(stock1.Where(x => x.WearSize == sizeX).Sum(x => x.Amount), Is.EqualTo(10));

                var stock2 = stockRepository
                             .StockBalances(uow, warehouseResult, new List <Nomenclature> {
                    nomenclature2
                }, new DateTime(2017, 1, 2));
                Assert.That(stock2.Where(x => x.WearSize == sizeXl).Sum(x => x.Amount), Is.EqualTo(7));

                //Создаём комплектацию 5 ед. комплектующих в 5 ед. результата
                var completion = new Completion {
                    Date            = new DateTime(2017, 1, 3),
                    ResultWarehouse = warehouseResult
                };
                completion.AddSourceItem(stock1.First(x => x.WearSize == sizeX).StockPosition, warehouseSource, 5);
                var itemResult = completion.AddResultItem(nomenclature2);
                itemResult.WearSize = sizeXl;
                itemResult.Amount   = 5;
                completion.UpdateItems();
                uow.Save(completion);
                uow.Commit();

                var stockSource = stockRepository
                                  .StockBalances(uow, warehouseSource, new List <Nomenclature> {
                    nomenclature1
                }, new DateTime(2017, 1, 4));
                Assert.That(stockSource.Where(x => x.WearSize == sizeX).Sum(x => x.Amount), Is.EqualTo(5));

                var stockResult = stockRepository
                                  .StockBalances(uow, warehouseResult, new List <Nomenclature> {
                    nomenclature2
                }, new DateTime(2017, 1, 4));
                Assert.That(stockResult.Where(x => x.WearSize == sizeXl).Sum(x => x.Amount), Is.EqualTo(12));
            }
        }