273 lines
9.9 KiB
Plaintext
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
|