Compare commits
2 Commits
b6121f9980
...
b15ddc9710
| Author | SHA1 | Date |
|---|---|---|
|
|
b15ddc9710 | |
|
|
c9efdeaaf0 |
|
|
@ -258,10 +258,11 @@ class FormController extends Controller
|
|||
return $this->deliverform($formdata, $finfo->data->questions);
|
||||
} elseif ($formdata->link_type == 'list') {
|
||||
$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);
|
||||
$dataDesignerView = $this->hasDataDesignerView($form);
|
||||
$showPositions = $dataDesignerView ? 'no' : ($form->show_positions ?? $form->show_position ?? 'no');
|
||||
$positionColumns = $dataDesignerView ? [] : $this->getAvailablePositionColumns($finfo->data->submissions ?? [], $showPositions);
|
||||
$userAttrs = $dataDesignerView ? [] : $this->userAttributeCodes($form);
|
||||
$userAttrLabels = $dataDesignerView ? [] : $this->resolveUserAttributeLabels($userAttrs);
|
||||
$listViewData = [
|
||||
'questions' => $finfo->data->questions,
|
||||
'submissions' => $finfo->data->submissions,
|
||||
|
|
@ -273,6 +274,7 @@ class FormController extends Controller
|
|||
'positionColumns' => $positionColumns,
|
||||
'userAttrs' => $userAttrs,
|
||||
'userAttrLabels' => $userAttrLabels,
|
||||
'dataDesignerView' => $dataDesignerView,
|
||||
];
|
||||
if (\View::exists('form.'.$formdata->partition.'.list-'.$formdata->form_id)) {
|
||||
return view('form.'.$formdata->partition.'.list-'.$formdata->form_id)->with($listViewData);
|
||||
|
|
@ -401,83 +403,106 @@ class FormController extends Controller
|
|||
$sessionForm = $request->session()->get('formdata');
|
||||
$canDeleteByPermission = $request->input('delete_submission') == 1
|
||||
|| $this->sessionFlag($sessionForm, 'delete_submission');
|
||||
$userAttrs = $this->userAttributeCodes($formdata);
|
||||
$dataDesignerView = $this->hasDataDesignerView($formdata);
|
||||
$userAttrs = $dataDesignerView ? [] : $this->userAttributeCodes($formdata);
|
||||
foreach($submissions as $submission) {
|
||||
if (!isset($submission->user_info->name)) continue;
|
||||
$row = [
|
||||
"date" => date("d M Y", strtotime($submission->updatedAt)),
|
||||
"name" => $submission->user_info->name,
|
||||
"designation" => $submission->user_info->designation ?? "",
|
||||
"employee_code" => $submission->user_info->employee_code ?? "",
|
||||
"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') {
|
||||
$row["workflow_status"] = ucfirst($submission->workflow_status ?? "");
|
||||
$row["workflow_next_approver"] = $submission->workflow_next_approver ?? "";
|
||||
}
|
||||
if ($dataDesignerView) {
|
||||
foreach ($questions as $code => $question) {
|
||||
if (isset($question->type) && $question->type == 'hidden') {
|
||||
continue;
|
||||
}
|
||||
$value = null;
|
||||
if (isset($submission->formdata) && is_object($submission->formdata) && property_exists($submission->formdata, $code)) {
|
||||
$value = $submission->formdata->{$code};
|
||||
} elseif (isset($submission->{$code})) {
|
||||
$value = $submission->{$code};
|
||||
}
|
||||
if (is_array($value)) {
|
||||
$value = implode(', ', $value);
|
||||
}
|
||||
$row[$code] = $value ?? '';
|
||||
}
|
||||
if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
|
||||
$row['workflow_next_approver'] = $submission->workflow_next_approver ?? '';
|
||||
}
|
||||
} else {
|
||||
$row['date'] = date("d M Y", strtotime($submission->updatedAt));
|
||||
$row['name'] = $submission->user_info->name;
|
||||
$row['designation'] = $submission->user_info->designation ?? "";
|
||||
$row['employee_code'] = $submission->user_info->employee_code ?? "";
|
||||
foreach ($userAttrs as $attr) {
|
||||
$row[$attr] = $this->userAttributeValue($submission->user_info ?? null, $attr);
|
||||
}
|
||||
|
||||
// answers for all questions (put on top level!)
|
||||
foreach($questions as $code => $question) {
|
||||
if ($question->type == 'hidden') continue;
|
||||
if ($question->type == 'multitextbox') {
|
||||
foreach ($question->options as $k => $v) {
|
||||
$row[$k] = isset($submission->formdata->{$k})
|
||||
? (is_array($submission->formdata->{$k})
|
||||
? implode(', ', $submission->formdata->{$k})
|
||||
: $submission->formdata->{$k})
|
||||
// workflow status
|
||||
if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
|
||||
$row["workflow_status"] = ucfirst($submission->workflow_status ?? "");
|
||||
$row["workflow_next_approver"] = $submission->workflow_next_approver ?? "";
|
||||
}
|
||||
|
||||
// answers for all questions (put on top level!)
|
||||
foreach($questions as $code => $question) {
|
||||
if ($question->type == 'hidden') continue;
|
||||
if ($question->type == 'multitextbox') {
|
||||
foreach ($question->options as $k => $v) {
|
||||
$row[$k] = isset($submission->formdata->{$k})
|
||||
? (is_array($submission->formdata->{$k})
|
||||
? implode(', ', $submission->formdata->{$k})
|
||||
: $submission->formdata->{$k})
|
||||
: '';
|
||||
}
|
||||
} else if ($question->type == 'file') {
|
||||
$row[$code . '_file'] = isset($submission->formdata->{$code})
|
||||
? (is_array($submission->formdata->{$code})
|
||||
? implode(', ', $submission->formdata->{$code})
|
||||
: $submission->formdata->{$code})
|
||||
: '';
|
||||
} else {
|
||||
$row[$code] = isset($submission->formdata->{$code})
|
||||
? (is_array($submission->formdata->{$code})
|
||||
? implode(', ', $submission->formdata->{$code})
|
||||
: $submission->formdata->{$code})
|
||||
: '';
|
||||
}
|
||||
} else if ($question->type == 'file') {
|
||||
$row[$code . '_file'] = isset($submission->formdata->{$code})
|
||||
? (is_array($submission->formdata->{$code})
|
||||
? implode(', ', $submission->formdata->{$code})
|
||||
: $submission->formdata->{$code})
|
||||
: '';
|
||||
} else {
|
||||
$row[$code] = isset($submission->formdata->{$code})
|
||||
? (is_array($submission->formdata->{$code})
|
||||
? implode(', ', $submission->formdata->{$code})
|
||||
: $submission->formdata->{$code})
|
||||
: '';
|
||||
}
|
||||
}
|
||||
|
||||
$generatedFiles = $submission->formdata->genareted_image ?? null;
|
||||
if (is_object($generatedFiles)) {
|
||||
$generatedFiles = array_values((array) $generatedFiles);
|
||||
}
|
||||
if (is_array($generatedFiles) && count($generatedFiles)) {
|
||||
$imageFormId = $submission->formdata->form_id ?? $form_id;
|
||||
$row['generated_image_url'] = collect($generatedFiles)->filter()->map(function ($file) use ($imageFormId) {
|
||||
return asset('storage/personalized/'.$imageFormId.'/'.$file);
|
||||
})->implode(', ');
|
||||
}
|
||||
|
||||
if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
|
||||
$row['workflow_action_date'] = $this->formatWorkflowActionDate($submission);
|
||||
$row['approval_history'] = $this->formatApprovalHistory($submission);
|
||||
}
|
||||
|
||||
// show positions (legacy: show_position) — null-safe; blades only render available columns
|
||||
$showPositions = $formdata->show_positions ?? $formdata->show_position ?? 'no';
|
||||
if ($showPositions == 'yes') {
|
||||
foreach (['territory', 'area', 'region', 'zone'] as $positionField) {
|
||||
$row[$positionField] = $submission->{$positionField} ?? '';
|
||||
$generatedFiles = $submission->formdata->genareted_image ?? null;
|
||||
if (is_object($generatedFiles)) {
|
||||
$generatedFiles = array_values((array) $generatedFiles);
|
||||
}
|
||||
if (is_array($generatedFiles) && count($generatedFiles)) {
|
||||
$imageFormId = $submission->formdata->form_id ?? $form_id;
|
||||
$row['generated_image_url'] = collect($generatedFiles)->filter()->map(function ($file) use ($imageFormId) {
|
||||
return asset('storage/personalized/'.$imageFormId.'/'.$file);
|
||||
})->implode(', ');
|
||||
}
|
||||
}
|
||||
|
||||
// show L1/L2 manager details
|
||||
if (isset($formdata->show_manager_details) && $formdata->show_manager_details == 'yes') {
|
||||
$row['manager1_name'] = $submission->manager1_name ?? '';
|
||||
$row['manager1_code'] = $submission->manager1_code ?? '';
|
||||
$row['manager2_name'] = $submission->manager2_name ?? '';
|
||||
$row['manager2_code'] = $submission->manager2_code ?? '';
|
||||
if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
|
||||
$row['workflow_action_date'] = $this->formatWorkflowActionDate($submission);
|
||||
$row['approval_history'] = $this->formatApprovalHistory($submission);
|
||||
}
|
||||
|
||||
// show positions (legacy: show_position) — null-safe; blades only render available columns
|
||||
$showPositions = $formdata->show_positions ?? $formdata->show_position ?? 'no';
|
||||
if ($showPositions == 'yes') {
|
||||
foreach (['territory', 'area', 'region', 'zone'] as $positionField) {
|
||||
$row[$positionField] = $submission->{$positionField} ?? '';
|
||||
}
|
||||
}
|
||||
|
||||
// show L1/L2 manager details
|
||||
if (isset($formdata->show_manager_details) && $formdata->show_manager_details == 'yes') {
|
||||
$row['manager1_name'] = $submission->manager1_name ?? '';
|
||||
$row['manager1_code'] = $submission->manager1_code ?? '';
|
||||
$row['manager2_name'] = $submission->manager2_name ?? '';
|
||||
$row['manager2_code'] = $submission->manager2_code ?? '';
|
||||
}
|
||||
}
|
||||
|
||||
// actions
|
||||
|
|
@ -490,8 +515,8 @@ class FormController extends Controller
|
|||
}
|
||||
if (isset($submission->actions) && in_array('edit', $submission->actions)) $row['actions'][] = 'edit';
|
||||
if (
|
||||
isset($formdata->workflow) &&
|
||||
$formdata->workflow == 'yes' &&
|
||||
isset($formdata->workflow) &&
|
||||
$formdata->workflow == 'yes' &&
|
||||
$submission->workflow_status == 'unapproved'
|
||||
) {
|
||||
$row['actions'][] = 'approve';
|
||||
|
|
@ -508,23 +533,25 @@ class FormController extends Controller
|
|||
}
|
||||
|
||||
// Target forms: always expose approval status for list UI (downloadpersonalization list)
|
||||
$targetFormIds = [
|
||||
'1781004538-88671587-3b81-403b-af63-fdbfae8a965e', // rapport-team2
|
||||
'1782118020-9c6160bf-f07c-465e-9ea1-e8ff0c0b89dd', // rapport-titans
|
||||
];
|
||||
$resolvedFormIds = array_filter([
|
||||
(string) $form_id,
|
||||
(string) ($originalFormId ?? ''),
|
||||
(string) (is_object($formdata) ? ($formdata->id ?? '') : ''),
|
||||
(string) (is_object($formdata) ? ($formdata->form_id ?? '') : ''),
|
||||
]);
|
||||
$isTargetForm = count(array_intersect($targetFormIds, $resolvedFormIds)) > 0;
|
||||
if (!$dataDesignerView) {
|
||||
$targetFormIds = [
|
||||
'1781004538-88671587-3b81-403b-af63-fdbfae8a965e', // rapport-team2
|
||||
'1782118020-9c6160bf-f07c-465e-9ea1-e8ff0c0b89dd', // rapport-titans
|
||||
];
|
||||
$resolvedFormIds = array_filter([
|
||||
(string) $form_id,
|
||||
(string) ($originalFormId ?? ''),
|
||||
(string) (is_object($formdata) ? ($formdata->id ?? '') : ''),
|
||||
(string) (is_object($formdata) ? ($formdata->form_id ?? '') : ''),
|
||||
]);
|
||||
$isTargetForm = count(array_intersect($targetFormIds, $resolvedFormIds)) > 0;
|
||||
|
||||
if ($isTargetForm) {
|
||||
$workflowStatus = $submission->workflow_status
|
||||
?? (is_object($submission->formdata) ? ($submission->formdata->workflow_status ?? '') : '');
|
||||
$row['workflow_status'] = ucfirst(trim((string) $workflowStatus));
|
||||
$row['workflow_next_approver'] = $submission->workflow_next_approver ?? ($row['workflow_next_approver'] ?? '');
|
||||
if ($isTargetForm) {
|
||||
$workflowStatus = $submission->workflow_status
|
||||
?? (is_object($submission->formdata) ? ($submission->formdata->workflow_status ?? '') : '');
|
||||
$row['workflow_status'] = ucfirst(trim((string) $workflowStatus));
|
||||
$row['workflow_next_approver'] = $submission->workflow_next_approver ?? ($row['workflow_next_approver'] ?? '');
|
||||
}
|
||||
}
|
||||
$jsonRows[] = $row;
|
||||
}
|
||||
|
|
@ -13337,6 +13364,47 @@ class FormController extends Controller
|
|||
Log::debug($cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
* True when the form Data Designer has at least one show_in_view field.
|
||||
* Opt-in only: empty designer or export-only fields keep the legacy list.
|
||||
*/
|
||||
protected function hasDataDesignerView($form): bool
|
||||
{
|
||||
if (!$form) {
|
||||
return false;
|
||||
}
|
||||
$designer = $form->data_designer ?? null;
|
||||
if (is_string($designer) && trim($designer) !== '') {
|
||||
$decoded = json_decode($designer, true);
|
||||
$designer = is_array($decoded) ? $decoded : null;
|
||||
} elseif (is_object($designer)) {
|
||||
$designer = (array) $designer;
|
||||
}
|
||||
if (!is_array($designer)) {
|
||||
return false;
|
||||
}
|
||||
$fields = $designer['fields'] ?? [];
|
||||
if (is_object($fields)) {
|
||||
$fields = (array) $fields;
|
||||
}
|
||||
if (!is_array($fields)) {
|
||||
return false;
|
||||
}
|
||||
foreach ($fields as $field) {
|
||||
if (is_object($field)) {
|
||||
$show = $field->show_in_view ?? false;
|
||||
} elseif (is_array($field)) {
|
||||
$show = $field['show_in_view'] ?? false;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
if ($show === true || $show === 1 || $show === '1' || $show === 'true') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Selected user attribute codes when Show User Attributes is Yes.
|
||||
* A saved attribute list is ignored while that setting is No.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -64,6 +64,15 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th data-priority="1">Action</th>
|
||||
@if(!empty($dataDesignerView))
|
||||
@foreach($questions as $code => $question)
|
||||
@if(isset($question->type) && $question->type == 'hidden')
|
||||
@continue
|
||||
@endif
|
||||
<th data-priority="1">{{ $question->label }}</th>
|
||||
@endforeach
|
||||
@php $showGeneratedImage = false; @endphp
|
||||
@else
|
||||
<th data-priority="1">Submission Date</th>
|
||||
<th data-priority="1">Submitted By</th>
|
||||
<th data-priority="1">Employee Code</th>
|
||||
|
|
@ -107,6 +116,7 @@
|
|||
@if($showGeneratedImage)
|
||||
<th data-priority="1">Generated Image</th>
|
||||
@endif
|
||||
@endif
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
@ -240,6 +250,14 @@
|
|||
return buttons;
|
||||
}
|
||||
},
|
||||
@if(!empty($dataDesignerView))
|
||||
@foreach($questions as $code => $question)
|
||||
@if(isset($question->type) && $question->type == 'hidden')
|
||||
@continue
|
||||
@endif
|
||||
{ "data": "{{$code}}", "defaultContent": "" },
|
||||
@endforeach
|
||||
@else
|
||||
{ "data": "date" },
|
||||
{ "data": "name" },
|
||||
{ "data": "employee_code" },
|
||||
|
|
@ -310,6 +328,7 @@
|
|||
}
|
||||
},
|
||||
@endif
|
||||
@endif
|
||||
],
|
||||
"initComplete": function(settings, json) {
|
||||
var textBox = $('.dataTables_filter label input');
|
||||
|
|
|
|||
Loading…
Reference in New Issue