示例#1
0
        public JsonResult MarkAttendance(long eventId, decimal latitude, decimal longitude)
        {
            JsonResponseModel result = new JsonResponseModel();

            try
            {
                EVENT currentEvent = _eventLogic.GetEntityBy(e => e.Id == eventId);

                bool eventStatus = _eventLogic.GetEventStatus(currentEvent);
                if (eventStatus)
                {
                    bool inLocation = _eventLogic.InLocation(currentEvent, latitude, longitude);

                    if (inLocation)
                    {
                        _student = _studentLogic.GetEntityBy(s => s.Matric_Number == User.Identity.Name);

                        if (IsCorrectDevice(_student))
                        {
                            //check if attendance record exist
                            ATTENDANCE attendance = _attendanceLogic.GetEntitiesBy(a => a.Event_Id == eventId && a.Student_Id == _student.Person_Id).LastOrDefault();
                            if (attendance == null)
                            {
                                _attendanceLogic.PopulateAttendanceForEvent(currentEvent);
                            }

                            _attendanceLogic.MarkAttendance(_student, currentEvent, AttendanceStatuses.Present);

                            result.IsError = false;
                            result.Message = "Attendance Marked";
                        }
                        else
                        {
                            result.IsError = true;
                            result.Message = "Kindly login with your own device to take this attendnace.";
                        }
                    }
                    else
                    {
                        result.IsError = true;
                        result.Message = "You are not currently at the venue of this event.";
                    }
                }
                else
                {
                    result.IsError = true;
                    result.Message = "Event is not ongoing";
                }
            }
            catch (Exception ex)
            {
                result.IsError = true;
                result.Message = ex.Message;
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        public ActionResult ViewAttendance(string eventId)
        {
            _viewModel = new EventViewModel();
            try
            {
                if (!string.IsNullOrEmpty(eventId))
                {
                    long myEventId = Convert.ToInt64(Utility.Decrypt(eventId));

                    AttendanceLogic attendanceLogic = new AttendanceLogic();
                    AbsentLogLogic  absentLogLogic  = new AbsentLogLogic();

                    _viewModel.AttendanceList = attendanceLogic.GetEntitiesBy(s => s.Event_Id == myEventId);

                    _viewModel.AttendanceList.ForEach(e =>
                    {
                        if (e.Attendance_Status_Id == (int)AttendanceStatuses.Excused)
                        {
                            e.ATTENDANCE_STATUS.Name = absentLogLogic.GetAbsenceRequestStatus(e);
                        }
                    });

                    _viewModel.EventId = myEventId;
                }
            }
            catch (Exception ex)
            {
                SetMessage("Error! " + ex.Message, Message.Category.Error);
            }

            return(View(_viewModel));
        }
        private ATTENDANCE ProcessHallAttendance(HALL hall, STUDENT student)
        {
            ATTENDANCE attendance = null;

            try
            {
                AttendanceLogic attendanceLogic = new AttendanceLogic();
                EventLogic      eventLogic      = new EventLogic();

                int numberOfTimesPresent = attendanceLogic.GetEntitiesBy(s => s.EVENT.Hall_Id == hall.Id && s.Student_Id == student.Person_Id &&
                                                                         s.Attendance_Status_Id == (int)AttendanceStatuses.Present).Count();
                int numberOfLectures = eventLogic.GetEntitiesBy(s => s.Hall_Id == hall.Id && (s.Active == true || s.Active == null)).Count();
                int numberOfAbsence  = attendanceLogic.GetEntitiesBy(s => s.EVENT.Hall_Id == hall.Id && s.Student_Id == student.Person_Id &&
                                                                     s.Attendance_Status_Id == (int)AttendanceStatuses.Excused).Count();
                int numberOfLecturesHeld = numberOfLectures - numberOfAbsence;

                double eligibilityPercentage = (Convert.ToDouble(numberOfTimesPresent) / Convert.ToDouble(numberOfLecturesHeld)) * 100.0;

                attendance            = new ATTENDANCE();
                attendance.Percentage = eligibilityPercentage;

                //result.ApproximateNumberOfLectures = numberOfLecturesHeld;
                //result.EligibilityPercentage = eligibilityPercentage;
                //result.NumberOfAbsent = numberOfAbsence;
                //result.NumberOfPresent = numberOfTimesPresent;
                //result.TotalNumberOfLectures = numberOfLectures;

                if (eligibilityPercentage > 75)
                {
                    attendance.IsEligible = true;
                }
                else
                {
                    attendance.IsEligible = false;
                }
            }
            catch (Exception)
            {
                throw;
            }

            return(attendance);
        }
        public JsonResult DeleteEvent(long eventId)
        {
            JsonResponseModel result = new JsonResponseModel();

            try
            {
                if (eventId > 0)
                {
                    AbsentLogLogic  logLogic        = new AbsentLogLogic();
                    EventLogic      eventLogic      = new EventLogic();
                    AttendanceLogic attendanceLogic = new AttendanceLogic();

                    ABSENT_LOG eventLog        = logLogic.GetEntitiesBy(e => e.Event_Id == eventId).LastOrDefault();
                    ATTENDANCE eventAttendance = attendanceLogic.GetEntitiesBy(e => e.Event_Id == eventId).LastOrDefault();

                    if (eventLog == null && eventAttendance == null)
                    {
                        eventLogic.Delete(c => c.Id == eventId);

                        result.IsError = false;
                        result.Message = "Operation Successful!";
                    }
                    else
                    {
                        result.IsError = true;
                        result.Message = "Event is already attached to an attendance / absent log";
                    }
                }
                else
                {
                    result.IsError = true;
                    result.Message = "Invalid parameter";
                }
            }
            catch (Exception ex)
            {
                result.IsError = true;
                result.Message = ex.Message;
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        public ActionResult DownloadAttendance(string eventId)
        {
            _viewModel = new EventViewModel();
            try
            {
                if (!string.IsNullOrEmpty(eventId))
                {
                    long myEventId = Convert.ToInt64(Utility.Decrypt(eventId));

                    AttendanceLogic attendanceLogic = new AttendanceLogic();
                    AbsentLogLogic  absentLogLogic  = new AbsentLogLogic();

                    _viewModel.AttendanceList = attendanceLogic.GetEntitiesBy(s => s.Event_Id == myEventId);

                    _viewModel.AttendanceList.ForEach(e =>
                    {
                        if (e.Attendance_Status_Id == (int)AttendanceStatuses.Excused)
                        {
                            e.ATTENDANCE_STATUS.Name = absentLogLogic.GetAbsenceRequestStatus(e);
                        }
                    });

                    GridView  gv = new GridView();
                    DataTable ds = new DataTable();
                    if (_viewModel.AttendanceList.Count > 0)
                    {
                        List <ATTENDANCE>      list = _viewModel.AttendanceList.OrderBy(p => p.STUDENT.Matric_Number).ToList();
                        List <AttendanceModel> sort = new List <AttendanceModel>();
                        for (int i = 0; i < list.Count; i++)
                        {
                            AttendanceModel attendance = new AttendanceModel();
                            attendance.SN   = (i + 1);
                            attendance.Name = list[i].STUDENT.PERSON.Last_Name + " " + list[i].STUDENT.PERSON.First_Name + " " + list[i].STUDENT.PERSON.Other_Name;
                            attendance.Registration_Number = list[i].STUDENT.Matric_Number;
                            attendance.Event_Type          = list[i].EVENT.EVENT_TYPE.Name;
                            if (list[i].EVENT.COURSE != null)
                            {
                                attendance.Course_Hall = list[i].EVENT.COURSE.Name;
                            }
                            else if (list[i].EVENT.HALL != null)
                            {
                                attendance.Course_Hall = list[i].EVENT.HALL.Name;
                            }
                            else
                            {
                                attendance.Course_Hall = "";
                            }
                            attendance.Location   = list[i].EVENT.LOCATION.Name;
                            attendance.Date       = list[i].EVENT.Date.ToLongDateString();
                            attendance.Time_Taken = list[i].Time_Taken.ToLongTimeString();
                            attendance.Status     = list[i].ATTENDANCE_STATUS.Name;

                            sort.Add(attendance);
                        }

                        gv.DataSource = sort;
                        string caption = "Attendnace Report";
                        if (list != null && list.Count > 0)
                        {
                            caption = "Attendnace Report for " + list.FirstOrDefault().EVENT.DEPARTMENT.Name + ". " + list.FirstOrDefault().EVENT.LEVEL.Name + ". Session: " +
                                      list.FirstOrDefault().EVENT.SESSION.Name;
                        }

                        gv.Caption = caption.ToUpper();
                        gv.DataBind();

                        string filename = caption.Replace("\\", "") + ".xls";
                        return(new DownloadFileActionResult(gv, filename));
                    }
                    else
                    {
                        Response.Write("No data available for download");
                        Response.End();
                        return(new JavaScriptResult());
                    }
                }
            }
            catch (Exception ex)
            {
                SetMessage("Error! " + ex.Message, Message.Category.Error);
            }

            return(RedirectToAction("ViewAttendance", "Event", new { Area = "Admin", eventId = eventId }));
        }