Exemple #1
0
        public async Task <WeeklyHoursViewModel> GetViewModel(DateTime dt, int pageIndex = 1, int pageSize = 10)
        {
            var ci = System.Threading.Thread.CurrentThread.CurrentCulture;

            try
            {
                if (_listCollectionPage == null)
                {
                    _listCollectionPage = await _reportHoursRepository.GetItemsAsync(dt, pageSize);
                }

                // Check to see if a new date is being requested
                if (_listCollectionPage.QueryDate != dt.ToString("yyyyMM"))
                {
                    _listCollectionPage = await _reportHoursRepository.GetItemsAsync(dt, pageSize);
                }

                if ((pageIndex - _listCollectionPage.CurrentPageIndex) == 1)
                {
                    // Move next
                    _listCollectionPage = await _reportHoursRepository.GetNextItemsAsync(_listCollectionPage);
                }
                else if ((_listCollectionPage.CurrentPageIndex - pageIndex) == 1)
                {
                    // Move previous
                    _listCollectionPage = await _reportHoursRepository.GetPreviousItemsAsync(_listCollectionPage);
                }
                else if (pageIndex > 2)  // Increment until we find the correct page.
                {
                    while (_listCollectionPage.CurrentPageIndex < pageIndex)
                    {
                        _listCollectionPage = await _reportHoursRepository.GetNextItemsAsync(_listCollectionPage);
                    }
                }

                // Create the DataTable
                MyWeeklyHoursDataTableData dataTableData = new MyWeeklyHoursDataTableData(); // This is the WeeklyHoursListData.

                List <WeeklyHoursListData> weeklyHrsListData = new List <WeeklyHoursListData>();

                // Get an array tagging each item of the month with the Week number
                int[] dateWeekNumber = this.GetDayOfMonthWeekAssignmentArray(dt);
                var   myWeekNumber   = dateWeekNumber[dt.Day - 1];

                var weeklyHrsList = new List <WeeklyHours>();

                //var items = await this._reportHoursRepository.GetItemsAsync(dt);

                // Group Report hours by individual User data using DisplayName
                var monthDate = from item in _listCollectionPage.DataList
                                group item by item.Fields.DisplayName into data

                                select data;

                DateTime weekStartDate = dt;
                DateTime weekEndDate   = weekStartDate;
                while (weekEndDate.DayOfWeek != DayOfWeek.Saturday)
                {
                    weekEndDate = weekEndDate.AddDays(1);
                }

                //var groupings = monthDate.ToList().Where(k => DateTime.ParseExact(k.Contains, "yyyyMMdd", ci).Date >= LweekStEndDt["weekStDate"].Date && DateTime.ParseExact(k.Fields.Date, "yyyyMMdd", ci).Date <= LweekStEndDt["weekEndDate"].Date);


                // Process the data for each user
                foreach (var grouping in monthDate)
                {
                    var thisGrouping = new WeeklyHoursListData();

                    int SundayMins     = 0;
                    int SundayHours    = 0;
                    int MondayMins     = 0;
                    int MondayHours    = 0;
                    int TuesdayMins    = 0;
                    int TuesdayHours   = 0;
                    int WednesdayMins  = 0;
                    int WednesdayHours = 0;
                    int ThursdayMins   = 0;
                    int ThursdayHours  = 0;
                    int FridayMins     = 0;
                    int FridayHours    = 0;
                    int SaturdayMins   = 0;
                    int SaturdayHours  = 0;


                    var weekTotalMns = 0;
                    var TotalMins    = 0;

                    var weekTotalHrs = 0;
                    var TotalHours   = 0;


                    var weeklyHrs = new WeeklyHours();


                    var thisWeekData = grouping.Where(k => DateTime.ParseExact(k.Fields.Date, "yyyyMMdd", ci).Date >= weekStartDate.Date && DateTime.ParseExact(k.Fields.Date, "yyyyMMdd", ci).Date <= weekEndDate.Date);
                    //var resultLastWeek = grouping.Where(k => DateTime.ParseExact(k.Fields.Date, "yyyyMMdd", ci).Date >= weekStartDate.Date && DateTime.ParseExact(k.Fields.Date, "yyyyMMdd", ci).Date <= LweekStEndDt["weekEndDate"].Date);
                    //Add the computed object(for each employee) to the list of weekly hours for the HR
                    weeklyHrsList.Add(weeklyHrs);
                    weeklyHrs.EmpName = grouping.Key;
                    //foreach (var item in grouping)

                    foreach (var item in thisWeekData)

                    {
                        thisGrouping.ENm = item.Fields.DisplayName.ToString();
                        thisGrouping.MNm = item.Fields.ManagerDisplayName.ToString();
                        Dictionary <string, short> hrsMins = new Dictionary <string, short>();

                        //call to get Final hours for ReportHours Repository data
                        hrsMins = HoursComputeHelper.GetFinalHrsMins(item);
                        var totalHours = hrsMins["FinalTotalHrs"];
                        var totalMins  = hrsMins["FinalTotalMins"];
                        if (weeklyHrs.MgrName == null)
                        {
                            weeklyHrs.MgrName = item.Fields.ManagerDisplayName;
                        }
                        var itemDate = DateTime.ParseExact(item.Fields.Date, "yyyyMMdd", ci);

                        //var theWeekNumber = dateWeekNumber[itemDate.Day - 1];
                        //if (dateWeekNumber[itemDate.Day - 1] == myWeekNumber)
                        //{

                        switch (itemDate.DayOfWeek)
                        {
                        case System.DayOfWeek.Sunday:
                            weeklyHrs.SundayHours += totalHours;
                            weeklyHrs.SundayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Monday:
                            weeklyHrs.MondayHours += totalHours;
                            weeklyHrs.MondayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Tuesday:
                            weeklyHrs.TuesdayHours += totalHours;
                            weeklyHrs.TuesdayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Wednesday:
                            weeklyHrs.WednesdayHours += totalHours;
                            weeklyHrs.WednesdayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Thursday:
                            weeklyHrs.ThursdayHours += totalHours;
                            weeklyHrs.ThursdayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Friday:
                            weeklyHrs.FridayHours += totalHours;
                            weeklyHrs.FridayMins  += totalMins;
                            break;

                        default:
                            weeklyHrs.SaturdayHours += totalHours;
                            weeklyHrs.SaturdayMins  += totalMins;
                            break;
                        }


                        SundayMins     = (short)(weeklyHrs.SundayMins % 60);
                        SundayHours    = (short)(weeklyHrs.SundayHours + (weeklyHrs.SundayMins / 60));
                        MondayMins     = (short)(weeklyHrs.MondayMins % 60);
                        MondayHours    = (short)(weeklyHrs.MondayHours + (weeklyHrs.MondayMins / 60));
                        TuesdayMins    = (short)(weeklyHrs.TuesdayMins % 60);
                        TuesdayHours   = (short)(weeklyHrs.TuesdayHours + (weeklyHrs.TuesdayMins / 60));
                        WednesdayMins  = (short)(weeklyHrs.WednesdayMins % 60);
                        WednesdayHours = (short)(weeklyHrs.WednesdayHours + (weeklyHrs.WednesdayMins / 60));
                        ThursdayMins   = (short)(weeklyHrs.ThursdayMins % 60);
                        ThursdayHours  = (short)(weeklyHrs.ThursdayHours + (weeklyHrs.ThursdayMins / 60));
                        FridayMins     = (short)(weeklyHrs.FridayMins % 60);
                        FridayHours    = (short)(weeklyHrs.FridayHours + (weeklyHrs.FridayMins / 60));
                        SaturdayMins   = (short)(weeklyHrs.SaturdayMins % 60);
                        SaturdayHours  = (short)(weeklyHrs.SaturdayHours + (weeklyHrs.SaturdayMins / 60));


                        weekTotalMns = (SundayMins + MondayMins + TuesdayMins + WednesdayMins + ThursdayMins + FridayMins + SaturdayMins) % 60;
                        TotalMins    = (short)weekTotalMns;

                        weekTotalHrs = (SundayHours + MondayHours + TuesdayHours + WednesdayHours + ThursdayHours + FridayHours + SaturdayHours) + (weekTotalMns / 60);
                        TotalHours   = (short)weekTotalHrs;

                        // This is what the view needs.
                    }                     // end for each grouping.

                    var weeklySundayHrMns    = SundayHours + "h " + SundayMins + "m";
                    var weeklyMondayHrMns    = MondayHours + "h " + MondayMins + "m";
                    var weeklyTuesdayHrMns   = TuesdayHours + "h " + TuesdayMins + "m";
                    var weeklyWednesdayHrMns = WednesdayHours + "h " + WednesdayMins + "m";
                    var weeklyThursdayHrMns  = ThursdayHours + "h " + ThursdayMins + "m";
                    var weeklyFridayHrMns    = FridayHours + "h " + FridayMins + "m";
                    var weeklySaturdayHrMns  = SaturdayHours + "h " + SaturdayMins + "m";
                    var weeklylyTotalHrMns   = TotalHours + "h " + TotalMins + "m";
                    thisGrouping.suHM  = weeklySundayHrMns.ToString();
                    thisGrouping.MonHM = weeklyMondayHrMns.ToString();
                    thisGrouping.TuHM  = weeklyTuesdayHrMns.ToString();
                    thisGrouping.weHM  = weeklyWednesdayHrMns.ToString();
                    thisGrouping.ThHM  = weeklyThursdayHrMns.ToString();
                    thisGrouping.frHM  = weeklyFridayHrMns.ToString();
                    thisGrouping.SaHM  = weeklySaturdayHrMns.ToString();
                    thisGrouping.TotHM = weeklylyTotalHrMns.ToString();


                    //Add the computed object(for each employee) to the list of monthly hours for the HR
                    weeklyHrsListData.Add(thisGrouping);

                    SundayMins     = 0;
                    SundayHours    = 0;
                    MondayMins     = 0;
                    MondayHours    = 0;
                    TuesdayMins    = 0;
                    TuesdayHours   = 0;
                    WednesdayMins  = 0;
                    WednesdayHours = 0;
                    ThursdayMins   = 0;
                    ThursdayHours  = 0;
                    FridayMins     = 0;
                    FridayHours    = 0;
                    SaturdayMins   = 0;
                    SaturdayHours  = 0;


                    weekTotalMns = 0;
                    TotalMins    = 0;

                    weekTotalHrs = 0;
                    TotalHours   = 0;
                }
                //dataTableData.draw = draw;
                dataTableData.recordsTotal = (pageIndex * pageSize) + weeklyHrsListData.Count + 1;
                int recordsFiltered = (pageIndex * pageSize) + weeklyHrsListData.Count + 1;

                dataTableData.recordsFiltered = recordsFiltered;
                dataTableData.data            = weeklyHrsListData;

                var weeklyHoursViewModel = new WeeklyHoursViewModel
                {
                    MyWeeklyHoursDataTableData = dataTableData,
                    PaginationInfo             = new PaginationInfoViewModel
                    {
                        CurrentPage = pageIndex,
                        PageSize    = pageSize,
                        Next        = "is-disabled",
                        Previous    = "is-disabled"
                    }
                };

                return(weeklyHoursViewModel);
            }
            catch (Exception ex)
            {
                _logger.LogError("Error getting the weekly hours view model: " + ex.Message);
                return(new WeeklyHoursViewModel());
            }
        }
