Files
MBS/PROYECTOS/otrodir/fotos.4gl
T

479 lines
21 KiB
Plaintext

{
==============================================================
MODULO : fotos.4gl
FECHA : 09/02/2017
DESARROLLADO POR : ING. JUAN SOTO
}
IMPORT os
DEFINE xusername,xsmtphost,xsmtpport, xpassword STRING
FUNCTION fotos(xcodn,xcodgrupo,xcodtipo,xcodsec,producto,xusuario,habilitar,xcantidadorden,
xtmpnumero,xcodmov,xbodega,xestado)
DEFINE xcodn,xcodgrupo,xcodtipo,xcodsec,xbodega SMALLINT,
producto VARCHAR(100),
xestado VARCHAR(1),
xcantidadorden,unidadorden DEC(12,5),
habilitar,noexistencia BOOLEAN
DEFINE areageneral RECORD
xtipo_material,xcantidad_minima VARCHAR(30),
bookmatch VARCHAR(50),
tipos VARCHAR(50),
bodega SMALLINT,
descrip_bodega VARCHAR(100)
END RECORD
DEFINE kdatos DYNAMIC ARRAY OF RECORD
kimagen VARCHAR(200),
lado_2 DEC(8,5),
lado_1 DEC(8,5),
lado_3 DEC(8,5),
solicitado SMALLINT,
# cantidadIni SMALLINT,
cantidad FLOAT,
cantidad2 FLOAT,
tono VARCHAR(100),
calidad VARCHAR(100),
disponible SMALLINT,
xobservacion VARCHAR(200),
id_producto CHAR(25),
seccion INT,
tramo INT,
--codid INT,
borrar CHAR(2) ,
nombre_file VARCHAR(100)
END RECORD,
kimagen_dest,kimagen_dest2 STRING,
xusuario VARCHAR(50),
i,xcodmov SMALLINT,
xtmpnumero INT,
TOemail,cuerpo_correo,
subject, procedimiento VARCHAR(200),
totalMedida DEC(12,5)
DEFINE s_tipo,d_tipos,mensaje,f_tipos,filepath,dir_file,opcion STRING
LET producto = xcodn USING "&&&&","-",xcodgrupo USING "&&&&","-",
xcodtipo USING "&&&&","-",xcodsec USING "&&&&&&"," ",producto CLIPPED
OPEN WINDOW w1 WITH FORM "ipfmwd015"
DISPLAY BY NAME producto
DECLARE busca_imagen CURSOR FOR
SELECT a.imagen, SUM(a.lado_1),SUM(a.lado_2),SUM(isnull(a.lado_3,0)),SUM(a.cantidad),
SUM(a.cantidad2),a.observacion,a.id_producto, a.cod_seccion,a.cod_tramo,
a.nombre_file,a.solicitados,a.tono,a.calidad
FROM iptb00050 a
WHERE a.cod_n = xcodn AND
a.cod_grupo = xcodgrupo AND
a.cod_tipo =xcodtipo AND
a.cod_sec = xcodsec AND
a.num_doc = xtmpnumero AND
a.cod_mov = xcodmov
GROUP BY a.imagen, a.observacion,a.id_producto, a.cod_bodega,a.cod_seccion,a.cod_tramo,
a.nombre_file,a.solicitados,a.tono,a.calidad
UNION
SELECT a.imagen, SUM(a.lado_1),SUM(a.lado_2),SUM(isnull(a.lado_3,0)),SUM(a.cantidad),
SUM(a.cantidad2),a.observacion,a.id_producto, a.cod_seccion,a.cod_tramo,
a.nombre_file,a.solicitados,a.tono,a.calidad
FROM tmpdesglose a
WHERE a.cod_n = xcodn AND
a.cod_grupo = xcodgrupo AND
a.cod_tipo =xcodtipo AND
a.cod_sec = xcodsec AND
a.num_doc = xtmpnumero AND
a.cod_mov = xcodmov
GROUP BY a.imagen, a.observacion,a.id_producto, a.cod_seccion,a.cod_tramo,
a.nombre_file,a.solicitados,a.tono,a.calidad
LET kimagen_dest = "tmpfile.jpg"
LET kimagen_dest2="tmpfile2.jpg"
LET i=1
LET d_tipos="jpeg"
LET f_tipos="*.jpg *.png *.jpeg"
LET mensaje=%"Elige Documento"
LET totalMedida = 0
FOREACH busca_imagen INTO kdatos[i].kimagen,kdatos[i].lado_1,
kdatos[i].lado_2,kdatos[i].lado_3,kdatos[i].cantidad,kdatos[i].cantidad2,
kdatos[i].xobservacion,kdatos[i].id_producto,
kdatos[i].seccion,kdatos[i].tramo,kdatos[i].nombre_file,
kdatos[i].tono,kdatos[i].calidad,
#,kdatos[i].solicitado,
kdatos[i].tono,kdatos[i].calidad
LET kdatos[i].borrar='NO'
# LET kdatos[i].cantidadIni = kdatos[i].cantidad
LET totalMedida = totalMedida + kdatos[i].cantidad2
LET i = i+1
END FOREACH
DISPLAY BY NAME totalMedida
CALL kdatos.deleteElement(i)
SELECT a.usuario FROM seg0003 a
WHERE a.usuario = xusuario AND
a.fotos_adicionales_inventario = "SI"
IF STATUS <> NOTFOUND THEN
LET habilitar = TRUE
DIALOG
INPUT BY NAME areageneral.*
BEFORE INPUT
DISPLAY BY NAME xcantidadOrden
IF habilitar = TRUE THEN
--CALL DIALOG.setActionHidden("xtipo_material",FALSE)
--CALL DIALOG.setActionHidden("xcantidad_minima",FALSE)
--CALL DIALOG.setActionHidden("foto",FALSE)
END IF
SELECT DISTINCT a.tipo_material,a.cantidad_minima,a.bookmatch,a.tipos
INTO areageneral.xtipo_material,areageneral.xcantidad_minima,areageneral.bookmatch,areageneral.tipos
FROM iptb00052 a
WHERE a.cod_n =xcodn AND a.cod_grupo = xcodgrupo AND
a.cod_tipo = xcodtipo AND a.cod_sec = xcodsec AND
a.num_doc = xtmpnumero AND a.cod_mov = xcodmov
UNION
SELECT DISTINCT a.tipo_material,a.cantidad_minima,a.bookmatch,a.tipos
INTO areageneral.xtipo_material,areageneral.xcantidad_minima,areageneral.bookmatch,areageneral.tipos
FROM tmpdesglose_master a
WHERE a.cod_n =xcodn AND a.cod_grupo = xcodgrupo AND
a.cod_tipo = xcodtipo AND a.cod_sec = xcodsec AND
a.num_doc = xtmpnumero AND a.cod_mov = xcodmov
SELECT a.tipo_material,a.bookmatch,a.tipos
INTO areageneral.xtipo_material,areageneral.bookmatch,areageneral.tipos
FROM iptb00002 a
WHERE a.cod_n =xcodn AND a.cod_grupo = xcodgrupo AND
a.cod_tipo = xcodtipo AND a.cod_sec = xcodsec
LET areageneral.bodega = xbodega
SELECT a.descripcion INTO areageneral.descrip_bodega FROM
intb00009 a WHERE a.cod_bodega = xbodega
DISPLAY BY NAME areageneral.xtipo_material,areageneral.xcantidad_minima,
areageneral.bookmatch,areageneral.tipos,
areageneral.descrip_bodega,
areageneral.bodega
END INPUT
INPUT ARRAY kdatos FROM sdatos.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
IF habilitar = TRUE THEN
CALL DIALOG.setFieldActive("lado_1",TRUE)
CALL DIALOG.setFieldActive("lado_2",TRUE)
CALL DIALOG.setFieldActive("lado_3",TRUE)
CALL DIALOG.setFieldActive("cantidad",TRUE)
CALL DIALOG.setFieldActive("cantidad2",TRUE)
CALL DIALOG.setFieldActive("disponible",TRUE)
CALL DIALOG.setFieldActive("xobservacion",TRUE)
CALL DIALOG.setFieldActive("id_producto",TRUE)
CALL DIALOG.setFieldActive("seccion",TRUE)
CALL DIALOG.setFieldActive("tramo",TRUE)
CALL DIALOG.setFieldActive("borrar",TRUE)
CALL DIALOG.setFieldActive("solicitado",FALSE)
END IF
IF xestado = '2' THEN
CALL DIALOG.setFieldActive("lado_1",FALSE)
CALL DIALOG.setFieldActive("lado_2",FALSE)
CALL DIALOG.setFieldActive("lado_3",FALSE)
CALL DIALOG.setFieldActive("cantidad",FALSE)
CALL DIALOG.setFieldActive("cantidad2",FALSE)
CALL DIALOG.setFieldActive("disponible",FALSE)
NEXT FIELD id_producto
END IF
BEFORE ROW
LET i=arr_curr()
# LET kdatos[i].bodega = xbodega
CALL cseccion(xbodega)
IF kdatos[i].kimagen IS NOT NULL THEN
LET kimagen_dest = kdatos[i].kimagen
DISPLAY kimagen_dest TO presenta
END IF
IF kdatos[i].cantidad2 < 0 THEN
LET kdatos[i].cantidad2 = kdatos[i].cantidad2 * -1
END IF
DISPLAY kdatos[i].cantidad TO sdatos[scr_line()].cantidad
AFTER FIELD seccion
CALL ctramo(xbodega, kdatos[i].seccion)
ON ACTION foto_down
IF kdatos[i].kimagen IS NOT NULL THEN
LET dir_file = "tmp\\",xusuario CLIPPED,
kimagen_dest CLIPPED
LET s_tipo = '*jpg *.png'
LET opcion = 'Archivo Imagen'
LET kimagen_dest = dir_file
DISPLAY kimagen_dest TO presenta
LET mensaje = 'Guardar archivo'
CALL ui.Interface.frontCall("standard","getenv", ["TEMP"], [filepath] )
LET filepath = filepath CLIPPED,"\\",kdatos[i].nombre_file CLIPPED
CALL ui.Interface.frontCall("standard","savefile", [dir_file,opcion,
s_tipo,mensaje], [filepath] )
CALL fgl_putfile(dir_file,filepath)
CALL ui.Interface.frontCall("standard","shellexec", [filepath],[opcion])
END IF
ON ACTION foto
LET i = arr_curr()
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)) = "jpg" OR
downshift(os.Path.extension(filepath)) = "jpeg" OR
downshift(os.Path.extension(filepath)) = "png" THEN
LET dir_file = os.Path.basename(filepath)
LET dir_file = "tmp\\",dir_file CLIPPED
# CALL fgl_getfile(filepath,kimagen_dest2)
CALL fgl_getfile(filepath,dir_file)
CALL comprimeImagen(dir_file,' -resize 500x500 ')
LET kdatos[i].nombre_file = os.Path.basename(dir_file)
DISPLAY dir_file TO presenta
LET kdatos[i].kimagen = dir_file
ELSE
CALL fgl_winmessage("ERROR","EL FILE DEBE SER JPG, JPEG, PNG","INFO")
END IF
END IF
{
AFTER FIELD solicitado
LET i = arr_curr()
IF kdatos[i].solicitado IS NULL THEN
CALL fgl_winmessage("ERROR","DEBE ESPECIFICAR lA CANTIDAD SOLICITADA","INFO")
NEXT FIELD solicitado
END IF
IF kdatos[i].solicitado > kdatos[i].cantidad THEN
CALL fgl_winmessage("ERROR","lA CANTIDAD SOLICITADA SUPERA LA DISPONIBLE","INFO")
NEXT FIELD solicitado
ELSE
DISPLAY "kdatos[i].cantidadIni: ",kdatos[i].cantidadIni
DISPLAY "kdatos[i].solicitado: ",kdatos[i].solicitado
LET kdatos[i].cantidad = kdatos[i].cantidadIni - kdatos[i].solicitado
LET kdatos[i].cantidad2= kdatos[i].lado_1 * kdatos[i].lado_2 * kdatos[i].cantidad
DISPLAY kdatos[i].cantidad TO sdatos[scr_line()].cantidad
DISPLAY kdatos[i].cantidad2 TO sdatos[scr_line()].cantidad2
END IF
}
AFTER FIELD cantidad
LET i = arr_curr()
LET kdatos[i].cantidad2= kdatos[i].lado_1 * kdatos[i].lado_2 * kdatos[i].cantidad
DISPLAY kdatos[i].cantidad2 TO sdatos[scr_line()].cantidad2
AFTER FIELD id_producto
IF xestado = '2' THEN
SELECT DISTINCT a.lado_1,a.lado_2,a.lado_3,a.tono,a.calidad
INTO kdatos[i].lado_1,kdatos[i].lado_2,kdatos[i].lado_3,
kdatos[i].tono,kdatos[i].calidad
FROM iptb00050 a WHERE a.id_producto = kdatos[i].id_producto
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD id_producto
END IF
DISPLAY kdatos[i].lado_1 TO sdatos[scr_line()].lado_1
DISPLAY kdatos[i].lado_2 TO sdatos[scr_line()].lado_2
DISPLAY kdatos[i].lado_3 TO sdatos[scr_line()].lado_3
DISPLAY kdatos[i].tono TO sdatos[scr_line()].tono
DISPLAY kdatos[i].calidad TO sdatos[scr_line()].calidad
END IF
ON ACTION guardar ATTRIBUTE(TEXT="Salvar",IMAGE="save")
BEGIN WORK
SELECT a.num_doc FROM tmpdesglose_master a
WHERE a.num_doc = xtmpnumero AND a.cod_mov = xcodmov AND a.us_crea = xusuario
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdesglose_master (cod_n,cod_grupo,cod_tipo,cod_Sec,tipo_material,cantidad_minima,us_crea,fech_crea,cantidadorden,num_doc,cod_mov,fecha,bookmatch,tipos,bodega)
VALUES (xcodn,xcodgrupo,xcodtipo,xcodsec,areageneral.xtipo_material,areageneral.xcantidad_minima,xusuario,getdate(),xcantidadorden,xtmpnumero,xcodmov,getdate(),areageneral.bookmatch,areageneral.tipos,
xbodega)
END IF
DELETE FROM tmpdesglose WHERE num_doc = xtmpnumero AND cod_mov = xcodmov AND
cod_n = xcodn AND cod_grupo = xcodgrupo AND
cod_tipo = xcodtipo AND cod_sec = xcodsec AND
us_crea = xusuario
LET xcantidadorden = 0
LET unidadorden =0
FOR i =1 TO kdatos.getLength()
IF kdatos[i].calidad IS NOT NULL THEN
IF kdatos[i].id_producto IS NULL THEN
ROLLBACK WORK
CALL msg(16)
NEXT FIELD id_producto
END IF
IF xestado = '2' THEN
SELECT DISTINCT id_producto FROM iptb00050 WHERE id_producto = kdatos[i].id_producto
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD id_producto
END IF
IF kdatos[i].cantidad2 < 0 THEN
LET kdatos[i].cantidad2 = kdatos[i].cantidad2 * -1
END IF
CALL idexistencia(kdatos[i].id_producto,kdatos[i].cantidad2,xbodega,
kdatos[i].seccion,kdatos[i].tramo) RETURNING noexistencia
IF noexistencia THEN
ROLLBACK WORK
CALL msg(30)
NEXT FIELD cantidad2
END IF
END IF
LET kdatos[i].id_producto=kdatos[i].id_producto CLIPPED
LET xcantidadorden = xcantidadorden + kdatos[i].cantidad2
LET unidadorden = unidadorden + kdatos[i].cantidad
IF xestado = '2' THEN
LET kdatos[i].cantidad2 = kdatos[i].cantidad2 * -1
END IF
INSERT INTO tmpdesglose (cod_n,cod_grupo,cod_tipo,cod_Sec,imagen,observacion,
lado_1,lado_2,lado_3,cantidad,
nombre_file,us_crea,fech_crea,id_producto,
cantidad2,cod_bodega,cod_seccion,cod_tramo,tono,calidad,num_doc,cod_mov
)
VALUES (xcodn,xcodgrupo,xcodtipo,xcodsec,kdatos[I].kimagen,kdatos[i].xobservacion,
kdatos[i].lado_1,kdatos[i].lado_2,kdatos[i].lado_3,
kdatos[i].cantidad, kdatos[i].nombre_file,xusuario,getdate(),kdatos[i].id_producto,
kdatos[i].cantidad2,xbodega,kdatos[i].seccion,kdatos[i].tramo,kdatos[i].tono,
kdatos[i].calidad,xtmpnumero,xcodmov)
END IF
END FOR
COMMIT WORK
CALL msg(1)
LET subject="ACTUALIZACION IMAGEN PRODUCTO"
LET cuerpo_correo = "EL ARTICULO ",producto CLIPPED, " FUE ACTUALIZADO CON UNA IMAGEN"
# LET toemail ='vendedores@marmotech.com.do;jsoto@marmotech.com.do'
LET toemail ='jsoto@marmotech.com.do'
# LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
# CALL envia_correo(TOemail,CCEmail,cuerpo_correo,
# subject, procedimiento )
LET xusername ='notificacion@marmotech.com.do'
LET xsmtphost ='smtp.office365.com'
LET xsmtpport = '587'
LET xpassword = 'Lmmjvsd2020'
# CALL enviaemail(Toemail,subject,cuerpo_correo,NULL,xusername,xsmtphost,xsmtpport,xpassword)
# RETURNING retorne
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
END INPUT
ON ACTION retornar ATTRIBUTE(TEXT="Retornar",IMAGE="fa-long-arrow-left")
IF xcantidadorden IS NULL THEN
LET xcantidadorden=0
END IF
IF unidadorden IS NULL THEN
LET unidadorden = 0
END IF
EXIT DIALOG
END DIALOG
ELSE
DISPLAY ARRAY kdatos TO sdatos.*
BEFORE ROW
LET i=arr_curr()
IF kdatos[i].kimagen IS NOT NULL THEN
LET kimagen_dest =kdatos[i].kimagen
DISPLAY kimagen_dest TO presenta
END IF
ON ACTION foto_down
IF kdatos[i].kimagen IS NOT NULL THEN
LET dir_file = "tmp\\",xusuario CLIPPED,
kimagen_dest CLIPPED
LET s_tipo = '*jpg *.png'
LET opcion = 'Archivo Imagen'
LET mensaje = 'Guardar archivo'
CALL ui.Interface.frontCall("standard","getenv", ["TEMP"], [filepath] )
LET filepath = filepath CLIPPED,"\\",kdatos[i].nombre_file CLIPPED
CALL ui.Interface.frontCall("standard","savefile", [dir_file,opcion,
s_tipo,mensaje], [filepath] )
CALL fgl_putfile(dir_file,filepath)
CALL comprimeImagen(filepath,' -resize 500x500 ')
CALL ui.Interface.frontCall("standard","shellexec", [filepath],[opcion])
END IF
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
END IF
CLOSE WINDOW w1
RETURN xcantidadorden,unidadorden
END FUNCTION
FUNCTION idexistencia(id,cantidad,pbodega, secc,fila)
DEFINE id VARCHAR(25),
existencia,cantidad DEC(12,5),
secc,fila,pbodega INT
SELECT ISNULL(SUM(a.cantidad2),0) INTO existencia FROM iptb00050 a
WHERE a.id_producto = id AND
a.cod_bodega = pbodega AND
a.cod_seccion = secc AND
a.cod_tramo = fila AND
a.status_t IS NULL
IF cantidad > existencia THEN
RETURN TRUE
ELSE
RETURN FALSE
END IF
END FUNCTION