// ***************************************** IMPORT DATA ************************************************************* public ActionResult ImportData() { var model = new vmAdminImportData { }; return(View(model)); }
public ActionResult ImportData(vmAdminImportData model) { int UserIDX = db_Accounts.GetUserIDX(); //set dictionaries used to store stuff in memory Dictionary <string, int> colMapping = new Dictionary <string, int>(); //identifies the column number for each field to be imported //initialize variables bool headInd = true; bool anyError = false; //loop through each row foreach (string row in model.IMPORT_BLOCK.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries)) { //split row's columns into string array string[] cols = row.Split(new char[] { '\t' }, StringSplitOptions.None); if (cols.Length > 0) //skip blank rows { if (headInd) { //********************************************************** //HEADER ROW - LOGIC TO DETERMINE WHAT IS IN EACH COLUMN //********************************************************** colMapping = Utils.GetColumnMapping("P", cols); headInd = false; model.projects = new List <ProjectImportType>(); } else { //********************************************************** //NOT HEADER ROW - READING IN VALUES //********************************************************** var colList = cols.Select((value, index) => new { value, index }); var colDataIndexed = (from f in colMapping join c in colList on f.Value equals c.index select new { _Name = f.Key, _Val = c.value }).ToList(); Dictionary <string, string> fieldValuesDict = new Dictionary <string, string>(); //identifies the column number for each field to be imported //loop through all values and insert to list foreach (var c in colDataIndexed) { fieldValuesDict.Add(c._Name, c._Val); } //VALIDATE ROW AND INSERT TO LOCAL OBJECT ProjectImportType p = db_EECIP.InsertOrUpdate_T_OE_PROJECT_local(UserIDX, fieldValuesDict); if (p.VALIDATE_CD == false) { anyError = true; } model.projects.Add(p); } } } //end each row //if no errors, just import. otherwise if (!anyError) { foreach (ProjectImportType ps in model.projects) { //import projects T_OE_PROJECTS x = ps.T_OE_PROJECT; Guid? ProjectIDX = db_EECIP.InsertUpdatetT_OE_PROJECTS(x.PROJECT_IDX, x.ORG_IDX, x.PROJ_NAME, x.PROJ_DESC, x.MEDIA_TAG, x.START_YEAR, x.PROJ_STATUS, x.DATE_LAST_UPDATE, x.RECORD_SOURCE, x.PROJECT_URL, x.MOBILE_IND, x.MOBILE_DESC, x.ADV_MON_IND, x.ADV_MON_DESC, x.BP_MODERN_IND, x.BP_MODERN_DESC, x.COTS, x.VENDOR, x.PROJECT_CONTACT, null, true, false, UserIDX, x.IMPORT_ID, true); //import features if (ps.FEATURES != null) { foreach (string f in ps.FEATURES.Split('|')) { if (f.Length > 0) { db_EECIP.InsertT_OE_PROJECT_TAGS(ProjectIDX.ConvertOrDefault <Guid>(), "Project Feature", f, UserIDX); } } } //import program areas if (ps.PROGRAM_AREAS != null) { foreach (string f in ps.PROGRAM_AREAS.Split('|')) { if (f.Length > 0) { db_EECIP.InsertT_OE_PROJECT_TAGS(ProjectIDX.ConvertOrDefault <Guid>(), "Program Area", f, UserIDX); } } } } //update azure search AzureSearch.PopulateSearchIndexProject(null); //clear form model.IMPORT_BLOCK = ""; model.projects = null; TempData["Success"] = "Data imported successfully"; } return(View(model)); }