예제 #1
0
 public ActionResult UploadStudentExcel(int groupId)
 {
     if (Request.Files.Count != 0)
     {
         string ext             = Path.GetExtension(Request.Files[0].FileName);
         var    validExtensions = new[] { ".xlsx", ".xls", "csv" };
         if (!validExtensions.Contains(ext))
         {
             TempData["FailUpload"] =
                 "Невірний формат файлу! Тільки файли створенні за допомогою Excel підтримуються (.xlsx ; .xls)";
             return(RedirectToAction("Students"));
         }
         var          file = Request.Files[0];
         MemoryStream mem  = new MemoryStream();
         mem.SetLength((int)file.ContentLength);
         file.InputStream.Read(mem.GetBuffer(), 0, (int)file.ContentLength);
         try
         {
             using (ExcelPackage p = new ExcelPackage(mem))
             {
                 {
                     ExcelWorksheet ws           = p.Workbook.Worksheets[1];
                     var            specialityId = Context.Groups.FirstOrDefault(t => t.Id == groupId).SpecialityId;
                     var            students     = Context.Students.Where(t => t.GroupId == groupId && t.SpecialityId == specialityId).ToList();
                     var            accounts     = Context.Accounts.ToList();
                     List <int>     ids          = new ListStack <int>();
                     for (int i = 0; i < 100; i++)
                     {
                         if (ws.Cells[3 + i, 1].Value == null)
                         {
                             break;
                         }
                         var name     = ws.Cells[3 + i, 2].Value.ToString();
                         var surname  = ws.Cells[3 + i, 1].Value.ToString();
                         var studId   = Convert.ToInt32(ws.Cells[3 + i, 3].Value);
                         var login    = Convert.ToString(ws.Cells[3 + i, 4].Value);
                         var password = Convert.ToString(ws.Cells[3 + i, 5].Value);
                         ids.Add(studId);
                         if (!students.Any(t => t.Id == studId) && studId == 0)
                         {
                             _adding.AddNewStudent(name.TrimEnd().TrimStart(), surname.TrimEnd().TrimStart(), groupId, specialityId);
                         }
                         else
                         {
                             var stud = students.FirstOrDefault(t => t.Id == studId);
                             var acc  = accounts.FirstOrDefault(t => t.Id == stud.AccountId);
                             if (stud.Name != name || stud.Surname != surname || acc.Login == login || acc.Password == password)
                             {
                                 _editing.EditStudent((int)studId, name.TrimEnd().TrimStart(), surname.TrimEnd().TrimStart(), login, password, groupId);
                             }
                         }
                     }
                     foreach (var student in students)
                     {
                         if (!ids.Contains(student.Id))
                         {
                             _deleting.DeleteStudent(student.Id);
                         }
                     }
                     TempData["Success"] = "Зміни по студентах групи - \"" + Context.Groups.FirstOrDefault(t => t.Id == groupId).Name + "\" було успішно збережено!";
                     p.Dispose();
                 }
             }
         }
         catch (Exception)
         {
             TempData["FailUpload"] =
                 "Невірне оформлення документу! Будь ласка, завантажте шаблон і заповніть згідно вказаних праввил.";
         }
     }
     return(RedirectToAction("Students"));
 }