add status filter

This commit is contained in:
2025-07-23 11:12:20 +08:00
parent 57092793ba
commit bfdfdfc771

View File

@@ -237,7 +237,8 @@
let selectedVillaId: string | null = null; let selectedVillaId: string | null = null;
let searchTerm: string = ""; let searchTerm: string = "";
let showPreparedModal = false; let showPreparedModal = false;
let selectedPO = null; let selectedStatus: string | null = null;
let selectedPO: string | null = null;
let preparedByOptions: any[] = []; let preparedByOptions: any[] = [];
let vendorOptions: any[] = []; let vendorOptions: any[] = [];
let preparedForm = { let preparedForm = {
@@ -301,6 +302,7 @@
} }
fetchPurchaseOrder( fetchPurchaseOrder(
selectedVillaId, selectedVillaId,
selectedStatus,
searchTerm, searchTerm,
sortColumn, sortColumn,
sortOrder, sortOrder,
@@ -718,6 +720,7 @@
order: "asc" | "desc" = "desc", order: "asc" | "desc" = "desc",
offset: number = 0, offset: number = 0,
limit: number = 1000, limit: number = 1000,
poStatus: string | null = null,
) { ) {
let query = supabase let query = supabase
.from("vb_purchaseorder_data") .from("vb_purchaseorder_data")
@@ -736,6 +739,9 @@
`po_item.ilike.%${search}%` `po_item.ilike.%${search}%`
); );
} }
if (poStatus) {
query = query.eq("po_status", poStatus);
}
const { data, error } = await query; const { data, error } = await query;
@@ -1069,36 +1075,72 @@
</p> </p>
</div> </div>
<div class="flex flex-col sm:flex-row sm:items-center gap-2"> <div class="flex flex-col sm:flex-row sm:items-center gap-2">
<input <input
type="text" type="text"
placeholder="🔍 Search by name..." placeholder="🔍 Search by name..."
class="border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:outline-none px-4 py-2 rounded-xl text-sm w-64 transition" class="border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:outline-none px-4 py-2 rounded-xl text-sm w-64 transition"
bind:value={searchTerm}
on:input={(e) => { on:input={(e) => {
const searchTerm = ( searchTerm = (e.target as HTMLInputElement).value.toLowerCase();
e.target as HTMLInputElement fetchPurchaseOrder(
).value.toLowerCase(); selectedVillaId,
fetchPurchaseOrder(null, searchTerm, "created_at", "desc"); searchTerm,
sortColumn,
sortOrder,
0,
1000,
selectedStatus
);
}} }}
/> />
<!-- 🏡 Villa Filter -->
<select
class="border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:outline-none px-4 py-2 rounded-xl text-sm w-48 transition"
bind:value={selectedVillaId}
on:change={() => {
fetchPurchaseOrder(selectedVillaId, searchTerm, sortColumn, sortOrder, 0, 1000, selectedStatus);
}}
>
<option value="">All Villas</option>
{#each villaOptions as villa}
<option value={villa.id}>{villa.villa_name}</option>
{/each}
</select>
<!-- 📦 PO Status Filter -->
<select <select
class="border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:outline-none px-4 py-2 rounded-xl text-sm w-48 transition" class="border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:outline-none px-4 py-2 rounded-xl text-sm w-48 transition"
bind:value={selectedStatus}
on:change={(e) => { on:change={(e) => {
const filter = (e.target as HTMLSelectElement).value; selectedStatus = (e.target as HTMLSelectElement).value;
fetchPurchaseOrder(filter, null, null, "desc"); fetchPurchaseOrder(
selectedVillaId,
searchTerm,
sortColumn,
sortOrder,
0,
1000,
selectedStatus
);
}} }}
> >
<option value="">All Villas</option> <option value="">All Statuses</option>
{#each villaOptions as villa} <option value="requested">Requested</option>
<option value={villa.id}>{villa.villa_name}</option> <option value="prepared">Prepared</option>
{/each} <option value="approved">Approved</option>
<option value="acknowledged">Acknowledged</option>
</select> </select>
<!-- Add Button -->
<button <button
class="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700 text-sm" class="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700 text-sm"
on:click={openAddPOModal} on:click={openAddPOModal}
> >
Add Purchase Order Add Purchase Order
</button> </button>
</div> </div>
</div> </div>
<div class="overflow-x-auto rounded-lg shadow mb-4 max-h-[70vh]"> <div class="overflow-x-auto rounded-lg shadow mb-4 max-h-[70vh]">
<table class="min-w-[1000px] divide-y divide-gray-200 text-sm w-max"> <table class="min-w-[1000px] divide-y divide-gray-200 text-sm w-max">