From 0b7e863461651c43b85a877ba1b531be7f8cd2cd Mon Sep 17 00:00:00 2001 From: joao_pedro Date: Sun, 2 Nov 2025 14:34:23 -0300 Subject: [PATCH] =?UTF-8?q?acesso=20de=20agendamento=20para=20o=20m=C3=A9d?= =?UTF-8?q?ico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PagesMedico/DoctorAgendamentoManager.jsx | 313 +++++------------- src/PagesPaciente/ConsultasPaciente.jsx | 41 +-- .../AgendarConsulta/CardConsulta.jsx | 6 +- .../AgendarConsulta/FormNovaConsulta.jsx | 4 +- .../AgendarConsulta/TabelaAgendamentoDia.jsx | 1 - src/pages/Agendamento.jsx | 3 +- src/pages/AgendamentoCadastroManager.jsx | 9 +- 7 files changed, 118 insertions(+), 259 deletions(-) diff --git a/src/PagesMedico/DoctorAgendamentoManager.jsx b/src/PagesMedico/DoctorAgendamentoManager.jsx index 518f5c8..ac7f50a 100644 --- a/src/PagesMedico/DoctorAgendamentoManager.jsx +++ b/src/PagesMedico/DoctorAgendamentoManager.jsx @@ -41,6 +41,12 @@ const Agendamento = ({setDictInfo}) => { const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([]) const [searchTermDoctor, setSearchTermDoctor] = useState(''); + const [coresConsultas, setCoresConsultas] = useState([]) + + const [listaConsultasID, setListaConsultaID] = useState([]) + + const [motivoCancelamento, setMotivoCancelamento] = useState("") + let authHeader = getAuthorizationHeader() @@ -51,14 +57,14 @@ const Agendamento = ({setDictInfo}) => { let paciente = await GetPatientByID(patient_id, authHeader); let dicionario = { - agendamento: agendamento, - Infos: { - nome_nedico: medico.full_name, + ...agendamento, + + nome_medico: medico[0].full_name, doctor_id: medico.id, patient_id: paciente[0].id, paciente_nome: paciente[0].full_name, paciente_cpf: paciente[0].cpf - } + }; return dicionario; }; @@ -69,17 +75,19 @@ const Agendamento = ({setDictInfo}) => { // 1. Agrupamento (igual ao seu código original) for (const agendamento of listaTodosAgendamentos) { if (agendamento.status === 'requested') { - // Recomenda-se usar Promise.all para melhorar a performance - // mas, para manter a estrutura, mantemos o await no loop. + let v = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento); ListaFilaDeEspera.push(v); } else { - const DiaAgendamento = agendamento.scheduled_at.split("T")[0]; + + const DiaAgendamento = agendamento.scheduled_at?.split("T")[0]; + + let novoAgendamento = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento); if (DiaAgendamento in DictAgendamentosOrganizados) { - DictAgendamentosOrganizados[DiaAgendamento].push(agendamento); + DictAgendamentosOrganizados[DiaAgendamento].push(novoAgendamento); } else { - DictAgendamentosOrganizados[DiaAgendamento] = [agendamento]; + DictAgendamentosOrganizados[DiaAgendamento] = [novoAgendamento]; } } } @@ -129,84 +137,41 @@ const Agendamento = ({setDictInfo}) => { redirect: 'follow' }; - fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?select&doctor_id&patient_id&status&scheduled_at&order&limit&offset", requestOptions) + fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?doctor_id=eq.${"078d2a67-b4c1-43c8-ae32-c1e75bb5b3df"}`, requestOptions) .then(response => response.json()) - .then(result => {FiltrarAgendamentos(result);}) + .then(result => {FiltrarAgendamentos(result); console.log(result, "RESULTRADO DA API")}) .catch(error => console.log('error', error)); - const PegarTodosOsMedicos = async () => { - let lista = [] - const TodosOsMedicos = await GetAllDoctors(authHeader) - - for(let d = 0; TodosOsMedicos.length > d; d++){ - lista.push({nomeMedico: TodosOsMedicos[d].full_name, idMedico: TodosOsMedicos[d].id })} - setListaDeMedicos(lista) - } - PegarTodosOsMedicos() + }, []) - useEffect(() => { - console.log("mudou FiltredTodosMedicos:", FiltredTodosMedicos); - if (FiltredTodosMedicos.length === 1) { - const unicoMedico = FiltredTodosMedicos[0]; - console.log(unicoMedico) - const idMedicoFiltrado = unicoMedico.idMedico; - console.log(`Médico único encontrado: ${unicoMedico.nomeMedico}. ID: ${idMedicoFiltrado}`); - - const agendamentosDoMedico = filtrarAgendamentosPorMedico( - DictAgendamentosOrganizados, - idMedicoFiltrado - ); - console.log(`Total de agendamentos filtrados para este médico: ${agendamentosDoMedico.length}`); - console.log("Lista completa de Agendamentos do Médico:", agendamentosDoMedico); - FiltrarAgendamentos(agendamentosDoMedico) - - } - }, [FiltredTodosMedicos]); const deleteConsulta = (selectedPatientId) => { - console.log("tentando apagar") - var myHeaders = new Headers(); - myHeaders.append("Authorization", authHeader); - myHeaders.append("apikey", API_KEY) + var myHeaders = new Headers(); + myHeaders.append("Content-Type", "application/json"); + myHeaders.append('apikey', API_KEY) + myHeaders.append("authorization", authHeader) -var requestOptions = { - method: 'DELETE', - redirect: 'follow', - headers: myHeaders -}; -fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions) - .then(response => response.json()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); - + var raw = JSON.stringify({ "status":"cancelled", + "cancellation_reason": motivoCancelamento + }); + + + var requestOptions = { + method: 'PATCH', + headers: myHeaders, + body: raw, + redirect: 'follow' + }; + + fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions) + .then(response => {if(response.status !== 200)(console.log(response))}) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); } - -/** - * Filtra todos os agendamentos em um objeto aninhado (data -> [agendamentos]) - * com base no ID do médico. - * - * @param {Object} dictAgendamentos - O dicionário de agendamentos. - * @param {string} idMedicoFiltrado - O ID do médico (doctor_id) para ser usado como filtro. - * @returns {Array} Um array contendo todos os agendamentos que correspondem ao idMedicoFiltrado. - */ -const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => { - - // O corpo da função deve usar esses nomes de variáveis: - const todasAsListasDeAgendamentos = Object.values(dictAgendamentos); - - const todosOsAgendamentos = todasAsListasDeAgendamentos.flat(); - - const agendamentosFiltrados = todosOsAgendamentos.filter(agendamento => - agendamento.doctor_id === idMedicoFiltrado - ); - - return agendamentosFiltrados; -}; - // Lógica para filtrar os dados da AGENDA (AgendamentosMes) @@ -254,20 +219,6 @@ const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => { else setPageConsulta(true) }; - -const handleSearchMedicos = (term) => { - setSearchTermDoctor(term); - if (term.trim() === '') { - setFiltredTodosMedicos([]); - return; - } - - // Lógica simples de filtragem: - const filtered = ListaDeMedicos.filter(medico => - medico.nomeMedico.toLowerCase().includes(term.toLowerCase()) - ); - setFiltredTodosMedicos(filtered); -}; const handleClickCancel = () => setPageConsulta(false) @@ -289,78 +240,10 @@ const handleSearchMedicos = (term) => {
- -
- -
-
- - handleSearchMedicos(e.target.value)} // Chama a nova função de filtro - /> -
-
- - {/* DROPDOWN (RENDERIZAÇÃO CONDICIONAL) */} - {searchTermDoctor && FiltredTodosMedicos.length > 0 && ( -
- {FiltredTodosMedicos.map((medico) => ( -
{ - // Ação ao selecionar o médico - setSearchTermDoctor(medico.nomeMedico); // Preenche o input - //setFiltredTodosMedicos([]); // Fecha o dropdown - // Lógica adicional, como selecionar o ID do médico... - }} - > -

{medico.nomeMedico}

-
- ))} -
- )} -
- - -
- - -
- -
- - -
- +
- {FiladeEspera === false ? - ( +
@@ -383,74 +266,23 @@ const handleSearchMedicos = (term) => {
- {tabela === "diario" && } - {tabela === 'semanal' && } - {tabela === 'mensal' && } + {tabela === "diario" && } + + + {tabela === 'semanal' && } + + + {tabela === 'mensal' && }
- ) - : - ( -
-
- setSearchTerm(e.target.value)} - /> -

Fila de Espera

-
- - - - - - - - - - - - - {filaEsperaData.map((item, index) => ( - - - - - - - - ))} - -
NomeTelefoneTelefoneEntrou na fila de esperaAções

{item.Infos?.paciente_nome}

{}

{}{}
- - - - - -
-
- ) - } - + + ) : ( @@ -468,12 +300,12 @@ const handleSearchMedicos = (term) => { e.target.classList.contains("modal") && setShowDeleteModal(false) } > -
+
- Confirmação de Exclusão + Confirmação de Cancelamento