diff --git a/src/app/(protected)/(administrativo)/administrativo/valores-de-servicos/page.tsx b/src/app/(protected)/(administrativo)/administrativo/valores-de-servicos/page.tsx new file mode 100644 index 0000000..ea03050 --- /dev/null +++ b/src/app/(protected)/(administrativo)/administrativo/valores-de-servicos/page.tsx @@ -0,0 +1,11 @@ +import GNaturezaTituloIndex from "@/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloIndex"; + +export default function GNaturezaPage() { + + return ( + + ); + +} \ No newline at end of file diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index a33ccd8..6efa3b6 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -1,15 +1,15 @@ 'use client'; -import * as React from 'react'; import { Bot, Frame, GalleryVerticalEnd, - House, HouseIcon, SquareTerminal, - UsersIcon, + UsersIcon } from 'lucide-react'; +import Image from 'next/image'; +import * as React from 'react'; import { NavMain } from '@/components/nav-main'; import { NavProjects } from '@/components/nav-projects'; @@ -24,9 +24,8 @@ import { SidebarMenuItem, SidebarRail, } from '@/components/ui/sidebar'; - import useGUsuarioGetJWTHook from '@/shared/hooks/auth/useGUsuarioGetJWTHook'; -import Image from 'next/image'; + // This is sample data. const data = { diff --git a/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloColumns.tsx b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloColumns.tsx new file mode 100644 index 0000000..e0c3a36 --- /dev/null +++ b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloColumns.tsx @@ -0,0 +1,89 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { EllipsisIcon, PencilIcon, Trash2Icon } from 'lucide-react'; + +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import GetCapitalize from '@/shared/actions/text/GetCapitalize'; +import { SortableHeader } from '@/shared/components/dataTable/SortableHeader'; + +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; +import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; + +export default function GNaturezaTituloColumns( + onEdit: (item: GNaturezaTituloInterface, isEditingFormStatus: boolean) => void, + onDelete: (item: GNaturezaTituloInterface, isEditingFormStatus: boolean) => void, +): ColumnDef[] { + return [ + // ID + { + accessorKey: 'natureza_titulo_id', + header: ({ column }) => SortableHeader('ID', column), + cell: ({ row }) => Number(row.getValue('natureza_titulo_id')), + enableSorting: true, + }, + + // Situação + { + accessorKey: 'situacao', + header: ({ column }) => SortableHeader('Situação', column), + cell: ({ row }) => { + const value = String(row.getValue('situacao') || '').toUpperCase(); + return SituacoesEnum[value as keyof typeof SituacoesEnum] ?? '-'; + }, + }, + + // Descrição + { + accessorKey: 'descricao', + header: ({ column }) => SortableHeader('Descrição', column), + cell: ({ row }) => GetCapitalize(String(row.getValue('descricao') || '')), + }, + + // Ações + { + id: 'actions', + header: 'Ações', + cell: ({ row }) => { + const natureza = row.original; + + return ( + + + + + + + + onEdit(natureza, true)}> + + Editar + + + + + onDelete(natureza, true)} + > + + Remover + + + + + ); + }, + enableSorting: false, + enableHiding: false, + }, + ]; +} diff --git a/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloForm.tsx b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloForm.tsx new file mode 100644 index 0000000..b0c7618 --- /dev/null +++ b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloForm.tsx @@ -0,0 +1,127 @@ +'use client'; + +import React, { useEffect } from 'react'; + +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 { ResetFormIfData } from '@/shared/actions/form/ResetFormIfData'; +import LoadingButton from '@/shared/components/loadingButton/LoadingButton'; +import SituacoesSelect from '@/shared/components/situacoes/SituacoesSelect'; + +import { useGNaturezaTituloFormHook } from '../../hooks/GNaturezaTitulo/useGNaturezaTituloFormHook'; +import { GNaturezaTituloFormInterface } from '../../interfaces/GNaturezaTitulo/GNaturezaTituloFormInterface'; + +/** + * Formulário de cadastro/edição de Natureza + * Baseado nos campos da tabela G_NATUREZA + */ +export default function GNaturezaTituloForm({ + isOpen, + data, + onClose, + onSave, + buttonIsLoading, +}: GNaturezaTituloFormInterface) { + const form = useGNaturezaTituloFormHook({}); + + // Atualiza o formulário quando recebe dados para edição + useEffect(() => { + ResetFormIfData(form, data); + }, [data, form]); + + function onError(error: any) { + console.log('Erro no formulário:', error); + } + + return ( + { + if (!open) onClose(null, false); + }} + > + + + Valores de Serviços + + Valores de Serviços + + + {/* Formulário principal */} +
+ + {/* GRID MOBILE FIRST */} +
+ {/* DESCRIÇÃO */} +
+ ( + + Descrição + + + + + + )} + /> +
+ {/* SITUAÇÃO */} +
+ ( + + Situação + + + + )} + /> +
+
+ {/* Rodapé */} + + + + + + +
+ +
+
+ ); +} diff --git a/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloIndex.tsx b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloIndex.tsx new file mode 100644 index 0000000..5df1f9e --- /dev/null +++ b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloIndex.tsx @@ -0,0 +1,168 @@ +'use client'; + +import { useEffect, useState, useCallback } from 'react'; + + +import { useGNaturezaTituloDeleteHook } from '@/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloDeleteHook'; +import { useGNaturezaTituloIndexHook } from '@/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloIndexHook'; +import { useGNaturezaTituloSaveHook } from '@/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloSaveHook'; +import GNaturezaTituloInterface from '@/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; +import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; +import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog'; +import Loading from '@/shared/components/loading/loading'; +import Header from '@/shared/components/structure/Header'; + +import GNaturezaTituloForm from './GNaturezaTituloForm'; +import GNaturezaTituloTable from './GNaturezaTituloTable'; +import { GNaturezaTituloIndexInterface } from '../../interfaces/GNaturezaTitulo/GNaturezaTituloIndexInterface'; + +export default function GNaturezaTituloIndex({ sistema_id }: GNaturezaTituloIndexInterface) { + const GNaturezaTituloIndexParams: GNaturezaTituloIndexInterface = { + sistema_id: sistema_id, + }; + + // Controle de estado do botão + const [buttonIsLoading, setButtonIsLoading] = useState(false); + + // Hooks para leitura e salvamento + const { gNaturezaTitulo, indexGNaturezaTitulo } = useGNaturezaTituloIndexHook(); + const { saveGNaturezaTitulo } = useGNaturezaTituloSaveHook(); + const { deleteGNaturezaTitulo } = useGNaturezaTituloDeleteHook(); + + // Estados + const [selectedData, setSelectedData] = useState(null); + const [isFormOpen, setIsFormOpen] = useState(false); + + // Estado para saber qual item será deletado + const [itemToDelete, setItemToDelete] = useState(null); + + /** + * Hook do modal de confirmação + */ + const { isOpen: isConfirmOpen, openDialog: openConfirmDialog, handleCancel } = useConfirmDialog(); + + /** + * Abre o formulário no modo de edição ou criação + */ + const handleOpenForm = useCallback((data: GNaturezaTituloInterface | null) => { + // Se não houver dados (criação), cria um objeto inicial com pessoa_tipo + const initialData: GNaturezaTituloInterface = + data ?? ({ sistema_id: GNaturezaTituloIndexParams.sistema_id } as GNaturezaTituloInterface); + setSelectedData(initialData); + setIsFormOpen(true); + }, []); + + /** + * Fecha o formulário e limpa o andamento selecionado + */ + const handleCloseForm = useCallback(() => { + setSelectedData(null); + setIsFormOpen(false); + }, []); + + /** + * Salva os dados do formulário + */ + const handleSave = useCallback( + async (formData: GNaturezaTituloInterface) => { + // Coloca o botão em estado de loading + setButtonIsLoading(true); + + // Aguarda salvar o registro + await saveGNaturezaTitulo(formData); + + // Remove o botão em estado de loading + setButtonIsLoading(false); + + // Atualiza a lista de dados + indexGNaturezaTitulo(GNaturezaTituloIndexParams); + }, + [saveGNaturezaTitulo, indexGNaturezaTitulo, handleCloseForm], + ); + + /** + * Quando o usuário clica em "remover" na tabela + */ + const handleConfirmDelete = useCallback( + (item: GNaturezaTituloInterface) => { + // Define o item atual para remoção + setItemToDelete(item); + // Abre o modal de confirmação + openConfirmDialog(); + }, + [openConfirmDialog], + ); + + /** + * Executa a exclusão de fato quando o usuário confirma + */ + const handleDelete = useCallback(async () => { + // Protege contra null + if (!itemToDelete) return; + + // Executa o Hook de remoção + await deleteGNaturezaTitulo(itemToDelete); + + // Atualiza a lista + await indexGNaturezaTitulo(GNaturezaTituloIndexParams); + + // Limpa o item selecionado + setItemToDelete(null); + + // Fecha o modal + handleCancel(); + }, [itemToDelete, indexGNaturezaTitulo, handleCancel]); + + /** + * Busca inicial dos dados + */ + useEffect(() => { + indexGNaturezaTitulo(GNaturezaTituloIndexParams); + }, []); + + /** + * Tela de loading enquanto carrega os dados + */ + if (gNaturezaTitulo?.length == 0) { + return ; + } + + return ( +
+ {/* Cabeçalho */} +
{ + handleOpenForm(null); + }} + /> + {/* Tabela de andamentos */} + + {/* Modal de confirmação */} + {isConfirmOpen && ( + + )} + {/* Formulário de criação/edição */} + {isFormOpen && ( + + )} +
+ ); +} diff --git a/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloTable.tsx b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloTable.tsx new file mode 100644 index 0000000..ec0a34e --- /dev/null +++ b/src/packages/administrativo/components/GNaturezaTitulo/GNaturezaTituloTable.tsx @@ -0,0 +1,23 @@ +'use client'; + +import { DataTable } from '@/shared/components/dataTable/DataTable'; + +import GNaturezaTituloColumns from './GNaturezaTituloColumns'; +import GNaturezaTituloTableInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloTableInterface'; + +/** + * Componente principal da tabela de Naturezas + */ +export default function GNaturezaTituloTable({ data, onEdit, onDelete }: GNaturezaTituloTableInterface) { + const columns = GNaturezaTituloColumns(onEdit, onDelete); + return ( +
+ +
+ ); +} diff --git a/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloDeleteData.ts b/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloDeleteData.ts new file mode 100644 index 0000000..d2b0252 --- /dev/null +++ b/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloDeleteData.ts @@ -0,0 +1,17 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; + +async function executeGNaturezaTituloDeleteData(data: GNaturezaTituloInterface): Promise { + const api = new API(); + + return api.send({ + method: Methods.DELETE, + endpoint: `administrativo/g_natureza_titulo/${data.natureza_titulo_id}`, + }); +} + +export const GNaturezaTituloDeleteData = withClientErrorHandler(executeGNaturezaTituloDeleteData); diff --git a/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloIndexData.ts b/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloIndexData.ts new file mode 100644 index 0000000..bae199f --- /dev/null +++ b/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloIndexData.ts @@ -0,0 +1,17 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; + +async function executeGNaturezaTituloIndexData(data: GNaturezaTituloInterface): Promise { + const api = new API(); + + return api.send({ + method: Methods.GET, + endpoint: `administrativo/g_natureza_titulo/sistema/${data.sistema_id}`, + }); +} + +export const GNaturezaTituloIndexData = withClientErrorHandler(executeGNaturezaTituloIndexData); diff --git a/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloSaveData.ts b/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloSaveData.ts new file mode 100644 index 0000000..c985672 --- /dev/null +++ b/src/packages/administrativo/data/GNaturezaTitulo/GNaturezaTituloSaveData.ts @@ -0,0 +1,23 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; + +async function executeGNaturezaTituloSaveData(data: GNaturezaTituloInterface): Promise { + // Verifica se existe ID para decidir se é atualização (PUT) ou criação (POST) + const isUpdate = Boolean(data.natureza_titulo_id); + + // Instancia o cliente da API + const api = new API(); + + // Executa a requisição para a API com o método apropriado e envia os dados no corpo + return api.send({ + method: isUpdate ? Methods.PUT : Methods.POST, // PUT se atualizar, POST se criar + endpoint: `administrativo/g_natureza_titulo/${data.natureza_titulo_id || ''}`, // endpoint dinâmico + body: data, // payload enviado para a API + }); +} + +export const GNaturezaTituloSaveData = withClientErrorHandler(executeGNaturezaTituloSaveData); diff --git a/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloDeleteHook.ts b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloDeleteHook.ts new file mode 100644 index 0000000..b2ac8e0 --- /dev/null +++ b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloDeleteHook.ts @@ -0,0 +1,21 @@ +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; +import { GNaturezaTituloDeleteService } from '../../services/GNaturezaTitulo/GNaturezaTituloDeleteService'; + +export const useGNaturezaTituloDeleteHook = () => { + const { setResponse } = useResponse(); + + const [gNaturezaTitulo, setGNaturezaTitulo] = useState(); + + const deleteGNaturezaTitulo = async (data: GNaturezaTituloInterface) => { + const response = await GNaturezaTituloDeleteService(data); + + setGNaturezaTitulo(data); + setResponse(response); + }; + + return { gNaturezaTitulo, deleteGNaturezaTitulo }; +}; diff --git a/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloFormHook.ts b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloFormHook.ts new file mode 100644 index 0000000..5ef45fc --- /dev/null +++ b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloFormHook.ts @@ -0,0 +1,14 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { useForm } from 'react-hook-form'; + +import { GNaturezaTituloFormValues, GNaturezaTituloSchema } from '../../schemas/GNaturezaTitulo/GNaturezaTituloSchema'; + +export function useGNaturezaTituloFormHook(defaults?: Partial) { + return useForm({ + resolver: zodResolver(GNaturezaTituloSchema), + defaultValues: { + natureza_titulo_id: 0, + ...defaults, + }, + }); +} diff --git a/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloIndexHook.ts b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloIndexHook.ts new file mode 100644 index 0000000..583e9e4 --- /dev/null +++ b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloIndexHook.ts @@ -0,0 +1,27 @@ +'use client'; + +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; +import { GNaturezaTituloIndexService } from '../../services/GNaturezaTitulo/GNaturezaTituloIndexService'; + +export const useGNaturezaTituloIndexHook = () => { + const { setResponse } = useResponse(); + + const [gNaturezaTitulo, setGNaturezaTitulo] = useState([]); + + const indexGNaturezaTitulo = async (data: GNaturezaTituloInterface) => { + const response = await GNaturezaTituloIndexService(data); + // Armazena os dados consultados + setGNaturezaTitulo(response.data); + // Define a resposta (toast, modal, feedback, etc.) + setResponse(response); + }; + + return { + gNaturezaTitulo, + indexGNaturezaTitulo, + }; +}; diff --git a/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloSaveHook.ts b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloSaveHook.ts new file mode 100644 index 0000000..19f03eb --- /dev/null +++ b/src/packages/administrativo/hooks/GNaturezaTitulo/useGNaturezaTituloSaveHook.ts @@ -0,0 +1,35 @@ +'use client'; + +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; +import { GNaturezaTituloSaveService } from '../../services/GNaturezaTitulo/GNaturezaTituloSaveService'; + +export const useGNaturezaTituloSaveHook = () => { + const { setResponse } = useResponse(); + + const [gNaturezaTitulo, setGNaturezaTitulo] = useState(null); + + // controla se o formulário está aberto ou fechado + const [isOpen, setIsOpen] = useState(false); + + const saveGNaturezaTitulo = async (data: GNaturezaTituloInterface) => { + const response = await GNaturezaTituloSaveService(data); + + // Armazena os dados da resposta + setGNaturezaTitulo(response.data); + + // Define os dados da resposta (toast, modal, etc.) + setResponse(response); + + // Fecha o formulário automaticamente após salvar + setIsOpen(false); + + // Retorna os valores de forma imediata + return response.data; + }; + + return { gNaturezaTitulo, saveGNaturezaTitulo, isOpen, setIsOpen }; +}; diff --git a/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloFormInterface.ts b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloFormInterface.ts new file mode 100644 index 0000000..3b2707b --- /dev/null +++ b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloFormInterface.ts @@ -0,0 +1,9 @@ +import { GNaturezaTituloFormValues } from '../../schemas/GNaturezaTitulo/GNaturezaTituloSchema'; + +export interface GNaturezaTituloFormInterface { + isOpen: boolean; + data: GNaturezaTituloFormValues | null; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: GNaturezaTituloFormValues) => void; + buttonIsLoading: boolean; +} diff --git a/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloIndexInterface.ts b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloIndexInterface.ts new file mode 100644 index 0000000..ea3d3b0 --- /dev/null +++ b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloIndexInterface.ts @@ -0,0 +1,3 @@ +export interface GNaturezaTituloIndexInterface { + sistema_id: number; +} diff --git a/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloInterface.ts b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloInterface.ts new file mode 100644 index 0000000..eb379c6 --- /dev/null +++ b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloInterface.ts @@ -0,0 +1,14 @@ +import { ConfirmacaoEnum } from "@/shared/enums/ConfirmacaoEnum"; +import { SituacoesEnum } from "@/shared/enums/SituacoesEnum"; + +export default interface GNaturezaTituloInterface { + natureza_titulo_id?: number, + emolumento_id?: number, + descricao?: string, + situacao?: SituacoesEnum, + sistema_id?: number, + tipo_cobranca?: number, + possui_valor?: ConfirmacaoEnum, + pertence_registro_imovel?: ConfirmacaoEnum, + tipo_recibo?: number, +} diff --git a/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloTableInterface.ts b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloTableInterface.ts new file mode 100644 index 0000000..697bba3 --- /dev/null +++ b/src/packages/administrativo/interfaces/GNaturezaTitulo/GNaturezaTituloTableInterface.ts @@ -0,0 +1,7 @@ +import GNaturezaTituloInterface from './GNaturezaTituloInterface'; + +export default interface GNaturezaTituloTableInterface { + data?: GNaturezaTituloInterface[]; + onEdit: (item: GNaturezaTituloInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: GNaturezaTituloInterface, isEditingFormStatus: boolean) => void; +} diff --git a/src/packages/administrativo/schemas/GNaturezaTitulo/GNaturezaTituloSchema.ts b/src/packages/administrativo/schemas/GNaturezaTitulo/GNaturezaTituloSchema.ts new file mode 100644 index 0000000..b9cf9d2 --- /dev/null +++ b/src/packages/administrativo/schemas/GNaturezaTitulo/GNaturezaTituloSchema.ts @@ -0,0 +1,17 @@ +import z from "zod"; + +import { ConfirmacaoEnum } from "@/shared/enums/ConfirmacaoEnum"; + +export const GNaturezaTituloSchema = z.object({ + natureza_titulo_id: z.number().optional(), + emolumento_id: z.number().optional(), + descricao: z.string().optional(), + situacao: z.enum(["A", "I"]).optional(), + sistema_id: z.number().optional(), + tipo_cobranca: z.number().optional(), + possui_valor: z.enum(ConfirmacaoEnum).optional(), + pertence_registro_imovel: z.enum(ConfirmacaoEnum).optional(), + tipo_recibo: z.number().optional(), +}); + +export type GNaturezaTituloFormValues = z.infer; \ No newline at end of file diff --git a/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloDeleteService.ts b/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloDeleteService.ts new file mode 100644 index 0000000..5cc385d --- /dev/null +++ b/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloDeleteService.ts @@ -0,0 +1,12 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import { GNaturezaTituloDeleteData } from '../../data/GNaturezaTitulo/GNaturezaTituloDeleteData'; +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; + +async function executeGNaturezaTituloDeleteService(data: GNaturezaTituloInterface) { + const response = await GNaturezaTituloDeleteData(data); + + return response; +} + +export const GNaturezaTituloDeleteService = withClientErrorHandler(executeGNaturezaTituloDeleteService); diff --git a/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloIndexService.ts b/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloIndexService.ts new file mode 100644 index 0000000..698d9c2 --- /dev/null +++ b/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloIndexService.ts @@ -0,0 +1,12 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import { GNaturezaTituloIndexData } from '../../data/GNaturezaTitulo/GNaturezaTituloIndexData'; +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; + +export default async function executeGNaturezaTituloIndexService(data: GNaturezaTituloInterface) { + const response = await GNaturezaTituloIndexData(data); + + return response; +} + +export const GNaturezaTituloIndexService = withClientErrorHandler(executeGNaturezaTituloIndexService); diff --git a/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloSaveService.ts b/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloSaveService.ts new file mode 100644 index 0000000..817a556 --- /dev/null +++ b/src/packages/administrativo/services/GNaturezaTitulo/GNaturezaTituloSaveService.ts @@ -0,0 +1,12 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import { GNaturezaTituloSaveData } from '../../data/GNaturezaTitulo/GNaturezaTituloSaveData'; +import GNaturezaTituloInterface from '../../interfaces/GNaturezaTitulo/GNaturezaTituloInterface'; + +async function executeGNaturezaTituloSaveService(data: GNaturezaTituloInterface) { + const response = await GNaturezaTituloSaveData(data); + + return response; +} + +export const GNaturezaTituloSaveService = withClientErrorHandler(executeGNaturezaTituloSaveService);