Beispiel #1
0
    private static Attendee MapAttendee(
        Attendance attendance,
        Person person,
        AttendanceType attendanceType,
        Location location
        )
    {
        var checkState = MappingService.GetCheckState(attendance: attendance);

        return(new()
        {
            AttendanceId = attendance.Id,
            FamilyId = person.FamilyId,
            FirstName = person.FirstName,
            LastName = person.LastName,
            AttendanceTypeId = (Shared.AttendanceTypeId)attendanceType.Id,
            SecurityCode = attendance.SecurityCode,
            LocationGroupId = location.LocationGroupId,
            Location = location.Name,
            CheckState = checkState,
            InsertDate = attendance.InsertDate,
            CheckInDate = attendance.CheckInDate,
            CheckOutDate = attendance.CheckOutDate
        });
    }
Beispiel #2
0
        /// <summary>
        /// 员工考勤状态
        /// </summary>
        /// <param name="attenDt">考勤日期</param>
        /// <param name="attendanceType">考勤类型</param>
        /// <returns></returns>
        public string GetAttenDateStatu(DateTime attenDt, AttendanceType attendanceType)
        {
            string StrOnJob = IsOnTheJob(attenDt);

            if (StrOnJob == "已离职" || StrOnJob == "未入职")
            {
                return(string.Empty);
            }
            if (!string.IsNullOrEmpty(StrOnJob))
            {
                return(StrOnJob);
            }
            Attendance EmployeAtten = new Attendance(this, attenDt, m_DbOperator);

            switch (attendanceType)
            {
            case AttendanceType.NoAmAtten:
                return(GetNoAmAttenString(EmployeAtten, attenDt));

            case AttendanceType.NoAtten:
                return(GetOverTime(EmployeAtten, attenDt));

            case AttendanceType.NoPmAtten:
                return(GetNoPmAttenString(EmployeAtten, attenDt));

            case AttendanceType.NormalAtten:
                return(GetNormalAttrn(EmployeAtten, attenDt));
            }
            return(string.Empty);
        }
Beispiel #3
0
        public int CreateWorkSchedule(int employeeId, AttendanceType attCode, DateTime datetime)
        {
            try
            {
                if (attCode == AttendanceType.ClockIn)
                {
                    var attendace = new Attendance()
                    {
                        ClockIn    = datetime,
                        ClockOut   = null,
                        EmployeeId = employeeId
                    };

                    _attendanceRepository.Add(attendace);
                }
                else if (attCode == AttendanceType.ClockOut)
                {
                    var attendance = _attendanceRepository.GetLastAttendance(employeeId);
                    attendance.ClockOut = datetime;

                    _attendanceRepository.Update(attendance);
                }

                _unitOfWork.Commit();
                return(0);
            }
            catch (Exception ex)
            {
                return(-1);
            }
        }
Beispiel #4
0
        public ObjectId AttendUserToEvent(ObjectId userId, ObjectId eventId, AttendanceType attendanceType)
        {
            Require.NotNull(userId, nameof(userId));
            Require.NotNull(eventId, nameof(eventId));

            var sameAttendances = _attendanceRepository.GetByPredicate(attendance =>
                                                                       attendance.UserId == userId &&
                                                                       attendance.EventId == eventId);

            if (sameAttendances.Count() > 1)
            {
                throw new PolicyException("More than one attendance of same user to same event");
            }

            if (sameAttendances.Count() == 1)
            {
                ChangeAttendanceType(userId, eventId, attendanceType);
            }

            return(_attendanceRepository.Create(new Attendance
            {
                UserId = userId,
                EventId = eventId,
                AttendanceType = attendanceType
            }));
        }
        public JsonResult InsertAttendanceType(AttendanceType type)
        {
            try
            {
                db.AttendanceTypes.Add(type);
                type.CreateBy   = AppUtils.GetLoginUserID();
                type.CreateDate = AppUtils.GetDateTimeNow();
                type.Status     = AppUtils.TableStatusIsActive;
                db.AttendanceTypes.Add(type);
                db.SaveChanges();
                AttendanceTypeViewModel AttendanceTypeInfo = new AttendanceTypeViewModel
                {
                    AttendanceTypeID     = type.AttendanceTypeID,
                    AttendanceName       = type.AttendanceName,
                    UpdateAttendanceType = ISP_ManagementSystemModel.AppUtils.HasAccessInTheList(ISP_ManagementSystemModel.AppUtils.Update_Attendance_Type) ? true : false,
                };


                return(Json(new { SuccessInsert = true, AttendanceTypeInfo = AttendanceTypeInfo }, JsonRequestBehavior.AllowGet));
            }
            catch
            {
                return(Json(new { SuccessInsert = false }, JsonRequestBehavior.AllowGet));
            }
        }
