// src/stores/OrdernewListStore.js import { defineStore } from 'pinia' import api from 'src/services/api' let lastRequestId = 0 export const useOrderListStore = defineStore('orderlist', { state: () => ({ orders: [], loading: false, error: null, filters: { search: '', CurrAccCode: '', OrderDate: '' } }), getters: { filteredOrders (state) { let result = state.orders if (state.filters.CurrAccCode) { result = result.filter(o => o.CurrAccCode === state.filters.CurrAccCode) } if (state.filters.OrderDate) { result = result.filter(o => o.OrderDate?.startsWith(state.filters.OrderDate) ) } return result }, totalVisibleUSD () { return this.filteredOrders.reduce((sum, o) => { const value = Number(o.TotalAmountUSD || 0) return sum + (Number.isFinite(value) ? value : 0) }, 0) }, totalPackedVisibleUSD () { return this.filteredOrders.reduce((sum, o) => { const value = Number(o.PackedUSD || 0) return sum + (Number.isFinite(value) ? value : 0) }, 0) }, packedVisibleRatePct () { if (!this.totalVisibleUSD) return 0 return (this.totalPackedVisibleUSD / this.totalVisibleUSD) * 100 } }, actions: { async fetchOrders () { // ============================== // πŸ“Œ REQUEST ID // ============================== const rid = ++lastRequestId // ============================== // πŸ“Œ SEARCH SNAPSHOT // ============================== const raw = this.filters.search ?? '' const trimmed = String(raw).trim() // ============================== // πŸ“Œ REQUEST LOG // ============================== console.groupCollapsed( `%c[orders] FETCH rid=${rid}`, 'color:#1976d2;font-weight:bold' ) console.log('raw =', JSON.stringify(raw), 'len=', String(raw).length) console.log('trimmed =', JSON.stringify(trimmed), 'len=', trimmed.length) console.log('filters =', JSON.parse(JSON.stringify(this.filters))) console.log('lastRID =', lastRequestId) console.groupEnd() this.loading = true this.error = null try { // ============================== // πŸ“Œ PARAMS // ============================== const params = {} if (trimmed) params.search = trimmed // ============================== // πŸ“Œ API CALL // ============================== const res = await api.get('/orders/list', { params }) // ============================== // πŸ“Œ STALE CHECK // ============================== if (rid !== lastRequestId) { console.warn( `[orders] IGNORE stale response rid=${rid} last=${lastRequestId}` ) return } // ============================== // πŸ“Œ DATA // ============================== const data = res?.data this.orders = Array.isArray(data) ? data : [] // ============================== // πŸ“Œ RESPONSE LOG // ============================== console.groupCollapsed( `%c[orders] RESPONSE rid=${rid} count=${this.orders.length}`, 'color:#2e7d32;font-weight:bold' ) console.log('status =', res?.status) console.log( 'sample =', this.orders.slice(0, 5).map(o => ({ id: o.OrderHeaderID, no: o.OrderNumber, code: o.CurrAccCode, name: o.CurrAccDescription })) ) // ============================== // πŸ“Œ DUPLICATE CHECK // ============================== const ids = this.orders.map(o => String(o.OrderHeaderID)) const dup = ids.filter((v, i) => ids.indexOf(v) !== i) if (dup.length) { console.warn( 'DUPLICATE OrderHeaderID sample =', dup.slice(0, 10) ) } console.groupEnd() } catch (err) { if (rid !== lastRequestId) return console.error( '[orders] FETCH FAILED', err?.response?.status, err?.response?.data || err ) this.orders = [] this.error = err?.response?.data || err?.message || 'Sipariş listesi alΔ±namadΔ±' } finally { if (rid === lastRequestId) { this.loading = false } } } } })