From 9e92f5f3827b04fc68188188b5047d598601cf11 Mon Sep 17 00:00:00 2001 From: Ravi Gulhane Date: Thu, 17 Sep 2026 13:25:07 +0530 Subject: [PATCH] History file changes --- app/Http/Controllers/FormController.php | 101 +++++++++++++++++- .../Controllers/MetricreportController.php | 101 +++++++++++++++++- resources/views/form/history.blade.php | 17 +++ resources/views/form/list.blade.php | 6 ++ .../views/form/rapport-xennex/list.blade.php | 6 ++ .../views/metricreport/appreport.blade.php | 17 +++ resources/views/metricreport/report.blade.php | 17 +++ 7 files changed, 262 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/FormController.php b/app/Http/Controllers/FormController.php index b315741e..282a8260 100644 --- a/app/Http/Controllers/FormController.php +++ b/app/Http/Controllers/FormController.php @@ -168,6 +168,8 @@ class FormController extends Controller $form = $finfo->data->form ?? $formdata; $showPositions = $form->show_positions ?? $form->show_position ?? 'no'; $positionColumns = $this->getAvailablePositionColumns($finfo->data->submissions ?? [], $showPositions); + $userAttrs = $this->userAttributeCodes($form); + $userAttrLabels = $this->resolveUserAttributeLabels($userAttrs); $listViewData = [ 'questions' => $finfo->data->questions, 'submissions' => $finfo->data->submissions, @@ -177,6 +179,8 @@ class FormController extends Controller 'formdata' => $formdata, 'form' => $form, 'positionColumns' => $positionColumns, + 'userAttrs' => $userAttrs, + 'userAttrLabels' => $userAttrLabels, ]; if (\View::exists('form.'.$formdata->partition.'.list-'.$formdata->form_id)) { return view('form.'.$formdata->partition.'.list-'.$formdata->form_id)->with($listViewData); @@ -305,6 +309,7 @@ class FormController extends Controller $sessionForm = $request->session()->get('formdata'); $canDeleteByPermission = $request->input('delete_submission') == 1 || $this->sessionFlag($sessionForm, 'delete_submission'); + $userAttrs = $this->userAttributeCodes($formdata); foreach($submissions as $submission) { if (!isset($submission->user_info->name)) continue; $row = [ @@ -315,6 +320,9 @@ class FormController extends Controller "submission_id" => $submission->id, "actions" => [] ]; + foreach ($userAttrs as $attr) { + $row[$attr] = $this->userAttributeValue($submission->user_info ?? null, $attr); + } // workflow status if (isset($formdata->workflow) && $formdata->workflow == 'yes') { @@ -8167,11 +8175,20 @@ class FormController extends Controller $data = ['form' => $history->data->form, 'questions' => $history->data->questions, 'submissions' => $history->data->submissions, 'formname' => $history->data->formname, 'form_id' => $form_id, 'formdata' => $formdata, 'can_delete_submission' => $canDeleteSubmission ]; } + $userAttrs = $this->userAttributeCodes($history->data->form ?? null); + $userAttrLabels = $this->resolveUserAttributeLabels($userAttrs); + $data['userAttrs'] = $userAttrs; + $data['userAttrLabels'] = $userAttrLabels; + if($request->input('export', false)) { $exceldata = []; $exceldata[] = [$formdata->title]; $exceldata[] = ['']; - $headers = ['Submission Date', 'Submitted By', 'Approval Status']; + $headers = ['Submission Date', 'Submitted By']; + foreach ($userAttrs as $attr) { + $headers[] = $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', (string) $attr)); + } + $headers[] = 'Approval Status'; foreach($history->data->questions as $question) { if (isset($question->type) && $question->type == 'hidden') { continue; @@ -8190,6 +8207,9 @@ class FormController extends Controller $row = []; $row[] = $submission->createdAt; $row[] = isset($submission->user_info->name) ? $submission->user_info->name : ''; + foreach ($userAttrs as $attr) { + $row[] = $this->userAttributeValue($submission->user_info ?? null, $attr); + } $row[] = isset($submission->workflow_status) ? $submission->workflow_status : ''; foreach($history->data->questions as $q => $v) { if (isset($v->type) && $v->type == 'hidden') { @@ -10313,6 +10333,11 @@ class FormController extends Controller $exceldata[] = ['']; $headers = ['Submission Date', 'Submitted By', 'Employee Code', 'Approval Status']; + $userAttrs = $this->userAttributeCodes($history->data->form ?? null); + $userAttrLabels = $this->resolveUserAttributeLabels($userAttrs); + foreach ($userAttrs as $attr) { + $headers[] = $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', (string) $attr)); + } $exportShowPositions = $history->data->form->show_positions ?? $history->data->form->show_position ?? 'no'; $exportPositionColumns = $this->getAvailablePositionColumns($history->data->submissions ?? [], $exportShowPositions); $positionLabels = [ @@ -10347,6 +10372,9 @@ class FormController extends Controller $row[] = isset($submission->user_info->name) ? $submission->user_info->name : ''; $row[] = isset($submission->user_info->employee_code) ? $submission->user_info->employee_code : ''; $row[] = isset($submission->workflow_status) ? $submission->workflow_status : ''; + foreach ($userAttrs as $attr) { + $row[] = $this->userAttributeValue($submission->user_info ?? null, $attr); + } foreach ($exportPositionColumns as $positionField) { $row[] = isset($submission->{$positionField}) ? $submission->{$positionField} : ''; } @@ -12509,4 +12537,75 @@ class FormController extends Controller Log::debug($cmd); } + /** + * Selected user attribute codes when the form is configured to show them. + */ + protected function userAttributeCodes($form): array + { + if (!$form || ($form->show_user_attributes ?? 'no') !== 'yes') { + return []; + } + $raw = $form->user_attributes ?? []; + if (!is_array($raw)) { + return []; + } + $codes = []; + foreach ($raw as $code) { + if (is_object($code)) { + $code = $code->code ?? ''; + } + $code = trim((string) $code); + if ($code !== '') { + $codes[] = $code; + } + } + return array_values(array_unique($codes)); + } + + protected function userAttributeValue($user, string $attr): string + { + if (!$user) { + return '-'; + } + $prefixed = 'attribute_' . $attr; + if (isset($user->{$attr}) && $user->{$attr} !== '') { + return (string) $user->{$attr}; + } + if (isset($user->{$prefixed}) && $user->{$prefixed} !== '') { + return (string) $user->{$prefixed}; + } + return '-'; + } + + /** + * Map user attribute codes to display names. + */ + protected function resolveUserAttributeLabels(array $codes): array + { + $labels = []; + if (empty($codes)) { + return $labels; + } + + $map = []; + try { + $userAttrs = $this->getlambda('get', 'ums', 'userattribute', 'get_all'); + if (isset($userAttrs->data->items) && is_array($userAttrs->data->items)) { + foreach ($userAttrs->data->items as $attr) { + if (isset($attr->code)) { + $map[$attr->code] = $attr->attribute ?? $attr->code; + } + } + } + } catch (\Throwable $e) { + // Fall back to ucwords(code) below + } + + foreach ($codes as $code) { + $labels[$code] = $map[$code] ?? ucwords(str_replace('_', ' ', (string) $code)); + } + + return $labels; + } + } \ No newline at end of file diff --git a/app/Http/Controllers/MetricreportController.php b/app/Http/Controllers/MetricreportController.php index ae36cf32..a8ea6ebb 100644 --- a/app/Http/Controllers/MetricreportController.php +++ b/app/Http/Controllers/MetricreportController.php @@ -153,9 +153,14 @@ class MetricreportController extends Controller if (isset($response->data->graph->contact_attributes) && is_array($response->data->graph->contact_attributes)) { $contact_attribute_labels = $this->resolveContactAttributeLabels($response->data->graph->contact_attributes); } + + $user_attribute_labels = []; + if (isset($response->data->graph)) { + $user_attribute_labels = $this->resolveUserAttributeLabels($this->userAttributeCodes($response->data->graph)); + } //echo '
'; print_r(['periods' => $response->data->periods, 'charts' => $response->data->available_charts, 'graph' => $response->data->graph, 'post' => $post, 'colors' => $colors, 'breadcrumbs' => $breadcrumbs]); exit;
-        return $this->view('report')->with(['periods' => $response->data->periods, 'charts' => $response->data->available_charts, 'graph' => $response->data->graph, 'post' => $post , 'colors' => $colors, 'breadcrumbs' => $breadcrumbs, 'contact_attribute_labels' => $contact_attribute_labels]);
+        return $this->view('report')->with(['periods' => $response->data->periods, 'charts' => $response->data->available_charts, 'graph' => $response->data->graph, 'post' => $post , 'colors' => $colors, 'breadcrumbs' => $breadcrumbs, 'contact_attribute_labels' => $contact_attribute_labels, 'user_attribute_labels' => $user_attribute_labels]);
     }
 
     public function export(Request $request) {
@@ -177,6 +182,8 @@ class MetricreportController extends Controller
             }
         }
         $exceldata[] = [''];
