diff --git a/src/PagesMedico/DoctorAgendamentoEditPage.jsx b/src/PagesMedico/DoctorAgendamentoEditPage.jsx new file mode 100644 index 00000000..07cebfa4 --- /dev/null +++ b/src/PagesMedico/DoctorAgendamentoEditPage.jsx @@ -0,0 +1,90 @@ +import React, { useState, useEffect } from 'react' + +import FormNovaConsulta from '../components/AgendarConsulta/FormNovaConsulta' +import API_KEY from '../components/utils/apiKeys' +import { useAuth } from '../components/utils/AuthProvider' +import { UserInfos } from '../components/utils/Functions-Endpoints/General' + +const DoctorAgendamentoEditPage = ({DictInfo, setDictInfo}) => { + + const {getAuthorizationHeader} = useAuth(); + + const [consultaToPut, setConsultaToPUT] = useState({}) + const [idUsuario, setIdUsuario] = useState("") + + + const authHeader = getAuthorizationHeader() + + + useEffect(() => { + //console.log(DictInfo.scheduled_at.split("T")[0]) + setDictInfo({...DictInfo, dataAtendimento:DictInfo?.scheduled_at?.split("T")[0]}) + + const fetchUserInfo = async () => { + const InfosUser = await UserInfos(authHeader) + console.log("Informações", InfosUser) + setIdUsuario(InfosUser.id) + } + + fetchUserInfo() + + + + }, []) + + const handleSave = (DictParaPatch) => { + var myHeaders = new Headers(); + myHeaders.append("Content-Type", "application/json"); + myHeaders.append('apikey', API_KEY) + myHeaders.append("authorization", authHeader) + + console.log(DictParaPatch) + + var raw = JSON.stringify({"patient_id": DictParaPatch.patient_id, + "doctor_id": DictParaPatch.doctor_id, + + "duration_minutes": 30, + + "chief_complaint": "Dor de cabeça há 3 ", + + "created_by": idUsuario, + + "scheduled_at": `${DictParaPatch.dataAtendimento}T${DictParaPatch.horarioInicio}:00.000Z`, + + "appointment_type": DictParaPatch.tipo_consulta, + + "patient_notes": "Prefiro horário pela manhã", + "insurance_provider": DictParaPatch.convenio, + "status": DictParaPatch.status, + "created_by": idUsuario + + + }); + + // console.log(DictParaPatch) + //console.log(id) + + var requestOptions = { + method: 'PATCH', + headers: myHeaders, + body: raw, + redirect: 'follow' + }; + + fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${DictInfo.id}`, requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); + } + + + + + return ( +
+ +
+ ) +} + +export default DoctorAgendamentoEditPage \ No newline at end of file diff --git a/src/PagesMedico/DoctorAgendamentoManager.jsx b/src/PagesMedico/DoctorAgendamentoManager.jsx index 518f5c84..efd7e219 100644 --- a/src/PagesMedico/DoctorAgendamentoManager.jsx +++ b/src/PagesMedico/DoctorAgendamentoManager.jsx @@ -13,7 +13,7 @@ import { useAuth } from '../components/utils/AuthProvider.js'; // ✨ NOVO: Caminho de importação corrigido com base na sua estrutura de pastas import AgendamentosMes from '../components/AgendarConsulta/DadosConsultasMock.js'; - +import { UserInfos } from '../components/utils/Functions-Endpoints/General.js'; import dayjs from 'dayjs'; import "../pages/style/Agendamento.css"; import '../pages/style/FilaEspera.css'; @@ -35,11 +35,15 @@ const Agendamento = ({setDictInfo}) => { const [DictAgendamentosOrganizados, setAgendamentosOrganizados ] = useState({}) const [showDeleteModal, setShowDeleteModal] = useState(false) - const [AgendamentoFiltrado, setAgendamentoFiltrado] = useState() - - const [ListaDeMedicos, setListaDeMedicos] = useState([]) - const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([]) - const [searchTermDoctor, setSearchTermDoctor] = useState(''); + const [showConfirmModal, setShowConfirmModal] = useState(false) + + const [coresConsultas, setCoresConsultas] = useState([]) + + const [listaConsultasID, setListaConsultaID] = useState([]) + + const [motivoCancelamento, setMotivoCancelamento] = useState("") + + const [user, setUser] = useState({}) let authHeader = getAuthorizationHeader() @@ -51,14 +55,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 +73,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]; } } } @@ -117,8 +123,23 @@ const Agendamento = ({setDictInfo}) => { setfilaEsperaData(ListaFilaDeEspera); }; +useEffect(() => { + +console.log(user, "usuario") + +}, [user]) + // Requisição inicial para mostrar os agendamentos do banco de dados useEffect(() => { + + async function fetchDadosUser (){ + let dado = await UserInfos(authHeader) + setUser(dado) + } + + fetchDadosUser() + + var myHeaders = new Headers(); myHeaders.append("Authorization", authHeader); myHeaders.append("apikey", API_KEY) @@ -129,84 +150,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) @@ -249,26 +227,30 @@ const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => { return ListaDiasDatas } - const handleClickAgendamento = (agendamento) => { - if (agendamento.status !== 'vazio') return - 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 confirmConsulta = (selectedPatientId) => { + var myHeaders = new Headers(); + myHeaders.append("Content-Type", "application/json"); + myHeaders.append('apikey', API_KEY) + myHeaders.append("authorization", authHeader) + + + var raw = JSON.stringify({ "status":"confirmed" + }); + + + 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)); +} const handleClickCancel = () => setPageConsulta(false) @@ -289,78 +271,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,80 +297,34 @@ 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}

{}

{}{}
- - - - - -
-
- ) - } - + + ) : ( - + )} - {showDeleteModal && ( + + {showConfirmModal &&(
{ } >
+
+ +
+
+ Confirmação de edição +
+ +
+ +
+

+ Tem certeza que deseja retirar o cancelamento ? +

+
+ +
+ + + + + +
+
+
+
)} + + {showDeleteModal && ( +
+ e.target.classList.contains("modal") && setShowDeleteModal(false) + } + > +
- Confirmação de Exclusão + Confirmação de Cancelamento