public ActionResult ApprenticeshipUpload(BulkUploadViewModel model)
        {
            String[] validFileTypes = { ".csv" };
            Boolean  validFileType  = false;

            foreach (String fileType in validFileTypes)
            {
                if (model.File.FileName.ToLower().EndsWith(fileType))
                {
                    validFileType = true;
                    break;
                }
            }
            if (!validFileType)
            {
                ModelState.AddModelError("File", AppGlobal.Language.GetText(this, "CSVFilesOnly", "Please upload a CSV file"));
            }
            if (ModelState.IsValid)
            {
                model.InitiateBulkUpload(userContext, db);
                model.Populate(userContext, db, Constants.BulkUpload_DataType.ApprenticeshipData);
                return(View("PostApprenticeshipUpload", model));
            }
            model.Populate(userContext, db, Constants.BulkUpload_DataType.ApprenticeshipData);
            return(View("Apprenticeships", model));
        }
 public BulkUpload()
 {
     NavigationPage.SetBackButtonTitle(this, "");
     InitializeComponent();
     BindingContext = _bulkUploadViewModel = new BulkUploadViewModel(Navigation);
     _bulkUploadViewModel.Initialize();
 }
Пример #3
0
        private BulkUploadViewModel BuildAssetsForDisplay(string rawCsv, int tenantId)
        {
            string[] csvRawLines = ProcessCsvLines(rawCsv);
            string[] csvHeader   = ProcessCsvHeader(csvRawLines[0]);

            IList <Asset>          assets = new List <Asset>();
            IList <List <string> > errors = new List <List <string> >();

            string[] csvLines = RemoveBlankLines(csvRawLines);

            for (int i = 1; i < csvLines.Length; i++)
            {
                ConvertedAsset convertedAsset = ProcessLineToAsset(csvHeader, csvLines[i], tenantId, i);
                assets.Add(convertedAsset.Asset);
                if (convertedAsset.Errors.Count > 0)
                {
                    errors.Add(convertedAsset.Errors);
                }
                convertedAsset.Asset.TenantId         = tenantId;
                convertedAsset.Asset.AssetMakeId      = convertedAsset.Asset.AssetMake.LookupId;
                convertedAsset.Asset.CategoryId       = convertedAsset.Asset.Category.LookupId;
                convertedAsset.Asset.WarrantyPeriodId = convertedAsset.Asset.WarrantyPeriod.LookupId;
            }
            Mapper.CreateMap <Asset, AssetViewModel>();
            var assetsForView = Mapper.Map <IList <AssetViewModel> >(assets);

            BulkUploadViewModel response = new BulkUploadViewModel
            {
                Errors = errors,
                Assets = assetsForView
            };

            return(response);
        }
        public FileContentResult ApprenticeshipDownload(BulkUploadViewModel model)
        {
            var transformedString = model.TransformToCsv(userContext, db, Constants.BulkUpload_DataType.ApprenticeshipData);
            var fileName          = model.GetCsvFileName(userContext, db, Constants.BulkUpload_DataType.ApprenticeshipData);

            return(File(transformedString, "text/csv", fileName));
        }
        public IActionResult Index()
        {
            BulkUploadViewModel model = new BulkUploadViewModel();

            model.bulkUpload.RTAsList     = _bulkUploadService.FillRTAs();
            model.bulkUpload.FileTypeList = _bulkUploadService.FillFileType();
            InitAccessModel(model);
            return(View(model));
        }
Пример #6
0
        public BulkUploadViewModel PrepareImport(HttpPostedFileBase importedCsv)
        {
            BulkImport bulkImportResponse = new BulkImport();
            string     csvRaw             = ConvertCsvFileToString(importedCsv);

            BatchId = BackupImport(csvRaw);
            BulkUploadViewModel assetsToCommit = BuildAssetsForDisplay(csvRaw, 0);

            return(assetsToCommit);
        }
