public function scopeAcceso($query, $user_id, $presupuesto) { if (!empty($user_id)) { $arr_tipos_proyecto = array(); $arr_urgs = array(); $arr_proyectos = array(); $accesos = Acceso::whereUserId($user_id)->get(); foreach ($accesos as $acceso) { if ($acceso->acceso_type == 'Guia\\Models\\TipoProyecto') { $arr_tipos_proyecto[] = $acceso->acceso_id; } if ($acceso->acceso_type == 'Guia\\Models\\Urg') { $arr_urgs[] = $acceso->acceso_id; } if ($acceso->acceso_type == 'Guia\\Models\\Proyecto') { $arr_proyectos[] = $acceso->acceso_id; } } if (count($arr_tipos_proyecto) > 0 || count($arr_urgs) > 0 || count($arr_proyectos) > 0) { if (count($arr_tipos_proyecto) > 0) { $query->whereIn('tipo_proyecto_id', $arr_tipos_proyecto); } if (count($arr_urgs) > 0 || count($arr_proyectos) > 0) { $query->whereNested(function ($query) use($arr_urgs, $arr_proyectos) { if (count($arr_urgs) > 0) { $query->orWhere(function ($query) use($arr_urgs) { $query->whereIn('urg_id', $arr_urgs); }); } if (count($arr_proyectos) > 0) { $query->orWhere(function ($query) use($arr_proyectos) { $query->whereIn('id', $arr_proyectos); }); } }); } //Filtro por fecha $query->whereNested(function ($query) use($presupuesto) { $query->whereBetween('inicio', array($presupuesto . '-01-01', $presupuesto . '-12-31')); $query->orWhere(function ($query) use($presupuesto) { $query->where('inicio', '<', $presupuesto . '-01-01'); $query->where('fin', '=', '0000-00-00'); }); $query->orWhere(function ($query) use($presupuesto) { $query->where('inicio', '<', $presupuesto . '-01-01'); $query->where('fin', '>=', $presupuesto . '-01-01'); }); }); } else { $query->whereId(0); } } else { $query->whereId(0); } $query->orderBy('proyecto'); return $query; }