import { Dialog, TextField, MenuItem, Button, Box, Typography, } from "@mui/material"; import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; import { DatePicker } from "@mui/x-date-pickers/DatePicker"; import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import { TipoCustaProcessual, StatusPagamento } from "@prisma/client"; import ptBR from "date-fns/locale/pt-BR"; import { useState, useEffect } from "react"; interface DialogCustaProcessualProps { open: boolean; onClose: () => void; onSave: (data: any) => Promise; editingCusta?: any; } export function DialogCustaProcessual({ open, onClose, onSave, editingCusta, }: DialogCustaProcessualProps) { const [formData, setFormData] = useState({ tipo: "", descricao: "", valor: "", percentual: "", status: "PENDENTE", vencimento: null as Date | null, dataPagamento: null as Date | null, observacoes: "", numeroParcelas: 1, parcelaAtual: 1, comprovante: "", }); const [formError, setFormError] = useState(null); // Atualizar form quando o editingCusta muda useEffect(() => { if (editingCusta) { setFormData({ tipo: editingCusta.tipo || "", descricao: editingCusta.descricao || "", valor: editingCusta.valor?.toString() || "", percentual: editingCusta.percentual?.toString() || "", status: editingCusta.status || "PENDENTE", vencimento: editingCusta.vencimento ? new Date(editingCusta.vencimento) : null, dataPagamento: editingCusta.dataPagamento ? new Date(editingCusta.dataPagamento) : null, observacoes: editingCusta.observacoes || "", numeroParcelas: editingCusta.numeroParcelas || 1, parcelaAtual: editingCusta.parcelaAtual || 1, comprovante: editingCusta.comprovante || "", }); } else { // Reset para os valores padrão setFormData({ tipo: "", descricao: "", valor: "", percentual: "", status: "PENDENTE", vencimento: null, dataPagamento: null, observacoes: "", numeroParcelas: 1, parcelaAtual: 1, comprovante: "", }); } }, [editingCusta, open]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setFormError(null); try { // Validar campos obrigatórios if (!formData.tipo) { setFormError("Selecione o tipo da custa"); return; } if (!formData.descricao) { setFormError("Informe a descrição da custa"); return; } if (!formData.valor) { setFormError("Informe o valor da custa"); return; } // Preparar dados const preparedData = { ...formData, valor: Number(formData.valor), percentual: formData.percentual ? Number(formData.percentual) : null, numeroParcelas: Number(formData.numeroParcelas), parcelaAtual: Number(formData.parcelaAtual), }; await onSave(preparedData); onClose(); } catch (error: any) { console.error("Erro ao salvar custa:", error); setFormError(error.message || "Erro ao salvar custa. Tente novamente."); } }; return (

{editingCusta ? "Editar Custa Processual" : "Nova Custa Processual"}

setFormData({ ...formData, tipo: e.target.value })} required > {Object.values(TipoCustaProcessual).map((tipo) => ( {tipo.replace(/_/g, " ")} ))} setFormData({ ...formData, descricao: e.target.value }) } required /> setFormData({ ...formData, valor: e.target.value }) } required inputProps={{ step: "0.01" }} /> setFormData({ ...formData, percentual: e.target.value }) } inputProps={{ step: "0.01", min: "0", max: "100" }} /> setFormData({ ...formData, vencimento: date }) } sx={{ width: "100%", mb: 2 }} /> {formData.status === "PAGO" && ( setFormData({ ...formData, dataPagamento: date }) } sx={{ width: "100%" }} /> )} setFormData({ ...formData, status: e.target.value }) } required > {Object.values(StatusPagamento).map((status) => ( {status.replace(/_/g, " ")} ))} setFormData({ ...formData, numeroParcelas: parseInt(e.target.value), }) } inputProps={{ min: 1 }} /> setFormData({ ...formData, observacoes: e.target.value }) } />
{formError && ( {formError} )}
); } export default DialogCustaProcessual;