Prechádzať zdrojové kódy

Shipment single - generate PDF

Vijayakrishnan 4 rokov pred
rodič
commit
b86b94be66

+ 16 - 0
public/css/style.css

@@ -1500,4 +1500,20 @@ tr.sep td {
 #practice-shipments-ready-to-print ::marker {
     color: #0009;
     font-size: 90%;
+}
+.only-print {
+    display: nonex;
+}
+@media print {
+    .only-print {
+        display: block;
+    }
+}
+.only-screen {
+    display: block;
+}
+@media print {
+    .only-screen {
+        display: none !important;
+    }
 }

+ 55 - 38
resources/views/app/practice-management/shipment.blade.php

@@ -9,7 +9,7 @@
     ?>
 
     <div id="practice-shipment" class="p-3 mcp-theme-1">
-        <div class="card border-bottom-0">
+        <div class="card">
             <div class="card-header px-3 py-3 d-flex align-items-center bg-white">
                 <strong class="font-size-14">
                     Shipment
@@ -17,42 +17,59 @@
                 <span class="text-sm text-secondary ml-2">
                     (Created: {{friendlier_date_time($shipment->created_at)}})
                 </span>
-                <button id="print-shipment" class="btn btn-sm btn-info ml-auto">Generate PDF &amp; mark PRINTED</button>
-                <div moe relative class="d-block ml-3">
-                    <a start show class="btn btn-default border btn-sm text-secondary">Cancel Shipment</a>
-                    <form url="/api/shipment/cancel" right>
-                        <input type="hidden" name="uid" value="{{ $shipment->uid }}">
-                        <p>Cancel this shipment?</p>
-                        <div class="d-flex align-items-center">
-                            <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
-                            <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel
-                            </button>
-                        </div>
-                    </form>
+                <div class="ml-auto d-inline-flex align-items-center only-screen">
+                    <button id="print-shipment" class="btn btn-sm btn-info">Generate PDF</button>
+                    <div moe relative class="d-block ml-3">
+                        <a start show class="btn btn-default border btn-sm text-secondary">Cancel Shipment</a>
+                        <form url="/api/shipment/cancel" right>
+                            <input type="hidden" name="uid" value="{{ $shipment->uid }}">
+                            <p>Cancel this shipment?</p>
+                            <div class="d-flex align-items-center">
+                                <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
+                                <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel
+                                </button>
+                            </div>
+                        </form>
+                    </div>
                 </div>
             </div>
-            <div class="card-header px-3 py-2 d-flex align-items-center bg-light">
-                <span class="mr-3">Status:</span>
-                <?php $statuses = ['CREATED', 'PRINTED', 'BEING_PICKED', 'PICKED', 'READY_FOR_FULFILMENT', 'READY_FOR_DISPATCH', 'DISPATCHED']; ?>
-                @foreach($statuses as $status)
-                    <button class="btn btn-sm {{ $shipment->status === $status ? 'btn-info font-weight-bold' : 'btn-outline-info change-status bg-white' }}"
-                            data-status="{{$status}}">
-                        {{cleanStatus($status)}}
-                    </button>
-                    @if($status !== 'DISPATCHED')
-                        <span class="text-secondary text-sm mx-2"><i class="fa fa-chevron-right on-hover-opaque"></i></span>
-                    @endif
-                @endforeach
+            <div class="only-screen">
+                <div class="card-header px-3 py-2 d-flex align-items-center bg-light">
+                    <span class="mr-3">Status:</span>
+                    <?php $statuses = ['CREATED', 'PRINTED', 'BEING_PICKED', 'PICKED', 'READY_FOR_FULFILMENT', 'READY_FOR_DISPATCH', 'DISPATCHED']; ?>
+                    @foreach($statuses as $status)
+                        <button class="btn btn-sm {{ $shipment->status === $status ? 'btn-info font-weight-bold' : 'btn-outline-info change-status bg-white' }}"
+                                data-status="{{$status}}">
+                            {{cleanStatus($status)}}
+                        </button>
+                        @if($status !== 'DISPATCHED')
+                            <span class="text-secondary text-sm mx-2"><i class="fa fa-chevron-right on-hover-opaque"></i></span>
+                        @endif
+                    @endforeach
+                </div>
+            </div>
+
+            <div class="card-header px-3 py-2 only-print bg-white">
+                <div class="d-flex justify-content-center">
+                    <div>
+                        <?php
+                        $generator = new Picqer\Barcode\BarcodeGeneratorPNG();
+                        echo '<img src="data:image/png;base64,' . base64_encode($generator->getBarcode($shipment->uid, $generator::TYPE_CODE_128, 1, 60)) . '">';
+                        ?>
+                        <div class="text-center text-secondary text-sm mt-1">{{$shipment->uid}}</div>
+                    </div>
+                </div>
+
             </div>
 
             <div class="card-body p-3 border-0">
 
