public IRouteListWageCalculationService ActualizeWageParameterAndGetCalculationService(IUnitOfWork uow, Employee employee, IRouteListWageCalculationSource source) { if (uow == null) { throw new ArgumentNullException(nameof(uow)); } if (employee == null) { throw new ArgumentNullException(nameof(employee)); } if (source == null) { throw new ArgumentNullException(nameof(source)); } //Не пересчитывать зарплату для МЛ до этой даты if (source.RouteListDate <= wageParametersProvider.DontRecalculateWagesForRouteListsBefore) { return(new WageCalculationServiceForOldRouteLists(source)); } ActualizeWageParameter(uow, source.RouteListId, employee, source.DriverOfOurCar); EmployeeWageParameter actualWageParameter = employee.GetActualWageParameter(source.RouteListDate); return(new RouteListWageCalculationService(actualWageParameter, source)); }
private void ActualizeWageParameter(IUnitOfWork uow, int currentRouteListId, Employee employee, bool ourCar) { //Проверка на то, что сотрудник имеет только один стартовый расчет зарплаты if (employee.WageParameters.Count != 1) { return; } var startedWageParameter = employee.WageParameters.FirstOrDefault(); if (startedWageParameter == null || !startedWageParameter.IsStartedWageParameter) { return; } IEnumerable <DateTime> workedDays = wageCalculationRepository.GetDaysWorkedWithRouteLists(uow, employee).OrderBy(x => x); int daysWorkedNeeded = wageParametersProvider.GetDaysWorkedForMinRatesLevel(); if (workedDays.Count() < daysWorkedNeeded || daysWorkedNeeded < 1) { return; } DateTime wageChangeDate = workedDays.ToArray()[daysWorkedNeeded - 1].AddDays(1); var ratesLevelWageParameter = new EmployeeWageParameter { WageParameterItem = new RatesLevelWageParameterItem { WageDistrictLevelRates = wageCalculationRepository.DefaultLevelForNewEmployees(uow, ourCar) } }; employee.ChangeWageParameter( ratesLevelWageParameter, wageChangeDate ); }
public void GetActualWageParameter_IfThereAreSomeWagesInListWithDifferentDates_ThenReturnsTheLatestWageWhoseDateLessThenInParameter() { //arrange var date = new DateTime(2018, 11, 01); var wage1 = new EmployeeWageParameter() { StartDate = new DateTime(2017, 01, 01), WageParameterItem = new FixedWageParameterItem() }; var wage2 = new EmployeeWageParameter() { StartDate = new DateTime(2018, 01, 01), WageParameterItem = new FixedWageParameterItem() }; var wage3 = new EmployeeWageParameter() { StartDate = new DateTime(2019, 01, 01), WageParameterItem = new FixedWageParameterItem() }; var employee = new Employee(); employee.WageParameters.Add(wage1); employee.WageParameters.Add(wage2); employee.WageParameters.Add(wage3); //act var wage = employee.GetActualWageParameter(date); //assert Assert.That(wage, Is.EqualTo(wage2)); }
public RouteListWageCalculationService(EmployeeWageParameter wageParameter, IRouteListWageCalculationSource source) { this.wageParameter = wageParameter ?? throw new ArgumentNullException(nameof(wageParameter)); this.source = source ?? throw new ArgumentNullException(nameof(source)); if (source.DriverOfOurCar && wageParameter.WageParameterItemForOurCars != null) { SetWageCalculationService(wageParameter.WageParameterItemForOurCars); } else { SetWageCalculationService(wageParameter.WageParameterItem); } }
public void ChangeWageParameter_IfThereWereNoAnyWagesInList_ThenJustAddNewWageAndSetNewDateWithOneTickAndSetCurrentEmployee() { //arrange var newDate = new DateTime(2019, 01, 01); var employee = new Employee(); var wageParameter = new EmployeeWageParameter { WageParameterItem = new ManualWageParameterItem() }; //act employee.ChangeWageParameter(wageParameter, newDate); //assert Assert.That(employee.ObservableWageParameters.Count, Is.EqualTo(1)); Assert.That(employee.ObservableWageParameters.First().Employee, Is.EqualTo(employee)); Assert.That(employee.ObservableWageParameters.First().StartDate, Is.EqualTo(newDate)); }
public void ChangeWageParameter_IfThereWereNoAnyWagesInList_ThenJustAddNewWageAndSetNewDateWithOneTickAndSetCurrentEmployee() { //arrange var newDate = new DateTime(2019, 01, 01); var employee = new Employee(); IInteractiveService interactiveService = Substitute.For <IInteractiveService>(); var wageParameter = new EmployeeWageParameter() { WageParameterItem = new ManualWageParameterItem() }; //act employee.ChangeWageParameter(wageParameter, newDate); //assert Assert.That(employee.ObservableWageParameters.Count(), Is.EqualTo(1)); Assert.That(employee.ObservableWageParameters.FirstOrDefault().Employee, Is.EqualTo(employee)); Assert.That(employee.ObservableWageParameters.FirstOrDefault().StartDate, Is.EqualTo(newDate.AddTicks(1))); }
public void CheckStartDateForNewWageParameter_IfNewDateEarlierThenExisting_ThenFail() { //arrange var newDate = new DateTime(2019, 01, 01); var existingWage = new EmployeeWageParameter() { StartDate = new DateTime(2019, 11, 01), WageParameterItem = new ManualWageParameterItem() }; var employee = new Employee(); employee.WageParameters.Add(existingWage); //act var res = employee.CheckStartDateForNewWageParameter(newDate); //assert Assert.That(res, Is.False); }
public void ChangeWageParameter_IfThereWereWageInList_ThenAddNewWageAndSetNewDateWithOneTickAndSetCurrentEmployeeAndSetEndDateForExistingWage() { //arrange var newDate = new DateTime(2019, 01, 01); var existingWage = new EmployeeWageParameter() { StartDate = new DateTime(2018, 01, 01), WageParameterItem = new FixedWageParameterItem() }; var employee = new Employee(); employee.WageParameters.Add(existingWage); IInteractiveService interactiveService = Substitute.For <IInteractiveService>(); var wageParameter = new EmployeeWageParameter() { WageParameterItem = new ManualWageParameterItem() }; //act employee.ChangeWageParameter(wageParameter, newDate); //assert Assert.That(employee.ObservableWageParameters.Count(), Is.EqualTo(2)); Assert.That( employee.ObservableWageParameters .FirstOrDefault(w => w.WageParameterItem.WageParameterItemType == WageParameterItemTypes.Manual) .Employee, Is.EqualTo(employee) ); Assert.That( employee.ObservableWageParameters .FirstOrDefault(w => w.WageParameterItem.WageParameterItemType == WageParameterItemTypes.Manual) .StartDate, Is.EqualTo(newDate.AddTicks(1)) ); Assert.That( employee.ObservableWageParameters .FirstOrDefault(w => w.WageParameterItem.WageParameterItemType == WageParameterItemTypes.Fixed) .EndDate, Is.EqualTo(newDate) ); }
ChangeWageParameter_IfThereWereWageInList_ThenAddNewWageAndSetNewDateWithOneTickAndSetCurrentEmployeeAndSetEndDateForExistingWage() { //arrange var newDate = new DateTime(2019, 01, 01); var existingWage = new EmployeeWageParameter { StartDate = new DateTime(2018, 01, 01), WageParameterItem = new FixedWageParameterItem() }; var employee = new Employee(); employee.WageParameters.Add(existingWage); var wageParameter = new EmployeeWageParameter { WageParameterItem = new ManualWageParameterItem() }; //act employee.ChangeWageParameter(wageParameter, newDate); //assert Assert.That(employee.ObservableWageParameters.Count, Is.EqualTo(2)); Assert.That( employee.ObservableWageParameters .First(w => w.WageParameterItem.WageParameterItemType == WageParameterItemTypes.Manual) .Employee, Is.EqualTo(employee) ); Assert.That( employee.ObservableWageParameters .First(w => w.WageParameterItem.WageParameterItemType == WageParameterItemTypes.Manual) .StartDate, Is.EqualTo(newDate) ); Assert.That( employee.ObservableWageParameters .First(w => w.WageParameterItem.WageParameterItemType == WageParameterItemTypes.Fixed) .EndDate, Is.EqualTo(newDate.AddMilliseconds(-1)) ); }
public EmployeeWageParameterNode(EmployeeWageParameter wageParameter) { this.EmployeeWageParameter = wageParameter ?? throw new ArgumentNullException(nameof(wageParameter)); }
private void ConfigureFilter() { var subdivisionsFilter = _filter.CreateParameterSet( "Подразделения", "subdivision", new ParametersFactory(UoW, (filters) => { SelectableEntityParameter <Subdivision> resultAlias = null; var query = UoW.Session.QueryOver <Subdivision>(); if (filters != null && filters.Any()) { foreach (var f in filters) { query.Where(f()); } } query.SelectList(list => list .Select(x => x.Id).WithAlias(() => resultAlias.EntityId) .Select(x => x.Name).WithAlias(() => resultAlias.EntityTitle) ); query.TransformUsing(Transformers.AliasToBean <SelectableEntityParameter <Subdivision> >()); return(query.List <SelectableParameter>()); }) ); var orderAuthorsFilter = _filter.CreateParameterSet( "Авторы заказов", "order_author", new ParametersFactory(UoW, (filters) => { SelectableEntityParameter <Employee> resultAlias = null; EmployeeWageParameter wageParameterAlias = null; WageParameterItem wageParameterItemAlias = null; var query = UoW.Session.QueryOver <Employee>() .JoinAlias(e => e.WageParameters, () => wageParameterAlias) .JoinAlias(() => wageParameterAlias.WageParameterItem, () => wageParameterItemAlias); if (filters != null && filters.Any()) { foreach (var f in filters) { var criterion = f(); if (criterion != null) { query.Where(criterion); } } } query.Where(e => e.Status == EmployeeStatus.IsWorking) .And(e => e.Category == EmployeeCategory.office) .And(() => wageParameterAlias.EndDate == null || wageParameterAlias.EndDate >= DateTime.Now) .And(() => wageParameterItemAlias.WageParameterItemType == WageParameterItemTypes.SalesPlan); var authorProjection = CustomProjections.Concat_WS( " ", Projections.Property <Employee>(x => x.LastName), Projections.Property <Employee>(x => x.Name), Projections.Property <Employee>(x => x.Patronymic) ); query.SelectList(list => list .Select(x => x.Id).WithAlias(() => resultAlias.EntityId) .Select(authorProjection).WithAlias(() => resultAlias.EntityTitle) ); query.TransformUsing(Transformers.AliasToBean <SelectableEntityParameter <Employee> >()); return(query.List <SelectableParameter>()); }) ); orderAuthorsFilter.AddFilterOnSourceSelectionChanged(subdivisionsFilter, () => { var selectedValues = subdivisionsFilter.GetSelectedValues().ToArray(); return(!selectedValues.Any() ? null : subdivisionsFilter.FilterType == SelectableFilterType.Include ? Restrictions.On <Employee>(x => x.Subdivision).IsIn(selectedValues) : Restrictions.On <Employee>(x => x.Subdivision).Not.IsIn(selectedValues)); } ); var viewModel = new SelectableParameterReportFilterViewModel(_filter); var filterWidget = new SelectableParameterReportFilterView(viewModel); vboxParameters.Add(filterWidget); filterWidget.Show(); }