/// <summary> /// Get process/graph xml /// </summary> /// <param name="processId"></param> /// <param name="graphId"></param> /// <returns></returns> public static string GetProcessXML(string processId, string graphId, IManager manager, IDataModelManager dataModelManager) { dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, "Process"); dataModelManager.AddResultSet(new List <string>() { "DCRXML" }); if (!string.IsNullOrEmpty(processId)) { dataModelManager.AddFilter("Id", Enums.ParameterType._int, processId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); } else if (!string.IsNullOrEmpty(graphId)) { dataModelManager.AddFilter("graphId", Enums.ParameterType._int, graphId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); } else { return(string.Empty); } var data = manager.SelectData(dataModelManager.DataModel); if (data.Rows.Count > 0) { return(data.Rows[0]["DCRXML"].ToString()); } else { return(string.Empty); } }
/// <summary> /// Update simulation Id in instance table /// </summary> /// <param name="simulationId"></param> public static void UpdateInstance(string instanceId, string simulationId, string xml, IManager manager, IDataModelManager dataModelManager) { dataModelManager.GetDefaultDataModel(Enums.SQLOperation.UPDATE, "Instance"); dataModelManager.AddParameter("SimulationId", Enums.ParameterType._int, simulationId); dataModelManager.AddFilter("Id", Enums.ParameterType._int, instanceId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); if (!string.IsNullOrEmpty(xml)) { dataModelManager.AddParameter("DCRXML", Enums.ParameterType._xml, xml); } manager.UpdateData(dataModelManager.DataModel); }
public static string getXmlFromGuid(InitializeFormInput input) { try { _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, Enums.Tables.DCR_Subscription.ToString()); _dataModelManager.AddResultSet(new List <String> { "SubscriptionGUID", "DCRGraphID", "DCRUserName", "DCRPassword" }); _dataModelManager.AddFilter("SubscriptionGUID", Enums.ParameterType._string, input.Guid, Enums.CompareOperator.equal, Enums.LogicalOperator.none); var data = _sqlManager.SelectData(_dataModelManager.DataModel); if (data.Rows.Count == 0) { Errors.Add(new Error("getXmlFromGuid", 404, "Internal Error", input.Guid + " not found in database", new Input(input.Guid))); return(null); } else { try { var graphID = data.Rows[0]["DCRGraphID"].ToString(); var username = data.Rows[0]["DCRUserName"].ToString(); var password = data.Rows[0]["DCRPassword"].ToString(); //HERE: search repository given the graphID. Parse XML and add to activeforms. var xml = _dcrService.GetProcess(graphID, username, password); return(xml); } catch (RestRequestException e) { System.Net.HttpStatusCode code = e.statusCode; var st = 500; if (code == System.Net.HttpStatusCode.Forbidden) { st = 401; } else if (code == System.Net.HttpStatusCode.Unauthorized) { st = 403; } Errors.Add(new Error("getXmlFromGuid", st, "Internal Error", e.Message, new Input(input.Guid))); return(null); } } } catch (SqlCommandException e) { Errors.Add(new Error("getXmlFromGuid", 500, "Sql error: " + e.command, e.Message)); return(null); } }
/// <summary> /// Replace key values with actual employee values /// </summary> /// <param name="value"></param> private static string ReplaceValueWithEmployeeData(string columnName, string instanceId, IManager manager, IDataModelManager dataModelManager) { // get selected employee sam account name dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, DBEntityNames.Tables.InstanceExtension.ToString()); dataModelManager.AddResultSet(new List <string>() { DBEntityNames.InstanceExtension.Employee.ToString() }); dataModelManager.AddFilter(DBEntityNames.InstanceExtension.InstanceId.ToString(), Enums.ParameterType._string, instanceId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); var employeeId = manager.SelectData(dataModelManager.DataModel); if (employeeId.Rows.Count > 0) { var viewName = Configurations.Config.EmployeeView; // sql query dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, viewName); dataModelManager.AddResultSet(new List <string>() { columnName }); dataModelManager.AddFilter("EmployeeId", Enums.ParameterType._string, employeeId.Rows[0][DBEntityNames.InstanceExtension.Employee.ToString()].ToString(), Enums.CompareOperator.equal, Enums.LogicalOperator.none); try { var columnValue = manager.SelectData(dataModelManager.DataModel); return(columnValue.Rows[0][columnName].ToString()); } catch (Exception ex) { Logger logger = LogManager.GetCurrentClassLogger(); logger.Error(ex, "Error"); } } return(string.Empty); }
// GET: File public FileResult DownloadFile(string link) { _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, DBEntityNames.Tables.Document.ToString()); _dataModelManager.AddResultSet(new List <string>() { DBEntityNames.Document.Link.ToString(), DBEntityNames.Document.Title.ToString(), DBEntityNames.Document.Responsible.ToString(), DBEntityNames.Document.InstanceId.ToString(), DBEntityNames.Document.Type.ToString() }); _dataModelManager.AddFilter(DBEntityNames.Document.Link.ToString(), Enums.ParameterType._string, link, Enums.CompareOperator.like, Enums.LogicalOperator.none); var data = _manager.SelectData(_dataModelManager.DataModel); if (data.Rows.Count > 0) { var path = string.Empty; var type = data.Rows[0]["Type"].ToString(); switch (type) //TODO: Maybe needs to be extended, when we are to actually show the journalnotes, and be able to download them { case "PersonalDocument": var currentUser = Common.GetCurrentUserName(); path = Configurations.Config.PersonalFileLocation + "\\" + currentUser + "\\" + data.Rows[0]["Link"].ToString(); break; case "InstanceDocument": var instanceId = data.Rows[0]["InstanceId"].ToString(); path = Configurations.Config.InstanceFileLocation + "\\" + instanceId + "\\" + data.Rows[0]["Link"].ToString(); break; } string fileName = data.Rows[0]["Title"].ToString() + Path.GetExtension(link); byte[] filedata = System.IO.File.ReadAllBytes(path); string contentType = MimeMapping.GetMimeMapping(path); var cd = new System.Net.Mime.ContentDisposition { FileName = fileName, Inline = true, }; Response.AppendHeader("Content-Disposition", cd.ToString()); return(File(filedata, contentType)); } else { throw new Exception("File not found"); } }
/// <summary> /// Get formdata as html /// </summary> /// <param name="formId"></param> /// <param name="manager"></param> /// <param name="dataModelManager"></param> /// <returns></returns> public static string GetFormHtml(string formId, IManager manager, IDataModelManager dataModelManager) { var html = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "HtmlTemplates/FormTemplate.html"); dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, "FormItem"); dataModelManager.AddResultSet(new List <string> { "Id", "ItemId", "ItemText", "IsGroup", "SequenceNumber" }); dataModelManager.AddFilter("FormId", Enums.ParameterType._int, formId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); var formItems = manager.SelectData(dataModelManager.DataModel); var list = formItems.AsEnumerable().ToList(); var groups = list.Where(x => Boolean.Parse(x["IsGroup"].ToString())).OrderBy(x => int.Parse(x["SequenceNumber"].ToString())).ToList(); var formData = string.Empty; var sequenceNumber = 1; foreach (var group in groups) { formData += "<h3 style=\"color:rgb(64,173,72);page-break-inside: avoid;\">" + group["ItemText"].ToString() + "</h3>"; var questions = list.Where(x => !string.IsNullOrEmpty(x["ItemId"].ToString())).Where(x => x["ItemId"].ToString() == group["Id"].ToString()).OrderBy(x => int.Parse(x["SequenceNumber"].ToString())).ToList(); foreach (var question in questions) { var seqNumber = string.Empty; if (Boolean.Parse(question["IsGroup"].ToString()) == false) { seqNumber = sequenceNumber + ". "; } formData += "<p style=\"margin-left:20px;page-break-inside: avoid;\">" + seqNumber + question["ItemText"].ToString() + " </p>"; sequenceNumber++; } } html = html.Replace("#FormData#", formData); return(html); }
/// <summary> /// Get responsible all details with Id /// </summary> /// <param name="manager"></param> /// <param name="dataModelManager"></param> /// <returns></returns> public static DataTable GetResponsibleFullDetails(IManager manager, IDataModelManager dataModelManager, string samAccountName = "") { if (string.IsNullOrEmpty(samAccountName)) { var claim = ((ClaimsIdentity)Thread.CurrentPrincipal.Identity).FindFirst(ClaimTypes.Email); var userName = claim?.Value; if (userName == null) { claim = ((ClaimsIdentity)Thread.CurrentPrincipal.Identity).FindFirst(ClaimTypes.Upn); } samAccountName = claim?.Value; } dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, "UserDetail"); dataModelManager.AddResultSet(new List <string> { "Id", "SamAccountName", "Name", "Title", "Department", "ManagerId", "IsManager" }); dataModelManager.AddFilter("SamAccountName", Enums.ParameterType._string, samAccountName, Enums.CompareOperator.equal, Enums.LogicalOperator.none); var data = manager.SelectData(dataModelManager.DataModel); return(data); }
// POST api/values public IHttpActionResult AddProcess(List <Model> input) { var countAdded = 0; // add Instance foreach (var process in input) { var graphXml = string.Empty; graphXml = _dCRService.GetProcess(process.GraphId); _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, DBEntityNames.Tables.Process.ToString()); _dataModelManager.AddFilter(DBEntityNames.Process.GraphId.ToString(), Enums.ParameterType._int, process.GraphId.ToString(), Enums.CompareOperator.equal, Enums.LogicalOperator.and); _dataModelManager.AddFilter(DBEntityNames.Process.Status.ToString(), Enums.ParameterType._boolean, Boolean.FalseString, Enums.CompareOperator.equal, Enums.LogicalOperator.none); _dataModelManager.AddResultSet(new List <string> { DBEntityNames.Process.Id.ToString(), DBEntityNames.Process.GraphId.ToString(), DBEntityNames.Process.Status.ToString() }); var processes = _manager.SelectData(_dataModelManager.DataModel); if (processes.Rows.Count < 1) { _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.INSERT, DBEntityNames.Tables.Process.ToString()); _dataModelManager.AddParameter(DBEntityNames.Process.Title.ToString(), Enums.ParameterType._string, process.Title); _dataModelManager.AddParameter(DBEntityNames.Process.GraphId.ToString(), Enums.ParameterType._int, process.GraphId.ToString()); _dataModelManager.AddParameter(DBEntityNames.Process.DCRXML.ToString(), Enums.ParameterType._xml, graphXml); try { var processId = _manager.InsertData(_dataModelManager.DataModel); var phases = _dCRService.GetProcessPhases(process.GraphId); _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SP, DBEntityNames.StoredProcedures.AddProcessPhases.ToString()); _dataModelManager.AddParameter(DBEntityNames.AddProcessPhases.ProcessId.ToString(), Enums.ParameterType._int, (processId.Rows[0]["Id"]).ToString()); _dataModelManager.AddParameter(DBEntityNames.AddProcessPhases.PhaseXml.ToString(), Enums.ParameterType._xml, phases); _manager.ExecuteStoreProcedure(_dataModelManager.DataModel); countAdded++; } catch { } } else { UpdateProcessAndPhases(processes.Rows[0][DBEntityNames.Process.Id.ToString()].ToString(), processes.Rows[0][DBEntityNames.Process.GraphId.ToString()].ToString(), process.Title); countAdded++; } } if (countAdded > 0) { return(Ok(countAdded)); } return(Conflict()); }
/// <summary> /// Automatic Events /// </summary> /// <param name="instanceId"></param> /// <param name="graphId"></param> /// <param name="simulationId"></param> /// <param name="responsible"></param> private void AutomaticEvents(string instanceId, string graphId, string simulationId, string responsible) { for (int i = 0; i < Configurations.Config.AutomaticEventsLimit; i++) { _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, "InstanceAutomaticEvents"); _dataModelManager.AddResultSet(new List <string>() { "TOP(1) EventId", "EventTitle", "EventOpen", "IsEnabled", "IsPending", "IsIncluded", "IsExecuted", "EventType", "InstanceId", "Responsible", "EventTypeData" }); _dataModelManager.AddFilter("InstanceId", Enums.ParameterType._int, instanceId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); var automaticEvents = _manager.SelectData(_dataModelManager.DataModel); if (automaticEvents.Rows.Count == 0) { i = Configurations.Config.AutomaticEventsLimit; } else { var dataRow = automaticEvents.Rows[0]; var eventsXml = string.Empty; var instanceXml = string.Empty; // execute event _dcrService.ExecuteEvent(graphId, simulationId, dataRow["EventId"].ToString()); // get pending or enabled from active repository eventsXml = _dcrService.GetPendingOrEnabled(graphId, simulationId); Common.SyncEvents(instanceId, eventsXml, responsible, _manager, _dataModelManager); #region Alec Code // Alec Code will come up here switch (dataRow["EventType"].ToString()) { case "CreateCaseAcadre": // get parametes for acadre var parameters = Common.GetParametersFromEventTypeData(dataRow["EventTypeData"].ToString(), instanceId, _manager, _dataModelManager); // create casse in acadre if (parameters.Count > 0) { string caseId = Common.CreateCase(instanceId, parameters, _manager, _dataModelManager); string caseLink = Common.GetCaseLink(caseId); string CaseIdForeign = Common.GetCaseIdForeign(caseId); if (!string.IsNullOrEmpty(caseId)) { // update case Id and case link in open case manager _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.UPDATE, "Instance"); _dataModelManager.AddParameter("CaseNoForeign", Enums.ParameterType._string, CaseIdForeign); _dataModelManager.AddParameter("CaseLink", Enums.ParameterType._string, caseLink); _dataModelManager.AddParameter("InternalCaseID", Enums.ParameterType._string, caseId); _dataModelManager.AddFilter("Id", Enums.ParameterType._int, instanceId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); _manager.UpdateData(_dataModelManager.DataModel); } } break; case "CloseCaseAcadre": _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, "Instance"); _dataModelManager.AddResultSet(new List <string> { "InternalCaseID" }); _dataModelManager.AddFilter("Id", Enums.ParameterType._int, instanceId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); var data = _manager.SelectData(_dataModelManager.DataModel); if (data.Rows.Count > 0 && data.Rows[0]["InternalCaseID"].ToString() != "") { Common.CloseCase(data.Rows[0]["InternalCaseID"].ToString()); } break; case "UploadDocument": // get parametes for acadre var documentTitle = ""; parameters = Common.GetParametersFromEventTypeData(dataRow["EventTypeData"].ToString(), instanceId, _manager, _dataModelManager); if (parameters.ContainsKey("AssociatedEventId".ToLower())) { documentTitle = parameters["AssociatedEventId".ToLower()]; } // get document _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, DBEntityNames.Tables.Document.ToString()); _dataModelManager.AddResultSet(new List <string>() { DBEntityNames.Document.Id.ToString(), DBEntityNames.Document.Title.ToString(), DBEntityNames.Document.Link.ToString() }); if (string.IsNullOrEmpty(documentTitle)) { _dataModelManager.AddFilter(DBEntityNames.Document.Title.ToString(), Enums.ParameterType._string, documentTitle, Enums.CompareOperator.like, Enums.LogicalOperator.and); } else { _dataModelManager.AddFilter(DBEntityNames.Document.Title.ToString(), Enums.ParameterType._string, documentTitle, Enums.CompareOperator.equal, Enums.LogicalOperator.and); } _dataModelManager.AddFilter(DBEntityNames.Document.InstanceId.ToString(), Enums.ParameterType._int, instanceId, Enums.CompareOperator.equal, Enums.LogicalOperator.and); _dataModelManager.AddFilter(DBEntityNames.Document.IsActive.ToString(), Enums.ParameterType._boolean, bool.TrueString, Enums.CompareOperator.equal, Enums.LogicalOperator.and); _dataModelManager.AddFilter(DBEntityNames.Document.Type.ToString(), Enums.ParameterType._string, "Temp", Enums.CompareOperator.equal, Enums.LogicalOperator.none); var document = _manager.SelectData(_dataModelManager.DataModel); if (document.Rows.Count > 0) { var fileName = document.Rows[0][DBEntityNames.Document.Title.ToString()].ToString(); var filePath = document.Rows[0][DBEntityNames.Document.Link.ToString()].ToString(); fileName = fileName + Path.GetExtension(filePath); byte[] fileBytes = File.ReadAllBytes(filePath); // delete temp document try { string documentId = Common.CreateDocument(parameters, fileName, fileBytes, instanceId, _manager, _dataModelManager); } catch (Exception ex) { throw ex; } finally { var fileInfo = new FileInfo(filePath); if (fileInfo.Exists) { fileInfo.Directory.Delete(true); } _dataModelManager.GetDefaultDataModel(Enums.SQLOperation.UPDATE, DBEntityNames.Tables.Document.ToString()); _dataModelManager.AddParameter(DBEntityNames.Document.IsActive.ToString(), Enums.ParameterType._boolean, bool.FalseString); _dataModelManager.AddFilter(DBEntityNames.Document.Id.ToString(), Enums.ParameterType._int, document.Rows[0][DBEntityNames.Document.Id.ToString()].ToString(), Enums.CompareOperator.equal, Enums.LogicalOperator.none); _manager.UpdateData(_dataModelManager.DataModel); } } break; } #endregion } } }
/// <summary> /// Replace event type keys with actual values /// </summary> /// <param name="value"></param> /// <param name="instanceId"></param> /// <param name="manager"></param> /// <param name="dataModelManager"></param> /// <returns></returns> public static dynamic ReplaceEventTypeKeyValues(string value, string instanceId, IManager manager, IDataModelManager dataModelManager) { var instanceTitle = string.Empty; var caseForeignNo = string.Empty; var internalCaseId = string.Empty; dynamic returVal = value; // make a one time call to database for case title and case foreign number if ((value.Contains("$(Title)") || value.Contains("$(CaseNoForeign)") || value.Contains("$(InternalCaseId)")) && (string.IsNullOrEmpty(instanceTitle) && string.IsNullOrEmpty(caseForeignNo) && string.IsNullOrEmpty(internalCaseId))) { dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, "Instance"); dataModelManager.AddResultSet(new List <string>() { "Title", "CaseNoForeign", "InternalCaseID" }); dataModelManager.AddFilter("Id", Enums.ParameterType._int, instanceId, Enums.CompareOperator.equal, Enums.LogicalOperator.none); var instanceDetails = manager.SelectData(dataModelManager.DataModel); instanceTitle = instanceDetails.Rows[0]["Title"].ToString(); caseForeignNo = instanceDetails.Rows[0]["CaseNoForeign"].ToString(); internalCaseId = instanceDetails.Rows[0]["InternalCaseID"].ToString(); } if (value.Contains("$(Title)") && !string.IsNullOrEmpty(instanceTitle)) { returVal = value.Replace("$(Title)", instanceTitle); } else if (value.Contains("$(CaseNoForeign)") && !string.IsNullOrEmpty(caseForeignNo)) { returVal = value.Replace("$(CaseNoForeign)", caseForeignNo); } else if (value.Contains("$(InternalCaseId)") && !string.IsNullOrEmpty(internalCaseId)) { returVal = value.Replace("$(InternalCaseId)", internalCaseId); } else if (value.Contains("$(employee.")) { var occurences = value.Occurences("$(employee."); while (value.Contains("$(employee.") && occurences > 0) { var startIndexColumnKey = value.IndexOf("$(employee."); var endIndexColumnKey = -1; foreach (var key in value) { endIndexColumnKey++; if (key == ')') { break; } } var keyToReplace = value.Substring(startIndexColumnKey, (endIndexColumnKey + 1) - startIndexColumnKey); var startIndexColumnName = keyToReplace.IndexOf("."); startIndexColumnName++; var endIndexColumnName = -1; foreach (var key in keyToReplace) { endIndexColumnName++; if (key == ')') { break; } } var columnName = keyToReplace.Substring(startIndexColumnName, endIndexColumnName - startIndexColumnName); var columnValue = ReplaceValueWithEmployeeData(columnName, instanceId, manager, dataModelManager); if (!string.IsNullOrEmpty(columnValue)) { value = value.Replace(keyToReplace, columnValue); } occurences--; } returVal = value; } else if (value.Contains("$(loggedInUser)")) { returVal = value.Replace("$(loggedInUser)", GetCurrentUserName()); } else if (value.Equals("$(now)")) { returVal = DateTime.Now; } else if (value.Contains("$(now)")) { returVal = value.Replace("$(now)", DateTime.Now.ToString()); } return(returVal); }