コード例 #1
0
        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"));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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)
                    };
                });
            }));
        }