Ejemplo n.º 1
0
        public async Task IShouldCanSeeTheWalletExtract()
        {
            var viewModel = new ExtractViewModel();

            var mockForWalletService = new Mock <IWalletApplicationService>();

            mockForWalletService.Setup(d => d.GetExtract(It.IsAny <string>()))
            .ReturnsAsync(viewModel)
            .Verifiable();

            var mockForHttpContextAccessor = new Mock <IHttpContextAccessor>();

            mockForHttpContextAccessor.Setup(d => d.HttpContext.User.Identity.Name)
            .Returns(It.IsAny <string>())
            .Verifiable();

            var controller = new WalletController(
                mockForWalletService.Object,
                mockForHttpContextAccessor.Object);

            var result = await controller.Extract();

            var resultOk   = result as OkObjectResult;
            var resultData = resultOk.Value as BalanceViewModel;

            Assert.IsInstanceOfType(result, typeof(ActionResult));
            Assert.AreEqual(resultOk.StatusCode, 200);
            mockForWalletService.VerifyAll();
        }
Ejemplo n.º 2
0
        public JsonResult LoadUploadsJS(DTParameters param)
        {
            try
            {
                var dtSource = ExtractViewModel.GetExtracts(_unitOfWork);

                List <ExtractViewModel> data = new ResultSet_Extracts().GetResult(param.Search.Value, param.SortOrder, param.Start, param.Length, dtSource, null);
                int count = new ResultSet_Extracts().Count(param.Search.Value, dtSource, null);

                DTResult <ExtractViewModel> result = new DTResult <ExtractViewModel>
                {
                    draw            = param.Draw,
                    data            = data,
                    recordsFiltered = count,
                    recordsTotal    = count
                };

                return(Json(result));
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
                return(Json(new { error = ex.Message }));
            }
        }
Ejemplo n.º 3
0
        public JsonResult GetUploadNameJS(int uploadId)
        {
            var ajaxResponse = new AjaxResponse {
                Success = false, Message = "An error occurred while getting the upload name."
            };

            try
            {
                string uploadName;

                var upload = ExtractViewModel.GetExtract(_unitOfWork, uploadId);

                if (upload != null)
                {
                    uploadName = upload.Name;
                }
                else
                {
                    uploadName = "unknown";
                }

                ajaxResponse.Success = true;
                ajaxResponse.TheData = uploadName;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
            }

            return(Json(ajaxResponse));
        }
Ejemplo n.º 4
0
        public JsonResult LoadUploadItemsJS(DTParameters param)    //, int extractId)    //, int auditId)
        {
            try
            {
                var dtSource = ExtractViewModel.GetExtractItems(_unitOfWork, param.PrimaryId);

                //var dtsource = _unitOfWork.AuditExtracts.GetAll()
                //.Select(s => new ManageStatusesViewModel { StatusId = s.StatusId, Name = s.Name, Description = s.Description, IncludeInAuditYN = s.IncludeInAuditYN }).ToList();
                List <ExtractItemModel> data = new ResultSet_ExtractItems().GetResult(param.Search.Value, param.SortOrder, param.Start, param.Length, dtSource, null);
                int count = new ResultSet_ExtractItems().Count(param.Search.Value, dtSource, null);

                DTResult <ExtractItemModel> result = new DTResult <ExtractItemModel>
                {
                    draw            = param.Draw,
                    data            = data,
                    recordsFiltered = count,
                    recordsTotal    = count
                };

                return(Json(result));
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
                return(Json(new { error = ex.Message }));
            }
        }
Ejemplo n.º 5
0
        public JsonResult SaveUploadJS(ExtractViewModel extract)
        {
            var ajaxResponse = new AjaxResponse {
                Success = false, Message = "An error occurred while saving the upload."
            };

            //should have already been caught by client, but check again
            if (!ModelState.IsValid)
            {
                ajaxResponse.Message = "Please complete all required form fields.";
                return(Json(ajaxResponse));
            }

            try
            {
                extract.TheUnitOfWork = _unitOfWork;

                if (!extract.IsUniqueYN())   //Uniqueness of extract
                {
                    ajaxResponse.Message = "The upload name already exists.";
                    return(Json(ajaxResponse));
                }

                int id = extract.UpdateAndSave();

                ajaxResponse.Message = "Success";
                ajaxResponse.Success = true;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
            }

            return(Json(ajaxResponse));
        }