Пример #7
0
        public BulkUploadViewModel PrepareImport(int batchId)
        {
            BulkImport bulkImport = BulkImportRepository.Single(x => x.BulkImportId == batchId);

            if (bulkImport != null)
            {
                BulkUploadViewModel assetsToCommit = BuildAssetsForDisplay(bulkImport.ImportText, 0);
                return(assetsToCommit);
            }
            return(new BulkUploadViewModel());
        }
        public ActionResult Apprenticeships()
        {
            if ((userContext.IsProvider() && Permission.HasPermission(false, true, Permission.PermissionName.CanBulkUploadProviderApprenticeshipFiles)) ||
                (userContext.IsOrganisation() && Permission.HasPermission(false, true, Permission.PermissionName.CanBulkUploadOrganisationApprenticeshipFiles)))
            {
                var model = new BulkUploadViewModel();
                model.Populate(userContext, db, Constants.BulkUpload_DataType.ApprenticeshipData);
                return(View(model));
            }

            return(Redirect());
        }
Пример #9
0
        public ActionResult RefreshReview(int id)
        {
            ImportService       importService = new ImportService(User.Identity.Name);
            BulkUploadViewModel response      = importService.PrepareImport(id);

            IEnumerable <TenantViewModel> listOfTenants = GetTenants();

            response.BatchId = id.ToString();
            response.Tenants = listOfTenants;

            Utilities.JsonCamelCaseResult result =
                new Utilities.JsonCamelCaseResult(response, JsonRequestBehavior.AllowGet);
            return(result);
        }
Пример #10
0
        public ActionResult ConfirmImport(BulkUploadViewModel batch)
        {
            ImportService importService      = new ImportService(User.Identity.Name);
            int           countOfAssetsAdded = importService.ProcessCommit(batch.BatchId, batch.SelectedTenant);

            Utilities.JsonCamelCaseResult result =
                new Utilities.JsonCamelCaseResult(
                    new BulkUploadViewModel
            {
                Success = true,
                Message = string.Format("{0} assets imported", countOfAssetsAdded)
            },
                    JsonRequestBehavior.AllowGet);
            return(result);
        }
Пример #11
0
        public ActionResult Upload(HttpPostedFileBase FileUpload)
        {
            ImportService       importService = new ImportService(User.Identity.Name);
            BulkUploadViewModel response      = importService.PrepareImport(FileUpload);
            string batchId = importService.BatchId;

            IEnumerable <TenantViewModel> listOfTenants = GetTenants();

            response.BatchId = batchId;
            response.Tenants = listOfTenants;

            Utilities.JsonCamelCaseResult result =
                new Utilities.JsonCamelCaseResult(response, JsonRequestBehavior.AllowGet);
            return(result);
        }
        public ActionResult ConfirmImport(BulkUploadViewModel batch)
        {
            ImportService importService = new ImportService(User.Identity.Name);
            int countOfAssetsAdded = importService.ProcessCommit(batch.BatchId, batch.SelectedTenant);

            Utilities.JsonCamelCaseResult result =
                new Utilities.JsonCamelCaseResult(
                    new BulkUploadViewModel
                    {
                        Success = true,
                        Message = string.Format("{0} assets imported", countOfAssetsAdded)
                    },
                    JsonRequestBehavior.AllowGet);
            return result;
        }
