diff --git a/app/Exports/ZenovaReportExport.php b/app/Exports/ZenovaReportExport.php index d98d0a10..fb2bdbd0 100644 --- a/app/Exports/ZenovaReportExport.php +++ b/app/Exports/ZenovaReportExport.php @@ -123,7 +123,7 @@ class ZenovaReportExport implements FromArray, WithEvents if ($column['type'] === 'text') { $sheet->getStyle($dataRange)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT); } elseif ($column['type'] === 'percent') { - $sheet->getStyle($dataRange)->getNumberFormat()->setFormatCode('0.00"%"'); + $sheet->getStyle($dataRange)->getNumberFormat()->setFormatCode('0.0"%"'); $sheet->getStyle($dataRange)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT); } else { $sheet->getStyle($dataRange)->getNumberFormat()->setFormatCode('#,##0'); @@ -134,9 +134,9 @@ class ZenovaReportExport implements FromArray, WithEvents $col += $span; } - $sheet->getRowDimension(1)->setRowHeight(22); + $sheet->getRowDimension(1)->setRowHeight(36); $sheet->getRowDimension(2)->setRowHeight(36); - $sheet->freezePane('A3'); + $sheet->freezePane('C3'); if (!empty($this->totals)) { $sheet->getStyle('A' . $rowCount . ':' . $lastCol . $rowCount)->applyFromArray([ diff --git a/app/Http/Controllers/FormController.php b/app/Http/Controllers/FormController.php index c6d0f615..57c1dda8 100644 --- a/app/Http/Controllers/FormController.php +++ b/app/Http/Controllers/FormController.php @@ -56,6 +56,13 @@ class FormController extends Controller return $value === true || $value === 1 || $value === '1' || $value === 'true'; } + protected function doctorChemistBladeId($formId) { + if ($formId === '1790230856-704c97b6-61f7-4eda-901a-2cb4ff6f293d') { + return '1790230856-a5ff58a6-d509-4ac0-9b18-6d366a74965e'; + } + return $formId; + } + protected function deliverform($formdata, $questions, $id = false) { $additional_info = $this->get_additional_info($formdata); // if($formdata->form_id == '1711609582-e93dba24-9c98-43e7-b97a-b22d64d9b9fc') { @@ -91,10 +98,11 @@ class FormController extends Controller // return view('form.common', $data); // } - if (\View::exists('form.'.$formdata->partition.'.'.$formdata->form_id)) { - return view('form.'.$formdata->partition.'.'.$formdata->form_id)->with($data); - } elseif (\View::exists('form.'.$formdata->form_id)) { - return view('form.'.$formdata->form_id)->with($data); + $viewId = $this->doctorChemistBladeId($formdata->form_id); + if (\View::exists('form.'.$formdata->partition.'.'.$viewId)) { + return view('form.'.$formdata->partition.'.'.$viewId)->with($data); + } elseif (\View::exists('form.'.$viewId)) { + return view('form.'.$viewId)->with($data); } elseif(isset($formdata->form_type) && $formdata->form_type == 'enrollment_form'){ return view('form.common-enrollmentform', $data); } elseif(isset($formdata->form_type) && $formdata->form_type == 'plan_vs_execution'){ @@ -563,6 +571,11 @@ class FormController extends Controller public function show(Request $request) { $formdata = $request->session()->get('formdata'); //Log::debug(print_r($formdata, true)); + $requestedFormId = $request->input('form_id', ''); + if (is_string($requestedFormId) && $requestedFormId !== '') { + $formdata->form_id = $requestedFormId; + $request->session()->put('formdata', $formdata); + } $id = $request->input('id', false); $action = $request->input('action', false); Log::debug(print_r(['form_id' => $formdata->form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition, 'id' => $id ], true)); @@ -8345,6 +8358,34 @@ class FormController extends Controller $data['incept_neb'] = $inceptService->withOrgTotals([], $formdata); } + $doctorSurveyId = '1790230856-a5ff58a6-d509-4ac0-9b18-6d366a74965e'; + $chemistSurveyId = '1790230856-704c97b6-61f7-4eda-901a-2cb4ff6f293d'; + if (in_array($form_id, [$doctorSurveyId, $chemistSurveyId], true)) { + $loadHistory = function ($id) use ($formdata, $form_id, $history) { + if ($id === $form_id) { + return $history; + } + return LambdaRequest::postrequest('form', 'formentity/getformhistory', ['form_id' => $id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition]); + }; + $doctorHistory = $loadHistory($doctorSurveyId); + $chemistHistory = $loadHistory($chemistSurveyId); + $historyRows = function ($response) { + return [ + 'questions' => isset($response->data->questions) ? $response->data->questions : [], + 'submissions' => isset($response->data->submissions) ? $response->data->submissions : [], + ]; + }; + $doctorRows = $historyRows($doctorHistory); + $chemistRows = $historyRows($chemistHistory); + $data['doctor_form_id'] = $doctorSurveyId; + $data['chemist_form_id'] = $chemistSurveyId; + $data['doctor_questions'] = $doctorRows['questions']; + $data['doctor_submissions'] = $doctorRows['submissions']; + $data['chemist_questions'] = $chemistRows['questions']; + $data['chemist_submissions'] = $chemistRows['submissions']; + return view('form.'.$formdata->partition.'.'.$doctorSurveyId.'-history')->with($data); + } + if (\View::exists('form.'.$formdata->partition.'.'.$formdata->form_id.'-history')) { return view('form.'.$formdata->partition.'.'.$formdata->form_id.'-history')->with($data); } elseif (\View::exists('form.'.$formdata->form_id.'-history')) { @@ -8359,15 +8400,22 @@ class FormController extends Controller public function edit(Request $request) { $formdata = $request->session()->get('formdata'); //Log::debug(print_r($formdata, true)); + $requestedFormId = $request->input('form_id', ''); + if (is_string($requestedFormId) && $requestedFormId !== '') { + $formdata->form_id = $requestedFormId; + $request->session()->put('formdata', $formdata); + } $id = $request->input('id', false); //'user_id' => $formdata->user_id, $finfo = LambdaRequest::postrequest('form', 'formentity/getformdefination', ['form_id' => $formdata->form_id, 'partition' => $formdata->partition, 'id' => $id ]); $formdata->title = $finfo->data->formdata->title; + $formdata->formdata = $finfo->data->formdata; //Log::debug(print_r($finfo->data->formdata, true)); - if (\View::exists('form.'.$formdata->partition.'.'.$formdata->form_id)) { - return view('form.'.$formdata->partition.'.'.$formdata->form_id)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]); - } elseif (\View::exists('form.'.$formdata->form_id)) { - return view('form.'.$formdata->form_id)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]); + $viewId = $this->doctorChemistBladeId($formdata->form_id); + if (\View::exists('form.'.$formdata->partition.'.'.$viewId)) { + return view('form.'.$formdata->partition.'.'.$viewId)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]); + } elseif (\View::exists('form.'.$viewId)) { + return view('form.'.$viewId)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]); } else { return view('form.common')->with(['questions' => $finfo->data->questions, 'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]); } diff --git a/app/Http/Controllers/ZenovaReportController.php b/app/Http/Controllers/ZenovaReportController.php index 0d5389cc..67d1ea50 100644 --- a/app/Http/Controllers/ZenovaReportController.php +++ b/app/Http/Controllers/ZenovaReportController.php @@ -23,7 +23,7 @@ class ZenovaReportController extends Controller $this->_service = 'reports'; $this->_module = 'zenova_reports'; $this->_viewname = 'zenovareport'; - $this->_title = 'Glipiq & Sitazit Dashboard'; + $this->_title = 'Custom Dashboard'; $this->_base_url = '/zenovareport'; } @@ -35,11 +35,14 @@ class ZenovaReportController extends Controller public function dashboard(Request $request) { $level = $this->level($request); - $built = $this->build($level); + $month = $this->month($request); + $built = $this->build($level, $month); return view('zenovareport.dashboard', [ 'title' => $this->_title, 'level' => $level, + 'month' => $month, + 'months' => $this->months(), 'groups' => $built['groups'], 'body' => $built['body'], 'totals' => $built['totals'], @@ -50,10 +53,11 @@ class ZenovaReportController extends Controller public function export(Request $request) { $level = $this->level($request); - $built = $this->build($level); + $month = $this->month($request); + $built = $this->build($level, $month); if ($built['error']) { - return redirect('/zenovareport/dashboard?level=' . $level)->with('error', $built['error']); + return redirect('/zenovareport/dashboard?level=' . $level . '&month=' . urlencode($month))->with('error', $built['error']); } return Excel::download( @@ -69,24 +73,51 @@ class ZenovaReportController extends Controller return ($level >= 1 && $level <= 5) ? $level : 3; } - private function build(int $level): array + private function months(): array + { + $now = now()->startOfMonth(); + $startYear = $now->month >= 4 ? $now->year : $now->year - 1; + $cursor = now()->setDate($startYear, 4, 1)->startOfMonth(); + $months = []; + while ($cursor->lte($now)) { + $months[$cursor->format('Y-m')] = $cursor->format('F Y'); + $cursor->addMonth(); + } + + return $months; + } + + private function month(Request $request): string + { + $months = $this->months(); + $selected = (string) $request->input('month', ''); + if (isset($months[$selected])) { + return $selected; + } + + return (string) array_key_last($months); + } + + private function build(int $level, string $month): array { $response = LambdaRequest::signedrequest( 'get', 'reports', 'zenova_reports/glipiqsitazit_report', - ['level' => (string) $level], + ['level' => (string) $level, 'month' => $month], 120 ); $rows = []; $error = null; if (!$response || ($response->status ?? '') !== 'success') { - $error = $response->message ?? 'Unable to load the Glipiq & Sitazit report.'; + $error = $response->message ?? 'Unable to load the Custom Dashboard.'; } else { $rows = is_array($response->data ?? null) ? $response->data : []; } + $rows = $this->sortRows($rows); + $groups = $this->groups($rows); $columns = []; foreach ($groups as $group) { @@ -153,6 +184,70 @@ class ZenovaReportController extends Controller ]; } + private function sortRows(array $rows): array + { + usort($rows, function ($left, $right) { + $zoneLeft = $this->zoneName($left); + $zoneRight = $this->zoneName($right); + if ($zoneLeft === '' && $zoneRight !== '') { + return 1; + } + if ($zoneRight === '' && $zoneLeft !== '') { + return -1; + } + $zone = strcasecmp($zoneLeft, $zoneRight); + if ($zone !== 0) { + return $zone; + } + $users = $this->fsoCount($right) <=> $this->fsoCount($left); + if ($users !== 0) { + return $users; + } + + return strcasecmp($this->rowName($left), $this->rowName($right)); + }); + + return $rows; + } + + private function zoneName($row): string + { + $parents = (array) ($row->parent_positions ?? []); + foreach ($parents as $key => $value) { + if (strcasecmp((string) $key, 'Zone') === 0 && $value !== null && $value !== '') { + return (string) $value; + } + } + + $demo = (array) ($row->{'Demography & Details'} ?? []); + foreach ($demo as $key => $value) { + if (strcasecmp((string) $key, 'Name of Zone') === 0 && $value !== null && $value !== '') { + return (string) $value; + } + } + + return ''; + } + + private function fsoCount($row): float + { + $value = $row->{'Demography & Details'}->{'No. of FSOs'} ?? 0; + + return is_numeric($value) ? (float) $value : 0; + } + + private function rowName($row): string + { + $demo = (array) ($row->{'Demography & Details'} ?? []); + foreach ($demo as $key => $value) { + if (strpos((string) $key, 'Name of ') === 0) { + return (string) $value; + } + } + + return (string) ($row->position_name ?? ''); + } + private function groups(array $rows): array { $nameKey = 'Name of Region'; @@ -197,7 +292,7 @@ class ZenovaReportController extends Controller ]; $groups = [ - ['label' => 'Demography & Details', 'tone' => 'demo', 'columns' => $demoColumns], + ['label' => 'Demography & Details (Data as per Yesterday)', 'tone' => 'demo', 'columns' => $demoColumns], ]; $first = isset($rows[0]) ? $rows[0] : null; @@ -247,10 +342,13 @@ class ZenovaReportController extends Controller if (strcasecmp($currentType, $type) === 0) { $column = $this->column($type, 'Demography & Details', $nameKey, 'text'); $column['is_total'] = true; - $columns[] = $column; - continue; + } else { + $column = $this->column($type, 'parent_positions', $type, 'text'); } - $columns[] = $this->column($type, 'parent_positions', $type, 'text'); + if (in_array($type, ['Zone', 'Region'], true)) { + $column['sticky'] = strtolower($type); + } + $columns[] = $column; } return $columns; @@ -337,7 +435,7 @@ class ZenovaReportController extends Controller } $number = (float) $value; if ($type === 'percent') { - return number_format($number, 2) . '%'; + return number_format($number, 1) . '%'; } if (floor($number) == $number) { return number_format($number, 0); diff --git a/resources/views/auth/loginotp.blade.php b/resources/views/auth/loginotp.blade.php index b2857ada..29624f26 100644 --- a/resources/views/auth/loginotp.blade.php +++ b/resources/views/auth/loginotp.blade.php @@ -101,14 +101,17 @@ @endif
| Submission Date | +Submitted By | +Workflow Status | + @foreach($section['questions'] as $code => $question) + @if(($question->type ?? '') === 'hidden') + @continue + @endif +{{ $question->label ?? $code }} | + @endforeach +Action | +
|---|---|---|---|---|
| {{ date('d M Y', strtotime($submission->updatedAt ?? $submission->createdAt)) }} | +{{ $submission->user_info->name ?? '' }} | +{{ $submission->workflow_status ?? '' }} | + @foreach($section['questions'] as $code => $question) + @if(($question->type ?? '') === 'hidden') + @continue + @endif + @php + $cell = $submission->formdata->{$code} ?? ''; + if (is_array($cell)) { + $cell = implode(', ', $cell); + } elseif (is_object($cell)) { + $cell = collect((array) $cell)->map(function ($val, $key) { + return $key.': '.$val; + })->implode(', '); + } + @endphp ++ @if(($question->type ?? '') === 'file' && $cell) + View + @else + {{ $cell }} + @endif + | + @endforeach ++ Edit + | +
| No submissions | +||||
diff --git a/resources/views/form/rapport-team3/1790230856-a5ff58a6-d509-4ac0-9b18-6d366a74965e-history.blade.php b/resources/views/form/rapport-team3/1790230856-a5ff58a6-d509-4ac0-9b18-6d366a74965e-history.blade.php new file mode 100644 index 00000000..8389b009 --- /dev/null +++ b/resources/views/form/rapport-team3/1790230856-a5ff58a6-d509-4ac0-9b18-6d366a74965e-history.blade.php @@ -0,0 +1,99 @@ + + +
+ @include('layouts.shared/title-meta', ['title' => 'History']) + @include('layouts.shared/head-css', ['mode' => $mode ?? '', 'demo' => $demo ?? '']) + +
+