From f06361b9fa50cfdfaefc0e9e95e3544e9fb7cf59 Mon Sep 17 00:00:00 2001 From: prashanth Date: Tue, 28 Apr 2026 16:24:59 +0530 Subject: [PATCH] Tenant Based Micro-Improvement Dashboard Creation --- .../project/ProcessAdminConstructor.scala | 11 +- .../ProjectMetabaseDashboardFunction.scala | 72 +++++---- .../UpdateAndAddAdminTenantFilter.scala | 97 ++++++++++++ ...ectMetabaseDashboardFunctionTestSpec.scala | 2 +- .../big-number/1_no_of_project_started.json | 2 +- .../2_no_of_project_inprogress.json | 2 +- .../big-number/3_no_of_project_submitted.json | 2 +- ...f_unique_assigned_project_on_platform.json | 2 +- ...no_of_project_submitted_with_evidence.json | 2 +- .../6_no_of_certificates_issued.json | 2 +- .../graph/1_submission_status_breakdown.json | 2 +- .../2_status_of_improvement_programs.json | 2 +- .../3_status_of_improvement_state_wise.json | 2 +- ...4_status_of_improvement_district_wise.json | 4 +- .../json/table/1_submission_data.json | 2 +- .../json/table/1_submission_data.json | 2 +- ...no_of_unique_user_started_the_project.json | 2 +- .../2_no_of_unique_user_in_progress.json | 2 +- ..._of_unique_user_submitted_the_project.json | 2 +- ..._of_unique_user_consuming_the_project.json | 2 +- ...ser_submitted_with_evidence_till_date.json | 2 +- .../graph/1_submission_status_breakdown.json | 2 +- .../graph/2_status_of_user_program_wise.json | 2 +- .../graph/3_status_of_user_state_wise.json | 2 +- .../graph/4_status_of_user_district_wise.json | 2 +- .../json/admin-filter/select_block.json | 20 +++ .../json/admin-filter/select_cluster.json | 19 +++ .../json/admin-filter/select_district.json | 20 +++ .../admin-filter/select_organisation.json | 19 +++ .../json/admin-filter/select_program.json | 19 +++ .../json/admin-filter/select_state.json | 19 +++ .../json/admin-parameter/admin-parameter.json | 139 ++++++++++-------- .../functions/ProcessAdminConstructor.scala | 11 +- .../ProjectMetabaseDashboardFunction.scala | 24 ++- .../UpdateAndAddAdminTenantFilter.scala | 97 ++++++++++++ 35 files changed, 486 insertions(+), 127 deletions(-) create mode 100644 metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/UpdateAndAddAdminTenantFilter.scala create mode 100644 metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_block.json create mode 100644 metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_cluster.json create mode 100644 metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_district.json create mode 100644 metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_organisation.json create mode 100644 metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_program.json create mode 100644 metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_state.json create mode 100644 metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/UpdateAndAddAdminTenantFilter.scala diff --git a/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProcessAdminConstructor.scala b/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProcessAdminConstructor.scala index 87195c5b..4f2ff0b6 100644 --- a/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProcessAdminConstructor.scala +++ b/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProcessAdminConstructor.scala @@ -12,12 +12,12 @@ import scala.util.{Failure, Success, Try} object ProcessAdminConstructor { private val logger = LoggerFactory.getLogger(ProcessAdminConstructor.getClass) - def ProcessAndUpdateJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, tabId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int, projects: String, solutions: String, metabaseUtil: MetabaseUtil, postgresUtil: PostgresUtil): ListBuffer[Int] = { + def ProcessAndUpdateJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, tabId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int, projects: String, solutions: String, tenantId: String, metabaseUtil: MetabaseUtil, postgresUtil: PostgresUtil): ListBuffer[Int] = { logger.info(s"=====> Started processing admin level json update function for Micro Improvements dashboard") val questionCardId = ListBuffer[Int]() val objectMapper = new ObjectMapper() - def processJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int): Unit = { + def processJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int, tenantId: String): Unit = { val dashcardsArray = objectMapper.createArrayNode() val queryResult = postgresUtil.fetchData(reportConfigQuery) queryResult.foreach { row => @@ -29,7 +29,7 @@ object ProcessAdminConstructor { val originalQuestionCard = configJson.path("questionCard") val chartName = Option(originalQuestionCard.path("name").asText()).getOrElse("Unknown Chart") val updatedQuestionCard = updateQuestionCardJsonValues(configJson, collectionId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, databaseId) - val finalQuestionCard = updatePostgresDatabaseQuery(updatedQuestionCard, projects, solutions) + val finalQuestionCard = updatePostgresDatabaseQuery(updatedQuestionCard, projects, solutions, tenantId) val requestBody = finalQuestionCard.asInstanceOf[ObjectNode] val cardId = mapper.readTree(metabaseUtil.createQuestionCard(requestBody.toString)).path("id").asInt() logger.info(s">>> Successfully created question card with card_id: $cardId for $chartName") @@ -128,7 +128,7 @@ object ProcessAdminConstructor { } } - def updatePostgresDatabaseQuery(json: JsonNode, projectsTable: String, solutionsTable: String): JsonNode = { + def updatePostgresDatabaseQuery(json: JsonNode, projectsTable: String, solutionsTable: String, tenantId: String): JsonNode = { Try { val queryNode = json.at("/dataset_query/native/query") if (queryNode.isMissingNode || !queryNode.isTextual) { @@ -138,6 +138,7 @@ object ProcessAdminConstructor { val updatedQuery = queryNode.asText() .replace("${config.projects}", projectsTable) .replace("${config.solutions}", solutionsTable) + .replace("${tenant_id}", s"'$tenantId'") val updatedJson = json.deepCopy().asInstanceOf[ObjectNode] updatedJson.at("/dataset_query/native") @@ -176,7 +177,7 @@ object ProcessAdminConstructor { }.toOption } - processJsonFiles(reportConfigQuery, collectionId, databaseId, dashboardId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId) + processJsonFiles(reportConfigQuery, collectionId, databaseId, dashboardId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, tenantId) logger.info(s"=====> Completed processing admin level json update function for Micro Improvements dashboard") questionCardId } diff --git a/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProjectMetabaseDashboardFunction.scala b/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProjectMetabaseDashboardFunction.scala index da5bdef8..5137e485 100644 --- a/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProjectMetabaseDashboardFunction.scala +++ b/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/ProjectMetabaseDashboardFunction.scala @@ -245,8 +245,8 @@ class ProjectMetabaseDashboardFunction(config: CombinedDashboardCreatorConfig)(i */ logger.info("-->> Process Program Manager Collection and project solution Dashboard") if (targetedSolutionId.nonEmpty && solutionName.nonEmpty && targetedProgramId.nonEmpty && programName.nonEmpty) { - val programCollectionName = s"$programName [org : $orgId]" - val programCollectionDescription = s"Program Id: $targetedProgramId\n\nProgram External Id: $programExternalId\n\nCollection For: Program Manager\n\nProgram Description: $programDescription" + val programCollectionName = s"$programName" + val programCollectionDescription = s"Program Id: $targetedProgramId\n\nProgram External Id: $programExternalId\n\nCreator Organisation: $orgId\n\nCollection For: Admin\n\nProgram Description: $programDescription" val solutionCollectionName = s"$solutionName [Project]" val solutionCollectionDescription = s"Solution Id: $targetedSolutionId\n\nSolution External Id: $solutionExternalId\n\nCollection For: Program Manager\n\nSolution Description: $solutionDescription" @@ -293,37 +293,49 @@ class ProjectMetabaseDashboardFunction(config: CombinedDashboardCreatorConfig)(i } } - def createMicroImprovementsCollectionAndDashboard(metaDataTable: String, reportConfig: String, databaseId: Int): Unit = { - val createDashboardQuery = s"UPDATE $metaDataTable SET status = 'Failed',error_message = 'errorMessage' WHERE id = '$admin';" - val (mipCollectionName, mipCollectionDescription) = (s"Micro Improvements", s"This collection contains dashboards that track the progress, participation, and effectiveness of Micro Improvement Projects across various programs.\n\nCollection For: Admin") - val mipCollectionId = Utils.checkAndCreateCollection(mipCollectionName, mipCollectionDescription, metabaseUtil) - if (mipCollectionId != -1) { - Utils.createGroupForCollection(metabaseUtil, s"Report_Admin_Micro_Improvement", mipCollectionId) - val (mipDashboardName, mipDashboardDescription) = (s"Overview - Across States and Programs", s"A consolidated view of project progress and user participation.") - val (mipDashboardId, projectTabId, userTabId, csvTabId) = Utils.createMicroImprovementsDashboardAndTabs(mipCollectionId, mipDashboardName, mipDashboardDescription, metabaseUtil) - if (projectTabId != -1 && userTabId != -1 && csvTabId != -1) { - val stateNameId: Int = getTheColumnId(databaseId, projects, "state_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) - val districtNameId: Int = getTheColumnId(databaseId, projects, "district_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) - val programNameId: Int = getTheColumnId(databaseId, projects, "program_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) - val blockNameId: Int = getTheColumnId(databaseId, projects, "block_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) - val clusterNameId: Int = getTheColumnId(databaseId, projects, "cluster_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) - val orgNameId: Int = getTheColumnId(databaseId, projects, "org_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) - val projectDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'Project-Details';" - val projectQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(projectDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, projectTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, metabaseUtil, postgresUtil) - val userDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'User-Details';" - val userQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(userDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, userTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, metabaseUtil, postgresUtil) - val submissionDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'Submission-Details-CSV';" - val submissionQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(submissionDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, csvTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, metabaseUtil, postgresUtil) - val mainQuestionIdsString = "[" + (projectQuestionCardIdList ++ userQuestionCardIdList ++ submissionQuestionCardIdList).mkString(",") + "]" - val parametersQuery: String = s"SELECT config FROM $reportConfig WHERE report_name = 'Project-Parameter' AND question_type = 'admin-parameter'" - UpdateParameters.UpdateAdminParameterFunction(metabaseUtil, parametersQuery, mipDashboardId, postgresUtil) - val projectMetadataJson = new ObjectMapper().createArrayNode().add(new ObjectMapper().createObjectNode().put("collectionId", mipCollectionId).put("collectionName", mipCollectionName).put("dashboardId", mipDashboardId).put("dashboardName", mipDashboardName).put("questionIds", mainQuestionIdsString)) - postgresUtil.insertData(s"UPDATE $metaDataTable SET main_metadata = COALESCE(main_metadata::jsonb, '[]'::jsonb) || '$projectMetadataJson' ::jsonb WHERE entity_id = '$admin';") - } else { - logger.info(s"Creating tabs failed please check: $projectTabId, $userTabId, $csvTabId") + def createMicroImprovementsCollectionAndDashboard(metaDataTable: String, reportConfig: String, databaseId: Int): Unit = { + val createDashboardQuery = s"UPDATE $metaDataTable SET status = 'Failed',error_message = 'errorMessage' WHERE id = '$admin';" + val (mipCollectionName, mipCollectionDescription) = (s"Micro Improvements [TenantId: $tenantId]", s"This collection contains dashboards that track the progress, participation, and effectiveness of Micro Improvement Projects across various programs.\n\nCollection For: Admin") + val mipCollectionId = Utils.checkAndCreateCollection(mipCollectionName, mipCollectionDescription, metabaseUtil) + if (mipCollectionId != -1) { + Utils.createGroupForCollection(metabaseUtil, s"Report_Admin_Micro_Improvement", mipCollectionId) + val (mipDashboardName, mipDashboardDescription) = (s"Overview - Across States and Programs", s"A consolidated view of project progress and user participation.") + val (mipDashboardId, projectTabId, userTabId, csvTabId) = Utils.createMicroImprovementsDashboardAndTabs(mipCollectionId, mipDashboardName, mipDashboardDescription, metabaseUtil) + if (projectTabId != -1 && userTabId != -1 && csvTabId != -1) { + val stateNameId: Int = getTheColumnId(databaseId, projects, "state_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) + val districtNameId: Int = getTheColumnId(databaseId, projects, "district_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) + val programNameId: Int = getTheColumnId(databaseId, projects, "program_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) + val blockNameId: Int = getTheColumnId(databaseId, projects, "block_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) + val clusterNameId: Int = getTheColumnId(databaseId, projects, "cluster_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) + val orgNameId: Int = getTheColumnId(databaseId, projects, "org_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) + val projectDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'Project-Details';" + val projectQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(projectDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, projectTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, tenantId, metabaseUtil, postgresUtil) + val userDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'User-Details';" + val userQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(userDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, userTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, tenantId, metabaseUtil, postgresUtil) + val submissionDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'Submission-Details-CSV';" + val submissionQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(submissionDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, csvTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, tenantId, metabaseUtil, postgresUtil) + val mainQuestionIdsString = "[" + (projectQuestionCardIdList ++ userQuestionCardIdList ++ submissionQuestionCardIdList).mkString(",") + "]" + val filterQuery: String = s"SELECT config FROM $reportConfig WHERE report_name = 'Project-Filters' AND question_type = 'admin-filter'" + val filterResults: List[Map[String, Any]] = postgresUtil.fetchData(filterQuery) + val objectMapper = new ObjectMapper() + val slugNameToTenantIdFilterMap = mutable.Map[String, Int]() + for (result <- filterResults) { + val configString = result.get("config").map(_.toString).getOrElse("") + val configJson = objectMapper.readTree(configString) + val slugName = configJson.findValue("name").asText() + val tenantIdFilter: Int = UpdateAndAddAdminTenantFilter.updateAndAddFilter(metabaseUtil, configJson: JsonNode, s"$tenantId", mipCollectionId, databaseId, projects, solutions) + slugNameToTenantIdFilterMap(slugName) = tenantIdFilter } + val immutableSlugNameToTenantIdFilterMap: Map[String, Int] = slugNameToTenantIdFilterMap.toMap + val parametersQuery: String = s"SELECT config FROM $reportConfig WHERE report_name = 'Project-Parameter' AND question_type = 'admin-parameter'" + UpdateParameters.updateParameterFunction(metabaseUtil, postgresUtil, parametersQuery, immutableSlugNameToTenantIdFilterMap, mipDashboardId) + val projectMetadataJson = new ObjectMapper().createArrayNode().add(new ObjectMapper().createObjectNode().put("collectionId", mipCollectionId).put("collectionName", mipCollectionName).put("dashboardId", mipDashboardId).put("dashboardName", mipDashboardName).put("questionIds", mainQuestionIdsString)) + postgresUtil.insertData(s"UPDATE $metaDataTable SET main_metadata = COALESCE(main_metadata::jsonb, '[]'::jsonb) || '$projectMetadataJson' ::jsonb WHERE entity_id = '$admin';") + } else { + logger.error(s"Creating tabs failed please check: $projectTabId, $userTabId, $csvTabId") } } + } def processStateDashboard(tenantId: String, stateName: String, targetedStateId: String, reportConfig: String, metaDataTable: String, databaseId: Int, projects: String, solutions: String, metabaseUtil: MetabaseUtil, postgresUtil: PostgresUtil, reportFor: String): Int = { val collectionName = s"$stateName State [Tenant : $tenantId]" diff --git a/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/UpdateAndAddAdminTenantFilter.scala b/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/UpdateAndAddAdminTenantFilter.scala new file mode 100644 index 00000000..77dffdbf --- /dev/null +++ b/metabase-jobs/combined-dashboard-creator/src/main/scala/org/shikshalokam/job/combined/dashboard/creator/functions/project/UpdateAndAddAdminTenantFilter.scala @@ -0,0 +1,97 @@ +package org.shikshalokam.job.combined.dashboard.creator.functions.project + +import com.fasterxml.jackson.databind.node.{ArrayNode, ObjectNode} +import com.fasterxml.jackson.databind.{JsonNode, ObjectMapper} +import org.shikshalokam.job.util.MetabaseUtil + +object UpdateAndAddAdminTenantFilter { + val objectMapper = new ObjectMapper() + + def updateAndAddFilter(metabaseUtil: MetabaseUtil, queryResult: JsonNode, tenantId: String, collectionId: Int, databaseId: Int, projectTable: String, solutionTable: String): Int = { + println(s"** Started to update and create filter questions for state dashboard") + val objectMapper = new ObjectMapper() + + def replaceTenantName(json: JsonNode, tenantId: String, projectTable: String, solutionTable: String): JsonNode = { + def processNode(node: JsonNode): JsonNode = { + node match { + case obj: ObjectNode => + obj.fieldNames().forEachRemaining { fieldName => + val childNode = obj.get(fieldName) + if (childNode.isTextual) { + var updatedText = childNode.asText() + + if (updatedText.contains("TENANTID")) { + updatedText = updatedText.replace("TENANTID", tenantId) + } + if (updatedText.contains("${config.projects}")) { + updatedText = updatedText.replace("${config.projects}", projectTable) + } + if (updatedText.contains("${config.solutions}")) { + updatedText = updatedText.replace("${config.solutions}", solutionTable) + } + obj.put(fieldName, updatedText) + } else { + obj.set(fieldName, processNode(childNode)) + } + } + obj + + case array: ArrayNode => + val newArray = array.deepCopy().asInstanceOf[ArrayNode] + newArray.removeAll() + array.elements().forEachRemaining { child => + newArray.add(processNode(child)) + } + newArray + + case _ => node + } + } + + val updatedJson = processNode(json.deepCopy()) + updatedJson + } + + def updateCollectionIdAndDatabaseId(jsonFile: JsonNode, collectionId: Int, databaseId: Int): JsonNode = { + try { + val questionCardNode = jsonFile.get("questionCard").asInstanceOf[ObjectNode] + if (questionCardNode == null) { + throw new IllegalArgumentException("'questionCard' node not found.") + } + questionCardNode.put("collection_id", collectionId) + val datasetQueryNode = questionCardNode.get("dataset_query").asInstanceOf[ObjectNode] + if (datasetQueryNode == null) { + throw new IllegalArgumentException("'dataset_query' node not found.") + } + datasetQueryNode.put("database", databaseId) + jsonFile + } catch { + case ex: Exception => + throw new RuntimeException(s"Error updating JSON: ${ex.getMessage}", ex) + } + } + + def getTheQuestionId(json: JsonNode): Int = { + try { + val requestBody = json.get("questionCard") + val questionCardResponse = metabaseUtil.createQuestionCard(requestBody.toString) + val responseJson = objectMapper.readTree(questionCardResponse) + Option(responseJson.get("id")).map(_.asInt()).getOrElse { + println("Error: 'id' field not found in the response.") + -1 + } + } catch { + case ex: Exception => + println(s"Error fetching 'id' from response: ${ex.getMessage}") + -1 + } + } + + + val ReplacedStateNameJson = replaceTenantName(queryResult, tenantId, projectTable, solutionTable) + val updatedJson = updateCollectionIdAndDatabaseId(ReplacedStateNameJson, collectionId, databaseId) + val questionId = getTheQuestionId(updatedJson) + println(s"** Completed to update and create filter questions for state dashboard") + questionId + } +} \ No newline at end of file diff --git a/metabase-jobs/combined-dashboard-creator/src/test/scala/org/shikshalokam/job/combined/dashboard/creator/spec/ProjectMetabaseDashboardFunctionTestSpec.scala b/metabase-jobs/combined-dashboard-creator/src/test/scala/org/shikshalokam/job/combined/dashboard/creator/spec/ProjectMetabaseDashboardFunctionTestSpec.scala index 7a5f3234..027c2c03 100644 --- a/metabase-jobs/combined-dashboard-creator/src/test/scala/org/shikshalokam/job/combined/dashboard/creator/spec/ProjectMetabaseDashboardFunctionTestSpec.scala +++ b/metabase-jobs/combined-dashboard-creator/src/test/scala/org/shikshalokam/job/combined/dashboard/creator/spec/ProjectMetabaseDashboardFunctionTestSpec.scala @@ -50,7 +50,7 @@ class ProjectMetabaseDashboardFunctionTestSpec extends BaseTestSpec { } def initialize() { - when(mockKafkaUtil.kafkaJobRequestSource[ProjectEvent](jobConfig.projectInputTopic)) + when(mockKafkaUtil.kafkaJobRequestSourceWithProperties[ProjectEvent](jobConfig.projectInputTopic, jobConfig.projectKafkaConsumerProperties)) .thenReturn(new ProjectMetabaseEventSource) when(mockKafkaUtil.kafkaStringSink(jobConfig.projectInputTopic)).thenReturn(new GenerateProjectSink) } diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/1_no_of_project_started.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/1_no_of_project_started.json index 415b363b..fc9dbe1d 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/1_no_of_project_started.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/1_no_of_project_started.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n COUNT(DISTINCT project_id) AS no_of_projects_started\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'started'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n COUNT(DISTINCT project_id) AS no_of_projects_started\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'started'\nAND tenant_id = ${tenant_id}\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/2_no_of_project_inprogress.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/2_no_of_project_inprogress.json index f4191d0f..1f0ebc14 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/2_no_of_project_inprogress.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/2_no_of_project_inprogress.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n COUNT(DISTINCT project_id) AS \"no_of_projects_inprogress\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'inProgress'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n COUNT(DISTINCT project_id) AS \"no_of_projects_inprogress\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND status = 'inProgress'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/3_no_of_project_submitted.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/3_no_of_project_submitted.json index fcb879d9..56bc63c7 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/3_no_of_project_submitted.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/3_no_of_project_submitted.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n COUNT(DISTINCT project_id) AS \"no_of_projects_submitted\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'submitted'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n COUNT(DISTINCT project_id) AS \"no_of_projects_submitted\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND status = 'submitted'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/4_no_of_unique_assigned_project_on_platform.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/4_no_of_unique_assigned_project_on_platform.json index 805109e6..5f2b6a80 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/4_no_of_unique_assigned_project_on_platform.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/4_no_of_unique_assigned_project_on_platform.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n count(DISTINCT solution_id)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND solution_id IS NOT NULL AND TRIM(solution_id) <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n count(DISTINCT solution_id)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND solution_id IS NOT NULL AND TRIM(solution_id) <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/5_no_of_project_submitted_with_evidence.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/5_no_of_project_submitted_with_evidence.json index c5cbb53d..2ad55291 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/5_no_of_project_submitted_with_evidence.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/5_no_of_project_submitted_with_evidence.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n COUNT(DISTINCT project_id) AS \"no_of_projects_having_evidence_with_submitted_status\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'submitted'\nAND evidence is not null AND TRIM(evidence) <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n COUNT(DISTINCT project_id) AS \"no_of_projects_having_evidence_with_submitted_status\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND status = 'submitted'\nAND evidence is not null AND TRIM(evidence) <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/6_no_of_certificates_issued.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/6_no_of_certificates_issued.json index 794cda59..7af654a7 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/6_no_of_certificates_issued.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/big-number/6_no_of_certificates_issued.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT COUNT(DISTINCT certificate_pdf_path) \nFROM ${config.projects}\nWHERE 1 = 1\nAND certificate_pdf_path IS NOT NULL \nAND certificate_pdf_path <> '' \n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1\n )\n ]] \n \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT COUNT(DISTINCT certificate_pdf_path) \nFROM ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND certificate_pdf_path IS NOT NULL \nAND certificate_pdf_path <> '' \n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/1_submission_status_breakdown.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/1_submission_status_breakdown.json index c836f635..d61a19bf 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/1_submission_status_breakdown.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/1_submission_status_breakdown.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT \n CASE \n WHEN ${config.projects}.status = 'started' THEN 'Started'\n WHEN ${config.projects}.status = 'inProgress' THEN 'In Progress'\n WHEN ${config.projects}.status = 'submitted' THEN 'Submitted'\n ELSE ${config.projects}.status\n END AS \"Project Status\",\n COUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\n AND ${config.solutions}.program_name IS NOT NULL\n [[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]]\n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.status\nORDER BY \"Total Projects\" DESC;\n\n" + "query": "SELECT \n CASE \n WHEN ${config.projects}.status = 'started' THEN 'Started'\n WHEN ${config.projects}.status = 'inProgress' THEN 'In Progress'\n WHEN ${config.projects}.status = 'submitted' THEN 'Submitted'\n ELSE ${config.projects}.status\n END AS \"Project Status\",\n COUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.solutions}.program_name IS NOT NULL\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.status\nORDER BY \"Total Projects\" DESC;" } }, "parameter_mappings": [], diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/2_status_of_improvement_programs.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/2_status_of_improvement_programs.json index b5a31db9..38e37961 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/2_status_of_improvement_programs.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/2_status_of_improvement_programs.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT DISTINCT(${config.solutions}.program_name) AS \"Programs\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.project_id END) AS \"Started Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.project_id END) AS \"In Progress Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.project_id END) AS \"Submitted Projects\", \nCOUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.solutions}.program_name is not null\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name\nORDER BY \"Total Projects\" DESC;" + "query": "SELECT DISTINCT(${config.solutions}.program_name) AS \"Programs\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.project_id END) AS \"Started Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.project_id END) AS \"In Progress Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.project_id END) AS \"Submitted Projects\", \nCOUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.solutions}.program_name is not null\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name\nORDER BY \"Total Projects\" DESC;" } }, "display": "bar", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/3_status_of_improvement_state_wise.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/3_status_of_improvement_state_wise.json index 14ce6fcc..4df8795b 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/3_status_of_improvement_state_wise.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/3_status_of_improvement_state_wise.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT DISTINCT(${config.projects}.state_name) AS \"State\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.project_id END) AS \"Started Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.project_id END) AS \"In Progress Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.project_id END) AS \"Submitted Projects\", \nCOUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.projects}.state_name is not null AND ${config.projects}.state_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.state_name\nORDER BY \"Total Projects\" DESC;" + "query": "SELECT DISTINCT(${config.projects}.state_name) AS \"State\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.project_id END) AS \"Started Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.project_id END) AS \"In Progress Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.project_id END) AS \"Submitted Projects\", \nCOUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.projects}.state_name is not null AND ${config.projects}.state_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.state_name\nORDER BY \"Total Projects\" DESC;" } }, "display": "bar", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/4_status_of_improvement_district_wise.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/4_status_of_improvement_district_wise.json index db7b9824..36617422 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/4_status_of_improvement_district_wise.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/graph/4_status_of_improvement_district_wise.json @@ -7,7 +7,7 @@ "type": "native", "native": { "template-tags": { - "block_param": { + "block_param": { "type": "dimension", "name": "block_param", "id": "bee6b62d-7188-4612-8a4e-d4395d31fcfe", @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT DISTINCT(${config.projects}.district_name) AS \"District\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.project_id END) AS \"Started Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.project_id END) AS \"In Progress Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.project_id END) AS \"Submitted Projects\", \nCOUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.projects}.district_name is not null AND ${config.projects}.district_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.district_name\nORDER BY \"Total Projects\" DESC;" + "query": "SELECT DISTINCT(${config.projects}.district_name) AS \"District\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.project_id END) AS \"Started Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.project_id END) AS \"In Progress Projects\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.project_id END) AS \"Submitted Projects\", \nCOUNT(DISTINCT ${config.projects}.project_id) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.projects}.district_name is not null AND ${config.projects}.district_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.district_name\nORDER BY \"Total Projects\" DESC;" } }, "display": "bar", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/table/1_submission_data.json b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/table/1_submission_data.json index f856816e..4389fa7b 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/table/1_submission_data.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Project-Details/json/table/1_submission_data.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT \n ${config.solutions}.program_name AS \"Program\",\n ${config.solutions}.name AS \"Project\",\n ${config.projects}.state_name AS \"State\",\n ${config.projects}.district_name AS \"District\",\n${config.projects}.block_name AS \"Block\", \n${config.projects}.cluster_name AS \"Cluster\",\n ${config.projects}.org_name AS \"Organisation\",\n SUM(CASE WHEN ${config.projects}.status = 'started' THEN 1 ELSE 0 END) AS \"Started\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' THEN 1 ELSE 0 END) AS \"In-Progress\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"In-Progress projects with evidence\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' THEN 1 ELSE 0 END) AS \"Submitted\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"Submitted projects with evidences\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.projects}.state_name is not null \n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name, ${config.solutions}.name,${config.projects}.state_name, ${config.projects}.district_name, \n${config.projects}.org_name,\n${config.projects}.block_name,\n${config.projects}.cluster_name\nORDER BY \"Submitted\" DESC;" + "query": "SELECT \n ${config.solutions}.program_name AS \"Program\",\n ${config.solutions}.name AS \"Project\",\n ${config.projects}.state_name AS \"State\",\n ${config.projects}.district_name AS \"District\",\n${config.projects}.block_name AS \"Block\", \n${config.projects}.cluster_name AS \"Cluster\",\n ${config.projects}.org_name AS \"Organisation\",\n SUM(CASE WHEN ${config.projects}.status = 'started' THEN 1 ELSE 0 END) AS \"Started\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' THEN 1 ELSE 0 END) AS \"In-Progress\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"In-Progress projects with evidence\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' THEN 1 ELSE 0 END) AS \"Submitted\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"Submitted projects with evidences\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.projects}.state_name is not null \n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name, ${config.solutions}.name,${config.projects}.state_name, ${config.projects}.district_name, \n${config.projects}.org_name,\n${config.projects}.block_name,\n${config.projects}.cluster_name\nORDER BY \"Submitted\" DESC;" } }, "display": "table", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/Submission-Details-CSV/json/table/1_submission_data.json b/metabase-jobs/config-data-loader/projectJson/Admin/Submission-Details-CSV/json/table/1_submission_data.json index 954fa362..16382bb6 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/Submission-Details-CSV/json/table/1_submission_data.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/Submission-Details-CSV/json/table/1_submission_data.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT \n ${config.solutions}.program_name AS \"Program\",\n ${config.solutions}.name AS \"Project\",\n ${config.projects}.state_name AS \"State\",\n ${config.projects}.district_name AS \"District\",\n${config.projects}.block_name AS \"Block\", \n${config.projects}.cluster_name AS \"Cluster\",\n ${config.projects}.org_name AS \"Organisation\",\n SUM(CASE WHEN ${config.projects}.status = 'started' THEN 1 ELSE 0 END) AS \"Started\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' THEN 1 ELSE 0 END) AS \"In-Progress\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"In-Progress projects with evidence\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' THEN 1 ELSE 0 END) AS \"Submitted\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"Submitted projects with evidences\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.projects}.state_name is not null \n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name, ${config.solutions}.name,${config.projects}.state_name, ${config.projects}.district_name, \n${config.projects}.org_name,\n${config.projects}.block_name,\n${config.projects}.cluster_name\nORDER BY \"Submitted\" DESC;" + "query": "SELECT \n ${config.solutions}.program_name AS \"Program\",\n ${config.solutions}.name AS \"Project\",\n ${config.projects}.state_name AS \"State\",\n ${config.projects}.district_name AS \"District\",\n${config.projects}.block_name AS \"Block\", \n${config.projects}.cluster_name AS \"Cluster\",\n ${config.projects}.org_name AS \"Organisation\",\n SUM(CASE WHEN ${config.projects}.status = 'started' THEN 1 ELSE 0 END) AS \"Started\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' THEN 1 ELSE 0 END) AS \"In-Progress\",\n SUM(CASE WHEN ${config.projects}.status = 'inProgress' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"In-Progress projects with evidence\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' THEN 1 ELSE 0 END) AS \"Submitted\",\n SUM(CASE WHEN ${config.projects}.status = 'submitted' AND ${config.projects}.evidence IS NOT NULL AND TRIM(${config.projects}.evidence) <> '' THEN 1 ELSE 0 END) AS \"Submitted projects with evidences\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.projects}.state_name is not null \n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name, ${config.solutions}.name,${config.projects}.state_name, ${config.projects}.district_name, \n${config.projects}.org_name,\n${config.projects}.block_name,\n${config.projects}.cluster_name\nORDER BY \"Submitted\" DESC;" } }, "display": "table", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/1_no_of_unique_user_started_the_project.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/1_no_of_unique_user_started_the_project.json index 3125bd77..119e7eda 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/1_no_of_unique_user_started_the_project.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/1_no_of_unique_user_started_the_project.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'started'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND status = 'started'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/2_no_of_unique_user_in_progress.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/2_no_of_unique_user_in_progress.json index e1b85a3a..738b2638 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/2_no_of_unique_user_in_progress.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/2_no_of_unique_user_in_progress.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'inProgress'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND status = 'inProgress'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/3_no_of_unique_user_submitted_the_project.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/3_no_of_unique_user_submitted_the_project.json index 233f9f3d..12df04b7 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/3_no_of_unique_user_submitted_the_project.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/3_no_of_unique_user_submitted_the_project.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'submitted'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND status = 'submitted'\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/4_no_of_unique_user_consuming_the_project.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/4_no_of_unique_user_consuming_the_project.json index 2937f0b6..80c14730 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/4_no_of_unique_user_consuming_the_project.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/4_no_of_unique_user_consuming_the_project.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND created_by IS NOT NULL\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n count(DISTINCT created_by)\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND created_by IS NOT NULL\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/5_no_of_unique_user_submitted_with_evidence_till_date.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/5_no_of_unique_user_submitted_with_evidence_till_date.json index 260fc3f2..9518ebd7 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/5_no_of_unique_user_submitted_with_evidence_till_date.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/big-number/5_no_of_unique_user_submitted_with_evidence_till_date.json @@ -6,7 +6,7 @@ "database": 2, "type": "native", "native": { - "query": "SELECT\n COUNT(DISTINCT created_by) AS \"no_of_projects_having_evidence_with_submitted_status\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND status = 'submitted' \nAND evidence is not null AND TRIM(evidence) <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]", + "query": "SELECT\n COUNT(DISTINCT created_by) AS \"no_of_projects_having_evidence_with_submitted_status\"\nFROM\n ${config.projects}\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND status = 'submitted' \nAND evidence is not null AND TRIM(evidence) <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]", "template-tags": { "block_param": { "type": "dimension", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/1_submission_status_breakdown.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/1_submission_status_breakdown.json index 4e855324..a4b6b265 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/1_submission_status_breakdown.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/1_submission_status_breakdown.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT \n CASE \n WHEN ${config.projects}.status = 'started' THEN 'Started'\n WHEN ${config.projects}.status = 'inProgress' THEN 'In Progress'\n WHEN ${config.projects}.status = 'submitted' THEN 'Submitted'\n ELSE ${config.projects}.status\n END AS \"User Status\",\n COUNT(DISTINCT ${config.projects}.created_by) AS \"Total Users\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\n AND ${config.solutions}.program_name IS NOT NULL\n [[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]]\n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.status\nORDER BY \"Total Users\" DESC;\n\n" + "query": "SELECT \n CASE \n WHEN ${config.projects}.status = 'started' THEN 'Started'\n WHEN ${config.projects}.status = 'inProgress' THEN 'In Progress'\n WHEN ${config.projects}.status = 'submitted' THEN 'Submitted'\n ELSE ${config.projects}.status\n END AS \"User Status\",\n COUNT(DISTINCT ${config.projects}.created_by) AS \"Total Users\"\nFROM ${config.projects} \nJOIN ${config.solutions} ON ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\n AND ${config.solutions}.program_name IS NOT NULL\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.status\nORDER BY \"Total Users\" DESC;\n\n" } }, "parameter_mappings": [], diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/2_status_of_user_program_wise.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/2_status_of_user_program_wise.json index acfdd9b9..5a8d13bf 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/2_status_of_user_program_wise.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/2_status_of_user_program_wise.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT DISTINCT(${config.solutions}.program_name) AS \"Programs\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.created_by END) AS \"Started Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.created_by END) AS \"In Progress Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.created_by END) AS \"Submitted Users\", \nCOUNT(DISTINCT ${config.projects}.created_by) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.solutions}.program_name is not null\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name\nORDER BY \"Total Projects\" DESC;" + "query": "SELECT DISTINCT(${config.solutions}.program_name) AS \"Programs\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.created_by END) AS \"Started Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.created_by END) AS \"In Progress Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.created_by END) AS \"Submitted Users\", \nCOUNT(DISTINCT ${config.projects}.created_by) AS \"Total Projects\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.solutions}.program_name is not null\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.solutions}.program_name\nORDER BY \"Total Projects\" DESC;" } }, "display": "bar", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/3_status_of_user_state_wise.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/3_status_of_user_state_wise.json index 8b22bbbd..405bccc6 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/3_status_of_user_state_wise.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/3_status_of_user_state_wise.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT DISTINCT(${config.projects}.state_name) AS \"State\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.created_by END) AS \"Started Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.created_by END) AS \"In Progress Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.created_by END) AS \"Submitted Users\", \nCOUNT(DISTINCT ${config.projects}.created_by) AS \"Total Users\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.projects}.state_name is not null AND ${config.projects}.state_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.state_name\nORDER BY \"Total Users\" DESC;" + "query": "SELECT DISTINCT(${config.projects}.state_name) AS \"State\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.created_by END) AS \"Started Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.created_by END) AS \"In Progress Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.created_by END) AS \"Submitted Users\", \nCOUNT(DISTINCT ${config.projects}.created_by) AS \"Total Users\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.projects}.state_name is not null AND ${config.projects}.state_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.state_name\nORDER BY \"Total Users\" DESC;" } }, "display": "bar", diff --git a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/4_status_of_user_district_wise.json b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/4_status_of_user_district_wise.json index 9bbbdc93..a2d08f66 100644 --- a/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/4_status_of_user_district_wise.json +++ b/metabase-jobs/config-data-loader/projectJson/Admin/User-Details/json/graph/4_status_of_user_district_wise.json @@ -84,7 +84,7 @@ "options": null } }, - "query": "SELECT DISTINCT(${config.projects}.district_name) AS \"District\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.created_by END) AS \"Started Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.created_by END) AS \"In Progress Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.created_by END) AS \"Submitted Users\", \nCOUNT(DISTINCT ${config.projects}.created_by) AS \"Total Users\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND ${config.projects}.district_name is not null AND ${config.projects}.district_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.district_name\nORDER BY \"Total Users\" DESC;" + "query": "SELECT DISTINCT(${config.projects}.district_name) AS \"District\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'started' THEN ${config.projects}.created_by END) AS \"Started Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'inProgress' THEN ${config.projects}.created_by END) AS \"In Progress Users\", \nCOUNT(DISTINCT CASE WHEN ${config.projects}.status = 'submitted' THEN ${config.projects}.created_by END) AS \"Submitted Users\", \nCOUNT(DISTINCT ${config.projects}.created_by) AS \"Total Users\" \nFROM ${config.projects} \njoin ${config.solutions} on ${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE 1 = 1\nAND tenant_id = ${tenant_id}\nAND ${config.projects}.district_name is not null AND ${config.projects}.district_name <> ''\n[[AND ${config.projects}.state_id = (\n SELECT state_id\n FROM ${config.projects}\n WHERE {{state_param}}\n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]]\n [[AND ${config.projects}.district_id = (\n SELECT district_id\n FROM ${config.projects}\n WHERE {{district_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1)\n ]] \n [[AND ${config.projects}.program_id = (\n SELECT program_id\n FROM ${config.projects}\n WHERE {{program_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1 )\n ]]\n[[AND ${config.projects}.block_id = (\n SELECT block_id\n FROM ${config.projects}\n WHERE {{block_param}}\n AND tenant_id = ${tenant_id} \n LIMIT 1\n )\n ]] \n [[AND ${config.projects}.cluster_id = (\n SELECT cluster_id\n FROM ${config.projects}\n WHERE {{cluster_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\n [[AND ${config.projects}.org_id = (\n SELECT org_id\n FROM ${config.projects}\n WHERE {{org_param}} \n AND tenant_id = ${tenant_id}\n LIMIT 1\n )\n ]]\nGROUP BY ${config.projects}.district_name\nORDER BY \"Total Users\" DESC;" } }, "display": "bar", diff --git a/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_block.json b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_block.json new file mode 100644 index 00000000..3fc4db9e --- /dev/null +++ b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_block.json @@ -0,0 +1,20 @@ +{ + "questionCard": { + "name": "select_block", + "collection_id": 538, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "query": "SELECT distinct(block_name) \nFROM ${config.projects} \nWHERE tenant_id = 'TENANTID'", + "template-tags": { + } + } + }, + "display": "scalar", + "visualization_settings": { + "table.pivot_column": "block_name" + }, + "parameters": [] + } +} \ No newline at end of file diff --git a/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_cluster.json b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_cluster.json new file mode 100644 index 00000000..125af4f3 --- /dev/null +++ b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_cluster.json @@ -0,0 +1,19 @@ +{ + "questionCard": { + "name": "select_cluster", + "collection_id": 538, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "query": "SELECT distinct(cluster_name) \nFROM ${config.projects} \nWHERE tenant_id = 'TENANTID'", + "template-tags": {} + } + }, + "display": "scalar", + "visualization_settings": { + "table.pivot_column": "cluster_name" + }, + "parameters": [] + } +} \ No newline at end of file diff --git a/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_district.json b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_district.json new file mode 100644 index 00000000..cb0707c1 --- /dev/null +++ b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_district.json @@ -0,0 +1,20 @@ +{ + "questionCard": { + "name": "select_district", + "collection_id": 538, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "query": "SELECT distinct(district_name) \nFROM ${config.projects} \nWHERE tenant_id = 'TENANTID'", + "template-tags": { + } + } + }, + "display": "scalar", + "visualization_settings": { + "table.pivot_column": "district_name" + }, + "parameters": [] + } +} \ No newline at end of file diff --git a/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_organisation.json b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_organisation.json new file mode 100644 index 00000000..fdb6b941 --- /dev/null +++ b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_organisation.json @@ -0,0 +1,19 @@ +{ + "questionCard": { + "name": "select_organisation", + "collection_id": 538, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "query": "SELECT distinct(org_name) \nFROM ${config.projects} \nWHERE tenant_id = 'TENANTID'", + "template-tags": {} + } + }, + "display": "scalar", + "visualization_settings": { + "table.pivot_column": "org_name" + }, + "parameters": [] + } +} \ No newline at end of file diff --git a/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_program.json b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_program.json new file mode 100644 index 00000000..452ae9a4 --- /dev/null +++ b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_program.json @@ -0,0 +1,19 @@ +{ + "questionCard": { + "name": "select_program", + "collection_id": 538, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "query": "SELECT distinct(${config.solutions}.program_name) \nFROM ${config.projects} \nJOIN ${config.solutions} ON\n${config.projects}.solution_id = ${config.solutions}.solution_id\nWHERE ${config.projects}.tenant_id = 'TENANTID'", + "template-tags": {} + } + }, + "display": "scalar", + "visualization_settings": { + "table.pivot_column": "program_name" + }, + "parameters": [] + } +} \ No newline at end of file diff --git a/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_state.json b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_state.json new file mode 100644 index 00000000..83c06457 --- /dev/null +++ b/metabase-jobs/config-data-loader/projectJson/Project/Project-Filters/json/admin-filter/select_state.json @@ -0,0 +1,19 @@ +{ + "questionCard": { + "name": "select_state", + "collection_id": 538, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "query": "SELECT distinct(state_name) \nFROM ${config.projects} \nWHERE tenant_id = 'TENANTID'", + "template-tags": {} + } + }, + "display": "scalar", + "visualization_settings": { + "table.pivot_column": "state_name" + }, + "parameters": [] + } +} \ No newline at end of file diff --git a/metabase-jobs/config-data-loader/projectJson/Project/Project-Parameter/json/admin-parameter/admin-parameter.json b/metabase-jobs/config-data-loader/projectJson/Project/Project-Parameter/json/admin-parameter/admin-parameter.json index 4ab7a5b2..a2cd01b2 100644 --- a/metabase-jobs/config-data-loader/projectJson/Project/Project-Parameter/json/admin-parameter/admin-parameter.json +++ b/metabase-jobs/config-data-loader/projectJson/Project/Project-Parameter/json/admin-parameter/admin-parameter.json @@ -1,33 +1,40 @@ -[ - { - "name": "Select State", - "slug": "select_state", - "id": "c32c8fc5", - "type": "string/=", - "sectionId": "location", - "isMultiSelect": false, - "filteringParameters": [ - "74a10335", - "6e5c08dc", - "efa886d3", - "8c7d86ea", - "5088d3e5" +[ { + "name": "Select State", + "slug": "select_state", + "id": "c32c8fc5", + "type": "string/=", + "sectionId": "location", + "values_source_type": "card", + "values_source_config": { + "card_id": 2578, + "value_field": [ + "field", + "state_name", + { + "base-type": "type/Text" + } ] }, + "isMultiSelect": false +}, { - "slug": "select_district", - "filteringParameters": [ - "c32c8fc5", - "6e5c08dc", - "efa886d3", - "8c7d86ea", - "5088d3e5" - ], "name": "Select District", - "isMultiSelect": false, + "slug": "select_district", + "id": "74a10335", "type": "string/=", "sectionId": "location", - "id": "74a10335" + "values_source_type": "card", + "values_source_config": { + "card_id": 301, + "value_field": [ + "field", + "district_name", + { + "base-type": "type/Text" + } + ] + }, + "isMultiSelect": false }, { "name": "Select Block", @@ -35,14 +42,18 @@ "id": "6e5c08dc", "type": "string/=", "sectionId": "string", - "isMultiSelect": false, - "filteringParameters": [ - "c32c8fc5", - "74a10335", - "efa886d3", - "8c7d86ea", - "5088d3e5" - ] + "values_source_type": "card", + "values_source_config": { + "card_id": 300, + "value_field": [ + "field", + "block_name", + { + "base-type": "type/Text" + } + ] + }, + "isMultiSelect": false }, { "name": "Select Cluster", @@ -50,29 +61,37 @@ "id": "efa886d3", "type": "string/=", "sectionId": "string", - "isMultiSelect": false, - "filteringParameters": [ - "c32c8fc5", - "74a10335", - "6e5c08dc", - "8c7d86ea", - "5088d3e5" - ] + "values_source_type": "card", + "values_source_config": { + "card_id": 299, + "value_field": [ + "field", + "cluster_name", + { + "base-type": "type/Text" + } + ] + }, + "isMultiSelect": false }, { - "slug": "select_program", - "filteringParameters": [ - "c32c8fc5", - "74a10335", - "6e5c08dc", - "efa886d3", - "5088d3e5" - ], "name": "Select Program", - "isMultiSelect": false, + "slug": "select_program", + "id": "8c7d86ea", "type": "string/=", "sectionId": "string", - "id": "8c7d86ea" + "values_source_type": "card", + "values_source_config": { + "card_id": 303, + "value_field": [ + "field", + "program_name", + { + "base-type": "type/Text" + } + ] + }, + "isMultiSelect": false }, { "name": "Select Organisation", @@ -80,13 +99,17 @@ "id": "5088d3e5", "type": "string/=", "sectionId": "string", - "isMultiSelect": false, - "filteringParameters": [ - "c32c8fc5", - "74a10335", - "6e5c08dc", - "efa886d3", - "8c7d86ea" - ] + "values_source_type": "card", + "values_source_config": { + "card_id": 302, + "value_field": [ + "field", + "org_name", + { + "base-type": "type/Text" + } + ] + }, + "isMultiSelect": false } ] \ No newline at end of file diff --git a/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProcessAdminConstructor.scala b/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProcessAdminConstructor.scala index 0d7ffc95..2fcefaba 100644 --- a/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProcessAdminConstructor.scala +++ b/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProcessAdminConstructor.scala @@ -11,12 +11,12 @@ import scala.util.{Failure, Success, Try} object ProcessAdminConstructor { - def ProcessAndUpdateJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, tabId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int, projects: String, solutions: String, metabaseUtil: MetabaseUtil, postgresUtil: PostgresUtil): ListBuffer[Int] = { + def ProcessAndUpdateJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, tabId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int, projects: String, solutions: String, tenantId: String, metabaseUtil: MetabaseUtil, postgresUtil: PostgresUtil): ListBuffer[Int] = { println(s"=====> Started processing admin level json update function for Micro Improvements dashboard") val questionCardId = ListBuffer[Int]() val objectMapper = new ObjectMapper() - def processJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int): Unit = { + def processJsonFiles(reportConfigQuery: String, collectionId: Int, databaseId: Int, dashboardId: Int, stateNameId: Int, districtNameId: Int, programNameId: Int, blockNameId: Int, clusterNameId: Int, orgNameId: Int, tenantId: String): Unit = { val dashcardsArray = objectMapper.createArrayNode() val queryResult = postgresUtil.fetchData(reportConfigQuery) queryResult.foreach { row => @@ -28,7 +28,7 @@ object ProcessAdminConstructor { val originalQuestionCard = configJson.path("questionCard") val chartName = Option(originalQuestionCard.path("name").asText()).getOrElse("Unknown Chart") val updatedQuestionCard = updateQuestionCardJsonValues(configJson, collectionId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, databaseId) - val finalQuestionCard = updatePostgresDatabaseQuery(updatedQuestionCard, projects, solutions) + val finalQuestionCard = updatePostgresDatabaseQuery(updatedQuestionCard, projects, solutions, tenantId) val requestBody = finalQuestionCard.asInstanceOf[ObjectNode] val cardId = mapper.readTree(metabaseUtil.createQuestionCard(requestBody.toString)).path("id").asInt() println(s">>> Successfully created question card with card_id: $cardId for $chartName") @@ -122,7 +122,7 @@ object ProcessAdminConstructor { } } - def updatePostgresDatabaseQuery(json: JsonNode, projectsTable: String, solutionsTable: String): JsonNode = { + def updatePostgresDatabaseQuery(json: JsonNode, projectsTable: String, solutionsTable: String, tenantId: String): JsonNode = { Try { val queryNode = json.at("/dataset_query/native/query") if (queryNode.isMissingNode || !queryNode.isTextual) { @@ -132,6 +132,7 @@ object ProcessAdminConstructor { val updatedQuery = queryNode.asText() .replace("${config.projects}", projectsTable) .replace("${config.solutions}", solutionsTable) + .replace("${tenant_id}", s"'$tenantId'") val updatedJson = json.deepCopy().asInstanceOf[ObjectNode] updatedJson.at("/dataset_query/native") @@ -170,7 +171,7 @@ object ProcessAdminConstructor { }.toOption } - processJsonFiles(reportConfigQuery, collectionId, databaseId, dashboardId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId) + processJsonFiles(reportConfigQuery, collectionId, databaseId, dashboardId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, tenantId) println(s"=====> Completed processing admin level json update function for Micro Improvements dashboard") questionCardId } diff --git a/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProjectMetabaseDashboardFunction.scala b/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProjectMetabaseDashboardFunction.scala index beb0a6ee..e557e989 100644 --- a/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProjectMetabaseDashboardFunction.scala +++ b/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/ProjectMetabaseDashboardFunction.scala @@ -103,7 +103,7 @@ class ProjectMetabaseDashboardFunction(config: ProjectMetabaseDashboardConfig)(i * Logic to process and create the Micro Improvements Dashboard */ println("\n-->> Process Admin Micro Improvements Dashboard") - val (mipCollectionPresent, mipCollectionId) = validateCollection("Micro Improvements", "Admin") + val (mipCollectionPresent, mipCollectionId) = validateCollection(s"Micro Improvements [TenantId: $tenantId]", "Admin") if (mipCollectionPresent && mipCollectionId != 0) { println(s"=====> Micro Improvements collection present with id: $mipCollectionId, Skipping this step.") } else { @@ -292,7 +292,7 @@ class ProjectMetabaseDashboardFunction(config: ProjectMetabaseDashboardConfig)(i def createMicroImprovementsCollectionAndDashboard(metaDataTable: String, reportConfig: String, databaseId: Int): Unit = { val createDashboardQuery = s"UPDATE $metaDataTable SET status = 'Failed',error_message = 'errorMessage' WHERE id = '$admin';" - val (mipCollectionName, mipCollectionDescription) = (s"Micro Improvements", s"This collection contains dashboards that track the progress, participation, and effectiveness of Micro Improvement Projects across various programs.\n\nCollection For: Admin") + val (mipCollectionName, mipCollectionDescription) = (s"Micro Improvements [TenantId: $tenantId]", s"This collection contains dashboards that track the progress, participation, and effectiveness of Micro Improvement Projects across various programs.\n\nCollection For: Admin") val mipCollectionId = Utils.checkAndCreateCollection(mipCollectionName, mipCollectionDescription, metabaseUtil) if (mipCollectionId != -1) { Utils.createGroupForCollection(metabaseUtil, s"Report_Admin_Micro_Improvement", mipCollectionId) @@ -306,14 +306,26 @@ class ProjectMetabaseDashboardFunction(config: ProjectMetabaseDashboardConfig)(i val clusterNameId: Int = getTheColumnId(databaseId, projects, "cluster_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) val orgNameId: Int = getTheColumnId(databaseId, projects, "org_name", metabaseUtil, metabasePostgresUtil, metabaseApiKey, createDashboardQuery) val projectDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'Project-Details';" - val projectQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(projectDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, projectTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, metabaseUtil, postgresUtil) + val projectQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(projectDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, projectTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, tenantId, metabaseUtil, postgresUtil) val userDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'User-Details';" - val userQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(userDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, userTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, metabaseUtil, postgresUtil) + val userQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(userDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, userTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, tenantId, metabaseUtil, postgresUtil) val submissionDetailsConfigQuery: String = s"SELECT question_type, config FROM $reportConfig WHERE dashboard_name = 'Admin' AND report_name = 'Submission-Details-CSV';" - val submissionQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(submissionDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, csvTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, metabaseUtil, postgresUtil) + val submissionQuestionCardIdList = ProcessAdminConstructor.ProcessAndUpdateJsonFiles(submissionDetailsConfigQuery, mipCollectionId, databaseId, mipDashboardId, csvTabId, stateNameId, districtNameId, programNameId, blockNameId, clusterNameId, orgNameId, projects, solutions, tenantId, metabaseUtil, postgresUtil) val mainQuestionIdsString = "[" + (projectQuestionCardIdList ++ userQuestionCardIdList ++ submissionQuestionCardIdList).mkString(",") + "]" + val filterQuery: String = s"SELECT config FROM $reportConfig WHERE report_name = 'Project-Filters' AND question_type = 'admin-filter'" + val filterResults: List[Map[String, Any]] = postgresUtil.fetchData(filterQuery) + val objectMapper = new ObjectMapper() + val slugNameToTenantIdFilterMap = mutable.Map[String, Int]() + for (result <- filterResults) { + val configString = result.get("config").map(_.toString).getOrElse("") + val configJson = objectMapper.readTree(configString) + val slugName = configJson.findValue("name").asText() + val tenantIdFilter: Int = UpdateAndAddAdminTenantFilter.updateAndAddFilter(metabaseUtil, configJson: JsonNode, s"$tenantId", mipCollectionId, databaseId, projects, solutions) + slugNameToTenantIdFilterMap(slugName) = tenantIdFilter + } + val immutableSlugNameToTenantIdFilterMap: Map[String, Int] = slugNameToTenantIdFilterMap.toMap val parametersQuery: String = s"SELECT config FROM $reportConfig WHERE report_name = 'Project-Parameter' AND question_type = 'admin-parameter'" - UpdateParameters.UpdateAdminParameterFunction(metabaseUtil, parametersQuery, mipDashboardId, postgresUtil) + UpdateParameters.updateParameterFunction(metabaseUtil, postgresUtil, parametersQuery, immutableSlugNameToTenantIdFilterMap, mipDashboardId) val projectMetadataJson = new ObjectMapper().createArrayNode().add(new ObjectMapper().createObjectNode().put("collectionId", mipCollectionId).put("collectionName", mipCollectionName).put("dashboardId", mipDashboardId).put("dashboardName", mipDashboardName).put("questionIds", mainQuestionIdsString)) postgresUtil.insertData(s"UPDATE $metaDataTable SET main_metadata = COALESCE(main_metadata::jsonb, '[]'::jsonb) || '$projectMetadataJson' ::jsonb WHERE entity_id = '$admin';") } else { diff --git a/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/UpdateAndAddAdminTenantFilter.scala b/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/UpdateAndAddAdminTenantFilter.scala new file mode 100644 index 00000000..8c9c5850 --- /dev/null +++ b/metabase-jobs/project-dashboard-creator/src/main/scala/org/shikshalokam/job/dashboard/creator/functions/UpdateAndAddAdminTenantFilter.scala @@ -0,0 +1,97 @@ +package org.shikshalokam.job.dashboard.creator.functions + +import com.fasterxml.jackson.databind.node.{ArrayNode, ObjectNode} +import com.fasterxml.jackson.databind.{JsonNode, ObjectMapper} +import org.shikshalokam.job.util.MetabaseUtil + +object UpdateAndAddAdminTenantFilter { + val objectMapper = new ObjectMapper() + + def updateAndAddFilter(metabaseUtil: MetabaseUtil, queryResult: JsonNode, tenantId: String, collectionId: Int, databaseId: Int, projectTable: String, solutionTable: String): Int = { + println(s"** Started to update and create filter questions for state dashboard") + val objectMapper = new ObjectMapper() + + def replaceTenantName(json: JsonNode, tenantId: String, projectTable: String, solutionTable: String): JsonNode = { + def processNode(node: JsonNode): JsonNode = { + node match { + case obj: ObjectNode => + obj.fieldNames().forEachRemaining { fieldName => + val childNode = obj.get(fieldName) + if (childNode.isTextual) { + var updatedText = childNode.asText() + + if (updatedText.contains("TENANTID")) { + updatedText = updatedText.replace("TENANTID", tenantId) + } + if (updatedText.contains("${config.projects}")) { + updatedText = updatedText.replace("${config.projects}", projectTable) + } + if (updatedText.contains("${config.solutions}")) { + updatedText = updatedText.replace("${config.solutions}", solutionTable) + } + obj.put(fieldName, updatedText) + } else { + obj.set(fieldName, processNode(childNode)) + } + } + obj + + case array: ArrayNode => + val newArray = array.deepCopy().asInstanceOf[ArrayNode] + newArray.removeAll() + array.elements().forEachRemaining { child => + newArray.add(processNode(child)) + } + newArray + + case _ => node + } + } + + val updatedJson = processNode(json.deepCopy()) + updatedJson + } + + def updateCollectionIdAndDatabaseId(jsonFile: JsonNode, collectionId: Int, databaseId: Int): JsonNode = { + try { + val questionCardNode = jsonFile.get("questionCard").asInstanceOf[ObjectNode] + if (questionCardNode == null) { + throw new IllegalArgumentException("'questionCard' node not found.") + } + questionCardNode.put("collection_id", collectionId) + val datasetQueryNode = questionCardNode.get("dataset_query").asInstanceOf[ObjectNode] + if (datasetQueryNode == null) { + throw new IllegalArgumentException("'dataset_query' node not found.") + } + datasetQueryNode.put("database", databaseId) + jsonFile + } catch { + case ex: Exception => + throw new RuntimeException(s"Error updating JSON: ${ex.getMessage}", ex) + } + } + + def getTheQuestionId(json: JsonNode): Int = { + try { + val requestBody = json.get("questionCard") + val questionCardResponse = metabaseUtil.createQuestionCard(requestBody.toString) + val responseJson = objectMapper.readTree(questionCardResponse) + Option(responseJson.get("id")).map(_.asInt()).getOrElse { + println("Error: 'id' field not found in the response.") + -1 + } + } catch { + case ex: Exception => + println(s"Error fetching 'id' from response: ${ex.getMessage}") + -1 + } + } + + + val ReplacedStateNameJson = replaceTenantName(queryResult, tenantId, projectTable, solutionTable) + val updatedJson = updateCollectionIdAndDatabaseId(ReplacedStateNameJson, collectionId, databaseId) + val questionId = getTheQuestionId(updatedJson) + println(s"** Completed to update and create filter questions for state dashboard") + questionId + } +} \ No newline at end of file