Exemplo n.º 1
0
 /**
  * guardar consulta
  * @param Request $request
  * @param ConsultasRepositorioInterface $consultasRepositorio
  * @param CitasRepositorioInterface $citasRepositorio
  * @param PlanTratamientoRepositorioInterface $planRepositorio
  * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  */
 public function guardar(Request $request, ConsultasRepositorioInterface $consultasRepositorio, CitasRepositorioInterface $citasRepositorio, PlanTratamientoRepositorioInterface $planRepositorio)
 {
     // variable de respuesta
     $respuesta = '';
     // parámetros de consulta
     $idPaciente = (int) base64_decode($request->get('idPaciente'));
     $userMedico = base64_decode($request->get('userMedico'));
     $idCita = (int) base64_decode($request->get('idCita'));
     $generoPlan = $request->get('generoPlan') === '0' ? false : true;
     $tipoAnestesia = !is_null($request->get('tipoCostoConsulta')) ? true : false;
     $padecimientoActual = $request->get('txtPadecimiento');
     $interrogatorioAparatosSistemas = $request->get('txtInterrogatorio');
     $peso = $request->get('txtPeso');
     $talla = $request->get('txtTalla');
     $pulso = $request->get('txtPulso');
     $temperatura = $request->get('txtTemperatura');
     $tensionArterial = $request->get('txtTension');
     $notaMedica = $request->get('txtNota');
     $comportamientoFrankl = $request->get('comportamientoFrankl');
     $costoConsulta = $request->get('costoAsignadoConsulta');
     $exploracion = new ExploracionFisica($peso, $talla, $pulso, $temperatura, $tensionArterial);
     $comportamiento = new ComportamientoFrankl($comportamientoFrankl);
     $consulta = new Consulta(0, $padecimientoActual, $interrogatorioAparatosSistemas, $exploracion, $notaMedica, $comportamiento, $costoConsulta);
     // expediente
     $medico = $this->usuariosRepositorio->obtenerUsuarioPorUsername($userMedico);
     $pacientesRepositorio = PacientesRepositorioFactory::crear($medico);
     $paciente = $pacientesRepositorio->obtenerPacientePorId($idPaciente);
     $expediente = $this->expedientesRepositorio->obtenerExpedientePorPacienteMedico($paciente, $medico);
     // cambiar el estatus de la cita a atendida
     $cita = $citasRepositorio->obtenerCitaPorId($idCita);
     $cita->setEstatus(new CitaEstatus(4));
     if (!$citasRepositorio->actualizaEstatus($cita)) {
         return response(0);
     }
     // verificar los elementos generados durante la consulta (odontograma, plan) y agregarlos al expediente del paciente x
     if (is_null($expediente->obtenerPlanActivo())) {
         if ($generoPlan) {
             $consultasElementosServicio = new ConsultasElementosServicio($this->expedientesRepositorio);
             if (!$consultasElementosServicio->verificarElementosCreadosEnConsulta($request, $expediente)) {
                 return response(0);
             }
         }
     }
     // verificar si hay interconsulta
     if ($request->session()->has('interconsulta')) {
         $interconsulta = $request->session()->get('interconsulta');
         $expediente->agregarInterconsulta($interconsulta);
         $this->expedientesRepositorio->guardarInterconsulta($expediente);
     }
     // verificar si hay receta
     if ($request->session()->has('receta')) {
         $receta = $request->session()->get('receta');
         $consulta->setReceta($receta);
     }
     // verificar si es primera vez o subsecuente el expediente para completar la información
     if ($expediente->primeraVez()) {
         $pacientesRepositorio = PacientesRepositorioFactory::crear($expediente->getMedico());
         $pacientesComplemento = PacientesComplementoFactory::crear($expediente->getMedico(), $pacientesRepositorio);
         if (!$pacientesComplemento->crearDeHttp($request, $expediente->getPaciente())) {
             return response(0);
         }
     }
     $consulta->setExpediente($expediente);
     // persistir consulta
     if (!$consultasRepositorio->persistir($consulta)) {
         return response(0);
     }
     if ($tipoAnestesia === true) {
         if (!is_null($plan = $expediente->obtenerPlanActivo())) {
             $plan->atender();
             if (!$planRepositorio->actualizarAtencionTratamiento($plan)) {
                 return response(0);
             }
         }
     }
     // dientes atendidos - plan atendido
     if (!is_null($request->get('dienteAtendido'))) {
         $plan = $expediente->obtenerPlanActivo();
         foreach ($request->get('dienteAtendido') as $dienteNumero) {
             $plan->diente((int) $dienteNumero)->atenderTratamientos();
         }
         if (!$planRepositorio->actualizarAtencionTratamiento($plan)) {
             return response(0);
         }
     }
     // devolver elementos
     $respuesta['respuesta'] = 1;
     // id Plan
     $respuesta['expediente'] = $expediente->getId();
     return response()->json($respuesta);
 }
 /**
  * @param Consulta $consulta
  * @return bool
  */
 public function persistir(Consulta $consulta)
 {
     try {
         if ($consulta->nuevaOSubsecuente() === 'Nueva') {
             $idConsulta = DB::table('consulta')->insertGetId(['Fecha' => date('Y-m-d H:m:i'), 'idExpediente' => $consulta->getExpediente()->getId(), 'idComportamientoFrankl' => $consulta->getComportamientoFrankl()->getId(), 'PadecimientoActual' => $consulta->getPadecimientoActual(), 'Interrogatorio' => $consulta->getInterrogatorioAparatosSistemas(), 'Nota' => $consulta->getNotaMedica(), 'Peso' => $consulta->getExploracionFisica()->getPeso(), 'Talla' => $consulta->getExploracionFisica()->getTalla(), 'Pulso' => $consulta->getExploracionFisica()->getPulso(), 'Temperatura' => $consulta->getExploracionFisica()->getTemperatura(), 'TensionArterial' => $consulta->getExploracionFisica()->getTensionArterial(), 'Costo' => $consulta->getCosto(), 'FechaModificacion' => date('Y-m-d H:m:i')]);
             $consulta->setId($idConsulta);
             // persistir la receta si tiene
             if ($consulta->tieneReceta()) {
                 $operacion = DB::table('consulta')->where('idConsulta', $consulta->getId())->update(['idReceta' => $consulta->getReceta()->getId()]);
             }
         } elseif ($consulta->nuevaOSubsecuente() === 'Existente') {
         }
         return true;
     } catch (\PDOException $e) {
         echo $e->getMessage();
         return false;
     }
 }
 /**
  * @param  int		  $idExpediente
  * @return Expediente
  */
 public function obtenerExpedientePorId($idExpediente)
 {
     try {
         $expedientes = DB::table('expediente')->where('expediente.idExpediente', $idExpediente)->first();
         $totalExpedientes = count($expedientes);
         if ($totalExpedientes > 0) {
             $expediente = new Expediente($expedientes->idExpediente);
             $expediente->setPrimeraVez($expedientes->PrimeraVez);
             $expediente->setFirma($expedientes->Firma);
             // buscar las interconsultas del expediente
             $interconsultas = DB::table('interconsulta')->join('medico_referencia', 'medico_referencia.idMedicoReferencia', '=', 'interconsulta.idMedicoReferencia')->join('especialidad', 'especialidad.idEspecialidad', '=', 'medico_referencia.idEspecialidad')->where('interconsulta.idExpediente', $expediente->getId())->orderBy('interconsulta.idInterconsulta', 'desc')->limit(50)->get();
             if (count($interconsultas) > 0) {
                 foreach ($interconsultas as $interconsultas) {
                     $interconsulta = new Interconsulta($interconsultas->idInterconsulta, new MedicoReferencia($interconsultas->idMedicoReferencia, $interconsultas->Direccion, new Especialidad($interconsultas->idEspecialidad, $interconsultas->Especialidad)), $interconsultas->Referencia);
                     $interconsulta->getMedico()->setNombre($interconsultas->Nombre);
                     $interconsulta->getMedico()->setPaterno($interconsultas->Paterno);
                     $interconsulta->getMedico()->setMaterno($interconsultas->Materno);
                     $expediente->agregarInterconsulta($interconsulta);
                 }
             }
             //===============================================================================
             // buscar las consultas del expediente
             $consultas = DB::table('consulta')->join('comportamiento_frankl', 'consulta.idComportamientoFrankl', '=', 'comportamiento_frankl.idComportamientoFrankl')->leftJoin('receta', 'receta.idReceta', '=', 'consulta.idReceta')->where('consulta.idExpediente', $expediente->getId())->orderBy('consulta.idConsulta', 'desc')->limit(50)->get();
             if (count($consultas) > 0) {
                 foreach ($consultas as $consultas) {
                     $consulta = new Consulta($consultas->idConsulta, $consultas->PadecimientoActual, $consultas->Interrogatorio, new ExploracionFisica($consultas->Peso, $consultas->Talla, $consultas->Pulso, $consultas->Temperatura, $consultas->TensionArterial), $consultas->Nota, new ComportamientoFrankl($consultas->idComportamientoFrankl), $consultas->Costo, $consultas->Fecha);
                     $consulta->setReceta(new Receta($consultas->idReceta, $consultas->Receta));
                     $expediente->agregarConsulta($consulta);
                 }
             }
             //===============================================================================
             // buscar los planes de tratamiento
             $planes = DB::table('plan_tratamiento')->where('idExpediente', $expediente->getId())->orderBy('idPlanTratamiento', 'desc')->limit(50)->get();
             if (count($planes) > 0) {
                 // buscar la lista de dientes
                 $dientes = DB::table('diente')->orderBy('Numero')->get();
                 foreach ($planes as $planes) {
                     $plan = new PlanTratamiento(!$planes->Activo);
                     $listaDientes = new Collection();
                     $plan->setId($planes->idPlanTratamiento);
                     foreach ($dientes as $dientes) {
                         $dienteActual = new Diente($dientes->Numero);
                         // padecimientos dentales
                         $dientesPadecimientos = DB::table('diente_diente_padecimiento')->join('diente_padecimiento', 'diente_padecimiento.idDientePadecimiento', '=', 'diente_diente_padecimiento.idDientePadecimiento')->where('diente_diente_padecimiento.idPlanTratamiento', $planes->idPlanTratamiento)->where('diente_diente_padecimiento.Numero', $dientes->Numero)->get();
                         foreach ($dientesPadecimientos as $dientesPadecimientos) {
                             $padecimiento = new DientePadecimiento($dientesPadecimientos->idDientePadecimiento, $dientesPadecimientos->DientePadecimiento, $dientesPadecimientos->RutaImagen);
                             $dienteActual->agregarPadecimiento($padecimiento);
                         }
                         //===============================================================================
                         // tratamientos dentales
                         $dientesTratamientos = DB::table('diente_diente_tratamiento')->leftJoin('diente_tratamiento', 'diente_tratamiento.idDienteTratamiento', '=', 'diente_diente_tratamiento.idDienteTratamiento')->where('diente_diente_tratamiento.idPlanTratamiento', $planes->idPlanTratamiento)->where('diente_diente_tratamiento.Numero', $dientes->Numero)->get();
                         if (count($dientesTratamientos) > 0) {
                             $index = 1;
                             foreach ($dientesTratamientos as $dientesTratamientos) {
                                 $tratamiento = new DientePlan(new DienteTratamiento((int) $dientesTratamientos->idDienteTratamiento, $dientesTratamientos->DienteTratamiento, $dientesTratamientos->Costo), $dientesTratamientos->Atendido === 1 ? true : false);
                                 $dienteActual->agregarTratamiento((string) $index, $tratamiento);
                                 $index++;
                             }
                         } else {
                         }
                         //if($dientes->Numero === 18) { dd($dienteActual); }
                         $listaDientes->push($dienteActual);
                     }
                     $plan->setCosto($planes->Costo);
                     $plan->setListaDientes($listaDientes);
                     $expediente->agregarPlanTratamiento($plan);
                 }
             }
             return $expediente;
         }
     } catch (\PDOException $e) {
         echo $e->getMessage();
         return null;
     }
 }