Exemple #1
0
        // 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());
        }
Exemple #2
0
        /// <summary>
        /// Get Instance Xml
        /// </summary>
        /// <param name="insstanceId"></param>
        /// <returns></returns>
        public static string GetInstanceXML(string insstanceId, IManager manager, IDataModelManager dataModelManager)
        {
            dataModelManager.GetDefaultDataModel(Enums.SQLOperation.SELECT, "Instance");
            dataModelManager.AddResultSet(new List <string>()
            {
                "DCRXML"
            });

            if (!string.IsNullOrEmpty(insstanceId))
            {
                dataModelManager.AddFilter("Id", Enums.ParameterType._int, insstanceId, 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);
            }
        }
        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);
            }
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        // 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");
            }
        }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        /// <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);
        }
Exemple #8
0
        /// <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
                }
            }
        }
Exemple #9
0
        /// <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);
        }