public ActionResult DeleteConfirmed(int id)
        {
            PermissionSlip permissionSlip = db.PermissionSlips.Find(id);

            db.PermissionSlips.Remove(permissionSlip);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
 public ActionResult Edit([Bind(Include = "ID,PermissionSlipCategoryID,PermissionSlipTemplateID,ClassRoomID,Name,Location,StartDateTime,EndDateTime,Cost,RequireChaperone,RequireChaperoneBackgroundCheck")] PermissionSlip permissionSlip)
 {
     if (ModelState.IsValid)
     {
         db.Entry(permissionSlip).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.PermissionSlipCategory   = new SelectList(db.Categories, "ID", "Name", permissionSlip.PermissionSlipCategoryID);
     ViewBag.ClassRoomID              = new SelectList(db.ClassRooms, "ID", "RoomNumber", permissionSlip.ClassRoomID);
     ViewBag.PermissionSlipTemplateID = new SelectList(db.Templates, "ID", "Name", permissionSlip.PermissionSlipTemplateID);
     return(View(permissionSlip));
 }
        public IActionResult FillPermissionSlip([Bind("Id,Date,Location,Classroom,StudentFirst,StudentLast,ApprovingParent")] PermissionSlip model)
        {
            var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var parent = _context.Parents.Where(c => c.IdentityUserId == userId).FirstOrDefault();



            model.ApprovingParent = parent.FirstName + " " + parent.LastName;
            _context.Update(model);
            _context.SaveChanges();

            return(RedirectToAction("ViewPermissionSlips"));
        }
        // GET: PermissionSlips/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PermissionSlip permissionSlip = db.PermissionSlips.Find(id);

            if (permissionSlip == null)
            {
                return(HttpNotFound());
            }
            return(View(permissionSlip));
        }
        // GET: PermissionSlips/Print/5
        public ActionResult Print(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            ////////////////////////////////////////////////////////////////////

            PermissionSlip      permissionSlip      = null;
            PermissionSlipPrint PermissionSlipPrint = null;

            try
            {
                if (User.IsInRole("Guardian"))
                {
                    throw new Exception("Unable to access print out for permission slip");
                }
                permissionSlip = db.PermissionSlips.Single(p => p.ID == id);                 //Throws exception if not found

                PermissionSlipPrint = new PermissionSlipPrint()
                {
                    Name             = permissionSlip.Name,
                    Location         = permissionSlip.Location,
                    StartDateTime    = permissionSlip.StartDateTime,
                    EndDateTime      = permissionSlip.EndDateTime,
                    Cost             = permissionSlip.Cost,
                    RequireChaperone = permissionSlip.RequireChaperone,
                    RequireChaperoneBackgroundCheck = permissionSlip.RequireChaperoneBackgroundCheck,

                    GuardianName   = "",
                    Approved       = false,
                    CanChaperone   = false,
                    DaytimePhone   = "",
                    EmergencyPhone = "",
                    SpecialHealthDietaryAccessConsiderations = ""
                };
            }
            catch (Exception ex)
            {
                //TODO : Do something with Exception Action
                ModelState.AddModelError("", "Exception occurred processing permission slip print request :: " + ex.ToString());
                return(RedirectToAction("Index", "PermissionSlips"));
            }

            return(View(PermissionSlipPrint));
            ///////////////////////////////////////////////////////////////////////
        }
        // GET: PermissionSlips/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PermissionSlip permissionSlip = db.PermissionSlips.Find(id);

            if (permissionSlip == null)
            {
                return(HttpNotFound());
            }
            ViewBag.PermissionSlipCategoryID = new SelectList(db.Categories, "ID", "Name", permissionSlip.PermissionSlipCategoryID);
            ViewBag.ClassRoomID = new SelectList(db.ClassRooms, "ID", "RoomNumber", permissionSlip.ClassRoomID);
            ViewBag.PermissionSlipTemplateID = new SelectList(db.Templates, "ID", "Name", permissionSlip.PermissionSlipTemplateID);
            return(View(permissionSlip));
        }
        public IActionResult CreatePermissionSlip(int id, [Bind("Id,Date,Location,Classroom,ApprovingParent,StudentFirst,StudentLast")] PermissionSlip slip)
        {
            if (ModelState.IsValid)
            {
                var classroom = _context.Classrooms.Find(id);
                var students  = _context.Students.Where(x => x.Classroom == classroom.ClassName);

                foreach (var student in students)
                {
                    slip.Id           = 0;
                    slip.StudentFirst = student.StudentFirstName;
                    slip.StudentLast  = student.StudentLastName;
                    slip.Classroom    = classroom.ClassName;
                    PermissionSlip permissionSlip = new PermissionSlip()
                    {
                        Id = slip.Id, Date = slip.Date, Location = slip.Location, Classroom = slip.Classroom, StudentFirst = slip.StudentFirst, StudentLast = slip.StudentLast, ApprovingParent = slip.ApprovingParent
                    };
                    _context.Add(permissionSlip);
                }
                _context.SaveChanges();
            }
            return(RedirectToAction("ViewForms"));
        }
        public ActionResult PermissionSlipStatus(int PermissionSlipID)
        {
            //TODO

            /*
             * Validate Teacher or School Admin
             * Return a view that shows a list of all students for that permission slip, their approval status
             * Include buttons to:
             *		Send emails to guardians of students with "No Approval" status to give approval
             *		Send specific email to student guardians to give approval
             *		Send Emails to guardians of all students as a reminder of the event
             */

            PermissionSlipStatus               permissionSlipStatus          = new PermissionSlipStatus();
            PermissionSlip                     permissionSlip                = null;
            GuardianApproval                   guardianApproval              = null;
            StudentPermissionSlipStatus        studentPermissionSlip         = null;
            List <StudentPermissionSlipStatus> studentPermissionSlipStatuses = new List <StudentPermissionSlipStatus>();
            string UserID = "";

            try
            {
                if (User.IsInRole("Guardian"))
                {
                    throw new Exception("Unable to provide permission slip status");
                }
                UserID         = User.Identity.GetUserId();
                permissionSlip = db.PermissionSlips.Find(PermissionSlipID);
                if ((permissionSlip.ClassRoom.TeacherUserID != UserID) && User.IsInRole("Teacher"))
                {
                    throw new Exception("Unable to provide permission slip status");
                }
                if (permissionSlip != null)
                {
                    List <Student> students = permissionSlip.ClassRoom.Students.ToList();
                    foreach (Student s in students)
                    {
                        studentPermissionSlip = new StudentPermissionSlipStatus()
                        {
                            StudentID       = s.ID,
                            StudentFullName = s.FullName,
                            Guardians       = s.Guardians.ToList()
                        };

                        guardianApproval = db.GuardianApprovals.Where(g => g.StudentID == s.ID && g.PermissionSlipID == permissionSlip.ID).FirstOrDefault();
                        if (guardianApproval != null)
                        {
                            studentPermissionSlip.Approval = guardianApproval.Approved;
                        }
                        studentPermissionSlipStatuses.Add(studentPermissionSlip);
                    }
                }

                permissionSlipStatus.permissionSlip            = permissionSlip;
                permissionSlipStatus.studentPermissionStatuses = studentPermissionSlipStatuses;
            }
            catch (Exception ex)
            {
                //TODO : Do something with Exception Action
                ModelState.AddModelError("", "Exception occurred processing request for permission slip status:: " + ex.ToString());
                return(RedirectToAction("Index", "Home"));
            }

            return(View(permissionSlipStatus));
        }
        public ActionResult PermissionSlipApproval(int PermissionSlipID, int StudentID)
        {
            PermissionSlip   permissionSlip   = null;
            Student          student          = null;
            AspNetUser       Guardian         = null;
            GuardianApproval guardianApproval = null;
            string           UserID           = "";
            bool             AllowEdit        = true;

            try
            {
                if (!User.IsInRole("Guardian") && !User.IsInRole("Teacher"))
                {
                    throw new Exception("Unable to provide approval for permission slip");
                }
                UserID         = User.Identity.GetUserId();
                permissionSlip = db.PermissionSlips.Find(PermissionSlipID);
                AllowEdit      = permissionSlip.StartDateTime >= DateTime.Now.Date;
                student        = db.Students.Find(StudentID);
                if (User.IsInRole("Guardian"))
                {
                    Guardian = db.AspNetUsers.Where(u => u.Id == UserID).FirstOrDefault();
                    if ((permissionSlip != null) && (student != null) && (Guardian != null))
                    {
                        //Check to make sure Guardian is one of the Student's Guardians
                        if (student.Guardians.Where(g => g.Id == Guardian.Id).FirstOrDefault() == null)
                        {
                            throw new Exception("Unauthorized User");
                        }

                        guardianApproval = db.GuardianApprovals.Where(a => a.PermissionSlipID == PermissionSlipID && a.StudentID == StudentID).FirstOrDefault();
                        if (guardianApproval == null)
                        {
                            guardianApproval = new GuardianApproval()
                            {
                                Name             = permissionSlip.Name,
                                Location         = permissionSlip.Location,
                                StartDateTime    = permissionSlip.StartDateTime,
                                EndDateTime      = permissionSlip.EndDateTime,
                                Cost             = permissionSlip.Cost,
                                RequireChaperone = permissionSlip.RequireChaperone,
                                RequireChaperoneBackgroundCheck = permissionSlip.RequireChaperoneBackgroundCheck,

                                GuardianUserID   = AllowEdit ? UserID : "",
                                GuardianName     = AllowEdit ? Guardian.FullName : "",
                                StudentID        = StudentID,
                                StudentFullName  = student.FullName,
                                PermissionSlipID = PermissionSlipID,
                                PermissionSlip   = permissionSlip,
                                Approved         = false,
                                CanChaperone     = false,
                                DaytimePhone     = Guardian.PhoneNumberConfirmed ? Guardian.PhoneNumber : "",
                                EmergencyPhone   = "",
                                GuardianEmail    = "",
                                SpecialHealthDietaryAccessConsiderations = ""
                            };
                        }
                        else
                        {
                            guardianApproval.StudentFullName  = student.FullName;
                            guardianApproval.Name             = permissionSlip.Name;
                            guardianApproval.Location         = permissionSlip.Location;
                            guardianApproval.StartDateTime    = permissionSlip.StartDateTime;
                            guardianApproval.EndDateTime      = permissionSlip.EndDateTime;
                            guardianApproval.Cost             = permissionSlip.Cost;
                            guardianApproval.RequireChaperone = permissionSlip.RequireChaperone;
                            guardianApproval.RequireChaperoneBackgroundCheck = permissionSlip.RequireChaperoneBackgroundCheck;
                            guardianApproval.ExistingSignature = guardianApproval.Signature;
                            guardianApproval.Signature         = null;
                        }
                    }
                }
                else                 //Teacher
                {
                    AspNetUser Teacher = db.AspNetUsers.Find(UserID);
                    guardianApproval = db.GuardianApprovals.Where(a => a.PermissionSlipID == PermissionSlipID && a.StudentID == StudentID).FirstOrDefault();
                    if (guardianApproval == null)
                    {
                        guardianApproval = new GuardianApproval()
                        {
                            Name             = permissionSlip.Name,
                            Location         = permissionSlip.Location,
                            StartDateTime    = permissionSlip.StartDateTime,
                            EndDateTime      = permissionSlip.EndDateTime,
                            Cost             = permissionSlip.Cost,
                            RequireChaperone = permissionSlip.RequireChaperone,
                            RequireChaperoneBackgroundCheck = permissionSlip.RequireChaperoneBackgroundCheck,
                            GuardianUserID   = AllowEdit ? UserID : "",
                            GuardianName     = AllowEdit ? "Verbal Approval - " + Teacher.FullName : "",
                            StudentID        = StudentID,
                            StudentFullName  = student.FullName,
                            PermissionSlipID = PermissionSlipID,
                            PermissionSlip   = permissionSlip,
                            Approved         = false,
                            CanChaperone     = false,
                            DaytimePhone     = "",
                            EmergencyPhone   = "",
                            GuardianEmail    = "",
                            SpecialHealthDietaryAccessConsiderations = ""
                        };
                    }
                    else
                    {
                        guardianApproval.StudentFullName  = student.FullName;
                        guardianApproval.Name             = permissionSlip.Name;
                        guardianApproval.Location         = permissionSlip.Location;
                        guardianApproval.StartDateTime    = permissionSlip.StartDateTime;
                        guardianApproval.EndDateTime      = permissionSlip.EndDateTime;
                        guardianApproval.Cost             = permissionSlip.Cost;
                        guardianApproval.RequireChaperone = permissionSlip.RequireChaperone;
                        guardianApproval.RequireChaperoneBackgroundCheck = permissionSlip.RequireChaperoneBackgroundCheck;
                        guardianApproval.ExistingSignature = guardianApproval.Signature;
                        guardianApproval.Signature         = null;
                    }
                }
            }
            catch (Exception ex)
            {
                //TODO : Do something with Exception Action
                ModelState.AddModelError("", "Exception occurred processing approval request :: " + ex.ToString());
                return(RedirectToAction("Index", "Home"));
            }

            return(View(guardianApproval));
        }
        public ActionResult Create([Bind(Include = "ClassRoomID,PermissionSlipCategoryID,PermissionSlipTemplateID,Name,Location,StartDateTime,EndDateTime,Cost,RequireChaperone,RequireChaperoneBackgroundCheck,EmailGuardians")] CreatePermissionSlip createPermissionSlip)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    PermissionSlip p = new PermissionSlip()
                    {
                        PermissionSlipCategoryID = createPermissionSlip.PermissionSlipCategoryID,
                        PermissionSlipTemplateID = createPermissionSlip.PermissionSlipTemplateID,
                        ClassRoomID      = createPermissionSlip.ClassRoomID,
                        Name             = createPermissionSlip.Name,
                        Location         = createPermissionSlip.Location,
                        StartDateTime    = createPermissionSlip.StartDateTime,
                        EndDateTime      = createPermissionSlip.EndDateTime,
                        Cost             = createPermissionSlip.Cost,
                        RequireChaperone = createPermissionSlip.RequireChaperone,
                        RequireChaperoneBackgroundCheck = createPermissionSlip.RequireChaperoneBackgroundCheck
                    };

                    db.PermissionSlips.Add(p);
                    db.SaveChanges();
                    db.Entry(p).Reload();                     // Make sure the ID is populated
                    if (createPermissionSlip.EmailGuardians)
                    {
                        List <Student> students = db.ClassRooms.Where(c => c.ID == createPermissionSlip.ClassRoomID).SelectMany(c => c.Students).ToList();
                        foreach (Student s in students)
                        {
                            foreach (AspNetUser g in s.Guardians)
                            {
                                if (g.EmailConfirmed)
                                {
                                    string EmailMessage = "Permission Slip Created for your student's class. " +
                                                          Url.Action("PermissionSlipApproval", "PermissionSlips", new RouteValueDictionary(new { PermissionSlipID = p.ID, StudentID = s.ID }), protocol: Request.Url.Scheme);
                                    //for each guardian of class, send email
                                    MailGunUtility.SendSimpleMessage(new EmailMessage()
                                    {
                                        EmailSubject    = "Class Room Permission Slip",
                                        ToAddress       = g.Email,
                                        MessageText     = EmailMessage,
                                        HtmlMessageText = EmailMessage
                                    });
                                }
                            }
                        }
                        ////for each guardian of class, send email
                        //MailGunUtility.SendSimpleMessage(new EmailMessage()
                        //{
                        //	MessageText = "Permission Slip Created for your student's class"
                        //});
                    }

                    return(RedirectToAction("Index"));
                }
                catch (Exception ex)
                {
                }
            }

            InitializeViewBagsForCreate();
            return(View(createPermissionSlip));
        }