From 75d81bdfc740a85b521e71f8110dcddf38454e01 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Thu, 22 Oct 2026 16:44:46 -0400 Subject: [PATCH] ipprmt020: no permite repetir un item en la requisicion y arregla la fecha del reporte - Guardar: si un item (clase/grupo/tipo/medida) aparece en mas de una linea, aunque cambie el area, muestra error y no guarda (antes solo avisaba y solo si coincidia el area). Evita que el impreso muestre solo la primera linea. - Reporte: la fecha/hora sale como dd/mm/yyyy hh:mm y el titulo deja espacio para que no se corte en el encabezado. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/bin/ipprmt020.4rp | 4 +- PROYECTO/ipdir/imprequisiciones.4gl | 2 +- PROYECTO/ipdir/ipprmt020.4gl | 2375 +++++++++++++-------------- 3 files changed, 1187 insertions(+), 1194 deletions(-) diff --git a/PROYECTO/bin/ipprmt020.4rp b/PROYECTO/bin/ipprmt020.4rp index 3471a47..a7fb33a 100644 --- a/PROYECTO/bin/ipprmt020.4rp +++ b/PROYECTO/bin/ipprmt020.4rp @@ -24,9 +24,9 @@ - + - + diff --git a/PROYECTO/ipdir/imprequisiciones.4gl b/PROYECTO/ipdir/imprequisiciones.4gl index ad38e4d..4d06b8d 100644 --- a/PROYECTO/ipdir/imprequisiciones.4gl +++ b/PROYECTO/ipdir/imprequisiciones.4gl @@ -68,7 +68,7 @@ REPORT requiere(detalle,xdespiece,codigo) FORMAT FIRST PAGE HEADER SELECT a.nombre INTO p_companias.nombre FROM companias a - LET hora = CURRENT + LET hora = TODAY USING "dd/mm/yyyy", " ", CURRENT HOUR TO MINUTE PRINTX hora,p_companias.nombre BEFORE GROUP OF codigo PRINTX detalle.*,p_iptb57.*, diff --git a/PROYECTO/ipdir/ipprmt020.4gl b/PROYECTO/ipdir/ipprmt020.4gl index 7839aec..81ac103 100644 --- a/PROYECTO/ipdir/ipprmt020.4gl +++ b/PROYECTO/ipdir/ipprmt020.4gl @@ -1,1191 +1,1184 @@ -{ - PROGRAMA: ipprmt020.4 - OBEJETIVO: Administrar de una forma digital los requerimientos que se realizan a los diferentes - almacenes - DESARROLLADO POR: ING. JUAN SOTO - FECHA DESARROLLO: ABRIL 21, 2022 - - -} -IMPORT os -GLOBALS "ipprgb000.4gl" - -DEFINE Toemail, - subject, - cuerpo_correo, - xusername, - xsmtphost, - xsmtpport, - xpassword, - emailadd, - retorne - STRING -DEFINE descRepetido, respuesta STRING - -DEFINE - d_tipos, - mensaje, - f_tipos, - filepath, - extension, - xdestino, - l_file, - tmpdir_file, - dir_file, - url_destino, - attachment - STRING, - tmpnumero, dcodn, dcodgrupo, dcodtipo, dcodsec INT - -MAIN - DEFER INTERRUPT - CALL ARG_VAL(1) RETURNING usuarios - CALL ARG_VAL(2) RETURNING clave - - CONNECT TO "smarmotech" USER usuarios USING clave - LET url_destino = fgl_getenv("URLIMAGENES") - - CALL usuarioSistema(usuarios) RETURNING nombreUsuario, email - CALL ipprmt020() -END MAIN -FUNCTION ipprmt020() - - OPEN WINDOW w1 WITH FORM "ipfmmt020" - DIALOG ATTRIBUTE(UNBUFFERED) - DISPLAY ARRAY arr_busqueda TO busqueda.* - BEFORE DISPLAY - LET toemail = email - LET xtiene = 'NO' - SELECT from_address, puerto, nombre_servidor, clave - INTO xusername, xsmtpport, xsmtphost, xpassword - FROM tbperfil_mail - WHERE cod_perfil = 2 - - # LET xusername ='notificacion@marmotech.com.do' - # LET xsmtphost ='smtp.office365.com' - # LET xsmtpport = '587' - # LET xpassword = 'Lmmjvsd2020' - CALL buscarData() - ON ACTION nuevo ATTRIBUTE(TEXT = "Nuevo", IMAGE = "new") - INITIALIZE p_iptb57.* TO NULL - CALL arr_iptb58.clear() - CLEAR FORM - - LET tmpnumero = 0 - SELECT a.num_doc - INTO tmpnumero - FROM iptb00043 a - WHERE usuario = usuarios - - IF STATUS = NOTFOUND THEN - INSERT INTO iptb00043 VALUES(1, usuarios) - LET tmpnumero = 1 - ELSE - LET tmpnumero = tmpnumero + 1 - UPDATE iptb00043 - SET num_doc = tmpnumero - WHERE usuario = usuarios - END IF - - LET opcion = "Adicionar" - LET subject = 'CREACION REQUISICION PARA ALMACEN NO.' - CALL entradas() - - { ON ACTION editar ATTRIBUTE(TEXT="Editar",IMAGE="edit") - LET opcion="Actualializar" - LET p_iptb57.numero_doc = arr_busqueda[arr_curr()].numeroid - LET p_iptb57.estado = arr_busqueda[arr_curr()].estadp1 - DISPLAY BY NAME p_iptb57.numero_doc,p_iptb57.estado - SELECT DISTINCT a.numero_doc FROM iptb00006 a - WHERE a.numero_doc = p_iptb57.numero_doc AND - a.cod_mov = p_iptb57.cod_mov - IF STATUS != NOTFOUND THEN - CALL msg(1014) - CONTINUE DIALOG - END IF - LET subject = 'MODIFICACION REQUISICION PARA ALMACEN NO.' - CALL buscadoc(arr_busqueda[arr_curr()].numeroid,arr_busqueda[arr_curr()].cod_mov ) RETURNING p_iptb57.*,arr_iptb58 - CALL entradas()} - ON ACTION anular ATTRIBUTE(TEXT = "Anular", IMAGE = "garbage") - LET p_iptb57.numero_doc = arr_busqueda[arr_curr()].numeroid - LET p_iptb57.cod_mov = arr_busqueda[arr_curr()].cod_mov - CALL anular() - CALL buscarData() - ON ACTION imprimir ATTRIBUTE(TEXT = "Imprimir", IMAGE = "printer") - - CALL buscadoc( - arr_busqueda[arr_curr()].numeroid, - arr_busqueda[arr_curr()].cod_mov) - RETURNING p_iptb57.*, arr_iptb58 - CALL impdocumento( - arr_busqueda[arr_curr()].numeroid, - arr_busqueda[arr_curr()].cod_mov) - ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancelar", IMAGE = "quit") - RETURN - - END DISPLAY - END DIALOG - CLOSE WINDOW w1 -END FUNCTION - -FUNCTION buscardata() - DEFINE i INT - - DECLARE buscardata CURSOR FOR - SELECT b.estado, - f.descripcion, - CAST(a.cod_mov AS VARCHAR(10)) || ' ' || a.descrip_mov, - b.numero_doc, - b.fecha, - c.nombre, - b.observacion, - d.descripcion, - ' ', - b.cod_mov, - b.bodega, - b.bodega_destino - FROM iptb00005 a, - iptb00057 b INNER JOIN iptb00061 f ON b.idestado = f.idestado - LEFT OUTER - JOIN vetb00004 c - ON c.tipo_cliente = b.tipo_cliente - AND c.sec_cliente = b.sec_cliente, - intb00009 d - WHERE a.cod_mov = b.cod_mov - AND b.bodega = d.cod_bodega - AND b.us_crea = usuarios - AND b.status_t IS NULL - - CALL arr_busqueda.clear() - LET i = 1 - FOREACH buscardata INTO arr_busqueda[i].* - LET p_iptb57.cod_mov = arr_busqueda[i].cod_mov - LET p_iptb57.num_oc = arr_busqueda[i].numeroid - - IF arr_busqueda[i].bodega2 IS NOT NULL THEN - SELECT a.descripcion - INTO arr_busqueda[i].bodega_destino - FROM intb00009 a - WHERE a.cod_bodega = arr_busqueda[i].bodega2 - END IF - LET i = i + 1 - END FOREACH -END FUNCTION -FUNCTION codigomov() - DEFINE - ketiquetas SMALLINT, - detiquetas STRING - - LET cbmovimiento = ui.combobox.forname("formonly.cod_mov") - DECLARE bmovimiento_t CURSOR FOR - SELECT a.cod_mov, - RTRIM(a.descrip_mov) || '(' || CAST(a.cod_mov AS VARCHAR(6)) || ')' - FROM iptb00005 a - WHERE a.requisiciones = "SI" - ORDER BY a.descrip_mov - CALL cbmovimiento.clear() - - FOREACH bmovimiento_t INTO ketiquetas, detiquetas - CALL cbmovimiento.additem(ketiquetas, detiquetas) - END FOREACH - -END FUNCTION -FUNCTION entradas() - DIALOG ATTRIBUTE(UNBUFFERED) - - INPUT BY NAME p_iptb57.cod_mov, - p_iptb57.num_oc, - p_iptb57.observacion, - p_iptb57.bodega, - p_iptb57.bodega_destino, - p_iptb57.url_file - ATTRIBUTE(WITHOUT DEFAULTS) - ON ACTION abrirdocumento - IF p_iptb57.url_file IS NOT NULL THEN - CALL ui.Interface.frontCall( - "standard", "launchURL", [p_iptb57.url_file], []) - END IF - ON ACTION atardocumento - - CALL ui.Interface.frontCall( - "standard", - "openfile", - [dir_file, d_tipos, f_tipos, mensaje], - [filepath]) - - IF filepath IS NOT NULL THEN - IF downshift(os.Path.extension(filepath)) = "pdf" - OR downshift(os.Path.extension(filepath)) = "jpg" - OR downshift(os.Path.extension(filepath)) = "xls" - OR downshift(os.Path.extension(filepath)) = "xlsx" - OR downshift(os.Path.extension(filepath)) = "doc" - OR downshift(os.Path.extension(filepath)) = "docx" - OR downshift(os.Path.extension(filepath)) = "png" THEN - LET dir_file = os.Path.basename(filepath) - LET tmpdir_file = dir_file - - LET dir_file = - fgl_getenv("IMAGENES"), "\\", dir_file CLIPPED - DISPLAY "imagenes ", dir_file - CALL fgl_getfile(filepath, dir_file) - - LET p_iptb57.url_file = - url_destino CLIPPED, "/", tmpdir_file CLIPPED - - ELSE - CALL fgl_winmessage( - "ERROR", "EL FILE DEBE SER PDF, JPG, PNG", "INFO") - END IF - END IF - BEFORE INPUT - - LET d_tipos = "PDF" - LET f_tipos = "*.pdf *.jpg *.png, *.xls, *.xlsx, *.doc, *.docx" - LET mensaje = %"Elige Documento" - - LET selec = - "INSERT INTO iptb00060(id_etiqueta,id_despiece,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3, - cantidad,medida,secuencia,bodega) - SELECT id_etiqueta,?,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3, - cantidad,medida,secuencia,bodega - FROM tmpdespiece WHERE id_despiece = ?" - - PREPARE insertad FROM selec - - DISPLAY BY NAME nombreUsuario, email - CALL codigomov() - CALL bodegas('2') - - IF opcion = "Adicionar" THEN - LET p_iptb57.fecha = TODAY - ELSE - IF p_iptb57.estado = 'AUTORIZADA' THEN - CALL msg(1004) - EXIT DIALOG - END IF - END IF - DISPLAY BY NAME p_iptb57.fecha - IF p_iptb57.num_oc IS NOT NULL THEN - LET ordenPedidos = TRUE - ELSE - LET ordenPedidos = FALSE - END IF - AFTER FIELD num_oc - IF p_iptb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN - - SELECT a.tipo_cliente, a.sec_cliente, b.nombre - INTO p_iptb57.tipo_cliente, - p_iptb57.sec_cliente, - p_iptb57.cliente - FROM prtb00012 a, vetb00004 b - WHERE a.tipo_cliente = b.tipo_cliente - AND a.sec_cliente = b.sec_cliente - AND a.cerrada = 'N' - AND a.num_oc = p_iptb57.num_oc - AND a.status_t IS NULL - - IF STATUS = NOTFOUND THEN - CALL msg(3) - NEXT FIELD num_oc - END IF - DISPLAY BY NAME p_iptb57.tipo_cliente, - p_iptb57.sec_cliente, - p_iptb57.cliente - END IF - AFTER FIELD cod_mov - IF p_iptb57.cod_mov IS NOT NULL THEN - LET nombreMov = - ui.ComboBox.forName('formonly.cod_mov') - .getTextOf(p_iptb57.cod_mov) - - SELECT a.requiere_autorizacion, a.control_transferencia - INTO requiere, transacc.control_transferencia - FROM iptb00005 a - WHERE a.cod_mov = p_iptb57.cod_mov - - IF requiere = "NO" THEN - LET xestado = 'AUTORIZADA' - ELSE - LET xestado = 'NO AUTORIZADA' - END IF - END IF - AFTER FIELD bodega - IF p_iptb57.bodega IS NOT NULL THEN - LET nombreBodega = - ui.ComboBox.forName('formonly.bodega') - .getTextOf(p_iptb57.bodega) - CALL emailbodegas() RETURNING emailadd - END IF - AFTER FIELD bodega_destino - IF p_iptb57.bodega_destino IS NOT NULL THEN - LET nombreBodegaDestino = - ui.ComboBox.forName('formonly.bodega_destino') - .getTextOf(p_iptb57.bodega_destino) - END IF - - AFTER INPUT - IF p_iptb57.bodega IS NULL THEN - - CALL msg(16) - NEXT FIELD bodega - END IF - - IF p_iptb57.bodega IS NOT NULL THEN - LET nombreBodega = - ui.ComboBox.forName('formonly.bodega') - .getTextOf(p_iptb57.bodega) - CALL emailbodegas() RETURNING emailadd - END IF - - IF transacc.control_transferencia = "SI" THEN - IF p_iptb57.bodega_destino IS NULL THEN - CALL msg(16) - NEXT FIELD bodega_destino - END IF - END IF - IF p_iptb57.num_oc IS NOT NULL THEN - - SELECT a.tipo_cliente, a.sec_cliente, b.nombre - INTO p_iptb57.tipo_cliente, p_iptb57.sec_cliente - FROM prtb00012 a, vetb00004 b - WHERE a.tipo_cliente = b.tipo_cliente - AND a.sec_cliente = b.sec_cliente - AND a.cerrada = 'N' - AND a.num_oc = p_iptb57.num_oc - AND a.status_t IS NULL - - IF STATUS = NOTFOUND THEN - CALL msg(3) - NEXT FIELD num_oc - END IF - DISPLAY BY NAME p_iptb57.tipo_cliente, - p_iptb57.sec_cliente, - p_iptb57.cliente - IF p_iptb57.cod_mov IS NOT NULL THEN - LET nombreMov = - ui.ComboBox.forName('formonly.cod_mov') - .getTextOf(p_iptb57.cod_mov) - END IF - - IF p_iptb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN - LET idx = 1 - - DECLARE buscaOrden CURSOR FOR - SELECT a.area, - a.cod_n, - a.cod_grupo, - a.cod_tipo, - a.cod_sec, - b.descrip_esp, - b.unidad_med, - c.cantidad_1, - c.cantidad, - c.cantidad_1, - c.cantidad, - d.factor_conv - FROM prtb00013 a, - iptb00002 b, - prtb00023 c, - iptb00001 d - WHERE a.num_oc = p_iptb57.num_oc - AND a.num_oc = c.num_oc - AND a.area = c.area - AND (a.cod_n = b.cod_n - AND a.cod_grupo = b.cod_grupo - AND a.cod_tipo = b.cod_tipo - AND a.cod_sec = b.cod_sec) - AND (a.cod_n = c.cod_n - AND a.cod_grupo = c.cod_grupo - AND a.cod_tipo = c.cod_tipo - AND a.cod_sec = c.cod_sec) - AND (a.cod_n = d.cod_n - AND a.cod_grupo = d.cod_grupo - AND a.cod_tipo = d.cod_tipo - AND a.cod_sec = d.cod_sec) - - FOREACH buscaOrden INTO arr_iptb58[idx].* - LET idx = idx + 1 - END FOREACH - END IF - END IF - END INPUT - - INPUT ARRAY arr_iptb58 FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS) - ON ACTION buscar - LET idx = arr_curr() - LET scr_l = scr_line() - CALL busca_prod( - '02') - RETURNING arr_iptb58[idx].cod_n, - arr_iptb58[idx].cod_grupo, - arr_iptb58[idx].cod_tipo, - arr_iptb58[idx].cod_sec, - arr_iptb58[idx].descripcion - CALL producto() - IF tienedespiece THEN - LET dcodn = arr_iptb58[idx].cod_n - LET dcodgrupo = arr_iptb58[idx].cod_grupo - LET dcodtipo = arr_iptb58[idx].cod_tipo - LET dcodsec = arr_iptb58[idx].cod_sec - CALL despiece() - END IF - NEXT FIELD cantidad_1 - ON ACTION despiece ATTRIBUTE(TEXT = "Despiece", IMAGE = "") - LET idx = arr_curr() - CALL producto() - IF tienedespiece THEN - LET dcodn = arr_iptb58[idx].cod_n - LET dcodgrupo = arr_iptb58[idx].cod_grupo - LET dcodtipo = arr_iptb58[idx].cod_tipo - LET dcodsec = arr_iptb58[idx].cod_sec - - CALL despiece() - END IF - NEXT FIELD cantidad_1 - - BEFORE ROW - LET idx = arr_curr() - IF arr_iptb58[idx].area IS NULL THEN - LET arr_iptb58[idx].area = 1 - END IF - DISPLAY arr_iptb58[idx].area TO sdetalle[scr_line()].area - AFTER FIELD cod_Sec - LET idx = arr_curr() - IF arr_iptb58[idx].cod_sec IS NOT NULL THEN - CALL producto() - IF NOT existe THEN - CALL msg(3) - NEXT FIELD cod_sec - END IF - IF tienedespiece THEN - LET dcodn = arr_iptb58[idx].cod_n - LET dcodgrupo = arr_iptb58[idx].cod_grupo - LET dcodtipo = arr_iptb58[idx].cod_tipo - LET dcodsec = arr_iptb58[idx].cod_sec - - CALL despiece() - END IF - - IF p_iptb57.num_oc IS NOT NULL THEN - SELECT DISTINCT a.cod_sec - FROM prtb00013 a - WHERE a.num_oc = p_iptb57.num_oc - AND a.cod_n = arr_iptb58[idx].cod_n - AND a.cod_grupo = arr_iptb58[idx].cod_grupo - AND a.cod_tipo = arr_iptb58[idx].cod_tipo - AND a.cod_sec = arr_iptb58[idx].cod_sec - IF STATUS = NOTFOUND THEN - CALL msg(397) - NEXT FIELD cod_Sec - END IF - END IF - END IF - AFTER FIELD cantidad_1 - - IF arr_iptb58[idx].cantidad_1 IS NOT NULL THEN - - IF arr_iptb58[idx].cantidad_1 - > arr_iptb58[idx].cantidad_o1 THEN - CALL msg(46) - NEXT FIELD cantidad_1 - END IF - LET arr_iptb58[idx].cantidad = - arr_iptb58[idx].cantidad_1 * arr_iptb58[idx].factor_conv - DISPLAY arr_iptb58[idx].cantidad TO sdetalle[scr_l].cantidad - END IF - ON ACTION guardar ATTRIBUTE(TEXT = opcion, IMAGE = "save") - # Aviso (no bloqueo) si un item se repite en el detalle - LET descRepetido = itemRepetido() - IF descRepetido IS NOT NULL THEN - LET respuesta = - fgl_winquestion( - "Item repetido", - "El item " || descRepetido CLIPPED - || " esta repetido en el detalle. Desea continuar?", - "NO", - "YES|NO", - "QUESTION", - 0) - IF respuesta != "YES" THEN - CONTINUE DIALOG - END IF - END IF - IF p_iptb57.bodega IS NOT NULL THEN - LET nombreBodega = - ui.ComboBox.forName('formonly.bodega') - .getTextOf(p_iptb57.bodega) - END IF - IF transacc.control_transferencia = "SI" THEN - IF p_iptb57.bodega_destino IS NULL THEN - CALL msg(16) - NEXT FIELD bodega_destino - END IF - END IF - - IF p_iptb57.bodega_destino IS NOT NULL THEN - LET nombreBodegaDestino = - ui.ComboBox.forName('formonly.bodega_destino') - .getTextOf(p_iptb57.bodega_destino) - END IF - IF emailadd IS NOT NULL THEN - LET Toemail = toemail CLIPPED, ",", emailadd CLIPPED - ELSE - LET Toemail = toemail CLIPPED - END IF - - IF opcion = "Adicionar" THEN - IF p_iptb57.bodega IS NULL THEN - CALL msg(16) - NEXT FIELD bodega - END IF - BEGIN WORK - SELECT a.numero_doc INTO secuencia FROM iptb00059 a - - IF STATUS = NOTFOUND THEN - INSERT INTO iptb00059( - numero_doc, us_mod, fech_mod) - VALUES(0, usuarios, getdate()) - END IF - LET secuencia = secuencia + 1 - LET p_iptb57.numero_doc = secuencia - - UPDATE iptb00059 - SET numero_doc = p_iptb57.numero_doc, - us_mod = usuarios, - fech_mod = getdate() - - LET subject = - subject CLIPPED, p_iptb57.numero_doc USING "&&&&&&&&" - - INSERT INTO iptb00057( - numero_doc, - fecha, - cod_mov, - num_oc, - tipo_cliente, - sec_cliente, - nombre, - bodega, - bodega_destino, - estado, - us_crea, - fech_crea, - observacion, - url_destino, - idestado) - VALUES(p_iptb57.numero_doc, - p_iptb57.fecha, - p_iptb57.cod_mov, - p_iptb57.num_oc, - p_iptb57.tipo_cliente, - p_iptb57.sec_cliente, - p_iptb57.cliente, - p_iptb57.bodega, - p_iptb57.bodega_destino, - xestado, - usuarios, - getdate(), - p_iptb57.observacion, - p_iptb57.url_file, - 5) - IF STATUS < 0 THEN - ROLLBACK WORK - RETURN - END IF - LET tieneDetalle = "NO" - FOR idx = 1 TO arr_iptb58.getLength() - IF arr_iptb58[idx].cantidad IS NOT NULL THEN - LET tieneDetalle = "SI" - IF arr_iptb58[idx].cantidad_1 - > arr_iptb58[idx].cantidad_o1 THEN - CALL msg(46) - NEXT FIELD cantidad_1 - END IF - - IF arr_iptb58[idx].area IS NULL THEN - ROLLBACK WORK - CALL msg(16) - NEXT FIELD area - END IF - INSERT INTO iptb00058( - numero_doc, - cod_mov, - area, - cod_n, - cod_grupo, - cod_tipo, - cod_Sec, - descripcion, - unidad_med, - cantidad_1, - cantidad_2, - us_crea, - fech_crea) - VALUES(p_iptb57.numero_doc, - p_iptb57.cod_mov, - arr_iptb58[idx].area, - arr_iptb58[idx].cod_n, - arr_iptb58[idx].cod_grupo, - arr_iptb58[idx].cod_tipo, - arr_iptb58[idx].cod_sec, - arr_iptb58[idx].descripcion, - arr_iptb58[idx].unidad_med, - arr_iptb58[idx].cantidad_1, - arr_iptb58[idx].cantidad, - usuarios, - getdate()) - IF STATUS < 0 THEN - ROLLBACK WORK - RETURN - END IF - - END IF - END FOR - #DESPIECE - - DELETE FROM iptb00060 - WHERE id_despiece = p_iptb57.numero_doc - - EXECUTE insertad USING p_iptb57.numero_doc, tmpnumero - - DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero - IF tieneDetalle = "SI" THEN - COMMIT WORK - CALL msg(1) - CALL buscarData() - CALL impdocumento(p_iptb57.numero_doc, p_iptb57.cod_mov) - CALL contenido() RETURNING cuerpo_correo - LET attachment = NULL - - # CALL enviaemail(toEmail,subject,cuerpo_correo,attachment,xusername,xsmtphost,xsmtpport,xpassword) - #RETURNING mensajes - - ELSE - ROLLBACK WORK - CALL msg(1663) - END IF - ELSE - LET subject = - subject CLIPPED, p_iptb57.numero_doc USING "&&&&&&&&" - BEGIN WORK - UPDATE iptb00057 - SET num_oc = p_iptb57.num_oc, - tipo_cliente = p_iptb57.tipo_cliente, - sec_cliente = p_iptb57.sec_cliente, - nombre = p_iptb57.cliente, - observacion = p_iptb57.observacion, - bodega = p_iptb57.bodega, - bodega_destino = p_iptb57.bodega_destino, - us_mod = usuarios, - fech_mod = getdate(), - url_destino = p_iptb57.url_file, - idestado = p_iptb57.idstado - WHERE numero_doc = p_iptb57.numero_doc - AND cod_mov = p_iptb57.cod_mov - - DELETE FROM iptb00058 - WHERE numero_doc = p_iptb57.numero_doc - AND cod_mov = p_iptb57.cod_mov - LET tieneDetalle = "NO" - FOR idx = 1 TO arr_iptb58.getLength() - IF arr_iptb58[idx].cantidad IS NOT NULL THEN - LET tieneDetalle = "SI" - IF arr_iptb58[idx].cantidad_1 - > arr_iptb58[idx].cantidad_o1 THEN - CALL msg(46) - NEXT FIELD cantidad_1 - END IF - IF arr_iptb58[idx].area IS NULL THEN - ROLLBACK WORK - CALL msg(16) - NEXT FIELD area - END IF - - INSERT INTO iptb00058( - numero_doc, - cod_mov, - area, - cod_n, - cod_grupo, - cod_tipo, - cod_Sec, - descripcion, - unidad_med, - cantidad_1, - cantidad_2, - us_crea, - fech_crea) - VALUES(p_iptb57.numero_doc, - p_iptb57.cod_mov, - arr_iptb58[idx].area, - arr_iptb58[idx].cod_n, - arr_iptb58[idx].cod_grupo, - arr_iptb58[idx].cod_tipo, - arr_iptb58[idx].cod_sec, - arr_iptb58[idx].descripcion, - arr_iptb58[idx].unidad_med, - arr_iptb58[idx].cantidad_1, - arr_iptb58[idx].cantidad, - usuarios, - getdate()) - - IF STATUS < 0 THEN - ROLLBACK WORK - RETURN - END IF - - END IF - END FOR - #DESPIECE - - DELETE FROM iptb00060 - WHERE id_despiece = p_iptb57.numero_doc - - EXECUTE insertad USING p_iptb57.numero_doc, tmpnumero - DELETE FROM tmpdespiece - WHERE id_despiece = p_iptb57.numero_doc - IF tieneDetalle = "SI" THEN - COMMIT WORK - CALL msg(13) - CALL buscarData() - CALL impdocumento(p_iptb57.numero_doc, p_iptb57.cod_mov) - - CALL contenido() RETURNING cuerpo_correo - # CALL enviaemail(Toemail,subject,cuerpo_correo,NULL,xusername,xsmtphost,xsmtpport,xpassword) - # RETURNING retorne - - ELSE - ROLLBACK WORK - CALL msg(1663) - END IF - - END IF - - END INPUT - ON ACTION CANCEL ATTRIBUTE(TEXT = "Salir", IMAGE = 'quit') - DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero - - EXIT DIALOG - - END DIALOG -END FUNCTION -# Devuelve la descripcion del primer item repetido (misma area, clase, grupo, -# tipo y medida) entre las lineas con cantidad; NULL si no hay repetidos. -FUNCTION itemRepetido() - DEFINE i, j INT - DEFINE texto STRING - - FOR i = 1 TO arr_iptb58.getLength() - IF arr_iptb58[i].cantidad IS NOT NULL THEN - FOR j = i + 1 TO arr_iptb58.getLength() - IF arr_iptb58[j].cantidad IS NOT NULL - AND arr_iptb58[j].area = arr_iptb58[i].area - AND arr_iptb58[j].cod_n = arr_iptb58[i].cod_n - AND arr_iptb58[j].cod_grupo = arr_iptb58[i].cod_grupo - AND arr_iptb58[j].cod_tipo = arr_iptb58[i].cod_tipo - AND arr_iptb58[j].cod_sec = arr_iptb58[i].cod_sec THEN - LET texto = arr_iptb58[i].cod_n USING "&&&&", "-", - arr_iptb58[i].cod_grupo USING "&&&&", "-", - arr_iptb58[i].cod_tipo USING "&&&&", "-", - arr_iptb58[i].cod_sec USING "&&&&&&", - " ", arr_iptb58[i].descripcion CLIPPED - RETURN texto - END IF - END FOR - END IF - END FOR - RETURN NULL -END FUNCTION - -FUNCTION anular() - DEFINE respuesta STRING - - SELECT DISTINCT a.numero_doc - FROM iptb00006 a - WHERE a.numero_doc = p_iptb57.numero_doc - AND a.cod_mov = p_iptb57.cod_mov - IF STATUS != NOTFOUND THEN - CALL msg(1014) - RETURN - END IF - DISPLAY "ANULAR: ", p_iptb57.numero_doc - LET respuesta = - fgl_winquestion( - "Borrar", - "Esta seguro de elminiar esta requisicion?", - "NO", - "YES|NO", - "QUESTION", - 0) - - IF respuesta = "YES" THEN - UPDATE iptb00057 - SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() - WHERE numero_doc = p_iptb57.numero_doc - AND cod_mov = p_iptb57.cod_mov - END IF -END FUNCTION - -FUNCTION producto() - DEFINE pcodn INT - SELECT a.descrip_esp, a.unidad_med, b.factor_conv, c.cod_n - INTO arr_iptb58[idx].descripcion, - arr_iptb58[idx].unidad_med, - arr_iptb58[idx].factor_conv, - pcodn - FROM iptb00002 a, - iptb00001 b - LEFT OUTER - JOIN iptb00027 c - ON c.cod_n = b.cod_n - AND c.cod_grupo = b.cod_grupo - AND c.cod_tipo = b.cod_tipo - AND c.cod_sec = b.cod_sec - WHERE a.cod_n = arr_iptb58[idx].cod_n - AND a.cod_grupo = arr_iptb58[idx].cod_grupo - AND a.cod_tipo = arr_iptb58[idx].cod_tipo - AND a.cod_sec = arr_iptb58[idx].cod_sec - AND a.cod_n = b.cod_n - AND a.cod_grupo = b.cod_grupo - AND a.cod_tipo = b.cod_tipo - AND a.cod_sec = b.cod_sec - - IF STATUS = NOTFOUND THEN - LET existe = FALSE - ELSE - - IF pcodn IS NOT NULL THEN - LET tienedespiece = TRUE - ELSE - LET tienedespiece = FALSE - END IF - LET existe = TRUE - END IF - -END FUNCTION - -FUNCTION contenido() - DEFINE xcuerpo1, xcuerpo2 STRING - LET xcuerpo1 = - " - - - " - LET xcuerpo1 = - xcuerpo1 CLIPPED, "

