예제 #1
0
        private async Task <EDCLearnRequest> GenerateLearnRequest(string date, string startTime, string endTime, string name)
        {
            var learnRequest = new EDCLearnRequest()
            {
                Date               = date,
                StartTime          = startTime,
                EndTime            = endTime,
                RegisteredStudents = new List <EDCStudent>()
            };
            var student = await db.Students.Where(p => p.StudentName == name).SingleOrDefaultAsync();

            if (student != null)
            {
                learnRequest.RegisteredStudents.Add(student);
                return(learnRequest);
            }
            return(null);
        }
        public static EDCLearnRequestDTO GenerateDTO(this IEDCLoginUserContext context, EDCLearnRequest request)
        {
            if (context == null || request == null)
            {
                return(null);
            }
            var names = new List <string>();

            if (request.RegisteredStudents != null)
            {
                foreach (var n in request.RegisteredStudents)
                {
                    names.Add(n.StudentName);
                }
            }
            return(new EDCLearnRequestDTO()
            {
                Id = request.ID,
                Date = request.Date,
                StartTime = request.StartTime,
                EndTime = request.EndTime,
                StudentNames = names
            });
        }
 public static void AssignTeacherToLearnRequest(this IEDCLoginUserContext context, EDCLearnRequest learnRequest, string teacherName)
 {
     if (context != null && learnRequest != null)
     {
         var teacher = context.Teachers.Include(p => p.LearnRequests)
                       .Where(p => p.TeacherName == teacherName).SingleOrDefault();
         if (teacher != null)
         {
             teacher.LearnRequests.Add(learnRequest);
         }
     }
 }
예제 #4
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));
        }
예제 #5
0
        public async Task <IHttpActionResult> PostLearnRequest(string name, EDCLearnRequestBindingModel model)
        {
            if (!CheckInputLearnRequest(model))
            {
                var msg        = "There is something wrong with the input.";
                var modelError = EDCExceptionFactory.GenerateHttpError(msg, EDCWebServiceErrorType.Error, true);
                var response   = Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelError);
                throw new HttpResponseException(response);
            }
            //    var name = User.Identity.Name;
            var student = await db.Students.Where(p => p.StudentName == name).SingleOrDefaultAsync();

            var learnRequestObjs = new List <EDCLearnRequest>();

            foreach (var l in model.LearnRequests)
            {
                var    date = l.Date;
                string shortDate;
                TimeConversionUtils.GetDate(date, out shortDate);
                var dateFromDb = db.LearnRequests.Where(p => p.Date == shortDate).Include(p => p.RegisteredStudents);
                if (dateFromDb.Count() > 0)
                {
                    foreach (var t in l.Times)
                    {
                        string[]        times        = TimeConversionUtils.GetStartAndEndTime(t);
                        bool            needBuildNew = true;
                        EDCLearnRequest existed      = null;
                        foreach (var temp in dateFromDb)
                        {
                            if (times[0] == temp.StartTime && times[1] == temp.EndTime)
                            {
                                existed      = temp;
                                needBuildNew = false;
                                break;
                            }
                        }
                        if (needBuildNew)
                        {
                            var obj = await GenerateLearnRequest(date, times[0], times[1], name);

                            if (obj != null)
                            {
                                learnRequestObjs.Add(obj);
                            }
                        }
                        else
                        {
                            if (existed != null)
                            {
                                existed.RegisteredStudents.Add(student);
                            }
                        }
                    }
                }
                else
                {
                    foreach (var t in l.Times)
                    {
                        string[] timesTemp = TimeConversionUtils.GetStartAndEndTime(t);
                        var      obj       = await GenerateLearnRequest(date, timesTemp[0], timesTemp[1], name);

                        if (obj != null)
                        {
                            learnRequestObjs.Add(obj);
                        }
                    }
                }
            }
            if (learnRequestObjs.Count > 0)
            {
                string teacherName = "*****@*****.**";
                var    tasks       = new List <Task>();
                foreach (var l in learnRequestObjs)
                {
                    db.AssignTeacherToLearnRequest(l, teacherName);
                }

                foreach (var l in learnRequestObjs)
                {
                    db.LearnRequests.Add(l);
                }
            }
            try
            {
                await db.SaveChangesToDbAsync();
            }
            catch (Exception)
            {
                var msg        = "There are some internal errors happened.";
                var modelError = EDCExceptionFactory.GenerateHttpError(msg, EDCWebServiceErrorType.Error, true);
                var response   = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, modelError);
                throw new HttpResponseException(response);
            }
            return(Ok());
        }