Exemplo n.º 1
0
        public DateTime?CalculateExpireDateProportionalTest(int normAmount, NormPeriodType normPeriod, int periodCount, DateTime startdate, int amount)
        {
            var item = new NormItem();

            item.Amount      = normAmount;
            item.NormPeriod  = normPeriod;
            item.PeriodCount = periodCount;

            return(item.CalculateExpireDate(startdate, amount));
        }
        public void RecalculateDatesOfIssueOperation_LifeTimeAppendOnVacationTest()
        {
            var vacationType = Substitute.For <VacationType>();

            vacationType.ExcludeFromWearing.Returns(true);

            var employee = Substitute.For <EmployeeCard>();
            var vacation = Substitute.For <EmployeeVacation>();

            vacation.VacationType.Returns(vacationType);
            vacation.Employee.Returns(employee);
            vacation.BeginDate.Returns(new DateTime(2019, 2, 1));
            vacation.EndDate.Returns(new DateTime(2019, 2, 10));
            employee.Vacations.Returns(new List <EmployeeVacation> {
                vacation
            });

            var protectionTools = Substitute.For <ProtectionTools>();

            var norm = new NormItem();

            norm.Amount      = 2;
            norm.PeriodCount = 3;
            norm.NormPeriod  = NormPeriodType.Month;

            var nomenclature = Substitute.For <Nomenclature>();

            nomenclature.TypeName.Returns("fake");

            var operations = new List <EmployeeIssueOperation>()
            {
            };

            var graph = new IssueGraph(operations);
            var issue = new EmployeeIssueOperation();

            issue.Employee        = employee;
            issue.Nomenclature    = nomenclature;
            issue.ProtectionTools = protectionTools;
            issue.NormItem        = norm;
            issue.OperationTime   = new DateTime(2019, 1, 10);
            issue.Issued          = 2;

            var ask = Substitute.For <IInteractiveQuestion>();

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

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

            baseParameters.ColDayAheadOfShedule.Returns(0);

            issue.RecalculateDatesOfIssueOperation(graph, baseParameters, ask);

            Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2019, 4, 20)));
        }
        public void RecalculateDatesOfIssueOperation_LifeTimeAppendProportionalTest()
        {
            var employee = Substitute.For <EmployeeCard>();

            var protectionTools = Substitute.For <ProtectionTools>();

            var operation1 = Substitute.For <EmployeeIssueOperation>();

            operation1.OperationTime.Returns(new DateTime(2018, 1, 1));
            operation1.AutoWriteoffDate.Returns(new DateTime(2018, 2, 1));
            operation1.Issued.Returns(2);

            var norm = new NormItem();

            norm.Amount      = 2;
            norm.PeriodCount = 1;
            norm.NormPeriod  = NormPeriodType.Month;

            var nomenclature = Substitute.For <Nomenclature>();

            nomenclature.TypeName.Returns("fake");

            var operations = new List <EmployeeIssueOperation>()
            {
                operation1
            };

            var graph = new IssueGraph(operations);
            var issue = new EmployeeIssueOperation();

            issue.Employee        = employee;
            issue.Nomenclature    = nomenclature;
            issue.ProtectionTools = protectionTools;
            issue.NormItem        = norm;
            issue.OperationTime   = new DateTime(2018, 3, 10);
            issue.Issued          = 3;

            var ask = Substitute.For <IInteractiveQuestion>();

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

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

            baseParameters.ColDayAheadOfShedule.Returns(0);

            issue.RecalculateDatesOfIssueOperation(graph, baseParameters, ask);

            Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2018, 4, 25)));
        }
        public void CalculateRequiredIssue_ReciveBeforeExpiredCase()
        {
            var baseParameters = Substitute.For <BaseParameters>();

            baseParameters.ColDayAheadOfShedule.Returns(30);

            var norm = new NormItem {
                Amount = 1
            };
            var item = new EmployeeCardItem {
                ActiveNormItem = norm,
                Amount         = 1,
                LastIssue      = DateTime.Today.AddMonths(-5),
                NextIssue      = DateTime.Today.AddDays(-10)
            };

            Assert.That(item.CalculateRequiredIssue(baseParameters), Is.EqualTo(1));
        }
        public void CalculateRequiredIssue_NextIssueIsNullCase()
        {
            var baseParameters = Substitute.For <BaseParameters>();

            baseParameters.ColDayAheadOfShedule.Returns(0);

            var norm = new NormItem {
                Amount = 2
            };
            var item = new EmployeeCardItem {
                ActiveNormItem = norm,
                Amount         = 2,
                LastIssue      = DateTime.Today.AddDays(-30),
                NextIssue      = null
            };

            Assert.That(item.CalculateRequiredIssue(baseParameters), Is.EqualTo(0));
        }
        public void CalculateRequiredIssue_RecivedPartCase()
        {
            var baseParameters = Substitute.For <BaseParameters>();

            baseParameters.ColDayAheadOfShedule.Returns(0);

            var norm = new NormItem {
                Amount = 4
            };
            //FIXME Возможно некоректная ситуация, надо подумать как в этом месте будет более правильно поставить дату следующей выдачи
            var item = new EmployeeCardItem {
                ActiveNormItem = norm,
                Amount         = 1,
                LastIssue      = DateTime.Today.AddDays(-30),
                NextIssue      = DateTime.Today.AddDays(30)
            };

            Assert.That(item.CalculateRequiredIssue(baseParameters), Is.EqualTo(3));
        }