+        $userAttrCodes = $this->userAttributeCodes($response->data->graph);
+        $userAttrLabels = $this->resolveUserAttributeLabels($userAttrCodes);
         switch($response->data->post->type) {
             case 'leaderboard':
             case 'scoreboard':
@@ -185,6 +192,9 @@ class MetricreportController extends Controller
                 $headings = $hideRank
                     ? ["User Id", "User Name", "Employee Code", "Designation"]
                     : ["Rank", "User Id", "User Name", "Employee Code", "Designation"];
+                foreach ($userAttrCodes as $attr) {
+                    $headings[] = $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', (string) $attr));
+                }
                 //'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email'
                 $parentSample = [];
                 if (!empty($response->data->graph->values)) {
@@ -223,6 +233,9 @@ class MetricreportController extends Controller
                             (string)($user->employee_code ?? ''),
                             $user->designation ?? '',
                         ];
+                    foreach ($userAttrCodes as $attr) {
+                        $rowdata[] = $this->userAttributeValue($user, $attr);
+                    }
                     $parents = (isset($user->parents) && !empty((array) $user->parents)) ? (array) $user->parents : [];
                     foreach ($parents as $par) {
                         $rowdata[] = isset($par->name) ? $par->name : '-';
@@ -294,7 +307,11 @@ class MetricreportController extends Controller
                 break;
             case 'details':
                 if($response->data->graph->chart == 'tabular') {
-                    $headers = ['User', 'Employee Code', 'Email', 'Designation', 'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email',  'Zone', 'Region', "Area", "Territory", "Role"];
+                    $headers = ['User', 'Employee Code', 'Email', 'Designation'];
+                    foreach ($userAttrCodes as $attr) {
+                        $headers[] = $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', (string) $attr));
+                    }
+                    $headers = array_merge($headers, ['Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email',  'Zone', 'Region', "Area", "Territory", "Role"]);
                     foreach($response->data->graph->values->metrics as $metric) {
                         $headers[] = $metric->metric;
                     }
@@ -305,6 +322,9 @@ class MetricreportController extends Controller
                         $row[] = $user->employee_code;
                         $row[] = $user->email;
                         $row[] = $user->designation;
+                        foreach ($userAttrCodes as $attr) {
+                            $row[] = $this->userAttributeValue($user, $attr);
+                        }
 
                         if(isset($user->parents->{'level_'.($user->level+1)})) {
                             $manager = $user->parents->{'level_'.($user->level+1)};
@@ -589,6 +609,12 @@ class MetricreportController extends Controller
                     $first->user->{$prop} = $canonical->user->{$prop};
                 }
             }
+            foreach ($this->userAttributeCodes($graph) as $attr) {
+                if ((!isset($first->user->{$attr}) || $first->user->{$attr} === '' || $first->user->{$attr} === '-')
+                    && isset($canonical->user->{$attr})) {
+                    $first->user->{$attr} = $canonical->user->{$attr};
+                }
+            }
         }
 
         $graph->values = array_values(array_filter($graph->values, function ($val, $i) use ($uid) {
@@ -629,4 +655,75 @@ class MetricreportController extends Controller
 
         return $labels;
     }
+
+    /**
+     * Selected user attribute codes when the view is configured to show them.
+     */
+    protected function userAttributeCodes($graph): array
+    {
+        if (($graph->show_user_attributes ?? 'no') !== 'yes') {
+            return [];
+        }
+        $raw = $graph->user_attributes ?? [];
+        if (!is_array($raw)) {
+            return [];
+        }
+        $codes = [];
+        foreach ($raw as $code) {
+            if (is_object($code)) {
+                $code = $code->code ?? '';
+            }
+            $code = trim((string) $code);
+            if ($code !== '') {
+                $codes[] = $code;
+            }
+        }
+        return array_values(array_unique($codes));
+    }
+
+    protected function userAttributeValue($user, string $attr): string
+    {
+        if (!$user) {
+            return '-';
+        }
+        $prefixed = 'attribute_' . $attr;
+        if (isset($user->{$attr}) && $user->{$attr} !== '') {
+            return (string) $user->{$attr};
+        }
+        if (isset($user->{$prefixed}) && $user->{$prefixed} !== '') {
+            return (string) $user->{$prefixed};
+        }
+        return '-';
+    }
+
+    /**
+     * Map user attribute codes to display names.
+     */
+    protected function resolveUserAttributeLabels(array $codes): array
+    {
+        $labels = [];
+        if (empty($codes)) {
+            return $labels;
+        }
+
+        $map = [];
+        try {
+            $userAttrs = $this->getlambda('get', 'ums', 'userattribute', 'get_all');
+            if (isset($userAttrs->data->items) && is_array($userAttrs->data->items)) {
+                foreach ($userAttrs->data->items as $attr) {
+                    if (isset($attr->code)) {
+                        $map[$attr->code] = $attr->attribute ?? $attr->code;
+                    }
+                }
+            }
+        } catch (\Throwable $e) {
+            // Fall back to ucwords(code) below
+        }
+
+        foreach ($codes as $code) {
+            $labels[$code] = $map[$code] ?? ucwords(str_replace('_', ' ', (string) $code));
+        }
+
+        return $labels;
+    }
 }
diff --git a/resources/views/form/history.blade.php b/resources/views/form/history.blade.php
index 4635e24b..f2bc121b 100644
--- a/resources/views/form/history.blade.php
+++ b/resources/views/form/history.blade.php
@@ -40,6 +40,9 @@
                                         
                                             
                                                 Submission Date
+                                                @foreach(($userAttrs ?? []) as $attr)
+                                                {{ $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', $attr)) }}
+                                                @endforeach
                                                 @foreach($questions as $code => $question)
                                                 @if($question->type == 'hidden')
                                                     @continue;
@@ -59,6 +62,20 @@
                                             @foreach($submissions as $submission)
                                             
                                                 {{date("d M Y", strtotime($submission->updatedAt))}}
+                                                @foreach(($userAttrs ?? []) as $attr)
+                                                @php
+                                                    $uaUser = $submission->user_info ?? null;
+                                                    $uaVal = '-';
+                                                    if ($uaUser) {
+                                                        if (isset($uaUser->{$attr}) && $uaUser->{$attr} !== '') {
+                                                            $uaVal = $uaUser->{$attr};
+                                                        } elseif (isset($uaUser->{'attribute_'.$attr}) && $uaUser->{'attribute_'.$attr} !== '') {
+                                                            $uaVal = $uaUser->{'attribute_'.$attr};
+                                                        }
+                                                    }
+                                                @endphp
+                                                {{ $uaVal }}
+                                                @endforeach
                                                 @foreach($questions as $code => $question)
                                                     @if($question->type == 'hidden')
                                                         @continue;
diff --git a/resources/views/form/list.blade.php b/resources/views/form/list.blade.php
index e8757bc3..242927e7 100644
--- a/resources/views/form/list.blade.php
+++ b/resources/views/form/list.blade.php
@@ -67,6 +67,9 @@
                                                 Submission Date
                                                 Submitted By
                                                 Employee Code
+                                                @foreach(($userAttrs ?? []) as $attr)
+                                                {{ $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', $attr)) }}
+                                                @endforeach
                                                 @if(isset($formdata) && isset($formdata->workflow) && $formdata->workflow == 'yes' )
                                                 Workflow Status
                                                 @endif
@@ -227,6 +230,9 @@
                 { "data": "date" },
                 { "data": "name" },
                 { "data": "employee_code" },
+                @foreach(($userAttrs ?? []) as $attr)
+                { "data": "{{ $attr }}" },
+                @endforeach
                 @if(isset($formdata) && isset($formdata->workflow) && $formdata->workflow == 'yes' )
                 { "data": "workflow_status" },
                 @endif
diff --git a/resources/views/form/rapport-xennex/list.blade.php b/resources/views/form/rapport-xennex/list.blade.php
index e8757bc3..242927e7 100644
--- a/resources/views/form/rapport-xennex/list.blade.php
+++ b/resources/views/form/rapport-xennex/list.blade.php
@@ -67,6 +67,9 @@
                                                 Submission Date
                                                 Submitted By
                                                 Employee Code
+                                                @foreach(($userAttrs ?? []) as $attr)
+                                                {{ $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', $attr)) }}
+                                                @endforeach
                                                 @if(isset($formdata) && isset($formdata->workflow) && $formdata->workflow == 'yes' )
                                                 Workflow Status
                                                 @endif
@@ -227,6 +230,9 @@
                 { "data": "date" },
                 { "data": "name" },
                 { "data": "employee_code" },
+                @foreach(($userAttrs ?? []) as $attr)
+                { "data": "{{ $attr }}" },
+                @endforeach
                 @if(isset($formdata) && isset($formdata->workflow) && $formdata->workflow == 'yes' )
                 { "data": "workflow_status" },
                 @endif
diff --git a/resources/views/metricreport/appreport.blade.php b/resources/views/metricreport/appreport.blade.php
index 82f5ecee..343ba4d8 100644
--- a/resources/views/metricreport/appreport.blade.php
+++ b/resources/views/metricreport/appreport.blade.php
@@ -15,6 +15,11 @@
             

{{$graph->name}}

+ @php + $showUserAttrs = ($graph->show_user_attributes ?? 'no') === 'yes'; + $userAttrs = ($showUserAttrs && isset($graph->user_attributes) && is_array($graph->user_attributes)) ? $graph->user_attributes : []; + $userAttrLabels = $user_attribute_labels ?? []; + @endphp
@@ -137,6 +142,9 @@ @if($graph->agg_type != 'team' || $post['type'] != 'leaderboard')Rank@endif User + @foreach($userAttrs as $attr) + {{ $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', $attr)) }} + @endforeach @foreach($graph->metrics as $val) @if(isset($val->is_visible) && $val->is_visible) {{$val->display}} @@ -155,6 +163,9 @@ @endif {{ isset($val->user->name) ? $val->user->name : '' }}
{{ isset($val->user->designation) ? $val->user->designation : '' }} + @foreach($userAttrs as $attr) + {{ $val->user->{$attr} ?? '-' }} + @endforeach @if($graph->type == 'verses') @foreach($graph->metrics as $m) @if(isset($m->is_visible) && $m->is_visible) @@ -242,6 +253,9 @@ User Employee Code + @foreach($userAttrs as $attr) + {{ $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', $attr)) }} + @endforeach Zone Region Area @@ -259,6 +273,9 @@ {{ $user->name }}
{{$user->designation}} {{ isset($user->employee_code) ? $user->employee_code:''}} + @foreach($userAttrs as $attr) + {{ $user->{$attr} ?? '-' }} + @endforeach {{ isset($user->positions->Zone) ? $user->positions->Zone : '-' }} {{ isset($user->positions->Region) ? $user->positions->Region : '-' }} {{ isset($user->positions->Area) ? $user->positions->Area : '-' }} diff --git a/resources/views/metricreport/report.blade.php b/resources/views/metricreport/report.blade.php index 2e714912..6a64e69e 100644 --- a/resources/views/metricreport/report.blade.php +++ b/resources/views/metricreport/report.blade.php @@ -29,6 +29,11 @@

{{$graph->name}}

+ @php + $showUserAttrs = ($graph->show_user_attributes ?? 'no') === 'yes'; + $userAttrs = ($showUserAttrs && isset($graph->user_attributes) && is_array($graph->user_attributes)) ? $graph->user_attributes : []; + $userAttrLabels = $user_attribute_labels ?? []; + @endphp

{!!$graph->agg_type == 'team' ? '' : '' !!} {{ucwords($graph->agg_type)}} Report

@@ -161,6 +166,9 @@ User Employee Code Designation + @foreach($userAttrs as $attr) + {{ $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', $attr)) }} + @endforeach Zone Region Area @@ -204,6 +212,9 @@ {{ isset($val->user->designation) ? $val->user->designation : '-' }} + @foreach($userAttrs as $attr) + {{ $val->user->{$attr} ?? '-' }} + @endforeach {{ isset($val->user->positions->Zone) ? $val->user->positions->Zone : (isset($val->user->positions->Country) ? $val->user->positions->Country : '-' ) }} {{ isset($val->user->positions->Region) ? $val->user->positions->Region : '-' }} @@ -303,6 +314,9 @@ User Employee Code + @foreach($userAttrs as $attr) + {{ $userAttrLabels[$attr] ?? ucwords(str_replace('_', ' ', $attr)) }} + @endforeach @if(!isset($graph->show_positions) || (isset($graph->show_positions) && $graph->show_positions)) Zone Region @@ -321,6 +335,9 @@ {{ isset($user->name) ? $user->name : '-' }}
{{isset($user->designation) ? $user->designation : '-'}} {{ isset($user->employee_code) ? $user->employee_code:''}} + @foreach($userAttrs as $attr) + {{ $user->{$attr} ?? '-' }} + @endforeach @if(!isset($graph->show_positions) || (isset($graph->show_positions) && $graph->show_positions)) {{ isset($user->positions->Zone) ? $user->positions->Zone : '-' }} {{ isset($user->positions->Region) ? $user->positions->Region : '-' }}