- 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)
1146 lines
44 KiB
Plaintext
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
|