Files
MBS/PROYECTO/ipdir/ipprmt020.4gl
T
jpeguero a3e88776a9 Registrar y corregir ipprmt020 (Requisiciones Productos Almacenes)
- Registrar funciones compartidas faltantes (buscarequisicion, imprequisiciones, funciones_ip) y formularios ipfmmt003/ipfmmt020 en el proyecto
- Agregar usuarioSistema a seg000.4gl
- Ampliar combos Codigo Mov/Bodega/Bodega Destino en ipfmmt020.4fd (texto ilegible)
- Refrescar lista de requisiciones al anular (buscarData + clear del arreglo)
2026-09-09 16:30:34 -04:00

1146 lines
44 KiB
Plaintext

{
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
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")
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
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 =
"<!DOCTYPE html><body>
<head>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
</style>
</head>"
LET xcuerpo1 =
xcuerpo1 CLIPPED, "<h1>Solicitado por: ", nombreUsuario CLIPPED, "</h1>"
LET xcuerpo1 = xcuerpo1 CLIPPED, "<h2>", nombreMov CLIPPED, "</h2>"
IF p_iptb57.num_oc IS NOT NULL THEN
LET xcuerpo1 =
xcuerpo1 CLIPPED,
"<h2>Orden:",
p_iptb57.num_oc USING "&&&&&&&&",
"</h2>",
"<h2>Cliente:",
p_iptb57.cliente CLIPPED,
"</h2>"
END IF
LET xcuerpo1 =
xcuerpo1 CLIPPED, "<h2>Bodega Origen:", nombreBodega CLIPPED, "</h2>"
LET xcuerpo1 =
xcuerpo1 CLIPPED,
"<table><tr><th>Productos</th><th>Unidades</th> <th>cantidad</th><th>"
FOR idx = 1 TO arr_iptb58.getLength()
IF arr_iptb58[idx].cod_sec IS NOT NULL THEN
LET xcuerpo2 =
xcuerpo2 CLIPPED,
"<tr><td>",
arr_iptb58[idx].descripcion CLIPPED,
"</td>",
"<td>",
arr_iptb58[idx].cantidad_1 USING "##,###.##",
"</td>",
"<td>",
arr_iptb58[idx].cantidad USING "##,###.##",
"</td>",
"</tr>"
END IF
END FOR
LET xcuerpo1 = xcuerpo1 CLIPPED, xcuerpo2 CLIPPED, "</table></body>"
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