Files
MBS/PROYECTO/acdir/acprmt001_old.4gl
T

488 lines
14 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : ACPRMT001
OBJETIVO : Capturar, Modificar, Elimacar registros de la
Tabla Catalogo de Bienes y Servicios
PROGRAMADOR : TAdeo A. Ferreras.
FECHA REALIZACION : Sept. 27, 1993.
------------------------------------------------------------------
}
IMPORT FGL fgldialog
IMPORT util
IMPORT com
GLOBALS "acprgb000.4gl"
DEFINE next_code INT
DEFINE des RECORD
descripcion2, descripcion3, descripcion4, descripcion5 STRING
END RECORD
DEFINE DisArray DYNAMIC ARRAY OF RECORD
codigo1 INT,
descripcion STRING,
cuenta_no1 CHAR(8),
departamento1 STRING
END RECORD
DEFINE infoArray RECORD
codigo INT,
descripcion1 STRING,
cuenta_no CHAR(8),
cta_depr CHAR(8),
cta_gasto CHAR(8),
departamento SMALLINT,
fech_compra DATE,
duracion INT,
fech_elim DATE,
referencia STRING,
fabricante STRING,
status_t CHAR(1),
us_crea STRING,
fech_crea DATE,
us_mod STRING,
fech_mod DATE,
id_MaintainX INT,
id_maquina INT,
desc_maquina STRING
END RECORD
DEFINE answer STRING, ApiCheck BOOLEAN
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL acprmt001()
END MAIN
FUNCTION acprmt001()
OPEN WINDOW w1 WITH FORM "acfmmt001"
CALL fgl_settitle("Maestra de Activos Fijos")
CALL acpcad001()
DIALOG ATTRIBUTE(UNBUFFERED)
DISPLAY ARRAY DisArray TO Tabla.*
ON ACTION Adicionar
ATTRIBUTES(TEXT = 'Adicionar', IMAGE = 'fa-address-book-o')
INITIALIZE infoArray, des TO NULL
LET infoArray.us_crea = usuarios
LET infoArray.fech_crea = CURRENT YEAR TO DAY
SELECT TOP(1) codigo
INTO next_code
FROM actb00001
ORDER BY codigo DESC
LET infoArray.codigo = next_code + 1
INPUT BY NAME infoArray.*, des.*, apiCheck
ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS)
AFTER FIELD cuenta_no
SELECT a.descripcion
INTO des.descripcion2
FROM cgtb00001 a
WHERE cuenta_no = infoArray.cuenta_no
DISPLAY BY NAME des.descripcion2
AFTER FIELD cta_depr
SELECT a.descripcion
INTO des.descripcion3
FROM cgtb00001 a
WHERE a.cuenta_no = infoArray.cta_depr
DISPLAY BY NAME des.descripcion3
AFTER FIELD cta_gasto
SELECT a.descripcion
INTO des.descripcion4
FROM cgtb00001 a
WHERE a.cuenta_no = infoArray.cta_gasto
DISPLAY BY NAME des.descripcion4
AFTER FIELD departamento
SELECT a.nom_dpto
INTO des.descripcion5
FROM adtb00001 a
WHERE a.departamento = infoArray.departamento
DISPLAY BY NAME des.descripcion5
AFTER INPUT
NEXT FIELD fabricante
ON ACTION ACCEPT
CALL insertData()
EXIT INPUT
ON ACTION CANCEL
CALL msg(2)
EXIT INPUT
END INPUT
ON ACTION Modificar
ATTRIBUTES(TEXT = 'Modificar', IMAGE = 'refresh')
INPUT BY NAME infoArray.*, apiCheck
ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS)
AFTER FIELD cuenta_no
SELECT a.descripcion
INTO des.descripcion2
FROM cgtb00001 a
WHERE cuenta_no = infoArray.cuenta_no
DISPLAY BY NAME des.descripcion2
AFTER FIELD cta_depr
SELECT a.descripcion
INTO des.descripcion3
FROM cgtb00001 a
WHERE a.cuenta_no = infoArray.cta_depr
DISPLAY BY NAME des.descripcion3
AFTER FIELD cta_gasto
SELECT a.descripcion
INTO des.descripcion4
FROM cgtb00001 a
WHERE a.cuenta_no = infoArray.cta_gasto
DISPLAY BY NAME des.descripcion4
AFTER FIELD departamento
SELECT a.nom_dpto
INTO des.descripcion5
FROM adtb00001 a
WHERE a.departamento = infoArray.departamento
DISPLAY BY NAME des.descripcion5
AFTER INPUT
NEXT FIELD fabricante --Para que no se haga el auto accept
ON ACTION ACCEPT
CALL UpdateData(1)
EXIT INPUT
ON ACTION CANCEL
CALL msg(2)
EXIT INPUT
END INPUT
ON ACTION Eliminar ATTRIBUTES(TEXT = 'Eliminar', IMAGE = 'delete')
LET answer =
fgl_winquestion(
"ELIMINAR REGISTRO",
"Esta seguro/a que desea eliminar este registro? ",
"yes",
"yes|no",
"question",
0)
IF answer = 'yes' THEN
CALL updateData(2)
ELSE
CALL msg(2)
END IF
ON ACTION Salir ATTRIBUTES(TEXT = 'Salir', IMAGE = 'exit2')
EXIT PROGRAM
BEFORE ROW
CALL getdata(arr_curr())
DISPLAY BY NAME infoArray.*
END DISPLAY
END DIALOG
CLOSE WINDOW w1
END FUNCTION
FUNCTION acpcad001() --Consultar Datos
DEFINE i INT
LET i = 1
PREPARE query
FROM "SELECT a.codigo, a.descripcion, a.cuenta_no, b.nom_dpto
FROM actb00001 a inner join adtb00001 b on a.departamento = b.departamento
where a.status_t is null
ORDER BY codigo"
DECLARE buscar CURSOR FOR query
FOREACH buscar INTO DisArray[i].*
LET i = i + 1
END FOREACH
END FUNCTION
FUNCTION getdata(idx INT)
{PREPARE query
FROM 'SELECT a.codigo
,a.descripcion
,a.cuenta_no
,a.cta_depr
,a.cta_gasto
,a.departamento
,CONVERT(VARCHAR(10),fech_compra,103)
,a.duracion
,CONVERT(VARCHAR(10),fech_elim,103)
,a.referencia
,a.fabricante
,a.status_t
,a.us_crea
,a.fech_crea
,a.us_mod
,a.fech_mod
FROM actb00001 a
WHERE a.codigo = ' || DisArray[idx].codigo1 || '
ORDER BY a.codigo '}
PREPARE query
FROM "SELECT a.codigo
,a.descripcion
,a.cuenta_no
,a.cta_depr
,a.cta_gasto
,a.departamento
,CONVERT(VARCHAR(10),fech_compra,103)
,a.duracion
,CONVERT(VARCHAR(10),fech_elim,103)
,a.referencia
,a.fabricante
,a.status_t
,a.us_crea
,a.fech_crea
,a.us_mod
,a.fech_mod
,a.id_MaintainX
,a.id_codigo
,b.nombre
FROM actb00001 a left join irtb00009 b on a.id_codigo = b.codigo
WHERE a.codigo = " || DisArray[idx].codigo1 || "
AND a.status_t is null
ORDER BY a.codigo"
EXECUTE query INTO infoArray.*
SELECT a.descripcion
INTO des.descripcion2
FROM cgtb00001 a
WHERE cuenta_no = infoArray.cuenta_no
SELECT a.descripcion
INTO des.descripcion3
FROM cgtb00001 a
WHERE a.cuenta_no = infoArray.cta_depr
SELECT a.descripcion
INTO des.descripcion4
FROM cgtb00001 a
WHERE a.cuenta_no = infoArray.cta_gasto
SELECT a.nom_dpto
INTO des.descripcion5
FROM adtb00001 a
WHERE a.departamento = infoArray.departamento
DISPLAY BY NAME des.*
END FUNCTION
FUNCTION insertData()
LET infoArray.fech_crea = CURRENT YEAR TO FRACTION
BEGIN WORK
IF apiCheck THEN
CALL ApiMaintainX('POST',NULL, infoArray.*) RETURNING infoArray.id_MaintainX
IF infoArray.id_MaintainX IS NULL THEN
ROLLBACK WORK
ELSE
DISPLAY "nuevo ID: ",infoArray.id_MaintainX
END IF
END IF
INSERT INTO actb00001(
codigo,
descripcion,
cuenta_no,
cta_dpr,
cta_gasto,
departamento,
fech_compra,
duracion,
fech_elim,
referencia,
fabricante,
status_t,
us_crea,
fech_crea,
us_mod,
fech_mod,
id_maintainX,
id_codigo)
VALUES(infoArray.codigo,
infoArray.descripcion1,
infoArray.cuenta_no,
infoArray.cta_depr,
infoArray.cta_gasto,
infoArray.departamento,
infoArray.fech_compra,
infoArray.duracion,
NULL,
infoArray.referencia,
infoArray.fabricante,
NULL,
infoArray.us_crea,
infoArray.fech_crea,
NULL,
NULL,
infoArray.id_MaintainX,
infoArray.id_maquina)
INSERT INTO actb00005
VALUES(infoArray.codigo,
infoArray.descripcion1,
infoArray.cuenta_no,
infoArray.cta_depr,
infoArray.cta_gasto,
infoArray.departamento,
infoArray.fech_compra,
infoArray.duracion,
NULL,
NULL,
infoArray.us_crea,
infoArray.fech_crea,
NULL,
NULL,
NULL)
IF SQLCA.SQLCODE < 0 THEN
ROLLBACK WORK
CALL msg(1663)
ELSE
COMMIT WORK
CALL msg(1)
END IF
END FUNCTION
FUNCTION updateData(CASO INT)
CASE CASO
WHEN 1
BEGIN WORK
UPDATE actb00001
SET descripcion = infoArray.descripcion1,
cuenta_no = infoArray.cuenta_no,
cta_depr = infoArray.cta_depr,
cta_gasto = infoArray.cta_gasto,
departamento = infoArray.departamento,
fech_compra = infoArray.fech_compra,
duracion = infoArray.duracion,
referencia = infoArray.referencia,
fabricante = infoArray.fabricante,
id_codigo = infoArray.id_maquina,
us_mod = usuarios,
fech_mod = CURRENT YEAR TO FRACTION
WHERE codigo = infoArray.codigo
UPDATE actb00005
SET descripcion = infoArray.descripcion1,
cuenta_no = infoArray.cuenta_no,
cta_depr = infoArray.cta_depr,
cta_gasto = infoArray.cta_gasto,
departamento = infoArray.departamento,
fech_compra = infoArray.fech_compra,
duracion = infoArray.duracion,
us_mod = usuarios,
fech_mod = CURRENT YEAR TO FRACTION
WHERE codigo = infoArray.codigo
IF apiCheck THEN
CALL ApiMaintainX('PATCH',infoArray.id_MaintainX, infoArray.*) RETURNING answer
IF answer IS NULL THEN
ROLLBACK WORK
ELSE
DISPLAY answer
END IF
END IF
IF SQLCA.SQLCODE < 0 THEN
ROLLBACK WORK
CALL msg(1663)
ELSE
COMMIT WORK
CALL msg(13)
END IF
EXIT CASE
WHEN 2
BEGIN WORK
UPDATE actb00001
SET status_t = 'E',
us_mod = usuarios,
fech_mod = CURRENT YEAR TO FRACTION,
fech_elim = CURRENT YEAR TO FRACTION
WHERE codigo = infoArray.codigo
UPDATE actb00005
SET status_t = 'E',
us_mod = usuarios,
fech_mod = CURRENT YEAR TO FRACTION,
fech_elim = CURRENT YEAR TO FRACTION
WHERE codigo = infoArray.codigo
IF apiCheck THEN
CALL ApiMaintainX('DELETE',infoArray.id_MaintainX, infoArray.*) RETURNING answer
END IF
IF SQLCA.SQLCODE < 0 THEN
ROLLBACK WORK
CALL msg(1663)
ELSE
COMMIT WORK
CALL msg(39)
END IF
OTHERWISE
DISPLAY "Nothing happens..."
END CASE
END FUNCTION