156 lines
3.6 KiB
TypeScript
156 lines
3.6 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { db } from '@/lib/db'
|
|
import { StatutAtelier } from '@prisma/client'
|
|
|
|
// POST /api/atelier/orders/[id] - Update workshop status
|
|
// Note: Using POST instead of PATCH because the gateway blocks PATCH requests
|
|
export async function POST(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
const { id } = await params
|
|
const body = await request.json()
|
|
const { statutAtelier } = body
|
|
|
|
console.log('API: POST /api/atelier/orders/[id]')
|
|
console.log('API: orderId =', id)
|
|
console.log('API: statutAtelier =', statutAtelier)
|
|
console.log('API: Valid StatutAtelier values:', Object.values(StatutAtelier))
|
|
|
|
// Validate status
|
|
if (!statutAtelier || !Object.values(StatutAtelier).includes(statutAtelier)) {
|
|
console.log('API: Invalid status - returning 400')
|
|
return NextResponse.json(
|
|
{ error: 'Invalid workshop status' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
// Check if order exists
|
|
const existingOrder = await db.vente.findUnique({
|
|
where: { id: id }
|
|
})
|
|
|
|
if (!existingOrder) {
|
|
return NextResponse.json(
|
|
{ error: 'Order not found' },
|
|
{ status: 404 }
|
|
)
|
|
}
|
|
|
|
// Update order status
|
|
const updateData: any = {
|
|
statutAtelier: statutAtelier as StatutAtelier,
|
|
dateAtelier: new Date()
|
|
}
|
|
|
|
// Add dateRetrait if status is RETIRE
|
|
if (statutAtelier === 'RETIRE') {
|
|
updateData.dateRetrait = new Date()
|
|
}
|
|
|
|
const updatedOrder = await db.vente.update({
|
|
where: { id: id },
|
|
data: updateData,
|
|
include: {
|
|
client: true,
|
|
lignes: {
|
|
include: {
|
|
produit: true
|
|
},
|
|
where: {
|
|
produit: {
|
|
categorie: {
|
|
in: ['MONTURE', 'VERRE']
|
|
}
|
|
}
|
|
}
|
|
},
|
|
paiements: true
|
|
}
|
|
})
|
|
|
|
console.log('API: Order updated successfully, new status:', updatedOrder.statutAtelier)
|
|
|
|
// Fetch patients for the client
|
|
let patients = []
|
|
if (updatedOrder.clientId) {
|
|
patients = await db.patient.findMany({
|
|
where: {
|
|
clientId: updatedOrder.clientId
|
|
},
|
|
orderBy: {
|
|
dateCreation: 'desc'
|
|
},
|
|
take: 2
|
|
})
|
|
}
|
|
|
|
return NextResponse.json({
|
|
...updatedOrder,
|
|
patients
|
|
})
|
|
} catch (error) {
|
|
console.error('Error updating work order:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Failed to update work order' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|
|
// GET /api/atelier/orders/[id] - Get specific work order details
|
|
export async function GET(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
const { id } = await params
|
|
const order = await db.vente.findUnique({
|
|
where: { id: id },
|
|
include: {
|
|
client: true,
|
|
lignes: {
|
|
include: {
|
|
produit: true
|
|
}
|
|
},
|
|
paiements: true
|
|
}
|
|
})
|
|
|
|
if (!order) {
|
|
return NextResponse.json(
|
|
{ error: 'Order not found' },
|
|
{ status: 404 }
|
|
)
|
|
}
|
|
|
|
// Fetch patients for the client
|
|
let patients = []
|
|
if (order.clientId) {
|
|
patients = await db.patient.findMany({
|
|
where: {
|
|
clientId: order.clientId
|
|
},
|
|
orderBy: {
|
|
dateCreation: 'desc'
|
|
},
|
|
take: 2
|
|
})
|
|
}
|
|
|
|
return NextResponse.json({
|
|
...order,
|
|
patients
|
|
})
|
|
} catch (error) {
|
|
console.error('Error fetching work order:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Failed to fetch work order' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|