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->avatar : ''}})
{{ $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 @@
 ? $user->avatar : 'https://ui-avatars.com/api/?background=random&name='.$user->name}})
{{ 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 : '-' }}