Skip to content

Commit 50cbbe5

Browse files
authored
Merge pull request #329 from CarvingIT/fix/approvals-parse-error
solve issue from approval status
2 parents 2eb95b8 + d2e709c commit 50cbbe5

6 files changed

Lines changed: 64 additions & 48 deletions

File tree

app/Document.php

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -189,33 +189,58 @@ public function getDocumentApprovalStageAttribute(){
189189
if(!empty($this->approved_on)){
190190
return "Approved";
191191
}
192-
else{
193-
$latest_stage = $this->approvals;
194-
$latest_approval_record = $latest_stage->sortByDesc('id')->first();
195-
$approved_by_role = @$latest_approval_record->approver_role->name;
196-
197-
// Allow per-role pending labels configured in collection settings.
198-
$columnConfig = json_decode(@$this->collection->column_config);
199-
$approvalRoles = $columnConfig->approved_by ?? [];
200-
$approvalStatusLabels = $columnConfig->approval_status_labels ?? [];
201-
if (
202-
!empty($latest_approval_record->approved_by_role)
203-
&& is_array($approvalRoles)
204-
&& is_array($approvalStatusLabels)
205-
&& count($approvalRoles) === count($approvalStatusLabels)
206-
) {
207-
$pendingRoleIndex = array_search((string) $latest_approval_record->approved_by_role, array_map('strval', $approvalRoles), true);
208-
if ($pendingRoleIndex !== false && !empty($approvalStatusLabels[$pendingRoleIndex])) {
209-
return $approvalStatusLabels[$pendingRoleIndex];
210-
}
211-
}
212192

213-
return "Approval pending at ".ucfirst($approved_by_role);
214-
if (!$latest_approval_record || !$latest_approval_record->approver_role) {
215-
return "Approval pending (role not assigned)";
193+
$latest_approval_record = $this->approvals()->orderByDesc('id')->first();
194+
if (empty($latest_approval_record)) {
195+
return "Awaiting";
196+
}
197+
198+
// Check status strictly to differentiate NULL (pending) from 0 (rejected) from 1 (approved)
199+
if ($latest_approval_record->approval_status === 0) {
200+
return "Rejected";
201+
}
202+
203+
if ($latest_approval_record->approval_status === 1) {
204+
return "Approved";
205+
}
206+
207+
// Pending status (approval_status is NULL): prefer per-role labels configured in collection settings.
208+
$columnConfig = json_decode(@$this->collection->column_config);
209+
$approvalRoles = $columnConfig->approved_by ?? [];
210+
$approvalStatusLabels = $columnConfig->approval_status_labels ?? [];
211+
if (
212+
!empty($latest_approval_record->approved_by_role)
213+
&& is_array($approvalRoles)
214+
&& is_array($approvalStatusLabels)
215+
&& count($approvalRoles) === count($approvalStatusLabels)
216+
) {
217+
$pendingRoleIndex = array_search((string) $latest_approval_record->approved_by_role, array_map('strval', $approvalRoles), true);
218+
if ($pendingRoleIndex !== false && !empty($approvalStatusLabels[$pendingRoleIndex])) {
219+
return $approvalStatusLabels[$pendingRoleIndex];
216220
}
217-
return "Approval pending at ".ucfirst($latest_approval_record->approver_role->name);
218221
}
222+
223+
$approved_by_role = @$latest_approval_record->approver_role->name;
224+
if (empty($approved_by_role)) {
225+
return "Awaiting";
226+
}
227+
228+
return "Approval pending at ".ucfirst($approved_by_role);
229+
}
230+
231+
public function getDocumentApprovalByAttribute(){
232+
$latest_approval_record = $this->approvals()->orderByDesc('id')->first();
233+
if (empty($latest_approval_record)) {
234+
return '-';
235+
}
236+
237+
if (is_null($latest_approval_record->approval_status)) {
238+
return optional($latest_approval_record->approver_role)->name ?? '-';
239+
}
240+
241+
return optional($latest_approval_record->approver)->name
242+
?? optional($latest_approval_record->approver_role)->name
243+
?? '-';
219244
}
220245

221246
/**

app/Http/Controllers/ApprovalsController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ public function docApprovalForm(Request $request, $document_id)
3636
->where('approvable_id', $document_id)
3737
->where('approvable_type', 'App\\Document')
3838
->whereIn('approved_by_role', $user_roles)
39+
->whereNull('approval_status')
3940
->first();
4041
}
4142

4243
if(empty($current_approval)){
4344
$current_approval = Approval::where('approvable_id', $document_id)
4445
->where('approvable_type', 'App\\Document')
4546
->whereIn('approved_by_role', $user_roles)
47+
->whereNull('approval_status')
4648
->orderBy('id', 'DESC')
4749
->first();
4850
}

app/Http/Controllers/DocumentController.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ public function list(Request $request){
2929
}
3030

3131
public function listMyDocuments(Request $request){
32-
$documents = Document::where('created_by',auth()->user()->id)
33-
->orderBy('id','desc')
34-
->get();
32+
$documents = Document::with(['collection', 'approvals.approver', 'approvals.approver_role'])
33+
->where('created_by',auth()->user()->id)
34+
->orderBy('id','desc')
35+
->get();
3536
return view('my_documents',['documents'=>$documents,'activePage'=>'My Uploaded Documents','titlePage'=>'My Uploaded Documents']);
3637
}
3738

resources/views/document-details.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ function showDeleteDialog(){
554554
<tr>
555555
<td>{{ $d_a->created_at }}</td>
556556
<td>{{ @$d_a->approver->name }}</td>
557-
<td>@if($d_a->approval_status == 1) {{ __('Approved') }} @elseif ($d_a->approval_status === 0) {{ __('Rejected') }} @else {{ 'Awaiting approval' }} @endif</td>
557+
<td>@if($d_a->approval_status === 1) {{ __('Approved') }} @elseif ($d_a->approval_status === 0) {{ __('Rejected') }} @else {{ 'Awaiting approval' }} @endif</td>
558558
<td>{!! $d_a->comments !!}</td>
559559
</tr>
560560
@endforeach

resources/views/document_approval.blade.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717
"scrollX": true,
1818
columnDefs: [
1919
{ width: '20%', targets: 0 },
20-
{ "orderable": false, targets: 3 }
21-
{ "orderable": false, targets: 3 }
20+
{ "orderable": false, targets: 3 }
2221
],
2322
"lengthMenu": [ 100, 500, 1000 ],
24-
"pageLength": 100,
25-
fixedColumns: true
23+
"pageLength": 100
2624
}
2725
);
2826
// New code to retain search value
@@ -78,8 +76,8 @@
7876
<div class="col-md-9">
7977
<select id="approval_status" name="approval_status" class="selectpicker" required>
8078
<option value="">Select Status</option>
81-
<option value="1" @if(isset($current_approval_status) && (int)$current_approval_status === 1) selected @endif>Approved</option>
82-
<option value="0" @if(isset($current_approval_status) && (int)$current_approval_status === 0) selected @endif>Rejected</option>
79+
<option value="1" @if(isset($current_approval_status) && $current_approval_status === 1) selected @endif>Approved</option>
80+
<option value="0" @if(isset($current_approval_status) && $current_approval_status === 0) selected @endif>Rejected</option>
8381
</select>
8482
</div>
8583
</div>
@@ -101,7 +99,7 @@
10199
</form>
102100

103101
<div class="table-responsive">
104-
<table id="approvals" class="display">
102+
<table id="approvals" class="display" style="width:100%;">
105103
<thead class="text-primary">
106104
<tr>
107105
<th>Timestamp</th>
@@ -118,10 +116,8 @@
118116
<tr>
119117
<td>{{ $d_a->created_at }}</td>
120118
<td>{{ @$d_a->approver->name }}</td>
121-
<td>@if((int)$d_a->approval_status === 1) {{ __('Approved') }} @elseif ((int)$d_a->approval_status === 0) {{ __('Rejected') }} @else {{ 'Awaiting approval' }} @endif</td>
119+
<td>@if($d_a->approval_status === 1) {{ __('Approved') }} @elseif ($d_a->approval_status === 0) {{ __('Rejected') }} @else {{ 'Awaiting approval' }} @endif</td>
122120
<td>{!! $d_a->comments !!}</td>
123-
<td>@if($d_a->approval_status == 1) {{ __('Approved') }} @elseif ($d_a->approval_status === 0) {{ __('Rejected') }} @else {{ 'Awaiting approval' }} @endif</td>
124-
<td>{{ $d_a->comments }}</td>
125121
</tr>
126122
@endforeach
127123
</tbody>

resources/views/my_documents.blade.php

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,11 @@
5555
</thead>
5656
<tbody>
5757
@foreach($documents as $doc)
58-
@php
59-
$approval_details=\App\Approval::where('approvable_id',$doc->id)
60-
//->where('approval_status',0)
61-
->orderBy('id','desc')
62-
->first();
63-
//print_r($approval_details);
64-
//echo $approval_details->approval_status;
65-
@endphp
6658
<tr>
6759
<td>{{ $doc->title }}</td>
6860
<td>{{ @$doc->collection->name }}</td>
69-
<td>{{ @$approval_details->approver->name }}</td>
70-
<td>@if (!empty($approval_details->approval_status) && $approval_details->approval_status == 1){{ __('Approved') }} @elseif(!empty($approval_details->approval_status) && $approval_details->approval_status == 0){{ __('Rejected') }}@else {{ __('Awaiting') }} @endif </td>
61+
<td>{{ $doc->document_approval_by }}</td>
62+
<td>{{ $doc->document_approval_stage }}</td>
7163
<td>{{ $doc->created_at }}</td>
7264
<td class="td-actions text-right">
7365
<a href="/collection/{{ $doc->collection_id }}/document/{{ $doc->id }}/details" title="View Document"><i class="material-icons">visibility</i></a>

0 commit comments

Comments
 (0)