Solicitado por: ", nombreUsuario CLIPPED, "

" - - LET xcuerpo1 = xcuerpo1 CLIPPED, "

", nombreMov CLIPPED, "

" - IF p_iptb57.num_oc IS NOT NULL THEN - LET xcuerpo1 = - xcuerpo1 CLIPPED, - "

Orden:", - p_iptb57.num_oc USING "&&&&&&&&", - "

", - "

Cliente:", - p_iptb57.cliente CLIPPED, - "

" - END IF - LET xcuerpo1 = - xcuerpo1 CLIPPED, "

Bodega Origen:", nombreBodega CLIPPED, "

" - LET xcuerpo1 = - xcuerpo1 CLIPPED, - "", - "", - "", - "" - - END IF - END FOR - LET xcuerpo1 = xcuerpo1 CLIPPED, xcuerpo2 CLIPPED, "
ProductosUnidades cantidad" - FOR idx = 1 TO arr_iptb58.getLength() - IF arr_iptb58[idx].cod_sec IS NOT NULL THEN - LET xcuerpo2 = - xcuerpo2 CLIPPED, - "
", - arr_iptb58[idx].descripcion CLIPPED, - "", - arr_iptb58[idx].cantidad_1 USING "##,###.##", - "", - arr_iptb58[idx].cantidad USING "##,###.##", - "
" - RETURN xcuerpo1 -END FUNCTION -FUNCTION emailbodegas() - DEFINE - xemailadd, remailadd STRING, - jj INT - - DECLARE bemails CURSOR FOR - SELECT b.email FROM seg0001 b WHERE b.bodega = p_iptb57.bodega - - LET remailadd = NULL - LET jj = 1 - FOREACH bemails INTO xemailadd - - IF xemailadd IS NOT NULL THEN - LET remailadd = xemailadd CLIPPED, ",", remailadd - END IF - LET jj = jj + 1 - END FOREACH - - RETURN remailadd -END FUNCTION - -FUNCTION despiece() - DEFINE - cetiqueta VARCHAR(20), - - idx1, curr2 INT - - OPEN WINDOW wdespiece - AT 5, 3 - WITH FORM "ipfmwd010" - ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST) - - DISPLAY arr_iptb58[idx].descripcion TO descrip_esp - DISPLAY arr_iptb58[idx].unidad_med TO unidad_med - CALL despiece.clear() - - IF opcion = "Adicionar" THEN - - DECLARE busca_despiece CURSOR FOR - SELECT a.id_etiqueta, - a.lado_1, - a.lado_2, - a.lado_3, - a.cantidad, - a.medida, - a.secuencia, - a.cod_n, - a.cod_grupo, - a.cod_tipo, - a.cod_sec - FROM tmpdespiece a, vetb00026 b - WHERE a.id_despiece = tmpnumero - AND a.id_etiqueta = b.codid - AND a.cod_n = dcodn - AND a.cod_grupo = dcodgrupo - AND a.cod_tipo = dcodtipo - AND a.cod_sec = dcodsec - - LET total_cantidad = 0 - LET idx1 = 1 - FOREACH busca_despiece - INTO despiece[idx1].id_etiqueta, - despiece[idx1].lado_1, - despiece[idx1].lado_2, - despiece[idx1].lado_3, - despiece[idx1].cantidad, - despiece[idx1].medida, - despiece[idx1].secuencia, - despiece[idx1].cod_n, - despiece[idx1].cod_grupo, - despiece[idx1].cod_tipo, - despiece[idx1].cod_sec - - LET total_cantidad = total_cantidad + despiece[idx1].cantidad - - LET idx1 = idx1 + 1 - END FOREACH - ELSE - DECLARE busca_despiecem CURSOR FOR - SELECT a.id_etiqueta, - a.lado_1, - a.lado_2, - a.lado_3, - a.cantidad, - a.medida, - a.secuencia, - a.cod_n, - a.cod_grupo, - a.cod_tipo, - a.cod_sec - FROM iptb00060 a, vetb00026 b - WHERE a.id_despiece = p_iptb57.numero_doc - AND a.id_etiqueta = b.codid - AND a.cod_n = dcodn - AND a.cod_grupo = dcodgrupo - AND a.cod_tipo = dcodtipo - AND a.cod_sec = dcodsec - - LET total_cantidad = 0 - LET idx1 = 1 - LET tmpnumero = p_iptb57.numero_doc - FOREACH busca_despiecem - INTO despiece[idx1].id_etiqueta, - despiece[idx1].lado_1, - despiece[idx1].lado_2, - despiece[idx1].lado_3, - despiece[idx1].cantidad, - despiece[idx1].medida, - despiece[idx1].secuencia, - despiece[idx1].cod_n, - despiece[idx1].cod_grupo, - despiece[idx1].cod_tipo, - despiece[idx1].cod_sec - - LET total_cantidad = total_cantidad + despiece[idx1].cantidad - - LET idx1 = idx1 + 1 - END FOREACH - - END IF - DISPLAY BY NAME total_cantidad - - INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.* - BEFORE INPUT - CALL cetiquetas() - BEFORE ROW - LET curr2 = arr_curr() - LET fila = scr_line() - - CALL cetiquetas() - - IF curr2 > 1 THEN - IF despiece[curr2].id_etiqueta IS NULL THEN - LET despiece[curr2].id_etiqueta = - despiece[curr2 - 1].id_etiqueta - END IF - END IF - IF opcion = "Adicionar" THEN - IF despiece[curr2].cod_sec IS NULL THEN - LET despiece[curr2].cod_n = dcodn - LET despiece[curr2].cod_grupo = dcodgrupo - LET despiece[curr2].cod_tipo = dcodtipo - LET despiece[curr2].cod_sec = dcodsec - - LET despiece[curr2].secuencia = curr2 - END IF - END IF - - AFTER FIELD etiqueta - LET despiece[curr2].cod_n = dcodn - LET despiece[curr2].cod_grupo = dcodgrupo - LET despiece[curr2].cod_tipo = dcodtipo - LET despiece[curr2].cod_sec = dcodsec - - DISPLAY despiece[curr2].cod_n TO sdespiece[fila].cod_n - DISPLAY despiece[curr2].cod_grupo TO sdespiece[fila].cod_grupo - DISPLAY despiece[curr2].cod_tipo TO sdespiece[fila].cod_tipo - DISPLAY despiece[curr2].cod_sec TO sdespiece[fila].cod_sec - - AFTER FIELD cantidad - - IF arr_iptb58[idx].unidad_med = "M2" THEN - LET despiece[curr2].medida = - despiece[curr2].cantidad - * (despiece[curr2].lado_1 * despiece[curr2].lado_2) - END IF - - IF arr_iptb58[idx].unidad_med = "M3" THEN - LET despiece[curr2].medida = - despiece[curr2].cantidad - * (despiece[curr2].lado_1 - * despiece[curr2].lado_2 - * despiece[curr2].lado_3) - END IF - - IF arr_iptb58[idx].unidad_med = "ML" THEN - LET despiece[curr2].medida = - despiece[curr2].cantidad * despiece[curr2].lado_1 - LET despiece[curr2].lado_2 = 0 - END IF - - IF arr_iptb58[idx].unidad_med = "UD" - OR arr_iptb58[idx].unidad_med = "GL" THEN - LET despiece[curr2].medida = despiece[curr2].cantidad - END IF - DISPLAY despiece[curr2].medida TO sdespiece[fila].medida - AFTER ROW - IF despiece[curr2].medida IS NULL - AND despiece[curr2].lado_1 IS NOT NULL THEN - LET numero_msg = 16 - CALL msg(numero_msg) - NEXT FIELD lado_1 - END IF - LET total_medida = 0 - LET total_cantidad = 0 - FOR idx1 = 1 TO despiece.getLength() - IF despiece[idx1].medida IS NOT NULL THEN - LET total_cantidad = - total_cantidad + despiece[idx1].cantidad - LET total_medida = total_medida + despiece[idx1].medida - END IF - - END FOR - DISPLAY BY NAME total_medida, total_cantidad - - AFTER INPUT - IF int_flag THEN - LET numero_msg = 2 - CALL msg(numero_msg) - EXIT INPUT - END IF - LET total_medida = 0 - LET total_cantidad = 0 - FOR idx1 = 1 TO despiece.getLength() - IF despiece[idx1].medida IS NOT NULL THEN - LET total_medida = total_medida + despiece[idx1].medida - LET total_cantidad = - total_cantidad + despiece[idx1].cantidad - END IF - END FOR - DISPLAY BY NAME total_medida, total_cantidad - END INPUT - IF int_flag THEN - LET int_flag = FALSE - CLOSE WINDOW wdespiece - RETURN - END IF - - DELETE FROM tmpdespiece - WHERE id_despiece = tmpnumero - AND cod_n = dcodn - AND cod_grupo = dcodgrupo - AND cod_tipo = dcodtipo - AND cod_sec = dcodsec - LET total_medida = 0 - FOR idx1 = 1 TO despiece.getLength() - - IF despiece[idx1].medida IS NOT NULL THEN - LET despiece[idx1].secuencia = idx1 - INSERT INTO tmpdespiece( - id_etiqueta, - id_despiece, - cod_n, - cod_grupo, - cod_tipo, - cod_sec, - lado_1, - lado_2, - lado_3, - cantidad, - medida, - secuencia, - bodega) - VALUES(despiece[idx1].id_etiqueta, - tmpnumero, - despiece[idx1].cod_n, - despiece[idx1].cod_grupo, - despiece[idx1].cod_tipo, - despiece[idx1].cod_sec, - despiece[idx1].lado_1, - despiece[idx1].lado_2, - despiece[idx1].lado_3, - despiece[idx1].cantidad, - despiece[idx1].medida, - despiece[idx1].secuencia, - p_iptb57.bodega) - - LET total_medida = total_medida + despiece[idx1].medida - END IF - END FOR - LET arr_iptb58[idx].cantidad_1 = total_medida - - CLOSE WINDOW wdespiece -END FUNCTION +{ + PROGRAMA: ipprmt020.4 + OBEJETIVO: Administrar de una forma digital los requerimientos que se realizan a los diferentes + almacenes + DESARROLLADO POR: ING. JUAN SOTO + FECHA DESARROLLO: ABRIL 21, 2022 + + +} +IMPORT os +GLOBALS "ipprgb000.4gl" + +DEFINE Toemail, + subject, + cuerpo_correo, + xusername, + xsmtphost, + xsmtpport, + xpassword, + emailadd, + retorne + STRING +DEFINE descRepetido, respuesta STRING + +DEFINE + d_tipos, + mensaje, + f_tipos, + filepath, + extension, + xdestino, + l_file, + tmpdir_file, + dir_file, + url_destino, + attachment + STRING, + tmpnumero, dcodn, dcodgrupo, dcodtipo, dcodsec INT + +MAIN + DEFER INTERRUPT + CALL ARG_VAL(1) RETURNING usuarios + CALL ARG_VAL(2) RETURNING clave + + CONNECT TO "smarmotech" USER usuarios USING clave + LET url_destino = fgl_getenv("URLIMAGENES") + + CALL usuarioSistema(usuarios) RETURNING nombreUsuario, email + CALL ipprmt020() +END MAIN +FUNCTION ipprmt020() + + OPEN WINDOW w1 WITH FORM "ipfmmt020" + DIALOG ATTRIBUTE(UNBUFFERED) + DISPLAY ARRAY arr_busqueda TO busqueda.* + BEFORE DISPLAY + LET toemail = email + LET xtiene = 'NO' + SELECT from_address, puerto, nombre_servidor, clave + INTO xusername, xsmtpport, xsmtphost, xpassword + FROM tbperfil_mail + WHERE cod_perfil = 2 + + # LET xusername ='notificacion@marmotech.com.do' + # LET xsmtphost ='smtp.office365.com' + # LET xsmtpport = '587' + # LET xpassword = 'Lmmjvsd2020' + CALL buscarData() + ON ACTION nuevo ATTRIBUTE(TEXT = "Nuevo", IMAGE = "new") + INITIALIZE p_iptb57.* TO NULL + CALL arr_iptb58.clear() + CLEAR FORM + + LET tmpnumero = 0 + SELECT a.num_doc + INTO tmpnumero + FROM iptb00043 a + WHERE usuario = usuarios + + IF STATUS = NOTFOUND THEN + INSERT INTO iptb00043 VALUES(1, usuarios) + LET tmpnumero = 1 + ELSE + LET tmpnumero = tmpnumero + 1 + UPDATE iptb00043 + SET num_doc = tmpnumero + WHERE usuario = usuarios + END IF + + LET opcion = "Adicionar" + LET subject = 'CREACION REQUISICION PARA ALMACEN NO.' + CALL entradas() + + { ON ACTION editar ATTRIBUTE(TEXT="Editar",IMAGE="edit") + LET opcion="Actualializar" + LET p_iptb57.numero_doc = arr_busqueda[arr_curr()].numeroid + LET p_iptb57.estado = arr_busqueda[arr_curr()].estadp1 + DISPLAY BY NAME p_iptb57.numero_doc,p_iptb57.estado + SELECT DISTINCT a.numero_doc FROM iptb00006 a + WHERE a.numero_doc = p_iptb57.numero_doc AND + a.cod_mov = p_iptb57.cod_mov + IF STATUS != NOTFOUND THEN + CALL msg(1014) + CONTINUE DIALOG + END IF + LET subject = 'MODIFICACION REQUISICION PARA ALMACEN NO.' + CALL buscadoc(arr_busqueda[arr_curr()].numeroid,arr_busqueda[arr_curr()].cod_mov ) RETURNING p_iptb57.*,arr_iptb58 + CALL entradas()} + ON ACTION anular ATTRIBUTE(TEXT = "Anular", IMAGE = "garbage") + LET p_iptb57.numero_doc = arr_busqueda[arr_curr()].numeroid + LET p_iptb57.cod_mov = arr_busqueda[arr_curr()].cod_mov + CALL anular() + CALL buscarData() + ON ACTION imprimir ATTRIBUTE(TEXT = "Imprimir", IMAGE = "printer") + + CALL buscadoc( + arr_busqueda[arr_curr()].numeroid, + arr_busqueda[arr_curr()].cod_mov) + RETURNING p_iptb57.*, arr_iptb58 + CALL impdocumento( + arr_busqueda[arr_curr()].numeroid, + arr_busqueda[arr_curr()].cod_mov) + ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancelar", IMAGE = "quit") + RETURN + + END DISPLAY + END DIALOG + CLOSE WINDOW w1 +END FUNCTION + +FUNCTION buscardata() + DEFINE i INT + + DECLARE buscardata CURSOR FOR + SELECT b.estado, + f.descripcion, + CAST(a.cod_mov AS VARCHAR(10)) || ' ' || a.descrip_mov, + b.numero_doc, + b.fecha, + c.nombre, + b.observacion, + d.descripcion, + ' ', + b.cod_mov, + b.bodega, + b.bodega_destino + FROM iptb00005 a, + iptb00057 b INNER JOIN iptb00061 f ON b.idestado = f.idestado + LEFT OUTER + JOIN vetb00004 c + ON c.tipo_cliente = b.tipo_cliente + AND c.sec_cliente = b.sec_cliente, + intb00009 d + WHERE a.cod_mov = b.cod_mov + AND b.bodega = d.cod_bodega + AND b.us_crea = usuarios + AND b.status_t IS NULL + + CALL arr_busqueda.clear() + LET i = 1 + FOREACH buscardata INTO arr_busqueda[i].* + LET p_iptb57.cod_mov = arr_busqueda[i].cod_mov + LET p_iptb57.num_oc = arr_busqueda[i].numeroid + + IF arr_busqueda[i].bodega2 IS NOT NULL THEN + SELECT a.descripcion + INTO arr_busqueda[i].bodega_destino + FROM intb00009 a + WHERE a.cod_bodega = arr_busqueda[i].bodega2 + END IF + LET i = i + 1 + END FOREACH +END FUNCTION +FUNCTION codigomov() + DEFINE + ketiquetas SMALLINT, + detiquetas STRING + + LET cbmovimiento = ui.combobox.forname("formonly.cod_mov") + DECLARE bmovimiento_t CURSOR FOR + SELECT a.cod_mov, + RTRIM(a.descrip_mov) || '(' || CAST(a.cod_mov AS VARCHAR(6)) || ')' + FROM iptb00005 a + WHERE a.requisiciones = "SI" + ORDER BY a.descrip_mov + CALL cbmovimiento.clear() + + FOREACH bmovimiento_t INTO ketiquetas, detiquetas + CALL cbmovimiento.additem(ketiquetas, detiquetas) + END FOREACH + +END FUNCTION +FUNCTION entradas() + DIALOG ATTRIBUTE(UNBUFFERED) + + INPUT BY NAME p_iptb57.cod_mov, + p_iptb57.num_oc, + p_iptb57.observacion, + p_iptb57.bodega, + p_iptb57.bodega_destino, + p_iptb57.url_file + ATTRIBUTE(WITHOUT DEFAULTS) + ON ACTION abrirdocumento + IF p_iptb57.url_file IS NOT NULL THEN + CALL ui.Interface.frontCall( + "standard", "launchURL", [p_iptb57.url_file], []) + END IF + ON ACTION atardocumento + + CALL ui.Interface.frontCall( + "standard", + "openfile", + [dir_file, d_tipos, f_tipos, mensaje], + [filepath]) + + IF filepath IS NOT NULL THEN + IF downshift(os.Path.extension(filepath)) = "pdf" + OR downshift(os.Path.extension(filepath)) = "jpg" + OR downshift(os.Path.extension(filepath)) = "xls" + OR downshift(os.Path.extension(filepath)) = "xlsx" + OR downshift(os.Path.extension(filepath)) = "doc" + OR downshift(os.Path.extension(filepath)) = "docx" + OR downshift(os.Path.extension(filepath)) = "png" THEN + LET dir_file = os.Path.basename(filepath) + LET tmpdir_file = dir_file + + LET dir_file = + fgl_getenv("IMAGENES"), "\\", dir_file CLIPPED + DISPLAY "imagenes ", dir_file + CALL fgl_getfile(filepath, dir_file) + + LET p_iptb57.url_file = + url_destino CLIPPED, "/", tmpdir_file CLIPPED + + ELSE + CALL fgl_winmessage( + "ERROR", "EL FILE DEBE SER PDF, JPG, PNG", "INFO") + END IF + END IF + BEFORE INPUT + + LET d_tipos = "PDF" + LET f_tipos = "*.pdf *.jpg *.png, *.xls, *.xlsx, *.doc, *.docx" + LET mensaje = %"Elige Documento" + + LET selec = + "INSERT INTO iptb00060(id_etiqueta,id_despiece,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3, + cantidad,medida,secuencia,bodega) + SELECT id_etiqueta,?,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3, + cantidad,medida,secuencia,bodega + FROM tmpdespiece WHERE id_despiece = ?" + + PREPARE insertad FROM selec + + DISPLAY BY NAME nombreUsuario, email + CALL codigomov() + CALL bodegas('2') + + IF opcion = "Adicionar" THEN + LET p_iptb57.fecha = TODAY + ELSE + IF p_iptb57.estado = 'AUTORIZADA' THEN + CALL msg(1004) + EXIT DIALOG + END IF + END IF + DISPLAY BY NAME p_iptb57.fecha + IF p_iptb57.num_oc IS NOT NULL THEN + LET ordenPedidos = TRUE + ELSE + LET ordenPedidos = FALSE + END IF + AFTER FIELD num_oc + IF p_iptb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN + + SELECT a.tipo_cliente, a.sec_cliente, b.nombre + INTO p_iptb57.tipo_cliente, + p_iptb57.sec_cliente, + p_iptb57.cliente + FROM prtb00012 a, vetb00004 b + WHERE a.tipo_cliente = b.tipo_cliente + AND a.sec_cliente = b.sec_cliente + AND a.cerrada = 'N' + AND a.num_oc = p_iptb57.num_oc + AND a.status_t IS NULL + + IF STATUS = NOTFOUND THEN + CALL msg(3) + NEXT FIELD num_oc + END IF + DISPLAY BY NAME p_iptb57.tipo_cliente, + p_iptb57.sec_cliente, + p_iptb57.cliente + END IF + AFTER FIELD cod_mov + IF p_iptb57.cod_mov IS NOT NULL THEN + LET nombreMov = + ui.ComboBox.forName('formonly.cod_mov') + .getTextOf(p_iptb57.cod_mov) + + SELECT a.requiere_autorizacion, a.control_transferencia + INTO requiere, transacc.control_transferencia + FROM iptb00005 a + WHERE a.cod_mov = p_iptb57.cod_mov + + IF requiere = "NO" THEN + LET xestado = 'AUTORIZADA' + ELSE + LET xestado = 'NO AUTORIZADA' + END IF + END IF + AFTER FIELD bodega + IF p_iptb57.bodega IS NOT NULL THEN + LET nombreBodega = + ui.ComboBox.forName('formonly.bodega') + .getTextOf(p_iptb57.bodega) + CALL emailbodegas() RETURNING emailadd + END IF + AFTER FIELD bodega_destino + IF p_iptb57.bodega_destino IS NOT NULL THEN + LET nombreBodegaDestino = + ui.ComboBox.forName('formonly.bodega_destino') + .getTextOf(p_iptb57.bodega_destino) + END IF + + AFTER INPUT + IF p_iptb57.bodega IS NULL THEN + + CALL msg(16) + NEXT FIELD bodega + END IF + + IF p_iptb57.bodega IS NOT NULL THEN + LET nombreBodega = + ui.ComboBox.forName('formonly.bodega') + .getTextOf(p_iptb57.bodega) + CALL emailbodegas() RETURNING emailadd + END IF + + IF transacc.control_transferencia = "SI" THEN + IF p_iptb57.bodega_destino IS NULL THEN + CALL msg(16) + NEXT FIELD bodega_destino + END IF + END IF + IF p_iptb57.num_oc IS NOT NULL THEN + + SELECT a.tipo_cliente, a.sec_cliente, b.nombre + INTO p_iptb57.tipo_cliente, p_iptb57.sec_cliente + FROM prtb00012 a, vetb00004 b + WHERE a.tipo_cliente = b.tipo_cliente + AND a.sec_cliente = b.sec_cliente + AND a.cerrada = 'N' + AND a.num_oc = p_iptb57.num_oc + AND a.status_t IS NULL + + IF STATUS = NOTFOUND THEN + CALL msg(3) + NEXT FIELD num_oc + END IF + DISPLAY BY NAME p_iptb57.tipo_cliente, + p_iptb57.sec_cliente, + p_iptb57.cliente + IF p_iptb57.cod_mov IS NOT NULL THEN + LET nombreMov = + ui.ComboBox.forName('formonly.cod_mov') + .getTextOf(p_iptb57.cod_mov) + END IF + + IF p_iptb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN + LET idx = 1 + + DECLARE buscaOrden CURSOR FOR + SELECT a.area, + a.cod_n, + a.cod_grupo, + a.cod_tipo, + a.cod_sec, + b.descrip_esp, + b.unidad_med, + c.cantidad_1, + c.cantidad, + c.cantidad_1, + c.cantidad, + d.factor_conv + FROM prtb00013 a, + iptb00002 b, + prtb00023 c, + iptb00001 d + WHERE a.num_oc = p_iptb57.num_oc + AND a.num_oc = c.num_oc + AND a.area = c.area + AND (a.cod_n = b.cod_n + AND a.cod_grupo = b.cod_grupo + AND a.cod_tipo = b.cod_tipo + AND a.cod_sec = b.cod_sec) + AND (a.cod_n = c.cod_n + AND a.cod_grupo = c.cod_grupo + AND a.cod_tipo = c.cod_tipo + AND a.cod_sec = c.cod_sec) + AND (a.cod_n = d.cod_n + AND a.cod_grupo = d.cod_grupo + AND a.cod_tipo = d.cod_tipo + AND a.cod_sec = d.cod_sec) + + FOREACH buscaOrden INTO arr_iptb58[idx].* + LET idx = idx + 1 + END FOREACH + END IF + END IF + END INPUT + + INPUT ARRAY arr_iptb58 FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS) + ON ACTION buscar + LET idx = arr_curr() + LET scr_l = scr_line() + CALL busca_prod( + '02') + RETURNING arr_iptb58[idx].cod_n, + arr_iptb58[idx].cod_grupo, + arr_iptb58[idx].cod_tipo, + arr_iptb58[idx].cod_sec, + arr_iptb58[idx].descripcion + CALL producto() + IF tienedespiece THEN + LET dcodn = arr_iptb58[idx].cod_n + LET dcodgrupo = arr_iptb58[idx].cod_grupo + LET dcodtipo = arr_iptb58[idx].cod_tipo + LET dcodsec = arr_iptb58[idx].cod_sec + CALL despiece() + END IF + NEXT FIELD cantidad_1 + ON ACTION despiece ATTRIBUTE(TEXT = "Despiece", IMAGE = "") + LET idx = arr_curr() + CALL producto() + IF tienedespiece THEN + LET dcodn = arr_iptb58[idx].cod_n + LET dcodgrupo = arr_iptb58[idx].cod_grupo + LET dcodtipo = arr_iptb58[idx].cod_tipo + LET dcodsec = arr_iptb58[idx].cod_sec + + CALL despiece() + END IF + NEXT FIELD cantidad_1 + + BEFORE ROW + LET idx = arr_curr() + IF arr_iptb58[idx].area IS NULL THEN + LET arr_iptb58[idx].area = 1 + END IF + DISPLAY arr_iptb58[idx].area TO sdetalle[scr_line()].area + AFTER FIELD cod_Sec + LET idx = arr_curr() + IF arr_iptb58[idx].cod_sec IS NOT NULL THEN + CALL producto() + IF NOT existe THEN + CALL msg(3) + NEXT FIELD cod_sec + END IF + IF tienedespiece THEN + LET dcodn = arr_iptb58[idx].cod_n + LET dcodgrupo = arr_iptb58[idx].cod_grupo + LET dcodtipo = arr_iptb58[idx].cod_tipo + LET dcodsec = arr_iptb58[idx].cod_sec + + CALL despiece() + END IF + + IF p_iptb57.num_oc IS NOT NULL THEN + SELECT DISTINCT a.cod_sec + FROM prtb00013 a + WHERE a.num_oc = p_iptb57.num_oc + AND a.cod_n = arr_iptb58[idx].cod_n + AND a.cod_grupo = arr_iptb58[idx].cod_grupo + AND a.cod_tipo = arr_iptb58[idx].cod_tipo + AND a.cod_sec = arr_iptb58[idx].cod_sec + IF STATUS = NOTFOUND THEN + CALL msg(397) + NEXT FIELD cod_Sec + END IF + END IF + END IF + AFTER FIELD cantidad_1 + + IF arr_iptb58[idx].cantidad_1 IS NOT NULL THEN + + IF arr_iptb58[idx].cantidad_1 + > arr_iptb58[idx].cantidad_o1 THEN + CALL msg(46) + NEXT FIELD cantidad_1 + END IF + LET arr_iptb58[idx].cantidad = + arr_iptb58[idx].cantidad_1 * arr_iptb58[idx].factor_conv + DISPLAY arr_iptb58[idx].cantidad TO sdetalle[scr_l].cantidad + END IF + ON ACTION guardar ATTRIBUTE(TEXT = opcion, IMAGE = "save") + # Un item no puede repetirse en la requisicion (aunque cambie el area) + LET descRepetido = itemRepetido() + IF descRepetido IS NOT NULL THEN + CALL fgl_winmessage( + "ERROR", + "El item " || descRepetido CLIPPED + || " esta repetido en el detalle. Deje una sola linea por item.", + "stop") + CONTINUE DIALOG + END IF + IF p_iptb57.bodega IS NOT NULL THEN + LET nombreBodega = + ui.ComboBox.forName('formonly.bodega') + .getTextOf(p_iptb57.bodega) + END IF + IF transacc.control_transferencia = "SI" THEN + IF p_iptb57.bodega_destino IS NULL THEN + CALL msg(16) + NEXT FIELD bodega_destino + END IF + END IF + + IF p_iptb57.bodega_destino IS NOT NULL THEN + LET nombreBodegaDestino = + ui.ComboBox.forName('formonly.bodega_destino') + .getTextOf(p_iptb57.bodega_destino) + END IF + IF emailadd IS NOT NULL THEN + LET Toemail = toemail CLIPPED, ",", emailadd CLIPPED + ELSE + LET Toemail = toemail CLIPPED + END IF + + IF opcion = "Adicionar" THEN + IF p_iptb57.bodega IS NULL THEN + CALL msg(16) + NEXT FIELD bodega + END IF + BEGIN WORK + SELECT a.numero_doc INTO secuencia FROM iptb00059 a + + IF STATUS = NOTFOUND THEN + INSERT INTO iptb00059( + numero_doc, us_mod, fech_mod) + VALUES(0, usuarios, getdate()) + END IF + LET secuencia = secuencia + 1 + LET p_iptb57.numero_doc = secuencia + + UPDATE iptb00059 + SET numero_doc = p_iptb57.numero_doc, + us_mod = usuarios, + fech_mod = getdate() + + LET subject = + subject CLIPPED, p_iptb57.numero_doc USING "&&&&&&&&" + + INSERT INTO iptb00057( + numero_doc, + fecha, + cod_mov, + num_oc, + tipo_cliente, + sec_cliente, + nombre, + bodega, + bodega_destino, + estado, + us_crea, + fech_crea, + observacion, + url_destino, + idestado) + VALUES(p_iptb57.numero_doc, + p_iptb57.fecha, + p_iptb57.cod_mov, + p_iptb57.num_oc, + p_iptb57.tipo_cliente, + p_iptb57.sec_cliente, + p_iptb57.cliente, + p_iptb57.bodega, + p_iptb57.bodega_destino, + xestado, + usuarios, + getdate(), + p_iptb57.observacion, + p_iptb57.url_file, + 5) + IF STATUS < 0 THEN + ROLLBACK WORK + RETURN + END IF + LET tieneDetalle = "NO" + FOR idx = 1 TO arr_iptb58.getLength() + IF arr_iptb58[idx].cantidad IS NOT NULL THEN + LET tieneDetalle = "SI" + IF arr_iptb58[idx].cantidad_1 + > arr_iptb58[idx].cantidad_o1 THEN + CALL msg(46) + NEXT FIELD cantidad_1 + END IF + + IF arr_iptb58[idx].area IS NULL THEN + ROLLBACK WORK + CALL msg(16) + NEXT FIELD area + END IF + INSERT INTO iptb00058( + numero_doc, + cod_mov, + area, + cod_n, + cod_grupo, + cod_tipo, + cod_Sec, + descripcion, + unidad_med, + cantidad_1, + cantidad_2, + us_crea, + fech_crea) + VALUES(p_iptb57.numero_doc, + p_iptb57.cod_mov, + arr_iptb58[idx].area, + arr_iptb58[idx].cod_n, + arr_iptb58[idx].cod_grupo, + arr_iptb58[idx].cod_tipo, + arr_iptb58[idx].cod_sec, + arr_iptb58[idx].descripcion, + arr_iptb58[idx].unidad_med, + arr_iptb58[idx].cantidad_1, + arr_iptb58[idx].cantidad, + usuarios, + getdate()) + IF STATUS < 0 THEN + ROLLBACK WORK + RETURN + END IF + + END IF + END FOR + #DESPIECE + + DELETE FROM iptb00060 + WHERE id_despiece = p_iptb57.numero_doc + + EXECUTE insertad USING p_iptb57.numero_doc, tmpnumero + + DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero + IF tieneDetalle = "SI" THEN + COMMIT WORK + CALL msg(1) + CALL buscarData() + CALL impdocumento(p_iptb57.numero_doc, p_iptb57.cod_mov) + CALL contenido() RETURNING cuerpo_correo + LET attachment = NULL + + # CALL enviaemail(toEmail,subject,cuerpo_correo,attachment,xusername,xsmtphost,xsmtpport,xpassword) + #RETURNING mensajes + + ELSE + ROLLBACK WORK + CALL msg(1663) + END IF + ELSE + LET subject = + subject CLIPPED, p_iptb57.numero_doc USING "&&&&&&&&" + BEGIN WORK + UPDATE iptb00057 + SET num_oc = p_iptb57.num_oc, + tipo_cliente = p_iptb57.tipo_cliente, + sec_cliente = p_iptb57.sec_cliente, + nombre = p_iptb57.cliente, + observacion = p_iptb57.observacion, + bodega = p_iptb57.bodega, + bodega_destino = p_iptb57.bodega_destino, + us_mod = usuarios, + fech_mod = getdate(), + url_destino = p_iptb57.url_file, + idestado = p_iptb57.idstado + WHERE numero_doc = p_iptb57.numero_doc + AND cod_mov = p_iptb57.cod_mov + + DELETE FROM iptb00058 + WHERE numero_doc = p_iptb57.numero_doc + AND cod_mov = p_iptb57.cod_mov + LET tieneDetalle = "NO" + FOR idx = 1 TO arr_iptb58.getLength() + IF arr_iptb58[idx].cantidad IS NOT NULL THEN + LET tieneDetalle = "SI" + IF arr_iptb58[idx].cantidad_1 + > arr_iptb58[idx].cantidad_o1 THEN + CALL msg(46) + NEXT FIELD cantidad_1 + END IF + IF arr_iptb58[idx].area IS NULL THEN + ROLLBACK WORK + CALL msg(16) + NEXT FIELD area + END IF + + INSERT INTO iptb00058( + numero_doc, + cod_mov, + area, + cod_n, + cod_grupo, + cod_tipo, + cod_Sec, + descripcion, + unidad_med, + cantidad_1, + cantidad_2, + us_crea, + fech_crea) + VALUES(p_iptb57.numero_doc, + p_iptb57.cod_mov, + arr_iptb58[idx].area, + arr_iptb58[idx].cod_n, + arr_iptb58[idx].cod_grupo, + arr_iptb58[idx].cod_tipo, + arr_iptb58[idx].cod_sec, + arr_iptb58[idx].descripcion, + arr_iptb58[idx].unidad_med, + arr_iptb58[idx].cantidad_1, + arr_iptb58[idx].cantidad, + usuarios, + getdate()) + + IF STATUS < 0 THEN + ROLLBACK WORK + RETURN + END IF + + END IF + END FOR + #DESPIECE + + DELETE FROM iptb00060 + WHERE id_despiece = p_iptb57.numero_doc + + EXECUTE insertad USING p_iptb57.numero_doc, tmpnumero + DELETE FROM tmpdespiece + WHERE id_despiece = p_iptb57.numero_doc + IF tieneDetalle = "SI" THEN + COMMIT WORK + CALL msg(13) + CALL buscarData() + CALL impdocumento(p_iptb57.numero_doc, p_iptb57.cod_mov) + + CALL contenido() RETURNING cuerpo_correo + # CALL enviaemail(Toemail,subject,cuerpo_correo,NULL,xusername,xsmtphost,xsmtpport,xpassword) + # RETURNING retorne + + ELSE + ROLLBACK WORK + CALL msg(1663) + END IF + + END IF + + END INPUT + ON ACTION CANCEL ATTRIBUTE(TEXT = "Salir", IMAGE = 'quit') + DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero + + EXIT DIALOG + + END DIALOG +END FUNCTION +# Devuelve la descripcion del primer item repetido (misma clase, grupo, tipo y +# medida, sin importar el area) entre las lineas con cantidad; NULL si no hay. +FUNCTION itemRepetido() + DEFINE i, j INT + DEFINE texto STRING + + FOR i = 1 TO arr_iptb58.getLength() + IF arr_iptb58[i].cantidad IS NOT NULL THEN + FOR j = i + 1 TO arr_iptb58.getLength() + IF arr_iptb58[j].cantidad IS NOT NULL + AND arr_iptb58[j].cod_n = arr_iptb58[i].cod_n + AND arr_iptb58[j].cod_grupo = arr_iptb58[i].cod_grupo + AND arr_iptb58[j].cod_tipo = arr_iptb58[i].cod_tipo + AND arr_iptb58[j].cod_sec = arr_iptb58[i].cod_sec THEN + LET texto = arr_iptb58[i].cod_n USING "&&&&", "-", + arr_iptb58[i].cod_grupo USING "&&&&", "-", + arr_iptb58[i].cod_tipo USING "&&&&", "-", + arr_iptb58[i].cod_sec USING "&&&&&&", + " ", arr_iptb58[i].descripcion CLIPPED + RETURN texto + END IF + END FOR + END IF + END FOR + RETURN NULL +END FUNCTION + +FUNCTION anular() + DEFINE respuesta STRING + + SELECT DISTINCT a.numero_doc + FROM iptb00006 a + WHERE a.numero_doc = p_iptb57.numero_doc + AND a.cod_mov = p_iptb57.cod_mov + IF STATUS != NOTFOUND THEN + CALL msg(1014) + RETURN + END IF + DISPLAY "ANULAR: ", p_iptb57.numero_doc + LET respuesta = + fgl_winquestion( + "Borrar", + "Esta seguro de elminiar esta requisicion?", + "NO", + "YES|NO", + "QUESTION", + 0) + + IF respuesta = "YES" THEN + UPDATE iptb00057 + SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() + WHERE numero_doc = p_iptb57.numero_doc + AND cod_mov = p_iptb57.cod_mov + END IF +END FUNCTION + +FUNCTION producto() + DEFINE pcodn INT + SELECT a.descrip_esp, a.unidad_med, b.factor_conv, c.cod_n + INTO arr_iptb58[idx].descripcion, + arr_iptb58[idx].unidad_med, + arr_iptb58[idx].factor_conv, + pcodn + FROM iptb00002 a, + iptb00001 b + LEFT OUTER + JOIN iptb00027 c + ON c.cod_n = b.cod_n + AND c.cod_grupo = b.cod_grupo + AND c.cod_tipo = b.cod_tipo + AND c.cod_sec = b.cod_sec + WHERE a.cod_n = arr_iptb58[idx].cod_n + AND a.cod_grupo = arr_iptb58[idx].cod_grupo + AND a.cod_tipo = arr_iptb58[idx].cod_tipo + AND a.cod_sec = arr_iptb58[idx].cod_sec + AND a.cod_n = b.cod_n + AND a.cod_grupo = b.cod_grupo + AND a.cod_tipo = b.cod_tipo + AND a.cod_sec = b.cod_sec + + IF STATUS = NOTFOUND THEN + LET existe = FALSE + ELSE + + IF pcodn IS NOT NULL THEN + LET tienedespiece = TRUE + ELSE + LET tienedespiece = FALSE + END IF + LET existe = TRUE + END IF + +END FUNCTION + +FUNCTION contenido() + DEFINE xcuerpo1, xcuerpo2 STRING + LET xcuerpo1 = + " + + + " + LET xcuerpo1 = + xcuerpo1 CLIPPED, "

