فهرست منبع

Merge remote-tracking branch 'origin/master'

= 3 ماه پیش
والد
کامیت
d8c69b71b3

+ 14 - 2
app/Http/Controllers/AdminController.php

@@ -22,6 +22,7 @@ use Exception;
 use Ramsey\Uuid\Uuid;
 use App\Models\Lab2;
 use App\Models\GuestData;
+use App\Models\TestResult;
 use Illuminate\Support\Facades\DB;
 
 class AdminController extends Controller
@@ -102,7 +103,7 @@ class AdminController extends Controller
 
     public function userOrders(User $user)
     {
-        $orders = StoreOrder::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
+        $orders = StoreOrder::where('user_id', $user->id)->whereRaw('category IS NULL')->orderBy('created_at', 'DESC')->paginate(30);
         return view('app.my-account.admin.users.sub.orders', compact('user', 'orders'));
     }
     public function userTransactions(User $user)
@@ -186,7 +187,8 @@ class AdminController extends Controller
     {
         $filters = $request->all();
         $orders = StoreOrder::query();
-
+        $orders = $orders->whereRaw('category IS NULL');
+        
         $name = $request->get('name', null);
         if ($name) {
             $wildCardedName = '%' . $name . '%';
@@ -676,4 +678,14 @@ class AdminController extends Controller
         $records = $records->orderBy('id', 'DESC')->paginate(30);
         return view('app.my-account.admin.abandoned-carts.index', compact('records'));
     }
+
+    public function orderTestResults(StoreOrder $order)
+    {
+        $ordersIDS = [$order->id];
+        $associatedOrdersIDs = StoreOrder::where('parent_order_id', $order->id)->pluck('id')->toArray();
+        $ordersIDS = array_merge($ordersIDS, $associatedOrdersIDs);
+
+        $testResults = TestResult::whereIn('store_order_id', $ordersIDS)->whereRaw('is_deleted IS NOT TRUE')->orderBy('created_at', 'DESC')->get();
+        return view('app.my-account.admin.orders.sub.test-results', compact('order', 'testResults'));
+    }
 }

+ 35 - 0
app/Models/TestResult.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use App\Models\BaseModel;
+
+class TestResult extends BaseModel
+{
+    use HasFactory;
+
+    protected $table = 'test_result';
+
+    public function storeOrder(){
+        return $this->hasOne(StoreOrder::class, 'id', 'store_order_id');
+    }
+
+    public function detailJson($toArray = false)
+    {
+        if($toArray){
+            return json_decode($this->detail_json ?? '{}', true);
+        }
+        return json_decode($this->detail_json ?? '{}');
+    }
+
+    public function getDetailJsonValue($field)
+    {
+        $parsed = $this->detailJson(true);
+        if (isset($parsed[$field])) {
+            return $parsed[$field];
+        }
+        return null;
+    }
+}

+ 6 - 6
config/constants.php

