public IQueryOver <ForecastMonth, ForecastMonth> Apply(IQueryOver <ForecastMonth, ForecastMonth> queryOver, ForecastMonth monthAlias, Trex.Server.Core.Model.Forecast.Forecast forecastAlias) { ForecastProjectHours projectRegAlias = null; var projectCrit = QueryOver .Of <ForecastProjectHours>() .Where(x => x.Project.ProjectID == _projectId) .And(x => x.Parent.Id == forecastAlias.Id) .Select(x => x.Id) .Take(1); return(queryOver .JoinAlias(() => forecastAlias.ProjectRegistrations, () => projectRegAlias) .Where(Subqueries.WhereExists(projectCrit))); }
/// <summary> /// Gets forecasts supporting project hours /// for the current year /// </summary> /// <param name="userId"></param> /// <param name="queryInternalCustomers"></param> /// <param name="dateSpan"></param> /// <returns></returns> public decimal GetHourSumByCriteria(int userId, bool queryInternalCustomers, DateSpan dateSpan) { Forecast forecastAlias = null; ForecastType forecastTypeAlias = null; User userAlias = null; ForecastProjectHours regAlias = null; Company companyAlias = null; Project projectAlias = null; ForecastMonth monthAlias = null; var query = Session.QueryOver(() => regAlias) .JoinAlias(() => regAlias.Parent, () => forecastAlias) .JoinAlias(() => forecastAlias.ForecastMonth, () => monthAlias) .JoinAlias(() => monthAlias.User, () => userAlias) .JoinAlias(() => forecastAlias.ForecastType, () => forecastTypeAlias) .JoinAlias(() => regAlias.Project, () => projectAlias) .JoinAlias(() => projectAlias.Company, () => companyAlias) .Where(() => userAlias.UserID == userId) .And(() => forecastAlias.Date >= dateSpan.From) .And(() => forecastAlias.Date <= dateSpan.To) .And(() => forecastTypeAlias.SupportsProjectHours) .And(() => companyAlias.Internal == queryInternalCustomers) .Select(Projections.Sum <ForecastProjectHours>(x => x.Hours)); var result = query .UnderlyingCriteria .UniqueResult <decimal>(); // Dedicatedhours are accounted for internally if (queryInternalCustomers) { var typeDedicatedHours = Session.QueryOver(() => forecastAlias) .JoinAlias(() => forecastAlias.ForecastMonth, () => monthAlias) .JoinAlias(() => monthAlias.User, () => userAlias) .JoinAlias(() => forecastAlias.ForecastType, () => forecastTypeAlias) .Where(() => forecastAlias.Date >= dateSpan.From) .And(() => forecastAlias.Date <= dateSpan.To) .And(() => forecastTypeAlias.StatisticsInclusion) .And(() => userAlias.UserID == userId) .Select(Projections.Sum <Forecast>(x => x.DedicatedForecastTypeHours)) .UnderlyingCriteria .UniqueResult <decimal>(); result = result + typeDedicatedHours; } return(result); }
public IQueryOver <ForecastMonth, ForecastMonth> Apply(IQueryOver <ForecastMonth, ForecastMonth> queryOver, ForecastMonth monthAlias, Trex.Server.Core.Model.Forecast.Forecast forecastAlias) { Company companyAlias = null; Project projectAlias = null; ForecastProjectHours projectRegAlias = null; var projectCrit = QueryOver .Of <Company>() .Where(x => x.CustomerID == _companyId) .And(x => x.CustomerID == companyAlias.CustomerID) .Select(x => x.CustomerID) .Take(1); return(queryOver .JoinAlias(() => forecastAlias.ProjectRegistrations, () => projectRegAlias) .JoinAlias(() => projectRegAlias.Project, () => projectAlias) .JoinAlias(() => projectAlias.Company, () => companyAlias) .Where(Subqueries.WhereExists(projectCrit))); }