public ActionResult Destroy([DataSourceRequest] DataSourceRequest request, CertificateViewModel model)
        {
            var newModel = model;
            if (model != null && ModelState.IsValid)
            {
                var certificateInDb = this.Data.Certificates.GetById(model.Id);

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

                this.Data.Certificates.Delete(certificateInDb);
                this.Data.SaveChanges();
            }

            return Json(new[] { newModel }.ToDataSourceResult(request, ModelState));
        }
        public ActionResult Create([DataSourceRequest] DataSourceRequest request, CertificateViewModel model)
        {
            var newModel = model;
            if (model != null && ModelState.IsValid)
            {
                var certificate = new Certificate()
                {
                    Title = model.Title,
                    IssueDate = DateTime.Now,
                    MinimalMark = model.MinimalMark
                };

                string[] newCertificateCourses = model.Courses.Split(',');

                if (newCertificateCourses.Length > 1)
                {
                    foreach (var item in newCertificateCourses)
                    {
                        var certificateCourse = this.Data.Courses.All().FirstOrDefault(c => c.Title.Equals(item,StringComparison.InvariantCultureIgnoreCase));
                        certificate.Courses.Add(certificateCourse);
                    }
                }
                else
                {
                    var courseTitle = newCertificateCourses[0];
                    var certificateCourse = this.Data.Courses.All().FirstOrDefault(c => c.Title.Equals(courseTitle,StringComparison.InvariantCultureIgnoreCase));
                    certificate.Courses.Add(certificateCourse);
                }

                this.Data.Certificates.Add(certificate);
                this.Data.SaveChanges();

                newModel = this.FromCertificate(certificate);
            }

            return Json(new[] { newModel }.ToDataSourceResult(request, ModelState));
        }
        private CertificateViewModel FromCertificate(Certificate certificate)
        {
            var model = new CertificateViewModel();
            model.Id = certificate.Id;
            model.Title = certificate.Title;
            model.MinimalMark = certificate.MinimalMark;

            StringBuilder sb = new StringBuilder();
            foreach (var item in certificate.Courses)
            {
                sb.Append(item.Title + ",");
            }
            if (sb.Length > 0)
            {
                sb.Length--;
            }

            model.Courses = sb.ToString();

            return model;
        }
        public ActionResult Update([DataSourceRequest] DataSourceRequest request, CertificateViewModel model)
        {
            CertificateViewModel newModel = model;

            if (model != null && ModelState.IsValid)
            {
                var certificateInDb = this.Data.Certificates.GetById(model.Id);
                string[] newCertificateCourses = model.Courses.Split(',');
                certificateInDb.MinimalMark = model.MinimalMark;
                certificateInDb.Title = model.Title;

                if (certificateInDb.Courses.Count > newCertificateCourses.Length)
                {
                    certificateInDb.Courses = new HashSet<Course>();
                    foreach (var item in newCertificateCourses)
                    {
                        var course = certificateInDb.Courses.FirstOrDefault(c => c.Title.Equals(item, StringComparison.InvariantCultureIgnoreCase));
                        if (course == null)
                        {
                            var courseToAdd = this.Data.Courses.All().FirstOrDefault(c => c.Title.Equals(item, StringComparison.InvariantCultureIgnoreCase));
                            certificateInDb.Courses.Add(courseToAdd);
                        }
                    }
                }
                else
                {
                    foreach (var item in newCertificateCourses)
                    {
                        var course = certificateInDb.Courses.FirstOrDefault(c => c.Title.Equals(item, StringComparison.InvariantCultureIgnoreCase));
                        if (course == null)
                        {
                            var courseToAdd = this.Data.Courses.All().FirstOrDefault(c => c.Title.Equals(item, StringComparison.InvariantCultureIgnoreCase));
                            certificateInDb.Courses.Add(courseToAdd);
                        }
                    }
                }

                this.Data.SaveChanges();

                newModel = this.FromCertificate(certificateInDb);
            }

            return Json(new[] { newModel }.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
        }