Files
MBS/PROYECTO/TEST/enviarEncuestaTask/Notificacion_Supervisores.4gl
T

273 lines
9.9 KiB
Plaintext

DEFINE usuarios, clave STRING
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
CALL Envia_notificacion()
END MAIN
FUNCTION Envia_notificacion()
DEFINE supervisor DYNAMIC ARRAY OF RECORD
num_emp_supervisor INT,
num_emp_empleados DYNAMIC ARRAY OF INTEGER,
empleados_con_email DYNAMIC ARRAY OF INTEGER
END RECORD
DEFINE answer_data DYNAMIC ARRAY OF RECORD
num_emp_supervisor INT,
cantidad_empleados INT,
cantidad_empleados_email INT,
encuestas_enviadas INT,
cantidad_respuestas INT
END RECORD
DEFINE e_emp_query STRING, idx INT, i,x, count_answer, encuestas_enviadas INT , num_emp INT , respuesta STRING
DEFINE checking DYNAMIC ARRAY OF RECORD
num_emp INT,
estado STRING
END RECORD
PREPARE query5 FROM "SELECT num_emp
FROM adtb00003
WHERE num_emp IN (
SELECT DISTINCT num_emp_supervisor
FROM adtb00003
WHERE num_emp_supervisor IS NOT NULL AND num_emp_supervisor != 0 and num_emp_supervisor in (3355)
)
AND status_t IS NULL"
#num_emp_supervisor in (5556, 5565, 5474)
DECLARE buscar CURSOR FOR query5
LET idx = 1
FOREACH buscar INTO supervisor[idx].num_emp_supervisor
LET count_answer = 0
DECLARE buscar2 CURSOR FOR
SELECT a.num_emp FROM adtb00003 a
WHERE a.num_emp_supervisor = supervisor[idx].num_emp_supervisor
AND status_t IS NULL
LET i = 1
FOREACH buscar2 INTO supervisor[idx].num_emp_empleados[i]
LET i = i + 1
END FOREACH
IF i = 1 THEN
CONTINUE FOREACH
END IF
DECLARE buscar3 CURSOR FOR
SELECT a.num_emp FROM adtb00003 a
WHERE a.num_emp_supervisor = supervisor[idx].num_emp_supervisor
AND a.status_t IS NULL AND a.email IS NOT NULL
LET i = 1
FOREACH buscar3 INTO supervisor[idx].empleados_con_email[i]
LET i = i + 1
END FOREACH
IF i = 1 THEN
CONTINUE FOREACH
END IF
IF supervisor[idx].empleados_con_email[1] IS NOT NULL THEN
LET e_emp_query = '(' CLIPPED
LET i = 1
IF supervisor[idx].empleados_con_email.getLength() = 1 THEN
LET e_emp_query = e_emp_query,supervisor[idx].empleados_con_email[1],')'
ELSE
FOR i = 1 TO supervisor[idx].empleados_con_email.getLength() - 1
IF i <> supervisor[idx].empleados_con_email.getLength() - 1 THEN
LET e_emp_query = e_emp_query CLIPPED, supervisor[idx].empleados_con_email[i] CLIPPED, ',' CLIPPED
ELSE
LET e_emp_query = e_emp_query CLIPPED, supervisor[idx].empleados_con_email[i] CLIPPED, ')' CLIPPED
END IF
END FOR
END IF
DISPLAY e_emp_query
PREPARE query FROM
'SELECT a.referencia, a.estado FROM encuestas_log a
WHERE a.fecha between DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)
AND DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 28)
AND a.idEncuesta = 4 AND a.referencia in '|| e_emp_query
DECLARE buscar4 CURSOR FOR query
LET i = 1
FOREACH buscar4 INTO checking[i].num_emp, checking[i].estado
DISPLAY checking[i].num_emp, checking[i].estado
LET i = i + 1
END FOREACH
INITIALIZE e_emp_query TO NULL
LET e_emp_query = '('
LET i = 1
IF checking.getLength() = 1 THEN
LET e_emp_query = e_emp_query, checking[1].num_emp, ')'
DISPLAY e_emp_query
ELSE
FOR i = 1 TO checking.getLength() - 1
IF i <> checking.getLength() - 1 THEN
IF checking[i].estado = 'VALIDO' THEN
LET e_emp_query = e_emp_query CLIPPED, checking[i].num_emp CLIPPED, ',' CLIPPED
END IF
ELSE
IF checking[i].estado = 'VALIDO' THEN
LET e_emp_query = e_emp_query CLIPPED, checking[i].num_emp CLIPPED, ')' CLIPPED
END IF
END IF
END FOR
END IF
DISPLAY e_emp_query
PREPARE query2 FROM
'SELECT a.num_emp, a.respuesta FROM encuestas.dbo.respuesta_laboral a
WHERE a.fech_crea between DATEFROMPARTS(2024, MONTH(GETDATE()), 1)
AND DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 28)
AND a.num_emp in '|| e_emp_query
DECLARE buscar5 CURSOR FOR query2
FOREACH buscar5 INTO num_emp, respuesta
LET count_answer = count_answer + 1
END FOREACH
END IF
LET answer_data[idx].num_emp_supervisor = supervisor[idx].num_emp_supervisor
LET answer_data[idx].cantidad_empleados = supervisor[idx].num_emp_empleados.getLength() - 1
LET answer_data[idx].cantidad_empleados_email = supervisor[idx].empleados_con_email.getLength() - 1
LET answer_data[idx].encuestas_enviadas = checking.getLength() - 1
LET answer_data[idx].cantidad_respuestas = count_answer
DISPLAY "supervisor: ", answer_Data[idx].num_emp_supervisor
DISPLAY "cantidad_empleados: ", answer_data[idx].cantidad_empleados
DISPLAY "con email: ", answer_data[idx].cantidad_empleados_email
DISPLAY "encuestas enviadas: ", answer_data[idx].encuestas_enviadas
DISPLAY "respuestas: ", answer_data[idx].cantidad_respuestas
DISPLAY ''
IF answer_data[idx].cantidad_empleados_email <> 0 AND answer_data[idx].encuestas_enviadas <> 0 THEN
CALL formatear_correo(answer_data[idx].*)
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION
FUNCTION formatear_correo(data)
DEFINE data RECORD
num_emp_supervisor INT,
cantidad_empleados INT,
cantidad_empleados_email INT,
encuestas_enviadas INT,
cantidad_respuestas INT
END RECORD
DEFINE strcuerpo,strusername,xsmtphost,strpassword,strport,srtsubject STRING,
email_cliente, nombre_cliente, departamento VARCHAR(100)
LET srtsubject = "RESUMEN DE ENCUESTAS A SUPERVISORES"
SELECT a.email, CONCAT(rtrim(a.nom1_emp),' ',rtrim(a.apell1_emp)), b.nom_dpto
INTO email_cliente, nombre_cliente, departamento FROM adtb00003 a INNER JOIN adtb00001 b
ON a.departamento = b.departamento WHERE num_emp =data.num_emp_supervisor
SELECT a.from_address,a.puerto,a.nombre_servidor,a.clave
INTO strusername,strport,xsmtphost,strpassword
FROM tbperfil_mail a WHERE cod_perfil =2
LET strcuerpo ="<!DOCTYPE html>
<html>
<head>
<style>
table {
font-family: Arial, sans-serif;
border-collapse: collapse;
width: 100%;
max-width: 600px;
}
th, td {
border: 1px solid #dddddd;
text-align: center;
padding: 12px;
}
th {
background-color: #4CAF50;
color: white;
}
caption {
caption-side: top;
font-size: 18px;
font-weight: bold;
margin-bottom: 10px;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
</style>
</head>
<body>
<table>
<caption>Resumen de Encuestas - Supervisor " || nombre_cliente || "</caption>
<tr>
<th>Departamento</th>
<th>Total de empleados</th>
<th>Empleados con correo electronico</th>
<th>Encuestas enviadas</th>
<th>Respuestas recibidas</th>
</tr>
<tr>
<td>" || departamento || "</td>
<td>" || data.cantidad_empleados || "</td>
<td>" || data.cantidad_empleados_email || "</td>
<td>" || data.encuestas_enviadas || "</td>
<td>" || data.cantidad_respuestas || "</td>
</tr>
</table>
</body>
</html>"
IF email_cliente IS NOT NULL THEN
CALL enviaemail(email_cliente,srtsubject,strcuerpo,NULL,strusername,xsmtphost,strport,strpassword) #RETURNING retorne
ELSE
DISPLAY "SUPERVISOR NO TIENE EMAIL"
END IF
END FUNCTION