req->get("inicio", "")); $fechaFinal = trim($this->req->get("fin", "")); if($fechaInicio === "" || $fechaFinal === "") { throw new NotFoundHttpException("Los parámetros inicio y fin son obligatorios."); } $query = (new Query()) ->select([ "{{Dependencia}}.id as dependenciaId", "{{Dependencia}}.nombre as dependenciaNombre", "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook' and {{Usuario}}.[[facebookVerificado]]) as eventosFacebook", "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter' and {{Usuario}}.[[twitterVerificado]]) as eventosTwitter", "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram' and {{Usuario}}.[[instagramVerificado]]) as eventosInstagram", "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] not in('Facebook', 'Twitter', 'Instagram') and {{Usuario}}.[[instagramVerificado]]) as eventos", "count({{Resultado}}.accion) as cantidadResultados", ]) ->from("Evento") ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id") ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]") ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id") ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]") ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.[[id]]") ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]") ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id") ->andWhere([ "AND", [">=", "fechaInicio", $fechaInicio], ["<=", "fechaFinal", $fechaFinal], ]) ->groupBy([ "dependenciaId", "dependenciaNombre", ]) ->orderBy(["dependenciaNombre" => SORT_ASC]); $query2 = (new Query()) ->select([ "*", "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]", "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]" ]) ->from(["t" => $query]) ->orderBy(["t.[[cantidadResultados]]" => SORT_DESC]); $data = []; $eventosAtendidos = 0; $eventosPendientes = 0; $csv = "nombre,participaciones,pendientes,cantidad de usuarios, porcentaje de participación\n"; foreach($query2->each() as $resultado) { $eventosAtendidos += $resultado["cantidadResultados"]; $eventosPendientes += $resultado["cantidadPendientes"]; $usuariosDependencia = UsuarioDependencia::find() ->andWhere(['idDependencia' => $resultado["dependenciaId"]]) ->count(); $total = intval($resultado["cantidadResultados"]) + intval($resultado["cantidadPendientes"]); $porcentaje = 0; if ($total > 0) { $porcentaje = ($resultado["cantidadPendientes"] * 100) / $total; } $data[] = [ "id" => $resultado["dependenciaId"], "nombre" => $resultado["dependenciaNombre"], "participaciones" => $resultado["cantidadResultados"], "pendientes" => $resultado["cantidadPendientes"], "porcentajeParticipacion" => $porcentaje, "cantidadUsuarios" => $usuariosDependencia ]; $csv .= "{$resultado["dependenciaNombre"]},{$resultado["cantidadResultados"]},{$resultado["cantidadPendientes"]},{$usuariosDependencia},{$porcentaje}%\n"; } \Yii::$app->getResponse()->sendContentAsFile($csv, "comparativa_dep_{$fechaInicio}_{$fechaFinal}.csv"); \Yii::$app->end(); } }