176 lines
7.4 KiB
PHP
176 lines
7.4 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', 'Sales Order')
|
|
|
|
@section('content')
|
|
<div class="page-header">
|
|
<div>
|
|
<h1 class="page-title">Sales Order</h1>
|
|
<p class="page-subtitle">
|
|
<a href="{{ route('sales.orders.index') }}" class="text-blue-600 hover:underline">Sales Orders</a>
|
|
/ {{ $order->order_number ?? 'SO-' . str_pad($order->id, 5, '0', STR_PAD_LEFT) }}
|
|
</p>
|
|
</div>
|
|
<div class="flex gap-2">
|
|
@if($order->status === 'draft')
|
|
<form action="{{ route('sales.orders.confirm', $order) }}" method="POST">
|
|
@csrf @method('PATCH')
|
|
<button type="submit" class="btn-primary">Confirm Order</button>
|
|
</form>
|
|
@endif
|
|
@if($order->status === 'confirmed')
|
|
<a href="{{ route('sales.delivery-notes.create', ['sales_order_id' => $order->id]) }}" class="btn-primary">Create Delivery Note</a>
|
|
@endif
|
|
<a href="{{ route('sales.orders.edit', $order) }}" class="btn-secondary">Edit</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-4 mb-6">
|
|
<!-- Order Info -->
|
|
<div class="lg:col-span-2 card card-body">
|
|
<h2 class="text-sm font-semibold text-gray-500 uppercase tracking-wider mb-4">Order Details</h2>
|
|
<dl class="grid grid-cols-2 gap-4 text-sm">
|
|
<div>
|
|
<dt class="text-gray-500">Order Number</dt>
|
|
<dd class="font-mono font-semibold text-gray-800">{{ $order->order_number ?? 'SO-' . str_pad($order->id, 5, '0', STR_PAD_LEFT) }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-gray-500">Status</dt>
|
|
<dd>
|
|
@php
|
|
$badgeClass = match($order->status ?? 'draft') {
|
|
'draft' => 'badge-gray',
|
|
'confirmed' => 'badge-blue',
|
|
'dispatched'=> 'badge-violet',
|
|
'invoiced' => 'badge-green',
|
|
default => 'badge-gray',
|
|
};
|
|
@endphp
|
|
<span class="{{ $badgeClass }}">{{ ucfirst($order->status ?? 'draft') }}</span>
|
|
</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-gray-500">Order Date</dt>
|
|
<dd class="font-medium text-gray-800">{{ $order->order_date ? \Carbon\Carbon::parse($order->order_date)->format('d M Y') : '-' }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-gray-500">Delivery Date</dt>
|
|
<dd class="font-medium text-gray-800">{{ $order->delivery_date ? \Carbon\Carbon::parse($order->delivery_date)->format('d M Y') : '-' }}</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
|
|
<!-- Customer Info -->
|
|
<div class="card card-body">
|
|
<h2 class="text-sm font-semibold text-gray-500 uppercase tracking-wider mb-4">Customer</h2>
|
|
@if($order->customer)
|
|
<dl class="space-y-2 text-sm">
|
|
<div><dt class="text-gray-500">Name</dt><dd class="font-semibold text-gray-800">{{ $order->customer->name }}</dd></div>
|
|
<div><dt class="text-gray-500">Contact</dt><dd class="text-gray-700">{{ $order->customer->contact_person }}</dd></div>
|
|
<div><dt class="text-gray-500">Email</dt><dd class="text-gray-700">{{ $order->customer->email }}</dd></div>
|
|
<div><dt class="text-gray-500">Phone</dt><dd class="text-gray-700">{{ $order->customer->phone }}</dd></div>
|
|
</dl>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Items -->
|
|
<div class="card mb-6 overflow-hidden">
|
|
<div class="card-header">
|
|
<h2 class="text-base font-semibold text-gray-700">Order Items</h2>
|
|
</div>
|
|
<div class="overflow-x-auto">
|
|
<table class="table-base">
|
|
<thead>
|
|
<tr>
|
|
<th>Product</th>
|
|
<th class="text-right">Quantity</th>
|
|
<th class="text-right">Unit Price</th>
|
|
<th class="text-right">Total</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($order->items as $item)
|
|
<tr>
|
|
<td class="text-gray-800">{{ $item->item->item_name ?? '' }}</td>
|
|
<td class="text-right text-gray-600">{{ number_format($item->quantity, 2) }}</td>
|
|
<td class="text-right text-gray-600">{{ number_format($item->price, 2) }}</td>
|
|
<td class="text-right font-medium text-gray-800">{{ number_format($item->total, 2) }}</td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="4" class="px-4 py-6 text-center text-gray-400">No items.</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
<tfoot class="bg-gray-50">
|
|
<tr>
|
|
<td colspan="3" class="px-4 py-3 text-right font-semibold text-gray-700">Total</td>
|
|
<td class="px-4 py-3 text-right font-bold text-gray-900">{{ number_format($order->total_amount, 2) }}</td>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Delivery Notes -->
|
|
@if(isset($deliveryNotes) && $deliveryNotes->count())
|
|
<div class="card mb-6 overflow-hidden">
|
|
<div class="card-header">
|
|
<h2 class="text-base font-semibold text-gray-700">Delivery Notes</h2>
|
|
</div>
|
|
<div class="overflow-x-auto">
|
|
<table class="table-base">
|
|
<thead>
|
|
<tr>
|
|
<th>DN #</th>
|
|
<th>Warehouse</th>
|
|
<th>Delivery Date</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach($deliveryNotes as $dn)
|
|
<tr>
|
|
<td class="font-mono text-gray-700">{{ $dn->dn_number ?? 'DN-' . str_pad($dn->id, 5, '0', STR_PAD_LEFT) }}</td>
|
|
<td class="text-gray-700">{{ $dn->warehouse->name ?? '' }}</td>
|
|
<td class="text-gray-600">{{ $dn->delivery_date ? \Carbon\Carbon::parse($dn->delivery_date)->format('d M Y') : '' }}</td>
|
|
<td><span class="badge-blue">{{ ucfirst($dn->status ?? 'pending') }}</span></td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- Invoices -->
|
|
@if(isset($invoices) && $invoices->count())
|
|
<div class="card overflow-hidden">
|
|
<div class="card-header">
|
|
<h2 class="text-base font-semibold text-gray-700">Invoices</h2>
|
|
</div>
|
|
<div class="overflow-x-auto">
|
|
<table class="table-base">
|
|
<thead>
|
|
<tr>
|
|
<th>Invoice #</th>
|
|
<th>Date</th>
|
|
<th class="text-right">Total</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach($invoices as $invoice)
|
|
<tr>
|
|
<td class="font-mono text-gray-700">{{ $invoice->invoice_number }}</td>
|
|
<td class="text-gray-600">{{ $invoice->invoice_date ? \Carbon\Carbon::parse($invoice->invoice_date)->format('d M Y') : '' }}</td>
|
|
<td class="text-right font-medium text-gray-800">{{ number_format($invoice->total_amount, 2) }}</td>
|
|
<td><span class="badge-green">{{ ucfirst($invoice->status ?? 'unpaid') }}</span></td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
@endsection
|