Exemplo n.º 1
0
 private bool CheckInputEditLearnRequest(EDCLearnRequestEditBindingModel model)
 {
     if (model == null)
     {
         return(false);
     }
     if (model.Date == null || model.Time == null ||
         model.Date.Length == 0 || model.Time.Length == 0)
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 2
0
        public async Task <IHttpActionResult> EditLearnRequest(int id, EDCLearnRequestEditBindingModel model)
        {
            if (!CheckInputEditLearnRequest(model))
            {
                var msg        = "There is something wrong with input.";
                var modelError = EDCExceptionFactory.GenerateHttpError(msg, EDCWebServiceErrorType.Error, true);
                var response   = Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelError);
                throw new HttpResponseException(response);
            }
            var learnRequest = await db.LearnRequests.Include(p => p.RegisteredStudents)
                               .Where(p => p.ID == id).SingleOrDefaultAsync();

            if (learnRequest == null)
            {
                var msg        = "Can't find the learn request.";
                var modelError = EDCExceptionFactory.GenerateHttpError(msg, EDCWebServiceErrorType.Error, true);
                var response   = Request.CreateErrorResponse(HttpStatusCode.NotFound, modelError);
                throw new HttpResponseException(response);
            }
            //see if the request new time and date is already existed
            var times      = TimeConversionUtils.GetStartAndEndTime(model.Time);
            var startTime  = times[0];
            var endTime    = times[1];
            var newRequest = await db.LearnRequests.Include(p => p.RegisteredStudents).Where(p => p.Date == model.Date &&
                                                                                             p.StartTime == startTime &&
                                                                                             p.EndTime == endTime).SingleOrDefaultAsync();

            if (newRequest != null)
            {
                var already = newRequest.RegisteredStudents.Where(p => p.StudentName == User.Identity.Name).SingleOrDefault();
                if (already != null)
                {
                    var msg        = "Your requested new date and time are already existed.";
                    var modelError = EDCExceptionFactory.GenerateHttpError(msg, EDCWebServiceErrorType.Warning, true);
                    var response   = Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelError);
                    throw new HttpResponseException(response);
                }
            }
            //need to remove the student from the current request
            var student = await db.Students.FindAsync(User.Identity.Name);

            learnRequest.RegisteredStudents.Remove(student);
            if (newRequest == null)
            {
                newRequest = new EDCLearnRequest
                {
                    Date               = model.Date,
                    StartTime          = times[0],
                    EndTime            = times[1],
                    RegisteredStudents = new List <EDCStudent>()
                };
                newRequest.RegisteredStudents.Add(student);
                string teacherName = "*****@*****.**";
                db.AssignTeacherToLearnRequest(newRequest, teacherName);
                db.LearnRequests.Add(newRequest);

                //db.RunCommand(sql, new SqlParameter("@Id",id));
                try
                {
                    //  await db.SaveChangesToDbAsync();
                    db.SaveChangesToDb();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    var entry  = ex.Entries.Single();
                    var values = entry.CurrentValues;
                }
            }
            else
            {
                newRequest.RegisteredStudents.Add(student);
                db.SetEntityModified <EDCLearnRequest>(newRequest);
                //  db.RunCommand(sql, new SqlParameter("@Id", id));
                try
                {
                    //  await db.SaveChangesToDbAsync();
                    db.SaveChangesToDb();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    var entry  = ex.Entries.Single();
                    var values = entry.CurrentValues;
                }
            }
            return(StatusCode(HttpStatusCode.NoContent));
        }