Beispiel #6
0
        public ActionResult _CreateFor([Bind(Include = "AttendanceTypeID,Name")] AttendanceType attendanceType, string frompage)
        {
            errordata data = new errordata();

            data.type      = "error";
            Session["err"] = "Error, Please Check Input Fields";
            Session["msg"] = "";

            if (ModelState.IsValid)
            {
                AttendanceType attendanceTypeexist = db.AttendanceTypes.Where(c => c.Name == attendanceType.Name).FirstOrDefault();
                if (attendanceTypeexist != null)
                {
                    Session["err"] = "AttendanceType name already exists";
                    data.message   = Session["err"].ToString();
                    return(Json(data, JsonRequestBehavior.AllowGet));
                }

                db.AttendanceTypes.Add(attendanceType);
                db.SaveChanges();

                ModelState.Clear();

                Session["err"] = "";
                Session["msg"] = "Created Successfully";
                return(RedirectToAction("_AttendanceTypePartial", frompage, new { id = attendanceType.AttendanceTypeID }));
            }
            data.message = Session["err"].ToString();
            return(Json(data, JsonRequestBehavior.AllowGet));
        }
        public ActionResult UpdateAttendanceType(AttendanceType type)
        {
            try
            {
                AttendanceType dbAttendanceType = new AttendanceType();
                dbAttendanceType = db.AttendanceTypes.Find(type.AttendanceTypeID);
                dbAttendanceType.AttendanceName  = type.AttendanceName;
                dbAttendanceType.UpdateBy        = AppUtils.GetLoginUserID();
                dbAttendanceType.UpdateDate      = AppUtils.GetDateTimeNow();
                db.Entry(dbAttendanceType).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();

                var AttendacnceType =
                    new AttendanceTypeViewModel()
                {
                    AttendanceTypeID     = type.AttendanceTypeID,
                    AttendanceName       = type.AttendanceName,
                    UpdateAttendanceType = ISP_ManagementSystemModel.AppUtils.HasAccessInTheList(ISP_ManagementSystemModel.AppUtils.Update_Attendance_Type) ? true : false,
                };
                var JSON = Json(new { UpdateSuccess = true, AttenDanceTypeInformation = AttendacnceType }, JsonRequestBehavior.AllowGet);
                JSON.MaxJsonLength = int.MaxValue;
                return(JSON);
            }
            catch
            {
                return(Json(new { UpdateSuccess = false, EMPLH = "" }, JsonRequestBehavior.AllowGet));
            }
        }
Beispiel #8
0
 public EventAttendance GetEntity()
 {
     return(new EventAttendance {
         Id = Id,
         EventRef = Event.GetEntity(),
         AttendanceTypeRef = AttendanceType.GetEntity(),
         Price = Price
     });
 }
 /// <summary>
 /// 添加考勤规则
 /// </summary>
 /// <param name="attendanceType"></param>
 /// <returns></returns>
 public static int Add(AttendanceType attendanceType)
 {
     using (EFContext Context = new EFContext())
     {
         DbEntityEntry <AttendanceType> person = Context.Entry <AttendanceType>(attendanceType);
         person.State = System.Data.Entity.EntityState.Added;
         return(Context.SaveChanges());
     }
 }
        public PartialViewResult DisplayTimeInOut(int id, AttendanceType attCode, string timeInOut)
        {
            var viewModel = new LogInViewModel
            {
                Datetime       = timeInOut.DeserializeDate(),
                AttendanceCode = attCode,
                EmployeeId     = id
            };

            return(PartialView(viewModel));
        }