Ejemplo n.º 6
0
        public JsonResult EditUploadJS(int uploadId)
        {
            var ajaxResponse = new AjaxResponse {
                Success = false, Message = "There was a problem loading the upload."
            };
            ExtractViewModel model = new ExtractViewModel();

            try
            {
                var extract = ExtractViewModel.GetExtract(_unitOfWork, uploadId);

                if (extract == null)
                {
                    return(Json(ajaxResponse));
                }

                model.ExtractId = uploadId;
                model.Name      = extract.Name;
                model.NameSave  = extract.Name;

                ajaxResponse.Success = true;
                ajaxResponse.TheData = model;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
            }

            return(Json(ajaxResponse));
        }
Ejemplo n.º 7
0
        public JsonResult EditUploadJS(int uploadId)
        {
            var ajaxResponse = new AjaxResponse { Success = false, Message = "There was a problem loading the upload." };
            ExtractViewModel model = new ExtractViewModel();

            try
            {
                var extract = ExtractViewModel.GetExtract(_unitOfWork, uploadId);

                if (extract == null)
                {
                    return (Json(ajaxResponse));
                }

                model.ExtractId = uploadId;
                model.Name = extract.Name;
                model.NameSave = extract.Name;

                ajaxResponse.Success = true;
                ajaxResponse.TheData = model;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
            }

            return (Json(ajaxResponse));
        }
Ejemplo n.º 8
0
        public async Task <ExtractViewModel> GetExtract(string userEmail)
        {
            var user = await _userService.GetUserByEmail(userEmail);

            var transactions = user.Wallet.TransactionsHistory.OrderByDescending(d => d.CreatedAt).ToList();
            var result       = new ExtractViewModel()
            {
                DotzBalance         = user.Wallet.DotzBalance,
                HistoryTransactions = transactions.Select(d => _mapper.Map <ExtractItemViewModel>(d))
            };

            return(result);
        }
Ejemplo n.º 9
0
        public ActionResult ExportUploads()
        {
            string fileName = "OptimumRCM_Audits.csv";
            var    uploads  = ExtractViewModel.GetExtracts(_unitOfWork)
                              .Select(a => new
            {
                InternalUser = a.InternalUserId,
                a.Name,
                a.DateAdded
            })
                              .OrderBy(a => a.Name)
                              .ToList();

            MemoryStream csvStream = Utility.GenerateCsvStream(fileName, uploads);

            return(File(csvStream, "text/csv", fileName));
        }
Ejemplo n.º 10
0
        public ActionResult ManageUploads(int?uploadId)
        {
            ExtractViewModel upload;

            if (uploadId != null)
            {
                upload = ExtractViewModel.GetExtract(_unitOfWork, (int)uploadId);

                if (upload == null)
                {
                    throw new ApplicationException(string.Format("The Upload (ID: {0}) could not be loaded.", uploadId));
                }
            }
            else
            {
                upload = new ExtractViewModel();    //want extractId == 0
            }

            return(View("ManageUploads", upload));
        }
Ejemplo n.º 11
0
        public ActionResult ExportUploadData(int uploadId, string uploadName)
        {
            string fileName     = string.Format("OptimumRCM_UploadData_{0}.csv", Utility.SanitizeFileName(uploadName));
            var    extractItems = ExtractViewModel.GetExtractItems(_unitOfWork, uploadId)
                                  .Select(e => new
            {
                e.UserName,
                e.LastName,
                e.FirstName,
                e.EmployeeID,
                e.SecurityGroup
            }
                                          )
                                  .OrderBy(e => e.UserName)
                                  .ToList();

            MemoryStream csvStream = Utility.GenerateCsvStream(fileName, extractItems);

            return(File(csvStream, "text/csv", fileName));
        }
Ejemplo n.º 12
0
        public JsonResult DeleteUploadJS(ExtractViewModel extract)
        {
            var ajaxResponse = new AjaxResponse {
                Success = false, Message = string.Format("There was a problem deleting upload, ID: {0}", extract.ExtractId)
            };

            if (extract.ExtractId == 0)     //shouldn't happen
            {
                return(Json(ajaxResponse));
            }

            try
            {
                var existingExCount = _unitOfWork.Audits.GetAll().Where(a => a.ExtractId == extract.ExtractId).Count();

                if (existingExCount > 0)    //can't delete, its is in use
                {
                    ajaxResponse.Message = "Cannot delete an upload used in an audit";
                    return(Json(ajaxResponse));
                }

                int result = ExtractViewModel.DeleteExtract(_unitOfWork, (int)extract.ExtractId);

                if (result < 1)
                {
                    return(Json(ajaxResponse));
                }

                ajaxResponse.Message = "Success";
                ajaxResponse.Success = true;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
            }

            return(Json(ajaxResponse));
        }
