Files
MBS/PROYECTO/vedir/veprmt101_1.4gl
T

1241 lines
48 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : VEPRMT101
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Datos Generales o Basicos de Clientes
PROGRAMADOR : Lic. Abner Montalvo Z.
FECHA REALIZACION : Diciembre 7, 1992.
------------------------------------------------------------------
}
GLOBALS "veprgb000.4gl"
DEFINE valor,valor1,balance DECIMAL(12,2),
pid,cuenta_contacto,num_emp SMALLINT,
n1,n2 CHAR(15),
nombre_v CHAR(31),
role_puesto VARCHAR(50),
arrContactos DYNAMIC ARRAY OF RECORD
pcontacto VARCHAR(60),
ppuesto VARCHAR(60),
email_contacto VARCHAR(60),
telefono_of CHAR(20),
celular CHAR(20),
ptelefono_casa CHAR(20)
END RECORD
DEFINE pinfo DYNAMIC ARRAY OF RECORD
num_oc INT,
fecha CHAR(10),
cotizacion_no INT,
valor DEC(12,2),
status_ord CHAR(30)
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "exterior" AS "IFMX"
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
CALL veprmt101()
END MAIN
FUNCTION veprmt101()
#CLEAR SCREEN
OPTIONS
#FORM LINE 9,
ERROR LINE 23,
HELP FILE "vepray000.exe",
HELP KEY CONTROL-W,
MESSAGE LINE 24,
COMMENT LINE 21
#OPEN FORM vefmmt101 FROM "vefmmt101"
#DISPLAY FORM vefmmt101
OPEN WINDOW vefmmt101 AT 2,2 WITH FORM "vefmmt101" ATTRIBUTE
(BORDER,FORM LINE FIRST+4,COMMENT LINE LAST)
#CALL pantalla()
#CALL ayuda()
#DISPLAY "veprmt101" AT 4,3
#DISPLAY "Datos Generales" AT 6,32
INITIALIZE cliente_bas.* TO NULL
INITIALIZE cliente_dir.* TO NULL
MENU
ON ACTION nuevo
LET int_flag = FALSE
SET CONNECTION "MSSQL"
CLEAR FORM
CALL vepcad101()
ON ACTION buscar
LET int_flag = FALSE
SET CONNECTION "MSSQL"
CALL vepcmf101()
ON ACTION activar
LET INT_FLAG = FALSE
#CLEAR FORM
INPUT BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente
AFTER FIELD sec_cliente
IF cliente_bas.sec_cliente is NULL or
cliente_bas.sec_cliente = 0 then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_cliente
ELSE
SELECT a.* INTO cliente_bas.* FROM vetb00004 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND
a.sec_cliente = cliente_bas.sec_cliente AND
a.status_t IS NULL
IF status != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
DISPLAY BY NAME cliente_bas.*
# BUSCA SI EL CLIENTE PAGA ITBIS
LET kitbis = 'N'
SELECT a.paga_itbis INTO kitbis FROM vetb00060 a
WHERE a.tipo_cliente = clliente_bas.tipo_cliente
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = (NULL,SUSER_SNAME(),GETDATE())
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
UPDATE vetb00005 SET (status_t,us_mod,fech_mod) = (NULL,SUSER_SNAME(),GETDATE())
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
UPDATE vetb00006 SET (status_t,us_mod,fech_mod) = (NULL,SUSER_SNAME(),GETDATE())
WHERE tipo_cliente_s = cliente_bas.tipo_cliente AND
sec_cliente_s = cliente_bas.sec_cliente
UPDATE vetb00028 SET (status_t,us_mod,fech_mod) = (NULL,SUSER_SNAME(),GETDATE())
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
IF kitbis = 'S' THEN
SET CONNECTION "IFMX"
UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = (NULL,user,current)
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
END IF
LET numero_msg = 188
CALL msg(numero_msg)
ON ACTION salir
LET INT_FLAG = FALSE
EXIT PROGRAM
END MENU
LET INT_FLAG = FALSE
CLOSE WINDOW vefmmt101
END FUNCTION
FUNCTION vepcad101()
## Captura los datos que va a contener el registro
# WHENEVER ERROR CONTINUE
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME cliente_bas.tipo_cliente,
cliente_bas.zona_postal,cliente_bas.num_rnc,
cliente_bas.nombre,cliente_bas.limite_credito,cliente_bas.cond_pago,
cliente_bas.tipo_negocio,
cliente_dir.calle,cliente_dir.casa_num,
cliente_dir.urbanizacion,cliente_dir.barrio,
cliente_bas.cod_zona,
cliente_bas.cod_provincia,
cliente_bas.id_ciudad,
cliente_bas.telefono,
cliente_bas.fax,cliente_bas.telex,
cliente_bas.telefono_casa,
cliente_bas.us_crea,cliente_bas.fech_crea,
cliente_bas.us_mod,cliente_bas.fech_mod,num_emp
BEFORE FIELD limite_credito
SELECT a.nom_puesto INTO role_puesto
FROM seg0003 a
WHERE a.usuario = usuarios
IF role_puesto <> 'ADMINISTRATOR' AND
role_puesto <> 'CXC' THEN
NEXT FIELD tipo_negocio
END IF
BEFORE INPUT
CALL ctipoNegocio()
LET pcondicion = ui.combobox.forname("formonly.cond_pago")
CALL ccondicion()
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (cod_zona)
CALL consulta_zonas()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
IF NOT int_flag THEN
LET cliente_bas.cod_zona = zona.cod_zona
DISPLAY descrip1 TO descripcion_zona
NEXT FIELD cod_provincia
END IF
LET int_flag = FALSE
WHEN INFIELD (cod_provincia)
LET transportista.cod_zona = cliente_bas.cod_zona
CALL consulta_provincias()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD cod_provincia
END IF
IF NOT int_flag THEN
LET cliente_bas.cod_provincia = zonap.cod_provincia
DISPLAY descrip1 TO descripcion_provincia
NEXT FIELD telefono
END IF
WHEN INFIELD (num_emp)
CALL vend_cli()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
IF NOT int_flag THEN
LET num_emp = cli_vend1[curr].num_emp
DISPLAY num_emp,nombre_v
END IF
LET int_flag = FALSE
END CASE
## Verifica que el codigo no exista en la tabla de datos basicos de clientes.
## Si existe, entonces despliega los datos del registro existente.
AFTER FIELD num_rnc
IF cliente_bas.tipo_cliente < 17 THEN
IF cliente_bas.num_rnc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_rnc
END IF
LET cliente_bas.num_rnc=cliente_bas.num_rnc CLIPPED
IF cliente_bas.zona_postal = '1' THEN
IF LENGTH(cliente_bas.num_rnc) <> 9 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD num_rnc
END IF
ELSE
IF LENGTH(cliente_bas.num_rnc) <> 11 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD num_rnc
END IF
END IF
LET VECES = 0
SELECT UNIQUE a.tipo_cliente FROM vetb00004 a
WHERE a.num_rnc = cliente_bas.num_rnc AND
a.tipo_cliente = cliente_bas.tipo_cliente and
a.status_t is null
IF STATUS <> NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT field num_rnc
END IF
LET VECES = 0
SELECT COUNT(*) INTO veces FROM vetb00004 a
WHERE a.num_rnc = cliente_bas.num_rnc AND
a.tipo_cliente = cliente_bas.tipo_cliente and
a.status_t is null
IF veces >= 1 THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT field num_rnc
END IF
#BUSCA EL RNC EN LA TABLA DE LA DGII
IF kitbis = 'S' AND cliente_bas.zona_postal ='1' THEN
LET selec =
"SELECT a.razon_social,RTRIM(a.calle),' NO.'+RTRIM(a.no_local),a.sector ",
"FROM DGII.dbo.empresas a ",
"WHERE a.rnc = ? "
PREPARE query2 FROM selec
EXECUTE query2 USING cliente_bas. num_rnc INTO cliente_bas.nombre,cliente_dir.calle,
cliente_dir.casa_num,cliente_dir.urbanizacion
IF STATUS = NOTFOUND THEN
CALL msg(3)
# NEXT FIELD num_rnc
END IF
DISPLAY BY NAME cliente_bas.nombre
END IF
END IF
AFTER FIELD tipo_cliente
IF cliente_bas.tipo_cliente is NULL or
cliente_bas.tipo_cliente = 0 then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
# BUSCA SI EL CLIENTE PAGA ITBIS
LET kitbis = 'N'
SELECT a.paga_itbis INTO kitbis FROM vetb00060 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente
AFTER FIELD nombre
IF cliente_bas.nombre IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nombre
END IF
AFTER FIELD cod_zona
IF cliente_bas.cod_zona is NULL then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
SELECT descrip INTO descrip1 FROM vetb00008
WHERE cod_zona = cliente_bas.cod_zona AND status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 43
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
DISPLAY descrip1 TO descripcion_zona
NEXT FIELD cod_provincia
AFTER FIELD cod_provincia
IF cliente_bas.cod_provincia is NULL then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_provincia
END IF
SELECT b.nombre_provincia, b.status_t
INTO descrip1, status_reg FROM vetb00009 a, vetb00020 b
WHERE a.cod_zona = cliente_bas.cod_zona AND
a.cod_provincia = cliente_bas.cod_provincia AND
b.cod_provincia = a.cod_provincia
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF status_reg = "E" THEN
LET numero_msg = 66
CALL msg(numero_msg)
NEXT FIELD cod_provincia
END IF
DISPLAY descrip1 TO descripcion_provincia
ELSE
LET numero_msg = 65
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
END IF
CALL ciudad_pais(cliente_bas.cod_provincia)
#CALL veprmt102(cliente_bas.tipo_cliente,cliente_bas.sec_cliente)
#CALL veprmt106(cliente_bas.tipo_cliente,cliente_bas.sec_cliente)
BEFORE FIELD num_emp
# CONTROL VENDEDOR
SELECT a.sec_vend INTO num_emp
FROM seg0000 a
WHERE a.usuario = suser_sname()
DISPLAY BY NAME num_emp
AFTER FIELD num_emp
IF num_emp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2
FROM adtb00003 a
WHERE (a.status_t IS NULL OR a.status_t = "I") AND a.num_emp = num_emp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET nombre_v = n1 CLIPPED," ",n2 CLIPPED
DISPLAY BY NAME nombre_v
AFTER INPUT
IF num_emp IS NULL OR num_emp = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
IF cliente_bas.cod_provincia IS NULL OR cliente_bas.cod_provincia = 0 THEN
CALL msg(16)
NEXT FIELD cod_provincia
END IF
SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2
FROM adtb00003 a
WHERE (a.status_t IS NULL OR a.status_t = "I") AND a.num_emp = num_emp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET nombre_v = n1 CLIPPED," ",n2 CLIPPED
DISPLAY BY NAME nombre_v
END INPUT
INPUT ARRAY arrContactos FROM scontactos.*
END INPUT
ON ACTION CANCEL
CALL MSG(2)
LET INT_FLAG = FALSE
RETURN
ON ACTION actualiza
# BUSCA EL MAXIMO NUMERO DEL TIPO DE CLIENTE
SELECT MAX(a.sec_cliente) INTO cliente_bas.sec_cliente
FROM vetb00004 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente
IF cliente_bas.sec_cliente IS NULL THEN
LET cliente_bas.sec_cliente = 1
END IF
LET cliente_bas.sec_cliente = cliente_bas.sec_cliente + 1
DISPLAY BY NAME cliente_bas.sec_cliente
DISPLAY cliente_Bas.tipo_cliente,' sec ',cliente_Bas.sec_cliente
## WHENEVER ERROR CONTINUE
BEGIN WORK
INSERT INTO vetb00004
(tipo_cliente,sec_cliente,nombre,cod_zona,cod_provincia,
telefono,fax,telex,limite_credito,zona_postal,num_rnc,
status_t,us_crea,fech_crea,telefono_casa,tipo_negocio,cond_pago,id_ciudad)
VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
cliente_bas.nombre,cliente_bas.cod_zona,cliente_bas.cod_provincia,
cliente_bas.telefono,cliente_bas.fax,cliente_bas.telex,
cliente_bas.limite_credito,
cliente_bas.zona_postal,cliente_bas.num_rnc,
NULL,SUSER_SNAME(),GETDATE(),cliente_bas.telefono_casa,
cliente_bas.tipo_negocio,cliente_bas.cond_pago,cliente_bas.id_ciudad)
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ADICIONAR CLIENTE","STOP")
EXIT PROGRAM
END IF
INSERT INTO vetb00005 VALUES (cliente_bas.tipo_cliente,
cliente_bas.sec_cliente,
cliente_dir.calle,
cliente_dir.casa_num,
cliente_dir.barrio,
cliente_dir.urbanizacion,
null,
null, SUSER_SNAME(), GETDATE(),
null, null)
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ADICIONAR CLIENTE","STOP")
EXIT PROGRAM
END IF
INSERT INTO vetb00028
VALUES (NULL,num_emp,cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
NULL,SUSER_SNAME(),GETDATE(),NULL,NULL)
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ADICIONAR CLIENTE","STOP")
EXIT PROGRAM
END IF
LET cuenta_contacto = arr_count()
LET pid = 0
FOR idx = 1 TO cuenta_contacto
IF arrcontactos[idx].pcontacto IS NOT NULL THEN
LET pid = pid + 1
INSERT INTO vetb00087 (tipo_cliente,sec_cliente,contacto,puesto,email,celular,
telefono_of,telefono_casa,id,us_crea,fech_crea)
VALUES
(cliente_bas.tipo_cliente,cliente_Bas.sec_cliente,
arrContactos[idx].pcontacto,arrContactos[idx].ppuesto,
arrContactos[idx].email_contacto,arrContactos[idx].celular,
arrContactos[idx].telefono_of,arrContactos[idx].ptelefono_casa,pid,
usuarios,getdate())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ADICIONAR CLIENTE","STOP")
EXIT PROGRAM
END IF
END IF
END FOR
COMMIT WORK
IF kitbis = 'S' THEN
SET CONNECTION "IFMX"
INSERT INTO vetb00004
VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
cliente_bas.nombre,cliente_bas.cod_zona,cliente_bas.cod_provincia,
cliente_bas.telefono,cliente_bas.fax,cliente_bas.telex,
cliente_bas.patente,cliente_bas.limite_credito,
cliente_bas.zona_postal,cliente_bas.num_rnc,
cliente_bas.nombre_patente,NULL,user,current,NULL,NULL)
INSERT INTO vetb00028
VALUES (NULL,num_emp,cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
NULL,user,current,NULL,NULL)
END IF
LET numero_msg = 1
CALL msg(numero_msg)
EXIT DIALOG
END DIALOG
END FUNCTION
FUNCTION vepcmf101()
# WHENEVER ERROR CONTINUE
LET int_flag = false
## Aqui se prepara para la captura del criterio de seleccion
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
CONSTRUCT criterio ON a.num_rnc,b.sec_vend,a.tipo_cliente,a.sec_cliente,
a.nombre,a.telefono,a.telefono_casa
FROM num_rnc1,kvendedor,tipo_cliente2,sec_cliente2,nombre2,telefono2,telefono3
BEFORE CONSTRUCT
CALL lista_clientes.clear()
CALL cvendedor()
ON ACTION busca_cliente
CALL lista_clientes.clear()
LET SELEC = " SELECT a.num_rnc,RTRIM(CAST(ISNULL(c.nom1_emp,' ') AS CHAR(30)))+' ' +
CAST(ISNULL(c.apell1_emp,' ') AS CHAR(30)),a.tipo_cliente,a.sec_cliente, ",
" a.nombre,a.telefono,a.telefono_casa FROM vetb00004 a,vetb00028 b,adtb00003 c ",
" WHERE a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente and ",
" b.sec_vend = c.num_emp and a.status_t is NULL AND ",
criterio clipped," ORDER BY a.tipo_cliente,a.sec_cliente"
PREPARE busca FROM selec
DECLARE datos CURSOR FOR busca
CALL lista_clientes.clear()
LET idx = 1
FOREACH datos INTO lista_clientes[idx].*
# busca ultima factura realizada
SELECT CONVERT(CHAR(10),MAX(a.fecha_factura),103)
INTO lista_clientes[idx].fecha_venta
FROM vetb00002 a
WHERE a.tipo_cliente = lista_clientes[idx].tipo_cliente2 AND
a.sec_cliente = lista_clientes[idx].sec_cliente2 AND
a.status_t IS NULL
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
CALL fgl_winmessage("ERROR","NO EXISTEN CLIENTES CON ESTA CONDICION","INFO")
EXIT DIALOG
END IF
CALL set_count(idx-1)
DISPLAY ARRAY lista_clientes TO sclientes.*
BEFORE DISPLAY
LET curr = arr_curr()
SELECT a.* INTO cliente_bas.* FROM vetb00004 a
WHERE a.tipo_cliente = lista_clientes[curr].tipo_cliente2 AND
a.sec_cliente = lista_clientes[curr].sec_cliente2
LET cliente_bas.tipo_cliente = lista_clientes[curr].tipo_cliente2
LET cliente_bas.sec_cliente = lista_clientes[curr].sec_cliente2
CALL arrcontactos.clear()
CALL busca_info(DIALOG,arr_curr())
DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago,
cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito,
cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono,
cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio,
cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal
BEFORE ROW
LET curr = arr_curr()
SELECT a.* INTO cliente_bas.* FROM vetb00004 a
WHERE a.tipo_cliente = lista_clientes[curr].tipo_cliente2 AND
a.sec_cliente = lista_clientes[curr].sec_cliente2
SET CONNECTION "MSSQL"
LET cliente_bas.tipo_cliente = lista_clientes[curr].tipo_cliente2
LET cliente_bas.sec_cliente = lista_clientes[curr].sec_cliente2
CALL arrcontactos.clear()
CALL busca_info(DIALOG, arr_curr())
DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago,
cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito,
cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono,
cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio,
cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal
AFTER ROW
LET curr = arr_curr()
SELECT a.* INTO cliente_bas.* FROM vetb00004 a
WHERE a.tipo_cliente = lista_clientes[curr].tipo_cliente2 AND
a.sec_cliente = lista_clientes[curr].sec_cliente2
SET CONNECTION "MSSQL"
CALL busca_info(DIALOG,arr_curr())
DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago,
cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito,
cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono,
cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio,
cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal
ON ACTION actualiza
CALL actualiza()
END DISPLAY
DISPLAY ARRAY pinfo TO sinformacion.*
END DISPLAY
CALL lista_clientes.clear()
ON ACTION eliminar
SELECT SUM(a.valor+a.monto_desc) INTO valor
FROM cctb00001 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND
a.sec_cliente = cliente_bas.sec_cliente AND a.status_t is NULL AND
a.tipo_doc NOT in ("DE","PC")
IF valor IS NULL THEN
LET valor = 0.00
END IF
SELECT SUM(a.valor+a.monto_desc) INTO valor1
FROM cctb00001 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente and
a.sec_cliente = cliente_bas.sec_cliente and
a.status_t is NULL AND a.tipo_doc = "DE" AND a.num_doc = a.aplica_a
IF valor1 IS NULL THEN
LET valor1 = 0.00
END IF
LET balance = valor - valor1
IF balance != 0 THEN
LET numero_msg = 184
CALL msg(numero_msg)
SLEEP 2
RETURN
ELSE
UPDATE vetb00004 SET (status_t,us_mod,fech_mod) =
("E",SUSER_SNAME(),GETDATE())
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
UPDATE vetb00005 SET (status_t,us_mod,fech_mod) =
("E",SUSER_SNAME(),GETDATE())
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
UPDATE vetb00006 SET (status_t,us_mod,fech_mod) =
("E",SUSER_SNAME(),GETDATE())
WHERE tipo_cliente_s = cliente_bas.tipo_cliente AND
sec_cliente_s = cliente_bas.sec_cliente
UPDATE vetb00028 SET (status_t,us_mod,fech_mod) =
("E",SUSER_SNAME(),GETDATE())
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
IF kitbis = 'S' THEN
SET CONNECTION "IFMX"
UPDATE vetb00004 SET (status_t,us_mod,fech_mod) =
("E",user,current)
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
UPDATE vetb00005 SET (status_t,us_mod,fech_mod) =
("E",user,current)
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
UPDATE vetb00028 SET (status_t,us_mod,fech_mod) =
("E",user,CURRENT)
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
END IF
END IF
LET numero_msg = 39
CALL msg(numero_msg)
ON ACTION cancel
LET int_flag = FALSE
INITIALIZE cliente_Bas.* TO NULL
INITIALIZE cliente_dir.* TO NULL
CALL lista_clientes.clear()
CLEAR FORM
EXIT DIALOG
RETURN
END CONSTRUCT
END DIALOG
END FUNCTION
FUNCTION vend_cli()
#WHENEVER ERROR CONTINUE
OPEN WINDOW relacion AT 8,5 WITH FORM "vefmwd101" ATTRIBUTE (BORDER,
COMMENT LINE LAST,FORM LINE FIRST + 1)
CONSTRUCT criterio ON b.num_emp FROM num_emp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
GOTO salir1
END IF
LET selec = "SELECT UNIQUE b.num_emp,b.nom1_emp,b.apell1_emp ",
"FROM adtb00003 b,vetb00028 a ",
"WHERE b.num_emp = a.sec_vend AND a.status_t IS NULL AND ",
criterio CLIPPED," ORDER BY 1 "
PREPARE comando1 FROM selec
DECLARE vendedor CURSOR FOR comando1
LET idx = 1
FOREACH vendedor INTO cli_vend1[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY cli_vend1 TO s_empleados.*
LET curr = ARR_CURR()
LET num_emp = cli_vend1[curr].num_emp
LET nombre_v= cli_vend1[curr].nom1_emp CLIPPED," ",
cli_vend1[curr].apell1_emp CLIPPED
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
GOTO salir1
END IF
LABEL salir1:
CLOSE WINDOW relacion
END FUNCTION
FUNCTION busca_info(d,i1)
DEFINE d ui.Dialog,
i1 INT
LET transportista.cod_zona = cliente_bas.cod_zona
LET nombre = cliente_bas.nombre
CALL busca_nombre_zona()
DISPLAY descrip1 TO descripcion_zona
LET transportista.cod_zona = cliente_bas.cod_zona
LET transportista.cod_provincia = cliente_bas.cod_provincia
CALL busca_provincia()
DISPLAY descrip1 TO descripcion_provincia
SELECT UNIQUE a.num_emp,a.nom1_emp,a.apell1_emp INTO num_emp,n1,n2
FROM adtb00003 a, vetb00028 b
WHERE a.num_emp = b.sec_vend AND b.tipo_cliente = cliente_bas.tipo_cliente
AND b.sec_cliente = cliente_bas.sec_cliente
LET nombre_v = n1 CLIPPED," ",n2 CLIPPED
# BUSCA SI EL CLIENTE PAGA ITBIS
LET kitbis = 'N'
SELECT a.paga_itbis INTO kitbis FROM vetb00060 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente
CALL ciudad_pais(cliente_bas.cod_provincia)
CALL ctipoNegocio()
LET pcondicion = ui.combobox.forname("formonly.cond_pago")
CALL ccondicion()
CALL busca_direcciones(cliente_bas.tipo_cliente,cliente_Bas.sec_cliente) RETURNING cliente_dir.*
CALL arrcontactos.clear()
FOR idx = 1 TO 5
DISPLAY arrcontactos[idx].pcontacto TO scontactos[idx].pcontacto
DISPLAY arrcontactos[idx].ppuesto TO scontactos[idx].ppuesto
DISPLAY arrcontactos[idx].email_contacto TO scontactos[idx].email_contacto
DISPLAY arrcontactos[idx].ptelefono_casa TO scontactos[idx].ptelefono_casa
DISPLAY arrcontactos[idx].telefono_of TO scontactos[idx].telefono_of
END FOR
DECLARE busca_contactos CURSOR FOR
SELECT a.contacto,a.puesto,a.email,a.celular,a.telefono_of,a.telefono_casa,
a.id
FROM vetb00087 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND
a.sec_cliente = cliente_bas.sec_cliente
ORDER BY a.id
LET idx = 1
FOREACH busca_contactos INTO arrContactos[idx].*
IF idx < 5 THEN
DISPLAY arrcontactos[idx].pcontacto TO scontactos[idx].pcontacto
DISPLAY arrcontactos[idx].ppuesto TO scontactos[idx].ppuesto
DISPLAY arrcontactos[idx].email_contacto TO scontactos[idx].email_contacto
DISPLAY arrcontactos[idx].ptelefono_casa TO scontactos[idx].ptelefono_casa
DISPLAY arrcontactos[idx].telefono_of TO scontactos[idx].telefono_of
END IF
LET idx = idx + 1
END FOREACH
DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente,
cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago,
cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito,
cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono,
cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio,
cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal,
num_emp,nombre_v,cliente_dir.barrio,cliente_dir.calle,cliente_dir.casa_num,
cliente_dir.urbanizacion,cliente_bas.id_ciudad
# BUSCA INFORMACION
CALL pinfo.clear()
DECLARE busca_informacion CURSOR FOR
SELECT a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,b.sub_total,a.cerrada
FROM prtb00012 a, vetb00050 b
WHERE b.cotizacion_no = a.cotizacion_no AND
a.tipo_cliente = cliente_bas.tipo_cliente AND
a.sec_cliente = cliente_bas.sec_cliente AND a.status_t IS NULL
LET idx = 1
FOREACH busca_informacion INTO pinfo[idx].*
CALL pinfo.appendElement()
IF pinfo[idx].status_ord = 'S' THEN
LET pinfo[idx].status_ord = 'CERRADA'
END IF
IF pinfo[idx].status_ord = ' N' THEN
LET pinfo[idx].status_ord = 'ABIERTA'
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION
FUNCTION actualiza()
SET CONNECTION "MSSQL"
LET INT_FLAG = FALSE
IF cliente_bas.status_t= "E" THEN
LET numero_msg= 36
CALL msg(numero_msg)
RETURN
END IF
# CONTROL VENDEDOR
SELECT a.sec_vend FROM vetb00028 a,seg0007 b
WHERE b.usuario = suser_sname() AND
b.sec_vend = a.sec_vend AND
a.tipo_cliente = cliente_bas.tipo_cliente AND
a.sec_cliente = cliente_bas.sec_cliente AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","USTED NO LE VENDE A ESTE CLIENTE, DEBE CONSULTAR EL EJECUTIVO ASIGNADO","STOP")
RETURN
END IF
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME cliente_bas.zona_postal,cliente_bas.num_rnc,
cliente_bas.nombre,cliente_bas.limite_credito,cliente_bas.cond_pago,
cliente_bas.tipo_negocio,
cliente_dir.calle,cliente_dir.casa_num,
cliente_dir.urbanizacion,cliente_dir.barrio,
cliente_bas.cod_zona,
cliente_bas.cod_provincia,
cliente_bas.id_ciudad,cliente_Bas.telefono,
cliente_bas.fax,cliente_bas.telex,cliente_bas.patente,
cliente_bas.telefono_casa,
cliente_bas.us_crea,cliente_bas.fech_crea,
cliente_bas.us_mod,cliente_bas.fech_mod,num_emp
ATTRIBUTES(WITHOUT DEFAULTS)
BEFORE FIELD limite_credito
SELECT a.nom_puesto INTO role_puesto
FROM seg0003 a
WHERE a.usuario = usuarios
IF role_puesto <> 'ADMINISTRATOR' AND
role_puesto <> 'CXC' THEN
NEXT FIELD tipo_negocio
END IF
BEFORE INPUT
CALL ctipoNegocio()
LET pcondicion = ui.combobox.forname("formonly.cond_pago")
CALL ccondicion()
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (cod_zona)
CALL consulta_zonas()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
IF NOT int_flag THEN
LET cliente_bas.cod_zona = zona.cod_zona
NEXT FIELD cod_provincia
END IF
LET int_flag = FALSE
WHEN INFIELD (cod_provincia)
LET transportista.cod_zona = cliente_bas.cod_zona
CALL consulta_provincias()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD cod_provincia
END IF
IF NOT int_flag THEN
LET cliente_bas.cod_provincia = zonap.cod_provincia
NEXT FIELD telefono
END IF
WHEN INFIELD (num_emp)
CALL vend_cli()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
IF NOT int_flag THEN
LET num_emp = cli_vend1[curr].num_emp
DISPLAY num_emp,nombre_v
END IF
LET int_flag = FALSE
END CASE
AFTER FIELD num_rnc
IF cliente_bas.tipo_cliente < 17 THEN
IF cliente_bas.num_rnc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_rnc
END IF
IF cliente_bas.zona_postal = '1' THEN
IF LENGTH(cliente_bas.num_rnc) <> 9 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD num_rnc
END IF
ELSE
IF LENGTH(cliente_bas.num_rnc) <> 11 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD num_rnc
END IF
END IF
LET VECES = 0
SELECT COUNT(*) INTO veces FROM vetb00004 a
WHERE a.num_rnc = cliente_bas.num_rnc AND
a.tipo_cliente = cliente_bas.tipo_cliente and
a.status_t is null
IF veces > 2 THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT field num_rnc
END IF
#BUSCA EL RNC EN LA TABLA DE LA DGII
IF kitbis = 'S' AND cliente_bas.zona_postal ='1'THEN
LET selec =
"SELECT a.razon_social,RTRIM(a.calle),' NO.'+RTRIM(a.no_local),a.sector ",
"FROM DGII.dbo.empresas a ",
"WHERE a.rnc = ? "
PREPARE query1 FROM selec
EXECUTE query1 USING cliente_bas. num_rnc INTO cliente_bas.nombre,cliente_dir.calle,
cliente_dir.casa_num,cliente_dir.urbanizacion
IF STATUS = NOTFOUND THEN
CALL msg(3)
#NEXT FIELD num_rnc
END IF
DISPLAY BY NAME cliente_bas.nombre
END IF
END IF
AFTER FIELD cod_zona
IF cliente_bas.cod_zona is NULL then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
SELECT descrip INTO descrip1 FROM vetb00008
WHERE cod_zona = cliente_bas.cod_zona AND status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 43
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
DISPLAY descrip1 TO descripcion_zona
NEXT FIELD cod_provincia
AFTER FIELD cod_provincia
IF cliente_bas.cod_provincia is NULL then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_provincia
END IF
SELECT b.nombre_provincia, b.status_t
INTO descrip1, status_reg FROM vetb00009 a, vetb00020 b
WHERE a.cod_zona = cliente_bas.cod_zona AND
a.cod_provincia = cliente_bas.cod_provincia AND
b.cod_provincia = a.cod_provincia
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF status_reg = "E" THEN
LET numero_msg = 66
CALL msg(numero_msg)
NEXT FIELD cod_provincia
END IF
DISPLAY descrip1 TO descripcion_provincia
ELSE
LET numero_msg = 65
CALL msg(numero_msg)
NEXT FIELD cod_zona
END IF
END IF
CALL ciudad_pais(cliente_bas.cod_provincia)
# CALL veprmt102(cliente_bas.tipo_cliente,cliente_bas.sec_cliente)
# CALL veprmt106(cliente_bas.tipo_cliente,cliente_bas.sec_cliente)
AFTER FIELD num_emp
IF num_emp IS NULL OR num_emp = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2
FROM adtb00003 a
WHERE (a.status_t IS NULL OR a.status_t = "I") AND
(a.num_emp = num_emp)
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET nombre_v = n1 CLIPPED," ",n2 CLIPPED
DISPLAY BY NAME nombre_v
AFTER INPUT
IF cliente_bas.cod_provincia IS NULL OR cliente_bas.cod_provincia = 0 THEN
CALL msg(16)
NEXT FIELD cod_provincia
END IF
# BUSCA SI EL CLIENTE PAGA ITBIS
LET kitbis = 'N'
SELECT a.paga_itbis INTO kitbis FROM vetb00060 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente
IF num_emp IS NULL OR num_emp = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2
FROM adtb00003 a
WHERE (a.status_t IS NULL OR a.status_t = "I") AND a.num_emp = num_emp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET nombre_v = n1 CLIPPED," ",n2 CLIPPED
DISPLAY BY NAME nombre_v
END INPUT
INPUT ARRAY arrContactos FROM scontactos.* ATTRIBUTES(WITHOUT DEFAULTS)
END INPUT
ON ACTION CANCEL
LET INT_FLAG = FALSE
CALL msg(2)
RETURN
ON ACTION guardar
WHENEVER ERROR CONTINUE
BEGIN WORK
UPDATE vetb00004 SET vetb00004.nombre = cliente_bas.nombre,
cod_zona = cliente_bas.cod_zona,
cod_provincia = cliente_bas.cod_provincia,
id_ciudad = cliente_bas.id_ciudad,
telefono = cliente_bas.telefono,
fax = cliente_bas.fax,
telex = cliente_bas.telex,
patente = cliente_bas.patente,
limite_credito = cliente_bas.limite_credito,
zona_postal = cliente_bas.zona_postal,
num_rnc = cliente_bas.num_rnc,
nombre_patente = cliente_bas.nombre_patente,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE() ,
telefono_casa = cliente_Bas.telefono_casa,
puesto_laboral = cliente_bas.puesto_laboral,
tipo_negocio = cliente_bas.tipo_negocio,
cond_pago = cliente_Bas.cond_pago
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP")
END IF
UPDATE vetb00005 SET calle = cliente_dir.calle,
urbanizacion = cliente_dir.urbanizacion,
barrio = cliente_dir.barrio,
casa_num = cliente_dir.casa_num,
us_mod = usuarios,
fech_mod = getdate()
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP")
END IF
SELECT a.sec_cliente FROM vetb00028 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente and
a.sec_cliente = cliente_bas.sec_cliente
IF STATUS != NOTFOUND THEN
UPDATE vetb00028 SET (sec_vend,us_mod,fech_mod) =
(num_emp,SUSER_SNAME(),GETDATE())
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP")
END IF
ELSE
INSERT INTO vetb00028 (tipo_cliente,sec_cliente,sec_vend,us_crea,fech_crea)
VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente,num_emp,SUSER_SNAME(),GETDATE())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP")
END IF
END IF
# CONTACTOS
LET cuenta_contacto = arr_count()
DELETE FROM vetb00087 WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP")
END IF
FOR idx = 1 TO cuenta_contacto
INSERT INTO vetb00087 (tipo_cliente,sec_cliente,contacto,puesto,email,celular,
telefono_of,telefono_casa,id,us_crea,fech_crea)
VALUES
(cliente_bas.tipo_cliente,cliente_Bas.sec_cliente,
arrContactos[idx].pcontacto,arrContactos[idx].ppuesto,
arrContactos[idx].email_contacto,arrContactos[idx].celular,
arrContactos[idx].telefono_of,arrContactos[idx].ptelefono_casa,pid,
usuarios,getdate())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP")
END IF
END FOR
COMMIT WORK
IF kitbis = 'S' THEN
SET CONNECTION "IFMX"
UPDATE vetb00004 SET vetb00004.nombre = cliente_bas.nombre,
cod_zona = cliente_bas.cod_zona,
cod_provincia = cliente_bas.cod_provincia,
telefono = cliente_bas.telefono,
fax = cliente_bas.fax,
telex = cliente_bas.telex,
patente = cliente_bas.patente,
limite_credito = cliente_bas.limite_credito,
zona_postal = cliente_bas.zona_postal,
num_rnc = cliente_bas.num_rnc,
nombre_patente = cliente_bas.nombre_patente,
us_mod = user,
fech_mod = current
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
SELECT a.sec_cliente FROM vetb00028 a
WHERE a.tipo_cliente = cliente_bas.tipo_cliente and
a.sec_cliente = cliente_bas.sec_cliente
IF STATUS != NOTFOUND THEN
UPDATE vetb00028 SET (sec_vend,us_mod,fech_mod) =
(num_emp,user,current)
WHERE tipo_cliente = cliente_bas.tipo_cliente AND
sec_cliente = cliente_bas.sec_cliente
ELSE
INSERT INTO vetb00028 (tipo_cliente,sec_cliente,sec_vend,us_crea,fech_crea)
VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente,num_emp,user,current)
END IF
END IF
LET numero_msg = 13
CALL msg(numero_msg)
RETURN
END DIALOG
END FUNCTION