From 461bf3b413eaed2661fdf608441255981950733a Mon Sep 17 00:00:00 2001 From: Eduarda-SS <137419071+Eduarda-SS@users.noreply.github.com> Date: Wed, 26 Nov 2025 17:55:47 -0300 Subject: [PATCH] =?UTF-8?q?Ajuste=20das=20exce=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/sidebar-items-medico.json | 5 - src/pages/medico/CadastroAgendamento.jsx | 12 +- .../medico/ExcecoesDisponibilidadeMedico.jsx | 229 +++++++++++------- .../secretaria/ExcecoesDisponibilidade.jsx | 22 +- src/pages/secretaria/ListaAgendamentos.jsx | 4 +- 5 files changed, 171 insertions(+), 101 deletions(-) diff --git a/src/data/sidebar-items-medico.json b/src/data/sidebar-items-medico.json index 97c43dc..c008eeb 100644 --- a/src/data/sidebar-items-medico.json +++ b/src/data/sidebar-items-medico.json @@ -4,11 +4,6 @@ "icon": "calendar", "url": "/medico/agendamento" }, - { - "name": "Exceções de Disponibilidade", - "icon": "calendar-x-fill", - "url": "/medico/excecoes-disponibilidade" - }, { "name": "Relatórios", diff --git a/src/pages/medico/CadastroAgendamento.jsx b/src/pages/medico/CadastroAgendamento.jsx index ca729db..66467b3 100644 --- a/src/pages/medico/CadastroAgendamento.jsx +++ b/src/pages/medico/CadastroAgendamento.jsx @@ -377,8 +377,16 @@ const DeleteModal = () => ( > Adicionar Consulta - - + + {!PageNovaConsulta ? (
diff --git a/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx b/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx index 0d0dbc0..a0ba298 100644 --- a/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx +++ b/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx @@ -2,6 +2,10 @@ import { useState, useEffect, useMemo, useCallback } from 'react'; import { useAuth } from '../../_assets/utils/AuthProvider' import FormExcecaoDisponibilidade from '../../components/medico/FormExcecaoDisponibilidade'; +import '../../_assets/css/components/agendamento/FormAgendamento.css'; +import '../../_assets/css/pages/agendamento/Agendamento.css'; +import '../../_assets/css/pages/agendamento/FilaEspera.css'; + import dayjs from 'dayjs'; import weekday from 'dayjs/plugin/weekday'; import 'dayjs/locale/pt-br'; @@ -19,9 +23,12 @@ const getDateRange = (date, view) => { toDate = base.endOf('day').format('YYYY-MM-DD'); titleRange = base.format('DD/MM/YYYY'); } else if (view === 'semanal') { - fromDate = base.startOf('week').format('YYYY-MM-DD'); - toDate = base.endOf('week').format('YYYY-MM-DD'); - titleRange = `${base.startOf('week').format('DD/MM')} - ${base.endOf('week').format('DD/MM')}`; + let weekStart = base.startOf('week'); + if (weekStart.day() !== 1) weekStart = base.weekday(1); + const weekEnd = weekStart.add(6, 'day'); + fromDate = weekStart.format('YYYY-MM-DD'); + toDate = weekEnd.format('YYYY-MM-DD'); + titleRange = `Semana de ${weekStart.format('DD/MM')} a ${weekEnd.format('DD/MM')}`; } else { // mensal fromDate = base.startOf('month').format('YYYY-MM-DD'); toDate = base.endOf('month').format('YYYY-MM-DD'); @@ -40,7 +47,7 @@ const ExcecoesDisponibilidadeDoctor = () => { const [erro, setErro] = useState(''); const [buscaTexto, setBuscaTexto] = useState(''); - const doctorID = user?.doctor_id || user?.id; // ajuste conforme estrutura real + const doctorID = user?.doctor_id || user?.id || ''; const { fromDate, toDate, titleRange } = useMemo( () => getDateRange(dataFiltro, visualizacao), @@ -52,7 +59,6 @@ const ExcecoesDisponibilidadeDoctor = () => { setLoading(true); setErro(''); try { - // trata getAuthorizationHeader() que pode retornar objeto ou string const maybeAuth = getAuthorizationHeader(); const headers = {}; if (typeof maybeAuth === 'string') { @@ -130,118 +136,161 @@ const ExcecoesDisponibilidadeDoctor = () => { setDataFiltro(nova.format('YYYY-MM-DD')); }; + const handleCancelForm = (recarregar = false) => { + setMostrarForm(false); + if (recarregar) fetchExcecoes(); + }; + if (mostrarForm) { return ( -
-

Nova Exceção

- { - setMostrarForm(false); - if (reload) fetchExcecoes(); - }} - /> +
+
+

Gerenciar Exceções de Disponibilidade

+
+
+ handleCancelForm(reload)} + /> +
); } return ( -
-
-

Exceções de Disponibilidade

-
-
-
+
+
+
+ + +
+
+ + setDataFiltro(e.target.value)} + /> +
+
+ +
-
- - {titleRange} - -
+
+
+
+

Exceções em {titleRange} ({excecoes.length})

- setDataFiltro(e.target.value)} - style={{ maxWidth: 160 }} - /> +
+ + {titleRange} + +
+
- setBuscaTexto(e.target.value)} - style={{ flex: 1, minWidth: 180 }} - /> +
+ setBuscaTexto(e.target.value)} + style={{ flex: 1, minWidth: 180 }} + /> +
+ + {erro &&
{erro}
} + {loading ? ( +

Carregando exceções...

+ ) : excecoesFiltradas.length === 0 ? ( +

Nenhuma exceção encontrada para os filtros aplicados.

+ ) : ( + + + + + + + + + + + + + + {excecoesFiltradas.map((ex) => ( + + + + + + + + + + ))} + +
Médico (Nome)DataInícioTérminoTipoMotivoAções

{ex.doctor_name || ex.doctor_id || doctorID}

{ex.date ? dayjs(ex.date).format('DD/MM/YYYY') : '-'}{ex.start_time ? (dayjs(ex.start_time, 'HH:mm:ss').isValid() ? dayjs(ex.start_time, 'HH:mm:ss').format('HH:mm') : ex.start_time) : (ex.inicio || '-')}{ex.end_time ? (dayjs(ex.end_time, 'HH:mm:ss').isValid() ? dayjs(ex.end_time, 'HH:mm:ss').format('HH:mm') : ex.end_time) : (ex.termino || '-')}{ex.kind || ex.tipoAtendimento || '-'}

{ex.reason || ex.motivo || '-'}

+
+ + + +
+
+ )} +
+
- - {erro &&
{erro}
} - {loading &&
Carregando...
} - - {!loading && excecoesFiltradas.length === 0 && ( -
Nenhuma exceção neste intervalo.
- )} - - {!loading && excecoesFiltradas.length > 0 && ( -
- - - - - - - - - - - - - {excecoesFiltradas.map(ex => ( - - - - - - - - - ))} - -
DataInícioTérminoTipoMotivo
{ex.date ? dayjs(ex.date).format('DD/MM/YYYY') : '-'}{ex.start_time || ex.inicio || '-'}{ex.end_time || ex.termino || '-'}{ex.kind || ex.tipoAtendimento || '-'}{ex.reason || ex.motivo || '-'} - -
-
- )}
); }; diff --git a/src/pages/secretaria/ExcecoesDisponibilidade.jsx b/src/pages/secretaria/ExcecoesDisponibilidade.jsx index 49e1649..9d50771 100644 --- a/src/pages/secretaria/ExcecoesDisponibilidade.jsx +++ b/src/pages/secretaria/ExcecoesDisponibilidade.jsx @@ -199,7 +199,17 @@ const ExcecoesDisponibilidade = () => { alert('Erro ao excluir exceção.'); } } - + + // navegação de datas (adicionada, mesma lógica da versão do médico) + const mudarData = (delta) => { + const base = dayjs(filtroData); + let nova; + if (visualizacao === 'diario') nova = base.add(delta, 'day'); + else if (visualizacao === 'semanal') nova = base.add(delta, 'week'); + else nova = base.add(delta, 'month'); + setFiltroData(nova.format('YYYY-MM-DD')); + } + const handleCancelForm = (recarregar = false) => { setPageNovaExcecao(false); if (recarregar) { @@ -273,7 +283,15 @@ const ExcecoesDisponibilidade = () => { {/* Tabela de Exceções (Título usa o titleRange calculado) */}
-

Exceções em {titleRange} ({excecoes.length})

+
+

Exceções em {titleRange} ({excecoes.length})

+ +
+ + {titleRange} + +
+
{loading ? (

Carregando exceções...

) : excecoes.length === 0 ? ( diff --git a/src/pages/secretaria/ListaAgendamentos.jsx b/src/pages/secretaria/ListaAgendamentos.jsx index 09e6941..8915f28 100644 --- a/src/pages/secretaria/ListaAgendamentos.jsx +++ b/src/pages/secretaria/ListaAgendamentos.jsx @@ -408,13 +408,13 @@ const Agendamento = ({ setDictInfo }) => { Adicionar Consulta