Ejemplo n.º 13
0
        public JsonResult DeleteUploadJS(ExtractViewModel extract)
        {
            var ajaxResponse = new AjaxResponse { Success = false, Message = string.Format("There was a problem deleting upload, ID: {0}", extract.ExtractId) };

            if (extract.ExtractId == 0)     //shouldn't happen
            {
                return Json(ajaxResponse);
            }

            try
            {
                var existingExCount = _unitOfWork.Audits.GetAll().Where(a => a.ExtractId == extract.ExtractId).Count();

                if (existingExCount > 0)    //can't delete, its is in use
                {
                    ajaxResponse.Message = "Cannot delete an upload used in an audit";
                    return Json(ajaxResponse);
                }

                int result = ExtractViewModel.DeleteExtract(_unitOfWork, (int)extract.ExtractId);

                if (result < 1)
                {
                    return Json(ajaxResponse);
                }

                ajaxResponse.Message = "Success";
                ajaxResponse.Success = true;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
            }

            return Json(ajaxResponse);
        }
Ejemplo n.º 14
0
 /* ----------------------------------------------------------------- */
 ///
 /// SetOverwrite
 ///
 /// <summary>
 /// Subscribes the message to select the overwrite method.
 /// </summary>
 ///
 /// <param name="src">Source ViewModel.</param>
 /// <param name="value">
 /// Overwrite method to set when requested.
 /// </param>
 ///
 /// <returns>Object to clear the subscription.</returns>
 ///
 /* ----------------------------------------------------------------- */
 public static IDisposable SetOverwrite(this ExtractViewModel src, OverwriteMethod value) =>
 src.Subscribe <QueryMessage <OverwriteQuerySource, OverwriteMethod> >(e =>
 {
     e.Value  = value;
     e.Cancel = false;
 });
Ejemplo n.º 15
0
        public JsonResult SaveUploadJS(ExtractViewModel extract)
        {
            var ajaxResponse = new AjaxResponse { Success = false, Message = "An error occurred while saving the upload." };

            //should have already been caught by client, but check again
            if (!ModelState.IsValid)
            {
                ajaxResponse.Message = "Please complete all required form fields.";
                return Json(ajaxResponse);
            }

            try
            {
                extract.TheUnitOfWork = _unitOfWork;

                if (!extract.IsUniqueYN())   //Uniqueness of extract
                {
                    ajaxResponse.Message = "The upload name already exists.";
                    return Json(ajaxResponse);
                }

                int id = extract.UpdateAndSave();

                ajaxResponse.Message = "Success";
                ajaxResponse.Success = true;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
            }

            return Json(ajaxResponse);
        }
