- {localItems?.map((item) => {
+ {localItems.map((item) => {
+
const isCancelado = item.situacao === 'C';
+
const actionLabel = isCancelado ? 'Ativar Item' : 'Estornar Item';
const confirmTitle = isCancelado ? 'Ativação de Item' : 'Estorno de Item';
- const confirmMessage = isCancelado
- ? `Deseja realmente ativar o item #${item.servico_itempedido_id}?`
- : `Deseja realmente estornar o item #${item.servico_itempedido_id}?`;
+ const confirmMessage = isCancelado ? `Deseja realmente ativar o item #${item.servico_itempedido_id}?` : `Deseja realmente estornar o item #${item.servico_itempedido_id}?`;
const confirmButton = isCancelado ? 'Sim, ativar item' : 'Sim, estornar item';
+
const actionIcon = isCancelado ?
:
;
return (
@@ -102,19 +59,20 @@ export default function TServicoItemPedidoList({
{/* Descrição */}
- {item.descricao} de {item.nome} -{' '}
+ {item.descricao} de {item.nome} –{' '}
-
+
# {item.servico_itempedido_id}
- {/* Valores (grid compacto) */}
+ {/* Valores */}
+
Emolumento
{FormatMoney(item.emolumento)}
@@ -140,33 +98,33 @@ export default function TServicoItemPedidoList({
{FormatMoney(item.valor)}
+ {/* Ações */}
+
-
+
-
-
- Imprimir Etiqueta
-
-
-
-
-
- Imprimir Cartão
+
+ Imprimir Etiqueta
+
+
+ Imprimir Cartão
+
+
openConfirmDialog({
title: confirmTitle,
@@ -174,9 +132,8 @@ export default function TServicoItemPedidoList({
message: confirmMessage,
confirmText: confirmButton,
cancelText: 'Cancelar',
- onConfirm: () => {
- handleSituacaoTServicoItemPedido(item);
- },
+ onConfirm: () =>
+ handleSituacaoTServicoItemPedido(item),
})
}
>
@@ -195,4 +152,4 @@ export default function TServicoItemPedidoList({
);
-}
+}
\ No newline at end of file
diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx
index b03b6d2..b6f3bed 100644
--- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx
+++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx
@@ -117,14 +117,14 @@ export default function TServicoPedidoColumns(
-
+
Detalhes
-
+
Editar
diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx
index 5ac0bae..d04ab2d 100644
--- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx
+++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx
@@ -1,239 +1,116 @@
'use client';
-import { BookmarkX, CalendarIcon, ReceiptText, RotateCcwIcon } from 'lucide-react';
-import { useCallback, useEffect, useState } from 'react';
+import { CalendarIcon, ReceiptText } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Separator } from '@/components/ui/separator';
import TServicoItemPedidoList from '@/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoList';
import TServicoPedidoDetailsPagamento from '@/packages/servicos/components/TServicoPedido/TServicoPedidoDetailsPagamento';
-import { useTServicoItemPedidoIndexHook } from '@/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoIndexHook';
-import { useTServicoPedidoAtivarHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoAtivarHook';
-import { useTServicoPedidoCancelarHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoCancelarHook';
-import { useTServicoPedidoShowHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoShowHook';
+import { useTServicoPedidoDetailsControllerHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsControllerHook';
import TServicoPedidoDetailsInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoDetailsInterface';
-import TServicoPedidoInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoInterface';
import { FormatCPF } from '@/shared/actions/CPF/FormatCPF';
import { FormatDateTime } from '@/shared/actions/dateTime/FormatDateTime';
import GetCapitalize from '@/shared/actions/text/GetCapitalize';
import GetNameInitials from '@/shared/actions/text/GetNameInitials';
import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog';
-import { useResponse } from '@/shared/components/response/ResponseContext';
export default function TServicoPedidoDetails({
servico_pedido_id,
}: TServicoPedidoDetailsInterface) {
-
- const { setResponse } = useResponse();
- const { ativarTServicoPedido } = useTServicoPedidoAtivarHook();
- const { cancelarTServicoPedido } = useTServicoPedidoCancelarHook();
-
- const { TServicoItemPedido, indexTServicoItemPedido } = useTServicoItemPedidoIndexHook();
- const { TServicoPedido, setTServicoPedido, showTServicoPedido } = useTServicoPedidoShowHook();
-
- const handleSituacaoTServicoPedido = useCallback(
- async (pedido: any) => {
- const servicoPedido: TServicoPedidoInterface = {
- servico_pedido_id: pedido.servico_pedido_id,
- };
-
- let response: any = null;
-
- switch (pedido.situacao) {
- case 'C':
- response = await ativarTServicoPedido(servicoPedido);
- break;
-
- case 'F':
- response = await cancelarTServicoPedido(servicoPedido);
- break;
-
- default:
- setResponse({
- status: 422,
- error: 'Situação',
- detail: 'Situação não tratada',
- });
- break;
- }
-
- if (response) {
- pedido.situacao = response.situacao;
-
- setTServicoPedido(pedido);
- }
- },
- [cancelarTServicoPedido],
- );
-
- type ConfirmDialogParams = {
- title: string;
- description: string;
- message: string;
- confirmText?: string;
- cancelText?: string;
- onConfirm?: () => void;
- onCancel?: () => void;
- };
-
- const [confirmDialog, setConfirmDialog] = useState({
- isOpen: false,
- title: '',
- description: '',
- message: '',
- confirmText: 'Confirmar',
- cancelText: 'Cancelar',
- onConfirm: () => { },
- onCancel: () => { },
- });
-
- // Função utilitária para abrir o dialog dinamicamente
- const openConfirmDialog = ({
- title,
- description,
- message,
- confirmText = 'Confirmar',
- cancelText = 'Cancelar',
- onConfirm,
- onCancel,
- }: ConfirmDialogParams) => {
- setConfirmDialog({
- isOpen: true,
- title,
- description,
- message,
- confirmText,
- cancelText,
- onConfirm: () => {
- onConfirm?.();
- setConfirmDialog((prev) => ({ ...prev, isOpen: false }));
- },
- onCancel: () => {
- onCancel?.();
- setConfirmDialog((prev) => ({ ...prev, isOpen: false }));
- },
- });
- };
-
- const TServicoPedidoShowData = useCallback(async () => {
- const servicoPedido: TServicoPedidoInterface = {
- servico_pedido_id: servico_pedido_id,
- };
- const response = await showTServicoPedido(servicoPedido);
- if (response.servico_pedido_id) {
- TServicoPedidoItemIndexData(response.servico_pedido_id);
- }
- }, []);
-
- const TServicoPedidoItemIndexData = useCallback(
- async (servico_pedido_id: number) => {
- await indexTServicoItemPedido({ servico_pedido_id });
- },
- [indexTServicoItemPedido],
- );
-
- useEffect(() => {
- TServicoPedidoShowData();
- }, []);
-
- const isCancelado = String(TServicoPedido?.situacao) === 'C';
- const actionLabel = isCancelado ? 'Ativar Pedido' : 'Estornar Pedido';
- const actionIcon = isCancelado ? : ;
+ const {
+ TServicoPedido,
+ TServicoItemPedido,
+ handleSituacaoTServicoPedido,
+ openConfirmDialog,
+ confirmDialog,
+ actionLabel,
+ } = useTServicoPedidoDetailsControllerHook(servico_pedido_id);
return (
-
Pedido: #{TServicoPedido?.servico_pedido_id}
- {/* Main */}
+
+ Pedido: #{TServicoPedido?.servico_pedido_id}
+
+
- {/* Left column */}
+ {/* Coluna esquerda */}
+
- {/* Right column (sidebar) */}
+
+ {/* Sidebar */}
-
+
- Apresentante
+
+ Apresentante
+
- {/* Header com avatar e link */}
- {/* Foto ou Iniciais */}
-
+
{GetNameInitials(TServicoPedido?.apresentante)}
-
-
+
+
{GetCapitalize(TServicoPedido?.apresentante)}
-
- {FormatCPF(String(TServicoPedido?.cpfcnpj_apresentante))}
+
+ {FormatCPF(
+ String(TServicoPedido?.cpfcnpj_apresentante),
+ )}
+
+
- {FormatDateTime(TServicoPedido?.data_pedido)}
-
-
-
-
-
- Operador
-
-
-
- {/* Foto ou Iniciais */}
-
-
- {GetNameInitials(TServicoPedido?.login)}
-
-
-
-
{GetCapitalize(TServicoPedido?.login)}
-
- {GetCapitalize(TServicoPedido?.funcao)}
-
-
+
+ {FormatDateTime(TServicoPedido?.data_pedido)}
+
+
- Controles
+
+ Controles
+
openConfirmDialog({
title: 'Estorno do pedido',
description: 'Confirmação necessária',
- message: 'Deseja continuar com o estorno ?',
+ message: 'Deseja continuar com o estorno?',
confirmText: 'Sim, continuar',
cancelText: 'Cancelar',
- onConfirm: () => {
- handleSituacaoTServicoPedido(TServicoPedido);
- },
+ onConfirm: () =>
+ handleSituacaoTServicoPedido(TServicoPedido),
})
}
>
- {actionIcon} {actionLabel}
+ {actionLabel}
-
+
+
Imprimir Recibo
@@ -241,7 +118,7 @@ export default function TServicoPedidoDetails({
- {/* Confirma o cancelamento do pedido */}
+
diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx
index c16c316..a49154f 100644
--- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx
+++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx
@@ -116,7 +116,7 @@ export default function TServicoPedidoIndex() {
title={'Pedidos'}
description={'Pedidos de Autenticação/Reconhecimento'}
buttonText={'Novo pedido'}
- href="/servicos/balcao/pedido"
+ href="/servicos/pedidos/pedido"
/>
{/* Tabela de andamentos */}
{
return api.send({
method: Methods.GET,
- endpoint: `servicos/balcao/t_servico_pedido/`,
+ endpoint: `servicos/pedidos/t_servico_pedido/`,
});
}
diff --git a/src/packages/servicos/data/TServicoPedido/TServicoPedidoLoadParamsData.ts b/src/packages/servicos/data/TServicoPedido/TServicoPedidoLoadParamsData.ts
index 84a3f31..f784efd 100644
--- a/src/packages/servicos/data/TServicoPedido/TServicoPedidoLoadParamsData.ts
+++ b/src/packages/servicos/data/TServicoPedido/TServicoPedidoLoadParamsData.ts
@@ -8,7 +8,7 @@ async function executeTServicoPedidoLoadParamsData(): Promise(items || []);
+
+ useEffect(() => {
+ setLocalItems(items || []);
+ }, [items]);
+
+ const handleSituacaoTServicoItemPedido = useCallback(
+
+ async (item: TServicoItemPedidoInterface) => {
+
+ if (!item.servico_itempedido_id) return;
+
+ let response: object;
+
+ switch (item.situacao) {
+ case 'C':
+ response = await ativarTServicoItemPedido({
+ servico_itempedido_id: item.servico_itempedido_id,
+ });
+ break;
+
+ case 'F':
+ response = await cancelarTServicoItemPedido({
+ servico_itempedido_id: item.servico_itempedido_id,
+ });
+ break;
+
+ default:
+ setResponse({
+ status: 422,
+ error: 'Situação',
+ detail: 'Situação não tratada',
+ });
+ return;
+ }
+
+ if (response?.situacao) {
+ setLocalItems((prev) =>
+ prev.map((i) =>
+ i.servico_itempedido_id === item.servico_itempedido_id ? { ...i, situacao: response.situacao } : i,
+ ),
+ );
+ }
+
+ },
+ [ativarTServicoItemPedido, cancelarTServicoItemPedido, setResponse],
+ );
+
+ return {
+ localItems,
+ setLocalItems,
+ handleSituacaoTServicoItemPedido,
+ };
+}
diff --git a/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsControllerHook.ts b/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsControllerHook.ts
index 21dbab9..ccba08a 100644
--- a/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsControllerHook.ts
+++ b/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsControllerHook.ts
@@ -1,37 +1,175 @@
'use client';
-import * as React from 'react';
+import type { LucideIcon } from 'lucide-react';
+import { BookmarkX, RotateCcwIcon } from 'lucide-react';
+import { useCallback, useEffect, useState } from 'react';
-import TServicoPedidoDetailsPagamentoInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoDetailsPagamentoInterface';
+import { useTServicoItemPedidoIndexHook } from '@/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoIndexHook';
+import { useTServicoPedidoAtivarHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoAtivarHook';
+import { useTServicoPedidoCancelarHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoCancelarHook';
+import { useTServicoPedidoShowHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoShowHook';
+import TServicoPedidoInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoInterface';
+import { useResponse } from '@/shared/components/response/ResponseContext';
-export const useTServicoPedidoDetailsPagamentoController = (
- items: TServicoPedidoDetailsPagamentoInterface['items']
-) => {
+type ConfirmDialogParams = {
+ title: string;
+ description: string;
+ message: string;
+ confirmText?: string;
+ cancelText?: string;
+ onConfirm?: () => void;
+ onCancel?: () => void;
+};
- // Somas por tipo de valor
- const { emolumento, taxa_judiciaria, valor_iss, fundesp } = React.useMemo(() => {
- return (items ?? []).reduce(
- (acc, item) => {
- if (item.situacao === 'F') {
- acc.emolumento += item.emolumento;
- acc.taxa_judiciaria += item.taxa_judiciaria;
- acc.valor_iss += item.valor_iss;
- acc.fundesp += item.fundesp;
- }
- return acc;
- },
- { emolumento: 0, taxa_judiciaria: 0, valor_iss: 0, fundesp: 0 },
- );
- }, [items]);
+export function useTServicoPedidoDetailsControllerHook(
+ servico_pedido_id: number,
+) {
+ const { setResponse } = useResponse();
- // Total exibido = soma dos quatro componentes
- const total = emolumento + taxa_judiciaria + valor_iss + fundesp;
+ const { ativarTServicoPedido } = useTServicoPedidoAtivarHook();
+ const { cancelarTServicoPedido } = useTServicoPedidoCancelarHook();
+ const {
+ showTServicoPedido,
+ TServicoPedido,
+ setTServicoPedido,
+ } = useTServicoPedidoShowHook();
+ const { indexTServicoItemPedido, TServicoItemPedido } =
+ useTServicoItemPedidoIndexHook();
+
+ const [confirmDialog, setConfirmDialog] = useState({
+ isOpen: false,
+ title: '',
+ description: '',
+ message: '',
+ confirmText: 'Confirmar',
+ cancelText: 'Cancelar',
+ onConfirm: () => { },
+ onCancel: () => { },
+ });
+
+ useEffect(() => {
+ let mounted = true;
+
+ const loadPedido = async () => {
+ const response = await showTServicoPedido({ servico_pedido_id });
+
+ if (!mounted) return;
+
+ if (response?.servico_pedido_id) {
+ await indexTServicoItemPedido({
+ servico_pedido_id: response.servico_pedido_id,
+ });
+ }
+ };
+
+ if (servico_pedido_id) {
+ loadPedido();
+ }
+
+ return () => {
+ mounted = false;
+ };
+ }, [servico_pedido_id]);
+
+ const openConfirmDialog = useCallback(
+ ({
+ title,
+ description,
+ message,
+ confirmText = 'Confirmar',
+ cancelText = 'Cancelar',
+ onConfirm,
+ onCancel,
+ }: ConfirmDialogParams) => {
+ setConfirmDialog({
+ isOpen: true,
+ title,
+ description,
+ message,
+ confirmText,
+ cancelText,
+ onConfirm: () => {
+ onConfirm?.();
+ setConfirmDialog((prev) => ({ ...prev, isOpen: false }));
+ },
+ onCancel: () => {
+ onCancel?.();
+ setConfirmDialog((prev) => ({ ...prev, isOpen: false }));
+ },
+ });
+ },
+ [],
+ );
+
+ /**
+ * ==========================
+ * AÇÕES DE SITUAÇÃO
+ * ==========================
+ */
+ const handleSituacaoTServicoPedido = useCallback(
+ async (pedido?: TServicoPedidoInterface) => {
+ if (!pedido?.servico_pedido_id) return;
+
+ let response: any = null;
+
+ switch (pedido.situacao) {
+ case 'C':
+ response = await ativarTServicoPedido({
+ servico_pedido_id: pedido.servico_pedido_id,
+ });
+ break;
+
+ case 'F':
+ response = await cancelarTServicoPedido({
+ servico_pedido_id: pedido.servico_pedido_id,
+ });
+ break;
+
+ default:
+ setResponse({
+ status: 422,
+ error: 'Situação',
+ detail: 'Situação não tratada',
+ });
+ return;
+ }
+
+ if (response?.situacao) {
+ setTServicoPedido({
+ ...pedido,
+ situacao: response.situacao,
+ });
+ }
+ },
+ [
+ ativarTServicoPedido,
+ cancelarTServicoPedido,
+ setResponse,
+ setTServicoPedido,
+ ],
+ );
+
+ const isCancelado = String(TServicoPedido?.situacao) === 'C';
+ const actionLabel = isCancelado ? 'Ativar Pedido' : 'Estornar Pedido';
+ const actionIcon: LucideIcon = isCancelado
+ ? RotateCcwIcon
+ : BookmarkX;
return {
- emolumento,
- taxa_judiciaria,
- valor_iss,
- fundesp,
- total,
+ // dados
+ TServicoPedido,
+ TServicoItemPedido,
+
+ // ações
+ handleSituacaoTServicoPedido,
+ openConfirmDialog,
+
+ // dialog
+ confirmDialog,
+
+ // ui
+ isCancelado,
+ actionLabel,
+ actionIcon,
};
-};
+}
diff --git a/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsPagamentoControllerHook.ts b/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsPagamentoControllerHook.ts
new file mode 100644
index 0000000..0ece4a8
--- /dev/null
+++ b/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoDetailsPagamentoControllerHook.ts
@@ -0,0 +1,37 @@
+'use client';
+
+import * as React from 'react';
+
+import TServicoPedidoDetailsPagamentoInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoDetailsPagamentoInterface';
+
+export const useTServicoPedidoDetailsPagamentoControllerHook = (
+ items: TServicoPedidoDetailsPagamentoInterface['items']
+) => {
+
+ // Somas por tipo de valor
+ const { emolumento, taxa_judiciaria, valor_iss, fundesp } = React.useMemo(() => {
+ return (items ?? []).reduce(
+ (acc, item) => {
+ if (item.situacao === 'F') {
+ acc.emolumento += item.emolumento;
+ acc.taxa_judiciaria += item.taxa_judiciaria;
+ acc.valor_iss += item.valor_iss;
+ acc.fundesp += item.fundesp;
+ }
+ return acc;
+ },
+ { emolumento: 0, taxa_judiciaria: 0, valor_iss: 0, fundesp: 0 },
+ );
+ }, [items]);
+
+ // Total exibido = soma dos quatro componentes
+ const total = emolumento + taxa_judiciaria + valor_iss + fundesp;
+
+ return {
+ emolumento,
+ taxa_judiciaria,
+ valor_iss,
+ fundesp,
+ total,
+ };
+};
diff --git a/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoFormControllerHook.ts b/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoFormControllerHook.ts
index 2fb3333..2d565d5 100644
--- a/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoFormControllerHook.ts
+++ b/src/packages/servicos/hooks/TServicoPedido/useTServicoPedidoFormControllerHook.ts
@@ -84,7 +84,7 @@ export default function useTServicoPedidoFormControllerHook(servico_pedido_id?:
// Verifica se devo redirecionar a pagina
if (response?.servico_pedido_id > 0 && !shouldKeepFormOpen) {
- router.replace(`/servicos/balcao/detalhes/${response.servico_pedido_id}`);
+ router.replace(`/servicos/pedidos/detalhes/${response.servico_pedido_id}`);
}
},
[saveTServicoPedido, shouldKeepFormOpen],
@@ -147,7 +147,7 @@ export default function useTServicoPedidoFormControllerHook(servico_pedido_id?:
// Controle de redirecionamento
const handleConfirmCancel = useCallback(async () => {
// Redireciona o usuário
- router.replace(`/servicos/balcao/`);
+ router.replace(`/servicos/pedidos/`);
}, []);
// Controle do formulário de cancelamento do Pedido