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
                );
        }
示例#3
0
        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));
        }
示例#6
0
        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)));
        }
示例#7
0
        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);
        }
示例#8
0
        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))
                );
        }
示例#10
0
 public EmployeeWageParameterNode(EmployeeWageParameter wageParameter)
 {
     this.EmployeeWageParameter = wageParameter ?? throw new ArgumentNullException(nameof(wageParameter));
 }
示例#11
0
        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();
        }