Ejemplo n.º 16
0
        public ActionResult ManageUploads(int? uploadId)
        {
            ExtractViewModel upload;

            if (uploadId != null)
            {
                upload = ExtractViewModel.GetExtract(_unitOfWork, (int)uploadId);

                if (upload == null)
                {
                    throw new ApplicationException(string.Format("The Upload (ID: {0}) could not be loaded.", uploadId));
                }
            }
            else
            {
                upload = new ExtractViewModel();    //want extractId == 0
            }

            return View("ManageUploads", upload);
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Performs the Audit.
        /// </summary>
        /// <exception cref="System.ApplicationException">A problem occurred while generating database snapshot.</exception>
        public void PerformAudit()
        {
            //when complete present...
            //1-Items from upload not included in audit
            //2-items in upload but not in master
            //3-items in master but not in upload
            //4-items in both but with differences

            Dictionary <string, ExtractItemModel> extractExclude = new Dictionary <string, ExtractItemModel>();
            List <ExtractItemModel> extractInclude  = new List <ExtractItemModel>();
            List <AuditException>   auditExceptions = new List <AuditException>();

            //Step 1: get extract contents, by default I'm not peristing it in the model
            var extractItems = ExtractViewModel.GetExtractItems(_unitOfWork, (int)this.ExtractId);

            //Step 2: determine which extract items can/should be used
            foreach (ExtractItemModel extractItem in extractItems)
            {
                if (!ExcludeFromAuditYN(extractItem))
                {
                    extractInclude.Add(extractItem);
                }
                else
                {
                    string userNameUse = (extractItem.UserName ?? string.Empty).Trim().ToLower();
                    if (!extractExclude.ContainsKey(userNameUse))
                    {
                        extractExclude.Add(userNameUse, extractItem);
                    }
                }
            }

            //Note: use extractInclude list as source for audit henceforth

            //Step #3: generate database snapshot against which to perform the audit, and build lookup
            var genResult = _unitOfWork.OptUsers.GenerateMasterUsersForAudit(this.AuditId);

            if (genResult < 1)
            {
                throw new ApplicationException("A problem occurred while generating database snapshot.");
            }

            //Step #4: fetch that database snapshot
            var databaseMaster = _unitOfWork.AuditMasterItems.GetAll()
                                 .Where(i => i.AuditId == this.AuditId)
                                 .Select(i => new AuditMasterItemModel
            {
                AuditMasterItemId = i.AuditMasterItemId,
                FirstName         = i.LastName,
                LastName          = i.LastName,
                Login             = i.Login,
                Facilities        = i.Facilities,
                Templates         = i.Templates,
                ProcessedYN       = false   //derived col to monitor audit status
            })
                                 .ToDictionary(i => i.Login.ToLower(), i => i);

            //Step #5: get some helper info to use during audit, e.g. id's for exception types
            //ugly code but prevents need for lookups during the audit

            int idInUploadButNotInMaster = _unitOfWork.AuditExceptionTypes.GetAll()
                                           .Where(t => t.Name == AuditExceptionTypeModel.InUploadButNotInMaster)
                                           .SingleOrDefault()
                                           .AuditExceptionTypeId;

            int idInMasterButNotInUpload = _unitOfWork.AuditExceptionTypes.GetAll()
                                           .Where(t => t.Name == AuditExceptionTypeModel.InMasterButNotInUpload)
                                           .SingleOrDefault()
                                           .AuditExceptionTypeId;

            int idInBothWithFacilityDifferences = _unitOfWork.AuditExceptionTypes.GetAll()
                                                  .Where(t => t.Name == AuditExceptionTypeModel.InBothWithFacilityDifferences)
                                                  .SingleOrDefault()
                                                  .AuditExceptionTypeId;

            int idInBothWithTemplateDifferences = _unitOfWork.AuditExceptionTypes.GetAll()
                                                  .Where(t => t.Name == AuditExceptionTypeModel.InBothWithTemplateDifferences)
                                                  .SingleOrDefault()
                                                  .AuditExceptionTypeId;

            int idInUploadButInvalid = _unitOfWork.AuditExceptionTypes.GetAll()
                                       .Where(t => t.Name == AuditExceptionTypeModel.InUploadButInvalid)
                                       .SingleOrDefault()
                                       .AuditExceptionTypeId;

            int idInUploadButHandleManually = _unitOfWork.AuditExceptionTypes.GetAll()
                                              .Where(t => t.Name == AuditExceptionTypeModel.InUploadButHandleManually)
                                              .SingleOrDefault()
                                              .AuditExceptionTypeId;

            //Step #6: iterate over upload/extract and perform audit
            foreach (ExtractItemModel extractItem in extractInclude)
            {
                string optTemplates = CalculateOptimumTemplatesForComparison(extractItem.SecurityGroup, this.Name);
                string optFac       = CalculateOptimumFacilitiesForComparison(extractItem.EmployeeID, this.Name);

                if (!databaseMaster.ContainsKey(extractItem.UserName.ToLower()))
                {
                    AuditException ex = new AuditException();
                    ex.AuditId = this.AuditId;
                    ex.AuditExceptionTypeId = idInUploadButNotInMaster;
                    //ex.AuditExceptionType.Name = AuditExceptionTypeModel.InExtractButNotInMaster;
                    ex.Message               = string.Format("User '{0}' occurs in upload but not in master", extractItem.UserName);
                    ex.UserNameFromOptimum   = extractItem.UserName;
                    ex.UserNameFromMaster    = string.Empty;
                    ex.FacilitiesFromMaster  = string.Empty;
                    ex.FacilitiesFromOptimum = optFac;
                    ex.TemplatesFromOptimum  = optTemplates;
                    ex.TemplatesFromMaster   = string.Empty;
                    _unitOfWork.AuditExceptions.Add(ex);
                }
                else
                {
                    //in both but check for facility differences

                    AuditMasterItemModel dbItem = databaseMaster[extractItem.UserName.ToLower()];
                    dbItem.ProcessedYN = true;  //indicate that db entry has been processed

                    string dbFac       = CalculateDatabaseFacilitiesForComparison(dbItem.Facilities, this.Name);
                    string dbTemplates = CalculateDatabaseTemplatesForComparison(dbItem.Templates, this.Name);

                    if (optFac != dbFac)
                    {
                        AuditException ex = new AuditException();
                        ex.AuditId = this.AuditId;
                        ex.AuditExceptionTypeId = idInBothWithFacilityDifferences;
                        ex.Message               = string.Format("User '{0}' occurs in both but facilities differ", extractItem.UserName);
                        ex.UserNameFromOptimum   = extractItem.UserName;
                        ex.UserNameFromMaster    = extractItem.UserName;
                        ex.FacilitiesFromMaster  = dbFac;
                        ex.FacilitiesFromOptimum = optFac;
                        ex.TemplatesFromOptimum  = optTemplates;
                        ex.TemplatesFromMaster   = dbTemplates;
                        _unitOfWork.AuditExceptions.Add(ex);
                    }

                    //in both but check for template differences
                    if (optTemplates != dbTemplates)
                    {
                        AuditException ex = new AuditException();
                        ex.AuditId = this.AuditId;
                        ex.AuditExceptionTypeId = idInBothWithTemplateDifferences;
                        ex.Message               = string.Format("User '{0}' occurs in both but templates differ", extractItem.UserName);
                        ex.UserNameFromOptimum   = extractItem.UserName;
                        ex.UserNameFromMaster    = extractItem.UserName;
                        ex.FacilitiesFromMaster  = dbFac;
                        ex.FacilitiesFromOptimum = optFac;
                        ex.TemplatesFromOptimum  = optTemplates;
                        ex.TemplatesFromMaster   = dbTemplates;
                        _unitOfWork.AuditExceptions.Add(ex);
                    }
                }
            }

            //Step #7: make note of master items that were not processed
            foreach (string key in databaseMaster.Keys)
            {
                if (!databaseMaster[key].ProcessedYN && !extractExclude.ContainsKey(key))
                {
                    string dbFac       = CalculateDatabaseFacilitiesForComparison(databaseMaster[key].Facilities, this.Name);
                    string dbTemplates = CalculateDatabaseTemplatesForComparison(databaseMaster[key].Templates, this.Name);

                    AuditException ex = new AuditException();
                    ex.AuditId = this.AuditId;
                    ex.AuditExceptionTypeId = idInMasterButNotInUpload;
                    ex.Message               = string.Format("User '{0}' occurs in master but not in upload", key);
                    ex.UserNameFromMaster    = key;
                    ex.UserNameFromOptimum   = string.Empty;
                    ex.FacilitiesFromMaster  = dbFac;
                    ex.FacilitiesFromOptimum = string.Empty;
                    ex.TemplatesFromOptimum  = string.Empty;
                    ex.TemplatesFromMaster   = dbTemplates;
                    _unitOfWork.AuditExceptions.Add(ex);
                }
            }

            //Step #8: make note of extract items that were excluded - add them as exceptions
            foreach (ExtractItemModel extractItem in extractExclude.Values)
            {
                AuditException ex           = new AuditException();
                string         optTemplates = CalculateOptimumTemplatesForComparison(extractItem.SecurityGroup, this.Name);

                ex.AuditId              = this.AuditId;
                ex.TemplatesFromMaster  = string.Empty;
                ex.TemplatesFromOptimum = optTemplates;
                ex.UserNameFromMaster   = string.Empty;
                ex.FacilitiesFromMaster = string.Empty;
                ex.UserNameFromOptimum  = extractItem.UserName;

                if ((extractItem.EmployeeID ?? string.Empty).Trim().ToLower() == "multiple")
                {
                    ex.AuditExceptionTypeId = idInUploadButHandleManually;
                    ex.Message = string.Format("User '{0}' must be handled manually", extractItem.UserName);
                    ex.FacilitiesFromOptimum = extractItem.EmployeeID;
                }
                else
                {
                    string optFac = CalculateOptimumFacilitiesForComparison(extractItem.EmployeeID, this.Name);
                    ex.AuditExceptionTypeId = idInUploadButInvalid;
                    ex.Message = string.Format("User '{0}' from upload was excluded from audit", extractItem.UserName);
                    ex.FacilitiesFromOptimum = optFac;
                }

                _unitOfWork.AuditExceptions.Add(ex);
            }

            //Step #9: set end date
            Audit audit = _unitOfWork.Audits.GetAll().Where(a => a.AuditId == this.AuditId).SingleOrDefault();

            audit.AuditEndDate = DateTime.Now;

            //Step #9: commit everyting - may take a minute
            _unitOfWork.Save();
        }
Ejemplo n.º 18
0
        public ActionResult ShowUploadDetailOnly(int uploadId)
        {
            ExtractViewModel upload = ExtractViewModel.GetExtract(_unitOfWork, uploadId);

            return(View("UploadDetail", upload));
        }
Ejemplo n.º 19
0
        public JsonResult SaveAndUploadDataJS()
        {
            var ajaxResponse = new AjaxResponse {
                Success = false, Message = "An error occurred while saving the upload."
            };

            //added additional try/catches for debugging a problem

            try
            {
                //should have already been caught by client, but check again
                if (!ModelState.IsValid)
                {
                    ajaxResponse.Message = "Please complete all required form fields.";
                    return(Json(ajaxResponse));
                }
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
                ajaxResponse.Message = "There was a problem validating your input, please try again.";
                return(Json(ajaxResponse));
            }

            //validation
            HttpPostedFileBase hpf;

            try
            {
                if (Request.Files.Count != 1)
                {
                    ajaxResponse.Message = "More than one upload file was specified.";
                    return(Json(ajaxResponse));
                }

                hpf = Request.Files[0] as HttpPostedFileBase;
                if (hpf.ContentLength == 0)
                {
                    ajaxResponse.Message = "The specified upload file is empty.";
                    return(Json(ajaxResponse));
                }

                int maxFileBytes = Properties.Settings.Default.MaxUploadSize;
                if (hpf.ContentLength > maxFileBytes)
                {
                    ajaxResponse.Message = string.Format("The upload file should not exceed {0} bytes.", maxFileBytes);
                    return(Json(ajaxResponse));
                }

                if (!Request.Files[0].FileName.ToLower().EndsWith(".csv"))
                {
                    ajaxResponse.Message = "The upload file must be a CSV file.";
                    return(Json(ajaxResponse));
                }
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
                ajaxResponse.Message = "There was a problem validating the specified file.";
                return(Json(ajaxResponse));
            }

            //int extractId = Convert.ToInt32(Request.Form["extractIdJS"]);
            string           extractName;
            string           internalUserId;
            ExtractViewModel extract;

            ajaxResponse.Success = false;

            try
            {
                extractName    = Request.Form["extractNameJS"];
                internalUserId = Utility.GetAspNetUserName(this);
                extract        = ExtractViewModel.NewExtract(_unitOfWork, extractName, internalUserId);

                if (!extract.IsUniqueYN())   //Uniqueness of extract
                {
                    ajaxResponse.Message = "The upload name already exists.";
                    return(Json(ajaxResponse));
                }
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
                ajaxResponse.Message = "There was a problem uniqueness of upload file.";
                return(Json(ajaxResponse));
            }

            try
            {
                extract.ExtractId = extract.AddAndSave();

                if (extract.ExtractId == 0)
                {
                    return(Json(ajaxResponse));
                }

                ajaxResponse.Id = extract.ExtractId;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
                ajaxResponse.Message = "There was a problem saving the main upload record.";
                return(Json(ajaxResponse));
            }

            //proceed with upload
            try
            {
                extract.UploadExtract(hpf.InputStream);

                ajaxResponse.Message = "Success";
                ajaxResponse.Success = true;
            }
            catch (Exception ex)
            {
                ErrorTools.HandleError(ex, ErrorLevel.NonFatal);    //just log, no redirect
                ajaxResponse.Message = "An error occurred while uploading the data.";
            }

            return(Json(ajaxResponse));
        }