/// <summary>
        ///  Add a new event with his creator
        /// </summary>
        /// <param name="information"></param>
        /// <param name="netname"></param>
        public async void InsertEvent(NewEvent information, string netname)
        {
            var newEvent = new EVENT
            {
                NAME        = information.Name,
                DESCRIPTION = information.Description,
                TIME_BEGIN  = information.TimeBegin,
                TIME_END    = information.TimeEnd,
                LOCATION    = information.Location,
                ROOM        = information.Room,
                TYPE        = information.Type.ToString(),
                STATUS      = EventStatusType.Scheduled.ToString()
            };

            _database.EVENTS.Add(newEvent);
            await _database.SaveChangesAsync();


            var newOwner = new EVENT_USERS
            {
                STUDENT_NETNAME_FK = netname,
                ROLE     = Role.Creator.ToString(),
                STATUS   = UserStatus.EventOrganizer.ToString(),
                EVENT_ID = newEvent.ID_PK
            };

            _database.EVENT_USERS.Add(newOwner);
            await _database.SaveChangesAsync();
        }
        /// <summary>
        ///  Register user to a event
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public ScannerResult RegisterScannedUser(ScannerUser user)
        {
            var processResult = new ScannerResult
            {
                Status = ScannerStatus.IdNotFound.ToString()
            };

            var currentUser = _database.STUDENTS
                              .Where(e => e.ID == user.StudentId)
                              .FirstOrDefault();

            if (currentUser != null)
            {
                //tracking user
                if (user.Type == EventType.Open)
                {
                    var newUser = new EVENT_USERS
                    {
                        STUDENT_NETNAME_FK = currentUser.NETNAME,
                        ROLE     = Role.Attendee.ToString(),
                        STATUS   = UserStatus.Tracking.ToString(),
                        EVENT_ID = user.EventID,
                    };

                    _database.EVENT_USERS.Add(newUser);
                    processResult.Status = ScannerStatus.Success.ToString();
                }
                else
                {
                    //validating his registation
                    var registeredUser = _database.EVENT_USERS
                                         .Where(r => r.EVENT_ID == user.EventID && r.STUDENT_NETNAME_FK == currentUser.NETNAME)
                                         .FirstOrDefault();

                    if (registeredUser != null)
                    {
                        registeredUser.STATUS = UserStatus.Attending.ToString();
                        _database.SaveChanges();
                        processResult.Status = ScannerStatus.Success.ToString();
                    }
                    else
                    {
                        processResult.Status = ScannerStatus.UserWasNotRegistered.ToString();
                    }
                }
            }

            return(processResult);
        }
        /// <summary>
        ///  Add a user to an event if he exist in the system
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public async Task <EventActionResult> InsertUserAsync(NewEventUser user)
        {
            var selectedEvent = await _database.EVENTS
                                .Where(e => e.ID_PK == user.EventID)
                                .FirstOrDefaultAsync();

            if (selectedEvent != null)
            {
                var netName = "";
                if (!string.IsNullOrEmpty(user.UserNetname))
                {
                    var student = await _database.STUDENTS
                                  .Where(s => s.NETNAME == user.UserNetname)
                                  .FirstOrDefaultAsync();

                    if (student != null)
                    {
                        netName = student.NETNAME;
                    }
                }
                else if (user.UserId != null)
                {
                    var student = await _database.STUDENTS
                                  .Where(s => s.ID == user.UserId)
                                  .FirstOrDefaultAsync();

                    if (student != null)
                    {
                        netName = student.NETNAME;
                    }
                }

                if (!string.IsNullOrEmpty(netName))
                {
                    //student does exist


                    var userExist = await _database.EVENT_USERS
                                    .Where(u => u.EVENT_ID == user.EventID && u.STUDENT_NETNAME_FK == netName)
                                    .FirstOrDefaultAsync();

                    if (userExist != null)
                    {
                        //user exist thus duplicate action
                        return(EventActionResult.DuplicateUser);
                    }

                    var status = UserStatus.Tracking.ToString();;
                    if (string.Equals(selectedEvent.TYPE, EventType.Closed.ToString(), StringComparison.OrdinalIgnoreCase))
                    {
                        status = UserStatus.Registered.ToString();
                    }

                    if (user.Role != Role.Attendee)
                    {
                        status = UserStatus.EventOrganizer.ToString();
                    }


                    var newUser = new EVENT_USERS
                    {
                        STUDENT_NETNAME_FK = netName,
                        ROLE     = user.Role.ToString(),
                        STATUS   = status,
                        EVENT_ID = user.EventID,
                    };

                    _database.EVENT_USERS.Add(newUser);
                    await _database.SaveChangesAsync();

                    return(EventActionResult.Success);
                }
                else
                {
                    return(EventActionResult.UserNotFound);
                }
            }
            else
            {
                return(EventActionResult.EventNotFound);
            }
        }