diff --git a/app/Models/MetrikaResult.php b/app/Models/MetrikaResult.php index 2d59ab0..1f9f566 100644 --- a/app/Models/MetrikaResult.php +++ b/app/Models/MetrikaResult.php @@ -22,6 +22,11 @@ class MetrikaResult extends Model return $this->belongsTo(Report::class, 'rf_report_id', 'report_id'); } + public function metrikaItem() + { + return $this->belongsTo(MetrikaItem::class, 'rf_metrika_item_id', 'metrika_item_id'); + } + // public function group(): \Illuminate\Database\Eloquent\Relations\BelongsTo // { // return $this->belongsTo(MetrikaGroup::class, 'rf_metrika_group_id', 'metrika_group_id'); diff --git a/app/Services/MetrikaService.php b/app/Services/MetrikaService.php index fe7b741..61d58c0 100644 --- a/app/Services/MetrikaService.php +++ b/app/Services/MetrikaService.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Models\Report; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; @@ -73,4 +74,21 @@ class MetrikaService return array_fill_keys($departmentIds, 0); } } + + public function getMetricsForReport(Report $report): array + { + $metrics = []; + + foreach ($report->metrikaResults as $metrikaResult) { + $metrikaResult->load('metrikaItem'); + $metrics[] = [ + 'metrika_id' => $metrikaResult->rf_metrika_item_id, + 'value_id' => $metrikaResult->metrika_result_id, + 'name' => $metrikaResult->metrikaItem->name, + 'value' => $metrikaResult->value, + ]; + } + + return $metrics; + } } diff --git a/app/Services/ReportService.php b/app/Services/ReportService.php index 0b9dce1..1e82716 100644 --- a/app/Services/ReportService.php +++ b/app/Services/ReportService.php @@ -36,6 +36,7 @@ class ReportService ?ReportMetadataReadService $reportMetadataReadService = null, ?ReportSaveOrchestrator $reportSaveOrchestrator = null, ?ReportRuntimeService $reportRuntimeService = null, + protected MetrikaService $metrikaService ) { $this->autoFillReportPayloadBuilder = $autoFillReportPayloadBuilder ?? app(AutoFillReportPayloadBuilder::class); $this->reportPatientsReadService = $reportPatientsReadService ?? app(ReportPatientsReadService::class); @@ -289,4 +290,24 @@ class ReportService { return $this->reportMetadataReadService->getRecipientPlanOfYear($department, $dateRange); } + + public function getReportInfo(User $user, Department $department, DateRange $dateRange) + { + $report = $this->resolveReport($department->department_id, $dateRange); + $metrics = $this->metrikaService->getMetricsForReport($report); + } + + private function resolveReport(int $departmentId, DateRange $dateRange) + { + $query = Report::query() + ->where('rf_department_id', $departmentId) + ->exactPeriod($dateRange->startSql(), $dateRange->endSql()) + ->orderByDesc('report_id'); + + if ($dateRange->isOneDay) { + return $query->first(); + } + + return $query->onlySubmitted()->first(); + } }