From 53bcd37993da2d692854da74d646afecd28b6223 Mon Sep 17 00:00:00 2001 From: Ion Dormenco Date: Fri, 28 Nov 2025 17:20:54 +0200 Subject: [PATCH] Fix quick reports and submissions histogram --- api/src/Feature.QuickReports/Get/Endpoint.cs | 2 + .../GetNgoAdminStatistics/Endpoint.cs | 55 ++++++++++++++----- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/api/src/Feature.QuickReports/Get/Endpoint.cs b/api/src/Feature.QuickReports/Get/Endpoint.cs index 453e93102..0a4af606c 100644 --- a/api/src/Feature.QuickReports/Get/Endpoint.cs +++ b/api/src/Feature.QuickReports/Get/Endpoint.cs @@ -85,6 +85,7 @@ private async Task, NotFound>> GetQuickRepo WHERE qra."ElectionRoundId" = @electionRoundId AND qra."MonitoringObserverId" = qr."MonitoringObserverId" + and qra."QuickReportId" = @quickReportId AND qra."IsDeleted" = false AND qra."IsCompleted" = true),'[]'::JSONB) AS "Attachments" FROM "QuickReports" QR @@ -154,6 +155,7 @@ private async Task, NotFound>> GetQuickRepo WHERE qra."ElectionRoundId" = @electionRoundId AND qra."MonitoringObserverId" = qr."MonitoringObserverId" + AND qra."QuickReportId" = @quickReportId AND qra."IsDeleted" = false AND qra."IsCompleted" = true),'[]'::JSONB) AS "Attachments" FROM "QuickReports" QR diff --git a/api/src/Feature.Statistics/GetNgoAdminStatistics/Endpoint.cs b/api/src/Feature.Statistics/GetNgoAdminStatistics/Endpoint.cs index 43934f728..aef73f1c7 100644 --- a/api/src/Feature.Statistics/GetNgoAdminStatistics/Endpoint.cs +++ b/api/src/Feature.Statistics/GetNgoAdminStatistics/Endpoint.cs @@ -429,22 +429,47 @@ GROUP BY ------------------------------------------------------------------------------ -------------------------- read hourly histogram------------------------------ + + WITH submission_histogram AS ( + SELECT + DATE_TRUNC( + 'hour', + TIMEZONE('utc', FS."LastUpdatedAt") + )::timestamptz AS bucket, + 1 AS forms_submitted, + FS."NumberOfQuestionsAnswered" AS number_of_questions_answered, + FS."NumberOfFlaggedAnswers" AS number_of_flagged_answers + FROM "FormSubmissions" FS + INNER JOIN "GetAvailableMonitoringObservers"( + @ELECTIONROUNDID, + @NGOID, + @DATASOURCE) MO ON MO."MonitoringObserverId" = FS."MonitoringObserverId" + + UNION ALL + + SELECT + DATE_TRUNC( + 'hour', + TIMEZONE('utc', qr."LastUpdatedAt") + )::timestamptz AS bucket, + 1 AS forms_submitted, + qr."NumberOfQuestionsAnswered" AS number_of_questions_answered, + qr."NumberOfFlaggedAnswers" AS number_of_flagged_answers + FROM "PollingStationInformation" qr + INNER JOIN "GetAvailableMonitoringObservers"( + @ELECTIONROUNDID, + @NGOID, + @DATASOURCE) MO ON MO."MonitoringObserverId" = qr."MonitoringObserverId" + ) + SELECT - DATE_TRUNC( - 'hour', - TIMEZONE ( - 'utc', - FS."LastUpdatedAt" - ) - )::TIMESTAMPTZ AS "Bucket", - COUNT(1) AS "FormsSubmitted", - SUM("NumberOfQuestionsAnswered") AS "NumberOfQuestionsAnswered", - SUM("NumberOfFlaggedAnswers") AS "NumberOfFlaggedAnswers" - FROM - "FormSubmissions" FS - INNER JOIN "GetAvailableMonitoringObservers" (@ELECTIONROUNDID, @NGOID, @DATASOURCE) MO ON MO."MonitoringObserverId" = FS."MonitoringObserverId" - GROUP BY - 1; + bucket AS "Bucket", + COUNT(*) AS "FormsSubmitted", + SUM(number_of_questions_answered) AS "NumberOfQuestionsAnswered", + SUM(number_of_flagged_answers) AS "NumberOfFlaggedAnswers" + FROM submission_histogram + GROUP BY bucket + ORDER BY bucket; SELECT DATE_TRUNC(