public async Task <int> CreateStudent(CreateEditStudentInputModel model)
        {
            DateTime BirthDate = model.BirthDate ?? DateTime.Now;
            var      age       = DateTime.Today.Year - BirthDate.Year;

            if (BirthDate.Date > DateTime.Today.AddYears(-age))
            {
                age--;                                                 //Case for a leap year
            }
            var student = new Student
            {
                FirstName     = model.FirstName,
                MiddleName    = model.MiddleName,
                LastName      = model.LastName,
                Gender        = model.Gender,
                Age           = age,
                BirthDate     = BirthDate,
                Grade         = model.Grade,
                Status        = model.Status,
                ProfilePicURI = model.ProfileImage == null ? Constants.defaultProfPicURL : await cloudinaryService.UploadPicASync(model.ProfileImage, null)
            };

            await this.db.Students.AddAsync(student);

            await this.db.SaveChangesAsync();

            return(student.Id);
        }
        public async Task EditInfo(CreateEditStudentInputModel model)
        {
            DateTime BirthDate = model.BirthDate ?? DateTime.Now;
            var      student   = await this.db.Students.FirstOrDefaultAsync(x => x.Id == model.Id);

            var age = DateTime.Today.Year - BirthDate.Year;

            if (BirthDate.Date > DateTime.Today.AddYears(-age))
            {
                age--;                                                 //Case for a leap year
            }
            student.FirstName  = model.FirstName;
            student.MiddleName = model.MiddleName;
            student.LastName   = model.LastName;
            student.Gender     = model.Gender;
            student.Age        = age;
            student.BirthDate  = BirthDate;
            student.Grade      = model.Grade;
            if (model.ProfileImage != null)
            {
                student.ProfilePicURI = await this.cloudinaryService.UploadPicASync(model.ProfileImage, student.ProfilePicURI);
            }

            await this.db.SaveChangesAsync();
        }
        public async Task <IActionResult> Create(CreateEditStudentInputModel model)
        {
            if (ModelState.IsValid == false)
            {
                return(await Task.Run(() => this.View()));
            }

            var studentId = await this.studentsService.CreateStudent(model);

            this.TempData["studentId"] = studentId;

            return(await Task.Run(() => this.RedirectToAction("Details", new { studentId = studentId })));
        }
        public async Task <IActionResult> EditInfo(CreateEditStudentInputModel model)
        {
            int studentId = await CheckStudentId(TempData["studentId"]);

            model.ProfilePicURI = this.TempData["profilePicUri"].ToString();
            this.TempData.Keep("profilePicUri");
            if (ModelState.IsValid == false)
            {
                return(await Task.Run(() => this.View(model)));
            }

            model.Id = studentId;
            await this.studentsService.EditInfo(model);

            return(await Task.Run(() => this.RedirectToAction("Details", new { studentId = studentId })));
        }
        public async Task <CreateEditStudentInputModel> GetInfoForEdit(int studentId)
        {
            var student = await this.db.Students
                          .FirstOrDefaultAsync(x => x.Id == studentId);

            var model = new CreateEditStudentInputModel
            {
                FirstName     = student.FirstName,
                MiddleName    = student.MiddleName,
                LastName      = student.LastName,
                BirthDate     = student.BirthDate,
                Gender        = student.Gender,
                Grade         = student.Grade,
                ProfilePicURI = student.ProfilePicURI,
            };

            return(model);
        }