diff --git a/app/Http/Controllers/Admin/AdminInvoiceController.php b/app/Http/Controllers/Admin/AdminInvoiceController.php index 0209ff0..19d313e 100644 --- a/app/Http/Controllers/Admin/AdminInvoiceController.php +++ b/app/Http/Controllers/Admin/AdminInvoiceController.php @@ -26,15 +26,13 @@ class AdminInvoiceController extends Controller // ------------------------------------------------------------- public function popup($id) { - $invoice = Invoice::with(['items', 'order'])->findOrFail($id); + $invoice = Invoice::with(['items', 'order', 'installments'])->findOrFail($id); - // Find actual Shipment record - $shipment = \App\Models\Shipment::whereHas('items', function ($q) use ($invoice) { - $q->where('order_id', $invoice->order_id); - }) - ->first(); + $shipment = \App\Models\Shipment::whereHas('items', function ($q) use ($invoice) { + $q->where('order_id', $invoice->order_id); + })->first(); - return view('admin.popup_invoice', compact('invoice', 'shipment')); + return view('admin.popup_invoice', compact('invoice', 'shipment')); } // ------------------------------------------------------------- @@ -145,6 +143,22 @@ class AdminInvoiceController extends Controller $invoice->update(['pdf_path' => 'invoices/' . $fileName]); } + public function downloadInvoice($id) +{ + $invoice = Invoice::findOrFail($id); + + // Generate PDF if missing + if ( + !$invoice->pdf_path || + !file_exists(public_path($invoice->pdf_path)) + ) { + $this->generateInvoicePDF($invoice); + $invoice->refresh(); + } + + return response()->download(public_path($invoice->pdf_path)); +} + // ------------------------------------------------------------- // INSTALLMENTS (ADD/DELETE) // ------------------------------------------------------------- diff --git a/public/invoices/invoice-INV-2025-000029.pdf b/public/invoices/invoice-INV-2025-000029.pdf index 212a927..80c41f2 100644 Binary files a/public/invoices/invoice-INV-2025-000029.pdf and b/public/invoices/invoice-INV-2025-000029.pdf differ diff --git a/public/invoices/invoice-INV-2025-000031.pdf b/public/invoices/invoice-INV-2025-000031.pdf new file mode 100644 index 0000000..87950b3 Binary files /dev/null and b/public/invoices/invoice-INV-2025-000031.pdf differ diff --git a/resources/views/admin/invoice_edit.blade.php b/resources/views/admin/invoice_edit.blade.php index 662bef7..dd203c4 100644 --- a/resources/views/admin/invoice_edit.blade.php +++ b/resources/views/admin/invoice_edit.blade.php @@ -33,6 +33,97 @@ body { 100% { opacity: 1; transform: translateY(0) scale(1); } } +/* -------------------------------------------------- + INVOICE PREVIEW RESPONSIVE FIXES +-------------------------------------------------- */ +.invoice-preview-wrapper { + width: 100%; + overflow: auto; + max-width: 100%; + box-sizing: border-box; +} + +.invoice-preview-wrapper * { + box-sizing: border-box; +} + +/* Override any fixed width styles that might be in popup_invoice */ +#invoicePreview, +.invoice-container, +.invoice-wrapper { + max-width: 100% !important; + width: 100% !important; +} + +/* Responsive table fixes for invoice */ +.invoice-preview-wrapper table { + width: 100% !important; + max-width: 100% !important; + table-layout: auto !important; +} + +.invoice-preview-wrapper .table-responsive { + overflow-x: auto !important; + -webkit-overflow-scrolling: touch; +} + +/* Ensure all elements scale properly */ +.invoice-preview-wrapper .row, +.invoice-preview-wrapper .col, +.invoice-preview-wrapper [class*="col-"] { + flex: 1 1 auto !important; + max-width: 100% !important; +} + +/* Force responsive behavior for print-style elements */ +@media (max-width: 1200px) { + .invoice-preview-wrapper { + font-size: 95%; + } +} + +@media (max-width: 992px) { + .invoice-preview-wrapper { + font-size: 90%; + } +} + +@media (max-width: 768px) { + .invoice-preview-wrapper { + font-size: 85%; + } + + .invoice-preview-wrapper table th, + .invoice-preview-wrapper table td { + padding: 0.5rem !important; + } +} + +@media (max-width: 576px) { + .invoice-preview-wrapper { + font-size: 80%; + } + + .invoice-preview-wrapper .d-flex { + flex-direction: column !important; + } + + .invoice-preview-wrapper .text-end, + .invoice-preview-wrapper .text-start { + text-align: center !important; + } +} + +/* Prevent any fixed pixel widths */ +.invoice-preview-wrapper [style*="width:"]:not([style*="width:100%"]):not([style*="width:auto"]) { + width: auto !important; + max-width: 100% !important; +} + +.invoice-preview-wrapper [style*="min-width"] { + min-width: 0 !important; +} + /* -------------------------------------------------- COMPACT CARD DESIGN -------------------------------------------------- */ @@ -332,6 +423,30 @@ body { font-size: 0.8rem; } } + +@media print { + .invoice-preview-wrapper { + max-width: 100% !important; + width: 100% !important; + overflow: visible !important; + } + + .invoice-preview-wrapper * { + visibility: visible !important; + } + + .glass-card { + box-shadow: none !important; + border: 1px solid #000 !important; + } + + .card-header-compact { + background: #000 !important; + color: #fff !important; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } +} @@ -344,7 +459,7 @@ body { Invoice Overview -
+
@include('admin.popup_invoice', [ 'invoice' => $invoice, 'shipment' => $shipment, diff --git a/resources/views/admin/popup_invoice.blade.php b/resources/views/admin/popup_invoice.blade.php index ce9392b..b02a7b6 100644 --- a/resources/views/admin/popup_invoice.blade.php +++ b/resources/views/admin/popup_invoice.blade.php @@ -56,7 +56,7 @@ } .id-container { - margin-bottom: 1rem; /* Reduced from 1.5rem */ + margin-bottom: 1rem; } .id-box { @@ -67,6 +67,9 @@ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); transition: all 0.3s ease; height: 100%; + display: flex; + align-items: center; + gap: 1rem; } .id-box:hover { @@ -82,34 +85,29 @@ border-left: 4px solid var(--success); } - .id-box-accent { - border-left: 4px solid var(--warning); - } - .id-icon { - width: 36px; - height: 36px; - border-radius: 50%; + width: 48px; + height: 48px; + border-radius: var(--border-radius); display: flex; align-items: center; justify-content: center; - margin-bottom: 0.5rem; /* Reduced from 0.75rem */ - font-size: 1rem; + font-size: 1.2rem; + flex-shrink: 0; } .id-icon-primary { - background: rgba(52, 152, 219, 0.1); - color: var(--secondary); + background: linear-gradient(135deg, #3498db 0%, #2980b9 100%); + color: white; } .id-icon-secondary { - background: rgba(39, 174, 96, 0.1); - color: var(--success); + background: linear-gradient(135deg, #27ae60 0%, #219653 100%); + color: white; } - .id-icon-accent { - background: rgba(243, 156, 18, 0.1); - color: var(--warning); + .id-content { + flex: 1; } .id-label { @@ -126,76 +124,87 @@ font-weight: 700; color: var(--primary); margin-bottom: 0; + word-break: break-word; + line-height: 1.3; } - .date-container { - background: white; - border-radius: var(--border-radius); - padding: 1rem; /* Reduced from 1.25rem */ - margin-bottom: 1rem; /* Reduced from 1.5rem */ - border: 1px solid #e9ecef; - box-shadow: var(--box-shadow); - } - - .date-card { - text-align: center; - padding: 0.75rem; - background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); - border-radius: var(--border-radius); - border: 1px solid rgba(0,0,0,0.05); - } - - .date-icon { - width: 40px; - height: 40px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - margin: 0 auto 0.5rem; /* Reduced from 0.75rem */ - background: var(--secondary); + /* Enhanced Date Section with Blue-Purple Gradient */ + .date-badge { + font-size: 0.85rem; + padding: 0.75rem 1rem; + border-radius: 8px; + font-weight: 500; + background: linear-gradient(135deg, #3498db 0%, #9b59b6 100%); color: white; - font-size: 1rem; + border: none; + min-width: 140px; + position: relative; + overflow: hidden; + box-shadow: 0 4px 15px rgba(52, 152, 219, 0.2); } - .date-label { - font-size: 0.8rem; - color: #6c757d; - font-weight: 600; - margin-bottom: 0.5rem; + .date-badge:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(52, 152, 219, 0.3); + } + + .date-badge .badge-label { + font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.5px; - } - - .date-value { - font-size: 1rem; - font-weight: 700; - color: var(--primary); - padding: 0.5rem; - background: white; - border-radius: 4px; - border: 1px solid #e9ecef; - } - - .date-connector { + color: rgba(255, 255, 255, 0.9); + margin-bottom: 0.25rem; display: flex; align-items: center; - justify-content: center; - height: 100%; + gap: 4px; } - .date-connector i { - background: var(--light); - padding: 10px; + .date-badge .badge-label i { + font-size: 0.6rem; + } + + .date-badge .badge-value { + font-weight: 700; + font-size: 0.95rem; + color: white; + } + + .date-badge.due-date { + background: linear-gradient(135deg, #3498db 0%, #9b59b6 100%); + } + + .date-badge.overdue { + background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%); + animation: pulse 2s infinite; + } + + @keyframes pulse { + 0% { box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.4); } + 70% { box-shadow: 0 0 0 6px rgba(231, 76, 60, 0); } + 100% { box-shadow: 0 0 0 0 rgba(231, 76, 60, 0); } + } + + .date-separator { + color: #dee2e6; + font-weight: 300; + padding: 0 0.5rem; + display: flex; + align-items: center; + } + + .date-separator i { + background: white; + padding: 8px; border-radius: 50%; color: var(--secondary); border: 2px solid #e9ecef; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); } .card { border: 1px solid #e9ecef; border-radius: var(--border-radius); - margin-bottom: 1rem; /* Reduced from 1.5rem */ + margin-bottom: 1rem; box-shadow: var(--box-shadow); } @@ -228,27 +237,18 @@ background-color: rgba(52, 152, 219, 0.03); } - .summary-card { - background: var(--light); - border-left: 4px solid var(--secondary); - } - - .summary-header { - background: var(--primary); - color: white; + /* Simplified Summary Section */ + .summary-container { + margin: 2rem 0; } .amount-row { - border-bottom: 1px solid #e9ecef; + display: flex; + justify-content: space-between; + align-items: center; padding: 0.75rem 0; } - .total-row { - border-top: 2px solid #dee2e6; - font-size: 1.1rem; - font-weight: 700; - } - .text-primary { color: var(--primary) !important; } @@ -268,15 +268,20 @@ /* COMPACT HEADER STYLES */ .compact-header { - margin-bottom: 0.75rem; /* Reduced from default */ + margin-bottom: 0.75rem; } .compact-header .invoice-title { - margin-bottom: 0.25rem; /* Reduced gap */ + margin-bottom: 0.25rem; } - .compact-header .status-badge { - margin-top: 0.25rem; /* Reduced gap */ + /* Date and status row */ + .date-status-row { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 0.75rem; + flex-wrap: wrap; } @media (max-width: 768px) { @@ -284,10 +289,6 @@ margin: 1rem; } - .date-connector { - margin: 1rem 0; - } - .table-responsive { font-size: 0.8rem; } @@ -295,6 +296,55 @@ .id-box { margin-bottom: 1rem; } + + .date-status-row { + justify-content: flex-start; + margin-top: 0.5rem; + } + + .compact-header .col-md-6.text-end { + text-align: left !important; + } + + .date-badge { + min-width: 120px; + } + + .summary-container { + padding: 0 1rem; + } + } + + @media (max-width: 576px) { + .date-status-row { + flex-direction: column; + align-items: flex-start; + gap: 0.5rem; + } + + .date-separator { + display: none; + } + + .date-badge { + width: 100%; + } + + .id-box { + flex-direction: column; + text-align: center; + gap: 0.75rem; + } + + .id-icon { + width: 40px; + height: 40px; + font-size: 1rem; + } + + .table-responsive { + overflow-x: auto; + } } @@ -318,108 +368,89 @@
- - - {{ ucfirst($invoice->status) }} - -
-
- - - -
-
- -
-
-
- +
+ +
+
+ INVOICE DATE +
+
{{ \Carbon\Carbon::parse($invoice->invoice_date)->format('M d, Y') }}
-
Invoice ID
-
{{ $invoice->invoice_number }}
-
-
- - -
-
-
- -
-
Order ID
-
- @if($invoice->order && $invoice->order->order_id) - {{ $invoice->order->order_id }} - @elseif($invoice->order_id) - {{ $invoice->order_id }} - @else - N/A - @endif -
-
-
- - -
-
-
- -
-
Shipment ID
-
- @php - $shipmentId = 'N/A'; - // Try multiple ways to get shipment ID - if($invoice->shipment && $invoice->shipment->shipment_id) { - $shipmentId = $invoice->shipment->shipment_id; - } elseif($invoice->shipment_id) { - $shipmentId = $invoice->shipment_id; - } elseif(isset($shipment) && $shipment && $shipment->shipment_id) { - $shipmentId = $shipment->shipment_id; - } - @endphp - {{ $shipmentId }} + + +
+
+ DUE DATE +
+
{{ \Carbon\Carbon::parse($invoice->due_date)->format('M d, Y') }}
+ + + + + {{ ucfirst($invoice->status) }} +
-
-
-
-
-
- +
+
+ +
+
+
+ +
+
+
ORDER ID
+
+ @if($invoice->order && $invoice->order->order_id) + {{ $invoice->order->order_id }} + @elseif($invoice->order_id) + {{ $invoice->order_id }} + @else + N/A + @endif +
-
INVOICE DATE
-
{{ \Carbon\Carbon::parse($invoice->invoice_date)->format('M d, Y') }}
-
-
- -
-
-
-
-
- + + +
+
+
+
-
DUE DATE
-
- {{ \Carbon\Carbon::parse($invoice->due_date)->format('M d, Y') }} +
+
SHIPMENT ID
+
+ @php + $shipmentId = 'N/A'; + // Try multiple ways to get shipment ID + if($invoice->shipment && $invoice->shipment->shipment_id) { + $shipmentId = $invoice->shipment->shipment_id; + } elseif($invoice->shipment_id) { + $shipmentId = $invoice->shipment_id; + } elseif(isset($shipment) && $shipment && $shipment->shipment_id) { + $shipmentId = $shipment->shipment_id; + } + @endphp + {{ $shipmentId }} +
@@ -519,78 +550,71 @@
- -
-
-
-
-
- Final Summary -
-
-
-
- Amount: - ₹{{ number_format($invoice->final_amount,2) }} -
+ @php + $totalAmount = $invoice->final_amount; + $gstAmount = $invoice->gst_amount; + $totalPayable = $invoice->final_amount_with_gst; - @if($invoice->tax_type === 'gst') - {{-- CGST --}} -
- CGST ({{ $invoice->cgst_percent ?? ($invoice->gst_percent/2) }}%): - ₹{{ number_format($invoice->gst_amount/2, 2) }} -
+ $paidAmount = $invoice->totalPaid(); + $remaining = $invoice->remainingAmount(); + @endphp - {{-- SGST --}} -
- SGST ({{ $invoice->sgst_percent ?? ($invoice->gst_percent/2) }}%): - ₹{{ number_format($invoice->gst_amount/2, 2) }} -
+
+
+
- @elseif($invoice->tax_type === 'igst') - {{-- IGST --}} -
- IGST ({{ $invoice->igst_percent ?? $invoice->gst_percent }}%): - ₹{{ number_format($invoice->gst_amount, 2) }} -
- @else - {{-- Default GST --}} -
- GST ({{ $invoice->gst_percent }}%): - ₹{{ number_format($invoice->gst_amount, 2) }} -
- @endif - -
- Total Payable: - ₹{{ number_format($invoice->final_amount_with_gst,2) }} -
-
-
-
+
+ Total Amount + ₹{{ number_format($totalAmount,2) }}
+ +
+ GST Amount + + + ₹{{ number_format($gstAmount,2) }} + +
+ +
+ Total Payable + + ₹{{ number_format($totalPayable,2) }} + +
+ +
+ Paid Amount + + − ₹{{ number_format($paidAmount,2) }} + +
+ +
+ Remaining Amount + + ₹{{ number_format($remaining,2) }} + +
+ +
+
+
+
- @if($invoice->pdf_path) - + + Download PDF - @endif -
- - -
-

Thank you for your business!

-

For any inquiries, contact us at support@Kent Logistic

+
@@ -600,12 +624,12 @@ - + + \ No newline at end of file diff --git a/resources/views/admin/shipments.blade.php b/resources/views/admin/shipments.blade.php index 0f8d6bf..c0bb32d 100644 --- a/resources/views/admin/shipments.blade.php +++ b/resources/views/admin/shipments.blade.php @@ -734,17 +734,31 @@ text-decoration: underline; } - /* Shipment Details Modal */ + /* Shipment Details Modal - EDGE-TO-EDGE STYLING */ + .modal-xl.edge-to-edge { + max-width: 95vw !important; + width: 95vw !important; + margin: 1vh auto !important; + } + + /* UPDATED: Shipment Order Details Modal - ALSO EDGE-TO-EDGE */ + .modal-xl.edge-to-edge.order-details-modal { + max-width: 95vw !important; + width: 95vw !important; + margin: 1vh auto !important; + } + .shipment-details-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; - padding: 25px 30px 15px; + padding: 25px 35px 15px; border-radius: 20px 20px 0 0; } .shipment-details-body { - padding: 40px 45px; + padding: 30px 35px; + width: 100%; } .shipment-info-row { @@ -824,47 +838,63 @@ border-bottom-right-radius: 10px; } - /* Shipment Totals Section */ + /* Shipment Totals Section - SINGLE ROW ON DESKTOP */ .shipment-totals { margin-top: 25px; - padding: 25px; + padding: 25px 20px; background: linear-gradient(135deg, #f8fafc, #e2e8f0); border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); border-left: 4px solid #4361ee; + width: 100%; } .shipment-totals-row { - display: flex; - flex-wrap: wrap; - gap: 20px; - justify-content: space-between; + display: grid; + grid-template-columns: repeat(8, 1fr); + gap: 12px; + justify-content: center; + align-items: stretch; + width: 100%; } .shipment-total-item { - flex: 1; - min-width: 150px; text-align: center; - padding: 15px; + padding: 15px 10px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); + min-width: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + flex-shrink: 1; } .shipment-total-label { font-weight: 600; color: #64748b; - font-size: 12px; + font-size: 11px; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.5px; + line-height: 1.2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; } .shipment-total-value { font-weight: 800; - font-size: 20px; + font-size: 18px; color: #1e293b; line-height: 1.2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; } .total-amount { @@ -873,6 +903,7 @@ padding: 10px; border-radius: 8px; border: 2px solid #10b981; + width: 100%; } .total-quantity { @@ -881,6 +912,7 @@ padding: 10px; border-radius: 8px; border: 2px solid #0ea5e9; + width: 100%; } .total-weight { @@ -889,6 +921,7 @@ padding: 10px; border-radius: 8px; border: 2px solid #8b5cf6; + width: 100%; } .total-cbm { @@ -897,6 +930,7 @@ padding: 10px; border-radius: 8px; border: 2px solid #ef4444; + width: 100%; } .total-ctn { @@ -905,6 +939,7 @@ padding: 10px; border-radius: 8px; border: 2px solid #f59e0b; + width: 100%; } .total-ttl-cbm { @@ -913,6 +948,7 @@ padding: 10px; border-radius: 8px; border: 2px solid #8b5cf6; + width: 100%; } .total-ttl-kg { @@ -921,6 +957,7 @@ padding: 10px; border-radius: 8px; border: 2px solid #14b8a6; + width: 100%; } /* Animation for loading */ @@ -964,8 +1001,8 @@ display: table-row; } - /* ---------- Pagination Styles ---------- */ - .pagination-container, .modal-pagination-container { + /* ---------- Pagination Styles (Same as Account Dashboard) ---------- */ + .pagination-container { display: flex; justify-content: space-between; align-items: center; @@ -974,19 +1011,19 @@ border-top: 1px solid #eef3fb; } - .pagination-info, .modal-pagination-info { + .pagination-info { font-size: 13px; color: #9ba5bb; font-weight: 600; } - .pagination-controls, .modal-pagination-controls { + .pagination-controls { display: flex; align-items: center; gap: 8px; } - .pagination-btn, .modal-pagination-btn { + .pagination-btn { background: #fff; border: 1px solid #e3eaf6; color: #1a2951; @@ -1003,13 +1040,13 @@ height: 32px; } - .pagination-btn:hover:not(:disabled), .modal-pagination-btn:hover:not(:disabled) { + .pagination-btn:hover:not(:disabled) { background: #1a2951; color: white; border-color: #1a2951; } - .pagination-btn:disabled, .modal-pagination-btn:disabled { + .pagination-btn:disabled { background: #f8fafc; color: #cbd5e0; border-color: #e2e8f0; @@ -1017,7 +1054,7 @@ opacity: 0.6; } - .pagination-page-btn, .modal-pagination-page-btn { + .pagination-page-btn { background: #fff; border: 1px solid #e3eaf6; color: #1a2951; @@ -1031,13 +1068,13 @@ text-align: center; } - .pagination-page-btn:hover, .modal-pagination-page-btn:hover { + .pagination-page-btn:hover { background: #1a2951; color: white; border-color: #1a2951; } - .pagination-page-btn.active, .modal-pagination-page-btn.active { + .pagination-page-btn.active { background: #1a2951; color: white; border-color: #1a2951; @@ -1055,16 +1092,210 @@ padding: 0 4px; } + /* Image-based pagination buttons */ + .pagination-img-btn { + background: #fff; + border: 1px solid #e3eaf6; + border-radius: 6px; + cursor: pointer; + transition: all 0.3s ease; + display: flex; + align-items: center; + justify-content: center; + min-width: 40px; + height: 32px; + padding: 0; + } + + .pagination-img-btn:hover:not(:disabled) { + background: #1a2951; + border-color: #1a2951; + } + + .pagination-img-btn:disabled { + background: #f8fafc; + border-color: #e2e8f0; + cursor: not-allowed; + opacity: 0.5; + } + + .pagination-img-btn img { + width: 16px; + height: 16px; + filter: brightness(0) saturate(100%) invert(26%) sepia(89%) saturate(748%) hue-rotate(201deg) brightness(93%) contrast(89%); + transition: filter 0.3s ease; + } + + .pagination-img-btn:hover:not(:disabled) img { + filter: brightness(0) saturate(100%) invert(100%) sepia(100%) saturate(0%) hue-rotate(288deg) brightness(106%) contrast(101%); + } + + .pagination-img-btn:disabled img { + filter: brightness(0) saturate(100%) invert(84%) sepia(8%) saturate(165%) hue-rotate(179deg) brightness(89%) contrast(86%); + } + + /* RESPONSIVE DESIGN FOR TABLET/MOBILE */ + @media (max-width: 1200px) { + .modal-xl.edge-to-edge { + max-width: 96vw !important; + width: 96vw !important; + margin: 2vh auto !important; + } + + .modal-xl.edge-to-edge.order-details-modal { + max-width: 96vw !important; + width: 96vw !important; + margin: 2vh auto !important; + } + + .shipment-totals-row { + grid-template-columns: repeat(4, 1fr); + gap: 15px; + } + } + + @media (max-width: 992px) { + .modal-xl.edge-to-edge { + max-width: 95vw !important; + width: 95vw !important; + margin: 2.5vh auto !important; + } + + .modal-xl.edge-to-edge.order-details-modal { + max-width: 95vw !important; + width: 95vw !important; + margin: 2.5vh auto !important; + } + + .shipment-details-body { + padding: 20px 25px; + } + + .shipment-totals-row { + grid-template-columns: repeat(3, 1fr); + } + } + @media (max-width: 768px) { - .pagination-container, .modal-pagination-container { + .pagination-container { flex-direction: column; gap: 10px; align-items: stretch; } - .pagination-controls, .modal-pagination-controls { + .pagination-controls { justify-content: center; } + + .modal-xl.edge-to-edge { + max-width: 100vw !important; + width: 100vw !important; + margin: 0 !important; + height: 100vh !important; + max-height: 100vh !important; + } + + .modal-xl.edge-to-edge.order-details-modal { + max-width: 100vw !important; + width: 100vw !important; + margin: 0 !important; + height: 100vh !important; + max-height: 100vh !important; + } + + .shipment-details-body { + padding: 15px 20px; + } + + .shipment-info-row { + flex-direction: column; + gap: 15px; + padding: 15px; + } + + .shipment-info-item { + padding: 10px 0; + } + + .shipment-totals { + padding: 20px 15px; + } + + .shipment-totals-row { + grid-template-columns: repeat(2, 1fr); + gap: 12px; + } + + .shipment-total-item { + padding: 12px 8px; + } + + .shipment-total-label { + font-size: 10px; + } + + .shipment-total-value { + font-size: 16px; + } + + /* Order details modal specific responsive styles */ + .order-details-content { + padding: 15px; + } + + .order-details-table { + min-width: 1000px; + } + } + + @media (max-width: 576px) { + .shipment-totals-row { + grid-template-columns: 1fr; + gap: 10px; + } + + .modal-xl.edge-to-edge .modal-content { + border-radius: 0; + height: 100vh; + overflow-y: auto; + } + + .modal-xl.edge-to-edge.order-details-modal .modal-content { + border-radius: 0; + height: 100vh; + overflow-y: auto; + } + + .shipment-details-header { + padding: 20px 25px 15px; + border-radius: 0; + } + + .order-details-header { + padding: 20px 15px 10px; + border-radius: 0; + } + + .order-details-body { + padding: 15px; + } + } + + @media (max-width: 480px) { + .modal-xl.edge-to-edge, + .modal-xl.edge-to-edge.order-details-modal { + margin: 0 !important; + padding: 0 !important; + } + + .modal-content { + border-radius: 0 !important; + } + + .shipment-details-body, + .order-details-body { + padding: 10px 15px; + } } @@ -1168,7 +1399,7 @@ Amount (₹) - + @forelse($availableOrders as $order) @@ -1196,29 +1427,6 @@
- - - -
- +
+ + +
+
+
+ @endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 8930fcb..3301b53 100644 --- a/routes/web.php +++ b/routes/web.php @@ -223,7 +223,11 @@ Route::prefix('admin') Route::post('/invoices/{id}/installment', [AdminInvoiceController::class, 'storeInstallment']) ->name('admin.invoice.installment.store'); - + Route::get( + '/admin/invoices/{id}/download', + [AdminInvoiceController::class, 'downloadInvoice'] +)->name('admin.invoices.download'); + Route::delete('/installment/{id}', [AdminInvoiceController::class, 'deleteInstallment']) ->name('admin.invoice.installment.delete');