diff --git a/src/app/(protected)/servicos/balcao/detalhes/[servicoPedidoId]/page.tsx b/src/app/(protected)/servicos/certidoes/detalhes/[servicoPedidoId]/page.tsx similarity index 100% rename from src/app/(protected)/servicos/balcao/detalhes/[servicoPedidoId]/page.tsx rename to src/app/(protected)/servicos/certidoes/detalhes/[servicoPedidoId]/page.tsx diff --git a/src/app/(protected)/servicos/balcao/page.tsx b/src/app/(protected)/servicos/certidoes/page.tsx similarity index 100% rename from src/app/(protected)/servicos/balcao/page.tsx rename to src/app/(protected)/servicos/certidoes/page.tsx diff --git a/src/app/(protected)/servicos/balcao/pedido/[servicoPedidoId]/page.tsx b/src/app/(protected)/servicos/certidoes/pedido/[servicoPedidoId]/page.tsx similarity index 100% rename from src/app/(protected)/servicos/balcao/pedido/[servicoPedidoId]/page.tsx rename to src/app/(protected)/servicos/certidoes/pedido/[servicoPedidoId]/page.tsx diff --git a/src/app/(protected)/servicos/balcao/pedido/page.tsx b/src/app/(protected)/servicos/certidoes/pedido/page.tsx similarity index 100% rename from src/app/(protected)/servicos/balcao/pedido/page.tsx rename to src/app/(protected)/servicos/certidoes/pedido/page.tsx diff --git a/src/app/(protected)/servicos/pedidos/detalhes/[servicoPedidoId]/page.tsx b/src/app/(protected)/servicos/pedidos/detalhes/[servicoPedidoId]/page.tsx new file mode 100644 index 0000000..19def5f --- /dev/null +++ b/src/app/(protected)/servicos/pedidos/detalhes/[servicoPedidoId]/page.tsx @@ -0,0 +1,11 @@ +'use client'; + +import { useParams } from 'next/navigation'; + +import TServicoPedidoDetails from '@/packages/servicos/components/TServicoPedido/TServicoPedidoDetails'; + +export default function TServicoPedidoDetailsPage() { + const params = useParams(); + + return ; +} diff --git a/src/app/(protected)/servicos/pedidos/page.tsx b/src/app/(protected)/servicos/pedidos/page.tsx new file mode 100644 index 0000000..a1e7645 --- /dev/null +++ b/src/app/(protected)/servicos/pedidos/page.tsx @@ -0,0 +1,5 @@ +import TServicoPedidoIndex from '@/packages/servicos/components/TServicoPedido/TServicoPedidoIndex'; + +export default function TServicoPedidoPage() { + return ; +} diff --git a/src/app/(protected)/servicos/pedidos/pedido/[servicoPedidoId]/page.tsx b/src/app/(protected)/servicos/pedidos/pedido/[servicoPedidoId]/page.tsx new file mode 100644 index 0000000..ad4c574 --- /dev/null +++ b/src/app/(protected)/servicos/pedidos/pedido/[servicoPedidoId]/page.tsx @@ -0,0 +1,11 @@ +'use client'; + +import { useParams } from 'next/navigation'; + +import TServicoPedidoForm from '@/packages/servicos/components/TServicoPedido/TServicoPedidoForm'; + +export default function TServicoPedidoPage() { + const params = useParams(); + + return ; +} diff --git a/src/app/(protected)/servicos/pedidos/pedido/page.tsx b/src/app/(protected)/servicos/pedidos/pedido/page.tsx new file mode 100644 index 0000000..8b9e22b --- /dev/null +++ b/src/app/(protected)/servicos/pedidos/pedido/page.tsx @@ -0,0 +1,5 @@ +import TServicoPedidoForm from '@/packages/servicos/components/TServicoPedido/TServicoPedidoForm'; + +export default function TServicoPedidoPage() { + return ; +} diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index 67322d9..ae396e8 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -54,8 +54,12 @@ const data = { url: '/servicos/dashboard/', }, { - title: 'Balcão', - url: '/servicos/balcao/', + title: 'Pedidos', + url: '/servicos/pedidos/', + }, + { + title: 'Certidões', + url: '/servicos/certidoes/', }, ], }, diff --git a/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoList.tsx b/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoList.tsx index b273809..3ecc8ab 100644 --- a/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoList.tsx +++ b/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoList.tsx @@ -1,7 +1,12 @@ 'use client'; -import { BookmarkX, IdCardIcon, MoreHorizontalIcon, RotateCcwIcon, TicketIcon } from 'lucide-react'; -import { useCallback, useEffect, useState } from 'react'; +import { + BookmarkX, + IdCardIcon, + MoreHorizontalIcon, + RotateCcwIcon, + TicketIcon, +} from 'lucide-react'; import { Button } from '@/components/ui/button'; import { ButtonGroup } from '@/components/ui/button-group'; @@ -14,84 +19,36 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; -import { useTServicoItemPedidoAtivarHook } from '@/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoAtivarHook'; -import { useTServicoItemPedidoCancelarHook } from '@/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoCancelarHook'; -import TServicoItemPedidoInterface from '@/packages/servicos/interfaces/TServicoItemPedido/TServicoItemPedidoIntefarce'; +import { useTServicoItemPedidoListControllerHook } from '@/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoListControllerHook'; import TServicoItemPedidoListInterface from '@/packages/servicos/interfaces/TServicoItemPedido/TServicoItemPedidoListInterface'; import FormatMoney from '@/shared/actions/money/FormatMoney'; -import { useResponse } from '@/shared/components/response/ResponseContext'; import { ServicosPedidosSituacoesBadge } from '@/shared/components/servicosPedidosSituacoes/ServicosPedidosSituacoesBadge'; +import { ServicosPedidosSituacoesEnum } from '@/shared/enums/ServicosPedidosSituacoesEnum'; -export default function TServicoItemPedidoList({ - items, - openConfirmDialog, -}: TServicoItemPedidoListInterface) { +export default function TServicoItemPedidoList({ items, openConfirmDialog }: TServicoItemPedidoListInterface) { - const { setResponse } = useResponse(); - const { cancelarTServicoItemPedido } = useTServicoItemPedidoCancelarHook(); - const { ativarTServicoItemPedido } = useTServicoItemPedidoAtivarHook(); - - const [localItems, setLocalItems] = useState(items || []); - - useEffect(() => { - setLocalItems(items || []); - }, [items]); - - const handleSituacaoTServicoItemPedido = useCallback( - - async (item: TServicoItemPedidoInterface) => { - const servicoItemPedido: TServicoItemPedidoInterface = { - servico_itempedido_id: item.servico_itempedido_id, - }; - - let response: any = null; - - switch (item.situacao) { - case 'C': - response = await ativarTServicoItemPedido(servicoItemPedido); - break; - - case 'F': - response = await cancelarTServicoItemPedido(servicoItemPedido); - break; - - default: - setResponse({ - status: 422, - error: 'Situação', - detail: 'Situação não tratada', - }); - break; - } - - if (response) { - const situacao = (response as any)?.situacao; - setLocalItems((prev) => - prev.map((i) => - i.servico_itempedido_id === item.servico_itempedido_id ? { ...i, situacao } : i, - ), - ); - } - }, - [ativarTServicoItemPedido, cancelarTServicoItemPedido, setResponse], - ); + const { localItems, handleSituacaoTServicoItemPedido } = useTServicoItemPedidoListControllerHook(items); return ( + - Itens: {localItems?.length} + + Itens: {localItems.length} + + - {/* Altura máxima + scroll vertical */}
- {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 + - @@ -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