protected IQueryOver <CollectiveExpense> QueryCollectiveExpenseDoc(IUnitOfWork uow)
        {
            if (Filter.StokDocumentType != null && Filter.StokDocumentType != StokDocumentType.CollectiveExpense)
            {
                return(null);
            }

            CollectiveExpense collectiveExpenseAlias = null;

            var collectiveExpenseQuery = uow.Session.QueryOver <CollectiveExpense>(() => collectiveExpenseAlias);

            if (Filter.StartDate.HasValue)
            {
                collectiveExpenseQuery.Where(o => o.Date >= Filter.StartDate.Value);
            }
            if (Filter.EndDate.HasValue)
            {
                collectiveExpenseQuery.Where(o => o.Date < Filter.EndDate.Value.AddDays(1));
            }
            if (Filter.Warehouse != null)
            {
                collectiveExpenseQuery.Where(x => x.Warehouse == Filter.Warehouse);
            }

            collectiveExpenseQuery.Where(GetSearchCriterion(
                                             () => collectiveExpenseAlias.Id,
                                             () => authorAlias.Name,
                                             () => issuanceSheetAlias.Id
                                             ));

            collectiveExpenseQuery
            .JoinAlias(() => collectiveExpenseAlias.CreatedbyUser, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
            .JoinAlias(() => collectiveExpenseAlias.Warehouse, () => warehouseExpenseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
            .Left.JoinAlias(() => collectiveExpenseAlias.IssuanceSheet, () => issuanceSheetAlias)
            .SelectList(list => list
                        .Select(() => collectiveExpenseAlias.Id).WithAlias(() => resultAlias.Id)
                        .Select(() => collectiveExpenseAlias.Date).WithAlias(() => resultAlias.Date)
                        .Select(() => issuanceSheetAlias.Id).WithAlias(() => resultAlias.IssueSheetId)
                        .Select(() => authorAlias.Name).WithAlias(() => resultAlias.Author)
                        .Select(() => warehouseExpenseAlias.Name).WithAlias(() => resultAlias.ExpenseWarehouse)
                        .Select(() => collectiveExpenseAlias.Comment).WithAlias(() => resultAlias.Comment)
                        .Select(() => StokDocumentType.CollectiveExpense).WithAlias(() => resultAlias.DocTypeEnum)
                        .Select(() => collectiveExpenseAlias.CreationDate).WithAlias(() => resultAlias.CreationDate)
                        )
            .OrderBy(() => collectiveExpenseAlias.Date).Desc
            .ThenBy(() => collectiveExpenseAlias.CreationDate).Desc
            .TransformUsing(Transformers.AliasToBean <StockDocumentsJournalNode>());

            return(collectiveExpenseQuery);
        }
Пример #2
0
        public void GetReferencedDocuments_CollectiveExpenseTest()
        {
            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 protectionTools = new ProtectionTools {
                    Name = "Тестовая курточка"
                };
                uow.Save(protectionTools);

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

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

                var norm = new Norm();
                norm.AddItem(protectionTools);
                uow.Save(norm);

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

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

                var expense = new CollectiveExpense()
                {
                    Date      = new DateTime(2021, 9, 10),
                    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(employee.WorkwearItems.FirstOrDefault(), stockPosition, 1);
                var item2         = expense.AddItem(employee2.WorkwearItems.FirstOrDefault(), stockPosition, 10);

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

                var repository = new EmployeeIssueRepository(uow);
                var results    = repository
                                 .GetReferencedDocuments(item.EmployeeIssueOperation.Id, item2.EmployeeIssueOperation.Id);
                var result1 = results.First(x => x.OperationId == item.EmployeeIssueOperation.Id);
                Assert.That(result1.DocumentType, Is.EqualTo(StokDocumentType.CollectiveExpense));
                Assert.That(result1.DocumentId, Is.EqualTo(expense.Id));
                Assert.That(result1.ItemId, Is.EqualTo(item.Id));
                var result2 = results.First(x => x.OperationId == item2.EmployeeIssueOperation.Id);
                Assert.That(result2.DocumentType, Is.EqualTo(StokDocumentType.CollectiveExpense));
                Assert.That(result2.DocumentId, Is.EqualTo(expense.Id));
                Assert.That(result2.ItemId, Is.EqualTo(item2.Id));
            }
        }