Beispiel #11
0
        public void Get(int id, string ipAddress, AttendanceType attCode, string timeInOut)
        {
            var connection = _loginDisplayClientRepository.Find(x => x.IpAddress == ipAddress).FirstOrDefault();

            if (connection != null)
            {
                var context = GlobalHost.ConnectionManager.GetHubContext <PayrollHub>();
                context.Clients.Client(connection.ClientId).broadcastMessage(id, attCode, timeInOut);
            }
            else
            {
            }
        }
Beispiel #12
0
        public static void AddAttendance(int uid, DateTime actionTime, AttendanceType actionType)
        {
            Attendance ate = new Attendance();

            ate.Valid      = true;
            ate.UzerId     = uid;
            ate.ActionTime = actionTime;
            ate.ActionType = (int)actionType;

            SmallSimpleOAContext ctx = new SmallSimpleOAContext();

            ctx.Add(ate);
            ctx.SaveChanges();
        }
Beispiel #13
0
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            AttendanceType attendanceType = db.AttendanceTypes.Find(id);

            if (attendanceType == null)
            {
                return(HttpNotFound());
            }
            ViewBag.Existing = attendanceType.Name;
            return(View(attendanceType));
        }
Beispiel #14
0
        public ActionResult DeleteConfirm(int id)
        {
            Session["err"] = "Error, Can't Delete, Please check Dependency Data";
            Session["msg"] = "";
            try
            {
                AttendanceType attendanceType = db.AttendanceTypes.Find(id);
                db.AttendanceTypes.Remove(attendanceType);
                db.SaveChanges();

                Session["err"] = "";
                Session["msg"] = "Deleted Successfully";
            }
            catch { }
            return(RedirectToAction("Index"));
        }
 /// <summary>
 /// 修改考勤规则
 /// </summary>
 /// <param name="attendanceType"></param>
 /// <returns></returns>
 public static int Update(AttendanceType attendanceType)
 {
     using (EFContext Context = new EFContext())
     {
         AttendanceType type = new AttendanceType()
         {
             ATID = attendanceType.ATID
         };
         AttendanceType a = Context.AttendanceType.Attach(type);
         a.MBeginTime = attendanceType.MBeginTime;
         a.MEndTime   = attendanceType.MEndTime;
         a.ABeginTime = attendanceType.ABeginTime;
         a.AEndTime   = attendanceType.AEndTime;
         a.Remark     = attendanceType.Remark;
         return(Context.SaveChanges());
     }
 }
        public ActionResult DeleteAttendanceType(int AttendanceTypeID)
        {
            AttendanceType attendanceType = new AttendanceType();

            attendanceType            = db.AttendanceTypes.Find(AttendanceTypeID);
            attendanceType.DeleteBy   = AppUtils.GetLoginUserID();
            attendanceType.DeleteDate = AppUtils.GetDateTimeNow();
            attendanceType.Status     = AppUtils.TableStatusIsDelete;


            db.Entry(attendanceType).State = System.Data.Entity.EntityState.Modified;
            db.SaveChanges();

            var JSON = Json(new { DeleteSuccess = true, AttendanceTypeID = attendanceType.AttendanceTypeID }, JsonRequestBehavior.AllowGet);

            JSON.MaxJsonLength = int.MaxValue;
            return(JSON);
        }