Пример #13
0
        public async Task <IActionResult> Upload()
        {
            var session = HttpContext.Session;

            session.SetString("Option", "BulkUploadApprenticeships");

            int?UKPRN;

            if (session.GetInt32("UKPRN") != null)
            {
                UKPRN = session.GetInt32("UKPRN").Value;
            }
            else
            {
                return(RedirectToAction("Index", "Home", new { errmsg = "Please select a Provider." }));
            }

            var provider = await _cosmosDbQueryDispatcher.ExecuteQuery(new GetProviderByUkprn { Ukprn = UKPRN.Value });

            if (provider == null)
            {
                return(RedirectToAction("Index", "Home", new { errmsg = "Failed to look up Provider details." }));
            }

            var courseCounts = await _courseService.GetCourseCountsByStatusForUKPRN(new CourseSearchCriteria(UKPRN));

            var courseErrors = courseCounts.IsSuccess
                ? courseCounts.Value.Where(x => (int)x.Status == (int)RecordStatus.MigrationPending && x.Count > 0 || (int)x.Status == (int)RecordStatus.MigrationReadyToGoLive && x.Count > 0).Count()
                : 500;

            var model = new BulkUploadViewModel
            {
                HasMigrationErrors = courseErrors > 0 ? true : false,
            };

            if (provider.ApprenticeshipBulkUploadStatus != null)
            {
                model.BulkUploadBackgroundInProgress     = provider.ApprenticeshipBulkUploadStatus.InProgress;
                model.BulkUploadBackgroundRowCount       = provider.ApprenticeshipBulkUploadStatus.TotalRowCount;
                model.BulkUploadBackgroundStartTimestamp = provider.ApprenticeshipBulkUploadStatus.StartedTimestamp;
            }

            return(View(model));
        }
        public IActionResult Upload()
        {
            _session.SetString("Option", "BulkUpload");
            int?UKPRN;

            if (_session.GetInt32("UKPRN") != null)
            {
                UKPRN = _session.GetInt32("UKPRN").Value;
            }
            else
            {
                return(RedirectToAction("Index", "Home", new { errmsg = "Please select a Provider." }));
            }

            Provider provider = FindProvider(UKPRN.Value);

            if (null == provider)
            {
                return(RedirectToAction("Index", "Home", new { errmsg = "Failed to look up Provider details." }));
            }

            var courseCounts = _courseService.GetCourseCountsByStatusForUKPRN(new CourseSearchCriteria(UKPRN)).Result;
            var courseErrors = courseCounts.IsSuccess
                ? courseCounts.Value.Where(x => (int)x.Status == (int)RecordStatus.MigrationPending && x.Count > 0 || (int)x.Status == (int)RecordStatus.MigrationReadyToGoLive && x.Count > 0).Count()
                : 500;

            var model = new BulkUploadViewModel
            {
                HasMigrationErrors = courseErrors > 0 ? true : false,
            };

            if (null != provider.BulkUploadStatus)
            {
                model.BulkUploadBackgroundInProgress     = provider.BulkUploadStatus.InProgress;
                model.BulkUploadBackgroundRowCount       = provider.BulkUploadStatus.TotalRowCount;
                model.BulkUploadBackgroundStartTimestamp = provider.BulkUploadStatus.StartedTimestamp;
            }

            return(View(model));
        }
Пример #15
0
 public FileHandler(BulkUploadViewModel model)
 {
     _model = model;
     _file  = model.File;
 }
Пример #16
0
        public async Task <IActionResult> Upload(IFormFile bulkUploadFile)
        {
            int?UKPRN;

            if (_session.GetInt32("UKPRN") != null)
            {
                UKPRN = _session.GetInt32("UKPRN").Value;
            }
            else
            {
                return(RedirectToAction("Index", "Home", new { errmsg = "Please select a Provider." }));
            }

            BulkUploadViewModel vm = new BulkUploadViewModel();

            string errorMessage;

            // COUR-1986 restoring delete for inline processing to fix issue with course errors accruing on the dashboard DQIs
            // NB: TEST WITH VOLUME!!! - this may cause time outs again
            var deleteResult = await _courseService.DeleteBulkUploadCourses(UKPRN.Value);

            if (!deleteResult.IsSuccess)
            {
                vm.errors = new string[] { deleteResult.Error };
            }
            else
            {
                if (Validate.ValidateFile(bulkUploadFile, out errorMessage))
                {
                    int    providerUKPRN         = UKPRN.Value;
                    string userId                = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
                    string bulkUploadFileNewName = string.Format(@"{0}-{1}", DateTime.Now.ToString("yyMMdd-HHmmss"),
                                                                 bulkUploadFile.FileName);

                    MemoryStream ms = new MemoryStream();
                    bulkUploadFile.CopyTo(ms);

                    if (!Validate.IsBinaryStream(ms))
                    {
                        int  csvLineCount  = _bulkUploadService.CountCsvLines(ms);
                        bool processInline = (csvLineCount <= _blobService.InlineProcessingThreshold);
                        _logger.LogInformation(
                            $"Csv line count = {csvLineCount} threshold = {_blobService.InlineProcessingThreshold} processInline = {processInline}");

                        if (processInline)
                        {
                            bulkUploadFileNewName +=
                                "." + DateTime.UtcNow.ToString("yyyyMMddHHmmss") +
                                ".processed"; // stops the Azure trigger from processing the file
                        }

                        Task task = _blobService.UploadFileAsync(
                            $"{UKPRN.ToString()}/Courses Bulk Upload/Files/{bulkUploadFileNewName}", ms);
                        task.Wait();

                        var errors = await _bulkUploadService.ProcessBulkUpload(ms, providerUKPRN, userId, processInline);

                        if (errors.Any())
                        {
                            vm.errors = errors;
                            return(View(vm));
                        }
                        else
                        {
                            if (processInline)
                            {
                                // All good => redirect to BulkCourses action
                                return(RedirectToAction("Index", "PublishCourses",
                                                        new { publishMode = PublishMode.BulkUpload, fromBulkUpload = true }));
                            }
                            else
                            {
                                return(RedirectToAction("Pending"));
                            }
                        }
                    }
                    else
                    {
                        vm.errors = new string[] { "Invalid file content." };
                    }
                }

                else
                {
                    vm.errors = new string[] { errorMessage };
                }
            }
            return(View(vm));
        }
