{ ------------------------------------------------------------------ PROGRAMA : veprmt049 OBJETIVO : Generar las Cotizaciones de clientes PROGRAMADOR : JUAN SOTO FECHA REALIZACION : Tuesday, 27 November, 2001 11:56:20 AM MODIFICADO POR : Empresa : MARMOTECH, S.A. ------------------------------------------------------------------ } IMPORT os GLOBALS "veprgb000.4gl" DEFINE data_imp RECORD cotizacion_no, tipo_cliente, sec_cliente INT, fecha DATE, sec_vend INT, direccion_cliente, nombre, contacto, nombre_proyecto, direccion_proyecto, nombre_ciudad, nombre_vend, nombre_cliente VARCHAR(100), rnc VARCHAR(11), telefono_o, telefono_r, celular, celular1 VARCHAR(25), email VARCHAR(100), orden, cond_pago INT, soportes, instalador, plazo_entrega VARCHAR(100), comentario VARCHAR(250), sub_total, monto_desc, porc_itbis, neto, total_bruto, monto_itbis, total_neto DEC(12, 2), num_emp_int, vendedor_aux, bodega INT, tbodega VARCHAR(100) END RECORD, tbodega STRING DEFINE chconvierte, chmensaje, enviaElcorreo STRING, pgenerico VARCHAR(10), pcrea CHAR(15), correo CHAR(50), pcelular1, pcelular2 CHAR(15), factor DEC(12, 5), xautorizada CHAR(2), procedimiento, cuerpo_correo, subject STRING, emailvendedor, vendedorEmail CHAR(100), fecha_vence_ncf DATE, psincroniza BOOLEAN, ptipo_orden VARCHAR(50), pdescrip CHAR(40), punidad CHAR(4), pexistencia DEC(12, 4), controlE CHAR(2), orden_cliente CHAR(25), prtb12 RECORD LIKE prtb00012.*, exito, pestado BOOLEAN, respuesta_req, desc_permitido CHAR(3), chdescuento VARCHAR(10), precio_ant DEC(12, 2), d_tipos, f_tipos, mensaje, dir_file, filepath, filedestino STRING, chcliente, chcliente1 CHAR(12), pcomentario VARCHAR(80), primera VARCHAR(1), control_descuento VARCHAR(2), ptasa DEC(7, 3), etiqueta_cotiza CHAR(30), pdescuento1, pdescuento2, descuento_aplicado DEC(8, 2), cuenta_avance INT, paga_itbis CHAR(1), idx1, tiene_compromiso SMALLINT, tipoDocumento VARCHAR(2), comprobante VARCHAR(100) DEFINE prep_seq_cotiza SMALLINT, prep_ext SMALLINT, prep_anula SMALLINT, actualiza CHAR(1), telefono, prog CHAR(9), esta CHAR(3), codn_a, codgrupo_a, codtipo_a, codsec_a, avance, pvend, ultimo_numero, p_res, tmpnumero1, ttipo_cliente, tsec_cliente, pkit INTEGER, vetb05 RECORD LIKE vetb00005.*, p_vetb49 RECORD LIKE vetb00049.*, cantidad_ant LIKE vetb00051.cantidad DEFINE xsoporte_Ventas DYNAMIC ARRAY OF RECORD num_emp INT, nombre_adicional VARCHAR(80) END RECORD, att DYNAMIC ARRAY OF RECORD col1 STRING, col2 STRING, col3 STRING, col4 STRING, col5 STRING, col6 STRING, col7 STRING, col8 STRING, col9 STRING, col10 STRING, col11 STRING, col12 STRING, col13 STRING, col14 STRING, col15 STRING, col16 STRING, col17 STRING, col18 STRING, col19 STRING, col20 STRING END RECORD DEFINE soporte_Ventas DYNAMIC ARRAY OF RECORD num_emp INT, nombre_adicional VARCHAR(80) END RECORD DEFINE arr_kit DYNAMIC ARRAY OF RECORD area SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion VARCHAR(100), cantidad DEC(12, 5), precio DEC(12, 2), porc_desc DEC(12, 2) END RECORD DEFINE despiece DYNAMIC ARRAY OF RECORD etiqueta CHAR(20), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, lado_1 DEC(12, 5), lado_2 DEC(12, 5), lado_3 DEC(12, 5), cantidad DEC(12, 5), medida DEC(12, 5) END RECORD, cuenta_item, i, idx_soporte SMALLINT, total_medida DEC(12, 4), pporciento, pporc_desc DEC(8, 2), pfecha_desc DATE, valor1, valor2, balancecxc, cantidad_orden, pcantidadConduce, transito, existencia, reservado, pprecio, pvalor_desc DEC(12, 2) DEFINE salida STRING MAIN DEFER INTERRUPT CALL STARTLOG("veprmt049.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CALL ARG_VAL(4) RETURNING copia # Una sola conexion: EXTERIOR se escribe cross-DB con nombres de 3 partes # (exterior.dbo.*). Se elimino la conexion "IFMX" (misma instancia SQL Server). CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave CALL startlog("veprmt049.log") SELECT a.* INTO p_companias.* FROM companias a SELECT a.sec_vend, a.email, a.celular, a.celular2, b.descuento1, ISNULL(b.descuento2, 0) INTO pvend, correo, pcelular1, pcelular2, pdescuento1, pdescuento2 FROM seg0000 a, seg0001 b WHERE a.usuario = usuarios AND a.usuario = b.usuario DISPLAY "DESCUENTO1: ", pdescuento2 SELECT a.controldescuento INTO control_descuento FROM seg0003 a WHERE a.usuario = usuarios LET filedestino = "tmpfoto49.jpg" CALL veprmt049() END MAIN FUNCTION veprmt049() CLEAR SCREEN OPTIONS FORM LINE 3, ERROR LINE 24, COMMENT LINE 24 OPEN FORM vefmmt049 FROM "vefmmt049" DISPLAY FORM vefmmt049 #CALL f_canvas() # BUSCA EL ULTIMO NUMERO TEMPORAL PARA EL CONTROL DE CODIGOS # DUPLICADOS DE PRODUCTOS SET CONNECTION "MSSQL" SELECT a.documento INTO tmpnumero1 FROM repitecodigotmp a WHERE tipo_doc = 'CO' IF tmpnumero1 IS NULL OR tmpnumero1 = 0 THEN LET tmpnumero1 = 1000 INSERT INTO repitecodigotmp VALUES(tmpnumero1, 'CO') END IF LET tmpnumero1 = tmpnumero1 + 1 UPDATE repitecodigotmp SET documento = tmpnumero1 LET selec = "SELECT a.razon_social,RTRIM(a.calle),' NO.'+RTRIM(a.no_local),a.sector,RTRIM(a.estado1) ", "FROM DGII.dbo.empresas a ", "WHERE a.rnc = ? " PREPARE query2 FROM selec MENU ON ACTION nuevo SET CONNECTION "MSSQL" LET INT_FLAG = FALSE CLEAR FORM LET actualiza = "N" INITIALIZE p_vetb50.* TO NULL LET p_vetb50.estado = 'PROPUESTA' LET psincroniza = FALSE CALL arr_cotiza.clear() CALL vepcad008() ON ACTION buscar SET CONNECTION "MSSQL" LET INT_FLAG = FALSE LET psincroniza = FALSE INITIALIZE p_vetb50.* TO NULL CALL arr_cotiza.clear() CLEAR FORM LET actualiza = "S" CALL vepcmf008() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION vepcad008() DEFINE pasa BOOLEAN ## Captura los datos que va a contener el registro SET CONNECTION "MSSQL" LET INT_FLAG = FALSE #LET p_vetb50.tipo_cliente = NULL #LET p_Vetb50.sec_cliente = NULL LET p_vetb50.fecha_entrega = TODAY USING "dd/mm/yyyy" LET p_vetb50.fecha = TODAY USING "dd/mm/yyyy" IF actualiza = 'N' THEN LET p_vetb50.sec_vend = pvend SELECT a.nom1_emp, a.apell1_emp, a.telefono INTO nombres, apellidos, telefono FROM adtb00003 a WHERE a.num_emp = p_vetb50.sec_vend SELECT a.sec_vend, a.email, a.celular, a.celular2 INTO pvend, correo, pcelular1, pcelular2 FROM seg0000 a WHERE a.usuario = usuarios LET nombre_vend = nombres CLIPPED, " ", apellidos CLIPPED, pcelular1 CLIPPED, " / ", pcelular2 CLIPPED DISPLAY BY NAME nombre_vend END IF DELETE FROM repitecodigo WHERE repitecodigo.documento = tmpnumero1 AND repitecodigo.TIPO_DOC = 'CO' DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME p_vetb50.cod_cia, p_vetb50.cotizacion_no, p_vetb50.estado, p_vetb50.ventas, p_vetb50.tipo_cliente, p_vetb50.sec_cliente, p_vetb50.nombre_cliente, # p_vetb50.rnc,p_vetb50.porc_itbi,p_vetb50.nombre_proyecto, p_vetb50.porc_itbi, p_vetb50.nombre_proyecto, p_vetb50.direccion_proyecto, p_vetb50.direccion_cliente, p_vetb50.direccion_facturacion, p_vetb50.codigo, p_vetb50.cod_zona, p_vetb50.cod_provincia, p_vetb50.fecha, p_vetb50.fecha_entrega, p_vetb50.plazo_entrega, p_vetb50.bodega, p_vetb50.cond_pago, p_vetb50.sec_vend, p_vetb50.comentario, p_vetb50.contacto, p_vetb50.tipo_precio, p_vetb50.num_emp_inst, p_Vetb50.telefono_r, p_vetb50.celular, p_vetb50.telefono_o, p_vetb50.beeper, p_vetb50.fax, p_vetb50.email, p_vetb50.sec_vend_aux ATTRIBUTE(WITHOUT DEFAULTS) AFTER FIELD bodega LET tbodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(p_vetb50.bodega) BEFORE INPUT LET etiqueta_cotiza = "COTIZACION" LET p_vetb50.cod_cia = 1 LET primera = 'S' LET p_vetb50.sec_vend_aux = NULL # LET p_vetb50.direccion_proyecto = NULL # DISPLAY BY NAME p_vetb50.direccion_proyecto CALL paises() CALL lugarentregas() CALL cinstalador() IF actualiza = 'N' THEN LET p_vetb50.codigo = 'DO' DISPLAY BY NAME p_vetb50.codigo END IF IF actualiza = "S" THEN SELECT COUNT(*) INTO cuenta_avance FROM cctb00001 a WHERE a.documento_ref = p_vetb50.cotizacion_no AND a.tipo_doc = 'AV' AND a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.num_doc = a.aplica_a AND a.status_t IS NULL IF cuenta_avance > 0 THEN DISPLAY BY NAME avance NEXT FIELD nombre_proyecto END IF ELSE LET p_vetb50.estado = 'PROPUESTA' DISPLAY BY NAME p_vetb50.estado END IF ON ACTION etiqueta CASE WHEN etiqueta_cotiza = "COTIZACION" LET etiqueta_cotiza = "FACTURA PROFORMA" EXIT CASE WHEN etiqueta_cotiza = "FACTURA PROFORMA" LET etiqueta_cotiza = "COTIZACION" EXIT CASE END CASE AFTER FIELD nombre_proyecto IF p_vetb50.nombre_proyecto IS NULL THEN CALL msg(16) NEXT FIELD nombre_proyecto END IF AFTER FIELD direccion_proyecto IF p_vetb50.direccion_proyecto IS NULL THEN CALL msg(16) NEXT FIELD direccion_proyecto END IF ON ACTION busca_direccion IF p_vetb50.tipo_cliente IS NOT NULL AND p_vetb50.sec_cliente IS NOT NULL THEN LET chconvierte = NULL IF p_vetb50.direccion_proyecto IS NOT NULL THEN LET chconvierte = fgl_winquestion( "DIRECCION", "EL CAMPO ESTA LLENO CON UNA DIRECCION, DESEA SUSTITUIRLA?", "NO", "YES|NO", "QUESTION", 0) END IF IF chconvierte = 'SI' OR p_vetb50.direccion_proyecto IS NULL THEN LET selec = "SELECT ISNULL(RTRIM(a.calle),' ')+', '+ISNULL(RTRIM(a.casa_num),' ')+', '+ ISNULL(RTRIM(a.urbanizacion),' ') +', '+ISNULL(RTRIM(a.barrio),' ') FROM vetb00005 a WHERE a.tipo_cliente =? AND ", " a.sec_cliente =?" PREPARE cbusca FROM selec EXECUTE cbusca USING p_vetb50.tipo_cliente, p_vetb50.sec_cliente INTO p_vetb50.direccion_proyecto DISPLAY BY NAME p_vetb50.direccion_proyecto END IF END IF ON ACTION busca_cliente CALL busca_cliente8() DISPLAY BY NAME p_vetb50.tipo_cliente, p_vetb50.sec_cliente, p_vetb50.nombre_cliente LET int_flag = FALSE ON ACTION busca_provincia CALL busca_provincia1() DISPLAY BY NAME p_vetb50.cod_provincia, nombre_ciudad LET int_flag = FALSE BEFORE FIELD cod_cia IF actualiza = "S" THEN SELECT a.porciento, a.prima INTO pporciento, ptasa FROM vetb00019 a WHERE a.disponible = 'S' NEXT FIELD tipo_cliente ELSE SELECT a.itbi, a.porciento, a.prima INTO p_vetb50.porc_itbi, pporciento, ptasa FROM vetb00019 a WHERE a.disponible = 'S' DISPLAY BY NAME p_vetb50.porc_itbi END IF BEFORE FIELD ventas IF actualiza <> "S" THEN LET pventas = ui.ComboBox.forName("formonly.ventas") CALL cventas() END IF BEFORE FIELD cond_pago LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() BEFORE FIELD cod_zona CALL zonas(p_vetb50.codigo) AFTER FIELD tipo_cliente IF p_vetb50.tipo_cliente IS NOT NULL THEN SELECT DISTINCT a.paga_itbis, a.control_creacion_usuario INTO paga_itbis, pcrea FROM vetb00060 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.ventas = p_vetb50.ventas IF STATUS = NOTFOUND THEN LET numero_msg = 386 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF # VERIFICA QUE EL TIPO DE CLIENTE ESTE PERMITIDO PARA EL USUARIO IF pcrea = 'SI' THEN SELECT a.usuario FROM seg0001 a, seg0005 b WHERE a.usuario = usuarios AND a.cod_perfil = b.cod_perfil AND b.programa = 'veprmt101.crear' IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "USTED NO PUEDE CREAR COTIZACION PARA ESTE TIPO DE CLIENTES", "INFO") NEXT FIELD tipo_cliente END IF END IF # IF paga_itbis = 'N' THEN # LET p_vetb50.porc_itbi = NULL # DISPLAY p_vetb50.porc_itbi # END IF END IF AFTER FIELD cod_cia IF p_vetb50.cod_cia IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_cia END IF CASE WHEN p_vetb50.cod_cia = 1 LET nombre_cia = p_companias.nombre EXIT CASE WHEN p_vetb50.cod_cia = 3 LET nombre_cia = "EMPRESA GENERAL" EXIT CASE WHEN p_vetb50.cod_cia = 4 LET nombre_cia = "FERIA" EXIT CASE END CASE DISPLAY BY NAME nombre_cia BEFORE FIELD fecha IF actualiza = "N" THEN LET p_vetb50.fecha = TODAY DISPLAY BY NAME p_vetb50.fecha END IF AFTER FIELD fecha IF actualiza = "N" THEN LET p_vetb50.fecha_entrega = p_vetb50.fecha + 19 DISPLAY BY NAME p_vetb50.fecha_entrega END IF AFTER FIELD telefono_r IF p_vetb50.telefono_r IS NOT NULL THEN IF LENGTH(p_vetb50.telefono_r) != 12 THEN LET numero_msg = 77 CALL msg(numero_msg) #NEXT FIELD telefono_r END IF END IF AFTER FIELD fax IF p_vetb50.fax IS NOT NULL THEN IF LENGTH(p_vetb50.fax) != 12 THEN LET numero_msg = 77 CALL msg(numero_msg) #NEXT FIELD fax END IF END IF AFTER FIELD celular IF p_vetb50.celular IS NOT NULL THEN IF LENGTH(p_vetb50.celular) != 12 THEN LET numero_msg = 77 CALL msg(numero_msg) #NEXT FIELD celular END IF END IF BEFORE FIELD sec_vend_aux IF p_vetb50.sec_cliente IS NOT NULL THEN CALL cvendedor_aux( p_vetb50.tipo_cliente, p_vetb50.sec_cliente) END IF AFTER FIELD email # CONTROL EMAIL CLIENTE CALL inicializar() LET url_verification = p_vetb50.email CLIPPED CALL apiclient(url_verification) RETURNING estado, codigo_err IF codigo_Err = 400 THEN CALL msg(1017) NEXT FIELD email END IF AFTER FIELD sec_cliente IF p_vetb50.sec_cliente IS NOT NULL THEN # IF actualiza <> "S" THEN SELECT a.nombre, a.telefono_casa, a.telefono, a.telex, a.patente, a.cod_provincia, b.nombre_provincia, a.num_rnc, a.tipo_negocio, a.zona_postal, a.generica, a.codigodgii INTO p_vetb50.nombre_cliente, p_vetb50.telefono_r, p_vetb50.telefono_o, p_vetb50.celular, p_vetb50.email, p_vetb50.cod_provincia, nombre_ciudad, p_vetb50.rnc, cliente_bas.tipo_negocio, tipoDocumento, pgenerico, p_vetb50.codigo_dgii FROM vetb00004 a, vetb00020 b WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.cod_provincia = b.cod_provincia AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF # END IF # CONTROL EMAIL CLIENTE CALL inicializar() LET url_verification = p_vetb50.email CLIPPED CALL apiclient( url_verification) RETURNING estado, codigo_err IF codigo_Err = 400 THEN CALL msg(1017) NEXT FIELD email END IF #-------------------------------------------------------------------------------------------------------------- IF pgenerico = 'SI' THEN LET p_vetb50.cond_pago = 4 DISPLAY BY NAME p_vetb50.cond_pago NEXT FIELD nombre_cliente END IF IF pgenerico = 'NO' THEN IF cliente_bas.tipo_negocio IS NULL THEN CALL fgl_winmessage( "ERROR", "TIPO DE NEGOCIO ESTA NULO EN LA MAESTRA, FAVOR ACTUALIZAR", "INFO") NEXT FIELD sec_cliente END IF #CONTROL NUMERO RNC CLIENTE IF tipoDocumento = '1' THEN SELECT UNIQUE a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.ncf = 'S' AND a.paga_itbis = "S" IF STATUS <> NOTFOUND THEN IF p_vetb50.rnc IS NULL THEN CALL fgl_winmessage( "ERROR", "CLIENTE NO TIENE RNC", "INFO") NEXT FIELD sec_cliente ELSE EXECUTE query2 INTO cliente_bas.nombre, cliente_dir.calle, cliente_dir.casa_num, cliente_dir.urbanizacion, estado_rnc USING p_vetb50 .rnc IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "RNC CLIENTE INVALIDO", "INFO") NEXT FIELD sec_cliente END IF DISPLAY "estado: ", estado_rnc IF estado_rnc = 'ANULADO' OR estado_rnc = 'CESE TEMPORAL' OR estado_rnc = 'DADO DE BAJA' OR estado_rnc = 'RECHAZADO' OR estado_rnc = 'RECHAZADO' OR estado_rnc = 'SUSPENDIDO' THEN CALL msg(1022) NEXT FIELD sec_cliente END IF END IF END IF #--------------------------------------------------------------------- END IF SELECT a.* INTO vetb05.* FROM vetb00005 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.status_t IS NULL LET p_vetb50.direccion_cliente = vetb05.calle CLIPPED, " ,", vetb05.casa_num CLIPPED, vetb05.barrio CLIPPED, " ,", vetb05.urbanizacion CLIPPED LET p_vetb50.direccion_facturacion = p_vetb50.direccion_cliente DISPLAY BY NAME p_vetb50.direccion_cliente, p_vetb50.direccion_facturacion { VOY A COLOCAR EL CONTROL ABRIENDOLE UNA VENTANA PARA QUE EL USUARIO COLOQUE CORRECTAMENTE LA DIRECCION EN ESTOS CASOS IF LENGTH(p_vetb50.direccion_cliente) < 10 THEN CALL fgl_winmessage("INFO","LA DIRECCION DEL CLIENTE EN LA MAESTRA TIENE MENOS DE 10 CARACTERES","INFO") NEXT FIELD tipo_cliente END IF } # BUSCA INFORMACION CONTACTO DE LAS ULTIMAS COTIZACIONES IF p_vetb50.celular IS NULL THEN SELECT MAX(a.celular) INTO p_vetb50.celular FROM vetb00050 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.status_t IS NULL DISPLAY BY NAME p_vetb50.celular END IF LET p_vetb50.nombre_proyecto = NULL SELECT a.* INTO p_vetb49.* FROM vetb00049 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.status_t IS NULL IF p_vetb50.nombre_proyecto IS NULL THEN LET p_vetb50.nombre_proyecto = p_vetb49.nombre_proyecto END IF IF p_vetb50.direccion_proyecto IS NULL THEN LET p_vetb50.direccion_proyecto = p_vetb49.direccion_proyecto END IF DISPLAY BY NAME p_vetb50.*, nombre_ciudad # BUSCA VENDEDOR SELECT a.sec_vend INTO p_vetb50.sec_vend FROM vetb00028 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente IF p_vetb50.sec_cliente <> 0 THEN IF cliente_bas.tipo_negocio IS NULL THEN CALL fgl_winmessage( "INFO", "TIPO DE NEGOCIO EN BLANCO, DEBE ACTUALIZAR LA MAESTRA DEL CLIENTE", "INFO") NEXT FIELD tipo_cliente END IF IF cliente_bas.tipo_negocio <> 1 THEN CALL control_vendedor( p_vetb50.sec_vend, p_vetb50.tipo_cliente, p_vetb50.sec_cliente) RETURNING pasa IF pasa = TRUE THEN NEXT FIELD sec_vend END IF END IF END IF SELECT a.nom1_emp, a.apell1_emp, a.telefono INTO nombres, apellidos, telefono FROM adtb00003 a WHERE a.num_emp = p_vetb50.sec_vend LET nombre_vend = nombres CLIPPED, " ", apellidos CLIPPED, " ", pcelular1 CLIPPED, " / ", pcelular2 CLIPPED DISPLAY BY NAME p_vetb50.sec_vend, nombre_vend END IF # BUSCA NCF CALL busca_descripcion_ncf() #-------------------------------------------------------------- IF p_vetb50.sec_cliente IS NOT NULL THEN # BUSCA BALANCE CON AVANCES SELECT SUM(a.valor + a.monto_desc) INTO valor1 FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_Vetb50.sec_cliente AND a.tipo_doc IN ("AV") AND a.num_doc = a.aplica_a AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF # BUSCA BALANCE SIN AVANCES SELECT SUM(a.valor + a.monto_desc) INTO valor2 FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = p_Vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.tipo_doc NOT IN ("AV", "PC") AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF LET balancecxc = valor2 - valor1 DISPLAY BY NAME balancecxc # CONTROL AVANCE SELECT UNIQUE a.tipo_cliente, a.sec_cliente INTO ttipo_cliente, tsec_cliente FROM cctb00001 a WHERE a.num_cheque = p_vetb50.cotizacion_no AND a.tipo_doc = 'AV' AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN LET chcliente = ttipo_cliente USING "&&", tsec_cliente USING "&&&&&&" LET chcliente1 = p_vetb50.tipo_cliente USING "&&", p_vetb50.sec_cliente USING "&&&&&&" IF chcliente <> chcliente1 THEN CALL fgl_winmessage( "ERROR", "CLIENTE TIENE AVANCE, NO PUEDES CAMBIARLO", "INFO") NEXT FIELD tipo_cliente END IF END IF NEXT FIELD nombre_proyecto END IF END IF BEFORE FIELD nombre_cliente IF p_vetb50.sec_cliente IS NOT NULL AND pgenerico = 'NO' THEN NEXT FIELD nombre_proyecto END IF ON ACTION busca_ncf CALL btipo_fact( '1', 'FT') RETURNING p_vetb50.codigo_dgii, comprobante, fecha_vence_ncf DISPLAY BY NAME p_vetb50.codigo_dgii, comprobante AFTER FIELD cod_provincia SELECT a.nombre_provincia INTO nombre_ciudad FROM vetb00020 a WHERE a.cod_provincia = p_vetb50.cod_provincia IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME nombre_ciudad AFTER FIELD sec_vend SELECT a.nom1_emp, a.apell1_emp, a.telefono INTO nombres, apellidos, telefono FROM adtb00003 a WHERE a.num_emp = p_vetb50.sec_vend IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_vend END IF LET nombre_vend = nombres CLIPPED, " ", apellidos CLIPPED, " ", pcelular1 CLIPPED, " / ", pcelular2 CLIPPED DISPLAY BY NAME nombre_vend # CONTROL VENDEDOR IF p_vetb50.sec_cliente <> 0 THEN IF cliente_bas.tipo_negocio IS NULL THEN CALL fgl_winmessage( "INFO", "TIPO DE NEGOCIO EN BLANCO, DEBE ACTUALIZAR LA MAESTRA DEL CLIENTE", "INFO") NEXT FIELD tipo_cliente END IF IF cliente_bas.tipo_negocio <> 1 THEN CALL control_vendedor( p_vetb50.sec_vend, p_vetb50.tipo_cliente, p_vetb50.sec_cliente) RETURNING pasa IF pasa = TRUE THEN NEXT FIELD sec_vend END IF END IF END IF AFTER INPUT LET d_tipos = "Images" LET f_tipos = "*.jpg *.png *.gif" LET mensaje = %"Elige Imagen" IF p_vetb50.tipo_cliente IS NOT NULL AND pgenerico = 'NO' THEN SET CONNECTION "MSSQL" SELECT a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.ventas = p_vetb50.ventas IF STATUS = NOTFOUND THEN LET numero_msg = 386 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF END IF IF p_vetb50.cond_pago < 1 OR p_vetb50.cond_pago IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cond_pago END IF IF p_vetb50.ventas IS NULL THEN CALL msg(16) NEXT FIELD ventas END IF IF p_vetb50.sec_vend = 0 OR p_vetb50.sec_Vend IS NULL THEN CALL msg(16) NEXT FIELD sec_vend END IF IF p_vetb50.porc_itbi IS NULL THEN LET p_vetb50.porc_itbi = 0 END IF IF p_vetb50.porc_itbi = 0 THEN CALL fgl_Winmessage("INFO", "EL ITBIS ESTA EN CERO", "INFO") END IF # VERIFICAR EMAIL CALL inicializar() LET url_verification = p_vetb50.email CLIPPED CALL apiclient(url_verification) RETURNING estado, codigo_err IF codigo_Err = 400 THEN CALL msg(1017) NEXT FIELD email END IF #IF p_vetb50.cond_pago = 4 THEN # IF p_vetb50.codigo_dgii IS NULL THEN # CALL fgl_winmessage("INFORMACION","CUANDO LA COTIZACION ES AL CONTADO DEBES ESPECIFICAR EL NCF","INFO") # NEXT FIELD codigo_dgii # END IF #END IF END INPUT INPUT ARRAY arr_cotiza FROM s_pedido.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE FIELD porc_Desc IF arr_cotiza[curr].id_kit IS NOT NULL THEN NEXT FIELD ruta END IF IF arr_cotiza[curr].porc_desc > pdescuento2 THEN SELECT DISTINCT a.cotizacion_no FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_Sec = arr_cotiza[curr].cod_sec AND a.area = arr_cotiza[curr].area AND a.autoriza = "SI" IF STATUS <> NOTFOUND THEN NEXT FIELD ruta END IF END IF # IF arr_cotiza[curr].cod_sec IS NOT NULL THEN # CALL control_descuento() RETURNING arr_cotiza[curr].porc_desc # END IF BEFORE FIELD fecha_inicial_reserva LET curr = arr_curr() IF arr_cotiza[arr_curr()].cantidad_reservada IS NOT NULL THEN LET arr_cotiza[arr_curr()].fecha_inicial_reserva = TODAY USING "dd/mm/yyyy" DISPLAY arr_cotiza[arr_curr()].fecha_inicial_reserva TO s_pedido[scr_line()].fecha_inicial_reserva END IF AFTER FIELD fecha_inicial_reserva IF arr_cotiza[arr_curr()].cantidad_reservada IS NOT NULL THEN IF arr_cotiza[arr_curr()].fecha_vence_reserva IS NULL THEN LET arr_cotiza[arr_curr()].fecha_vence_reserva = arr_cotiza[arr_curr()].fecha_vence_reserva + dia DISPLAY arr_cotiza[arr_curr()].fecha_vence_reserva TO s_pedido[scr_line()].fecha_vence_reserva END IF END IF BEFORE INPUT CALL dialog.setCellAttributes(att) LET d_tipos = "Images" LET f_tipos = "*.jpg *.png *.gif" LET mensaje = %"Elige Imagen" LET chdescuento = 'NO' LET idx_soporte = 1 SELECT a.controldescuento INTO chdescuento FROM seg0003 a WHERE a.usuario = usuarios IF chdescuento IS NULL THEN LET chdescuento = 'NO' END IF SET CONNECTION "MSSQL" IF actualiza <> "N" THEN DECLARE buscaitm CURSOR FOR SELECT a.secuencia, a.area, a.descripcion_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descripcion, b.unidad_med, a.cantidad_1, a.cantidad, a.precio, a.porc_desc, '0', a.foto_producto, 'SI', a.id_kit FROM vetb00051 a, iptb00002 b WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_cia = p_vetb50.cod_cia 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 ORDER BY a.secuencia LET idx = 1 LOCATE arr_cotiza[idx].ruta IN MEMORY FOREACH buscaitm INTO arr_cotiza[idx].* LET idx = idx + 1 LOCATE arr_cotiza[idx].ruta IN MEMORY END FOREACH CALL arr_cotiza.deleteElement(idx) CALL set_count(idx - 1) END IF ON ACTION busca_descrip LET curr = arr_curr() CALL busca_descripcion() RETURNING arr_cotiza[curr].nombre_p DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p ON ACTION busca_producto CALL busca_prod1() DISPLAY arr_cotiza[curr].cod_n TO s_pedido[scr_l].cod_n DISPLAY arr_cotiza[curr].cod_grupo TO s_pedido[scr_l].cod_grupo DISPLAY arr_cotiza[curr].cod_tipo TO s_pedido[scr_l].cod_tipo DISPLAY arr_cotiza[curr].cod_sec TO s_pedido[scr_l].cod_sec DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET int_flag = FALSE NEXT FIELD cod_n ON ACTION busca_area CALL busca_area() DISPLAY arr_cotiza[curr].area TO s_pedido[scr_l].area DISPLAY arr_cotiza[curr].nombre_area TO s_pedido[scr_l].nombre_area BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() LET codn_a = arr_cotiza[curr].cod_n LET codgrupo_a = arr_cotiza[curr].cod_grupo LET codtipo_a = arr_cotiza[curr].cod_tipo LET codsec_a = arr_cotiza[curr].cod_sec # busca la autorizacion del descuento LET chdescuento = 'NO' SELECT a.controldescuento INTO chdescuento FROM seg0003 a WHERE a.usuario = usuarios IF chdescuento IS NULL THEN LET chdescuento = 'NO' END IF LET cantidad_ant = arr_cotiza[curr].cantidad AFTER FIELD area IF arr_cotiza[curr].area IS NOT NULL THEN LET nombre_area = NULL SELECT a.nombre_area INTO nombre_area FROM prtb00016 a WHERE a.area_num = arr_cotiza[curr].area IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD area END IF LET arr_cotiza[curr].nombre_area = nombre_area DISPLAY arr_cotiza[curr].nombre_area TO s_pedido[scr_l].nombre_area END IF BEFORE FIELD cantidad_reservada IF arr_cotiza[curr].cod_sec IS NOT NULL THEN #CONTROLA QUE ESTA COTIZACION PARA ESTE PRODUCTO NO ESTE AUTORIZADA LA RESERVA SELECT a.cotizacion_no FROM vetb00103 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec AND a.autorizada = 'SI' IF STATUS <> NOTFOUND THEN LET att[curr].col18 = 'red' LET att[curr].col19 = 'red' LET att[curr].col20 = 'red' NEXT FIELD cod_n ELSE LET att[curr].col18 = 'black' LET att[curr].col19 = 'black' LET att[curr].col20 = 'black' END IF END IF AFTER FIELD cantidad_reservada IF arr_cotiza[curr].cod_sec IS NOT NULL THEN IF arr_cotiza[curr].cantidad_reservada > 0 THEN IF arr_cotiza[curr].cantidad_reservada > arr_cotiza[curr].cantidad THEN CALL fgl_winmessage( "ERROR", "NO PUEDES RESERVAR CANTIDAD MAYOR A COTIZADA", "INFO") NEXT FIELD cantidad_reservada END IF IF arr_cotiza[curr].cantidad_reservada > pexistencia THEN CALL fgl_winmessage( "ERROR", "NO PUEDES RESERVAR CANTIDAD, NO TIENE DISPONIBLE", "INFO") LET arr_cotiza[curr].cantidad_reservada = 0 LET arr_cotiza[curr].fecha_inicial_reserva = NULL LET arr_cotiza[curr].fecha_vence_reserva = NULL DISPLAY arr_cotiza[curr].cantidad_reservada TO s_pedido[scr_l].cantidad_reservada DISPLAY arr_cotiza[curr].fecha_inicial_reserva TO s_pedido[scr_l].fecha_inicial_reserva DISPLAY arr_cotiza[curr].fecha_vence_reserva TO s_pedido[scr_l].fecha_vence_reserva END IF IF pfecha_desc > TODAY THEN CALL fgl_winmessage( "ERROR", "NO PUEDES RESERVAR CANTIDAD EN PRODUCTOS CON OFERTAS", "INFO") LET arr_cotiza[curr].cantidad_reservada = 0 DISPLAY arr_cotiza[curr].cantidad_reservada TO s_pedido[scr_l].cantidad_reservada NEXT FIELD cod_sec END IF LET arr_cotiza[curr].fecha_vence_reserva = TODAY + p_companias.dias_vence_reservas DISPLAY arr_cotiza[curr].fecha_vence_reserva TO s_pedido[scr_l].fecha_vence_reserva END IF END IF AFTER FIELD ruta LET curr = arr_curr() IF arr_cotiza[curr].cod_sec IS NOT NULL THEN IF arr_cotiza[curr].ruta IS NULL OR LENGTH(arr_cotiza[curr].ruta) < 4 THEN LOCATE arr_cotiza[curr].ruta IN MEMORY CALL arr_cotiza[curr].ruta.readFile("fotodefault.jpg") END IF END IF AFTER FIELD cod_sec LET scr_l = scr_line() LET curr = arr_curr() LET pporc_desc = 0 LET pfecha_desc = NULL IF arr_cotiza[curr].cod_sec IS NOT NULL THEN LET controlE = NULL CALL cambio_codigo() IF actualiza = 'N' THEN # OPERACION PARA CUANDO ES ADICIONANDO COTIZACION LOCATE arr_cotiza[curr].ruta IN MEMORY LET pporc_desc = 0 SELECT a.descrip_esp, a.unidad_med, b.factor_conv, a.control_existencia, a.porc_desc, CONVERT(VARCHAR(10), a.fecha_desc, 103), a.imagen, a.descuento_permitido INTO arr_cotiza[curr].nombre_p, arr_cotiza[curr].unidad, factor, controle, pporc_desc, pfecha_desc, arr_cotiza[curr].ruta, desc_permitido FROM iptb00002 a, iptb00001 b WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].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 AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD area END IF DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad DISPLAY arr_cotiza[curr].porc_desc TO s_pedido[scr_l].porc_desc CALL arr_cotiza[curr].ruta.writeFile(filedestino) DISPLAY filedestino TO foto_producto LET pdescrip = arr_cotiza[curr].nombre_p LET punidad = arr_cotiza[curr].unidad #--------------------------------------- TERMINO ADICIONAR ------------------------------ ELSE # MODIFICACION IF arr_cotiza[curr] .nombre_p IS NULL THEN # OPERACION CUANDO ESTA MODIFICANDO COTIZACION IF arr_cotiza[curr].ruta IS NULL OR LENGTH(arr_cotiza[curr].ruta) < 4 THEN LOCATE arr_cotiza[curr].ruta IN MEMORY CALL arr_cotiza[curr] .ruta.readFile("fotodefault.jpg") END IF SELECT a.descrip_esp, a.unidad_med, b.factor_conv, a.control_existencia, a.imagen, a.descuento_permitido INTO arr_cotiza[curr].nombre_p, arr_cotiza[curr].unidad, factor, controlE, arr_cotiza[curr].ruta, desc_permitido FROM iptb00002 a, iptb00001 b WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].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 AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD area END IF IF curr > 1 THEN LET arr_cotiza[curr].fila = arr_cotiza[curr - 1].fila + 1 ELSE LET arr_cotiza[curr].fila = curr END IF DISPLAY arr_cotiza[curr].fila TO s_pedido[scr_l].fila DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET pdescrip = arr_cotiza[curr].nombre_p LET punidad = arr_cotiza[curr].unidad CALL arr_cotiza[curr].ruta.writeFile(filedestino) DISPLAY filedestino TO foto_producto END IF IF arr_cotiza[curr].ruta IS NULL OR LENGTH(arr_cotiza[curr].ruta) < 4 THEN LOCATE arr_cotiza[curr].ruta IN MEMORY CALL arr_cotiza[curr] .ruta.readFile("fotodefault.jpg") DISPLAY filedestino TO foto_producto END IF END IF LET verdad = "N" # CONTROL KIT SELECT UNIQUE a.cod_sec FROM vetb00029 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec AND a.disponible = 'SI' AND a.costeo_orden = "NO" IF STATUS <> NOTFOUND THEN CALL arr_kit.clear() CALL visualiza_kit( arr_cotiza[curr].cod_n, arr_cotiza[curr].cod_grupo, arr_cotiza[curr].cod_tipo, arr_cotiza[curr].cod_sec, arr_cotiza[curr].id_kit, "SI") RETURNING pkit, arr_cotiza[curr].precio, arr_cotiza[curr].nombre_p CALL visualiza_detalle_kit(pkit) RETURNING arr_kit LET arr_cotiza[curr].id_kit = pkit DELETE FROM tmp_kit WHERE cotizacion_no = tmpnumero1 AND id_kit = pkit DECLARE dtmp_kit CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad, a.precio, a.porc_desc FROM vetb00030 a WHERE a.id_kit = pkit LET i = 1 FOREACH dtmp_kit INTO arr_kit[i].cod_n, arr_kit[i].cod_grupo, arr_kit[i].cod_tipo, arr_kit[i].cod_sec, arr_kit[i].cantidad, arr_kit[i].precio, arr_kit[i].porc_desc LET arr_kit[i].area = arr_cotiza[curr].area LET arr_kit[i].cantidad = arr_cotiza[curr].cantidad IF p_vetb50.ventas = 1 THEN LET arr_kit[i].precio = arr_kit[i].precio * ptasa END IF INSERT INTO tmp_kit( id_kit, cotizacion_no, area, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, porc_desc) VALUES(pkit, tmpnumero1, arr_cotiza[curr].area, arr_kit[i].cod_n, arr_kit[i].cod_grupo, arr_kit[i].cod_tipo, arr_kit[i].cod_sec, arr_kit[i].cantidad, arr_kit[i].precio, arr_kit[i].porc_desc) LET i = i + 1 END FOREACH IF arr_cotiza[curr].precio IS NULL OR arr_cotiza[curr].precio = 0 THEN CALL fgl_winmessage( "ERROR", "ESTE KIT NO TIENE PRECIOS", "INFO") NEXT FIELD cod_sec ELSE IF p_vetb50.ventas = 1 THEN LET arr_cotiza[curr].precio = arr_cotiza[curr].precio * ptasa END IF NEXT FIELD cantidad_1 END IF ELSE LET arr_cotiza[curr].id_kit = NULL CALL arr_cotiza[curr].ruta.writeFile(filedestino) DISPLAY filedestino TO foto_producto LET p_vetb50.prima = 1 CALL precios( p_vetb50.ventas, arr_cotiza[curr].cod_n, arr_cotiza[curr].cod_grupo, arr_cotiza[curr].cod_tipo, arr_cotiza[curr].cod_Sec, p_vetb50.tipo_cliente, p_vetb50.sec_cliente) RETURNING arr_cotiza[curr].precio, existe IF existe = 'N' THEN CALL fgl_winmessage( "ERROR", "PRODUCTO NO TIENE PRECIO, NO PUEDES VENDERLO. ESTA LINEA SE BORRARA DESPUES DE CLICKER SOBRE OK", "INFO") DISPLAY " " TO foto_producto LET existe = 'S' CALL arr_cotiza.deleteElement(curr) NEXT FIELD cod_n END IF LET precio_ant = arr_cotiza[curr].precio IF precio_ant IS NULL THEN LET precio_ant = 0 END IF END IF DISPLAY arr_cotiza[curr].precio TO s_pedido[scr_l].precio DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p # CONTROL DUPLICADO EN CAPTURA DE DATOS CALL repite_codigo() IF verdad = "S" THEN NEXT FIELD cod_sec END IF { DELETE FROM repitecodigo WHERE documento = tmpnumero1 and tipo_doc = 'CO' FOR idx = 1 TO arr_count() LET pcodigo = arr_cotiza[idx].area USING "&&&", arr_cotiza[idx].cod_n USING "&&&&", arr_cotiza[idx].cod_grupo USING "&&&&", arr_cotiza[idx].cod_tipo USING "&&&&", arr_cotiza[idx].cod_sec USING "&&&&" IF pcodigo IS NOT NULL OR pcodigo <> ' ' THEN WHENEVER ERROR CONTINUE INSERT INTO repitecodigo (documento,tipo_doc,codigo,codid,us_crea,fech_crea) VALUES (tmpnumero1,'CO',pcodigo,idx,usuarios,getdate()) IF sqlca.sqlcode THEN DISPLAY "error ",sqlca.sqlcode CALL fgl_winmessage("DUPLICADO","CODIGO DUPLICADO EN CAPTURA DE DATOS","STOP") CALL arr_cotiza.deleteElement(curr) DELETE FROM repitecodigo WHERE documento = tmpnumero1 and tipo_doc = 'CO' NEXT FIELD area END IF END IF END FOR } # BUSCA MENSAJE DE LA CLASE DEL PRODUCTO SELECT a.comentario INTO pcomentario FROM iptb00020 a WHERE a.cod_n = arr_cotiza[curr].cod_n IF pcomentario IS NOT NULL THEN LET primera = 'N' END IF # CONTROL DESPIECE SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec IF STATUS <> NOTFOUND THEN CALL despiece() DISPLAY arr_cotiza[curr].cantidad_1 TO s_pedido[scr_l].cantidad_1 END IF #CONTROL SOPORTE A VENTAS # Se coloco en comentario porque ya se esta tomando encuenta otra forma de comisionar { IF arr_cotiza[arr_curr()].cod_sec IS NOT NULL THEN CALL cuenta_soporte(arr_cotiza[arr_curr()].cod_n,arr_cotiza[arr_curr()].cod_grupo, arr_cotiza[arr_curr()].cod_tipo,arr_cotiza[arr_curr()].cod_sec) RETURNING numero_soporte IF numero_soporte > 1 THEN CALL busca_soporte(arr_cotiza[arr_curr()].cod_n,arr_cotiza[arr_curr()].cod_grupo, arr_cotiza[arr_curr()].cod_tipo,arr_cotiza[arr_curr()].cod_sec) RETURNING xsoporte_ventas LET soporte_ventas[arr_curr()].num_emp=xsoporte_ventas[arr_curr()].num_emp LET soporte_Ventas[arr_curr()].nombre_adicional = xsoporte_Ventas[arr_curr()].nombre_adicional ELSE SELECT DISTINCT a.sec_vend,b.nom1_emp||' '||b.apell1_Emp INTO soporte_ventas[arr_curr()].num_emp,soporte_ventas[arr_curr()].nombre_adicional FROM cctb00008 a,adtb00003 b WHERE a.cod_n = arr_cotiza[arr_curr()].cod_n AND a.cod_grupo =arr_cotiza[arr_curr()].cod_grupo AND a.cod_tipo = arr_cotiza[arr_curr()].cod_tipo AND a.cod_sec = arr_cotiza[arr_curr()].cod_sec AND a.sec_vend = b.num_emp END IF LET idx_soporte = idx_soporte + 1 END IF } END IF AFTER FIELD precio IF arr_cotiza[curr].cod_Sec IS NOT NULL THEN IF arr_cotiza[curr].precio < precio_ant THEN CALL fgl_winmessage( "ERROR", "PRECIO ES MENOR AL PRECIO DE LISTA", "INFO") LET arr_cotiza[curr].precio = precio_ant DISPLAY arr_cotiza[curr].precio TO s_pedido[scr_l].precio NEXT FIELD precio END IF END IF { AFTER ROW # CONTROL DESPIECE IF arr_cotiza[curr].cod_sec IS NOT NULL AND arr_cotiza[curr].cod_n IS NOT NULL AND arr_cotiza[curr].cod_grupo IS NOT NULL AND arr_cotiza[curr].cod_tipo IS NOT NULL THEN SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec IF STATUS <> NOTFOUND THEN IF actualiza = 'N' THEN LET p_vetb50.cotizacion_no = tmpnumero1 END IF SELECT a.cod_n FROM vetb00022 a WHERE a.area = arr_cotiza[curr].area AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_Sec = arr_cotiza[curr].cod_sec AND a.cotizacion_no = p_vetb50.cotizacion_no IF STATUS = NOTFOUND THEN CALL despiece() DISPLAY arr_cotiza[curr].cantidad_1 TO s_pedido[scr_l].cantidad_1 END IF END IF END IF} ON ACTION dibujo LET curr = arr_curr() CALL ui.Interface.frontCall( "standard", "openfile", [dir_file, d_tipos, f_tipos, mensaje], [filepath]) IF filepath IS NOT NULL THEN # LET arr_cotiza[curr].ruta= filepath CLIPPED # DISPLAY arr_cotiza[curr].ruta TO foto_producto # LET filedestino = FGL_GETENV("IMAGENNOMINA") # LET filedestino = filedestino CLIPPED,"\\PRODUCTOS\\",p_vetb50.cotizacion_no USING "&&&&&&","-", # arr_cotiza[curr].cod_n USING "&&&&", # arr_cotiza[curr].cod_grupo USING "&&&&",'-', # arr_cotiza[curr].cod_tipo USING "&&&&",'-', # arr_cotiza[curr].cod_sec USING "&&&&", # ".jpg" # CALL fgl_winmessage("2",filedestino,"info") # CALL fgl_winmessage("3",ruta[idx],"info") CALL fgl_getfile(filepath, filedestino) CALL arr_cotiza[curr].ruta.readFile(filedestino) DISPLAY filedestino TO foto_producto END IF BEFORE FIELD precio IF arr_cotiza[curr].cod_sec IS NOT NULL THEN # CONTROL KIT SELECT UNIQUE a.cod_sec FROM vetb00029 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec AND a.disponible = 'SI' IF STATUS <> NOTFOUND THEN NEXT FIELD ruta END IF END IF AFTER FIELD porc_desc LET curr = arr_curr() IF arr_cotiza[curr].cod_sec IS NOT NULL THEN IF control_descuento <> "SI" THEN SELECT a.porciento INTO pporciento FROM vetb00019 a WHERE a.disponible = 'S' SELECT a.porc_desc, CONVERT(VARCHAR(10), a.fecha_desc, 103), a.descuento_permitido INTO pporc_desc, pfecha_desc, desc_permitido FROM iptb00002 a, iptb00001 b WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].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 AND a.status_t IS NULL IF TODAY < pfecha_desc THEN IF arr_cotiza[curr].porc_desc > pporc_desc THEN CALL fgl_winmessage( "ERROR", "PORCIENTO DESCUENTO MAYOR AL PERMITIDO PARA EL PRODUCTO", "INFO") LET arr_cotiza[curr].porc_desc = 0 NEXT FIELD porc_desc END IF ELSE IF control_descuento = "NO" OR control_descuento IS NULL THEN DISPLAY "DESCUENTO ", arr_cotiza[curr].porc_desc, " 2do ", pdescuento2 DISPLAY "CONTROL ", control_Descuento IF arr_cotiza[curr].porc_desc > pdescuento2 THEN CALL fgl_winmessage( "ERROR", "PORCIENTO DESCUENTO MAYOR AL PERMITIDO", "INFO") LET arr_cotiza[curr].porc_desc = 0 NEXT FIELD porc_desc END IF END IF END IF END IF IF arr_cotiza[curr].porc_desc IS NULL THEN LET arr_cotiza[curr].porc_desc = 0 END IF IF desc_permitido = "NO" THEN LET arr_cotiza[curr].porc_desc = 0 END IF LET arr_cotiza[curr].total_p = arr_cotiza[curr].precio * arr_cotiza[curr].cantidad LET arr_cotiza[curr].total_p = arr_cotiza[curr].total_p - (arr_cotiza[curr].total_p * (arr_cotiza[curr].porc_desc / 100)) DISPLAY arr_cotiza[curr].total_p TO s_pedido[scr_l].total_p DISPLAY arr_cotiza[curr].porc_desc TO s_pedido[scr_l].porc_desc END IF AFTER FIELD cantidad_1 IF actualiza = "S" THEN SELECT UNIQUE a.cotizacion_no FROM prtb00012 a, prtb00013 b WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.num_oc = b.num_oc AND # b.area = arr_cotiza[curr].area and b.cod_n = arr_cotiza[curr].cod_n AND b.cod_grupo = arr_cotiza[curr].cod_grupo AND b.cod_tipo = arr_cotiza[curr].cod_tipo AND b.cod_sec = arr_cotiza[curr].cod_sec AND a.status_t IS NULL IF STATUS != NOTFOUND THEN LET numero_msg = 392 CALL msg(numero_msg) LET arr_cotiza[curr].cantidad = cantidad_ant DISPLAY arr_cotiza[curr].cantidad TO s_pedido[scr_l].cantidad END IF END IF IF arr_cotiza[curr].cod_sec IS NOT NULL THEN SELECT a.factor_conv INTO factor FROM iptb00001 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec AND a.status_t IS NULL LET arr_cotiza[curr].cantidad = arr_cotiza[curr].cantidad_1 * factor DISPLAY arr_cotiza[curr].cantidad TO s_pedido[scr_l].cantidad # BUSCA EXISTENCIA IF controlE = "SI" THEN LET pexistencia = 0 # SELECT SUM(a.cantidad_2) iNTO pexistencia FROM iptb00006 a # WHERE a.cod_n = arr_cotiza[curr].cod_n AND # a.cod_grupo = arr_cotiza[curr].cod_grupo AND # a.cod_tipo = arr_cotiza[curr].cod_tipo AND # a.cod_Sec = arr_cotiza[curr].cod_sec AND # a.status_t IS NULL CALL disponibles( arr_cotiza[curr].cod_n, arr_cotiza[curr].cod_grupo, arr_cotiza[curr].cod_tipo, arr_cotiza[curr].cod_sec, TODAY) RETURNING cantidad_orden, pcantidadConduce, transito, existencia, reservado LET pexistencia = existencia - (cantidad_orden + pcantidadconduce) - reservado IF pexistencia < 0 THEN CALL FGL_WINMESSAGE( 'ADVERTENCIA', 'DISPONIBLE EN NEGATIVO', 'STOP') END IF IF arr_cotiza[curr].cantidad > pexistencia THEN CALL FGL_WINMESSAGE( 'ADVERTENCIA', 'CANTIDAD EXCEDE A CANTIDAD DISPONIBLE ', 'STOP') END IF END IF SELECT UNIQUE a.cod_sec FROM vetb00029 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec AND a.disponible = 'SI' IF STATUS <> NOTFOUND THEN IF arr_cotiza[curr].porc_desc IS NULL THEN LET arr_cotiza[curr].porc_desc = 0 END IF LET arr_cotiza[curr].total_p = arr_cotiza[curr].precio * arr_cotiza[curr].cantidad LET arr_cotiza[curr].total_p = arr_cotiza[curr].total_p - (arr_cotiza[curr].total_p * (arr_cotiza[curr].porc_desc / 100)) DISPLAY arr_cotiza[curr].total_p TO s_pedido[scr_l].total_p NEXT FIELD ruta END IF END IF AFTER INPUT LET p_vetb50.total_bruto = 0 LET p_vetb50.monto_desc = 0 FOR idx = 1 TO arr_cotiza.getLength() IF arr_cotiza[idx].cod_sec IS NOT NULL AND arr_cotiza[idx].area IS NULL THEN CALL fgl_winmessage( "ERROR", "AREA ESTA EN BLANCO", "INFO") NEXT FIELD area END IF #CONTROL DESCUENTO IF arr_cotiza[idx].cod_sec IS NOT NULL THEN IF control_descuento <> "SI" THEN SELECT a.porciento INTO pporciento FROM vetb00019 a WHERE a.disponible = 'S' SELECT a.porc_desc, CONVERT(VARCHAR(10), a.fecha_desc, 103), a.descuento_permitido INTO pporc_desc, pfecha_desc, desc_permitido FROM iptb00002 a, iptb00001 b WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[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 AND a.status_t IS NULL IF TODAY < pfecha_desc THEN IF arr_cotiza[idx].porc_desc > pporc_desc THEN CALL fgl_winmessage( "ERROR", "PORCIENTO DESCUENTO MAYOR AL PERMITIDO PARA EL PRODUCTO", "INFO") LET arr_cotiza[idx].porc_desc = 0 NEXT FIELD porc_desc END IF ELSE IF control_descuento = "NO" OR control_descuento IS NULL THEN IF arr_cotiza[idx].porc_desc > pdescuento2 THEN CALL fgl_winmessage( "ERROR", "PORCIENTO DESCUENTO MAYOR AL PERMITIDO", "INFO") LET arr_cotiza[idx].porc_desc = 0 NEXT FIELD porc_desc END IF END IF END IF END IF END IF #--------------------------------------------------------------------------- IF arr_cotiza[idx].cod_sec IS NOT NULL THEN # CONTROL DUPLICADO EN CAPTURA DE DATOS CALL repite_codigo() IF verdad = "S" THEN NEXT FIELD cod_sec END IF IF arr_cotiza[idx].porc_desc IS NULL THEN LET arr_cotiza[idx].porc_desc = 0 END IF IF arr_cotiza[idx].cod_sec IS NOT NULL THEN IF arr_cotiza[idx].precio IS NULL OR arr_cotiza[idx].precio = 0 THEN CALL msg(16) NEXT FIELD precio END IF END IF # CONTROL KIT PARA LOS PRECIOS DE LOS PRODUCTOS QUE NO ESTAN EN LA TABLA DE LOS KIT IF arr_cotiza[idx].id_kit IS NOT NULL THEN SELECT UNIQUE a.cod_sec FROM vetb00029 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec AND a.disponible = 'SI' IF STATUS = NOTFOUND THEN # CONTROL PRECIO INDEPENDIENTE SELECT DISTINCT a.cod_n FROM vetb00025 a WHERE a.ventas = p_vetb50.ventas AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "EXISTE UN PRODUCTO QUE NO TIENE PRECIOS PARA ESTA MONEDA, FAVOR CORREGIR", "INFO") NEXT FIELD cod_n END IF END IF IF arr_cotiza[idx].precio < precio_ant THEN CALL fgl_winmessage( "ERROR", "PRECIO ES MENOR AL PRECIO DE LISTA", "INFO") LET arr_cotiza[idx].precio = precio_ant DISPLAY arr_cotiza[idx].precio TO s_pedido[scr_l].precio NEXT FIELD precio END IF END IF #CONTROL PERMITIR COLOCAR DESCUENTO SELECT a.descuento_permitido INTO desc_permitido FROM iptb00002 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec IF desc_permitido = "NO" THEN LET arr_cotiza[idx].porc_desc = 0 END IF # CONTROL DESPIECE SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec IF STATUS <> NOTFOUND THEN SELECT DISTINCT a.cod_n FROM vetb00022 a WHERE a.area = arr_cotiza[idx].area AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.cotizacion_no = p_vetb50.cotizacion_no IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "EXISTE UN CODIGO QUE NECESITA DESPIEZAR, FAVOR DE DIRIGIRSE AL CODIGO Y REALIZAR EL DESPIECE", "INFO") NEXT FIELD area END IF END IF LET p_vetb50.total_bruto = p_vetb50.total_bruto + (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) LET p_vetb50.monto_desc = (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) * (arr_cotiza[idx].porc_desc / 100) + p_vetb50.monto_desc END IF END FOR IF p_vetb50.porc_itbi IS NULL THEN LET p_vetb50.porc_itbi = 0 END IF IF p_vetb50.porc_itbi = 0 THEN CALL fgl_Winmessage("INFO", "EL ITBIS ESTA EN CERO", "INFO") END IF LET p_vetb50.sub_total = p_vetb50.total_bruto - p_vetb50.monto_desc LET p_vetb50.monto_itbi = p_vetb50.sub_total * (p_vetb50.porc_itbi / 100) LET p_vetb50.total_neto = p_vetb50.sub_total + p_vetb50.monto_itbi DISPLAY BY NAME p_vetb50.* #CONTROL SOPORTE # ESTA FUNCION PARA DETERMINAR SI EXISTEN DOS SOPORTES PARA UNA MISMA LINEA DE NEGOCIO #CALL busca_duplicado(soporte_Ventas,usuarios) RETURNING soporte_Ventas END INPUT # CONTROL SOPORTE { INPUT ARRAY soporte_Ventas FROM soporte.* ATTRIBUTE(WITHOUT DEFAULTS) AFTER FIELD num_emp LET idx = arr_curr() IF soporte_ventas[idx].num_emp IS NOT NULL THEN SELECT a.nom1_emp||' '||a.apell1_emp INTO soporte_ventas[idx].nombre_adicional FROM adtb00003 a WHERE a.num_emp = soporte_ventas[idx].num_emp IF STATUS = NOTFOUND THEN CALL fgl_Winmessage("ERROR","REGISTRO NO EXISTE","INFO") NEXT FIELD num_emp END IF END IF AFTER INPUT CALL busca_duplicado(soporte_Ventas,usuarios) RETURNING soporte_Ventas END INPUT } ON ACTION cancel LET tipo2 = FGL_WINQUESTION( "Pregunta", "Esta seguro que desea salir del programa?", "no", "yes|no", "question", 0) LET tipo2 = UPSHIFT(tipo2) DELETE FROM repitecodigo WHERE documento = tmpnumero1 AND tipo_doc = 'CO' DELETE FROM tmp_kit WHERE cotizacion_no = tmpnumero1 LET int_flag = FALSE IF tipo2 = "YES" THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT DIALOG ELSE CONTINUE DIALOG END IF ON ACTION actualiza # CONTROL LUGAR ENTREGA IF p_vetb50.bodega IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD bodega END IF # CONTROL ZONA IF p_vetb50.cod_zona IS NULL THEN CALL msg(16) NEXT FIELD cod_zona END IF #CONTROL MONEDAS IF p_vetb50.tipo_cliente IS NOT NULL THEN SELECT a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.ventas = p_vetb50.ventas IF STATUS = NOTFOUND THEN CALL msg(386) NEXT FIELD ventas END IF END IF IF p_vetb50.sec_cliente IS NOT NULL THEN SELECT a.nombre, a.telefono_casa, a.telefono, a.telex, a.patente, a.cod_provincia, b.nombre_provincia, a.num_rnc, a.tipo_negocio, a.zona_postal, a.generica, a.codigodgii INTO p_vetb50.nombre_cliente, p_vetb50.telefono_r, p_vetb50.telefono_o, p_vetb50.celular, p_vetb50.email, p_vetb50.cod_provincia, nombre_ciudad, p_vetb50.rnc, cliente_bas.tipo_negocio, tipoDocumento, pgenerico, p_vetb50.codigo_dgii FROM vetb00004 a, vetb00020 b WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.cod_provincia = b.cod_provincia AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF #CONTROL NUMERO RNC CLIENTE IF tipoDocumento = '1' THEN SELECT UNIQUE a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.ncf = 'S' AND a.paga_itbis = "S" IF STATUS <> NOTFOUND THEN IF p_vetb50.rnc IS NULL THEN CALL fgl_winmessage( "ERROR", "CLIENTE NO TIENE RNC", "INFO") NEXT FIELD sec_cliente ELSE EXECUTE query2 INTO cliente_bas.nombre, cliente_dir.calle, cliente_dir.casa_num, cliente_dir.urbanizacion, estado_rnc USING p_vetb50 .rnc IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "RNC CLIENTE INVALIDO", "INFO") NEXT FIELD sec_cliente END IF DISPLAY "estado: ", estado_rnc IF estado_rnc = 'ANULADO' OR estado_rnc = 'CESE TEMPORAL' OR estado_rnc = 'DADO DE BAJA' OR estado_rnc = 'RECHAZADO' OR estado_rnc = 'RECHAZADO' OR estado_rnc = 'SUSPENDIDO' THEN CALL msg(1022) NEXT FIELD sec_cliente END IF END IF END IF #--------------------------------------------------------------------- END IF END IF LET chdescuento = 'NO' SELECT a.controldescuento INTO chdescuento FROM seg0003 a WHERE a.usuario = usuarios LET p_vetb50.total_bruto = 0 LET p_vetb50.monto_desc = 0 FOR idx = 1 TO arr_cotiza.getLength() IF arr_cotiza[idx].cod_sec IS NOT NULL THEN IF arr_cotiza[idx].porc_desc IS NULL THEN LET arr_cotiza[idx].porc_desc = 0 END IF IF arr_cotiza[idx].precio IS NULL OR arr_cotiza[idx].precio = 0 THEN CALL msg(16) NEXT FIELD cod_n END IF IF arr_cotiza[idx].cod_sec IS NOT NULL THEN # CONTROL PRECIO IF arr_cotiza[idx].id_kit IS NULL THEN SELECT a.precio INTO pprecio FROM vetb00025 a, seg0009 b WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_Grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.tipo_cliente = 0 AND a.sec_cliente = 0 AND a.cod_lista = b.cod_lista AND b.usuario = usuarios AND a.ventas = p_vetb50.ventas IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "INFO", "PRODUCTO NO TIENE PRECIO", "INFO") CALL arr_cotiza.deleteElement(idx) NEXT FIELD area ELSE IF arr_cotiza[idx].precio < pprecio THEN CALL fgl_winmessage( "INFO", "PRECIO MENOR AL PRECIO DE LISTA", "INFO") CALL arr_cotiza.deleteElement(idx) NEXT FIELD area END IF END IF # CONTROL DESCUENTO SELECT DISTINCT a.cotizacion_no FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.area = arr_cotiza[idx].area AND a.autoriza = "SI" IF STATUS <> NOTFOUND THEN GOTO salta_descuento END IF IF control_descuento <> "SI" THEN SELECT a.porciento INTO pporciento FROM vetb00019 a WHERE a.disponible = 'S' SELECT a.porc_desc, CONVERT(VARCHAR(10), a.fecha_desc, 103), a.descuento_permitido INTO pporc_desc, pfecha_desc, desc_permitido FROM iptb00002 a, iptb00001 b WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[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 AND a.status_t IS NULL IF TODAY < pfecha_desc THEN IF arr_cotiza[idx].porc_desc > pporc_desc THEN CALL fgl_winmessage( "ERROR", "PORCIENTO DESCUENTO MAYOR AL PERMITIDO PARA EL PRODUCTO", "INFO") LET arr_cotiza[idx].porc_desc = 0 NEXT FIELD porc_desc END IF ELSE IF control_descuento = "NO" THEN DISPLAY "DESCUENTO: ", control_descuento, " DESCUENTO ", pdescuento2 IF arr_cotiza[idx].porc_desc > pdescuento2 THEN SELECT DISTINCT a.porc_descuento INTO descuento_aplicado FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx] .cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.area = arr_cotiza[idx].area AND a.autoriza = "SI" IF arr_cotiza[idx].porc_desc <> descuento_aplicado THEN CALL fgl_winmessage( "INFO", "DESCUENTO DIFERENTE AL AUTORIZADO, FAVOR DE VERIFICAR", "INFO") NEXT FIELD precio END IF END IF END IF END IF END IF IF arr_cotiza[idx].porc_desc IS NULL THEN LET arr_cotiza[idx].porc_desc = 0 END IF END IF END IF #----------------------------------- TERMINA CONTROL DESCUENTO------------ LABEL salta_Descuento: # Comentario de la clase IF primera = 'N' THEN LET tipo2 = NULL IF pcomentario IS NOT NULL THEN LET tipo2 = FGL_WINQUESTION( "Pregunta", pcomentario, "no", "yes|no", "question", 0) IF tipo2 = "YES" THEN CONTINUE DIALOG END IF END IF END IF IF arr_cotiza[idx].id_kit IS NOT NULL THEN # CONTROL KIT PARA LOS PRECIOS DE LOS PRODUCTOS QUE NO ESTAN EN LA TABLA DE LOS KIT SELECT UNIQUE a.cod_sec FROM vetb00029 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec AND a.disponible = 'SI' IF STATUS = NOTFOUND THEN # CONTROL PRECIO INDEPENDIENTE SELECT DISTINCT a.cod_n FROM vetb00025 a WHERE a.ventas = p_vetb50.ventas AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "EXISTE UN PRODUCTO QUE NO TIENE PRECIOS PARA ESTA MONEDA, FAVOR CORREGIR", "INFO") NEXT FIELD cod_n END IF END IF END IF # CONTROL DESPIECE SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec IF STATUS <> NOTFOUND THEN SELECT UNIQUE a.cod_n FROM vetb00022 a WHERE a.area = arr_cotiza[idx].area AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.cotizacion_no = p_vetb50.cotizacion_no IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "EXISTE UN CODIGO QUE NECESITA DESPIEZAR, FAVOR DE DIRIGIRSE AL CODIGO Y REALIZAR EL DESPIECE", "INFO") NEXT FIELD area END IF END IF LET p_vetb50.total_bruto = p_vetb50.total_bruto + (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) LET p_vetb50.monto_desc = (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) * (arr_cotiza[idx].porc_desc / 100) + p_vetb50.monto_desc # CONTROL KIT SELECT UNIQUE a.cod_sec FROM vetb00029 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec AND a.disponible = 'SI' IF STATUS <> NOTFOUND THEN IF arr_cotiza[idx].id_kit IS NULL THEN CALL arr_kit.clear() CALL visualiza_kit( arr_cotiza[idx].cod_n, arr_cotiza[idx].cod_grupo, arr_cotiza[idx].cod_tipo, arr_cotiza[idx].cod_sec, arr_cotiza[idx].id_kit, "SI") RETURNING pkit, arr_cotiza[idx].precio, arr_cotiza[idx].nombre_p CALL visualiza_detalle_kit(pkit) RETURNING arr_kit LET arr_cotiza[curr].id_kit = pkit DELETE FROM tmp_kit WHERE cotizacion_no = tmpnumero1 AND id_kit = pkit DECLARE dtmp_kit1 CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad, a.precio, a.porc_desc FROM vetb00030 a WHERE a.id_kit = pkit LET i = 1 FOREACH dtmp_kit1 INTO arr_kit[i].cod_n, arr_kit[i].cod_grupo, arr_kit[i].cod_tipo, arr_kit[i].cod_sec, arr_kit[i].cantidad, arr_kit[i].precio, arr_kit[i].porc_desc LET arr_kit[i].cantidad = arr_cotiza[idx].cantidad * arr_kit[i].cantidad IF p_vetb50.ventas = 1 THEN LET arr_kit[i].precio = arr_kit[i].precio * ptasa END IF LET arr_kit[i].area = arr_cotiza[idx].area INSERT INTO tmp_kit( id_kit, cotizacion_no, area, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, porc_desc) VALUES(pkit, tmpnumero1, arr_cotiza[idx].area, arr_kit[i].cod_n, arr_kit[i].cod_grupo, arr_kit[i].cod_tipo, arr_kit[i].cod_sec, arr_kit[i].cantidad, arr_kit[i].precio, arr_kit[i].porc_desc) LET i = i + 1 END FOREACH ELSE DELETE FROM tmp_kit WHERE cotizacion_no = tmpnumero1 AND id_kit = arr_cotiza[idx].id_kit DECLARE busca_kit CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_Sec, a.cantidad, a.precio, a.porc_desc FROM vetb00030 a WHERE a.id_kit = arr_cotiza[idx].id_kit LET i = 1 FOREACH busca_kit INTO arr_kit[i].cod_n, arr_kit[i].cod_grupo, arr_kit[i].cod_tipo, arr_kit[i].cod_sec, arr_kit[i].cantidad, arr_kit[i].precio, arr_kit[i].porc_desc LET arr_kit[i].cantidad = arr_kit[i].cantidad * arr_cotiza[idx].cantidad IF p_vetb50.ventas = 1 THEN LET arr_kit[i].precio = arr_kit[i].precio * ptasa END IF INSERT INTO tmp_kit( id_kit, cotizacion_no, area, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, porc_desc) VALUES(arr_cotiza[idx].id_kit, tmpnumero1, arr_cotiza[idx].area, arr_kit[i].cod_n, arr_kit[i].cod_grupo, arr_kit[i].cod_tipo, arr_kit[i].cod_sec, arr_kit[i].cantidad, arr_kit[i].precio, arr_kit[i].porc_desc) LET i = i + 1 END FOREACH END IF END IF END IF END FOR IF p_vetb50.porc_itbi IS NULL THEN LET p_vetb50.porc_itbi = 0 END IF LET p_vetb50.sub_total = p_vetb50.total_bruto - p_vetb50.monto_desc LET p_vetb50.monto_itbi = p_vetb50.sub_total * (p_vetb50.porc_itbi / 100) LET p_vetb50.total_neto = p_vetb50.sub_total + p_vetb50.monto_itbi DISPLAY BY NAME p_vetb50.* IF p_vetb50.sub_total > 250000 AND pgenerico = "SI" THEN # ESTE MONTO ES PARA CONTROLAR EL TEMA DE LOS GENERICOS, ESTE DATO LO DIO LOURDES PINALES IF p_vetb50.rnc IS NULL THEN CALL fgl_winmessage("INFO", "RNC EN BLANCO", "INFO") NEXT FIELD sec_cliente ELSE IF LENGTH(p_vetb50.rnc CLIPPED) <> 11 THEN CALL fgl_winmessage( "ERROR", "CEDULA CLIENTE INVALIDA", "INFO") NEXT FIELD sec_cliente END IF END IF END IF IF p_vetb50.total_bruto IS NULL THEN CALL msg(16) NEXT FIELD cod_n END IF # Validacion movida aqui (antes de abrir la transaccion): el guardia # que estaba dentro del BEGIN WORK hacia ROLLBACK y luego seguia # insertando en autocommit. Ahora se valida como campo, sin transaccion. IF p_vetb50.total_neto < 0 THEN CALL fgl_winmessage( "ERROR", "EL TOTAL NETO NO PUEDE SER NEGATIVO", "STOP") NEXT FIELD cod_n END IF #====================================================================== # CONTROL NUMERO COTIZACION #====================================================================== LET tipo2 = FGL_WINQUESTION( "Pregunta", "Guardo esta cotizacion?", "no", "yes|no", "question", 0) LET tipo2 = UPSHIFT(tipo2) IF tipo2 = "YES" THEN LET psincroniza = FALSE SET CONNECTION "MSSQL" # BODEGA SELECT a.descripcion INTO data_imp.tbodega FROM intb00009 a WHERE a.cod_bodega = p_vetb50.bodega IF p_vetb50.cond_pago = 1000 THEN CALL fgl_Winmessage( "INFO", "CONDICION DE PAGO ERRADA", "INFO") NEXT FIELD cond_pago END IF IF actualiza = "N" THEN #SELECT MAX(a.cotizacion_no) INTO ultimo_numero #FROM vetb00050 a #WHERE a.cod_cia = p_vetb50.cod_cia # Secuencia serializada del numero de cotizacion. # Con RCSI activo los lectores ya no toman lock compartido, # asi que dos vendedores simultaneos podian leer el mismo # numero base. UPDLOCK+HOLDLOCK hace que el segundo espere # el COMMIT del primero -> nunca leen el mismo numero. BEGIN WORK IF NOT prep_seq_cotiza THEN PREPARE p_seq_cotiza FROM "SELECT cotizacion_no FROM vetb00053 WITH (UPDLOCK, HOLDLOCK)" LET prep_seq_cotiza = TRUE END IF LET ultimo_numero = NULL EXECUTE p_seq_cotiza INTO ultimo_numero IF ultimo_numero IS NULL THEN LET ultimo_numero = 1 END IF LET p_vetb50.cotizacion_no = ultimo_numero + 1 UPDATE vetb00053 SET cotizacion_no = p_vetb50.cotizacion_no, us_mod = SUSER_SNAME() COMMIT WORK DISPLAY BY NAME p_vetb50.cotizacion_no END IF LET cuenta_item = arr_count() UPDATE vetb00022 SET cotizacion_no = p_vetb50.cotizacion_no WHERE cotizacion_no = tmpnumero1 UPDATE tmp_kit SET cotizacion_no = p_vetb50.cotizacion_no WHERE cotizacion_no = tmpnumero1 # AQUI WHENEVER ERROR CONTINUE LET subject = "AVISO RESERVA PRODUCTO COTIZACION ", p_vetb50.cotizacion_no USING "<<<<<<<", " POR EL VENDEDOR ", nombre_vend CLIPPED LET enviaElcorreo = "NO" LET cuerpo_correo = "