示例#1
0
        public ActionResult LoadMyTimesheet(TimeSheetQueryModel TimeSheetQueryModelObj)
        {
            string errorMessage = string.Empty;
            List <TimeSheetModel> timeSheetModelList = GetEmployeeTimeSheet(TimeSheetQueryModelObj, out errorMessage, "My");

            ViewBag.RequestLevelPerson = "My";
            return(PartialView("TimeSheetPartial", timeSheetModelList));
        }
示例#2
0
        public ActionResult ExportTimeSheetToExcel(TimeSheetQueryModel TimeSheetQueryModelObj, string RequestLevelPerson)
        {
            string errorMessage = string.Empty;
            string startDate    = TimeSheetQueryModelObj.DateRange.Substring(0, 10);
            string endDate      = TimeSheetQueryModelObj.DateRange.Substring(12);

            //TimeSheetQueryModelObj.FromDate = startDate;
            if (startDate != "")
            {
                try
                {
                    TimeSheetQueryModelObj.FromDate = DateTime.Parse(startDate, new CultureInfo("en-GB", true));
                    TimeSheetQueryModelObj.ToDate   = DateTime.Parse(endDate, new CultureInfo("en-GB", true));
                }
                catch (Exception)
                {
                    throw;
                }
            }

            List <TimeSheetModel> timeSheetModelList = GetEmployeeTimeSheet(TimeSheetQueryModelObj, out errorMessage, RequestLevelPerson);
            List <TimeSheetModel> excelData          = timeSheetModelList.ToList();

            if (excelData.Count > 0)
            {
                List <string> columns = new List <string>()
                {
                    "Date", "Shift", "In Time", "Out Time", "Working Hours", "Status", "Requests", "Day", "Late In", "Early Out", "Name", "Reporting Manager"
                };
                string fileName = string.Format("Timesheet_{0}{1}", DateTime.Now.ToString("ddMMyyyyHHmmss"), ".xlsx");

                //if (RequestLevelPerson == "My")
                //{
                //    EmployeeProfile profile = (EmployeeProfile)Session["Profile"];
                //    fileName = string.Format("{0}{1}{2}{3}", profile.FirstName, profile.LastName, DateTime.Now.ToString("ddMMyyyyHHmmss"), ".xlsx");
                //}
                //else
                //{
                //fileName = string.Format("TimeSheet_{0}{1}", DateTime.Now.ToString("ddMMyyyyHHmmss"), ".xlsx");
                //}
                byte[] filecontent = ExcelExportHelper.ExportTimesheetExcel(excelData, "", true, columns.ToArray());
                return(File(filecontent, ExcelExportHelper.ExcelContentType, fileName));
            }
            else
            {
                using (var Client = new LeaveClient())
                {
                    var result = Client.GetYearsFromLeaveBalance();
                    ViewBag.YearsInLeaveBal = result;
                }
                ViewBag.RequestLevelPerson = RequestLevelPerson;
                EmployeeAttendanceQueryModel data = new EmployeeAttendanceQueryModel
                {
                    ErrorMsg = "Excel file is not generated as no data returned."
                };
                return(View("~/Views/Attendance/TimeSheet.cshtml", data));
            }
        }
示例#3
0
        public List <TimeSheetModel> GetEmployeeTimeSheet(TimeSheetQueryModel TimeSheetQueryModelObj, out string errorMessage, string requestLevelPerson)
        {
            errorMessage = string.Empty;
            ITimesheetHelper EmployeeAttendanceHelperObj = new TimesheetClient();
            DateTime         currentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

            if (string.IsNullOrEmpty(TimeSheetQueryModelObj.Name))
            {
                EmployeeProfile profile = (EmployeeProfile)Session["Profile"];
                TimeSheetQueryModelObj.UserID = profile.UserId;
                if (TimeSheetQueryModelObj.FromDate == DateTime.MinValue)
                {
                    // For Last 30 days Attendance
                    TimeSheetQueryModelObj.FromDate = currentDate.AddDays(-30);
                    TimeSheetQueryModelObj.ToDate   = currentDate;
                }
                else
                {
                    TimeSheetQueryModelObj.ToDate = TimeSheetQueryModelObj.ToDate;
                }
            }
            else if (!string.IsNullOrEmpty(TimeSheetQueryModelObj.Name))
            {
                if (TimeSheetQueryModelObj.FromDate == DateTime.MinValue)
                {
                    TimeSheetQueryModelObj.FromDate = currentDate.AddDays(-30);
                    TimeSheetQueryModelObj.ToDate   = currentDate;
                }
                else
                {
                    TimeSheetQueryModelObj.ToDate = TimeSheetQueryModelObj.ToDate;
                }
                requestLevelPerson = "My";
            }
            if (TimeSheetQueryModelObj.ToDate >= DateTime.Now)
            {
                TimeSheetQueryModelObj.ToDate = currentDate;
            }
            List <TimeSheetModel> timeSheetModelList = new List <TimeSheetModel>();

            if (requestLevelPerson == "My")
            {
                timeSheetModelList = EmployeeAttendanceHelperObj.GetMyTimeSheet(TimeSheetQueryModelObj.UserID, TimeSheetQueryModelObj.FromDate, TimeSheetQueryModelObj.ToDate);
            }
            else
            {
                timeSheetModelList = EmployeeAttendanceHelperObj.GetMyTeamTimeSheet(TimeSheetQueryModelObj.UserID, TimeSheetQueryModelObj.FromDate, TimeSheetQueryModelObj.ToDate, TimeSheetQueryModelObj.MyDirectEmployees);
            }

            return(timeSheetModelList);
        }