Пример #17
0
        public async Task <IActionResult> BulkUpload(BulkUploadViewModel uf)
        {
            if (ModelState.IsValid)
            {
                _user = _userManager.GetUserAsync(User).GetAwaiter().GetResult();

                CsvReader csv;
                IEnumerable <BulkUploadDataViewModel> records;
                IFormFile file = uf.BulkUploadFile;

                if (file != null && file.Length > 0)
                {
                    using (var reader = new StreamReader(file.OpenReadStream()))
                    {
                        try
                        {
                            csv     = new CsvReader(reader);
                            records = csv.GetRecords <BulkUploadDataViewModel>();


                            foreach (BulkUploadDataViewModel budvm in records)
                            {
                                //Awesome - create a user for each row
                                User un = new User();
                                un.CompanyID   = HttpContext.Session.GetInt32("CompanyID") ?? 0;
                                un.CompanyName = HttpContext.Session.GetString("CompanyName") ?? "";
                                un.Role        = Roles.User;

                                un.EmailAddress      = budvm.EmailAddress;
                                un.Name              = budvm.Name;
                                un.PhoneNumber       = budvm.PhoneNumber;
                                un.Gender            = budvm.Gender;
                                un.InterfaceLanguage = budvm.InterfaceLanguage;
                                un.WebsiteLanguage   = budvm.ArticleLanguages;
                                un.Topics            = budvm.Topics;
                                un.Groups            = budvm.Groups;
                                un.TypeOfUser        = budvm.TypeOfUser;
                                un.Country           = budvm.Country;
                                un.State             = budvm.State;
                                un.City              = budvm.City;
                                un.CreatedOn         = DateTime.Now;
                                un.CreatedBy         = _user.UserName;


                                //now for the tricky bit - have to do a normal asp.net registration and if a companyadmin or admin set the appropriate claim type
                                //Create the user
                                var user = new UserViewModel {
                                    EmailAddress = budvm.EmailAddress, CompanyName = HttpContext.Session.GetString("CompanyName") ?? "", CompanyID = HttpContext.Session.GetInt32("CompanyID") ?? 0, Name = budvm.Name
                                };

                                if (CreateDotNetUser(user, "ChangePassword1!").Succeeded)
                                {
                                    //Add the claim type - it will be exactly as per the type passed to the Index in the first place
                                    var userForClaims = await _userManager.FindByEmailAsync(user.EmailAddress);

                                    var ac = await _userManager.GetClaimsAsync(userForClaims);

                                    if (ac.Count() <= 0)
                                    {
                                        await _userManager.AddToRoleAsync(userForClaims, "User");

                                        await _userManager.AddClaimAsync(userForClaims, new Claim(ClaimTypes.Role, "User"));
                                    }
                                    //Add the user to the user table as well at the identity tables
                                    _context.Add(un);
                                }
                            }
                            await _context.SaveChangesAsync();

                            ViewBag.Message = "Users successfully created";
                            return(RedirectToAction("Index", "Users", new { id = HttpContext.Session.GetString("ManageType") }));
                        }
                        catch (Exception e)
                        {
                            System.Diagnostics.Debug.WriteLine(e);
                            ViewBag.Message = e + System.Environment.NewLine;
                        }
                    }
                }
            }
            ViewBag.Message += "    User creation failed";
            return(View(uf));
        }
        private BulkUploadViewModel BuildAssetsForDisplay(string rawCsv, int tenantId)
        {
            string[] csvRawLines = ProcessCsvLines(rawCsv);
            string[] csvHeader = ProcessCsvHeader(csvRawLines[0]);

            IList<Asset> assets = new List<Asset>();
            IList<List<string>> errors = new List<List<string>>();

            string[] csvLines = RemoveBlankLines(csvRawLines);

            for (int i = 1; i < csvLines.Length; i++)
            {
                ConvertedAsset convertedAsset = ProcessLineToAsset(csvHeader, csvLines[i], tenantId, i);
                assets.Add(convertedAsset.Asset);
                if (convertedAsset.Errors.Count > 0)
                {
                    errors.Add(convertedAsset.Errors);
                }
                convertedAsset.Asset.TenantId = tenantId;
                convertedAsset.Asset.AssetMakeId = convertedAsset.Asset.AssetMake.LookupId;
                convertedAsset.Asset.CategoryId = convertedAsset.Asset.Category.LookupId;
                convertedAsset.Asset.WarrantyPeriodId = convertedAsset.Asset.WarrantyPeriod.LookupId;
            }
            Mapper.CreateMap<Asset, AssetViewModel>();
            var assetsForView = Mapper.Map<IList<AssetViewModel>>(assets);

            BulkUploadViewModel response = new BulkUploadViewModel
            {
                Errors = errors,
                Assets = assetsForView
            };
            return response;
        }
        public ActionResult ConfirmUpload(BulkUploadHistoryDetailViewModel bulkModel)
        {
            if ((userContext.IsProvider() && Permission.HasPermission(false, true, Permission.PermissionName.CanBulkUploadProviderFiles)) ||
                (userContext.IsOrganisation() && Permission.HasPermission(false, true, Permission.PermissionName.CanBulkUploadOrganisationFiles)))
            {
                var history = db.BulkUploads.FirstOrDefault(b => b.BulkUploadId.Equals(bulkModel.BulkUploadId));
                if (history == null)
                {
                    return(HttpNotFound());
                }

                if (userContext.ItemId.HasValue)
                {
                    if ((userContext.IsOrganisation() && history.UserOrganisationId != userContext.ItemId) ||
                        (userContext.IsProvider() && history.UserProviderId != userContext.ItemId))
                    {
                        return(HttpNotFound());
                    }
                }
                else
                {
                    return(HttpNotFound());
                }

                // Check that the status is currently at "Needs Confirmation"
                if (history
                    .BulkUploadStatusHistories
                    .OrderByDescending(x => x.CreatedDateTimeUtc)
                    .First()
                    .BulkUploadStatusId != (Int32)Constants.BulkUploadStatus.Needs_Confirmation)
                {
                    return(HttpNotFound());
                }

                var model = new BulkUploadViewModel
                {
                    Summary = new UploadSummary
                    {
                        TargetFileUrl = history.FilePath,
                        FileName      = history.FileName
                    },
                    OverrideException = true
                };

                /*
                 * Matt - dev note
                 * ---------------------
                 * This section relates to replacing the in-application BulkUpload
                 * with a more efficient out-of-application service based system.
                 *
                 */
                try
                {
                    var bulkUploadService = new BulkUploadWCFServiceClient();
                    var parameters        = new ConfirmParameters
                    {
                        BulkUploadId = bulkModel.BulkUploadId,
                        UserId       =
                            history
                            .BulkUploadStatusHistories
                            .OrderByDescending(x => x.CreatedDateTimeUtc)
                            .First()
                            .AspNetUser
                            .Id
                    };
                    bulkUploadService.Confirm(parameters);
                }
                catch (FaultException <BulkUploadFault> ex)
                {
                    model.Message = String.Format("The bulk upload service reported an error: {0}", ex.Detail.Message);
                }

                /*
                 * end
                 */

                //model.InitiateBulkUpload(userContext, db);
                string viewName;
                if (history.FileContentType != null && history.FileContentType == (int)Constants.FileContentType.ApprenticeshipData)
                {
                    viewName = "PostApprenticeshipUpload";
                }
                else
                {
                    viewName = "PostCourseUpload";
                }

                //   var viewName = (bulkModel.FileContentType == Constants.FileContentType.CourseData ? "PostCourseUpload" : "PostApprenticeshipUpload");

                return(View(viewName, model));
            }
            return(Redirect());
        }