public ActionResult EditDay(int?id, string url = "")
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CourseWithTimeAllocation courseWithTimeAllocation = db.CourseWithTimeAllocations.Find(id);

            if (courseWithTimeAllocation == null)
            {
                return(HttpNotFound());
            }

            CourseWithTimeAllocationsViewModel courseWithTimeAllocationsViewModel = new CourseWithTimeAllocationsViewModel()
            {
                Id = courseWithTimeAllocation.Id, CourseId = courseWithTimeAllocation.CourseId, Course = courseWithTimeAllocation.CourseName, Delete = false, TeachingHours = courseWithTimeAllocation.AmountOfTeachingHours, Topic = courseWithTimeAllocation.Topic, TimeAllocationHelperId = courseWithTimeAllocation.TimeAllocationHelperId, url = url
            };

            return(View(courseWithTimeAllocationsViewModel));
        }
        public ActionResult EditDay([Bind(Include = "Id,TimeAllocationHelperId,url,Course, CourseId,Topic,TeachingHours,Delete")] CourseWithTimeAllocationsViewModel courseWithTimeAllocation)
        {
            var temp = courseWithTimeAllocation;
            int previousHoursForDay = db.CourseWithTimeAllocations.Find(courseWithTimeAllocation.Id).AmountOfTeachingHours;

            if (courseWithTimeAllocation != null && courseWithTimeAllocation.Delete == false)
            {
                var instanceOfTimeAllocationForCourse = db.CourseWithTimeAllocations.Find(courseWithTimeAllocation.Id);
                instanceOfTimeAllocationForCourse.CourseName            = courseWithTimeAllocation.Course;
                instanceOfTimeAllocationForCourse.Topic                 = courseWithTimeAllocation.Topic;
                instanceOfTimeAllocationForCourse.AmountOfTeachingHours = courseWithTimeAllocation.TeachingHours;
                var instanceOfCourseDataHelper = db.ScheduleHelperContextPerCourse.Where(x => x.courseId == instanceOfTimeAllocationForCourse.CourseId).ToList().FirstOrDefault();
                // negative
                instanceOfCourseDataHelper.OverallTotalHours += previousHoursForDay - courseWithTimeAllocation.TeachingHours;
                var timeInstanceForUpdationOfCourse = db.TimeOfCourse.Find(courseWithTimeAllocation.TimeAllocationHelperId);

                var courseUpdation = db.Courses.Find(courseWithTimeAllocation.CourseId);
                if (courseUpdation.StartDate > timeInstanceForUpdationOfCourse.Date)
                {
                    courseUpdation.StartDate = timeInstanceForUpdationOfCourse.Date;
                }
                else if (courseUpdation.EndDate < timeInstanceForUpdationOfCourse.Date)
                {
                    courseUpdation.EndDate = timeInstanceForUpdationOfCourse.Date;
                }

                db.SaveChanges();
            }
            if (courseWithTimeAllocation.Delete == true)
            {
                var instanceOfTimeAllocationToDelete = db.CourseWithTimeAllocations.Find(courseWithTimeAllocation.Id);
                var instanceOfCourseDataHelper       = db.ScheduleHelperContextPerCourse.ToList().Where(x => x.courseId == instanceOfTimeAllocationToDelete.CourseId).FirstOrDefault();
                // negative
                instanceOfCourseDataHelper.OverallTotalHours += previousHoursForDay;

                db.CourseWithTimeAllocations.Remove(instanceOfTimeAllocationToDelete);
                var timeInstanceForUpdationOfCourse = db.TimeOfCourse.Find(courseWithTimeAllocation.TimeAllocationHelperId);


                var courseUpdation = db.Courses.Find(courseWithTimeAllocation.CourseId);
                if (true)
                {
                    // when start day is deleted or end day is deleted.. Otherwise it does't matter.
                    var timeData = db.TimeOfCourse.Where(x => x.ProgramId == timeInstanceForUpdationOfCourse.ProgramId).ToList().OrderBy(x => x.Date).ToList();
                    if (timeInstanceForUpdationOfCourse.Date == courseUpdation.StartDate)
                    {
                        bool flagOf = false;
                        // start date is deleting
                        for (int i = 0; i < timeData.Count(); i++)
                        {
                            if (flagOf == true)
                            {
                                int helperId = timeData[i].Id;
                                // id is passed. now look for an instance where course id matches.
                                var firstInstance = db.CourseWithTimeAllocations.Where(x => x.CourseId == courseUpdation.Id && x.TimeAllocationHelperId == helperId).ToList().FirstOrDefault();
                                if (firstInstance != null)
                                {
                                    // timeallocation id with the matching date is new start date.
                                    courseUpdation.StartDate = timeData[i].Date;
                                    db.SaveChanges();
                                    break;
                                }
                            }
                            if (timeData[i].Date == timeInstanceForUpdationOfCourse.Date)
                            {
                                flagOf = true;
                            }
                        }
                    }
                    else if (timeInstanceForUpdationOfCourse.Date == courseUpdation.EndDate)
                    {
                        // end date is deleting

                        bool flagOf = false;
                        // start date is deleting
                        for (int i = timeData.Count() - 1; i >= 0; i--)
                        {
                            if (flagOf == true)
                            {
                                // id is passed. now look for an instance where course id matches.
                                int helperId = timeData[i].Id;

                                var firstInstance = db.CourseWithTimeAllocations.Where(x => x.CourseId == courseUpdation.Id && x.TimeAllocationHelperId == helperId).ToList().FirstOrDefault();


                                if (firstInstance != null)
                                {
                                    // timeallocation id with the matching date is new start date.
                                    courseUpdation.EndDate = timeData[i].Date;
                                    db.SaveChanges();
                                    break;
                                }
                            }
                            if (timeData[i].Date == timeInstanceForUpdationOfCourse.Date)
                            {
                                flagOf = true;
                            }
                        }
                    }
                }

                db.SaveChanges();
            }
            if (temp != null)
            {
                var      timeInstanceForRedirectionByDate = db.TimeOfCourse.Find(courseWithTimeAllocation.TimeAllocationHelperId);
                DateTime monthToGoTo = timeInstanceForRedirectionByDate.Date;

                string path = temp.url + "#" + monthToGoTo.ToString("MMMM") + "-" + monthToGoTo.Year.ToString();
                return(Redirect(path));
            }


            return(View(courseWithTimeAllocation));
        }