示例#4
0
        public ActionResult LoadMyTeamTimesheet(TimeSheetQueryModel TimeSheetQueryModelObj)
        {
            string                errorMessage       = string.Empty;
            TimesheetClient       tsClient           = new TimesheetClient();
            List <TimeSheetModel> timeSheetModelList = new List <TimeSheetModel>();

            if (tsClient.IsUserHR(TimeSheetQueryModelObj.UserID) == false)
            {
                timeSheetModelList = GetEmployeeTimeSheet(TimeSheetQueryModelObj, out errorMessage, "Team");
                if (!string.IsNullOrEmpty(errorMessage))
                {
                    return(new HttpStatusCodeResult(400, "Given Username does not exists"));
                }
            }
            ViewBag.RequestLevelPerson = "Team";
            return(PartialView("TimeSheetPartial", timeSheetModelList));
        }
示例#5
0
        //public void ProcessMonthlyReport()
        //{
        //    DateTime lastMonth = DateTime.Now.Date.AddMonths(-1).AddDays(1);
        //    GetTimesheetReportData(lastMonth.Date, DateTime.Now.Date);
        //}

        public void GetTimesheetReportData(DateTime FromDate, DateTime ToDate)
        {
            TimeSheetQueryModel TimeSheetQueryModelObj      = new TimeSheetQueryModel();
            ITimesheetHelper    EmployeeAttendanceHelperObj = new TimesheetClient();
            IList <DailyTimeNotMaintainedModel>  lstTimeSheetDailyNotMaintained  = new List <DailyTimeNotMaintainedModel>();
            IList <WeeklyTimeNotMaintainedModel> lstTimeSheetWeeklyNotMaintained = new List <WeeklyTimeNotMaintainedModel>();
            string errorMessage = string.Empty;

            IList <long> lstUsers;

            try
            {
                TimeSheetQueryModelObj.FromDate          = FromDate;
                TimeSheetQueryModelObj.ToDate            = ToDate;
                TimeSheetQueryModelObj.UserID            = EmployeeAttendanceHelperObj.GetHrUserId();
                TimeSheetQueryModelObj.MyDirectEmployees = false;
                List <TimeSheetModel> timeSheetModelList = EmployeeAttendanceHelperObj.GetMyTeamTimeSheet(TimeSheetQueryModelObj.UserID, TimeSheetQueryModelObj.FromDate, TimeSheetQueryModelObj.ToDate, TimeSheetQueryModelObj.MyDirectEmployees);
                timeSheetModelList = timeSheetModelList.OrderBy(x => x.userID).ToList();
                IList <WeeklyDateBlocksModel> lstWeeklyDates = BuildWeeklyDateBlocks(TimeSheetQueryModelObj.FromDate, TimeSheetQueryModelObj.ToDate);
                lstUsers = timeSheetModelList.Select(x => x.userID).Distinct().ToList();
                DailyTimeNotMaintainedModel dayMdl;
                foreach (var item in timeSheetModelList)
                {
                    if (!IsOneDayTimeMaintained(item))
                    {
                        dayMdl = new DailyTimeNotMaintainedModel
                        {
                            WorkingDay     = item.WorkingDate,
                            WorkingDayText = item.WorkingDate.DayOfWeek.ToString(),
                            Shift          = item.Shift,
                            InTime         = item.InTime.Hour + ":" + item.InTime.ToString("mm") + ":" + item.InTime.ToString("ss"),
                            OutTime        = item.OutTime.Hour + ":" + item.OutTime.ToString("mm") + ":" + item.OutTime.ToString("ss"),
                            TotalDayWorkingHoursFormatted = item.WorkingHours.ToString("hh") + ":" + item.WorkingHours.ToString("mm") + ":" + item.WorkingHours.ToString("ss"),
                            Status  = item.Status,
                            Request = item.Requests,
                            UserId  = item.userID
                        };
                        lstTimeSheetDailyNotMaintained.Add(dayMdl);
                    }
                }

                WeeklyTimeNotMaintainedModel weekMdl;
                TimeSpan totalWeekTime      = TimeSpan.Zero;
                TimeSpan calculatedWeekTime = TimeSpan.Zero;
                decimal  officialPermission = 0;
                decimal  personalPermission = 0;
                decimal  leaveDayQty        = 0;
                decimal  workFromHome       = 0;
                bool     isWeeklyMet        = true;
                int      minHours           = (int.Parse)(minWeekTime.Split(':')[0]);
                int      minMins            = (int.Parse)(minWeekTime.Split(':')[1]);
                TimeSpan expectedWeekTime   = new TimeSpan(minHours, minMins, 00);
                foreach (var item in lstUsers)
                {
                    foreach (var week in lstWeeklyDates)
                    {
                        totalWeekTime      = TimeSpan.Zero;
                        calculatedWeekTime = TimeSpan.Zero;
                        officialPermission = 0;
                        personalPermission = 0;
                        leaveDayQty        = 0;
                        workFromHome       = 0;
                        isWeeklyMet        = true;

                        CalculateTimeForAWeek(timeSheetModelList.Where(x => x.WorkingDate.Date >= week.WeekDayStartDate.Date && x.WorkingDate.Date <= week.WeekDayEndDate && x.userID == item).ToList(), out totalWeekTime, out calculatedWeekTime, out officialPermission, out personalPermission, out leaveDayQty, out workFromHome);

                        if (calculatedWeekTime.Ticks < expectedWeekTime.Ticks)
                        {
                            isWeeklyMet = false;
                        }
                        weekMdl = new WeeklyTimeNotMaintainedModel
                        {
                            DateRange       = string.Format("{0} {1} - {2} {3}", week.WeekDayStartDate.Day, week.WeekDayStartDate.ToString("MMM"), week.WeekDayEndDate.Day, week.WeekDayEndDate.ToString("MMM")),
                            WorkFromHomeQty = workFromHome,
                            Permissions     = "Permission(O: " + officialPermission + "hrs, " + "P: " + personalPermission + "hrs)",
                            TotalWeekWorkingHoursFormatted = ((totalWeekTime.Days) * 24 + totalWeekTime.Hours) + ":" + totalWeekTime.ToString("mm") + ":" + totalWeekTime.ToString("ss"),
                            Requests        = leaveDayQty,
                            IsWeeklyTimeMet = isWeeklyMet,
                            UserId          = item
                        };
                        lstTimeSheetWeeklyNotMaintained.Add(weekMdl);
                    }
                }

                //Get unique UserIds from both above lists
                string           body                  = string.Empty;
                ITimesheetHelper timesheetClient       = new TimesheetClient();
                IList <long>     lstFinalUsers         = lstTimeSheetDailyNotMaintained.Select(x => x.UserId).Distinct().ToList();
                IList <long>     lstFinalWeekwiseUsers = lstTimeSheetWeeklyNotMaintained.Select(x => x.UserId).Distinct().ToList();
                lstFinalUsers = lstFinalUsers.Union(lstFinalWeekwiseUsers).ToList();

                IList <UserEmailListModel> lstUserEmail = timesheetClient.GetUserEmailData();
                List <string> ccEmailaddresses          = new List <string>();
                foreach (var userId in lstFinalUsers)
                {
                    if (lstUserEmail.Where(p => p.UserId == userId).Count() > 0 && lstUserEmail.Where(p => p.UserId == userId && !String.IsNullOrEmpty(p.EmployeeEmailAddress)).Count() > 0 && lstUserEmail.FirstOrDefault(x => x.UserId == userId).SkipTimesheetCompliance == false)
                    {
                        ccEmailaddresses = new List <string>();
                        body             = PrepareEmployeeEmailBody(lstTimeSheetDailyNotMaintained.Count > 0 ? lstTimeSheetDailyNotMaintained.Where(x => x.UserId == userId).ToList() : null, lstTimeSheetWeeklyNotMaintained.Count > 0 ? lstTimeSheetWeeklyNotMaintained.Where(x => x.UserId == userId).ToList() : null);
                        if (body != "NoEmail")
                        {
                            ccEmailaddresses.Add(lstUserEmail.Where(x => x.UserId == userId).FirstOrDefault().ReportingToEmailAddress);
                            SendEmail(body, lstUserEmail.Where(x => x.UserId == userId).FirstOrDefault().EmployeeEmailAddress, ccEmailaddresses, "LMS Timesheet Weekly Discrepancy Alert", lstUserEmail.Where(x => x.UserId == userId).FirstOrDefault().FirstName + " " + lstUserEmail.Where(x => x.UserId == userId).FirstOrDefault().LastName);
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }