internal async Task <bool> UploadProjects() { string clientID = link.ClientIDForUplinkProject; //AbstractProject abstractProject = projects[1]; // Test line foreach (AbstractProject abstractProject in projects) { Log.AddLog("Adding project to XTRF: " + abstractProject.ExternalProjectCode, ErrorLevels.Information); try { HttpResponseMessage response; string newXTRFProjectID = ""; string newXTRFProjectIDCode = ""; XTRF_CreateProjectRequest xcprequest = new XTRF_CreateProjectRequest() { clientId = Int32.Parse(clientID), name = MappingManager.GetScriptedValue(link, MapType.ProjectName, abstractProject), serviceId = Convert.ToInt32(MappingManager.DoMappingToUplinkCustomValues(MapType.Workflow, link, MappingManager.GetScriptedValue(link, MapType.Workflow, abstractProject))) }; try { response = await client.PostAsJsonAsync("v2/projects", xcprequest); response.EnsureSuccessStatusCode(); XTRF_ProjectCreateResponse xpcresponse = await response.Content.ReadAsAsync <XTRF_ProjectCreateResponse>(); newXTRFProjectID = xpcresponse.id; newXTRFProjectIDCode = xpcresponse.projectIdNumber; } catch (Exception ex) { throw new Exception("XTRF project creation failed. " + ex.Message); } try { XTRF_SetSourceLanguage xssl = new XTRF_SetSourceLanguage() { sourceLanguageId = Convert.ToInt32(MappingManager.DoMappingToUplinkGeneral(MapType.Language, link.UplinkBTMSSystemTypeID, abstractProject.SourceLanguageID.ToString())) }; response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/sourceLanguage", xssl); } catch (Exception ex) { Log.AddLog("XTRF project source language (" + abstractProject.SourceLanguageID.ToString() + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { XTRF_SetTargetLanguage xstl = new XTRF_SetTargetLanguage(); foreach (int languageID in abstractProject.TargetLanguageIDs) { try { xstl.targetLanguageIds.Add(Convert.ToInt32(MappingManager.DoMappingToUplinkGeneral(MapType.Language, link.UplinkBTMSSystemTypeID, languageID.ToString()))); } catch (Exception ex) { Log.AddLog("XTRF project target language is not mapped (" + languageID.ToString() + " ). " + ex.Message, ErrorLevels.Error); } } if (xstl.targetLanguageIds.Count > 0) { response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/targetLanguages", xstl); } } catch (Exception ex) { Log.AddLog("XTRF project target language setting error. " + ex.Message, ErrorLevels.Error); } try { XTRF_SetSpecialization xsspec = new XTRF_SetSpecialization() { specializationId = Convert.ToInt32(MappingManager.DoMappingToUplinkGeneral(MapType.Speciality, link.UplinkBTMSSystemTypeID, abstractProject.SpecialityID.ToString())) }; response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/specialization", xsspec); } catch (Exception ex) { Log.AddLog("XTRF project specialization (" + abstractProject.SpecialityID.ToString() + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { XTRF_SetClientContact xscc = new XTRF_SetClientContact(); xscc.primaryId = Convert.ToInt32(MappingManager.DoMappingToUplinkCustomValues(MapType.Contact, link, abstractProject.ExternalProjectManagerName)); response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/clientContacts", xscc); } catch (Exception ex) { Log.AddLog("XTRF project client PM (" + abstractProject.ExternalProjectManagerName + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } XTRF_SetValue xsv = new XTRF_SetValue(); DateTimeOffset dto; try { dto = new DateTimeOffset(abstractProject.Deadline); xsv.value = dto.ToUnixTimeMilliseconds().ToString(); response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/clientDeadline", xsv); } catch (Exception ex) { Log.AddLog("XTRF project deadline (" + abstractProject.Deadline.ToString() + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { dto = new DateTimeOffset(abstractProject.DateOrdered); xsv.value = dto.ToUnixTimeMilliseconds().ToString(); response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/orderDate", xsv); } catch (Exception ex) { Log.AddLog("XTRF project order date (" + abstractProject.DateOrdered.ToString() + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { xsv.value = abstractProject.ClientNotes; response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/clientNotes", xsv); } catch (Exception ex) { Log.AddLog("XTRF project client notes (" + abstractProject.ClientNotes + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { xsv.value = abstractProject.ExternalProjectCode; response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/clientReferenceNumber", xsv); } catch (Exception ex) { Log.AddLog("XTRF project client reference number (" + abstractProject.ExternalProjectCode + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { xsv.value = abstractProject.PMNotes; response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/internalNotes", xsv); } catch (Exception ex) { Log.AddLog("XTRF project PM notes (" + abstractProject.PMNotes + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { xsv.value = abstractProject.VendorNotes; response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/vendorInstructions", xsv); } catch (Exception ex) { Log.AddLog("XTRF project vendor instructions (" + abstractProject.VendorNotes + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { xsv.value = abstractProject.PayableVolume.ToString(); response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/volume", xsv); } catch (Exception ex) { Log.AddLog("XTRF project volume (" + abstractProject.PayableVolume.ToString() + " ) cannot be set. " + ex.Message, ErrorLevels.Error); } try { try { xsv.value = ""; foreach (var analysisCategory in abstractProject.AnalysisCategories) { if (xsv.value != "") { xsv.value += "¤"; } xsv.value += ((analysisCategory.StartPc == -1) ? "Rep" : ("F" + analysisCategory.StartPc)) + ";" + analysisCategory.WordCount + ";" + analysisCategory.Weight; } response = await client.PutAsJsonAsync("v2/projects/" + newXTRFProjectID + "/customFields/BeLazyField", xsv); } catch (Exception ex) { throw new Exception("XTRF project custom field cannot be set. " + ex.Message); } // Hard coded IDs for PoC purposes int viewID = 0, macroID = 0; switch (link.linkID) { case 1: viewID = 62; macroID = 4; break; case 2: viewID = 62; macroID = 9; break; default: break; } // End of hard coded values response = await client.GetAsync("browser?viewId=" + viewID + "&q.idNumber=" + newXTRFProjectIDCode); response.EnsureSuccessStatusCode(); string projectList = await response.Content.ReadAsStringAsync(); Regex internalProjectIDMatcher = new Regex(@"(?<=\s*""rows""\s*:\s*{\s*""\d+""\s*:\s*{\s*""id""\s*:\s*)(\d+)(?=,)"); if (internalProjectIDMatcher.IsMatch(projectList)) { int internalProjectID = Convert.ToInt32(internalProjectIDMatcher.Match(projectList).Value); XTRF_RunMacro xrm = new XTRF_RunMacro(); xrm.ids.Add(internalProjectID); response = await client.PostAsJsonAsync("macros/" + macroID + "/run", xrm); string akarmi = await response.Content.ReadAsStringAsync(); } } catch (Exception ex) { Log.AddLog("XTRF project macro cannot be run." + ex.Message, ErrorLevels.Error); } } catch (Exception ex) { Log.AddLog("Error while creating XTRF project. " + ex.Message, ErrorLevels.Error); } } return(true); }
internal async Task GenerateReport() { string clientID = link.ClientIDForUplinkProject; List <string> checkMappingWorkflows = new List <string>(); List <string> checkMappingLanguages = new List <string>(); List <string> checkMappingSpecialities = new List <string>(); List <string> checkMappingPMs = new List <string>(); foreach (AbstractProject abstractProject in projects) { try { string value = MappingManager.GetScriptedValue(link, MapType.Workflow, abstractProject); if (!checkMappingWorkflows.Contains(value)) { checkMappingWorkflows.Add(value); } if (!checkMappingLanguages.Contains(abstractProject.SourceLanguageID.ToString())) { checkMappingLanguages.Add(abstractProject.SourceLanguageID.ToString()); } foreach (int languageID in abstractProject.TargetLanguageIDs) { if (!checkMappingLanguages.Contains(languageID.ToString())) { checkMappingLanguages.Add(languageID.ToString()); } } if (!checkMappingSpecialities.Contains(abstractProject.SpecialityID.ToString())) { checkMappingSpecialities.Add(abstractProject.SpecialityID.ToString()); } if (!checkMappingPMs.Contains(abstractProject.ExternalProjectManagerName)) { checkMappingPMs.Add(abstractProject.ExternalProjectManagerName); } } catch (Exception ex) { Log.AddLog("Mapping check for XTRF failed for project: " + abstractProject.ExternalProjectCode, ErrorLevels.Error); } } Log.AddLog("XTRF uplink onboarding succesfully processed abstract projects", ErrorLevels.Information); Dictionary <string, string> checkXTRFValuesWorkflows = new Dictionary <string, string>(); Dictionary <string, string> checkXTRFValuesLanguages = new Dictionary <string, string>(); Dictionary <string, string> checkXTRFValuesPMs = new Dictionary <string, string>(); Dictionary <string, string> checkXTRFValuesSpecialities = new Dictionary <string, string>(); foreach (var wfItem in checkMappingWorkflows) { try { string value = MappingManager.DoMappingToUplinkCustomValues(MapType.Workflow, link, wfItem); if (!checkXTRFValuesWorkflows.ContainsKey(value)) { checkXTRFValuesWorkflows.Add(value, wfItem); } } catch (Exception ex) { if (!unmappedWorkflows.Contains(wfItem)) { unmappedWorkflows.Add(wfItem); } } } foreach (var langItem in checkMappingLanguages) { try { string value = MappingManager.DoMappingToUplinkGeneral(MapType.Language, link.UplinkBTMSSystemTypeID, langItem).ToString(); if (!checkXTRFValuesLanguages.ContainsKey(value)) { checkXTRFValuesLanguages.Add(value, langItem); } } catch (Exception ex) { if (!unmappedLanguages.Contains(langItem)) { unmappedLanguages.Add(langItem); } } } foreach (var spItem in checkMappingSpecialities) { try { string value = MappingManager.DoMappingToUplinkGeneral(MapType.Speciality, link.UplinkBTMSSystemTypeID, spItem).ToString(); if (!checkXTRFValuesSpecialities.ContainsKey(value)) { checkXTRFValuesSpecialities.Add(value, spItem); } } catch (Exception ex) { if (!unmappedSpecialities.Contains(spItem)) { unmappedSpecialities.Add(spItem); } } } foreach (var pmItem in checkMappingPMs) { try { string value = MappingManager.DoMappingToUplinkCustomValues(MapType.Contact, link, pmItem); if (!checkXTRFValuesPMs.ContainsKey(value)) { checkXTRFValuesPMs.Add(value, pmItem); } } catch (Exception ex) { if (!unmappedPMs.Contains(pmItem)) { unmappedPMs.Add(pmItem); } } } Log.AddLog("XTRF uplink onbboarding - SQL mapping check succesful.", ErrorLevels.Information); HttpResponseMessage response; try { response = await client.GetAsync("dictionaries/language/active"); response.EnsureSuccessStatusCode(); string xllJson = await response.Content.ReadAsStringAsync(); List <XTRF_Language> xllObj = JsonConvert.DeserializeObject <List <XTRF_Language> >(xllJson); List <int> activeXTRFLangs = xllObj.Select(x => x.id).ToList(); foreach (string languageItem in checkXTRFValuesLanguages.Keys) { if (!activeXTRFLangs.Contains(Convert.ToInt32(languageItem))) { unmappedLanguages.Add(checkXTRFValuesLanguages[languageItem] + " - " + languageItem); } } } catch (Exception ex) { Log.AddLog("Error processing XTRF language mappings. " + ex.Message, ErrorLevels.Error); } try { response = await client.GetAsync("dictionaries/specialization/active"); response.EnsureSuccessStatusCode(); string xslJson = await response.Content.ReadAsStringAsync(); List <XTRF_DictionaryItem> xslObj = JsonConvert.DeserializeObject <List <XTRF_DictionaryItem> >(xslJson); List <int> activeXTRFSpecializations = xslObj.Select(x => x.id).ToList(); foreach (string specializationItem in checkXTRFValuesSpecialities.Keys) { if (!activeXTRFSpecializations.Contains(Convert.ToInt32(specializationItem))) { unmappedSpecialities.Add(checkXTRFValuesSpecialities[specializationItem] + " - " + specializationItem); } } } catch (Exception ex) { Log.AddLog("Error processing XTRF specialization mappings. " + ex.Message, ErrorLevels.Error); } try { response = await client.GetAsync("services/active"); response.EnsureSuccessStatusCode(); string xservlJson = await response.Content.ReadAsStringAsync(); List <XTRF_DictionaryItem> xservlObj = JsonConvert.DeserializeObject <List <XTRF_DictionaryItem> >(xservlJson); List <int> activeXTRFServices = xservlObj.Select(x => x.id).ToList(); foreach (string serviceItem in checkXTRFValuesWorkflows.Keys) { if (!activeXTRFServices.Contains(Convert.ToInt32(serviceItem))) { unmappedWorkflows.Add(checkXTRFValuesWorkflows[serviceItem] + " - " + serviceItem); } } } catch (Exception ex) { Log.AddLog("Error processing XTRF services (workflow) mappings. " + ex.Message, ErrorLevels.Error); } try { foreach (var contactID in checkXTRFValuesPMs.Keys) { try { response = await client.GetAsync("customers/persons/" + contactID); response.EnsureSuccessStatusCode(); string xcJson = await response.Content.ReadAsStringAsync(); XTRF_Contact xc = JsonConvert.DeserializeObject <XTRF_Contact>(xcJson); if (xc.customerId.ToString() != clientID) { unmappedPMs.Add(checkXTRFValuesPMs[contactID] + " - " + contactID); } } catch (Exception ex) { unmappedPMs.Add(checkXTRFValuesPMs[contactID] + " - " + contactID); } } } catch (Exception ex) { Log.AddLog("Error processing XTRF client PM mappings. " + ex.Message, ErrorLevels.Error); } Log.AddLog("Generating output for XTRF uplink onboarding.", ErrorLevels.Information); GenerateOutput(); }