Exemple #2
0
        public async Task <WeeklyHoursViewModel> GetWeeklyReportHours(DateTime dt, int pageIndex, int pageSize = 10)
        {
            var ci = System.Threading.Thread.CurrentThread.CurrentCulture;

            // Get an array tagging each item of the month with the Week number
            int[] dateWeekNumber = this.GetDayOfMonthWeekAssignmentArray(dt);
            var   myWeekNumber   = dateWeekNumber[dt.Day - 1];
            var   weeklyHrsList  = new List <WeeklyHours>();

            //var items = await this._reportHoursRepository.GetItemsAsync(dt);

            // Group Report hours by individual User data using DisplayName
            var groupings = from item in _listCollectionPage.DataList
                            group item by item.Fields.DisplayName into data
                            select data;

            // Process the data for each user
            foreach (var grouping in groupings)
            {
                var weeklyHrs = new WeeklyHours();

                //Add the computed object(for each employee) to the list of weekly hours for the HR
                weeklyHrsList.Add(weeklyHrs);
                weeklyHrs.EmpName = grouping.Key;
                foreach (var item in grouping)
                {
                    Dictionary <string, short> hrsMins = new Dictionary <string, short>();

                    //call to get Final hours for ReportHours Repository data
                    hrsMins = HoursComputeHelper.GetFinalHrsMins(item);
                    var totalHours = hrsMins["FinalTotalHrs"];
                    var totalMins  = hrsMins["FinalTotalMins"];
                    if (weeklyHrs.MgrName == null)
                    {
                        weeklyHrs.MgrName = item.Fields.ManagerDisplayName;
                    }
                    var itemDate = DateTime.ParseExact(item.Fields.Date, "yyyyMMdd", ci);

                    var theWeekNumber = dateWeekNumber[itemDate.Day - 1];
                    if (dateWeekNumber[itemDate.Day - 1] == myWeekNumber)
                    {
                        switch (itemDate.DayOfWeek)
                        {
                        case System.DayOfWeek.Sunday:
                            weeklyHrs.SundayHours += totalHours;
                            weeklyHrs.SundayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Monday:
                            weeklyHrs.MondayHours += totalHours;
                            weeklyHrs.MondayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Tuesday:
                            weeklyHrs.TuesdayHours += totalHours;
                            weeklyHrs.TuesdayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Wednesday:
                            weeklyHrs.WednesdayHours += totalHours;
                            weeklyHrs.WednesdayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Thursday:
                            weeklyHrs.ThursdayHours += totalHours;
                            weeklyHrs.ThursdayMins  += totalMins;
                            break;

                        case System.DayOfWeek.Friday:
                            weeklyHrs.FridayHours += totalHours;
                            weeklyHrs.FridayMins  += totalMins;
                            break;

                        default:
                            weeklyHrs.SaturdayHours += totalHours;
                            weeklyHrs.SaturdayMins  += totalMins;
                            break;
                        }
                    }
                }
            }

            return(new WeeklyHoursViewModel()
            {
                WeeklyHrs = weeklyHrsList
            });
        }
        public async Task <MyMonthlyHoursViewModel> GetViewModel(DateTime dt, int pageIndex = 1, int pageSize = 10)
        {
            var ci = System.Threading.Thread.CurrentThread.CurrentCulture;

            try
            {
                if (_listCollectionPage == null)
                {
                    _listCollectionPage = await _reportHoursRepository.GetItemsAsync(dt, pageSize);
                }

                // Check to see if a new date is being requested
                if (_listCollectionPage.QueryDate != dt.ToString("yyyyMM"))
                {
                    _listCollectionPage = await _reportHoursRepository.GetItemsAsync(dt, pageSize);
                }

                if ((pageIndex - _listCollectionPage.CurrentPageIndex) == 1)
                {
                    // Move next
                    _listCollectionPage = await _reportHoursRepository.GetNextItemsAsync(_listCollectionPage);
                }
                else if ((_listCollectionPage.CurrentPageIndex - pageIndex) == 1)
                {
                    // Move previous
                    _listCollectionPage = await _reportHoursRepository.GetPreviousItemsAsync(_listCollectionPage);
                }
                else
                {
                    // Other page
                    //_listCollectionPage = await _reportHoursRepository.GetPageItemsAsync(_listCollectionPage, pageIndex);
                }

                // Create the DataTable
                MyMonthlyHoursDataTableData dataTableData = new MyMonthlyHoursDataTableData(); // This is the MonthlyHoursListData.

                List <MonthlyHoursListData> mh = new List <MonthlyHoursListData>();

                // Get an array tagging each item of the month with the Week number
                int[] dateWeekNumber = this.GetDayOfMonthWeekAssignmentArray(dt);

                //var monthlyHrsList = new List<MonthlyHours>();

                // variables to compute total hours per week.
                int week1TotHrs    = 0;
                int week1TotMins   = 0;
                int week2TotHrs    = 0;
                int week2TotMins   = 0;
                int week3TotHrs    = 0;
                int week3TotMins   = 0;
                int week4TotHrs    = 0;
                int week4TotMins   = 0;
                int week5TotHrs    = 0;
                int week5TotMins   = 0;
                int monthTotalHrs  = 0;
                int monthTotalMins = 0;

                // Populate MonthlyHoursList
                // Group Monthly Report hours by individual User data using DisplayName
                var groupings = from item in _listCollectionPage.DataList
                                group item by item.Fields.DisplayName into data

                                select data.Distinct();

                //var monthlyHours = new MonthlyHours();
                // Process the data for each user

                foreach (var grouping in groupings)
                {
                    var thisGrouping = new MonthlyHoursListData();

                    //logic for handling duplicate records coming for the IW
                    var count    = grouping.Count();
                    var noOfDays = DateTime.DaysInMonth(dt.Year, dt.Month);
                    int diff     = 0;
                    if (count > noOfDays)
                    {
                        diff = count - noOfDays;
                    }

                    var reportHoursforIW = grouping.Skip(diff);

                    // Compute the total for each week of the month by processing daily records
                    foreach (var item in reportHoursforIW)
                    {
                        thisGrouping.EmpName     = item.Fields.DisplayName.ToString();
                        thisGrouping.ManagerName = item.Fields.ManagerDisplayName.ToString();

                        var itemDate = DateTime.ParseExact(item.Fields.Date, "yyyyMMdd", ci);

                        ConcurrentDictionary <string, short> hrsMins = new ConcurrentDictionary <string, short>();

                        //call to get Final hours for ReportHours Repository data
                        hrsMins = HoursComputeHelper.GetFinalHrsMins(item);
                        var totalHours = hrsMins["FinalTotalHrs"];
                        var totalMins  = hrsMins["FinalTotalMins"];

                        if ((itemDate.Day - 1) < DateTime.DaysInMonth(dt.Year, dt.Month))
                        {
                            var theWeekNumber = dateWeekNumber[itemDate.Day - 1];

                            switch (dateWeekNumber[itemDate.Day - 1])
                            {
                            case 1:
                                week1TotHrs  += totalHours;
                                week1TotMins += totalMins;
                                break;

                            case 2:
                                week2TotHrs  += totalHours;
                                week2TotMins += totalMins;
                                break;

                            case 3:

                                week3TotHrs  += totalHours;
                                week3TotMins += totalMins;
                                break;

                            case 4:

                                week4TotHrs  += totalHours;
                                week4TotMins += totalMins;
                                break;

                            case 5:

                                week5TotHrs  += totalHours;
                                week5TotMins += totalMins;
                                break;
                            }
                        }
                        else
                        {
                            week5TotHrs  += totalHours;
                            week5TotMins += totalMins;
                        }
                    }

                    //Logic to adjust values 60 min = hrs++
                    week1TotHrs    = (week1TotHrs + (week1TotMins / 60));
                    week1TotMins   = (week1TotMins % 60);
                    week2TotHrs    = (week2TotHrs + (week2TotMins / 60));
                    week2TotMins   = (week2TotMins % 60);
                    week3TotHrs    = (week3TotHrs + (week3TotMins / 60));
                    week3TotMins   = (week3TotMins % 60);
                    week4TotHrs    = (week4TotHrs + (week4TotMins / 60));
                    week4TotMins   = (week4TotMins % 60);
                    week5TotHrs    = (week5TotHrs + (week5TotMins / 60));
                    week5TotMins   = (week5TotMins % 60);
                    monthTotalMins = (week1TotMins + week2TotMins + week3TotMins + week4TotMins + week5TotMins);
                    monthTotalHrs  = (week1TotHrs + week2TotHrs + week3TotHrs + week4TotHrs + week5TotHrs) + (monthTotalMins / 60);
                    monthTotalMins = monthTotalMins % 60;

                    // Create display string.
                    var week1TotalHrMns = week1TotHrs + "h " + week1TotMins + "m";
                    var week2TotalHrMns = week2TotHrs + "h " + week2TotMins + "m";
                    var week3TotalHrMns = week3TotHrs + "h " + week3TotMins + "m";
                    var week4TotalHrMns = week4TotHrs + "h " + week4TotMins + "m";
                    var week5TotalHrMns = week5TotHrs + "h " + week5TotMins + "m";
                    //var monthlyTotalHrMns = monthTotalHrs + "h " + monthTotalMins + "m";

                    thisGrouping.Week1TotalHrMns = week1TotalHrMns;
                    thisGrouping.Week2TotalHrMns = week2TotalHrMns;
                    thisGrouping.Week3TotalHrMns = week3TotalHrMns;
                    thisGrouping.Week4TotalHrMns = week4TotalHrMns;
                    thisGrouping.Week5TotalHrMns = week5TotalHrMns;
                    //thisGrouping.MonthlyTotalHrMns = monthlyTotalHrMns;


                    monthTotalMins = (week1TotMins + week2TotMins + week3TotMins + week4TotMins + week5TotMins);
                    monthTotalHrs  = (week1TotHrs + week2TotHrs + week3TotHrs + week4TotHrs + week5TotHrs) + (monthTotalMins / 60);
                    monthTotalMins = monthTotalMins % 60;
                    var monthlyTotalHrMns = monthTotalHrs + "h " + monthTotalMins + "m";

                    thisGrouping.MonthlyTotalHrMns = monthlyTotalHrMns;

                    //Add the computed object(for each employee) to the list of monthly hours for the HR
                    mh.Add(thisGrouping);

                    // initializing the values to 0 for the next employee
                    week1TotHrs  = 0;
                    week1TotMins = 0;
                    week2TotHrs  = 0;
                    week2TotMins = 0;
                    week3TotHrs  = 0;
                    week3TotMins = 0;
                    week4TotHrs  = 0;
                    week4TotMins = 0;
                    week5TotHrs  = 0;
                    week5TotMins = 0;
                } // end for each grouping.

                //dataTableData.draw = draw;
                dataTableData.recordsTotal = (pageIndex * pageSize) + mh.Count + 1;
                int recordsFiltered = (pageIndex * pageSize) + mh.Count + 1;

                dataTableData.recordsFiltered = recordsFiltered;
                dataTableData.Data            = mh;

                var monthlyHoursViewModel = new MyMonthlyHoursViewModel
                {
                    MyMonthlyHoursDataTableData = dataTableData,
                    RequestRevision             = "is-disabled",
                    PaginationInfo = new PaginationInfoViewModel
                    {
                        CurrentPage = pageIndex,
                        PageSize    = pageSize,
                        Next        = "is-disabled",
                        Previous    = "is-disabled"
                    }
                };

                return(monthlyHoursViewModel);
            }
            catch (Exception ex)
            {
                return(new MyMonthlyHoursViewModel());
            }
        }
