| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- <?php
- namespace v1\controllers;
- use common\rest\AuthController;
- use common\rest\JsonController;
- use DateTime;
- use yii\db\Query;
- class ReporteGlobalController extends JsonController {
- public function actionIndex() {
- $fechas = [
- ["2022-08-01 00:00:00", "2022-08-01 00:00:00","2022-08-31 23:59:59"],
- ["2022-08-01 00:00:00", "2022-09-01 00:00:00","2022-09-30 23:59:59"],
- ["2022-08-01 00:00:00", "2022-10-01 00:00:00","2022-10-31 23:59:59"],
- ["2022-08-01 00:00:00", "2022-11-01 00:00:00","2022-11-30 23:59:59"],
- ["2022-08-01 00:00:00", "2022-12-01 00:00:00","2022-12-31 23:59:59"],
- ["2022-08-01 00:00:00", "2023-01-01 00:00:00","2023-01-31 23:59:59"],
- ];
-
- $query = (new Query())
- ->select([
- "{{Usuario}}.nombre as nombre",
- "{{Usuario}}.verificado as verificado",
- "{{Usuario}}.facebook as facebook",
- "{{Usuario}}.facebookVerificado as facebookVerificado",
- "{{Usuario}}.twitter as twitter",
- "{{Usuario}}.twitterVerificado as twitterVerificado",
- "{{Usuario}}.instagram as instagram",
- "{{Usuario}}.instagramVerificado as instagramVerificado",
- "{{Usuario}}.id as uId",
- "count({{Evento}}.id) as cantidadEventos",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
- "count({{Resultado}}.accion) as cantidadResultados",
- "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as participacionesFacebook",
- "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as participacionesTwitter",
- "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as participacionesInstagram",
- "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
- ])
- ->from("Usuario")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{UsuarioGrupo}}.[[idGrupo]]")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Evento", "{{Evento}}.id = {{EventoGrupo}}.[[idEvento]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idUsuario]] = {{Usuario}}.id and {{Resultado}}.[[idEvento]] = {{Evento}}.id")
- ->andWhere(["{{Usuario}}.eliminado" => null])
- ->groupBy(["{{Usuario}}.verificado", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
- $query2 = (new Query())
- ->select([
- // "verificado",
- "[[eventosFacebook]]",
- "[[participacionesFacebook]]",
- "[[eventosTwitter]]",
- "[[participacionesTwitter]]",
- "[[eventosInstagram]]",
- "[[participacionesInstagram]]",
- "[[cantidadResultados]]",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
- ]);
- // ->from(["t" => $query]);
-
- $meses = [];
- foreach($fechas as $_fechas) {
- $queryClon = (clone $query)->andWhere([
- "AND",
- [">=", "{{Evento}}.[[fechaInicio]]", $_fechas[1]],
- ["<=", "{{Evento}}.[[fechaInicio]]", $_fechas[2]],
- [">=", "{{Usuario}}.verificado", $_fechas[0]],
- ["<=", "{{Usuario}}.verificado", $_fechas[2]],
- ]);
- $mes = (clone $query2)->from(["t" => $queryClon]);
- $contadorPorcentajesFacebook = 0;
- $porcentajesFacebook = 0;
- $contadorPorcentajesTwitter = 0;
- $porcentajesTwitter = 0;
- $contadorPorcentajesInstagram = 0;
- $porcentajesInstagram = 0;
- foreach($mes->each() as $_mes){
- $eventosFacebook = $_mes["eventosFacebook"];
- $participacionesFacebook = $_mes["participacionesFacebook"];
- $eventosTwitter = $_mes["eventosTwitter"];
- $participacionesTwitter = $_mes["participacionesTwitter"];
- $eventosInstagram = $_mes["eventosInstagram"];
- $participacionesInstagram = $_mes["participacionesInstagram"];
- $porcentajeParticipacionFacebook = 0;
- if ($eventosFacebook > 0) {
- $contadorPorcentajesFacebook += 1;
- $porcentajeParticipacionFacebook = ($participacionesFacebook/$eventosFacebook)*100;
- $porcentajesFacebook += $porcentajeParticipacionFacebook;
- }
- $porcentajeParticipacionTwitter = 0;
- if ($eventosTwitter > 0) {
- $contadorPorcentajesTwitter += 1;
- $porcentajeParticipacionTwitter = ($participacionesTwitter/$eventosTwitter)*100;
- $porcentajesTwitter += $porcentajeParticipacionTwitter;
- }
- $porcentajeParticipacionInstagram = 0;
- if ($eventosInstagram > 0) {
- $contadorPorcentajesInstagram += 1;
- $porcentajeParticipacionInstagram = ($participacionesInstagram/$eventosInstagram)*100;
- $porcentajesInstagram += $porcentajeParticipacionInstagram;
- }
- }
- $totalPorcentajesFacebook = 0;
- $totalPorcentajesTwitter = 0;
- $totalPorcentajesInstagram = 0;
-
- if ($contadorPorcentajesFacebook > 0) {
- $totalPorcentajesFacebook = $porcentajesFacebook/$contadorPorcentajesFacebook;
- }
- if ($contadorPorcentajesTwitter > 0) {
- $totalPorcentajesTwitter = $porcentajesTwitter/$contadorPorcentajesTwitter;
- }
- if ($contadorPorcentajesInstagram > 0) {
- $totalPorcentajesInstagram = $porcentajesInstagram/$contadorPorcentajesInstagram;
- }
- $porcentajeMaximo = 0;
- if($totalPorcentajesFacebook > $totalPorcentajesTwitter) {
- if ($totalPorcentajesFacebook > $totalPorcentajesInstagram) {
- $porcentajeMaximo = $totalPorcentajesFacebook;
- } else {
- $porcentajeMaximo = $totalPorcentajesInstagram;
- }
- } else {
- if ($totalPorcentajesTwitter > $totalPorcentajesInstagram) {
- $porcentajeMaximo = $totalPorcentajesTwitter;
- } else {
- $porcentajeMaximo = $totalPorcentajesInstagram;
- }
- }
-
- $meses[] = [
- "fechaInicio" => $_fechas[0],
- "fechaFinal" => $_fechas[1],
- "totalParticipantesFacebook" => $contadorPorcentajesFacebook,
- "porcentajesParticipacionFacebook" => $totalPorcentajesFacebook,
- "totalParticipantesTwitter" => $contadorPorcentajesTwitter,
- "porcentajesParticipacionTwitter" => $totalPorcentajesTwitter,
- "totalParticipantesInstagram" => $contadorPorcentajesInstagram,
- "porcentajesParticipacionInstagram" => $totalPorcentajesInstagram,
- "porcentajeParticipacionGlobal" => $totalPorcentajesFacebook+$totalPorcentajesTwitter+$totalPorcentajesInstagram,
- "porcentajeMaximoGlobal" => $porcentajeMaximo
- ];
- }
- return $meses;
- }
- public function actionCsv() {
- $fechas = [
- ["2022-08-01 00:00:00", "2022-08-01 00:00:00","2022-08-31 23:59:59"],
- ["2022-08-01 00:00:00", "2022-09-01 00:00:00","2022-09-30 23:59:59"],
- ["2022-08-01 00:00:00", "2022-10-01 00:00:00","2022-10-31 23:59:59"],
- ["2022-08-01 00:00:00", "2022-11-01 00:00:00","2022-11-30 23:59:59"],
- ["2022-08-01 00:00:00", "2022-12-01 00:00:00","2022-12-31 23:59:59"],
- ["2022-08-01 00:00:00", "2023-01-01 00:00:00","2023-01-31 23:59:59"],
- ];
-
- $query = (new Query())
- ->select([
- "{{Usuario}}.nombre as nombre",
- "{{Usuario}}.verificado as verificado",
- "{{Usuario}}.facebook as facebook",
- "{{Usuario}}.facebookVerificado as facebookVerificado",
- "{{Usuario}}.twitter as twitter",
- "{{Usuario}}.twitterVerificado as twitterVerificado",
- "{{Usuario}}.instagram as instagram",
- "{{Usuario}}.instagramVerificado as instagramVerificado",
- "{{Usuario}}.id as uId",
- "count({{Evento}}.id) as cantidadEventos",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
- "count({{Resultado}}.accion) as cantidadResultados",
- "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as participacionesFacebook",
- "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as participacionesTwitter",
- "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as participacionesInstagram",
- "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
- ])
- ->from("Usuario")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{UsuarioGrupo}}.[[idGrupo]]")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Evento", "{{Evento}}.id = {{EventoGrupo}}.[[idEvento]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idUsuario]] = {{Usuario}}.id and {{Resultado}}.[[idEvento]] = {{Evento}}.id")
- ->andWhere(["{{Usuario}}.eliminado" => null])
- ->groupBy(["{{Usuario}}.verificado", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
- $query2 = (new Query())
- ->select([
- // "verificado",
- "[[eventosFacebook]]",
- "[[participacionesFacebook]]",
- "[[eventosTwitter]]",
- "[[participacionesTwitter]]",
- "[[eventosInstagram]]",
- "[[participacionesInstagram]]",
- "[[cantidadResultados]]",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
- ]);
- // ->from(["t" => $query]);
-
- $meses = [];
- foreach($fechas as $_fechas) {
- $queryClon = (clone $query)->andWhere([
- "AND",
- [">=", "{{Evento}}.[[fechaInicio]]", $_fechas[1]],
- ["<=", "{{Evento}}.[[fechaInicio]]", $_fechas[2]],
- [">=", "{{Usuario}}.verificado", $_fechas[0]],
- ["<=", "{{Usuario}}.verificado", $_fechas[2]],
- ]);
- $mes = (clone $query2)->from(["t" => $queryClon]);
- $contadorPorcentajesFacebook = 0;
- $porcentajesFacebook = 0;
- $contadorPorcentajesTwitter = 0;
- $porcentajesTwitter = 0;
- $contadorPorcentajesInstagram = 0;
- $porcentajesInstagram = 0;
- foreach($mes->each() as $_mes){
- $eventosFacebook = $_mes["eventosFacebook"];
- $participacionesFacebook = $_mes["participacionesFacebook"];
- $eventosTwitter = $_mes["eventosTwitter"];
- $participacionesTwitter = $_mes["participacionesTwitter"];
- $eventosInstagram = $_mes["eventosInstagram"];
- $participacionesInstagram = $_mes["participacionesInstagram"];
- $porcentajeParticipacionFacebook = 0;
- if ($eventosFacebook > 0) {
- $contadorPorcentajesFacebook += 1;
- $porcentajeParticipacionFacebook = ($participacionesFacebook/$eventosFacebook)*100;
- $porcentajesFacebook += $porcentajeParticipacionFacebook;
- }
- $porcentajeParticipacionTwitter = 0;
- if ($eventosTwitter > 0) {
- $contadorPorcentajesTwitter += 1;
- $porcentajeParticipacionTwitter = ($participacionesTwitter/$eventosTwitter)*100;
- $porcentajesTwitter += $porcentajeParticipacionTwitter;
- }
- $porcentajeParticipacionInstagram = 0;
- if ($eventosInstagram > 0) {
- $contadorPorcentajesInstagram += 1;
- $porcentajeParticipacionInstagram = ($participacionesInstagram/$eventosInstagram)*100;
- $porcentajesInstagram += $porcentajeParticipacionInstagram;
- }
- }
- $totalPorcentajesFacebook = 0;
- $totalPorcentajesTwitter = 0;
- $totalPorcentajesInstagram = 0;
-
- if ($contadorPorcentajesFacebook > 0) {
- $totalPorcentajesFacebook = $porcentajesFacebook/$contadorPorcentajesFacebook;
- }
- if ($contadorPorcentajesTwitter > 0) {
- $totalPorcentajesTwitter = $porcentajesTwitter/$contadorPorcentajesTwitter;
- }
- if ($contadorPorcentajesInstagram > 0) {
- $totalPorcentajesInstagram = $porcentajesInstagram/$contadorPorcentajesInstagram;
- }
- $porcentajeMaximo = 0;
- if($totalPorcentajesFacebook > $totalPorcentajesTwitter) {
- if ($totalPorcentajesFacebook > $totalPorcentajesInstagram) {
- $porcentajeMaximo = $totalPorcentajesFacebook;
- } else {
- $porcentajeMaximo = $totalPorcentajesInstagram;
- }
- } else {
- if ($totalPorcentajesTwitter > $totalPorcentajesInstagram) {
- $porcentajeMaximo = $totalPorcentajesTwitter;
- } else {
- $porcentajeMaximo = $totalPorcentajesInstagram;
- }
- }
-
- $meses[] = [
- "fechaInicio" => $_fechas[1],
- "fechaFinal" => $_fechas[2],
- "totalParticipantesFacebook" => $contadorPorcentajesFacebook,
- "porcentajesParticipacionFacebook" => $totalPorcentajesFacebook,
- "totalParticipantesTwitter" => $contadorPorcentajesTwitter,
- "porcentajesParticipacionTwitter" => $totalPorcentajesTwitter,
- "totalParticipantesInstagram" => $contadorPorcentajesInstagram,
- "porcentajesParticipacionInstagram" => $totalPorcentajesInstagram,
- "porcentajeParticipacionGlobal" => $totalPorcentajesFacebook+$totalPorcentajesTwitter+$totalPorcentajesInstagram,
- "porcentajeMaximoGlobal" => $porcentajeMaximo
- ];
- }
- $texto = ",VERIFICADOS FACEBOOK,VERIFICADOS INSTAGRAM,VERIFICADOS TWITTER,PORCENTAJE DE PARTICIPACIÓN GLOBAL,PORCENTAJE DE PARTICIPACIÓN - FACEBOOK,PORCENTAJE DE PARTICIPACIÓN - INSTAGRAM,PORCENTAJE DE PARTICIPACIÓN - TWITTER,PORCENTAJE MÁXIMO DE PARTICIPACIÓN GLOBAL\n";
- foreach($meses as $mes) {
- $fechaInicio = (DateTime::createFromFormat("Y-m-d H:i:s", $mes["fechaInicio"]))->format('d-m-Y');
- $fechaFinal = (DateTime::createFromFormat("Y-m-d H:i:s", $mes["fechaFinal"]))->format('d-m-Y');
- $texto .= "".
- $fechaInicio." - ".$fechaFinal.
- ",".$mes["totalParticipantesFacebook"].
- ",".$mes["totalParticipantesInstagram"].
- ",".$mes["totalParticipantesTwitter"].
- ",".$mes["porcentajeParticipacionGlobal"].
- ",".$mes["porcentajesParticipacionFacebook"].
- ",".$mes["porcentajesParticipacionInstagram"].
- ",".$mes["porcentajesParticipacionTwitter"].
- ",".$mes["porcentajeMaximoGlobal"]."\n";
- }
- return \Yii::$app->getResponse()->sendContentAsFile($texto, "reporte_global.csv");
- }
- public function actionGuardar() {
- $metodo = "";
- if(\Yii::$app->request->isPost) {
- $metodo = "POST";
- }
- if(\Yii::$app->request->isPut) {
- $metodo = "PUT";
- }
- return "Ejemplo de un método {$metodo}";
- }
-
- public function actionEliminar() {
- return "Ejemplo de un delete";
- }
- }
|