public virtual JsonResult Update([DataSourceRequest] DataSourceRequest request, TaskViewModel task)
        {
            if (ModelState.IsValid)
            {
                taskService.Update(task, ModelState);
            }

            return Json(new[] { task }.ToDataSourceResult(request, ModelState));
        }
        public virtual JsonResult Update(TaskViewModel task)
        {
            if (ModelState.IsValid)
            {
                taskService.Update(task, ModelState);
            }

            return Json(new[] { task });
        }
 public virtual void Update(TaskViewModel task, ModelStateDictionary modelState)
 {
     if (ValidateModel(task, modelState))
     {
         var entity = task.ToEntity();
         db.Tasks.Attach(entity);
         db.Entry(entity).State = EntityState.Modified;                
         db.SaveChanges();
     }
 }
        public virtual void Insert(TaskViewModel task, ModelStateDictionary modelState)
        {
            if (ValidateModel(task, modelState))
            {
                var entity = task.ToEntity();

                db.Tasks.Add(entity);
                db.SaveChanges();

                task.TaskID = entity.TaskID;
            }
        }
        public virtual void Delete(TaskViewModel task, ModelStateDictionary modelState)
        {
            var entity = task.ToEntity();
            db.Tasks.Attach(entity);

            var recurrenceExceptions = db.Tasks.Where(t => t.RecurrenceID == task.TaskID);

            foreach (var recurrenceException in recurrenceExceptions)
            {
                db.Tasks.Remove(recurrenceException);
            }

            db.Tasks.Remove(entity);
            db.SaveChanges();
        }
 private bool ValidateModel(TaskViewModel appointment, ModelStateDictionary modelState)
 {
     if (appointment.Start > appointment.End)
     {
         modelState.AddModelError("errors", "End date must be greater or equal to Start date.");
         return false;
     }
     
     return true;
 }