-                <div class="mb-3">
+                <div class="mb-3 d-flex align-items-center">
                     <span class="text-secondary">Patient: </span>
                     <a href="{{route('patients.view.dashboard', $shipment->client->uid)}}">
                         <span class="font-size-14">{{$shipment->client->displayName()}}</span>
                     </a>
-                    <span class="text-secondary ml-3">Address: </span>
+                    <span class="text-secondary ml-auto">Address: </span>
                     <span class="font-size-14">{!! $shipment->mailing_address_full ? implode(" ", [$shipment->mailing_address_line1 . ' ' . $shipment->mailing_address_line2, $shipment->mailing_address_city . ' ' . $shipment->mailing_address_state . ' ' . $shipment->mailing_address_zip]) : '-'  !!}</span>
                 </div>
 
@@ -61,21 +78,24 @@
                         @if($shipment->supplyOrders && count($shipment->supplyOrders))
                             <thead>
                             <tr class="">
+                                <th class="px-2 text-nowrap text-secondary border-bottom-0 only-print">Picked</th>
                                 <th class="px-2 text-nowrap text-secondary border-bottom-0">Item</th>
                                 <th class="px-2 text-nowrap text-secondary border-bottom-0">IMEI</th>
                                 <th class="px-2 text-nowrap text-secondary border-bottom-0">Lot #</th>
-                                <th class="px-2 text-nowrap text-secondary border-bottom-0">&nbsp;</th>
+                                <th class="px-2 text-nowrap text-secondary border-bottom-0 only-screen">&nbsp;</th>
                             </tr>
                             </thead>
                             <tbody>
                             @foreach($shipment->supplyOrders as $iSupplyOrder)
                                 <tr class="">
+                                    <td class="px-2 only-print">&nbsp;</td>
                                     <td class="px-2">{{ $iSupplyOrder->product->title }}
                                         <span class="text-sm text-secondary ml-2">
                                             (Created: {{friendlier_date_time($iSupplyOrder->created_at)}})
                                         </span>
                                     </td>
                                     <td class="px-2">
+                                        <div class="only-screen">
                                         <div moe relative class="d-block">
                                             <a start
                                                show>{{ $iSupplyOrder->imei ? $iSupplyOrder->imei : '(not set)' }}</a>
@@ -93,9 +113,12 @@
                                                 </div>
                                             </form>
                                         </div>
+                                        </div>
+                                        &nbsp;
                                     </td>
                                     <td class="px-2">
                                         <div moe relative class="d-block">
+                                            <div class="only-screen">
                                             @if($iSupplyOrder->product->has_lot)
                                                 <a start
                                                    show>{{ $iSupplyOrder->lot_number ? $iSupplyOrder->lot_number : '(not set)' }}</a>
@@ -116,9 +139,11 @@
                                             @else
                                                 <span class="text-secondary">N/A</span>
                                             @endif
+                                            </div>
+                                            &nbsp;
                                         </div>
                                     </td>
-                                    <td class="px-2">
+                                    <td class="px-2 only-screen">
                                         <div moe relative>
                                             <a start show class="py-0 text-danger">Remove</a>
                                             <form url="/api/supplyOrder/removeFromShipment" right>
@@ -306,15 +331,7 @@
                 $('#print-shipment')
                     .off('click')
                     .on('click', function () {
-                        $.post('/api/shipment/setStatus', {
-                            uid: '{{$shipment->uid}}',
-                            status: 'PRINTED'
-                        }, (_data) => {
-                            if (!hasError(_data)) {
-                                fastReload();
-                            }
-                        }, 'json');
-                        // TODO: generate PDF
+                        window.print();
                     });
             }