// GET: EditMark_Teachers/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Mark_Teachers mark_Teachers = db.Mark_Teachers.Find(id);

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

            List <Category_Teachers> cts = db.Category_Teachers.Where(c => c.Id_block == mark_Teachers.Сriteria_Teachers.Category_Teachers.Id_block).ToList();

            List <Сriteria_Teachers> сrts =
                db.Сriteria_Teachers.Where(c => c.Id_Category == mark_Teachers.Сriteria_Teachers.Id_Category).ToList();

            MarkTeacherViewModel mtvm = new MarkTeacherViewModel()
            {
                Categories         = new SelectList(cts, "Id", "Name"),
                SelectedCategoryId = mark_Teachers.Сriteria_Teachers.Id_Category.ToString(),
                Criterias          = new SelectList(сrts, "Id", "Name"),
                SelectedCriteriaId = mark_Teachers.Id_Criteria.ToString(),
                Kolvo_ed           = (int)mark_Teachers.Kolvo_ed
            };

            return(View(mtvm));
        }
        // POST: EditMark_Teachers/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        //[HttpPost]
        //[ValidateAntiForgeryToken]
        //public ActionResult Edit(CriteriaListViewModel clvm)
        //{
        //    if (ModelState.IsValid)
        //    {
        //        db.Entry(clvm).State = EntityState.Modified;
        //        db.SaveChanges();
        //        return RedirectToAction("Index");
        //    }
        //     return View(clvm);
        //}

        // GET: EditMark_Teachers/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Mark_Teachers mark_Teachers = db.Mark_Teachers.Find(id);

            ViewBag.IdBlock = mark_Teachers.Сriteria_Teachers.Category_Teachers.Block_Teachers.Id;

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

            List <Category_Teachers> cts = db.Category_Teachers.Where(c => c.Id_block == mark_Teachers.Сriteria_Teachers.Category_Teachers.Id_block).ToList();

            List <Сriteria_Teachers> сrts =
                db.Сriteria_Teachers.Where(c => c.Id_Category == mark_Teachers.Сriteria_Teachers.Id_Category).ToList();

            MarkTeacherViewModel mtvm = new MarkTeacherViewModel();

            ViewBag.BlockStr    = mark_Teachers.Сriteria_Teachers.Category_Teachers.Block_Teachers.Name;
            ViewBag.CategoryStr = mark_Teachers.Сriteria_Teachers.Category_Teachers.Name;
            ViewBag.CriteriaStr = mark_Teachers.Сriteria_Teachers.Name;
            ViewBag.Count       = mark_Teachers.Kolvo_ed;

            return(View(mtvm));
        }
        // GET: EditMark_Teachers/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Mark_Teachers mark_Teachers  = db.Mark_Teachers.Find(id);
            Mark_Teachers mark_Teachers1 = db.Mark_Teachers.Include(i => i.Status_Doc_Teacher).SingleOrDefault(i => i.Id == id);

            if (mark_Teachers == null)
            {
                return(HttpNotFound());
            }
            return(View(mark_Teachers));
        }
        private void editMarkTeacher(int idCurrentTeacher, MarkObject m, Сriteria_Teachers selectedCriteria)
        {
            Mark_Teachers editMarkT =
                db.Mark_Teachers.Single(
                    mt => mt.Id_teachers == idCurrentTeacher && mt.Id_Criteria == m.CriteriaId);
            List <Status_Doc_Teacher> oldFiles =
                db.Status_Doc_Teacher.Where(d => d.Id_Mark_Teacher == editMarkT.Id).ToList();

            if (m.Count != editMarkT.Kolvo_ed.Value)
            {
                editMarkT.Kolvo_ed = m.Count;

                editMarkT.Kolvo_Mark = selectedCriteria.Mark * m.Count;
                editMarkT.Date       = DateTime.Now;
                db.SaveChanges();
            }
            refreshDocs(oldFiles, m, editMarkT);
        }
        public ActionResult DeleteConfirmed(int id, int idBlock)
        {
            Status_Doc_Teacher doc = db.Status_Doc_Teacher.Single(d => d.Id_Mark_Teacher == id);

            db.Status_Doc_Teacher.Remove(doc);

            string fullPath = Request.MapPath("~/documents/" + doc.Link_Doc);

            if (System.IO.File.Exists(fullPath))
            {
                System.IO.File.Delete(fullPath);
            }

            Mark_Teachers mark_Teachers = db.Mark_Teachers.Find(id);

            db.Mark_Teachers.Remove(mark_Teachers);
            db.SaveChanges();
            return(RedirectToAction("Index/" + 1));
        }
        private void createMarkTeacher(int idCurrentTeacher, MarkObject m, Сriteria_Teachers selectedCriteria)
        {
            Mark_Teachers newMarkTeachers = new Mark_Teachers();

            newMarkTeachers.Id_teachers = idCurrentTeacher;
            newMarkTeachers.Id_Criteria = m.CriteriaId;
            newMarkTeachers.Kolvo_ed    = m.Count;
            if (m.NewFiles == null || m.NewFiles[0] == null)
            {
                newMarkTeachers.Status = -2;
            }
            else
            {
                newMarkTeachers.Status = 0;
            }
            newMarkTeachers.Kolvo_Mark = selectedCriteria.Mark * m.Count;
            newMarkTeachers.Date       = DateTime.Now;

            if (m.NewFiles != null)
            {
                newMarkTeachers.Status_Doc_Teacher = new List <Status_Doc_Teacher>();
                foreach (var item in m.NewFiles)
                {
                    if (item != null)
                    {
                        var document = new Status_Doc_Teacher()
                        {
                            Link_Doc    = Guid.NewGuid() + Path.GetFileName(item.FileName),
                            Name        = item.FileName,
                            FileType    = item.ContentType,
                            FileContent = item.ContentLength
                        };
                        newMarkTeachers.Status_Doc_Teacher.Add(document);
                        item.SaveAs(Path.Combine(Server.MapPath("~/documents"), document.Link_Doc));
                    }
                }
            }
            db.Mark_Teachers.Add(newMarkTeachers);
            db.SaveChanges();
        }
        private void deleteMarkTeacher(int idCurrentTeacher, MarkObject m)
        {
            Mark_Teachers delMarkT =
                db.Mark_Teachers.Single(
                    mt => mt.Id_teachers == idCurrentTeacher && mt.Id_Criteria == m.CriteriaId);

            if (m.IsRemoved != null)
            {
                List <Status_Doc_Teacher> delDocs =
                    db.Status_Doc_Teacher.Where(d => d.Id_Mark_Teacher == delMarkT.Id).ToList();
                foreach (var d in delDocs)
                {
                    db.Status_Doc_Teacher.Remove(d);
                    string fullPath = Request.MapPath("~/documents/" + d.Link_Doc);
                    if (System.IO.File.Exists(fullPath))
                    {
                        System.IO.File.Delete(fullPath);
                    }
                }
            }
            db.Mark_Teachers.Remove(delMarkT);

            db.SaveChanges();
        }
        private void refreshDocs(List <Status_Doc_Teacher> oldFiles, MarkObject m, Mark_Teachers editMarkT)
        {
            bool isChanged = false;


            if (oldFiles.Count != 0)
            {
                for (int i = 0; i < m.IsRemoved.Count; i++)
                {
                    if (m.IsRemoved[i])
                    {
                        db.Status_Doc_Teacher.Remove(oldFiles[i]);
                        string fullPath = Request.MapPath("~/documents/" + oldFiles[i].Link_Doc);
                        if (System.IO.File.Exists(fullPath))
                        {
                            System.IO.File.Delete(fullPath);
                        }
                        isChanged = true;
                    }
                }
            }

            if (m.NewFiles != null)
            {
                if (oldFiles.Count == 0)
                {
                    editMarkT.Status_Doc_Teacher = new List <Status_Doc_Teacher>();
                }

                foreach (var nf in m.NewFiles)
                {
                    if (nf != null)
                    {
                        var document = new Status_Doc_Teacher()
                        {
                            Link_Doc    = Guid.NewGuid() + Path.GetFileName(nf.FileName),
                            Name        = nf.FileName,
                            FileType    = nf.ContentType,
                            FileContent = nf.ContentLength
                        };
                        editMarkT.Status_Doc_Teacher.Add(document);
                        nf.SaveAs(Path.Combine(Server.MapPath("~/documents"), document.Link_Doc));

                        isChanged = true;
                    }
                }
            }

            if (isChanged)
            {
                editMarkT.Date = DateTime.Now;
                int cntRemoved = 0;
                if (m.IsRemoved != null)
                {
                    foreach (var r in m.IsRemoved)
                    {
                        if (r)
                        {
                            cntRemoved++;
                        }
                    }
                }
                bool bc = false;
                if (m.ExistingFiles != null)
                {
                    if (m.ExistingFiles.Count == cntRemoved && (m.NewFiles == null || m.NewFiles[0] == null))
                    {
                        editMarkT.Status = -2;
                        bc = true;
                    }
                }
                else if (m.NewFiles == null || m.NewFiles[0] == null)
                {
                    editMarkT.Status = -2;
                    bc = true;
                }

                if (!bc)
                {
                    editMarkT.Status = 0;
                }
            }

            db.SaveChanges();
        }