Example #1
0
        private IQueryOver <PremiumRaskatGAZelle> GetPremiumsRaskatGAZelleQuery(IUnitOfWork uow)
        {
            PremiumJournalNode   resultAlias = null;
            PremiumRaskatGAZelle premiumRaskatGAZelleAlias = null;
            PremiumItem          premiumItemAlias          = null;
            Employee             employeeAlias             = null;

            var query = uow.Session.QueryOver <PremiumRaskatGAZelle>(() => premiumRaskatGAZelleAlias)
                        .JoinAlias(f => f.Items, () => premiumItemAlias)
                        .JoinAlias(() => premiumItemAlias.Employee, () => employeeAlias);

            if (FilterViewModel.Subdivision != null)
            {
                query.Where(() => employeeAlias.Subdivision.Id == FilterViewModel.Subdivision.Id);
            }

            if (FilterViewModel.StartDate.HasValue)
            {
                query.Where(() => premiumRaskatGAZelleAlias.Date >= FilterViewModel.StartDate.Value);
            }

            if (FilterViewModel.EndDate.HasValue)
            {
                query.Where(() => premiumRaskatGAZelleAlias.Date <= FilterViewModel.EndDate.Value);
            }

            var employeeProjection = CustomProjections.Concat_WS(
                " ",
                () => employeeAlias.LastName,
                () => employeeAlias.Name,
                () => employeeAlias.Patronymic
                );

            query.Where(
                GetSearchCriterion(
                    () => premiumRaskatGAZelleAlias.Id,
                    () => premiumRaskatGAZelleAlias.PremiumReasonString,
                    () => employeeProjection,
                    () => premiumRaskatGAZelleAlias.TotalMoney
                    )
                );

            var resultQuery = query
                              .SelectList(list => list
                                          .Select(() => premiumRaskatGAZelleAlias.Id).WithAlias(() => resultAlias.Id)
                                          .Select(() => premiumRaskatGAZelleAlias.Date).WithAlias(() => resultAlias.Date)
                                          .Select(employeeProjection).WithAlias(() => resultAlias.EmployeesName)
                                          .Select(() => premiumRaskatGAZelleAlias.PremiumReasonString).WithAlias(() => resultAlias.PremiumReason)
                                          .Select(() => premiumRaskatGAZelleAlias.TotalMoney).WithAlias(() => resultAlias.PremiumSum)
                                          ).OrderBy(o => o.Date).Desc
                              .TransformUsing(Transformers.AliasToBean <PremiumJournalNode <PremiumRaskatGAZelle> >());

            return(resultQuery);
        }
Example #2
0
        private bool NeedPremiumRaskatGAZelleInRouteListDate(IUnitOfWork uow)
        {
            if (routeList.RecalculatedDistance >= premiumRaskatGAZelleParametersProvider.MinRecalculatedDistanceForPremiumRaskatGAZelle &&
                routeList.Car.IsRaskat &&
                routeList.Car.TypeOfUse == CarTypeOfUse.DriverCar &&
                routeList.Car.RaskatType == RaskatType.RaskatGazelle)
            {
                RouteListItem        routeListAdressesAlias    = null;
                Order                orderAlias                = null;
                DeliveryPoint        deliveryPointAlias        = null;
                District             districtAlias             = null;
                PremiumItem          premiumItemAlias          = null;
                PremiumRaskatGAZelle premiumRaskatGAZelleAlias = null;

                // Ищем премию
                var premiumRaskatGAZelleQuery = uow.Session.QueryOver(() => premiumItemAlias)
                                                .JoinAlias(() => premiumItemAlias.Premium, () => premiumRaskatGAZelleAlias)
                                                .Where(() =>
                                                       ( // Если МЛ переоткрыли в другой день и повторно его закрывают
                                                           (premiumRaskatGAZelleAlias.RouteList.Id == routeList.Id) ||
                                                           // Если на дату закрытия у водителя уже есть премии
                                                           (premiumRaskatGAZelleAlias.Date == DateTime.Today && premiumItemAlias.Employee == routeList.Driver)
                                                       ) &&
                                                       premiumRaskatGAZelleAlias.GetType() == typeof(PremiumRaskatGAZelle)
                                                       )
                                                .Take(1).SingleOrDefault();

                // Ищем заказ в пригороде
                var wageDistrictQuery = uow.Session.QueryOver(() => routeListAdressesAlias)
                                        .JoinAlias(() => routeListAdressesAlias.Order, () => orderAlias)
                                        .JoinAlias(() => orderAlias.DeliveryPoint, () => deliveryPointAlias)
                                        .JoinAlias(() => deliveryPointAlias.District, () => districtAlias)
                                        .Where(() => districtAlias.WageDistrict.Id == wageParametersProvider.GetSuburbWageDistrictId &&
                                               routeListAdressesAlias.RouteList.Id == routeList.Id)
                                        .Take(1).SingleOrDefault();

                return(premiumRaskatGAZelleQuery == null && wageDistrictQuery != null);
            }
            else
            {
                return(false);
            }
        }
Example #3
0
        public void UpdatePremiumRaskatGAZelle(IUnitOfWork uow)
        {
            if (!NeedPremiumRaskatGAZelleInRouteListDate(uow))
            {
                return;
            }

            PremiumRaskatGAZelle premiumRaskatGAZelle = new PremiumRaskatGAZelle()
            {
                PremiumReasonString = $"Автопремия для раскатных газелей МЛ №{routeList.Id.ToString()}",
                Author     = employeeRepository.GetEmployeeForCurrentUser(uow),
                Date       = DateTime.Today,
                TotalMoney = premiumRaskatGAZelleParametersProvider.PremiumRaskatGAZelleMoney,
                RouteList  = routeList
            };

            uow.Save(premiumRaskatGAZelle);

            WagesMovementOperations operation = new WagesMovementOperations
            {
                OperationType = WagesType.PremiumWage,
                Employee      = routeList.Driver,
                Money         = premiumRaskatGAZelleParametersProvider.PremiumRaskatGAZelleMoney,
                OperationTime = DateTime.Today
            };

            uow.Save(operation);

            PremiumItem premiumItem = new PremiumItem()
            {
                Premium       = premiumRaskatGAZelle,
                Employee      = routeList.Driver,
                Money         = premiumRaskatGAZelleParametersProvider.PremiumRaskatGAZelleMoney,
                WageOperation = operation
            };

            uow.Save(premiumItem);
        }