[HttpGet]// GET: Attendance
        public ActionResult CreateAttendanceLog()
        {
            AddAttendanceLogViewModel model = _employeeService.PopulateViewModel();

            model.Statuses = _attendanceStatusService.GetAttendanceStatus();

            return(View(model));
        }
        public AddAttendanceLogViewModel PopulateViewModel()
        {
            AddAttendanceLogViewModel model = new AddAttendanceLogViewModel();
            AnnualLeaveService        _annualLeaveService = new AnnualLeaveService();
            List <EmployeeDto>        employeeDtos        = _employeeRepository.GetEmployees();


            List <AttendanceLogItem> attendanceLogItems = new List <AttendanceLogItem>();

            foreach (var e in employeeDtos)
            {
                // check if employee has annual leave booked today
                DateTime startDate = DateTime.UtcNow;
                DateTime endDate   = DateTime.UtcNow;
                List <DbContextFiles.EmployeeAnnualLeave> employeeAnnualLeaves = _annualLeaveService.GetAnnualLeaveBooked(e.EmployeeId, startDate, endDate);

                int attendenceStatusIdToUse;
                AttendanceStatusDto dto = new AttendanceStatusDto();
                if (employeeAnnualLeaves.Count == 0)
                {
                    // no annual leave booked can default type to present
                    dto = _attendanceStatusService.GetAttendanceStatus(EAttendanceStatus.Present);
                    attendenceStatusIdToUse = dto?.AttendanceStatusId ?? 0;
                }
                else
                {
                    DateTime today = DateTime.UtcNow.Date;

                    DbContextFiles.EmployeeAnnualLeave employeeAnnualLeave = employeeAnnualLeaves.FirstOrDefault(x => DbFunctions.TruncateTime(x.AnnualLeaveDateOnUtc) == DbFunctions.TruncateTime(today));

                    if (employeeAnnualLeave == null)
                    {
                        continue;
                    }

                    if (employeeAnnualLeave.AnnualLeavePm == null)
                    {
                        continue;
                    }

                    if (employeeAnnualLeave.AnnualLeaveAm == null)
                    {
                        continue;
                    }

                    // todo need to write this really crap code i cant even stand to look at it but go not time to write this
                    bool?f    = false;
                    bool isAm = false;
                    bool isPm = false;

                    if (employeeAnnualLeave.AnnualLeavePm == true)
                    {
                        isPm = true;
                    }
                    if (employeeAnnualLeave.AnnualLeaveAm == true)
                    {
                        isAm = true;
                    }

                    if (isPm == true && isAm == true)
                    {
                        dto = _attendanceStatusService.GetAttendanceStatus(EAttendanceStatus.AnnualLeave);// must be a full days AL
                    }
                    else if (isPm == true)
                    {
                        dto = _attendanceStatusService.GetAttendanceStatus(EAttendanceStatus.AnnualLeavePm);
                    }
                    else
                    {
                        dto = _attendanceStatusService.GetAttendanceStatus(EAttendanceStatus.AnnualLeaveAm);
                    }


                    attendenceStatusIdToUse = dto?.AttendanceStatusId ?? 0;
                }


                AttendanceLogItem n = new AttendanceLogItem()
                {
                    EmployeeId   = e.EmployeeId,
                    EmployeeName = e.Firstname + " " + e.Surname,
                    DateAttended = DateTime.UtcNow.Date,
                    SelectedAttendanceStatusId = attendenceStatusIdToUse,
                    SelectedStatus             = dto
                };
                attendanceLogItems.Add(n);
            }

            model.AttendanceLog = attendanceLogItems;

            return(model);
        }