Exemplo n.º 7
0
        protected override IQueryOver <Norm> ItemsQuery(IUnitOfWork uow)
        {
            NormJournalNode resultAlias = null;

            Post               postAlias          = null;
            Subdivision        subdivisionAlias   = null;
            Norm               normAlias          = null;
            NormItem           normItemAlias      = null;
            RegulationDoc      regulationDocAlias = null;
            RegulationDocAnnex docAnnexAlias      = null;
            EmployeeCard       employeeAlias      = null;
            Norm               usedNormAlias      = null;

            var employeesSubquery = QueryOver.Of <EmployeeCard>(() => employeeAlias)
                                    .JoinQueryOver(e => e.UsedNorms, () => usedNormAlias)
                                    .Where(() => usedNormAlias.Id == normAlias.Id)
                                    .ToRowCountQuery();

            var employeesWorkedSubquery = QueryOver.Of <EmployeeCard>(() => employeeAlias)
                                          .Where(e => e.DismissDate == null)
                                          .JoinQueryOver(e => e.UsedNorms, () => usedNormAlias)
                                          .Where(() => usedNormAlias.Id == normAlias.Id)
                                          .ToRowCountQuery();


            var norms = uow.Session.QueryOver <Norm>(() => normAlias)
                        .JoinAlias(n => n.Document, () => regulationDocAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .JoinAlias(n => n.Annex, () => docAnnexAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .JoinAlias(() => normAlias.Posts, () => postAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .JoinAlias(() => postAlias.Subdivision, () => subdivisionAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .Where(GetSearchCriterion(
                                   () => normAlias.Name,
                                   () => postAlias.Name,
                                   () => subdivisionAlias.Name,
                                   () => normAlias.Id
                                   ));

            if (Filter.Post != null)
            {
                norms.Where(x => x.Id == Filter.Post.Id);
            }

            if (Filter.ProtectionTools != null)
            {
                norms.JoinAlias(n => n.Items, () => normItemAlias)
                .Where(() => normItemAlias.ProtectionTools.Id == Filter.ProtectionTools.Id);
            }

            return(norms
                   .SelectList(list => list
                               .SelectGroup(() => normAlias.Id).WithAlias(() => resultAlias.Id)
                               .Select(() => regulationDocAlias.Number).WithAlias(() => resultAlias.TonNumber)
                               .Select(() => docAnnexAlias.Number).WithAlias(() => resultAlias.AnnexNumber)
                               .Select(() => normAlias.TONParagraph).WithAlias(() => resultAlias.TonParagraph)
                               .Select(() => normAlias.Name).WithAlias(() => resultAlias.Name)
                               .SelectSubQuery(employeesSubquery).WithAlias(() => resultAlias.Usages)
                               .SelectSubQuery(employeesWorkedSubquery).WithAlias(() => resultAlias.UsagesWorked)
                               .Select(Projections.SqlFunction(
                                           new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT( CONCAT_WS(' ', ?1, CONCAT('[', ?2 ,']')) SEPARATOR ?3)"),
                                           NHibernateUtil.String,
                                           Projections.Property(() => postAlias.Name),
                                           Projections.Property(() => subdivisionAlias.Name),
                                           Projections.Constant("\n"))
                                       ).WithAlias(() => resultAlias.Posts)
                               )
                   .OrderBy(x => x.Name).Asc
                   .TransformUsing(Transformers.AliasToBean <NormJournalNode>()));
        }
Exemplo n.º 8
0
        public void UpdateRelatedOperations_ChangeVacationRecalculateOperations()
        {
            var uow = Substitute.For <IUnitOfWork>();

            var employee = new EmployeeCard();

            var vacationType = Substitute.For <VacationType>();

            vacationType.ExcludeFromWearing.Returns(true);

            var vacation = new EmployeeVacation();

            vacation.Employee     = employee;
            vacation.BeginDate    = new DateTime(2019, 3, 1);
            vacation.EndDate      = new DateTime(2019, 3, 10);
            vacation.VacationType = vacationType;

            employee.Vacations.Add(vacation);

            var norm = new NormItem();

            norm.Amount      = 1;
            norm.PeriodCount = 3;
            norm.NormPeriod  = NormPeriodType.Month;

            var nomenclatureType = Substitute.For <ItemsType>();
            var protectionTools  = Substitute.For <ProtectionTools>();

            var nomenclature = Substitute.For <Nomenclature>();

            nomenclature.TypeName.Returns("fake");
            nomenclature.Type.Returns(nomenclatureType);

            var issue = new EmployeeIssueOperation();

            issue.UseAutoWriteoff = true;
            issue.Employee        = employee;
            issue.Nomenclature    = nomenclature;
            issue.ProtectionTools = protectionTools;
            issue.NormItem        = norm;
            issue.OperationTime   = new DateTime(2019, 2, 10);
            issue.StartOfUse      = new DateTime(2019, 2, 10);
            issue.ExpiryByNorm    = new DateTime(2019, 5, 10);
            issue.Issued          = 1;

            var operations = new List <EmployeeIssueOperation>()
            {
                issue
            };

            IssueGraph.MakeIssueGraphTestGap = (e, t) => new IssueGraph(operations);

            var employeeIssueRepository = Substitute.For <EmployeeIssueRepository>(uow);

            employeeIssueRepository.GetOperationsTouchDates(Arg.Any <IUnitOfWork>(), Arg.Any <EmployeeCard[]>(), Arg.Any <DateTime>(), Arg.Any <DateTime>(), Arg.Any <Action <IQueryOver <EmployeeIssueOperation, EmployeeIssueOperation> > >())
            .Returns(operations);

            var ask = Substitute.For <IInteractiveQuestion>();

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

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

            baseParameters.ColDayAheadOfShedule.Returns(0);

            vacation.UpdateRelatedOperations(uow, employeeIssueRepository, baseParameters, ask);

            Assert.That(issue.ExpiryByNorm, Is.EqualTo(new DateTime(2019, 5, 20)));
            Assert.That(issue.AutoWriteoffDate, Is.EqualTo(new DateTime(2019, 5, 20)));
        }
        public static IList <EmployeeCard> GetEmployeesDependenceOnNormItem(IUnitOfWork uow, NormItem item)
        {
            EmployeeCardItem employeeItemAlias = null;

            return(uow.Session.QueryOver <EmployeeCard>()
                   .JoinQueryOver(e => e.WorkwearItems, () => employeeItemAlias)
                   .Where(() => employeeItemAlias.ActiveNormItem == item)
                   .List());
        }