Files
MBS/PROYECTO/codir/coprmt001.4gl
T

850 lines
28 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : COPRMT001
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de suplidoreses.
PROGRAMADOR : JUAN SOTO .
FECHA REALIZACION : Agosto 1997.
------------------------------------------------------------------
}
SCHEMA smarmotech
DEFINE
suplidores RECORD
tipo_doc VARCHAR(10),
rnc VARCHAR(11),
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sp VARCHAR(41),
dir_sp VARCHAR(60),
ciu_sp VARCHAR(30),
cod_pais VARCHAR(3),
tel_sp VARCHAR(25),
area_sp VARCHAR(10),
fax_sp VARCHAR(25),
cont_sp VARCHAR(30),
term_sp SMALLINT,
status_t CHAR(1),
cuenta_no VARCHAR(10),
us_crea VARCHAR(50),
fech_crea DATETIME YEAR TO FRACTION(3),
us_mod VARCHAR(50),
fech_mod DATETIME YEAR TO FRACTION(3),
id_maintainx INTEGER,
contactID INTEGER,
email VARCHAR(60)
END RECORD,
pdocumentoEntrada VARCHAR(2),
descripcion_cuenta VARCHAR(80),
cuenta_suplidor SMALLINT
DEFINE proveedores SMALLINT
GLOBALS "coprgb000.4gl"
DEFINE
balance DEC(12, 2),
q_opt CHAR(3)
DEFINE
apicheck BOOLEAN,
answer, answer2 INT
DEFINE email VARCHAR(60)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" AS "SQL_C" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL coprmt001()
END MAIN
FUNCTION coprmt001()
OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21
OPEN FORM cofmmt001 FROM "cofmmt001"
DISPLAY FORM cofmmt001
LET selec =
"SELECT a.razon_social,RTRIM(a.calle) + ' #'+RTRIM(a.no_local) + ' '+a.sector,a.telefono
FROM DGII.dbo.empresas a
WHERE a.rnc = ?"
PREPARE dgii FROM selec
MENU
ON ACTION nuevo
CLEAR FORM
CALL copcad001()
ON ACTION buscar
CALL copcmf001()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION copcad001()
DEFINE ultimo_codigo INTEGER
# Captura los datos que va a contener el registro
INITIALIZE suplidores.* TO NULL
INPUT BY NAME suplidores.*, apicheck, pdocumentoEntrada
BEFORE INPUT
CALL proveedores()
ON KEY(CONTROL-W)
CASE
WHEN INFIELD(cod_pais)
CALL busca_pais()
DISPLAY BY NAME paises.nom_pais, suplidores.cod_pais
END CASE
AFTER FIELD rnc
IF suplidores.rnc IS NOT NULL THEN
IF suplidores.tipo_doc = 'RNC' THEN
SELECT a.rnc
FROM cotb00001 a
WHERE a.rnc = suplidores.rnc AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL msg(12)
NEXT FIELD rnc
END IF
EXECUTE dgii
INTO suplidores.nom_sp, suplidores.dir_sp, suplidores.tel_sp USING suplidores
.rnc
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD rnc
END IF
DISPLAY BY NAME suplidores.nom_sp,
suplidores.dir_sp,
suplidores.tel_sp
END IF
END IF
# Verifica que el codigo del suplidores no exista. Si existe,
# entonces despliega los datos del registro existente.
AFTER FIELD cod_sp
IF suplidores.cod_sp IS NOT NULL THEN
SELECT a.cod_sp_sec
INTO ultimo_codigo
FROM cotb00021 a
WHERE a.cod_sp = suplidores.cod_sp
IF ultimo_codigo IS NULL THEN
LET ultimo_codigo = 0
END IF
LET suplidores.cod_sp_sec = ultimo_codigo + 1
DISPLAY BY NAME suplidores.cod_sp_sec
NEXT FIELD nom_sp
END IF
{ AFTER FIELD cod_sp_sec
SELECT a.* INTO suplidores.* FROM cotb00001 a
WHERE a.cod_sp = suplidores.cod_sp and
a.cod_sp_sec = suplidores.cod_sp_sec
IF status != NOTFOUND THEN
IF suplidores.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
# Llamado a la rutina que despliega el mensaje del error retornado despues del
# SELECT. Solamente despliega mensaje si hay error.
DISPLAY BY NAME suplidores.*
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
}
AFTER FIELD cod_pais
IF suplidores.cod_pais IS NULL THEN
CALL msg(16)
NEXT FIELD cod_pais
END IF
SELECT a.nom_pais
INTO paises.nom_pais
FROM cotb00018 a
WHERE a.cod_pais = suplidores.cod_pais
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_pais
END IF
DISPLAY BY NAME paises.nom_pais
AFTER FIELD term_sp
SELECT a.descrip_term
INTO pagos.descrip_term
FROM cotb00024 a
WHERE a.term_sp = suplidores.term_sp
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD term_sp
END IF
DISPLAY BY NAME pagos.descrip_term
AFTER FIELD cuenta_no
SELECT a.descripcion
INTO descripcion_cuenta
FROM cgtb00001 a
WHERE a.cuenta_no = suplidores.cuenta_no AND a.nivel = 3
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
DISPLAY BY NAME descripcion_cuenta
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF suplidores.cod_pais IS NULL THEN
CALL msg(16)
NEXT FIELD cod_pais
END IF
IF suplidores.tipo_doc IS NULL THEN
CALL msg(16)
NEXT FIELD tipo_doc
END IF
IF suplidores.tipo_doc = 'RNC' AND LENGTH(suplidores.rnc) <> 9 THEN
CALL msg(77)
NEXT FIELD rnc
END IF
IF pdocumentoEntrada IS NULL THEN
CALL msg(16)
NEXT FIELD pdocumentoEntrada
END IF
IF suplidores.cuenta_no IS NULL THEN
CALL msg(16)
NEXT FIELD cuenta_o
END IF
IF suplidores.rnc IS NOT NULL THEN
IF suplidores.tipo_doc = 'RNC' THEN
EXECUTE dgii
INTO suplidores.nom_sp, suplidores.dir_sp, suplidores.tel_sp USING suplidores
.rnc
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD rnc
END IF
DISPLAY BY NAME suplidores.nom_sp,
suplidores.dir_sp,
suplidores.tel_sp
END IF
END IF
BEGIN WORK
#BUSCA EL ULTIMO NUMERO CREADO POR TIPO DE PROVEEDOR
SELECT a.cod_sp_sec
INTO ultimo_codigo
FROM cotb00021 a
WHERE a.cod_sp = suplidores.cod_sp
IF ultimo_codigo IS NULL THEN
LET ultimo_codigo = 0
INSERT INTO cotb00021(
cod_sp, cod_sp_sec, us_mod, fech_mod)
VALUES(suplidores.cod_sp,
ultimo_codigo,
usuarios,
getdate())
END IF
LET suplidores.cod_sp_sec = ultimo_codigo + 1
DISPLAY BY NAME suplidores.cod_sp_sec
UPDATE cotb00021
SET cod_sp_sec = suplidores.cod_sp_sec,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_sp = suplidores.cod_sp
IF apicheck THEN
CALL ApiMaintainC(
'POST', NULL, suplidores.*, usuarios)
RETURNING answer, answer2
IF answer IS NULL THEN
ROLLBACK WORK
END IF
IF answer2 = 0 THEN
INITIALIZE answer2 TO NULL
END IF
ELSE
INITIALIZE answer, answer2 TO NULL
END IF
INSERT INTO cotb00001(
tipo_doc,
rnc,
cod_sp,
cod_sp_sec,
nom_sp,
dir_sp,
ciu_sp,
cod_pais,
tel_sp,
area_sp,
fax_sp,
cont_sp,
term_sp,
us_crea,
fech_crea,
cuenta_no,
id_maintainx,
contactID,
email,
documentoEntrada)
VALUES(suplidores.tipo_doc,
suplidores.rnc,
suplidores.cod_sp,
suplidores.cod_sp_sec,
suplidores.nom_sp,
suplidores.dir_sp,
suplidores.ciu_sp,
suplidores.cod_pais,
suplidores.tel_sp,
suplidores.area_sp,
suplidores.fax_sp,
suplidores.cont_sp,
suplidores.term_sp,
usuarios,
GETDATE(),
suplidores.cuenta_no,
answer,
answer2,
suplidores.email,
pdocumentoEntrada)
COMMIT WORK
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
# Verifica el Status que retorna luego de insertar el registro en la tabla.
# Si hubo problemas en la insercion del registro, se despliega un mensaje.
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION copcmf001()
#WHENEVER ERROR CONTINUE
DEFINE
nombreF VARCHAR(100),
actualiza VARCHAR(3)
# Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT BY NAME criterio ON a.cod_sp, a.cod_sp_sec, a.nom_sp, a.tipo_doc, a.rnc
BEFORE CONSTRUCT
CALL proveedores()
AFTER CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT CONSTRUCT
END CONSTRUCT
LET SELEC =
" SELECT a.tipo_Doc
,a.rnc
,a.cod_sp
,a.cod_sp_sec
,a.nom_sp
,a.dir_sp
,a.ciu_sp
,a.cod_pais
,a.tel_sp
,a.area_sp
,a.fax_sp
,a.cont_sp
,a.term_sp
,a.status_t
,a.cuenta_no
,a.us_crea
,a.fech_crea
,a.us_mod
,a.fech_mod
,a.id_maintainx,a.contactId,a.email,a.documentoEntrada,b.nom_sp
FROM marmotech.dbo.cotb00001 a left outer join exterior.dbo.cotb00001 b on b.cod_sp = a.cod_sp and b.cod_sp_sec = a.cod_sp_Sec where ",
" a.status_t is null AND ",
criterio CLIPPED,
" ORDER BY 1,2,3,4"
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO suplidores.*, pdocumentoEntrada, nombreF
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
END IF
SELECT nom_pais
INTO paises.nom_pais
FROM cotb00018
WHERE cod_pais = suplidores.cod_pais
SELECT descrip_term
INTO pagos.descrip_term
FROM cotb00024
WHERE term_sp = suplidores.term_sp
DISPLAY BY NAME suplidores.*,
paises.nom_pais,
pagos.descrip_term,
pdocumentoEntrada,
nombreF
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO suplidores.*, pdocumentoEntrada, nombreF
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT nom_pais
INTO paises.nom_pais
FROM cotb00018
WHERE cod_pais = suplidores.cod_pais
SELECT descrip_term
INTO pagos.descrip_term
FROM cotb00024
WHERE term_sp = suplidores.term_sp
DISPLAY BY NAME suplidores.*,
paises.nom_pais,
pagos.descrip_term,
pdocumentoEntrada,
nombreF
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO suplidores.*, pdocumentoEntrada, nombreF
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT nom_pais
INTO paises.nom_pais
FROM cotb00018
WHERE cod_pais = suplidores.cod_pais
SELECT descrip_term
INTO pagos.descrip_term
FROM cotb00024
WHERE term_sp = suplidores.term_sp
DISPLAY BY NAME suplidores.*,
paises.nom_pais,
pagos.descrip_term,
pdocumentoEntrada,
nombreF
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO suplidores.*, pdocumentoEntrada, nombreF
SELECT nom_pais
INTO paises.nom_pais
FROM cotb00018
WHERE cod_pais = suplidores.cod_pais
SELECT descrip_term
INTO pagos.descrip_term
FROM cotb00024
WHERE term_sp = suplidores.term_sp
DISPLAY BY NAME suplidores.*,
paises.nom_pais,
pagos.descrip_term,
pdocumentoEntrada,
nombreF
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO suplidores.*, pdocumentoEntrada, nombreF
SELECT nom_pais
INTO paises.nom_pais
FROM cotb00018
WHERE cod_pais = suplidores.cod_pais
SELECT descrip_term
INTO pagos.descrip_term
FROM cotb00024
WHERE term_sp = suplidores.term_sp
DISPLAY BY NAME suplidores.*,
paises.nom_pais,
pagos.descrip_term,
pdocumentoEntrada,
nombreF
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
IF suplidores.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME suplidores.tipo_doc,
suplidores.rnc,
suplidores.nom_sp,
suplidores.dir_sp,
suplidores.cod_pais,
suplidores.term_sp,
suplidores.ciu_sp,
suplidores.tel_sp,
suplidores.area_sp,
suplidores.fax_sp,
suplidores.cont_sp,
suplidores.email,
apicheck,
pdocumentoEntrada,
suplidores.cuenta_no
WITHOUT DEFAULTS
ON KEY(CONTROL-W)
CASE
WHEN INFIELD(cod_pais)
CALL busca_pais()
DISPLAY BY NAME paises.nom_pais, suplidores.cod_pais
END CASE
AFTER FIELD rnc
IF suplidores.rnc IS NOT NULL THEN
IF suplidores.tipo_doc = 'RNC' THEN
LET cuenta_suplidor = 0
SELECT COUNT(*)
INTO cuenta_suplidor
FROM cotb00001 a
WHERE a.rnc = suplidores.rnc
AND a.status_t IS NULL
IF cuenta_suplidor > 1 THEN
CALL msg(12)
NEXT FIELD rnc
END IF
EXECUTE dgii
INTO suplidores.nom_sp, suplidores.dir_sp, suplidores.tel_sp USING suplidores
.rnc
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD rnc
END IF
DISPLAY BY NAME suplidores.nom_sp,
suplidores.dir_sp,
suplidores.tel_sp
END IF
END IF
AFTER FIELD cod_pais
IF suplidores.cod_pais IS NULL THEN
CALL msg(16)
NEXT FIELD cod_pais
END IF
SELECT nom_pais
INTO paises.nom_pais
FROM cotb00018
WHERE cod_pais = suplidores.cod_pais
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_pais
END IF
DISPLAY BY NAME paises.nom_pais
AFTER FIELD term_sp
SELECT descrip_term
INTO pagos.descrip_term
FROM cotb00024
WHERE term_sp = suplidores.term_sp
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD term_sp
END IF
DISPLAY BY NAME pagos.descrip_term
AFTER FIELD cuenta_no
SELECT a.descripcion
INTO descripcion_cuenta
FROM cgtb00001 a
WHERE a.cuenta_no = suplidores.cuenta_no
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
DISPLAY BY NAME descripcion_cuenta
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF suplidores.cod_pais IS NULL THEN
CALL msg(16)
NEXT FIELD cod_pais
END IF
IF suplidores.tipo_doc IS NULL THEN
CALL msg(16)
NEXT FIELD tipo_doc
END IF
IF suplidores.rnc IS NULL THEN
CALL msg(16)
NEXT FIELD rnc
END IF
IF suplidores.nom_sp <> nombreF THEN
LET actualiza =
fgl_winquestion(
"Actualiza",
"Nombres diferentes, si actualizas vas a actualizar Finanzas",
"No",
"Yes|No",
"Question",
0)
IF actualiza = "No" THEN
CONTINUE INPUT
END IF
END IF
BEGIN WORK
IF apicheck THEN
IF suplidores.id_maintainx IS NULL THEN
CALL ApiMaintainC(
'POST', NULL, suplidores.*, usuarios)
RETURNING answer, answer2
IF answer IS NULL OR answer2 IS NULL THEN
ROLLBACK WORK
ELSE
IF answer != 0 THEN
LET suplidores.id_maintainx = answer
IF answer2 != 0 THEN
LET suplidores.contactID = answer2
END IF
END IF
END IF
ELSE
CALL ApiMaintainC(
'PATCH',
suplidores.id_maintainx,
suplidores.*,
usuarios)
RETURNING answer
DISPLAY answer2
IF answer != 1 THEN
ROLLBACK WORK
END IF
END IF
END IF
UPDATE cotb00001
SET tipo_Doc = suplidores.tipo_doc,
rnc = suplidores.rnc,
nom_sp = suplidores.nom_sp,
dir_sp = suplidores.dir_sp,
ciu_sp = suplidores.ciu_sp,
cod_pais = suplidores.cod_pais,
tel_sp = suplidores.tel_sp,
area_sp = suplidores.area_sp,
fax_sp = suplidores.fax_sp,
cont_sp = suplidores.cont_sp,
term_sp = suplidores.term_sp,
id_maintainx = suplidores.id_maintainx,
contactID = suplidores.contactID,
email = suplidores.email,
us_mod = usuarios,
fech_mod = GETDATE(),
cuenta_no = suplidores.cuenta_no,
documentoEntrada = pdocumentoEntrada
WHERE cod_sp = suplidores.cod_sp
AND cod_sp_sec = suplidores.cod_sp_sec
COMMIT WORK
LET numero_msg = 13
CALL msg(numero_msg)
END INPUT
COMMAND KEY("L") "eLiminar"
# BUSCA BALANCE
SELECT SUM(a.valor)
INTO balance
FROM cptb00001 a
WHERE a.cod_sp = suplidores.cod_sp
AND a.cod_sp_sec = suplidores.cod_sp_sec
AND a.status_t IS NULL
IF balance <> 0 THEN
CALL fgl_winmessage(
"INFO",
"NO PUEDES ELIMINAR ESTE PROVEEDOR, TIENE BALANCE EN CXP",
"INFO")
CONTINUE MENU
END IF
LET q_opt =
fgl_winquestion(
"ELIMINAR",
"ESTA SEGURO DE ELIMINAR ESTE REGISTRO",
"NO",
"NO|YES",
"QUESTION",
0)
IF q_opt = "YES" THEN
BEGIN WORK
IF apicheck THEN
IF suplidores.id_maintainx IS NOT NULL THEN
CALL ApiMaintainC(
'DELETE',
suplidores.id_maintainx,
suplidores.*,
usuarios)
RETURNING answer
IF answer != 1 THEN
ROLLBACK WORK
END IF
END IF
END IF
UPDATE cotb00001
SET status_t = "E", us_mod = usuarios, fech_mod = getdate()
WHERE cod_sp = suplidores.cod_sp
AND cod_sp_sec = suplidores.cod_sp_sec
COMMIT WORK
LET numero_msg = 39
CALL msg(numero_msg)
END IF
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_pais()
OPEN WINDOW busqueda1
AT 10, 10
WITH FORM "cofmwd019"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, COMMENT LINE LAST)
CONSTRUCT criterio
ON cotb00018.cod_pais, cotb00018.nom_pais
FROM cotb00018.cod_pais, cotb00018.nom_pais
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET selec =
"SELECT cod_pais,nom_pais FROM cotb00018 ",
"WHERE status_t is null AND ",
criterio CLIPPED,
"ORDER BY 1 "
PREPARE localiza1 FROM selec
DECLARE country CURSOR FOR localiza1
LET idx = 1
FOREACH country INTO pais_wd[idx].*
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY pais_wd TO consart.*
LET curr1 = arr_curr()
LET suplidores.cod_pais = pais_wd[curr1].cod_pais
LET paises.nom_pais = pais_wd[curr1].nom_pais
CLOSE WINDOW busqueda1
END FUNCTION
FUNCTION proveedores()
DEFINE
cod_sp SMALLINT,
descrip VARCHAR(200),
cproveedores ui.ComboBox,
query STRING
LET cproveedores = ui.combobox.forname("formonly.cod_sp")
LET query =
"SELECT a.cod_sp, CONCAT('(' ,a.cod_sp, ')',' ',a.titulo) FROM cotb00047 a "
DECLARE bproveedores CURSOR FROM query
CALL cproveedores.clear()
FOREACH bproveedores INTO cod_sp, descrip
CALL cproveedores.additem(cod_sp, descrip)
END FOREACH
END FUNCTION