public JsonResult SavedEvent(string eventTitle, string startTime, string endTime, bool isAllDay, bool isFixed)
        {
            try
            {
                if (Session["student"] == null)
                {
                    return Json(false);
                }

                EventModel eventModel = new EventModel
                {
                    EndTime = DateTime.Parse(endTime),
                    StartTime = DateTime.Parse(startTime),
                    EventTitle = eventTitle,
                    IsAllDay = isAllDay,
                    IsFixed = isFixed,
                    Color = isFixed ? "green" : "red"
                };
                Guid id = Guid.Parse((string)Session["student"]);
                using (var context = new TobyDBContext())
                {
                    eventModel.StudentId = id;
                    context.EventModels.Add(eventModel);
                    context.SaveChanges();
                }
                return Json(eventModel.Id);
            }
            catch { return Json(false); }
        }
        public JsonResult SaveGradeItem(string examName, string scoreAmount, string examDate, Guid studentId)
        {
            decimal scroe;
            DateTime date;
            GradeItemModel gradeItem = new GradeItemModel { ExamName = examName, StudentId = studentId };

            try
            {
                if (!Decimal.TryParse(scoreAmount, out scroe) || !DateTime.TryParse(examDate, out date))
                {
                    throw new Exception();
                }

                gradeItem.Grades = scroe;
                gradeItem.ExamDate = date;

                using (var context = new TobyDBContext())
                {
                    context.GradeItemModels.Add(gradeItem);
                    context.SaveChanges();
                }

                return Json(new
                {
                    item_id = gradeItem.Id,
                    grade = gradeItem.Grades,
                    exam_name = gradeItem.ExamName,
                    exam_date = gradeItem.ExamDate.ToString("MM/dd/yyyy")
                });
            }
            catch
            {
                this.Response.StatusCode = 500;

                return Json(null);
            }
        }
        public JsonResult SavedNewPayment(string dealineTime, string paymentAmount, string paymentName, List<string> studentIds)
        {
            Guid studentId;
            DateTime deadline;
            decimal payment;
            PaymentModel paymentModel = new PaymentModel();
            PaymentJson paymentJson;
            List<PaymentJson> paymentJsonList = new List<PaymentJson>();

            try
            {
                using (var context = new TobyDBContext())
                {
                    if (studentIds != null && studentIds.Count != 0)
                    {
                        studentIds.ForEach(id =>
                            {
                                paymentModel = new PaymentModel { PaymentName = paymentName };
                                paymentJson = new PaymentJson { payment_name = paymentName };

                                if (decimal.TryParse(paymentAmount, out payment) && DateTime.TryParse(dealineTime, out deadline)
                                    && Guid.TryParse(id, out studentId))
                                {
                                    paymentModel.Payment = payment;
                                    paymentModel.PaymentDeadLine = deadline;
                                    paymentModel.StudentId = studentId;

                                    var student = context.StudentModels.Where(s => s.Id == studentId).Single();
                                    paymentJson.deadline = deadline.ToString("MM/dd/yyyy");
                                    paymentJson.payment = paymentAmount;
                                    paymentJson.student_name = string.Format("{0}({1})", student.Name, student.EnglishName);
                                    paymentJson.class_id = student.TobyClassId.GetValueOrDefault().ToString();
                                }
                                else
                                {
                                    throw new Exception();
                                }

                                context.PaymentModels.Add(paymentModel);
                                context.SaveChanges();
                                paymentJson._id = paymentModel.Id.ToString();
                                paymentJsonList.Add(paymentJson);
                            });
                    }
                    else
                    {
                        throw new Exception();
                    }
                }

                return Json(paymentJsonList.ToArray());
            }
            catch
            {
                this.Response.StatusCode = 500;

                return Json(null);
            }
        }
        public JsonResult SavedEvents(EventJsonModel jsonModel)
        {
            DateTime start, end, temp;
            EventModel eventModel;

            try
            {
                if (jsonModel.studentIds == null)
                {
                    throw new Exception();
                }

                if (DateTime.TryParse(jsonModel.startTime, out start) && DateTime.TryParse(jsonModel.endTime, out end))
                {
                    if (start > end)
                    {
                        temp = start;
                        start = end;
                        end = temp;
                    }
                }
                else
                {
                    throw new Exception();
                }

                using (var context = new TobyDBContext())
                {
                    jsonModel.studentIds.ForEach(id =>
                        {
                            eventModel = new EventModel
                            {
                                EventTitle = jsonModel.eventTile,
                                StartTime = start,
                                EndTime = end,
                                StudentId = id,
                                TeacherId = jsonModel.teacherId,
                                WorkTypeId = jsonModel.workTypeId,
                                Color = "red",
                                IsFixed = false,
                                IsAllDay = false
                            };
                            context.EventModels.Add(eventModel);
                        });

                    context.SaveChanges();
                }

                return Json(true);
            }
            catch
            {
                return Json(false);
            }
        }
        private void AutoGeneratedFixedEvents()
        {
            Mapper.Reset();
            Mapper.CreateMap<EventModel, EventModel>().ForMember(dest => dest.Id, opt => opt.Ignore());
            List<EventModel> events;
            EventModel eventModel;
            List<StudentModel> students;
            DateTime currentDate = DateTime.Today, startTime, endTime;

            using (var context = new TobyDBContext())
            {
                students = context.StudentModels.ToList();
                students.ForEach(student =>
                {
                    events = context.EventModels.Where(models => models.IsFixed && models.StudentId == student.Id && models.StartTime < currentDate).ToList();
                    foreach (EventModel model in events)
                    {
                        startTime = model.StartTime.AddDays(7);
                        endTime = model.EndTime.AddDays(7);
                        if (!CheckEventIsExist(startTime, endTime, model.StudentId))
                        {
                            context.EventModels.Attach(model);
                            eventModel = Mapper.Map<EventModel, EventModel>(model);
                            eventModel.StartTime = startTime;
                            eventModel.EndTime = endTime;
                            eventModel.Color = "green";
                            context.EventModels.Add(eventModel);
                            model.IsFixed = false;
                            model.Color = "red";
                        }
                    }
                });
                context.SaveChanges();
            }

        }
        public JsonResult GeneratedFixedEvents()
        {
            Mapper.Reset();
            Mapper.CreateMap<EventModel, EventModel>().ForMember(dest => dest.Id, opt => opt.Ignore());
            List<EventModel> events;
            EventModel eventModel;
            DateTime startTime, endTime;
            try
            {
                if (Session["student"] != null)
                {
                    using (var context = new TobyDBContext())
                    {
                        Guid id = Guid.Parse((string)Session["student"]);
                        events = context.EventModels.Where(models => models.IsFixed && models.StudentId == id).ToList();
                        foreach (EventModel model in events)
                        {
                            startTime = model.StartTime.AddDays(7);
                            endTime = model.EndTime.AddDays(7);
                            if (!CheckEventIsExist(startTime, endTime, model.StudentId))
                            {
                                context.EventModels.Attach(model);
                                eventModel = Mapper.Map<EventModel, EventModel>(model);
                                eventModel.StartTime = startTime;
                                eventModel.EndTime = endTime;
                                eventModel.Color = "green";
                                context.EventModels.Add(eventModel);
                                model.IsFixed = false;
                                model.Color = "red";
                            }
                        }
                        context.SaveChanges();
                    }
                }
                else
                {
                    return Json(false);
                }

                return Json(true);
            }
            catch
            {
                return Json(false);
            }
        }