Example #1
0
        public CompanyDashboardModel GetCompanyDashboard(int year, int month)
        {
            CompanyDashboardModel companyDashboard = new CompanyDashboardModel();
            decimal baseHours = GetMonthlyWorkingDays(year, month) * 8;
            List <CompanyDashboardRawModel>  rawData       = _storedProcedures.GetStoredProcedure <CompanyDashboardRawModel>("CompanyWorkingHoursData", new int[] { year, month });
            List <CompanyEmployeeHoursModel> employeeHours = _storedProcedures.GetStoredProcedure <CompanyEmployeeHoursModel>("EmployeeHoursByDayType", new int[] { year, month });
            List <CompanyOvertimeModel>      overtime      = _storedProcedures.GetStoredProcedure <CompanyOvertimeModel>("CompanyOvertimeHours", new int[] { year, month });

            List <MasterModel> activeTeams = new List <MasterModel>();

            activeTeams.AddRange(rawData.GroupBy(x => new
            {
                Id   = x.TeamId,
                Name = x.TeamName
            }).ToList().Select(x => new MasterModel
            {
                Id   = x.Key.Id,
                Name = x.Key.Name
            }).ToList());

            companyDashboard.EmployeesCount    = rawData.GroupBy(x => x.EmployeeId).Count();
            companyDashboard.ProjectsCount     = rawData.GroupBy(x => x.ProjectId).Count();
            companyDashboard.TotalHours        = companyDashboard.EmployeesCount * baseHours;
            companyDashboard.TotalWorkingHours = rawData.Sum(x => x.WorkingHours);
            companyDashboard.Projects          = GetCompanyProjectModels(rawData);
            companyDashboard.Roles             = GetRoleUtilization(rawData, baseHours);
            companyDashboard.Teams             = GetCompanyTeamModels(rawData, employeeHours, activeTeams, overtime);
            GetCompanyMissingEntries(employeeHours, companyDashboard.Teams, baseHours, overtime);

            return(companyDashboard);
        }
 public IActionResult GetCompanyDashboard(int year, int month)
 {
     try
     {
         DateTime start = DateTime.Now;
         CompanyDashboardModel dashboard = companyDashboard.GetCompanyDashboard(year, month);
         DateTime end = DateTime.Now;
         return(Ok(new { (end - start).TotalMilliseconds, dashboard }));
     }
     catch (Exception ex)
     {
         return(HandleException(ex));
     }
 }