Exemple #4
0
        /*
         * public async Task<IActionResult> Weekly(string dt)
         * {
         * if (User.Identity.IsAuthenticated)
         * {
         * // Get UserProfile details
         * _userProfile = await _dataServiceClient.GetUserProfile(User, HttpContext);
         * ViewData["Email"] = _userProfile.Fields.Upn;
         * ViewData["IsManager"] = _userProfile.Fields.IsManager;
         * ViewData["IsHr"] = _userProfile.Fields.IsHr;
         * ViewData["IsAdmin"] = _userProfile.Fields.IsAdmin;
         * ViewData["UserImage"] = _userProfile.Fields.UserPicture;
         *
         * DateTime selDt = DateTime.Now.AddDays(-DateTime.Now.Day);
         * if (dt != null)
         * {
         *  selDt = Convert.ToDateTime(dt.ToString());
         * }
         *
         *
         * var viewModel = await _dataServiceClient.GetWeeklyReportHours(
         *  User,
         *  HttpContext,
         * selDt);
         * viewModel.ComputeTotalHrs();
         * viewModel.SelectedDate = selDt;
         * return View(viewModel);
         * }
         * else
         * {
         * ErrorViewModel EVM = new ErrorViewModel();
         *
         * return View(EVM);
         * }
         * }
         */

        //public async Task<IActionResult> Weekly(string dt)
        public async Task <IActionResult> Weekly(string selMonthDt, string empNameFilter = default(string), int pageId = 0, int pageSize = 10, ListCollectionPage <ReportHours> reportHours = null, int status = 0)
        {
            var ci = System.Threading.Thread.CurrentThread.CurrentCulture;

            if (User.Identity.IsAuthenticated)
            {
                // Get UserProfile details
                if (_userProfile == null)
                {
                    _userProfile = await _userProfileRepository.GetItemAsync();
                }
                ViewData["Email"]     = _userProfile.Fields.Upn;
                ViewData["IsManager"] = _userProfile.Fields.IsManager;
                ViewData["IsHr"]      = _userProfile.Fields.IsHr;
                ViewData["IsAdmin"]   = _userProfile.Fields.IsAdmin;
                ViewData["UserImage"] = _userProfile.Fields.UserPicture;

                DateTime selDt      = DateTime.Now.AddDays(-DateTime.Now.Day);
                int      startDay   = (int)selDt.DayOfWeek;
                int      dayOfMonth = (int)selDt.Day;
                while ((startDay > 0) && (dayOfMonth > 1))
                {
                    selDt = selDt.AddDays(-1);
                    startDay--;
                    dayOfMonth--;
                }

                if (selMonthDt != null)
                {
                    selDt      = Convert.ToDateTime(selMonthDt.ToString());
                    startDay   = (int)selDt.DayOfWeek;
                    dayOfMonth = (int)selDt.Day;
                    while ((startDay > 0) && (dayOfMonth > 1))
                    {
                        selDt = selDt.AddDays(-1);
                        startDay--;
                        dayOfMonth--;
                    }
                }
                //DateTime date = Convert.ToDateTime(selMonthDt);
                // Get an array tagging each item of the month with the Week number



                int[] dateWeekNumber = _dataServiceClient.GetDayOfMonthWeekAssignmentArray(selDt);


                // Get an array tagging each item of the month with the Week number
                var myWeekNumber  = dateWeekNumber[selDt.Day - 1];
                var weeklyHrsList = new List <WeeklyHours>();

                WeeklyHoursViewModel             weeklyViewModel = new WeeklyHoursViewModel();
                ListCollectionPage <ReportHours> weeklyTemp      = null;
                //if (Request.Query.Count != 0)
                //{
                //var json = Request.Query["reportHours"];
                //weeklyTemp = JsonConvert.DeserializeObject<ListCollectionPage<ReportHours>>(json);
                //}
                if (status == 0)
                {
                    reportHours = await _dataServiceClient.GetWeeklyPageView(selDt, empNameFilter, pageId, pageSize, null, 0);
                }
                else if (status == 1)
                {
                    reportHours = await _dataServiceClient.GetWeeklyPageView(selDt, empNameFilter, pageId, pageSize, reportHours, 1);
                }
                else if (status == 2)
                {
                    reportHours = await _dataServiceClient.GetWeeklyPageView(selDt, empNameFilter, pageId, pageSize, reportHours, 2);
                }

                /*
                 * if (teamHours == null)
                 * {
                 *      myTeamsHoursViewModel.UserInfo = _userProfile;
                 *      return View(myTeamsHoursViewModel);
                 * }
                 */
                ViewData["ReportHoursCollection"] = reportHours;

                IList <ReportHours> reportHoursList = reportHours.DataList;
                // Group Monthly Report hours by individual User data using DisplayName
                var groupings = from item in reportHoursList
                                group item by item.Fields.DisplayName into data
                                select data;

                // Process the data for each user
                foreach (var grouping in groupings)
                {
                    var weeklyHrs = new WeeklyHours();

                    //Add the computed object(for each employee) to the list of weekly hours for the HR
                    weeklyHrsList.Add(weeklyHrs);
                    weeklyHrs.EmpName = grouping.Key;
                    foreach (var item in grouping)
                    {
                        Dictionary <string, short> hrsMins = new Dictionary <string, short>();

                        //call to get Final hours for ReportHours Repository data
                        hrsMins = HoursComputeHelper.GetFinalHrsMins(item);
                        var totalHours = hrsMins["FinalTotalHrs"];
                        var totalMins  = hrsMins["FinalTotalMins"];
                        if (weeklyHrs.MgrName == null)
                        {
                            weeklyHrs.MgrName = item.Fields.ManagerDisplayName;
                        }
                        var itemDate = DateTime.ParseExact(item.Fields.Date, "yyyyMMdd", ci);

                        var theWeekNumber = dateWeekNumber[itemDate.Day - 1];
                        if (dateWeekNumber[itemDate.Day - 1] == myWeekNumber)
                        {
                            switch (itemDate.DayOfWeek)
                            {
                            case System.DayOfWeek.Saturday:
                                weeklyHrs.SundayHours += totalHours;
                                weeklyHrs.SundayMins  += totalMins;
                                break;

                            case System.DayOfWeek.Monday:
                                weeklyHrs.MondayHours += totalHours;
                                weeklyHrs.MondayMins  += totalMins;
                                break;

                            case System.DayOfWeek.Tuesday:
                                weeklyHrs.TuesdayHours += totalHours;
                                weeklyHrs.TuesdayMins  += totalMins;
                                break;

                            case System.DayOfWeek.Wednesday:
                                weeklyHrs.WednesdayHours += totalHours;
                                weeklyHrs.WednesdayMins  += totalMins;
                                break;

                            case System.DayOfWeek.Thursday:
                                weeklyHrs.ThursdayHours += totalHours;
                                weeklyHrs.ThursdayMins  += totalMins;
                                break;

                            case System.DayOfWeek.Friday:
                                weeklyHrs.FridayHours += totalHours;
                                weeklyHrs.FridayMins  += totalMins;
                                break;

                            default:
                                weeklyHrs.SaturdayHours += totalHours;
                                weeklyHrs.SaturdayMins  += totalMins;
                                break;
                            }
                        }
                    }
                }


                if (selMonthDt == null)
                {
                    weeklyViewModel.SelectedDate = fnGetLastMonthLastWeekSunDate();                     // Start on Sunday.
                }
                else
                {
                    weeklyViewModel.SelectedDate = selDt;
                }

                //weeklyViewModel.u = _userProfile;


                //WeeklyHrs = weeklyHrsList;
                weeklyViewModel.WeeklyHrs = weeklyHrsList;
                return(View(weeklyViewModel));
            }
            else
            {
                ErrorViewModel EVM = new ErrorViewModel();

                return(View(EVM));
            }
        }
        public async Task <TeamHoursViewModel> GetViewModel(DateTime date, int pageIndex = 1, int pageSize = 10)
        {
            var  ci            = System.Threading.Thread.CurrentThread.CurrentCulture;
            bool userSubmitted = false;
            bool mgrSubmitted  = false;
            bool submitToHR    = false;

            try
            {
                if (_listCollectionPage == null)
                {
                    _listCollectionPage = await _teamHoursRepository.GetItemsAsync(date, pageSize);
                }

                // Exit from search
                //if (!String.IsNullOrEmpty(_listCollectionPage.SearchQuery)) _listCollectionPage = await _teamHoursRepository.GetItemsAsync(date, pageSize);

                // Check to see if a new date is being requested
                if (_listCollectionPage.QueryDate != date.ToString("yyyyMM"))
                {
                    _listCollectionPage = await _teamHoursRepository.GetItemsAsync(date, pageSize);
                }

                if ((pageIndex - _listCollectionPage.CurrentPageIndex) == 1)
                {
                    // Move next
                    _listCollectionPage = await _teamHoursRepository.GetNextItemsAsync(_listCollectionPage);
                }
                else if ((_listCollectionPage.CurrentPageIndex - pageIndex) == 1)
                {
                    // Move previous
                    _listCollectionPage = await _teamHoursRepository.GetPreviousItemsAsync(_listCollectionPage);
                }
                else if (pageIndex > 2)  // Increment until we find the correct page.
                {
                    while (_listCollectionPage.CurrentPageIndex < pageIndex)
                    {
                        _listCollectionPage = await _teamHoursRepository.GetNextItemsAsync(_listCollectionPage);
                    }
                }
                //var saveResults = await _graphSharePointService.CreateSiteListItemAsync(analyticsSiteList, dailyOTHoursRootObject.ToString());
                // Create the DataTable
                MyTeamDataTableData dataTableData = new MyTeamDataTableData();

                List <TeamHoursListData> th = new List <TeamHoursListData>();
                foreach (var item in _listCollectionPage.DataList)
                {
                    var computedHours = item.Fields.EmailHours + item.Fields.MeetingHours + item.Fields.OtherHours +
                                        ((item.Fields.EmailMinutes + item.Fields.MeetingMinutes + item.Fields.OtherMinutes) / 60);
                    var computedMinutes = (item.Fields.EmailMinutes + item.Fields.MeetingMinutes + item.Fields.OtherMinutes) % 60;

                    /*
                     *                  var AdjustedHours = item.Fields.EmailAdjustedHours + item.Fields.MeetingAdjustedHours + item.Fields.OtherAdjustedHours +
                     *                  ((item.Fields.EmailAdjustedMinutes + item.Fields.MeetingAdjustedMinutes + item.Fields.OtherAdjustedMinutes) / 60);
                     *                  var AdjustedMinutes = (item.Fields.EmailAdjustedMinutes + item.Fields.MeetingAdjustedMinutes + item.Fields.OtherAdjustedMinutes) % 60;
                     */
                    ConcurrentDictionary <string, short> hrsMins = new ConcurrentDictionary <string, short>();

                    //call to get Final hours for ReportHours Repository data
                    hrsMins = HoursComputeHelper.GetFinalTeamHrsMins(item);
                    var AdjustedHours   = hrsMins["FinalTotalHrs"];
                    var AdjustedMinutes = hrsMins["FinalTotalMins"];

                    string status      = "";
                    string actionLinks = "";
                    if (item.Fields.TeamHoursItemState.ToString() == ItemState.Submitted.ToString())
                    {
                        mgrSubmitted = true;
                        status       = item.Fields.ItemState.ToString();
                        actionLinks += "<span class='recheckHrs icon-noaction'> <i class='ms-Icon ms-Icon--DelveAnalytics font20' title='Request Revision'></i></span>";
                    }
                    else if (item.Fields.ItemState.ToString() == ItemState.Submitted.ToString())
                    {
                        userSubmitted = true;
                        status        = item.Fields.ItemState.ToString();
                        actionLinks  += "<span class='recheckHrs'> <i class='ms-Icon ms-Icon--DelveAnalytics font20 Pointer' title='Request Revision'></i></span>";
                    }
                    else if (item.Fields.ItemState.ToString() == ItemState.RequiresRevision.ToString())
                    {
                        status       = "Requires Revision";
                        actionLinks += "<span class='recheckHrs icon-noaction'> <i class='ms-Icon ms-Icon--DelveAnalytics font20' title='Request Revision'></i></span>";
                    }
                    else if (item.Fields.ItemState.ToString() == ItemState.NotSubmitted.ToString())
                    {
                        status       = "Not Submitted";
                        actionLinks += "<span class='recheckHrs icon-noaction'> <i class='ms-Icon ms-Icon--DelveAnalytics font20' title='Request Revision'></i></span>";
                    }
                    else if (item.Fields.ItemState.ToString() == ItemState.SubmittedBySystem.ToString())
                    {
                        userSubmitted = true;
                        status        = "Submitted By System";
                        actionLinks  += "<span class='recheckHrs'> <i class='ms-Icon ms-Icon--DelveAnalytics font20 Pointer' title='Request Revision'></i></span>";
                    }
                    else
                    {
                        status       = item.Fields.ItemState.ToString();
                        actionLinks += "<span class='recheckHrs icon-noaction'> <i class='ms-Icon ms-Icon--DelveAnalytics font20' title='Request Revision'></i></span>";
                    }

                    if (userSubmitted && !mgrSubmitted)  // Enable Submit Button.
                    {
                        submitToHR = true;
                    }

                    // reset the 2 local variables - never reset submitToHR.
                    userSubmitted = false;
                    mgrSubmitted  = false;

                    var t = new TeamHoursListData
                    {
                        Name             = item.Fields.DisplayName,
                        ComputedHours    = computedHours + "h " + computedMinutes + "m",
                        AdjustedHours    = AdjustedHours + "h " + AdjustedMinutes + "m",
                        ObjectIdentifier = item.Fields.ObjectIdentifier,
                        Status           = status,
                        Action           = actionLinks,
                        Id            = item.Id,
                        Date          = item.Fields.Date,
                        SubmittedDate = item.Fields.TeamHoursSubmittedDate
                    };
                    th.Add(t);
                }

                dataTableData.recordsTotal = (pageIndex * pageSize) + th.Count + 1;
                int recordsFiltered = (pageIndex * pageSize) + th.Count + 1;

                dataTableData.recordsFiltered = recordsFiltered;
                dataTableData.data            = th;
                dataTableData.SubmittedDate   = (dataTableData.data.Exists(x => x.SubmittedDate != DateTime.MinValue) ? dataTableData.data.FirstOrDefault().SubmittedDate.ToShortDateString() : DateTime.MinValue.ToShortDateString());
                //dataTableData.SubmitEnable = (dataTableData.data.Exists(x => x.SubmittedDate == DateTime.MinValue) ? true : false);
                dataTableData.SubmitEnable = (dataTableData.data.Exists(x => x.Status == ItemState.Submitted.ToString()) ? true : false);
                dataTableData.SubmitToHR   = submitToHR;

                var teamHoursViewModel = new TeamHoursViewModel
                {
                    MyTeamDataTableData = dataTableData,
                    RequestRevision     = "is-disabled",
                    EditTeamHours       = "is-disabled",
                };

                return(teamHoursViewModel);
            }
            catch (Exception ex)
            {
                return(new TeamHoursViewModel());
            }
        }