private function getTratamientosArray($grupos, $companias, $companias_paciente) { //precios de todas las compañías para todos los tratamientos $preciosObj = Precios::whereIn('companias_id', array_keys($companias))->get(array('tratamientos_id', 'precio', 'companias_id')); $precios = array(); $companiaEconomica = array(); foreach ($preciosObj as $p) { // Crea array de precios por tratamiento y compañía if ($p->precio !== null) { $precios[$p->tratamientos_id][$p->companias_id] = $p->precio; } } foreach ($preciosObj as $p) { // Halla la compañía más económica de las del paciente if (in_array($p->companias_id, $companias_paciente)) { if (!array_key_exists($p->tratamientos_id, $companiaEconomica) || array_key_exists($p->tratamientos_id, $companiaEconomica) && $p->precio !== null && isset($precios[$p->tratamientos_id][$companiaEconomica[$p->tratamientos_id]]) && $p->precio < $precios[$p->tratamientos_id][$companiaEconomica[$p->tratamientos_id]]) { $companiaEconomica[$p->tratamientos_id] = $p->companias_id; } } } $tratamientosAll = Tratamientos::orderBy('nombre')->get(array('nombre', 'id', 'grupostratamientos_id', 'tipostratamientos_id')); $atratamientos = array(); foreach ($tratamientosAll as $t) { // No mostrar el tratamiento si no tiene precio asignado en las compañías del paciente if (array_key_exists($t->id, $precios)) { $ta = array('id' => $t->id, 'nombre' => $t->nombre, 'compania_economica' => $companiaEconomica[$t->id], 'precios' => $precios[$t->id], 'tipo' => $t->tipostratamientos_id); $atratamientos[$t->grupostratamientos_id][$t->id] = $ta; } } return $atratamientos; }
private function getTratamientosArray($grupos, $companias, $companias_paciente) { $preciosObj = Precios::whereIn('companias_id', array_keys($companias))->get(array('tratamientos_id', 'precio', 'companias_id')); $precios = array(); $companiaEconomica = array(); // Escoge el precio más barato de las dos compañías foreach ($preciosObj as $p) { if (in_array($p->companias_id, $companias_paciente)) { if (!array_key_exists($p->tratamientos_id, $precios) || array_key_exists($p->tratamientos_id, $precios) && $p->precio < $precios[$p->tratamientos_id]) { $precios[$p->tratamientos_id][$p->companias_id] = $p->precio; } if (!array_key_exists($p->tratamientos_id, $companiaEconomica) || array_key_exists($p->tratamientos_id, $companiaEconomica) && $p->precio < $precios[$p->tratamientos_id][$companiaEconomica[$p->tratamientos_id]]) { $companiaEconomica[$p->tratamientos_id] = $p->companias_id; } } } $tratamientosAll = Tratamientos::where('historiable', 1)->get(array('nombre', 'id', 'grupostratamientos_id', 'tipostratamientos_id')); $atratamientos = array(); foreach ($tratamientosAll as $t) { // No mostrar el tratamiento si no tiene precio asignado en las compañías del paciente if (array_key_exists($t->id, $precios)) { $ta = array('id' => $t->id, 'nombre' => $t->nombre, 'compania_economica' => $companiaEconomica[$t->id], 'precios' => $precios[$t->id], 'tipo' => $t->tipostratamientos_id); $atratamientos[$t->grupostratamientos_id][$t->id] = $ta; } } return $atratamientos; }