Files
CMT/frontend/components/suppliers/supplier-form.tsx
T
2025-08-16 14:41:12 +02:00

197 lines
6.4 KiB
TypeScript

"use client"
import type React from "react"
import { useState } from "react"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Textarea } from "@/components/ui/textarea"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog"
import type { Supplier } from "@/types/business"
interface SupplierFormProps {
supplier?: Supplier
open: boolean
onOpenChange: (open: boolean) => void
onSubmit: (supplier: Omit<Supplier, "id">) => void
}
const paymentTerms = ["Net 15", "Net 30", "Net 45", "Net 60", "COD", "Prepaid", "Custom"]
export function SupplierForm({ supplier, open, onOpenChange, onSubmit }: SupplierFormProps) {
const [formData, setFormData] = useState({
name: supplier?.name || "",
email: supplier?.email || "",
phone: supplier?.phone || "",
address: supplier?.address || "",
paymentTerms: supplier?.paymentTerms || "Net 30",
notes: supplier?.notes || "",
contactPerson: supplier?.contactPerson || "",
businessType: supplier?.businessType || "",
taxId: supplier?.taxId || "",
})
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault()
onSubmit({
...formData,
amountOwed: supplier?.amountOwed || 0,
})
onOpenChange(false)
// Reset form if it's a new supplier
if (!supplier) {
setFormData({
name: "",
email: "",
phone: "",
address: "",
paymentTerms: "Net 30",
notes: "",
contactPerson: "",
businessType: "",
taxId: "",
})
}
}
return (
<Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="sm:max-w-[600px] max-h-[90vh] overflow-y-auto">
<DialogHeader>
<DialogTitle>{supplier ? "Edit Supplier" : "Add New Supplier"}</DialogTitle>
<DialogDescription>
{supplier ? "Update supplier information" : "Enter the details for the new supplier"}
</DialogDescription>
</DialogHeader>
<form onSubmit={handleSubmit} className="space-y-4">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="name">Company Name *</Label>
<Input
id="name"
value={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })}
placeholder="Enter company name"
required
/>
</div>
<div className="space-y-2">
<Label htmlFor="contactPerson">Contact Person</Label>
<Input
id="contactPerson"
value={formData.contactPerson}
onChange={(e) => setFormData({ ...formData, contactPerson: e.target.value })}
placeholder="Primary contact name"
/>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input
id="email"
type="email"
value={formData.email}
onChange={(e) => setFormData({ ...formData, email: e.target.value })}
placeholder="supplier@example.com"
/>
</div>
<div className="space-y-2">
<Label htmlFor="phone">Phone</Label>
<Input
id="phone"
value={formData.phone}
onChange={(e) => setFormData({ ...formData, phone: e.target.value })}
placeholder="(555) 123-4567"
/>
</div>
</div>
<div className="space-y-2">
<Label htmlFor="address">Address</Label>
<Textarea
id="address"
value={formData.address}
onChange={(e) => setFormData({ ...formData, address: e.target.value })}
placeholder="Company address"
rows={2}
/>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="businessType">Business Type</Label>
<Input
id="businessType"
value={formData.businessType}
onChange={(e) => setFormData({ ...formData, businessType: e.target.value })}
placeholder="e.g., Manufacturer, Distributor"
/>
</div>
<div className="space-y-2">
<Label htmlFor="taxId">Tax ID / VAT Number</Label>
<Input
id="taxId"
value={formData.taxId}
onChange={(e) => setFormData({ ...formData, taxId: e.target.value })}
placeholder="Tax identification number"
/>
</div>
</div>
<div className="space-y-2">
<Label htmlFor="paymentTerms">Payment Terms</Label>
<Select
value={formData.paymentTerms}
onValueChange={(value) => setFormData({ ...formData, paymentTerms: value })}
>
<SelectTrigger>
<SelectValue placeholder="Select payment terms" />
</SelectTrigger>
<SelectContent>
{paymentTerms.map((term) => (
<SelectItem key={term} value={term}>
{term}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label htmlFor="notes">Notes</Label>
<Textarea
id="notes"
value={formData.notes}
onChange={(e) => setFormData({ ...formData, notes: e.target.value })}
placeholder="Additional notes about this supplier"
rows={3}
/>
</div>
<DialogFooter>
<Button type="button" variant="outline" onClick={() => onOpenChange(false)}>
Cancel
</Button>
<Button type="submit">{supplier ? "Update Supplier" : "Add Supplier"}</Button>
</DialogFooter>
</form>
</DialogContent>
</Dialog>
)
}