import React, { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Calendar } from '@/components/ui/calendar'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { CalendarIcon } from 'lucide-react'; import { format } from 'date-fns'; import { ptBR } from 'date-fns/locale'; import { cn } from '@/lib/utils'; import { Textarea } from '@/components/ui/textarea'; import { OrdemFabricacao } from '@/hooks/useOFs'; const editOFSchema = z.object({ descritivo: z.string().optional(), data_abertura: z.string().optional(), data_prazo: z.string().optional(), data_termino_prev: z.string().optional(), peso_total: z.number().optional(), gestor: z.string().optional(), prioridade: z.string(), nivel_qualidade: z.string(), criterio_qualidade: z.string().optional(), tratamento_final: z.string().optional(), local_uf: z.string().optional(), }); type EditOFFormData = z.infer; interface EditOFModalProps { isOpen: boolean; onClose: () => void; onSuccess?: () => void; ordem: OrdemFabricacao | null; onUpdate: (id: string, data: Partial) => Promise; } export const EditOFModal: React.FC = ({ isOpen, onClose, onSuccess, ordem, onUpdate, }) => { const [loading, setLoading] = useState(false); const form = useForm({ resolver: zodResolver(editOFSchema), defaultValues: { descritivo: '', prioridade: 'Normal', nivel_qualidade: 'Normal', }, }); useEffect(() => { if (ordem && isOpen) { form.reset({ descritivo: ordem.descritivo || '', data_abertura: ordem.data_abertura || '', data_prazo: ordem.data_prazo || '', data_termino_prev: ordem.data_termino_prev || '', peso_total: ordem.peso_total || 0, gestor: ordem.gestor || '', prioridade: ordem.prioridade || 'Normal', nivel_qualidade: ordem.nivel_qualidade || 'Normal', criterio_qualidade: ordem.criterio_qualidade || '', tratamento_final: ordem.tratamento_final || '', local_uf: ordem.local_uf || '', }); } }, [ordem, isOpen, form]); const onSubmit = async (data: EditOFFormData) => { if (!ordem) return; setLoading(true); try { await onUpdate(ordem.id, data); onClose(); onSuccess?.(); } catch (error) { console.error('Erro ao atualizar OF:', error); } finally { setLoading(false); } }; if (!ordem) return null; return ( Editar Ordem de Fabricação - {ordem.num_of}
( Descritivo )} />
( Data de Abertura field.onChange(date ? format(date, 'yyyy-MM-dd') : '')} disabled={(date) => date < new Date("1900-01-01")} initialFocus locale={ptBR} /> )} /> ( Data de Prazo field.onChange(date ? format(date, 'yyyy-MM-dd') : '')} disabled={(date) => date < new Date("1900-01-01")} initialFocus locale={ptBR} /> )} /> ( Prazo Término (Prev) field.onChange(date ? format(date, 'yyyy-MM-dd') : '')} disabled={(date) => date < new Date("1900-01-01")} initialFocus locale={ptBR} /> )} />
( Peso Total (kg) field.onChange(Number(e.target.value))} placeholder="0" /> )} /> ( Prioridade )} /> ( Nível de Qualidade )} />
( Gestor )} /> ( Critério de Qualidade