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