f5f90cd643
Blocco A+B (milestone v2.3). Migration 0011 is additive (ADD COLUMN only): clients.email, clients.phone, leads.archived. - createClientCore() extracted from createClient and reused by conversion - clients.email/phone added to create + edit forms and shown on client header (never exposed on the public /client/[token] page) - convertLeadToClient(): reuses core, carries over lead transcripts (client_transcripts.client_id), links project.created_from_lead_id, archives the lead while keeping its "won" status; idempotent - "Converti in cliente" button on won leads; "Convertito → Apri cliente" once converted (clientId resolved via created_from_lead_id) - archived leads hidden from list/kanban; detail page fetches by id incl. archived Migration must be applied to the prod DB BEFORE this is deployed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import { createClient } from "./actions";
|
|
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 {
|
|
Card,
|
|
CardContent,
|
|
CardHeader,
|
|
CardTitle,
|
|
} from "@/components/ui/card";
|
|
import Link from "next/link";
|
|
|
|
export default function NewClientPage() {
|
|
return (
|
|
<div className="max-w-xl">
|
|
<div className="mb-6">
|
|
<Link href="/admin" className="text-sm text-gray-500 hover:text-gray-700">
|
|
← Clienti
|
|
</Link>
|
|
</div>
|
|
<Card>
|
|
<CardHeader>
|
|
<CardTitle>Nuovo cliente</CardTitle>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<form action={createClient} className="space-y-4">
|
|
<div className="space-y-1">
|
|
<Label htmlFor="name">Nome cliente</Label>
|
|
<Input
|
|
id="name"
|
|
name="name"
|
|
type="text"
|
|
placeholder="es. Marco Rossi"
|
|
required
|
|
/>
|
|
</div>
|
|
<div className="space-y-1">
|
|
<Label htmlFor="brand_name">Nome brand</Label>
|
|
<Input
|
|
id="brand_name"
|
|
name="brand_name"
|
|
type="text"
|
|
placeholder="es. Rossi Studio"
|
|
required
|
|
/>
|
|
</div>
|
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
|
<div className="space-y-1">
|
|
<Label htmlFor="email">Email</Label>
|
|
<Input
|
|
id="email"
|
|
name="email"
|
|
type="email"
|
|
placeholder="es. marco@rossistudio.it"
|
|
/>
|
|
</div>
|
|
<div className="space-y-1">
|
|
<Label htmlFor="phone">Telefono</Label>
|
|
<Input
|
|
id="phone"
|
|
name="phone"
|
|
type="tel"
|
|
placeholder="es. +39 333 1234567"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div className="space-y-1">
|
|
<Label htmlFor="brief">Brief del progetto</Label>
|
|
<Textarea
|
|
id="brief"
|
|
name="brief"
|
|
placeholder="Descrizione del progetto e degli obiettivi..."
|
|
rows={5}
|
|
required
|
|
/>
|
|
</div>
|
|
<div className="flex gap-3 pt-2">
|
|
<Button type="submit">Crea cliente</Button>
|
|
<Button variant="outline" asChild>
|
|
<Link href="/admin">Annulla</Link>
|
|
</Button>
|
|
</div>
|
|
</form>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
);
|
|
} |