Beispiel #17
0
        public void ChangeAttendanceType(ObjectId userId, ObjectId eventId, AttendanceType newAttendanceType)
        {
            Require.NotNull(userId, nameof(userId));
            Require.NotNull(eventId, nameof(eventId));

            var sameAttendances = _attendanceRepository.GetByPredicate(attendance =>
                                                                       attendance.UserId == userId &&
                                                                       attendance.EventId == eventId);

            if (sameAttendances.Count() != 1)
            {
                throw new PolicyException("There are no one attendance on this event for this user");
            }

            var attendanceToUpdate = sameAttendances.Single();

            attendanceToUpdate.AttendanceType = newAttendanceType;

            _attendanceRepository.Update(attendanceToUpdate);
        }
Beispiel #18
0
        private string GetAttenTypeStr(object typeValue)
        {
            if (typeValue == DBNull.Value)
            {
                return(string.Empty);
            }
            int AttenType = 0;

            if (!int.TryParse(typeValue.ToString(), out AttenType))
            {
                return(string.Empty);
            }
            AttendanceType attendanceType = (AttendanceType)AttenType;

            foreach (string key in m_dicAttenType.Keys)
            {
                if (m_dicAttenType[key] == attendanceType)
                {
                    return(key);
                }
            }
            return(string.Empty);
        }
Beispiel #19
0
        public ActionResult Edit([Bind(Include = "AttendanceTypeID,Name")] AttendanceType attendanceType, string existing)
        {
            Session["err"] = "Error, Please Check Input Fields";
            Session["msg"] = "";
            if (ModelState.IsValid)
            {
                if (attendanceType.Name != existing)
                {
                    AttendanceType attendanceTypeexisting = db.AttendanceTypes.Where(s => s.Name == attendanceType.Name).FirstOrDefault();
                    if (attendanceTypeexisting != null)
                    {
                        Session["err"] = "AttendanceType name already exists";

                        ViewBag.Existing = existing;
                        ViewBag.Message  = Session["msg"];
                        ViewBag.Error    = Session["err"];
                        Session["err"]   = "";
                        Session["msg"]   = "";
                        return(View(attendanceType));
                    }
                }

                db.Entry(attendanceType).State = EntityState.Modified;
                db.SaveChanges();

                Session["err"] = "";
                Session["msg"] = "Modified Successfully";

                return(RedirectToAction("Index"));
            }
            ViewBag.Existing = existing;
            ViewBag.Message  = Session["msg"];
            ViewBag.Error    = Session["err"];
            Session["err"]   = "";
            Session["msg"]   = "";
            return(View(attendanceType));
        }
        async Task ParseEventData_2(ILogEnd log, MyDbContext data, Event evt, string htmlText, long eventTawId)
        {
            // this page is so badly coded the HTML is invalid, chrome shows it correctly though, kudos to it
            // but HtmlAgilityPack just fails on it

            var eventInfoText = htmlText.TakeStringBetween("<table cellpadding=\"20\" cellspacing=\"5\">", "</table>");

            var eventInfoDoc = new HtmlDocument();

            eventInfoDoc.LoadHtml(eventInfoText);
            var eventInfo = new HtmlTwoColsStringTable(eventInfoDoc.DocumentNode);

            /*
             * Name	GRAW Practice -- Saber Squad Thursday Night (NA-SA)
             * Description	GRAW Practice -- Saber Squad Thursday Night (NA-SA)
             * Type	Practice
             * Unit	Ghost Recon
             * When	From: 6/3/2016 04:00:00 +02:00 to: 6/3/2016 05:00:00 +02:00
             * Mandatory	Yes
             * Cancelled	No
             */
            evt.Name        = eventInfo["Name"];
            evt.Description = eventInfo["Description"];
            evt.Type        = eventInfo["Type"];
            evt.Mandatory   = eventInfo["Mandatory"] == "Yes";
            evt.Cancelled   = eventInfo["Cancelled"] == "Yes";

            var when = eventInfo["When"];

            var strFrom = when.TakeStringBetween("from:", "to:", StringComparison.InvariantCultureIgnoreCase).Trim();

            if (strFrom != null)
            {
                evt.From = ParseUSDateTime(strFrom);
            }

            var strTo = when.TakeStringAfter("to:", StringComparison.InvariantCultureIgnoreCase).Trim();

            if (strTo != null)
            {
                evt.To = ParseUSDateTime(strTo);
            }

            var attendeesText = htmlText.TakeStringBetween("<table width=100%>", "</table>");
            var attendessDoc  = new HtmlDocument();

            attendessDoc.LoadHtml(attendeesText);
            var attendeesTable = new HtmlTable(attendessDoc.DocumentNode);

            var newPersonEvents = new List <PersonEvent>();
            var personEvents    = evt.Attended.ToList();

            foreach (var row in attendeesTable)
            {
                var name     = row[0]?.InnerText?.Trim();
                var nameHref = row[0]?.SelectSingleNode("a")?.GetAttributeValue("href", "");                 // http://taw.net/event/66327.aspx last row, unit name has no link
                if (nameHref != null && nameHref.StartsWith("/member"))
                {
                    if (name.IsNullOrWhiteSpace())
                    {
                        // a deleted member attended event, so there is a row of event attendee with empty name
                    }
                    else
                    {
                        var person = await GetPersonFromName(data, name);

                        var personToEvent = personEvents.FirstOrDefault(p => p.EventId == evt.EventId && p.PersonId == person.PersonId);

                        if (personToEvent == null)
                        {
                            personToEvent          = new PersonEvent();
                            personToEvent.EventId  = evt.EventId;
                            personToEvent.PersonId = person.PersonId;

                            personEvents.Add(personToEvent);
                            newPersonEvents.Add(personToEvent);
                        }

                        var            attendanceStr  = row[1]?.InnerText?.Trim();
                        AttendanceType attendanceType = AttendanceType.Unknown;
                        if (attendanceStr != null && Enum.TryParse(attendanceStr.ToLowerInvariant(), true, out attendanceType))
                        {
                            personToEvent.AttendanceType = attendanceType;
                        }

                        var timestampStr = row[2]?.InnerText?.Trim();
                        if (!timestampStr.Contains("--"))
                        {
                            personToEvent.TimeStamp = ParseUSDateTime(timestampStr);
                        }
                    }
                }
                else if (nameHref != null && nameHref.StartsWith("/unit"))
                {
                    var unitTawIdStr = nameHref.Split('/', '\\').Last().RemoveFromEnd(".aspx".Length);
                    var unitTawId    = int.Parse(unitTawIdStr);
                    var unit         = await GetUnit(data, unitTawId, name);

                    evt.Units.Add(unit);
                }
                else if (nameHref == null)
                {
                    // event with no unit
                }
                else
                {
                    throw new Exception("something is wrong, found unexpected data, taw event id:" + eventTawId);
                }
            }
            newPersonEvents.ForEach(pe => data.PersonEvents.Add(pe));
        }
 public static string GetName(AttendanceType ID)
 {
     return(items[ID].ToString());
 }
