public MonthlyHoursViewModel()
 {
     MyMonthlyHoursDataTableData = new MyMonthlyHoursDataTableData();
     PaginationInfo = new PaginationInfoViewModel();
 }
        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());
            }
        }
示例#3
0
        public async Task <IActionResult> MonthlyHoursLoadRequest(string date, string searchtext, int draw, int start = 0, int length = 10)
        {
            int pageIndex = 0;

            if (start != 0)
            {
                pageIndex = start / length + 1;
            }

            if (pageIndex == 0)
            {
                pageIndex = 1;
            }


            MyMonthlyHoursDataTableData dataTableData = new MyMonthlyHoursDataTableData();

            if (User.Identity.IsAuthenticated)
            {
                MyMonthlyHoursViewModel myMonthlyHoursViewModel = new MyMonthlyHoursViewModel();
                _userProfile = await _dataServiceClient.GetUserProfile();

                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;

                // on first call, datepicker may not pass date.
                // If date == null, default to last month.
                DateTime selDt = DateTime.Now.AddMonths(-1);
                if (date != null)
                {
                    selDt = DateTime.Parse(date);
                }
                string searchQuery = HttpContext.Request.Query["search[value]"].ToString();

                MyMonthlyHoursViewModel monthlyHoursViewModel = new MyMonthlyHoursViewModel();

                // Generate TEST data...
                //List<MonthlyHoursListData> mh = new List<MonthlyHoursListData>();

                //for (int i = 0; i < length; i++)
                //{
                //    //return View();
                //    MonthlyHoursListData t = new MonthlyHoursListData();
                //    t.EmpName = "test" + i + start;
                //    t.ManagerName = "Anil";
                //    t.Week1TotalHrMns = i.ToString();
                //    t.Week2TotalHrMns = i+1.ToString();
                //    t.Week3TotalHrMns = i+2.ToString();
                //    t.Week4TotalHrMns = i+3.ToString();
                //    t.Week5TotalHrMns = i+4.ToString();
                //    t.MonthlyTotalHrMns = i+5.ToString();
                //    mh.Add(t);
                //}

                if (searchtext != null)
                {
                    monthlyHoursViewModel = await _reportHoursService.GetSearchResults(selDt, searchtext, pageIndex, length);

                    dataTableData = monthlyHoursViewModel.MyMonthlyHoursDataTableData;
                }
                else
                {
                    monthlyHoursViewModel = await _reportHoursService.GetViewModel(selDt, pageIndex, length);

                    dataTableData = monthlyHoursViewModel.MyMonthlyHoursDataTableData;
                }



                dataTableData.draw         = draw;
                dataTableData.recordsTotal = (pageIndex * length) + dataTableData.Data.Count + 1;
                int recordsFiltered = (pageIndex * length) + dataTableData.Data.Count + 1;
                dataTableData.recordsTotal    = int.MaxValue;
                dataTableData.recordsFiltered = recordsFiltered;

                if (date == null)
                {
                    myMonthlyHoursViewModel.SearchDate = myMonthlyHoursViewModel.fnGetLastMonthEndDate();
                }
                else
                {
                    myMonthlyHoursViewModel.SearchDate = selDt;
                }
                myMonthlyHoursViewModel.UserInfo = _userProfile;

                // Output TEST data...
                //dataTableData.Data = mh;

                return(Json(dataTableData));
            }
            else
            {
                ErrorViewModel EVM = new ErrorViewModel();

                return(View(EVM));
            }
        }