1import { NextRequest, NextResponse } from 'next/server';
2import { fieldpineServerApi } from '@/lib/server/fieldpineApi';
3import { getStoredAuth } from '@/lib/server/auth';
6 * Purchase Orders Summary
7 * BUCK: retailmax.elink.purchaseorder.summary
8 * Returns overview of purchase orders
10export async function GET(request: NextRequest) {
12 const authData = await getStoredAuth();
13 if (!authData || !authData.authenticated) {
14 return NextResponse.json(
15 { error: 'Authentication required' },
20 const { searchParams } = new URL(request.url);
23 const startDate = searchParams.get('startDate');
24 const endDate = searchParams.get('endDate');
25 const limit = searchParams.get('limit') || '100';
26 const status = searchParams.get('status'); // pending, received, cancelled
27 const supplierId = searchParams.get('supplierId');
29 // Build BUCK parameters
30 const params: string[] = [
31 '3=retailmax.elink.purchaseorder.summary',
37 params.push(`9=f102,4,${startDate}`); // PO date
40 params.push(`9=f102,1,${endDate}`);
43 // Add supplier filter
45 params.push(`9=f220,2,${supplierId}`);
62 params.push(`9=f110,2,${statusCode}`);
65 const query = params.join('&');
66 const url = `/GNAP/j/buck?${query}`;
68 console.log('[PO Summary] BUCK query:', url);
70 const result = await fieldpineServerApi.apiCall(url, {
71 cookie: authData.apiKey,
75 // Process BUCK response
76 if (result && result.DATS && Array.isArray(result.DATS)) {
77 const orders = result.DATS.map((item: any) => ({
79 orderNumber: item.f101,
81 supplierId: item.f220,
82 supplierName: item.f221,
84 statusName: item.f111,
85 totalItems: item.f210,
86 totalUnits: item.f211,
88 receivedDate: item.f103,
89 receivedItems: item.f213,
90 receivedUnits: item.f214,
91 receivedCost: item.f215,
92 locationId: item.f131,
93 locationName: item.f132,
97 // Calculate summary statistics
99 totalOrders: orders.length,
100 totalCost: orders.reduce((sum: number, o: any) => sum + (o.totalCost || 0), 0),
101 pendingOrders: orders.filter((o: any) => o.status === 1).length,
102 receivedOrders: orders.filter((o: any) => o.status === 2).length,
103 cancelledOrders: orders.filter((o: any) => o.status === 9).length
106 return NextResponse.json({
109 count: orders.length,
115 return NextResponse.json({
123 console.error('[PO Summary] Error:', error);
124 return NextResponse.json(
125 { error: 'Failed to fetch purchase orders' },