@@ -62,19 +62,19 @@ return [
             'quest_code_for_pdf' => '8472'
         ],
         'GEN_CHL' => [
-            'label' => 'Chlamydia (Urogenital)',
+            'label' => 'Chlamydia',
             'page_title' => 'Genital Chlamydia Test',
             'quest_name_for_pdf' => 'Chlamydia trachomatis RNA, TMA, Urogenital',
             'quest_code_for_pdf' => '11361'
         ],
         'GEN_GON' => [
-            'label' => 'Gonorrhea (Urogenital)',
+            'label' => 'Gonorrhea',
             'page_title' => 'Genital Gonorrhea Test',
             'quest_name_for_pdf' => 'Neisseria gonorrhoeae RNA, TMA, Urogenital',
             'quest_code_for_pdf' => '11362'
         ],
         'GEN_CHL_GON' => [
-            'label' => 'Chlamydia + Gonorrhea (Urogenital)',
+            'label' => 'Chlamydia + Gonorrhea',
             'page_title' => '--',
             'quest_name_for_pdf' => 'CT/GC RNA,TMA,UROGEN',
             'quest_code_for_pdf' => '11363'
@@ -102,14 +102,14 @@ return [
             'quest_code_for_pdf' => '16185'
         ],
         '12TP' => [
-            'label' => '12-Test',
+            'label' => '12-Test Panel',
             'page_title' => 'Full 12-Panel STD Test',
-            'quest_components' => [ 'HSV_1', 'HSV_2', 'GEN_CHL_GON', 'ORAL_CHL_GON', 'HEP_A', 'HEP_B', 'HEP_C', 'SYPH', 'HIV_1_2', 'CBC', 'CMP' ]
+            'quest_components' => [ 'HSV_1', 'HSV_2', 'GEN_CHL_GON', 'HEP_A', 'HEP_B', 'HEP_C', 'SYPH', 'HIV_1_2', 'UA', 'CBC' ]
         ],
         '12TP_WITH_HIV_RNA' => [
             'label' => '12-Test Panel with HIV RNA Early Detection',
             'page_title' => 'Full 12-Panel STD Test with HIV Early RNA Detection',
-            'quest_components' => [ 'HSV_1', 'HSV_2', 'GEN_CHL_GON', 'ORAL_CHL_GON', 'HEP_A', 'HEP_B', 'HEP_C', 'SYPH', 'HIV_RNA', 'CBC', 'CMP' ]
+            'quest_components' => [ 'HSV_1', 'HSV_2', 'GEN_CHL_GON', 'HEP_A', 'HEP_B', 'HEP_C', 'SYPH', 'HIV_RNA', 'UA', 'CBC' ]
         ],
         'UA' => [
             'page_title' => 'Urinalysis - Complete',

+ 48 - 0
resources/views/app/my-account/admin/orders/forms/create-test-result.blade.php

@@ -0,0 +1,48 @@
+<div moe normal>
+    <a start show href="#" class="text-primary">+Create</a>
+    <form url="/api/testResult/create">
+        <input type="hidden" name="orderUid" value="{{ $order->uid }}">
+        <div class="mb-2">
+            <label>Test Name</label>
+            <input type="text" name="testName" class="form-control form-control-sm" value="" />
+        </div>
+        <div class="mb-2">
+            <label>Result Category</label>
+            <select name="resultCategory" class="form-control form-control-sm">
+                <option></option>
+                <option value="Pending">Pending</option>
+                <option value="Normal">Normal</option>
+                <option value="Abnormal">Abnormal</option>
+                <option value="Not Detected">Not Detected</option>
+            </select>
+        </div>
+        <div class="mb-2">
+            <label>Result Color</label>
+            <select name="resultColor" class="form-control form-control-sm">
+                <option></option>
+                <option value="GREEN">Green</option>
+                <option value="RED">Red</option>
+            </select>
+        </div>
+        <div class="mb-2">
+            <label>Numeric Value and Units</label>
+            <input type="text" name="numericValueAndUnits" class="form-control form-control-sm" value="" />
+        </div>
+        <div class="mb-2">
+            <label>Numeric Value Label</label>
+            <input type="text" name="numericValueLabel" class="form-control form-control-sm" value="" />
+        </div>
+        <div class="mb-2">
+            <label>Numeric Value Memo</label>
+            <input type="text" name="numericValueMemo" class="form-control form-control-sm" value="" />
+        </div>
+        <div class="mb-2">
+            <label>Commentary</label>
+            <input type="text" name="commentary" class="form-control form-control-sm" value="" />
+        </div>
+        <div>
+            <button submit class="btn btn-sm btn-primary me-2">Create</button>
+            <button cancel class="btn btn-sm btn-default border">Cancel</button>
+        </div>
+    </form>
+</div>

+ 13 - 0
resources/views/app/my-account/admin/orders/forms/delete-test-result.blade.php

@@ -0,0 +1,13 @@
+<div moe>
+    <a start show href="#" class="text-danger"><i class="fas fa-trash-alt"></i></a>
+    <form url="/api/testResult/delete" right>
+        <input type="hidden" name="testResultUid" value="{{ $tr->uid }}" />
+        <div class="mb-2">
+            <label class="fw-bold mb-1">Are you sure?</label>
+        </div>
+        <div>
+            <button submit class="btn btn-sm btn-danger me-2">Delete</button>
+            <button cancel class="btn btn-sm btn-default border">Cancel</button>
+        </div>
+    </form>
+</div>

+ 51 - 0
resources/views/app/my-account/admin/orders/forms/update-test-result.blade.php

@@ -0,0 +1,51 @@
+<div moe normal>
+    <a start show href="#" class="text-primary"><i class="fas fa-pencil-alt"></i></a>
+    <form url="/api/testResult/update" right>
+        <input type="hidden" name="testResultUid" value="{{ $tr->uid }}">
+        <div class="mb-2">
+            <label>Test Name</label>
+            <input type="text" name="testName" class="form-control form-control-sm" value="{{ $tr->test_name }}" />
+            @if(@$test_quest_name_for_pdf)
+                <div class="text-muted">{{ @$test_quest_code_for_pdf }} - {{ @$test_quest_name_for_pdf }}</div>
+            @endif
+        </div>
+        <div class="mb-2">
+            <label>Result Category</label>
+            <select name="resultCategory" class="form-control form-control-sm">
+                <option></option>
+                <option value="Pending" {{ $tr->result_category === 'Pending' ? 'selected':'' }}>Pending</option>
+                <option value="Normal" {{ $tr->result_category === 'Normal' ? 'selected':'' }}>Normal</option>
+                <option value="Abnormal" {{ $tr->result_category === 'Abnormal' ? 'selected':'' }}>Abnormal</option>
+                <option value="Not Detected" {{ $tr->result_category === 'Not Detected' ? 'selected':'' }}>Not Detected</option>
+            </select>
+        </div>
+        <div class="mb-2">
+            <label>Result Color</label>
+            <select name="resultColor" class="form-control form-control-sm">
+                <option></option>
+                <option value="GREEN"  {{ $tr->result_color === 'GREEN' ? 'selected':'' }}>Green</option>
+                <option value="RED"  {{ $tr->result_color === 'RED' ? 'selected':'' }}>Red</option>
+            </select>
+        </div>
+        <div class="mb-2">
+            <label>Numeric Value and Units</label>
+            <input type="text" name="numericValueAndUnits" class="form-control form-control-sm" value="{{ $tr->numeric_value_and_units }}" />
+        </div>
+        <div class="mb-2">
+            <label>Numeric Value Label</label>
+            <input type="text" name="numericValueLabel" class="form-control form-control-sm" value="{{ $tr->numeric_value_label }}" />
+        </div>
+        <div class="mb-2">
+            <label>Numeric Value Memo</label>
+            <input type="text" name="numericValueMemo" class="form-control form-control-sm" value="{{ $tr->numeric_value_memo }}" />
+        </div>
+        <div class="mb-2">
+            <label>Commentary</label>
+            <input type="text" name="commentary" class="form-control form-control-sm" value="{{ $tr->commentary }}" />
+        </div>
+        <div>
+            <button submit class="btn btn-sm btn-primary me-2">Update</button>
+            <button cancel class="btn btn-sm btn-default border">Cancel</button>
+        </div>
+    </form>
+</div>

+ 3 - 0
resources/views/app/my-account/admin/orders/partials/sidebar.blade.php

@@ -10,6 +10,9 @@ $currentMenu = \Illuminate\Support\Facades\Request::segment(4);
             <li class="nav-item">
                 <a class="nav-link {{\Illuminate\Support\Facades\Route::getCurrentRoute()->getName() === 'admin.orders.view.dashboard' ? 'active' : ''}}" href="{{ route('admin.orders.view.dashboard', $order) }}">Dashboard</a>
             </li>
+            <li class="nav-item">
+                <a class="nav-link {{\Illuminate\Support\Facades\Route::getCurrentRoute()->getName() === 'admin.orders.view.test-results' ? 'active' : ''}}" href="{{ route('admin.orders.view.test-results', $order) }}">Test Results</a>
+            </li>
             <li class="nav-item">
                 <a class="nav-link {{\Illuminate\Support\Facades\Route::getCurrentRoute()->getName() === 'admin.orders.view.financial-transactions' ? 'active' : ''}}" href="{{ route('admin.orders.view.financial-transactions', $order) }}">Financial Transactions</a>
             </li>

+ 58 - 0
resources/views/app/my-account/admin/orders/sub/test-results.blade.php

@@ -0,0 +1,58 @@
+@extends('app.my-account.admin.orders.single')
+
+@section('details')
+
+<div class="my-4">
+    <div class="d-flex align-items-center">
+        <h4 class="mb-0"><b>Test Results</b></h4>
+        <div>
+            @include('app.my-account.admin.orders.forms.create-test-result')
+        </div>
+    </div>
+    <div class="">
+        <table class="table table-sm table-hover table-striped table-bordered mb-0">
+            <thead>
+                <tr>
+                    <th>Date</th>
+                    <th>Test Name</th>
+                    <th>Result Category</th>
+                    <th>Result Color</th>
+                    <th>Numeric Value And Units</th>
+                    <th>Numeric Value Label</th>
+                    <th>Numeric Value Memo</th>
+                    <th>commentary</th>
+                    <th>Actions</th>
+                </tr>
+            </thead>
+            <tbody>
+                @foreach($testResults as $tr)
+                <?php
+                    $test_quest_name_for_pdf = $tr->getDetailJsonValue('test_quest_name_for_pdf');
+                    $test_quest_code_for_pdf = $tr->getDetailJsonValue('test_quest_code_for_pdf');
+                ?>
+                <tr>
+                    <td>{{friendly_date($tr->created_at)}}</td>
+                    <td>
+                        <div>{{ $tr->test_name }}</div>
+                        @if(@$test_quest_name_for_pdf)
+                        <div class="text-muted">{{ @$test_quest_code_for_pdf }} - {{ @$test_quest_name_for_pdf }}</div>
+                        @endif
+                    </td>
+                    <td>{{ $tr->result_category }}</td>
+                    <td>{{ $tr->result_color }}</td>
+                    <td>{{ $tr->numeric_value_and_units }}</td>
+                    <td>{{ $tr->numeric_value_label }}</td>
+                    <td>{{ $tr->numeric_value_memo }}</td>
+                    <td>{{ $tr->commentary }}</td>
+                    <td>
+                        @include('app.my-account.admin.orders.forms.delete-test-result')
+                        @include('app.my-account.admin.orders.forms.update-test-result')
+                    </td>
+                </tr>
+                @endforeach
+            </tbody>
+        </table>
+    </div>
+</div>
+
+@endsection

+ 11 - 1
resources/views/app/my-account/admin/users/sub/info/templates/parent-store-order.blade.php

@@ -50,7 +50,17 @@
                                         @foreach ($order->financialTransactions as $transaction)
                                             <tr>
                                                 <td>{{ friendly_date($transaction->created_at) }}</td>
-                                                <td>{{ $transaction->charge_or_refund }}</td>
+                                                <td>{{ $transaction->charge_or_refund }}
+                                                    @if($transaction->requires_stripe_confirmation)
+                                                        @if($transaction->is_stripe_confirmation_done)
+                                                            <span class="text-success">Completed</span>
+                                                        @else
+                                                            <span class="text-danger">Pending</span>
+                                                        @endif
+                                                    @else
+                                                        <span class="text-success">Completed</span>
+                                                    @endif
+                                                </td>
                                                 <td>${{ $transaction->amount }}</td>
                                                 <td>{!! $transaction->paymentMethod->displayName() !!}</td>
                                                 <td>

+ 11 - 1
resources/views/app/my-account/admin/users/sub/orders.blade.php

@@ -49,7 +49,17 @@
                                             @foreach ($order->financialTransactions as $transaction)
                                                 <tr>
                                                     <td>{{ friendly_date($transaction->created_at) }}</td>
-                                                    <td>{{ $transaction->charge_or_refund }}</td>
+                                                    <td>{{ $transaction->charge_or_refund }}
+                                                        @if($transaction->requires_stripe_confirmation)
+                                                            @if($transaction->is_stripe_confirmation_done)
+                                                                <span class="text-success">Completed</span>
+                                                            @else
+                                                                <span class="text-danger">Pending</span>
+                                                            @endif
+                                                        @else
+                                                            <span class="text-success">Completed</span>
+                                                        @endif
+                                                    </td>
                                                     <td>${{ $transaction->amount }}</td>
                                                     <td>{!! $transaction->paymentMethod->displayName() !!}</td>
                                                     <td>

+ 1 - 0
routes/web.php

@@ -80,6 +80,7 @@ Route::group(['middleware' => ['ensureUserLoggedIn']], function () {
                 Route::get('/dashboard', [AdminController::class, 'orderDashboard'])->name('.dashboard');
                 Route::get('/preview-invoice', [AdminController::class, 'orderPreviewInvoice'])->name('.preview-invoice');
                 Route::get('/financial-transactions', [AdminController::class, 'orderFinancialTransactions'])->name('.financial-transactions');
+                Route::get('/test-results', [AdminController::class, 'orderTestResults'])->name('.test-results');
                 Route::post('/order-charge', [AdminController::class, 'orderCharge'])->name('.order-charge');
                 Route::post('/file/upload', [AdminController::class, 'uploadFile'])->name('.upload-file');
                 Route::post('/file/delete', [AdminController::class, 'deleteFile'])->name('.delete-file');