public ActionResult Index(DataImportModel dataImportModel) { if (!IsFileValid(dataImportModel)) { ModelState.AddModelError("UploadFile", "Por favor seleccione un archivo de Excel"); } var academicGrade = _academicGradeRepository.Filter(x => x.AcademicYear.Id == dataImportModel.Year && x.Grade.Id == dataImportModel.Grade && x.Section.Equals(dataImportModel.Section)).FirstOrDefault(); if (academicGrade == null) { ModelState.AddModelError("Year", "No existe ese grado académico"); } else if (academicGrade.Students.Any()) { ModelState.AddModelError("Year", "Ya hay alumos en este grado, borrelos e ingreselos de nuevo."); } if (!ModelState.IsValid) { var user = _userRepository.GetById(Convert.ToInt64(_sessionManagementService.GetUserLoggedId())); var isDirector = ViewBag.IsDirector = user.Role.Name.Equals("Director"); ViewBag.GradeId = isDirector ? new SelectList(_gradeRepository.Filter(x => x.EducationLevel.Director != null && x.EducationLevel.Director.Id == user.Id).ToList(), "Id", "Name", 0) : new SelectList(_gradeRepository.GetAllGrade(), "Id", "Name", 0); ViewBag.Year = new SelectList(_academicYearRepository.Filter(x => x.EnrollsOpen), "Id", "Year"); ViewBag.Section = new List <SelectListItem>(); return(View(dataImportModel)); } var myDataSet = _dataImportService.GetDataSetFromExcelFile(dataImportModel.UploadFile); try { _dataImportService.Import(myDataSet, academicGrade); } catch (Exception ex) { _viewMessageLogic.SetNewMessage("Error!", ex.Message, ViewMessageType.ErrorMessage); return(RedirectToAction("Index")); } const string title = "Importación de Datos Exitosa"; var content = string.Format("Se importaron datos para el año: {0}, grado: {1} y sección: {2}" , academicGrade.AcademicYear.Year // 0 , academicGrade.Grade.Name // 1 , dataImportModel.Section // 2 ); _viewMessageLogic.SetNewMessage(title, content, ViewMessageType.SuccessMessage); return(RedirectToAction("Index")); }
public Action <IApplicationBuilder> Configure(Action <IApplicationBuilder> next) { if (_importConfig.Paths == null || !_importConfig.Paths.Any()) { return(next); } foreach (var importConfigPath in _importConfig.Paths) { _importService.Import(importConfigPath); } return(next); }
public async Task <Either <ActionResult, DataFileInfo> > Upload(Guid releaseId, IFormFile dataFormFile, IFormFile metaFormFile, string userName, Guid?replacingFileId = null, string subjectName = null) { return(await _persistenceHelper .CheckEntityExists <Release>(releaseId) .OnSuccess(_userService.CheckCanUpdateRelease) .OnSuccess(async release => { return await _persistenceHelper .CheckOptionalEntityExists <File>(replacingFileId) .OnSuccessDo(replacingFile => _fileUploadsValidatorService.ValidateDataFilesForUpload(releaseId, dataFormFile, metaFormFile, replacingFile)) // First, create with status uploading to prevent other users uploading the same datafile .OnSuccessCombineWith(replacingFile => ValidateSubjectName(releaseId, subjectName, replacingFile)) .OnSuccess(async replacingFileAndSubjectName => { var(replacingFile, validSubjectName) = replacingFileAndSubjectName; var subjectId = await _releaseRepository .CreateStatisticsDbReleaseAndSubjectHierarchy(releaseId); var dataFile = await _releaseDataFileRepository.Create( releaseId: releaseId, subjectId: subjectId, filename: dataFormFile.FileName.ToLower(), type: FileType.Data, createdById: _userService.GetUserId(), name: validSubjectName, replacingFile: replacingFile); var metaFile = await _releaseDataFileRepository.Create( releaseId: releaseId, subjectId: subjectId, filename: metaFormFile.FileName.ToLower(), type: Metadata, createdById: _userService.GetUserId()); var dataInfo = GetDataFileMetaValues( metaFileName: metaFile.Filename, numberOfRows: CalculateNumberOfRows(dataFormFile.OpenReadStream()) ); await UploadFileToStorage(dataFile, dataFormFile, dataInfo); await UploadFileToStorage(metaFile, metaFormFile); await _dataImportService.Import( subjectId: subjectId, dataFile: dataFile, metaFile: metaFile, formFile: dataFormFile); var blob = await _blobStorageService.GetBlob( PrivateReleaseFiles, dataFile.Path() ); await _contentDbContext.Entry(dataFile) .Reference(f => f.CreatedBy) .LoadAsync(); return new DataFileInfo { Id = dataFile.Id, FileName = dataFile.Filename, Name = validSubjectName, Size = blob.Size, MetaFileId = metaFile.Id, MetaFileName = metaFile.Filename, Rows = blob.GetNumberOfRows(), UserName = dataFile.CreatedBy.Email, Status = DataImportStatus.QUEUED, Created = dataFile.Created, Permissions = await _userService.GetDataFilePermissions(dataFile) }; }); })); }