public IActionResult GetEntities([FromQuery] string entityType = "")
        {
            try
            {
                var stopwatch = StopwatchLogger.Start(_log);
                _log.Info("Called MetadataController GetEntities");

                var result = _iMetadataManager.GetEntities(false).OrderBy(t => t.Name);

                if (entityType.ToLower() == "primaryentity")
                {
                    result = result.Where(a => a.Type.ToLower() == "primaryentity" || a.Type.ToLower() == "detailentity" || a.Type.ToLower() == "intersectentity").OrderBy(t => t.Name);
                }

                stopwatch.StopAndLog("GetEntities of MetadataController");
                return(_iJsonMessage.IgnoreNullableObject(result));
            }
            catch (Exception ex)
            {
                //_log.Error("Error calling MetadataController.GetEntities method.");
                //throw new Exception(ex.Message);
                _log.Error(ExceptionFormatter.SerializeToString(ex));
                return(StatusCode((int)HttpStatusCode.InternalServerError, ApiConstant.CustomErrorMessage));
            }
        }
        bool IManagerWorkFlowSecurity.InitializeRootTenantWorkFlow(Guid tenantId)
        {
            var allEntities = iMetadataManager.GetEntities(false);
            // Filtwer all  Workflow supported entity
            var workFlowEntities = (from allEntity in allEntities where allEntity.SupportWorkflow select allEntity).ToList();

            foreach (var workFlowEntity in workFlowEntities)
            {
                var entityContextAll = iMetadataManager.GetEntitityByName(workFlowEntity.Name);
                var entityContext    = iMetadataManager.GetEntityContextByEntityName(workFlowEntity.Name);
                foreach (var subtype in workFlowEntity.Subtypes)
                {
                    var workflowInfo = new WorkFlowInfo
                    {
                        WorkFlowId  = Guid.NewGuid(),
                        EntityId    = entityContext,
                        Status      = true,
                        SubTypeCode = iMetadataManager.GetSubTypeId(workFlowEntity.Name, subtype)
                    };
                    _managerWorkFlow.CreateWorkFlow(tenantId, workflowInfo);

                    //all steps from static classes (Transition)
                    List <WorkFlowResource> allSteps = WorkFlowHelper.GetAllSteps(entityContext);
                    var count = 0;
                    foreach (var allStep in allSteps)
                    {
                        var workFlowStep = new WorkFlowStepInfo
                        {
                            WorkFlowId     = workflowInfo.WorkFlowId,
                            TransitionType = new ItemName {
                                Id = allStep.Id
                            },
                            SequenceNumber = count++
                        };
                        workFlowStep.WorkFlowStepId = _managerWorkFlowStep.CreateWorkFlowStep(tenantId, workFlowStep);
                    }

                    // (Operations)
                    List <WorkFlowOperationInfo> workFlowOperations = new List <WorkFlowOperationInfo>();
                    foreach (var entityCon in entityContextAll.Operations)
                    {
                        if (entityCon.Name == "Create")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.Create,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                        else if (entityCon.Name == "Update")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.Update,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                        else if (entityCon.Name == "Delete")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.Delete,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                        else if (entityCon.Name == "UpdateStatus")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.UpdateStatus,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                    }
                    _managerOperation.CreateWorkFlowOperations(tenantId, workFlowOperations);
                    count = 0;
                    List <WorkFlowProcessInfo> workFlowProcesses = new List <WorkFlowProcessInfo>();
                    foreach (var workFlowOperation in workFlowOperations)
                    {
                        workFlowProcesses.Add(new WorkFlowProcessInfo
                        {
                            WorkFlowProcessId          = Guid.NewGuid(),
                            WorkFlowId                 = workflowInfo.WorkFlowId,
                            OperationOrTransactionId   = workFlowOperation.WorkFlowOperationId,
                            OperationOrTransactionType = (int)OperationOrTransactionType.Operation,
                            ProcessType                = (int)WorkFlowProcessType.PreProcess
                        });

                        workFlowProcesses.Add(new WorkFlowProcessInfo
                        {
                            WorkFlowProcessId          = Guid.NewGuid(),
                            WorkFlowId                 = workflowInfo.WorkFlowId,
                            OperationOrTransactionId   = workFlowOperation.WorkFlowOperationId,
                            OperationOrTransactionType = (int)OperationOrTransactionType.Operation,
                            ProcessType                = (int)WorkFlowProcessType.Process
                        });
                        workFlowProcesses.Add(new WorkFlowProcessInfo
                        {
                            WorkFlowProcessId          = Guid.NewGuid(),
                            WorkFlowId                 = workflowInfo.WorkFlowId,
                            OperationOrTransactionId   = workFlowOperation.WorkFlowOperationId,
                            OperationOrTransactionType = (int)OperationOrTransactionType.Operation,
                            ProcessType                = (int)WorkFlowProcessType.PostProcess
                        });
                    }
                    _managerWorkFlowProcess.CreateWorkFlowProcess(tenantId, workFlowProcesses);
                }
            }

            return(true);
        }