diff --git a/src/app/(protected)/(cadastros)/cadastros/(g_medidatipo)/medida-tipo/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(g_medidatipo)/medida-tipo/page.tsx new file mode 100644 index 0000000..5b198ea --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/(g_medidatipo)/medida-tipo/page.tsx @@ -0,0 +1,128 @@ +'use client'; + +import { useEffect, useState, useCallback } from "react"; +import { Card, CardContent } from "@/components/ui/card"; +import { useConfirmDialog } from "@/app/_components/confirm_dialog/useConfirmDialog"; + +import Header from "@/app/_components/structure/Header"; +import ConfirmDialog from "@/app/_components/confirm_dialog/ConfirmDialog"; +import Loading from "@/app/_components/loading/loading"; +import GMedidaTipoTable from "../../_components/g_medidatipo/GMedidaTipoTable"; +import GMedidaTipoForm from "../../_components/g_medidatipo/GMedidaTipoForm"; + +import { useGMedidaTipoReadHook } from "../../_hooks/g_medidatipo/useGMedidaTipoReadHook"; +import { useGMedidaTipoSaveHook } from "../../_hooks/g_medidatipo/useGMedidaTipoSaveHook"; +import { useGMedidaTipoRemoveHook } from "../../_hooks/g_medidatipo/useGMedidaTipoRemoveHook"; + +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; + +const initialMedidaTipo: GMedidaTipoInterface = { + medida_tipo_id: 0, + sigla: '', + descricao: '' +} + +export default function GMedidaTipoPage() { + + // Hooks para leitura, salvamento e remoção + const { gMedidaTipo, fetchGMedidaTipo } = useGMedidaTipoReadHook(); + const { saveGMedidaTipo } = useGMedidaTipoSaveHook(); + const { removeGMedidaTipo } = useGMedidaTipoRemoveHook(); + + // Estado para controlar o formulário e o item selecionado + const [selectedMedidaTipo, setSelectedMedidaTipo] = useState(null); + const [isFormOpen, setIsFormOpen] = useState(false); + const [itemToDelete, setItemToDelete] = useState(null); + + // Hook para o modal de confirmação + const { + isOpen: isConfirmOpen, + openDialog: openConfirmDialog, + handleConfirm, + handleCancel, + } = useConfirmDialog(); + + // Ações do formulário + const handleOpenForm = useCallback((data: GMedidaTipoInterface | null) => { + setSelectedMedidaTipo(data); + setIsFormOpen(true); + }, []); + + const handleCloseForm = useCallback(() => { + setIsFormOpen(false); + setSelectedMedidaTipo(null); + }, []); + + const handleSave = useCallback(async (data: GMedidaTipoInterface) => { + await saveGMedidaTipo(data); + await fetchGMedidaTipo(); // Atualiza a tabela após salvar + handleCloseForm(); + }, [saveGMedidaTipo, fetchGMedidaTipo]); + + // Ações de deleção + const handleConfirmDelete = useCallback((item: GMedidaTipoInterface) => { + setItemToDelete(item); + openConfirmDialog(); + }, [openConfirmDialog]); + + const handleDelete = useCallback(async () => { + if (itemToDelete) { + await removeGMedidaTipo(itemToDelete); + await fetchGMedidaTipo(); // Atualiza a tabela após remover + } + handleCancel(); + }, [itemToDelete, fetchGMedidaTipo, handleCancel]); + + // Efeito para carregar os dados na montagem do componente + useEffect(() => { + fetchGMedidaTipo(); + }, []); + + // Mostra tela de loading enquanto os dados não são carregados + if (!gMedidaTipo) { + return ; + } + + return ( +
+ {/* Cabeçalho */} +
{ handleOpenForm(data = initialMedidaTipo) }} + /> + + {/* Tabela de Tipos de Medida */} + + + + + + + {/* Modal de confirmação */} + + + {/* Formulário de criação/edição */} + +
+ ); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/(g_tb_estadocivil)/estado-civil/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(g_tb_estadocivil)/estado-civil/page.tsx new file mode 100644 index 0000000..536b2be --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/(g_tb_estadocivil)/estado-civil/page.tsx @@ -0,0 +1,129 @@ +'use client'; + +import { useEffect, useState, useCallback } from "react"; +import { Card, CardContent } from "@/components/ui/card"; +import { useConfirmDialog } from "@/app/_components/confirm_dialog/useConfirmDialog"; + +import Header from "@/app/_components/structure/Header"; +import ConfirmDialog from "@/app/_components/confirm_dialog/ConfirmDialog"; +import Loading from "@/app/_components/loading/loading"; +import GTBEstadoCivilTable from "../../_components/g_tb_estadocivil/GTBEstadoCivilTable"; +import GTBEstadoCivilForm from "../../_components/g_tb_estadocivil/GTBEstadoCivilForm"; + +import { useGTBEstadoCivilReadHook } from "../../_hooks/g_tb_estadocivil/useGTBEstadoCivilReadHook"; +import { useGTBEstadoCivilSaveHook } from "../../_hooks/g_tb_estadocivil/useGTBEstadoCivilSaveHook"; +import { useGTBEstadoCivilRemoveHook } from "../../_hooks/g_tb_estadocivil/useGTBEstadoCivilRemoveHook"; + +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; + +const initalEstadoCivil: GTBEstadoCivilInterface = { + tb_estadocivil_id: 0, + sistema_id: 0, + descricao: '', + situacao: 'A', +} + +export default function TBEstadoCivilPage() { + + // Hooks para leitura e salvamento + const { gTBEstadoCivil, fetchGTBEstadoCivil } = useGTBEstadoCivilReadHook(); + const { saveGTBEstadoCivil } = useGTBEstadoCivilSaveHook(); + const { removeGTBEstadoCivil } = useGTBEstadoCivilRemoveHook(); + + // Estado para controlar o formulário e item selecionado + const [selectedEstadoCivil, setSelectedEstadoCivil] = useState(null); + const [isFormOpen, setIsFormOpen] = useState(false); + const [itemToDelete, setItemToDelete] = useState(null); + + // Hook para o modal de confirmação + const { + isOpen: isConfirmOpen, + openDialog: openConfirmDialog, + handleConfirm, + handleCancel, + } = useConfirmDialog(); + + // Ações do formulário + const handleOpenForm = useCallback((data: GTBEstadoCivilInterface | null) => { + setSelectedEstadoCivil(data); + setIsFormOpen(true); + }, []); + + const handleCloseForm = useCallback(() => { + setIsFormOpen(false); + setSelectedEstadoCivil(null); + }, []); + + const handleSave = useCallback(async (data: GTBEstadoCivilInterface) => { + await saveGTBEstadoCivil(data); + await fetchGTBEstadoCivil(); // Atualiza a tabela após salvar + handleCloseForm(); + }, [saveGTBEstadoCivil, fetchGTBEstadoCivil]); + + // Ações de deleção + const handleConfirmDelete = useCallback((item: GTBEstadoCivilInterface) => { + setItemToDelete(item); + openConfirmDialog(); + }, [openConfirmDialog]); + + const handleDelete = useCallback(async () => { + if (itemToDelete) { + await removeGTBEstadoCivil(itemToDelete); + await fetchGTBEstadoCivil(); // Atualiza a tabela após remover + } + handleCancel(); + }, [itemToDelete, fetchGTBEstadoCivil, handleCancel]); + + // Efeito para carregar os dados na montagem do componente + useEffect(() => { + fetchGTBEstadoCivil(); + }, []); + + // Mostra tela de loading enquanto os dados não são carregados + if (!gTBEstadoCivil) { + return ; + } + + return ( +
+ {/* Cabeçalho */} +
{ handleOpenForm(data = initalEstadoCivil) }} + /> + + {/* Tabela de Estados Civis */} + + + + + + + {/* Modal de confirmação */} + + + {/* Formulário de criação/edição */} + +
+ ); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoForm.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoForm.tsx new file mode 100644 index 0000000..46b47a1 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoForm.tsx @@ -0,0 +1,125 @@ +'use client'; + +import z from "zod"; +import { useEffect } from "react"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; + +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle +} from "@/components/ui/dialog"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; + +import { GMedidaTipoSchema } from "../../_schemas/GMedidaTipoSchema"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; + +type FormValues = z.infer; + +interface GMedidaTipoFormProps { + isOpen: boolean; + data: FormValues | null; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: FormValues) => void; +} + +export default function GMedidaTipoForm({ isOpen, data, onClose, onSave }: GMedidaTipoFormProps) { + // Inicializa o react-hook-form com o schema Zod + const form = useForm({ + resolver: zodResolver(GMedidaTipoSchema), + defaultValues: { + medida_tipo_id: 0, + sigla: "", + descricao: "", + }, + }); + + // Atualiza o formulário quando recebe dados para edição + useEffect(() => { + if (data) form.reset(data); + }, [data, form]); + + return ( + { + if (!open) onClose(null, false); + }} + > + + + + Tipo de Medida + + + Crie ou edite um tipo de medida + + + +
+ + + {/* Descrição */} + ( + + Descrição + + + + + + )} + /> + + {/* Sigla */} + ( + + Sigla + + + + + + )} + /> + + {/* Rodapé do Dialog */} + + + + + + + + {/* Campo oculto */} + + + +
+
+ ); +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoTable.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoTable.tsx new file mode 100644 index 0000000..6005b84 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoTable.tsx @@ -0,0 +1,96 @@ +'use client'; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from "@/components/ui/dropdown-menu"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from "@/components/ui/table"; +import { EllipsisIcon, PencilIcon, Trash2Icon } from "lucide-react"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; + +interface GMedidaTipoTableProps { + data: GMedidaTipoInterface[]; + onEdit: (item: GMedidaTipoInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: GMedidaTipoInterface, isEditingFormStatus: boolean) => void; +} + +export default function GMedidaTipoTable({ + data, + onEdit, + onDelete +}: GMedidaTipoTableProps) { + return ( + + + + # + Descrição + Sigla + Ações + + + + + {data.map((item) => ( + + + {item.medida_tipo_id} + + {item.descricao} + {item.sigla} + + + + + + + + + onEdit(item, true)} + > + + Editar + + + + + onDelete(item, true)} + > + + Remover + + + + + + + ))} + +
+ ); +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_estadocivil/GTBEstadoCivilForm.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_estadocivil/GTBEstadoCivilForm.tsx new file mode 100644 index 0000000..6e94347 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_estadocivil/GTBEstadoCivilForm.tsx @@ -0,0 +1,129 @@ +'use client'; + +import z from "zod"; +import { useEffect } from "react"; +import { useForm, Controller } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; + +import { Button } from "@/components/ui/button"; +import { Checkbox } from "@/components/ui/checkbox"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle +} from "@/components/ui/dialog"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; + +import { GTBEstadoCivilSchema } from "../../_schemas/GTBEstadoCivilSchema"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; + +type FormValues = z.infer; + +interface TBEstadoCivilFormProps { + isOpen: boolean; + data: FormValues | null; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: FormValues) => void; +} + +export default function GTBEstadoCivilForm({ isOpen, data, onClose, onSave }: TBEstadoCivilFormProps) { + // Inicializa o react-hook-form com o schema Zod + const form = useForm({ + resolver: zodResolver(GTBEstadoCivilSchema), + defaultValues: { + tb_estadocivil_id: 0, + sistema_id: 0, + descricao: "", + situacao: "A", + }, + }); + + // Atualiza o formulário quando recebe dados para edição + useEffect(() => { + if (data) form.reset(data); + }, [data, form]); + + return ( + { + if (!open) onClose(null, false); + }} + > + + + + Estado Civil + + + Crie ou edite um estado civil + + + +
+ + + {/* Descrição */} + ( + + Descrição + + + + + + )} + /> + + {/* Situação */} + ( +
+ field.onChange(checked ? "A" : "I")} + /> + +
+ )} + /> + + {/* Rodapé do Dialog */} + + + + + + + + {/* Campos ocultos */} + + + + +
+
+ ); +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_estadocivil/GTBEstadoCivilTable.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_estadocivil/GTBEstadoCivilTable.tsx new file mode 100644 index 0000000..1f3ba22 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_estadocivil/GTBEstadoCivilTable.tsx @@ -0,0 +1,123 @@ +'use client'; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from "@/components/ui/dropdown-menu"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from "@/components/ui/table"; +import { EllipsisIcon, PencilIcon, Trash2Icon } from "lucide-react"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; + +interface TBEstadoCivilTableProps { + data: GTBEstadoCivilInterface[]; + onEdit: (item: GTBEstadoCivilInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: GTBEstadoCivilInterface, isEditingFormStatus: boolean) => void; +} + +/** + * Renderiza o badge de situação + */ +function StatusBadge({ situacao }: { situacao: 'A' | 'I' }) { + const isActive = situacao === "A"; + + const baseClasses = + "text-xs font-medium px-2.5 py-0.5 rounded-sm me-2"; + + const activeClasses = + "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300"; + + const inactiveClasses = + "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300"; + + return ( + + {isActive ? "Ativo" : "Inativo"} + + ); +} + +export default function GTBEstadoCivilTable({ + data, + onEdit, + onDelete +}: TBEstadoCivilTableProps) { + return ( + + + + # + Situação + Descrição + Ações + + + + + {data.map((item) => ( + + + {item.tb_estadocivil_id} + + + + + + + {item.descricao} + + + + + + + + + + onEdit(item, true)} + > + + Editar + + + + + onDelete(item, true)} + > + + Remover + + + + + + + ))} + +
+ ); +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoIndexData.ts new file mode 100644 index 0000000..7767d4c --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoIndexData.ts @@ -0,0 +1,25 @@ +import API from "@/services/api/Api"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; +import MedidaTipoMockDeDados from "./mockMedidaTipo"; + +const useMock = true + +export default async function GMedidaTipoIndexData() { + if (useMock) { + console.log(MedidaTipoMockDeDados()) + return await MedidaTipoMockDeDados(); + } + + const api = new API(); + try { + const dados = await api.send({ + method: Methods.GET, + endpoint: `administrativo/g_medida_tipo/` + }); + return dados + } catch (error) { + console.log(error) + return error + } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoRemoveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoRemoveData.ts new file mode 100644 index 0000000..7e7f4d3 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoRemoveData.ts @@ -0,0 +1,14 @@ +import API from "@/services/api/Api"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; + +export default async function GMedidaTipoRemoveData(data: GMedidaTipoInterface) { + + const api = new API(); + + return await api.send({ + method: Methods.DELETE, + endpoint: `administrativo/g_medida_tipo/${data.medida_tipo_id}` + }); + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoSaveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoSaveData.ts new file mode 100644 index 0000000..deff26e --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoSaveData.ts @@ -0,0 +1,17 @@ +import API from "@/services/api/Api"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; + +export default async function GMedidaTipoSaveData(data: GMedidaTipoInterface) { + + const isUpdate = Boolean(data.medida_tipo_id); + + const api = new API(); + + return await api.send({ + method: isUpdate ? Methods.PUT : Methods.POST, + endpoint: `administrativo/g_medida_tipo/${data.medida_tipo_id || ''}`, + body: data + }); + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/mockMedidaTipo.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/mockMedidaTipo.ts new file mode 100644 index 0000000..ae1eabf --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/mockMedidaTipo.ts @@ -0,0 +1,28 @@ +export default async function MedidaTipoMockDeDados() { + return Promise.resolve({ + status: 200, + message: 'Dados localizados', + data: [ + { + medida_tipo_id: 1.00, + sigla: "Alqueire", + descricao: "Alqueire" + }, + { + medida_tipo_id: 2.00, + sigla: "ha", + descricao: "Hectare" + }, + { + medida_tipo_id: 3.00, + sigla: "m2", + descricao: "Metros Quadrados" + }, + { + medida_tipo_id: 4.00, + sigla: "braça", + descricao: "Braça" + } + ] + }); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilIndexData.ts new file mode 100644 index 0000000..efa8787 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilIndexData.ts @@ -0,0 +1,25 @@ +import API from "@/services/api/Api"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; +import EstadoCivilMockDeDados from "./mockEstadoCivil"; + +const useMock = true + +export default async function GTBEstadoCivilIndexData() { + if (useMock) { + console.log(EstadoCivilMockDeDados()) + return await EstadoCivilMockDeDados(); + } + + const api = new API(); + try { + const dados = await api.send({ + method: Methods.GET, + endpoint: `administrativo/g_tb_estado_civil/` + }); + return dados + } catch (error) { + console.log(error) + return error + } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilRemoveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilRemoveData.ts new file mode 100644 index 0000000..306b3c4 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilRemoveData.ts @@ -0,0 +1,14 @@ +import API from "@/services/api/Api"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; + +export default async function GTBEstadoCivilRemoveData(data: GTBEstadoCivilInterface) { + + const api = new API(); + + return await api.send({ + method: Methods.DELETE, + endpoint: `administrativo/g_tb_bairro/${data.tb_estadocivil_id}` + }); + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilSaveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilSaveData.ts new file mode 100644 index 0000000..da800a6 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/GTBEstadoCivilSaveData.ts @@ -0,0 +1,17 @@ +import API from "@/services/api/Api"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; + +export default async function GTBEstadoCivilSaveData(data: GTBEstadoCivilInterface) { + + const isUpdate = Boolean(data.tb_estadocivil_id); + + const api = new API(); + + return await api.send({ + method: isUpdate ? Methods.PUT : Methods.POST, + endpoint: `administrativo/g_tb_bairro/${data.tb_estadocivil_id || ''}`, + body: data + }); + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/mockEstadoCivil.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/mockEstadoCivil.ts new file mode 100644 index 0000000..04e8155 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBEstadoCivil/mockEstadoCivil.ts @@ -0,0 +1,58 @@ +import { GTBBairroInterface } from "../../_interfaces/GTBBairroInterface"; + +export default async function EstadoCivilMockDeDados() { + return Promise.resolve({ + status: 200, + message: 'Dados localizados', + data: [ + { + tb_estadocivil_id: 26.00, + sistema_id: 2.00, + descricao: "casado", + situacao: "A", + }, + { + tb_estadocivil_id: 27.00, + sistema_id: 2.00, + descricao: "solteiro(a)", + situacao: "A", + }, + { + tb_estadocivil_id: 28.00, + sistema_id: 2.00, + descricao: "desquitado(a)", + situacao: "A", + }, + { + tb_estadocivil_id: 29.00, + sistema_id: 2.00, + descricao: "divorciado(a)", + situacao: "A", + }, + { + tb_estadocivil_id: 30.00, + sistema_id: 2.00, + descricao: "espólio", + situacao: "A", + }, + { + tb_estadocivil_id: 31.00, + sistema_id: 2.00, + descricao: "menor impúbere", + situacao: "A", + }, + { + tb_estadocivil_id: 32.00, + sistema_id: 2.00, + descricao: "menor púbere", + situacao: "A", + }, + { + tb_estadocivil_id: 33.00, + sistema_id: 2.00, + descricao: "não consta", + situacao: "A", + } + ] + }); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoReadHook.ts new file mode 100644 index 0000000..9ac7b2c --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoReadHook.ts @@ -0,0 +1,27 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; +import GMedidaTipoIndexService from "../../_services/g_medidatipo/GMedidaTipoIndexService"; + +export const useGMedidaTipoReadHook = () => { + + const { setResponse } = useResponse(); + const [gMedidaTipo, setGMedidaTipo] = useState([]); + + const fetchGMedidaTipo = async () => { + + try { + const response = await GMedidaTipoIndexService(); + + setGMedidaTipo(response.data); + + setResponse(response); + } catch (error) { + console.log(error) + } + + } + + return { gMedidaTipo, fetchGMedidaTipo } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoRemoveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoRemoveHook.ts new file mode 100644 index 0000000..d19018a --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoRemoveHook.ts @@ -0,0 +1,19 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; +import GMedidaTipoRemoveService from "../../_services/g_medidatipo/GMedidaTipoRemoveService"; + +export const useGMedidaTipoRemoveHook = () => { + + const { setResponse } = useResponse(); + + const removeGMedidaTipo = async (data: GMedidaTipoInterface) => { + + const response = await GMedidaTipoRemoveService(data); + + setResponse(response); + + } + + return { removeGMedidaTipo } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoSaveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoSaveHook.ts new file mode 100644 index 0000000..8f70843 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_medidatipo/useGMedidaTipoSaveHook.ts @@ -0,0 +1,31 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; +import GMedidaTipoSaveService from "../../_services/g_medidatipo/GMedidaTipoSaveService"; + +export const useGMedidaTipoSaveHook = () => { + + const { setResponse } = useResponse(); + const [gMedidaTipo, setGMedidaTipo] = useState(null); + // controla se o formulário está aberto ou fechado + const [isOpen, setIsOpen] = useState(false); + + const saveGMedidaTipo = async (data: GMedidaTipoInterface) => { + + const response = await GMedidaTipoSaveService(data); + + setGMedidaTipo(response.data); + + setResponse(response); + + // Fecha o formulário automaticamente após salvar + setIsOpen(false); + + // Retorna os dados imediatamente + return response; + + } + + return { gMedidaTipo, saveGMedidaTipo } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilReadHook.ts new file mode 100644 index 0000000..4a7d31b --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilReadHook.ts @@ -0,0 +1,27 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; +import GTBEstadoCivilIndexService from "../../_services/g_tb_estadocivil/GTBEstadoCivilIndexService"; + +export const useGTBEstadoCivilReadHook = () => { + + const { setResponse } = useResponse(); + const [gTBEstadoCivil, setGTBEstadoCivil] = useState([]); + + const fetchGTBEstadoCivil = async () => { + + try { + const response = await GTBEstadoCivilIndexService(); + + setGTBEstadoCivil(response.data); + + setResponse(response); + } catch (error) { + console.log(error) + } + + } + + return { gTBEstadoCivil, fetchGTBEstadoCivil } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilRemoveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilRemoveHook.ts new file mode 100644 index 0000000..1cc29cf --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilRemoveHook.ts @@ -0,0 +1,19 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; +import GTBEstadoCivilRemoveService from "../../_services/g_tb_estadocivil/GTBEstadoCivilRemoveService"; + +export const useGTBEstadoCivilRemoveHook = () => { + + const { setResponse } = useResponse(); + + const removeGTBEstadoCivil = async (data: GTBEstadoCivilInterface) => { + + const response = await GTBEstadoCivilRemoveService(data); + + setResponse(response); + + } + + return { removeGTBEstadoCivil } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilSaveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilSaveHook.ts new file mode 100644 index 0000000..63a0237 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_estadocivil/useGTBEstadoCivilSaveHook.ts @@ -0,0 +1,31 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; +import GTBEstadoCivilSaveService from "../../_services/g_tb_estadocivil/GTBEstadoCivilSaveService"; + +export const useGTBEstadoCivilSaveHook = () => { + + const { setResponse } = useResponse(); + const [gTBEstadoCivil, setGTBEstadoCivil] = useState(null); + // controla se o formulário está aberto ou fechado + const [isOpen, setIsOpen] = useState(false); + + const saveGTBEstadoCivil = async (data: GTBEstadoCivilInterface) => { + + const response = await GTBEstadoCivilSaveService(data); + + setGTBEstadoCivil(response.data); + + setResponse(response); + + // Fecha o formulário automaticamente após salvar + setIsOpen(false); + + // Retorna os dados imediatamente + return response; + + } + + return { gTBEstadoCivil, saveGTBEstadoCivil } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GMedidaTipoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GMedidaTipoInterface.ts new file mode 100644 index 0000000..f351f54 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GMedidaTipoInterface.ts @@ -0,0 +1,5 @@ +export interface GMedidaTipoInterface { + medida_tipo_id: number; + sigla: string; + descricao: string; +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBEstadoCivilInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBEstadoCivilInterface.ts new file mode 100644 index 0000000..12f1cf5 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBEstadoCivilInterface.ts @@ -0,0 +1,6 @@ +export interface GTBEstadoCivilInterface { + tb_estadocivil_id: number; + sistema_id: number; + descricao: string; + situacao: 'A' | 'I'; +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/GMedidaTipoSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/GMedidaTipoSchema.ts new file mode 100644 index 0000000..12bc46e --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_schemas/GMedidaTipoSchema.ts @@ -0,0 +1,7 @@ +import { z } from 'zod'; + +export const GMedidaTipoSchema = z.object({ + medida_tipo_id: z.number(), + sigla: z.string(), + descricao: z.string(), +}); \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBEstadoCivilSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBEstadoCivilSchema.ts new file mode 100644 index 0000000..88cb617 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBEstadoCivilSchema.ts @@ -0,0 +1,8 @@ +import { z } from 'zod'; + +export const GTBEstadoCivilSchema = z.object({ + tb_estadocivil_id: z.number(), + sistema_id: z.number(), + descricao: z.string(), + situacao: z.enum(['A', 'I']), +}); \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoIndexService.ts new file mode 100644 index 0000000..e12ceba --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoIndexService.ts @@ -0,0 +1,12 @@ +import GMedidaTipoIndexData from "../../_data/GMedidoTipo/GMedidaTipoIndexData"; + +export default async function GMedidaTipoIndexService() { + + try { + const response = await GMedidaTipoIndexData(); + return response; + } catch (error) { + console.log(error) + return error + } +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoRemoveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoRemoveService.ts new file mode 100644 index 0000000..2a98f69 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoRemoveService.ts @@ -0,0 +1,10 @@ +import GMedidaTipoRemoveData from "../../_data/GMedidoTipo/GMedidaTipoRemoveData"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; + +export default async function GMedidaTipoRemoveService(data: GMedidaTipoInterface) { + + const response = await GMedidaTipoRemoveData(data); + + return response; + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoSaveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoSaveService.ts new file mode 100644 index 0000000..c6f3460 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoSaveService.ts @@ -0,0 +1,12 @@ +import GMedidaTipoSaveData from "../../_data/GMedidoTipo/GMedidaTipoSaveData"; +import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; + +export default async function GMedidaTipoSaveService(data: GMedidaTipoInterface) { + + const response = await GMedidaTipoSaveData(data); + + console.log('GTBRegimeComunhaoSaveData', response) + + return response; + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilIndexService.ts new file mode 100644 index 0000000..11c0b1d --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilIndexService.ts @@ -0,0 +1,12 @@ +import GTBEstadoCivilIndexData from "../../_data/GTBEstadoCivil/GTBEstadoCivilIndexData"; + +export default async function GTBEstadoCivilIndexService() { + + try { + const response = await GTBEstadoCivilIndexData(); + return response; + } catch (error) { + console.log(error) + return error + } +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilRemoveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilRemoveService.ts new file mode 100644 index 0000000..4c19f10 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilRemoveService.ts @@ -0,0 +1,10 @@ +import GTBEstadoCivilSaveData from "../../_data/GTBEstadoCivil/GTBEstadoCivilSaveData"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; + +export default async function GTBEstadoCivilRemoveService(data: GTBEstadoCivilInterface) { + + const response = await GTBEstadoCivilSaveData(data); + + return response; + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilSaveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilSaveService.ts new file mode 100644 index 0000000..0567d52 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_estadocivil/GTBEstadoCivilSaveService.ts @@ -0,0 +1,12 @@ +import GTBEstadoCivilSaveData from "../../_data/GTBEstadoCivil/GTBEstadoCivilSaveData"; +import { GTBEstadoCivilInterface } from "../../_interfaces/GTBEstadoCivilInterface"; + +export default async function GTBEstadoCivilSaveService(data: GTBEstadoCivilInterface) { + + const response = await GTBEstadoCivilSaveData(data); + + console.log('GTBRegimeComunhaoSaveData', response) + + return response; + +} \ No newline at end of file diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index 39d10dc..6052abb 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -104,6 +104,14 @@ const data = { title: "Bairro", url: "/cadastros/bairro" }, + { + title: "Estado Civil", + url: "/cadastros/estado-civil" + }, + { + title: "Tipo de Medida", + url: "/cadastros/medida-tipo" + }, { title: "Regimes/Comunhão", url: "/cadastros/regime-comunhao/",