/**
  * dibujar una representación
  * @return string
  */
 public function dibujar()
 {
     // TODO: Implement dibujar() method.
     $otrosTratamientos = '';
     foreach ($this->planTratamiento->getListaOtrosTratamientos() as $otroTratamiento) {
         $otrosTratamientos .= $otroTratamiento->getTratamiento() . ' ($' . (string) number_format($otroTratamiento->getCosto(), 2) . ') - ';
     }
     $html = '
         <p class="text-medium"><span class="strong">Costo total:</span> <span>$ ' . (string) number_format($this->planTratamiento->costo(), 2) . '</span></p>
         <p><span class="strong">Otros:</span> <em>' . $otrosTratamientos . '</em></p>
         <table class="table table-bordered tablaPlan text-small">
             <thead>
                 <tr>
                     <th>Diente</th>
                     <th>Padecimiento</th>
                     <th>Tratamiento 1</th>
                     <th>Tratamiento 2</th>
                     <th>Costo</th>
                     <th>Marcar atención</th>
                 </tr>
             </thead>
             <tbody>';
     foreach ($this->planTratamiento->getListaDientes() as $diente) {
         $dientePlan1 = $dientePlan2 = null;
         $accion = ' -- ';
         $atendido = false;
         if (!is_null($diente->getListaTratamientos())) {
             $dientePlan1 = $diente->getListaTratamientos()->get('1')->getDienteTratamiento()->getTratamiento();
             $dientePlan2 = !is_null($diente->getListaTratamientos()->get('2')) ? $diente->getListaTratamientos()->get('2')->getDienteTratamiento()->getTratamiento() : ' -- ';
             $atendido = $diente->getListaTratamientos()->get('1')->atendido();
             if (!is_null($diente->getListaTratamientos()->get('2'))) {
                 $atendido = $diente->getListaTratamientos()->get('2')->atendido();
             }
             $accion = '<label><input type="checkbox" name="dienteAtendido[]" value="' . $diente->getNumero() . '" class="tratamiento" data-costo=""><input type="hidden" value="' . $diente->costoTratamientos() . '"> Dar atención</label>';
             if ($atendido) {
                 $accion = '<span class="strong">Atendido</span>';
             }
         } else {
             $dientePlan1 = $dientePlan2 = ' -- ';
         }
         $html .= '
             <tr>
                 <td class="diente">' . $diente->getNumero() . '</td>
                 <td>' . $this->dibujarPadecimientos($diente->getListaPadecimientos()) . '</td>
                 <td>' . $dientePlan1 . '</td>
                 <td>' . $dientePlan2 . '</td>
                 <td>' . $this->dibujarCostosTratamientos($diente->getListaTratamientos()) . '</td>
                 <td>' . $accion . '</td>
             </tr>
         ';
     }
     $html .= '</tbody></table>';
     return $html;
 }
 /**
  * obtener un plan por su id
  * @param $id
  * @return PlanTratamiento
  */
 public function obtenerPorId($id)
 {
     // TODO: Implement obtenerPorId() method.
     try {
         $planes = DB::table('plan_tratamiento')->where('idPlanTratamiento', $id)->first();
         if (count($planes) > 0) {
             // buscar la lista de dientes
             $dientes = DB::table('diente')->orderBy('Numero')->get();
             $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);
             }
             // otros tratamientos
             $otrosTratamientos = DB::table('plan_tratamiento_otros')->join('plan_otro_tratamiento', 'plan_otro_tratamiento.idOtroTratamiento', '=', 'plan_tratamiento_otros.idOtroTratamiento')->where('plan_tratamiento_otros.idPlanTratamiento', $plan->getId())->get();
             if (count($otrosTratamientos) > 0) {
                 foreach ($otrosTratamientos as $otrosTratamientos) {
                     $otroTratamiento = new OtroTratamiento($otrosTratamientos->idOtroTratamiento, $otrosTratamientos->OtroTratamiento, $otrosTratamientos->Costo);
                     $plan->agregarOtroTratamiento($otroTratamiento->getId(), $otroTratamiento);
                 }
             }
             $plan->setCosto($planes->Costo);
             $plan->setListaDientes($listaDientes);
             return $plan;
         }
     } catch (\PDOException $e) {
         echo $e->getMessage();
         return null;
     }
 }
 /**
  * generar vista para el plan de tratamiento
  * @param Request $request
  * @param string $userMed
  * @param string $idPaciente
  * @param DienteTratamientosRepositorioInterface $dienteTratamientosRepositorio
  * @param OtrosTratamientosRepositorioInterface $otrosTratamientosRepositorio
  * @return \Illuminate\View\View
  */
 public function verPlan(Request $request, $userMed, $idPaciente, DienteTratamientosRepositorioInterface $dienteTratamientosRepositorio, OtrosTratamientosRepositorioInterface $otrosTratamientosRepositorio)
 {
     $odontograma = $request->session()->get('odontograma');
     if (is_null($request->session()->get('plan'))) {
         $odontograma->borrarDientesTratamientos();
         // obtener primeros dos otros tratamientos para el plan
         $otroTratamiento1 = $otrosTratamientosRepositorio->obtenerOtroTratamientoPorId(1);
         $otroTratamiento2 = $otrosTratamientosRepositorio->obtenerOtroTratamientoPorId(2);
         // obtener plan
         $plan = new PlanTratamiento();
         $plan->agregarOtroTratamiento($otroTratamiento1->getId(), $otroTratamiento1);
         $plan->agregarOtroTratamiento($otroTratamiento2->getId(), $otroTratamiento2);
         $plan->generarDeOdontograma($odontograma);
     } else {
         $plan = $request->session()->get('plan');
     }
     $listaDienteTratamientos = $dienteTratamientosRepositorio->obtenerDienteTratamientos();
     $listaOtrosTratamientos = $otrosTratamientosRepositorio->obtenerOtrosTratamientos();
     $dibujadorPlan = new DibujadorPlanTratamiento($plan, $listaDienteTratamientos);
     $request->session()->put('plan', $plan);
     return View::make('consultas.consultas_plan_tratamiento', compact('dibujadorPlan', 'listaOtrosTratamientos', 'userMed', 'idPaciente'));
 }
 /**
  * @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;
     }
 }