Solicitado por: ", nombreUsuario CLIPPED, "

" + + LET xcuerpo1 = xcuerpo1 CLIPPED, "

", nombreMov CLIPPED, "

" + IF p_iptb57.num_oc IS NOT NULL THEN + LET xcuerpo1 = + xcuerpo1 CLIPPED, + "

Orden:", + p_iptb57.num_oc USING "&&&&&&&&", + "

", + "

Cliente:", + p_iptb57.cliente CLIPPED, + "

" + END IF + LET xcuerpo1 = + xcuerpo1 CLIPPED, "

Bodega Origen:", nombreBodega CLIPPED, "

" + LET xcuerpo1 = + xcuerpo1 CLIPPED, + "", + "", + "", + "" + + END IF + END FOR + LET xcuerpo1 = xcuerpo1 CLIPPED, xcuerpo2 CLIPPED, "
ProductosUnidades cantidad" + FOR idx = 1 TO arr_iptb58.getLength() + IF arr_iptb58[idx].cod_sec IS NOT NULL THEN + LET xcuerpo2 = + xcuerpo2 CLIPPED, + "
", + arr_iptb58[idx].descripcion CLIPPED, + "", + arr_iptb58[idx].cantidad_1 USING "##,###.##", + "", + arr_iptb58[idx].cantidad USING "##,###.##", + "
" + RETURN xcuerpo1 +END FUNCTION +FUNCTION emailbodegas() + DEFINE + xemailadd, remailadd STRING, + jj INT + + DECLARE bemails CURSOR FOR + SELECT b.email FROM seg0001 b WHERE b.bodega = p_iptb57.bodega + + LET remailadd = NULL + LET jj = 1 + FOREACH bemails INTO xemailadd + + IF xemailadd IS NOT NULL THEN + LET remailadd = xemailadd CLIPPED, ",", remailadd + END IF + LET jj = jj + 1 + END FOREACH + + RETURN remailadd +END FUNCTION + +FUNCTION despiece() + DEFINE + cetiqueta VARCHAR(20), + + idx1, curr2 INT + + OPEN WINDOW wdespiece + AT 5, 3 + WITH FORM "ipfmwd010" + ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST) + + DISPLAY arr_iptb58[idx].descripcion TO descrip_esp + DISPLAY arr_iptb58[idx].unidad_med TO unidad_med + CALL despiece.clear() + + IF opcion = "Adicionar" THEN + + DECLARE busca_despiece CURSOR FOR + SELECT a.id_etiqueta, + a.lado_1, + a.lado_2, + a.lado_3, + a.cantidad, + a.medida, + a.secuencia, + a.cod_n, + a.cod_grupo, + a.cod_tipo, + a.cod_sec + FROM tmpdespiece a, vetb00026 b + WHERE a.id_despiece = tmpnumero + AND a.id_etiqueta = b.codid + AND a.cod_n = dcodn + AND a.cod_grupo = dcodgrupo + AND a.cod_tipo = dcodtipo + AND a.cod_sec = dcodsec + + LET total_cantidad = 0 + LET idx1 = 1 + FOREACH busca_despiece + INTO despiece[idx1].id_etiqueta, + despiece[idx1].lado_1, + despiece[idx1].lado_2, + despiece[idx1].lado_3, + despiece[idx1].cantidad, + despiece[idx1].medida, + despiece[idx1].secuencia, + despiece[idx1].cod_n, + despiece[idx1].cod_grupo, + despiece[idx1].cod_tipo, + despiece[idx1].cod_sec + + LET total_cantidad = total_cantidad + despiece[idx1].cantidad + + LET idx1 = idx1 + 1 + END FOREACH + ELSE + DECLARE busca_despiecem CURSOR FOR + SELECT a.id_etiqueta, + a.lado_1, + a.lado_2, + a.lado_3, + a.cantidad, + a.medida, + a.secuencia, + a.cod_n, + a.cod_grupo, + a.cod_tipo, + a.cod_sec + FROM iptb00060 a, vetb00026 b + WHERE a.id_despiece = p_iptb57.numero_doc + AND a.id_etiqueta = b.codid + AND a.cod_n = dcodn + AND a.cod_grupo = dcodgrupo + AND a.cod_tipo = dcodtipo + AND a.cod_sec = dcodsec + + LET total_cantidad = 0 + LET idx1 = 1 + LET tmpnumero = p_iptb57.numero_doc + FOREACH busca_despiecem + INTO despiece[idx1].id_etiqueta, + despiece[idx1].lado_1, + despiece[idx1].lado_2, + despiece[idx1].lado_3, + despiece[idx1].cantidad, + despiece[idx1].medida, + despiece[idx1].secuencia, + despiece[idx1].cod_n, + despiece[idx1].cod_grupo, + despiece[idx1].cod_tipo, + despiece[idx1].cod_sec + + LET total_cantidad = total_cantidad + despiece[idx1].cantidad + + LET idx1 = idx1 + 1 + END FOREACH + + END IF + DISPLAY BY NAME total_cantidad + + INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.* + BEFORE INPUT + CALL cetiquetas() + BEFORE ROW + LET curr2 = arr_curr() + LET fila = scr_line() + + CALL cetiquetas() + + IF curr2 > 1 THEN + IF despiece[curr2].id_etiqueta IS NULL THEN + LET despiece[curr2].id_etiqueta = + despiece[curr2 - 1].id_etiqueta + END IF + END IF + IF opcion = "Adicionar" THEN + IF despiece[curr2].cod_sec IS NULL THEN + LET despiece[curr2].cod_n = dcodn + LET despiece[curr2].cod_grupo = dcodgrupo + LET despiece[curr2].cod_tipo = dcodtipo + LET despiece[curr2].cod_sec = dcodsec + + LET despiece[curr2].secuencia = curr2 + END IF + END IF + + AFTER FIELD etiqueta + LET despiece[curr2].cod_n = dcodn + LET despiece[curr2].cod_grupo = dcodgrupo + LET despiece[curr2].cod_tipo = dcodtipo + LET despiece[curr2].cod_sec = dcodsec + + DISPLAY despiece[curr2].cod_n TO sdespiece[fila].cod_n + DISPLAY despiece[curr2].cod_grupo TO sdespiece[fila].cod_grupo + DISPLAY despiece[curr2].cod_tipo TO sdespiece[fila].cod_tipo + DISPLAY despiece[curr2].cod_sec TO sdespiece[fila].cod_sec + + AFTER FIELD cantidad + + IF arr_iptb58[idx].unidad_med = "M2" THEN + LET despiece[curr2].medida = + despiece[curr2].cantidad + * (despiece[curr2].lado_1 * despiece[curr2].lado_2) + END IF + + IF arr_iptb58[idx].unidad_med = "M3" THEN + LET despiece[curr2].medida = + despiece[curr2].cantidad + * (despiece[curr2].lado_1 + * despiece[curr2].lado_2 + * despiece[curr2].lado_3) + END IF + + IF arr_iptb58[idx].unidad_med = "ML" THEN + LET despiece[curr2].medida = + despiece[curr2].cantidad * despiece[curr2].lado_1 + LET despiece[curr2].lado_2 = 0 + END IF + + IF arr_iptb58[idx].unidad_med = "UD" + OR arr_iptb58[idx].unidad_med = "GL" THEN + LET despiece[curr2].medida = despiece[curr2].cantidad + END IF + DISPLAY despiece[curr2].medida TO sdespiece[fila].medida + AFTER ROW + IF despiece[curr2].medida IS NULL + AND despiece[curr2].lado_1 IS NOT NULL THEN + LET numero_msg = 16 + CALL msg(numero_msg) + NEXT FIELD lado_1 + END IF + LET total_medida = 0 + LET total_cantidad = 0 + FOR idx1 = 1 TO despiece.getLength() + IF despiece[idx1].medida IS NOT NULL THEN + LET total_cantidad = + total_cantidad + despiece[idx1].cantidad + LET total_medida = total_medida + despiece[idx1].medida + END IF + + END FOR + DISPLAY BY NAME total_medida, total_cantidad + + AFTER INPUT + IF int_flag THEN + LET numero_msg = 2 + CALL msg(numero_msg) + EXIT INPUT + END IF + LET total_medida = 0 + LET total_cantidad = 0 + FOR idx1 = 1 TO despiece.getLength() + IF despiece[idx1].medida IS NOT NULL THEN + LET total_medida = total_medida + despiece[idx1].medida + LET total_cantidad = + total_cantidad + despiece[idx1].cantidad + END IF + END FOR + DISPLAY BY NAME total_medida, total_cantidad + END INPUT + IF int_flag THEN + LET int_flag = FALSE + CLOSE WINDOW wdespiece + RETURN + END IF + + DELETE FROM tmpdespiece + WHERE id_despiece = tmpnumero + AND cod_n = dcodn + AND cod_grupo = dcodgrupo + AND cod_tipo = dcodtipo + AND cod_sec = dcodsec + LET total_medida = 0 + FOR idx1 = 1 TO despiece.getLength() + + IF despiece[idx1].medida IS NOT NULL THEN + LET despiece[idx1].secuencia = idx1 + INSERT INTO tmpdespiece( + id_etiqueta, + id_despiece, + cod_n, + cod_grupo, + cod_tipo, + cod_sec, + lado_1, + lado_2, + lado_3, + cantidad, + medida, + secuencia, + bodega) + VALUES(despiece[idx1].id_etiqueta, + tmpnumero, + despiece[idx1].cod_n, + despiece[idx1].cod_grupo, + despiece[idx1].cod_tipo, + despiece[idx1].cod_sec, + despiece[idx1].lado_1, + despiece[idx1].lado_2, + despiece[idx1].lado_3, + despiece[idx1].cantidad, + despiece[idx1].medida, + despiece[idx1].secuencia, + p_iptb57.bodega) + + LET total_medida = total_medida + despiece[idx1].medida + END IF + END FOR + LET arr_iptb58[idx].cantidad_1 = total_medida + + CLOSE WINDOW wdespiece +END FUNCTION