private void Fixupemployee(employee previousValue)
        {
            if (IsDeserializing)
            {
                return;
            }

            if (previousValue != null && previousValue.appointments.Contains(this))
            {
                previousValue.appointments.Remove(this);
            }

            if (employee != null)
            {
                if (!employee.appointments.Contains(this))
                {
                    employee.appointments.Add(this);
                }

                employeeid = employee.employeeid;
            }
            if (ChangeTracker.ChangeTrackingEnabled)
            {
                if (ChangeTracker.OriginalValues.ContainsKey("employee")
                    && (ChangeTracker.OriginalValues["employee"] == employee))
                {
                    ChangeTracker.OriginalValues.Remove("employee");
                }
                else
                {
                    ChangeTracker.RecordOriginalValue("employee", previousValue);
                }
                if (employee != null && !employee.ChangeTracker.ChangeTrackingEnabled)
                {
                    employee.StartTracking();
                }
            }
        }
        public ActionResult Register(RegisterModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    Entities db = new Entities();
                    IEnumerable<faculty> faculty = db.faculties;
                    List<String> data = new List<string>();
                    foreach (faculty fac in faculty)
                    {
                        data.Add(fac.fname);
                    }
                    model.facultyList = data;

                    // Attempt to register the user
                    MembershipCreateStatus createStatus;
                    Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
                    employee employee_model = new employee() { employeeid = model.UserName, fname = model.fname, lname = model.lname, phonenum = model.phonenum, email = model.Email, faculty = model.faculty, role = model.position };
                    student student = db.students.SingleOrDefault(stud => stud.studentid ==  employee_model.employeeid);

                    if (student == null)
                    {
                        db.employees.AddObject(employee_model);
                        db.SaveChanges();

                        if (createStatus == MembershipCreateStatus.Success)
                        {
                            //Roles.
                            Roles.AddUserToRole(model.UserName, model.position);
                            FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                            return RedirectToAction("Index", "Home");
                        }
                        else
                        {
                            ModelState.AddModelError("", ErrorCodeToString(createStatus));
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "Employee ID is already in ues.");
                    }
                }
            }
            catch (Exception ex)
            {
                return View(model);
            }
            // If we got this far, something failed, redisplay form
            return View(model);
        }
        /// <summary>
        /// sends an email to the creater of the appointment confirming that the the series appointments have been created. 
        /// </summary>
        /// <param name="employee"></param>
        /// <param name="appointment"></param>
        private void ConfirmationEmailSeries(employee employee, appointment appointment)
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient(MAIL_SMTP);

            IEnumerable<appointment> appointments = db.appointments.Where(a => a.repeating == appointment.repeating).OrderBy(a => a.starttime);

            DateTime start = appointments.First().starttime;
            DateTime end = appointments.OrderByDescending(a => a.starttime).First().starttime;

            mail.From = new MailAddress(MAIL_ADDRESS);
            mail.To.Add(employee.email);
            mail.Subject = "Appointment Confirmation for " + employee.fname + " " + employee.lname;
            mail.Body = "You have successfully created an series of " + appointment.appointmenttype.Trim() + " appointments starting on " + start + " to " + end
                + " and the appointment will take place at " + appointment.cname + ".";
            mail.Body += "\n\nThis is an automated message please to do not respond to this email.";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential(MAIL_ADDRESS, MAIL_PASS);
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);
        }
        /// <summary>
        /// sends an email to the attendees informing that they have been invited to an series of appointments 
        /// </summary>
        /// <param name="emp"></param>
        /// <param name="appointment"></param>
        private void EmailAttendeesSeries(employee emp, appointment appointment)
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient(MAIL_SMTP);

            IEnumerable<appointment> appointments = db.appointments.Where(a => a.repeating == appointment.repeating).OrderBy(a => a.starttime);

            DateTime start = appointments.First().starttime;
            DateTime end = appointments.OrderByDescending(a => a.starttime).First().starttime;

            employee chair = db.employees.Single(e => e.employeeid == appointment.employeeid);
            IEnumerable<Attendee> Attendees = db.Attendees.Where(attend => attend.appointmentid == appointment.appointmentid);
            String EmailTo = chair.email;

            foreach (Attendee Attendee in Attendees)
            {
                student student = db.students.SingleOrDefault(stud => stud.studentid == Attendee.attendee1);

                if (student != null)
                {
                    EmailTo += ", " + student.email;
                }
                else
                {
                    employee employee = db.employees.Single(e => e.employeeid == Attendee.attendee1);

                    EmailTo += ", " + employee.email;
                }
            }

            mail.From = new MailAddress(MAIL_ADDRESS);
            mail.To.Add(EmailTo);
            mail.Subject = "Appointment Invitation From " + emp.fname + " " + emp.lname;
            mail.Body = "You have been requested to attend an " + appointment.appointmenttype.Trim() + " appointment regarding " + appointment.subject + " starting on " + start + " to " + end
                + " and the appointments will take place at " + appointment.cname + ". The chair for the appointment will be " + chair.fname + " " + chair.lname + ", please contact him/her regarding any further details at "
                + chair.email + " or " + chair.phonenum + ".";
            if (appointment.description != null)
            {
                mail.Body += "\n\nDescription Included: \n" + appointment.description;
            }

            mail.Body += "\n\nThis is an automated message please to do not respond to this email.";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential(MAIL_ADDRESS, MAIL_PASS);
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);
        }
        /// <summary>
        /// Sends an email to the creator of the appointment confirming that the appointment has been created
        /// </summary>
        /// <param name="employee"></param>
        /// <param name="appointment"></param>
        private void ConfirmationEmail(employee employee, appointment appointment)
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient(MAIL_SMTP);

            mail.From = new MailAddress(MAIL_ADDRESS);
            mail.To.Add(employee.email);
            mail.Subject = "Appointment Confirmation for " + employee.fname + " " + employee.lname;
            mail.Body = "You have successfully created an " + appointment.appointmenttype.Trim() + " appointment at " + appointment.starttime.ToString() + " to " + appointment.endtime.ToString()
                + " and the appointment will take place at " + appointment.cname + ".";
            mail.Body += "\n\nThis is an automated message please to do not respond to this email.";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential(MAIL_ADDRESS, MAIL_PASS);
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);
        }