DEFINE deptos DYNAMIC ARRAY OF RECORD numemp INT, titulo VARCHAR(100), respuesta VARCHAR(20) END RECORD, cdeptos ui.ComboBox, j, xnumemp INT, nombre VARCHAR(100), selec STRING, cedula VARCHAR(11) MAIN CONNECT to "smarmotech" USER 'conecta' USING 'conecta' CALL encuesta() END MAIN FUNCTION encuesta() DEFINE arrdepto DYNAMIC ARRAY OF RECORD seleccionado VARCHAR(2), numemp INT, titulo VARCHAR(100) END RECORD, i INT OPEN WINDOW w1 WITH FORM "fmencuesta" DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME cedula BEFORE INPUT CALL ui.Interface.LoadStyles("formularios") AFTER FIELD cedula IF cedula IS NULL THEN CALL fgl_winmessage("INFO","CAMPO EN BLANCO","INFO") NEXT FIELD cedula END IF SELECT RTRIM(a.nom1_emp)||' '||ISNULL(a.apell1_emp,' '),a.departamento,a.num_emp INTO nombre,xnumemp FROM adtb00003 a WHERE a.cedula = cedula DISPLAY BY NAME nombre AFTER INPUT DECLARE buscar CURSOR FOR SELECT UNIQUE 'NO',a.num_emp,TRIM(a.nom1_Emp)||' '||TRIM(a.apell1_emp)||' '||TRIM(a.apell2_emp) FROM adtb00003 a WHERE (a.status_t IS NULL OR a.status_t = 'I') AND a.num_emp <> xnumemp # ORDER BY RTRIM(a.nom1_Emp)||' '||RTRIM(a.apell1_emp)||' '||RTRIM(a.apell2_emp) LET i=1 FOREACH buscar INTO arrdepto[i].* LET i = i+1 END FOREACH LET j=1 END INPUT INPUT ARRAY arrdepto FROM sdepto.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT CALL arrdepto.sort(key: 'titulo',FALSE) CALL DIALOG.setActionActive( "insert", FALSE ) CALL DIALOG.setActionActive( "append", FALSE ) CALL DIALOG.setActionActive( "delete", FALSE ) LET j = 1 ON CHANGE seleccionado IF arrdepto[arr_curr()].seleccionado ="SI" THEN IF deptos.getLength() = 3 THEN CALL fgl_winmessage("INFO","YA TIENE TRES EMPLEADOS ELEGIDOS","INFO") LET arrdepto[arr_curr()].seleccionado = 'NO' NEXT FIELD seleccionado END IF LET deptos[j].numemp = arrdepto[arr_curr()].numemp LET deptos[j].titulo = "(",arrdepto[arr_curr()].numemp USING "<<<<",")", arrdepto[arr_curr()].titulo LET deptos[j].respuesta = ' ' LET j = j +1 END IF ON ACTION enviar IF deptos.getLength() > 3 THEN CALL fgl_winmessage("INFO","SOLO ES PERMITIDO TRES DEPARTAMENTOS A ENCUESTAR","INFO") FOR j = 1 TO arrdepto.getLength() LET arrdepto[j].seleccionado ='NO' END FOR ELSE IF deptos.getLength() =0 THEN NEXT FIELD seleccionado END IF CALL pregunta() END IF END INPUT ON ACTION CANCEL EXIT DIALOG CLOSE WINDOW w1 RETURN END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION pregunta() DEFINE k,departamento INT, xrespuesta VARCHAR(20), opt VARCHAR(3) OPEN WINDOW w2 WITH FORM "fmpregunta" INPUT BY NAME departamento,xrespuesta BEFORE INPUT CALL DIALOG.setActionActive( "accept", FALSE ) LET selec = "SELECT DISTINCT a.respuesta FROM encuestas.dbo.respuestas a WHERE a.cedula = ? AND a.delartamento = ?" PREPARE bdata FROM selec LET selec ="INSERT INTO encuestas.dbo.respuestas (deviceid,cedula,nombre,delartamento,respuesta,created_at) values (?,?,?,?,?,getdate())" PREPARE insdata FROM selec LET selec = "DELETE FROM encuestas.dbo.respuestas WHERE cedula = ? AND delartamento = ?" PREPARE deldata FROM selec LET cdeptos = ui.ComboBox.forName("formonly.departamento") CALL cdeptos.addItem('1','Elegir') FOR k=1 TO j CALL cdeptos.addItem(deptos[k].numemp,deptos[k].titulo) END FOR LET departamento=1 DISPLAY BY NAME departamento ON CHANGE departamento IF departamento = 1 THEN CALL fgl_Winmessage("INFO","DEBE ELEGIR UN DEPARTAMENTO VALIDO","INFO") NEXT FIELD departamento END IF EXECUTE bdata INTO xrespuesta USING cedula,departamento DISPLAY BY NAME xrespuesta ON CHANGE xrespuesta BEGIN WORK EXECUTE deldata USING cedula,departamento EXECUTE insdata USING '1234',cedula,nombre, departamento,xrespuesta COMMIT WORK END INPUT CLOSE WINDOW w2 END FUNCTION