{ ------------------------------------------------------------------ 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