Beispiel #22
0
 /// <summary>
 /// 添加考勤规则
 /// </summary>
 /// <param name="attendanceType"></param>
 /// <returns></returns>
 public static int Add(AttendanceType attendanceType)
 {
     return(AttendanceTypeDal.Add(attendanceType));
 }
Beispiel #23
0
        public static List <Attendance> FindAttendanceByUserAndDateAndType(int uid, DateTime dateTime, AttendanceType type)
        {
            int      year      = dateTime.Year;
            int      month     = dateTime.Month;
            int      day       = dateTime.Day;
            DateTime timeStart = new DateTime(year, month, day, 0, 0, 0);

            DateTime             timeEnd = timeStart.AddDays(1);
            SmallSimpleOAContext ctx     = new SmallSimpleOAContext();

            return(ctx.Attendance.Where(a => a.UzerId.Equals(uid) && a.ActionTime >= timeStart && a.ActionTime < timeEnd && a.ActionType == (int)type && a.Valid == true).ToList());
        }
Beispiel #24
0
 /// <summary>
 /// 修改考勤规则
 /// </summary>
 /// <param name="attendanceType"></param>
 /// <returns></returns>
 public static int Update(AttendanceType attendanceType)
 {
     return(AttendanceTypeDal.Update(attendanceType));
 }
