From 3aa9b6f32531813289a42d48b2de03431b555575 Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 27 Jan 2026 12:23:59 -0500 Subject: [PATCH] added vendors table --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 3 +- app/(auth)/vendors/page.tsx | 13 + app/api/vendors/create/route.ts | 109 +++++ app/api/vendors/fetch/route.ts | 24 + bun.lockb | Bin 0 -> 266865 bytes components/app-sidebar.tsx | 6 + components/forms/CreateVendorForm.tsx | 449 ++++++++++++++++++ components/tables/VendorsTable.tsx | 225 +++++++++ components/ui/textarea.tsx | 18 + lib/helper/fetchVendors.ts | 21 + lib/queries.ts | 4 + .../20260126161613_add_vendor/migration.sql | 84 ++++ .../20260126162133_formatting/migration.sql | 28 ++ .../migration.sql | 20 + .../migration.sql | 10 + .../migration.sql | 21 + .../migration.sql | 9 + .../migration.sql | 8 + prisma/schema.prisma | 11 +- 20 files changed, 1058 insertions(+), 5 deletions(-) create mode 100644 .DS_Store create mode 100644 app/(auth)/vendors/page.tsx create mode 100644 app/api/vendors/create/route.ts create mode 100644 app/api/vendors/fetch/route.ts create mode 100755 bun.lockb create mode 100644 components/forms/CreateVendorForm.tsx create mode 100644 components/tables/VendorsTable.tsx create mode 100644 components/ui/textarea.tsx create mode 100644 lib/helper/fetchVendors.ts create mode 100644 prisma/migrations/20260126161613_add_vendor/migration.sql create mode 100644 prisma/migrations/20260126162133_formatting/migration.sql create mode 100644 prisma/migrations/20260127153735_vendor_address_changed/migration.sql create mode 100644 prisma/migrations/20260127153846_vendor_address_to_street/migration.sql create mode 100644 prisma/migrations/20260127163043_add_vendor_address_fields/migration.sql create mode 100644 prisma/migrations/20260127163906_vendor_address_optional/migration.sql create mode 100644 prisma/migrations/20260127165516_make_address_id_optional/migration.sql diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..01f406ce448bdf0c0e1b6a899515c704fc1824d6 GIT binary patch literal 6148 zcmeHKJ5Iwu5S@)(ID*0wO$sDdR1`G6!4jDh-Dqc$qboAlPsU2?Cr&~qpY=QRPBC0O`Yj9hNT1E?4HEiZshun7nc PME?kQ8q_EQKgz%-dQnsN literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index d8b694d..a7af738 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ node_modules/ data/postgres/ uploads/ data/ -docker-compose.override.yml \ No newline at end of file +docker-compose.override.yml +.vscode \ No newline at end of file diff --git a/app/(auth)/vendors/page.tsx b/app/(auth)/vendors/page.tsx new file mode 100644 index 0000000..50309e7 --- /dev/null +++ b/app/(auth)/vendors/page.tsx @@ -0,0 +1,13 @@ +import VendorsTable from '@/components/tables/VendorsTable' +import { queries } from '@/lib/queries' +import React from 'react' + +export default async function VendorPage() { + const vendors = await queries.fetchAllVendors() + + return ( +
+ +
+ ) +} diff --git a/app/api/vendors/create/route.ts b/app/api/vendors/create/route.ts new file mode 100644 index 0000000..526a280 --- /dev/null +++ b/app/api/vendors/create/route.ts @@ -0,0 +1,109 @@ +import { NextRequest, NextResponse } from 'next/server' +import { prisma } from '@/lib/prisma' +import { VendorType, VendorStatus } from '@prisma/client' + +export async function POST(request: NextRequest) { + try { + const body = await request.json() + + console.log('Received data:', body) // Debug logging + + // Validate required fields + if (!body.name || !body.type) { + return NextResponse.json( + { error: 'Name and vendor type are required' }, + { status: 400 } + ) + } + + // Check if we have address data + const hasAddress = body.street && body.city && body.state && body.postalCode + + // Parse numeric values + const parseFloatOrNull = (value: any): number | null => { + if (value === null || value === undefined || value === '') return null + const num = parseFloat(value) + return isNaN(num) ? null : num + } + + const parseDateOrNull = (value: any): Date | null => { + if (!value) return null + const date = new Date(value) + return isNaN(date.getTime()) ? null : date + } + + // Prepare vendor data WITHOUT addressId + const vendorData: any = { + name: body.name, + type: body.type as VendorType, + description: body.description || null, + website: body.website || null, + contactPerson: body.contactPerson || null, + email: body.email || null, + phone: body.phone || null, + status: (body.status as VendorStatus) || 'CONTACTING', + isBooked: Boolean(body.isBooked), + bookedDate: parseDateOrNull(body.bookedDate), + quotedPrice: parseFloatOrNull(body.quotedPrice), + finalCost: parseFloatOrNull(body.finalCost), + depositPaid: parseFloatOrNull(body.depositPaid), + depositDueDate: parseDateOrNull(body.depositDueDate), + finalPaymentDue: parseDateOrNull(body.finalPaymentDue), + paymentNotes: body.paymentNotes || null, + contractUrl: body.contractUrl || null, + proposalUrl: body.proposalUrl || null, + notes: body.notes || null, + } + + // Add address relation if we have address data + if (hasAddress) { + vendorData.address = { + create: { + street: body.street, + city: body.city, + state: body.state, + zip: parseInt(body.postalCode), + } + } + } + // If no address, don't include address field at all + + console.log('Creating vendor with data:', vendorData) // Debug logging + + const vendor = await prisma.vendor.create({ + data: vendorData, + include: { + address: hasAddress // Only include address if we created one + } + }) + + return NextResponse.json(vendor, { status: 201 }) + + } catch (error: any) { + console.error('Error creating vendor:', error) + + // Provide helpful error messages + if (error.code === 'P2002') { + return NextResponse.json( + { error: 'A vendor with this name already exists' }, + { status: 409 } + ) + } + + if (error.code === 'P2023') { + return NextResponse.json( + { error: 'Invalid data format provided' }, + { status: 400 } + ) + } + + return NextResponse.json( + { + error: 'Failed to create vendor', + details: error.message, + stack: process.env.NODE_ENV === 'development' ? error.stack : undefined + }, + { status: 500 } + ) + } +} \ No newline at end of file diff --git a/app/api/vendors/fetch/route.ts b/app/api/vendors/fetch/route.ts new file mode 100644 index 0000000..31cd229 --- /dev/null +++ b/app/api/vendors/fetch/route.ts @@ -0,0 +1,24 @@ +import { NextRequest, NextResponse } from 'next/server' +import { prisma } from '@/lib/prisma' + +export async function GET(request: NextRequest) { + try { + const vendors = await prisma.vendor.findMany({ + include: { + address: true, + }, + orderBy: { + createdAt: 'desc', + }, + }) + + return NextResponse.json(vendors) + + } catch (error) { + console.error('Error fetching vendors:', error) + return NextResponse.json( + { error: 'Failed to fetch vendors' }, + { status: 500 } + ) + } +} \ No newline at end of file diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..3b303172f3861bbef606c562c714f788a24a6a41 GIT binary patch literal 266865 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 literal 0 HcmV?d00001 diff --git a/components/app-sidebar.tsx b/components/app-sidebar.tsx index 6912bb8..6699a80 100644 --- a/components/app-sidebar.tsx +++ b/components/app-sidebar.tsx @@ -13,6 +13,7 @@ import { IconSearch, IconSettings, IconUsers, + IconUsersGroup } from "@tabler/icons-react" import { NavMain } from "@/components/nav-main" @@ -51,6 +52,11 @@ const data = { url: "/venues", icon: IconBuildingArch, }, + { + title: "Vendors", + url: "/vendors", + icon: IconUsersGroup, + }, ], // navClouds: [ // { diff --git a/components/forms/CreateVendorForm.tsx b/components/forms/CreateVendorForm.tsx new file mode 100644 index 0000000..c6c6128 --- /dev/null +++ b/components/forms/CreateVendorForm.tsx @@ -0,0 +1,449 @@ +'use client' + +import React, { useState } from 'react' +import { Input } from '../ui/input' +import { Button } from '../ui/button' +import { Label } from '../ui/label' +import { toast } from 'sonner' +import { Address, Vendor } from '@prisma/client' +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' +import { Textarea } from '../ui/textarea' +import { Checkbox } from '../ui/checkbox' + +interface CreateVendorFormProps { + onSuccess?: (newVendorId?: string) => void +} + +const VENDOR_TYPES = [ + 'VENUE', 'CATERER', 'PHOTOGRAPHER', 'VIDEOGRAPHER', 'FLORIST', 'BAKERY', + 'DJ', 'BAND', 'OFFICIANT', 'HAIR_MAKEUP', 'TRANSPORTATION', 'RENTALS', + 'DECOR', 'PLANNER', 'STATIONERY', 'OTHER' +] as const + +const VENDOR_STATUSES = [ + 'RESEARCHING', 'CONTACTING', 'RESPONDED', 'PROPOSAL_RECEIVED', + 'NEGOTIATING', 'CONTRACT_SENT', 'CONTRACT_SIGNED', 'DECLINED', 'BACKUP' +] as const + + +const defaultFormValues = { + name: '', + type: '' as typeof VENDOR_TYPES[number], + description: '', + website: '', + + contactPerson: '', + email: '', + phone: '', + + street: '', + city: '', + state: '', + postalCode: '', + country: 'United States', + + status: 'CONTACTING' as typeof VENDOR_STATUSES[number], + isBooked: false, + bookedDate: '', + + quotedPrice: '', + finalCost: '', + depositPaid: '', + depositDueDate: '', + finalPaymentDue: '', + paymentNotes: '', + + notes: '', + contractUrl: '', + proposalUrl: '', +} + +export default function CreateVendorForm({ onSuccess }: CreateVendorFormProps) { + const [formData, setFormData] = useState(defaultFormValues) + const [loading, setLoading] = useState(false) + + function handleChange(e: React.ChangeEvent) { + const { name, value, type } = e.target + setFormData(prev => ({ + ...prev, + [name]: type === 'number' ? parseFloat(value) || 0 : value + })) + } + + function handleSelectChange(name: string, value: string) { + setFormData(prev => ({ ...prev, [name]: value })) + } + + function handleCheckboxChange(name: string, checked: boolean) { + setFormData(prev => ({ ...prev, [name]: checked })) + } + + async function handleSubmit(e: React.FormEvent) { + e.preventDefault() + + if (!formData.name || !formData.type) { + toast.error('Please fill in required fields (Name and Type)') + return + } + + setLoading(true) + try { + const res = await fetch('/api/vendors/create', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + ...formData, + quotedPrice: formData.quotedPrice ? parseFloat(formData.quotedPrice) : null, + finalCost: formData.finalCost ? parseFloat(formData.finalCost) : null, + depositPaid: formData.depositPaid ? parseFloat(formData.depositPaid) : null, + bookedDate: formData.bookedDate || null, + depositDueDate: formData.depositDueDate || null, + finalPaymentDue: formData.finalPaymentDue || null, + }) + }) + + if (!res.ok) { + const error = await res.json() + throw new Error(error.message || 'Failed to create vendor') + } + + const data = await res.json() + const newVendorId = data?.id + + toast.success('Vendor created successfully!') + setFormData(defaultFormValues) + + if (onSuccess) onSuccess(newVendorId) + } catch (err) { + console.error(err) + toast.error(err instanceof Error ? err.message : 'Something went wrong') + } finally { + setLoading(false) + } + } + + return ( +
+
+ {/* Basic Information */} +
+

Basic Information

+ +
+ + +
+ +
+ + +
+ +
+ +