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 ="
Resumen de Encuestas - Supervisor " || nombre_cliente || "
Departamento Total de empleados Empleados con correo electronico Encuestas enviadas Respuestas recibidas
" || departamento || " " || data.cantidad_empleados || " " || data.cantidad_empleados_email || " " || data.encuestas_enviadas || " " || data.cantidad_respuestas || "
" 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