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