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)));
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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)));
        }