Beispiel #25
0
        public ActionResult Save(long studentid, DateTime?date, DateTime?dateTo, DateTime?dateFrom, AttendanceDateType datetype,
                                 AttendanceStatus status, AttendanceType type_group, int?eca, string reason)
        {
            // strip hours, minutes and seconds
            if (date.HasValue)
            {
                date = new DateTime(date.Value.Year, date.Value.Month, date.Value.Day);
            }
            if (dateTo.HasValue)
            {
                dateTo = new DateTime(dateTo.Value.Year, dateTo.Value.Month, dateTo.Value.Day);
            }
            if (dateFrom.HasValue)
            {
                dateFrom = new DateTime(dateFrom.Value.Year, dateFrom.Value.Month, dateFrom.Value.Day);
            }

            var usr = repository.GetUser(studentid);

            if (usr == null)
            {
                return(SendJsonErrorResponse("Unable to find student"));
            }

            if (!dateFrom.HasValue && !date.HasValue)
            {
                return(Json("Date not specified".ToJsonFail()));
            }

            var currentDate = date.HasValue ? date.Value : dateFrom.Value;

            int?classid = null;

            switch (type_group)
            {
            case AttendanceType.ECA:
                if (!eca.HasValue)
                {
                    return(Json("ECA not selected".ToJsonFail()));
                }

                // TODO: check that this is ECA teacher
                // handle ranges later
                if (datetype == AttendanceDateType.SINGLEDAY)
                {
                    if (!date.HasValue)
                    {
                        return(Json("Date not specified".ToJsonFail()));
                    }
                    var at = repository.GetEcaAttendance(studentid, eca.Value, date.Value);
                    if (at == null)
                    {
                        at = new ioschools.DB.attendance()
                        {
                            date    = date.Value,
                            ecaid   = eca,
                            reason  = reason,
                            status  = status.ToString(),
                            creator = sessionid.Value
                        };
                        usr.attendances.Add(at);
                    }
                    else
                    {
                        return(Json("Attendance already taken".ToJsonFail()));
                    }
                }
                break;

            case AttendanceType.SCHOOLCLASS:
                var year     = date.HasValue ? date.Value.Year : dateFrom.Value.Year;
                var usrclass = usr.classes_students_allocateds.SingleOrDefault(x => x.year == year);
                if (usrclass == null)
                {
                    return(Json("Student does not have a class assigned".ToJsonFail()));
                }

                // if teacher, make sure student is in their class
                if (auth.group == UserGroup.TEACHER)
                {
                    if (!repository.IsStudentInMyClass(sessionid.Value, studentid, year))
                    {
                        return(Json("Student is not in your class".ToJsonFail()));
                    }
                }

                classid = usrclass.classid;

                // handle ranges later
                if (datetype == AttendanceDateType.SINGLEDAY)
                {
                    if (!date.HasValue)
                    {
                        return(Json("Date not specified".ToJsonFail()));
                    }
                    var att = repository.GetClassAttendance(studentid, classid.Value, date.Value);
                    if (att == null)
                    {
                        att = new ioschools.DB.attendance()
                        {
                            date    = date.Value,
                            classid = classid,
                            reason  = reason,
                            status  = status.ToString(),
                            creator = sessionid.Value
                        };
                        usr.attendances.Add(att);
                    }
                    else
                    {
                        return(Json("Attendance already taken".ToJsonFail()));
                    }
                }
                break;
            }

            // handle date ranges
            if (datetype == AttendanceDateType.RANGE)
            {
                if (!dateFrom.HasValue || !dateTo.HasValue)
                {
                    return(Json("Date not specified".ToJsonFail()));
                }
                // validate dates
                if (dateTo < dateFrom)
                {
                    return(Json("Invalid date range specified".ToJsonFail()));
                }
                switch (type_group)
                {
                case AttendanceType.SCHOOLCLASS:
                    if (!classid.HasValue)
                    {
                        return(SendJsonErrorResponse("Unable to add attendance for the specified range"));
                    }
                    while (dateFrom <= dateTo)
                    {
                        var att = repository.GetClassAttendance(studentid, classid.Value, dateFrom.Value);
                        if (att == null)
                        {
                            att = new ioschools.DB.attendance()
                            {
                                date    = dateFrom.Value,
                                classid = classid,
                                reason  = reason,
                                status  = status.ToString(),
                                creator = sessionid.Value
                            };
                            usr.attendances.Add(att);
                        }
                        dateFrom = dateFrom.Value.AddDays(1);
                    }
                    break;

                case AttendanceType.ECA:
                    while (dateFrom <= dateTo)
                    {
                        var at = repository.GetEcaAttendance(studentid, eca.Value, dateFrom.Value);
                        if (at == null)
                        {
                            at = new ioschools.DB.attendance()
                            {
                                date    = dateFrom.Value,
                                ecaid   = eca,
                                reason  = reason,
                                status  = status.ToString(),
                                creator = sessionid.Value
                            };
                            usr.attendances.Add(at);
                        }
                        dateFrom = dateFrom.Value.AddDays(1);
                    }
                    break;
                }
            }

            // invalidate user cache
            usr.updated = DateTime.Now;

            try
            {
                repository.Save();
            }
            catch (Exception ex)
            {
                return(SendJsonErrorResponse(ex));
            }

            // check if there is more than 3 entries this week
            // only include late/absent entries
            var incidents = usr.attendances
                            .Where(x => x.status != AttendanceStatus.EXCUSED.ToString())
                            .ToTotalThisWeek(currentDate);

            if (incidents >= Constants.ATTENDANCE_TRIGGER_LEVEL)
            {
                // create viewmodel
                var viewmodel = new EmailAttendanceViewModel
                {
                    days     = incidents,
                    offender = usr.ToName(),
                    link     = string.Concat(Constants.HTTP_HOST, "/users/", studentid)
                };

                // send email to head of school
                var schoolid =
                    usr.classes_students_allocateds.Single(x => x.year == currentDate.Year).school_class.schoolid;

                var admins = repository.GetUsers(null, null, schoolid, null, UserGroup.HEAD, null, null, null, currentDate.Year, null);
                foreach (var admin in admins)
                {
                    var receiverEmail = admin.email;
                    if (!string.IsNullOrEmpty(receiverEmail))
                    {
                        viewmodel.receiver = admin.ToName();
                        this.SendEmail(
                            EmailViewType.ADMIN_ATTENDANCE,
                            viewmodel,
                            " School Attendance Info",
                            receiverEmail,
                            viewmodel.receiver);
                    }
                }
            }

            return(Json("Attendance updated successfully".ToJsonOKMessage()));
        }
 public AttendanceTypeViewModel(AttendanceType attendanceType)
 {
     Id   = attendanceType.Id;
     Name = attendanceType.Name;
 }
        public static SearchPhrase ToEntity(this AddEditSearchPhraseModel model, ProviderPortalEntities db)
        {
            SearchPhrase searchPhrase = new SearchPhrase();

            if (model.SearchPhraseId.HasValue)
            {
                searchPhrase = db.SearchPhrases.Find(model.SearchPhraseId);
                if (searchPhrase == null)
                {
                    return(null);
                }
            }

            searchPhrase.Phrase = model.SearchPhrase;
            searchPhrase.RemovePhraseFromSearch = model.RemovePhraseFromSearch;

            if (model.SearchPhraseId.HasValue)
            {
                searchPhrase.ModifiedByUserId    = Permission.GetCurrentUserId();
                searchPhrase.ModifiedDateTimeUtc = DateTime.UtcNow;
            }
            else
            {
                searchPhrase.CreatedByUserId    = Permission.GetCurrentUserId();
                searchPhrase.CreatedDateTimeUtc = DateTime.UtcNow;
                Int32        nextOrdinal = 1;
                SearchPhrase maxOrdinal  = db.SearchPhrases.OrderByDescending(x => x.Ordinal).FirstOrDefault();
                if (maxOrdinal != null)
                {
                    nextOrdinal = maxOrdinal.Ordinal + 1;
                }
                searchPhrase.Ordinal        = nextOrdinal;
                searchPhrase.RecordStatusId = (Int32)Constants.RecordStatus.Live;
            }

            // Remove any existing and not selected Qualification Levels
            List <QualificationLevel> existingQualificationLevels = searchPhrase.QualificationLevels.ToList();

            foreach (QualificationLevel qualificationLevel in existingQualificationLevels.Where(x => !model.SelectedQualificationLevels.Contains(x.QualificationLevelId)))
            {
                searchPhrase.QualificationLevels.Remove(qualificationLevel);
            }

            // Add any new Qualification Levels
            foreach (Int32 qlId in model.SelectedQualificationLevels)
            {
                QualificationLevel ql = searchPhrase.QualificationLevels.FirstOrDefault(x => x.QualificationLevelId == qlId);
                if (ql == null)
                {
                    ql = db.QualificationLevels.Find(qlId);
                    if (ql != null)
                    {
                        searchPhrase.QualificationLevels.Add(ql);
                    }
                }
            }

            // Remove any existing and not selected Study Modes
            List <StudyMode> existingStudyModes = searchPhrase.StudyModes.ToList();

            foreach (StudyMode studyMode in existingStudyModes.Where(x => !model.SelectedStudyModes.Contains(x.StudyModeId)))
            {
                searchPhrase.StudyModes.Remove(studyMode);
            }

            // Add any new Study Modes
            foreach (Int32 smId in model.SelectedStudyModes)
            {
                StudyMode sm = searchPhrase.StudyModes.FirstOrDefault(x => x.StudyModeId == smId);
                if (sm == null)
                {
                    sm = db.StudyModes.Find(smId);
                    if (sm != null)
                    {
                        searchPhrase.StudyModes.Add(sm);
                    }
                }
            }

            // Remove any existing and not selected Attendance Types
            List <AttendanceType> existingAttendanceTypes = searchPhrase.AttendanceTypes.ToList();

            foreach (AttendanceType attendanceType in existingAttendanceTypes.Where(x => !model.SelectedAttendanceTypes.Contains(x.AttendanceTypeId)))
            {
                searchPhrase.AttendanceTypes.Remove(attendanceType);
            }

            // Add any new Attendance Types
            foreach (Int32 atId in model.SelectedAttendanceTypes)
            {
                AttendanceType at = searchPhrase.AttendanceTypes.FirstOrDefault(x => x.AttendanceTypeId == atId);
                if (at == null)
                {
                    at = db.AttendanceTypes.Find(atId);
                    if (at != null)
                    {
                        searchPhrase.AttendanceTypes.Add(at);
                    }
                }
            }

            // Remove any existing and not selected Attendance Patterns
            List <AttendancePattern> existingAttendancePatterns = searchPhrase.AttendancePatterns.ToList();

            foreach (AttendancePattern attendancePattern in existingAttendancePatterns.Where(x => !model.SelectedAttendancePatterns.Contains(x.AttendancePatternId)))
            {
                searchPhrase.AttendancePatterns.Remove(attendancePattern);
            }

            // Add any new Attendance Patterns
            foreach (Int32 apId in model.SelectedAttendancePatterns)
            {
                AttendancePattern ap = searchPhrase.AttendancePatterns.FirstOrDefault(x => x.AttendancePatternId == apId);
                if (ap == null)
                {
                    ap = db.AttendancePatterns.Find(apId);
                    if (ap != null)
                    {
                        searchPhrase.AttendancePatterns.Add(ap);
                    }
                }
            }

            return(searchPhrase);
        }