"use client"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, FormDescription } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { toast } from "sonner"; import { documentNumberingService } from "@/lib/services/document-numbering.service"; import { ManualOverrideDto } from "@/types/dto/numbering.dto"; import { useState } from "react"; const formSchema = z.object({ projectId: z.coerce.number().min(1, "Project is required"), originatorOrganizationId: z.coerce.number().min(1, "Originator is required"), recipientOrganizationId: z.coerce.number().min(1, "Recipient is required"), correspondenceTypeId: z.coerce.number().min(1, "Type is required"), newLastNumber: z.coerce.number().min(1, "New number is required"), reason: z.string().min(5, "Reason must be at least 5 characters"), resetScope: z.string().optional() }); export function ManualOverrideForm({ projectId = 1 }: { projectId?: number }) { const [loading, setLoading] = useState(false); const form = useForm>({ resolver: zodResolver(formSchema) as any, defaultValues: { projectId: projectId, originatorOrganizationId: 0, recipientOrganizationId: 0, correspondenceTypeId: 0, newLastNumber: 0, reason: "", resetScope: "YEAR_2025" // Example, should be dynamic or selected }, }); async function onSubmit(values: z.infer) { setLoading(true); try { const dto: ManualOverrideDto = { ...values, resetScope: values.resetScope || "YEAR_" + new Date().getFullYear() }; await documentNumberingService.manualOverride(dto); toast.success("Manual override applied successfully."); form.reset(); } catch (error) { toast.error("Failed to apply override."); console.error(error); } finally { setLoading(false); } } return (

Manual Override Sequence

Careful: This updates the LAST generated number. Next number will receive +1.

{/* Allow simple text input for IDs for now, ideally Selects from Master Data */} ( Project ID )} /> ( Type ID )} /> ( Originator Org ID )} /> ( Recipient Org ID )} />
( Set Last Number To If you set 99, the next auto-generated number will be 100. )} /> ( Reason )} /> ); }