public async Task <IActionResult> Create([Bind("IdProfessor,Nome,DataUltimaImportacao")] Professor professor) { if (ModelState.IsValid) { _context.Add(professor); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(professor)); }
public async Task <ActionResult> UploadListaAlunos(IFormFile file, [FromQuery(Name = "idProfessor")] int idProfessor) { if (file != null) { Models.Professor professor = await _context.Professor.FirstOrDefaultAsync(p => p.IdProfessor == idProfessor); // Bloquear importação de alunos por um período de tempo definido em appsettings.json string strPeriodo = _configuration.GetValue <string>("Config:PeriodoBloqueioImportacao"); TimeSpan periodo = TimeSpan.Zero; if (!string.IsNullOrEmpty(strPeriodo) && TimeSpan.TryParse(strPeriodo, out periodo)) { if (professor.DataUltimaImportacao.HasValue) { if (DateTime.Now - professor.DataUltimaImportacao.Value < periodo) { TimeSpan diff = periodo - (DateTime.Now - professor.DataUltimaImportacao.Value); string dias = diff.Days > 0 ? diff.Days.ToString() + " dias," : ""; TempData["Error"] = $"Deve-se aguardar {dias} {diff.ToString("hh\\:mm\\:ss")} antes de se poder importar alunos para este professor."; return(RedirectToAction("Index", new { idProfessor = idProfessor }));; } } } // Formato: NomeAluno||ValorMensalidade||DataVencimento using (StreamReader sr = new StreamReader(file.OpenReadStream())) { string msg = null; string error = null; int inseridos = 0; string[] lines = sr.ReadToEnd().Split("\r\n") .Where(l => l.Length > 0) .ToArray(); for (int i = 0; i < lines.Length; i++) { string[] lineSplit = lines[i].Split("||"); if (lineSplit.Length != 3) { error = $"Registro inválido na linha {i + 1} do arquivo. Formato: NomeAluno||ValorMensalidade||DataVencimento."; break; } string nomeAluno = lineSplit[0]; string valorMensal = lineSplit[1]; string dataVenc = lineSplit[2]; if (string.IsNullOrEmpty(nomeAluno) || string.IsNullOrEmpty(valorMensal) || string.IsNullOrEmpty(dataVenc)) { error = $"Registro inválido na linha {i + 1} do arquivo. Formato: NomeAluno||ValorMensalidade||DataVencimento."; break; } // Mensalidade decimal mensalidade = 0.0m; if (!decimal.TryParse(valorMensal, out mensalidade)) { error = $"Valor mensal inválido na linha {i + 1} do arquivo -- formato: 0.00."; break; } // Data de vencimento DateTime dataVencimento = DateTime.MinValue; if (!DateTime.TryParseExact(dataVenc, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture , System.Globalization.DateTimeStyles.None, out dataVencimento)) { error = $"Data de vencimento inválida na linha {i + 1} do arquivo -- formato: DD/MM/AAAA."; break; } // Inserir Aluno Models.Aluno aluno = new Aluno() { IdProfessor = idProfessor, Nome = nomeAluno, Mensalidade = mensalidade, DataVencimento = dataVencimento }; _context.Add(aluno); await _context.SaveChangesAsync(); inseridos++; // Salvar data de importação professor.DataUltimaImportacao = DateTime.Now; await _context.SaveChangesAsync(); } if (error == null && inseridos > 0) { msg = $"{inseridos} registros inseridos."; } TempData["Error"] = error; TempData["Message"] = msg; } } return(RedirectToAction("Index", new { idProfessor = idProfessor })); }