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

6041 lines
247 KiB
Plaintext

{
------------------------------------------------------------------
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 =
"<tr><th>CODIGO</th><th>DESCRIPCION</th><th>CANTIDAD</th><th>VIGENCIA</th>"
#CONTROL NUMERO RNC CLIENTE
IF tipoDocumento = '2' 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.total_neto > 250000 THEN
IF p_vetb50.rnc IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"CLIENTE NO TIENE RNC, COTIZACION EXCEDE 250,000.00",
"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_clliente
END IF
END IF
END IF
END IF
END IF
#---------------------------------------------------------------------
IF actualiza = "S" THEN
BEGIN WORK
UPDATE vetb00050
SET (cod_cia,
ventas,
cotizacion_no,
tipo_cliente,
sec_cliente,
nombre_cliente,
rnc,
nombre_proyecto,
direccion_cliente,
cod_provincia,
direccion_proyecto,
telefono_r,
telefono_o,
email,
tipo_precio,
beeper,
celular,
prima,
fax1,
celular1,
fax,
fecha,
fecha_entrega,
plazo_entrega,
comentario,
contacto,
cond_pago,
sec_vend,
porc_itbi,
total_bruto,
sub_total,
monto_desc,
monto_itbi,
total_neto,
monto_dolar,
us_mod,
fech_mod,
num_emp_inst,
codigo_dgii,
tipo_ncf,
sec_vend_aux,
codigo,
cod_zona,
num_oc,
bodega,
titulo_bodega,
estado)
= (p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
usuarios,
GETDATE(),
p_vetb50.num_emp_inst,
p_vetb50.codigo_dgii,
comprobante,
p_vetb50.sec_vend_aux,
p_vetb50.codigo,
p_vetb50.cod_zona,
prtb12.num_oc,
p_vetb50.bodega,
tbodega,
p_vetb50.estado)
WHERE cotizacion_no = p_vetb50.cotizacion_no
AND cod_cia = p_vetb50.cod_cia
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
DELETE FROM vetb00051
WHERE vetb00051.cotizacion_no = p_vetb50.cotizacion_no
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
DELETE FROM vetb00031
WHERE vetb00031.cotizacion_no = p_vetb50.cotizacion_no
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
INSERT INTO vetb00031
SELECT *
FROM tmp_kit
WHERE cotizacion_no = p_vetb50.cotizacion_no
AND cantidad IS NOT NULL
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
DELETE FROM tmp_kit
WHERE cotizacion_no = p_vetb50.cotizacion_no
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].area IS NOT NULL THEN
# AUTORIZACION RESERVA
LET xautorizada = 'NO'
IF arr_cotiza[idx].fecha_vence_reserva
- arr_cotiza[idx]
.fecha_inicial_reserva
<= p_companias.dias_vence_reservas
AND arr_cotiza[idx].cantidad_reservada
> 0 THEN
LET xautorizada = 'SI'
CALL actualiza_reserva()
# Busca el email de los agentes de almacenes
DECLARE buscaemail CURSOR FOR
SELECT DISTINCT a.correo
FROM seg0003 a,
seg0001 b,
iptb00002 c
WHERE a.aviso_reservas = 'SI'
AND a.usuario = b.usuario
AND b.bodega = c.bodega
AND c.cod_n
=
arr_cotiza[idx].cod_n
AND cod_grupo
=
arr_cotiza[idx].cod_grupo
AND cod_tipo
=
arr_cotiza[idx].cod_tipo
AND cod_sec
=
arr_cotiza[idx].cod_sec
FOREACH buscaemail INTO emailvendedor
IF vendedorEmail IS NULL THEN
LET vendedorEmail =
emailvendedor CLIPPED
ELSE
LET vendedorEmail =
vendedoremail CLIPPED,
";",
emailvendedor CLIPPED
END IF
END FOREACH
LET cuerpo_correo =
cuerpo_correo CLIPPED,
"<tr><td>",
arr_cotiza[idx].cod_n USING "&&&&",
'-',
arr_cotiza[idx].cod_grupo USING "&&&&",
'-',
arr_cotiza[idx].cod_tipo USING "&&&&",
'-',
arr_cotiza[idx].cod_sec USING "&&&&",
"</td>",
"<td>",
arr_cotiza[idx].nombre_p CLIPPED,
"</td>",
"<td> ",
arr_cotiza[idx].cantidad_reservada
USING "#,###.##",
"</td>
<td> ",
arr_cotiza[idx].fecha_vence_reserva
USING "dd/mm/yyyy",
"</tr>"
LET enviaElcorreo = "SI"
END IF
LET arr_cotiza[idx].fila = idx
IF arr_cotiza[idx].porc_desc IS NULL THEN
LET arr_cotiza[idx].porc_desc = 0
END IF
LET pvalor_desc =
(arr_cotiza[idx].cantidad
* arr_cotiza[idx].precio)
* (arr_cotiza[idx].porc_desc / 100)
INSERT INTO vetb00051(
cod_cia,
cotizacion_no,
ventas,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_Sec,
descripcion,
cantidad_1,
cantidad,
precio,
porc_desc,
status_t,
us_crea,
fech_crea,
descripcion_area,
id_kit,
cantidad_reservada,
fecha_inicio_reserva,
fecha_vence_reserva,
secuencia,
autorizada,
sincronizado,
valor_desc)
VALUES(p_vetb50.cod_cia,
p_vetb50.cotizacion_no,
p_vetb50.ventas,
arr_cotiza[idx].area,
arr_cotiza[idx].cod_n,
arr_cotiza[idx].cod_grupo,
arr_cotiza[idx].cod_tipo,
arr_cotiza[idx].cod_sec,
arr_cotiza[idx].nombre_p,
arr_cotiza[idx].cantidad_1,
arr_cotiza[idx].cantidad,
arr_cotiza[idx].precio,
arr_cotiza[idx].porc_desc,
NULL,
suser_sname(),
GETDATE(),
arr_cotiza[idx].nombre_area,
arr_cotiza[idx].id_kit,
arr_cotiza[idx].cantidad_reservada,
arr_cotiza[idx].fecha_inicial_reserva,
arr_cotiza[idx].fecha_vence_reserva,
arr_cotiza[idx].fila,
xautorizada,
psincroniza,
pvalor_desc)
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
IF arr_cotiza[idx].ruta IS NULL
OR LENGTH(arr_cotiza[idx].ruta) < 4 THEN
LOCATE arr_cotiza[idx].ruta IN MEMORY
CALL arr_cotiza[idx]
.ruta.readFile("fotodefault.jpg")
END IF
# UPDATE vetb00051 SET foto_producto = arr_cotiza[idx].ruta
# WHERE cotizacion_no = p_vetb50.cotizacion_no AND area = arr_cotiza[idx].area AND
# cod_n = arr_cotiza[idx].cod_n AND
# cod_grupo = arr_cotiza[idx].cod_grupo AND
# cod_tipo = arr_cotiza[idx].cod_tipo AND
# cod_sec = arr_cotiza[idx].cod_sec
FREE arr_cotiza[idx].ruta
END IF
END IF
END FOR
LET procedimiento =
"{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
DISPLAY "enviacorreo ",
enviaElcorreo,
'',
vendedorEmail,
'',
cuerpo_correo
IF enviaElcorreo = "SI" THEN
CALL envia_correo(
'jsoto@marmotech.com.do',
vendedorEmail,
cuerpo_correo,
subject,
procedimiento)
END IF
#Actualiza SOPORTE A VENTAS
DELETE FROM vetb00093
WHERE cotizacion_no = p_vetb50.cotizacion_no
FOR idx = 1 TO soporte_ventas.getLength()
IF soporte_ventas[idx].num_emp IS NOT NULL THEN
SELECT a.sec_vend
FROM vetb00093 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND a.sec_vend = soporte_ventas[idx].num_emp
IF STATUS = NOTFOUND THEN
INSERT INTO vetb00093(
cotizacion_no, sec_vend, nombre_vendedor)
VALUES(p_vetb50.cotizacion_no,
soporte_ventas[idx].num_emp,
soporte_ventas[idx].nombre_adicional)
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
END IF
END IF
END FOR
# Replica a EXTERIOR en la MISMA transaccion (atomico).
IF NOT replica_exterior() THEN
ROLLBACK WORK
CALL fgl_winmessage(
"ERROR",
"NO FUE POSIBLE REPLICAR LA COTIZACION EN EXTERIOR, SE REVIRTIO TODO",
"STOP")
EXIT PROGRAM
END IF
COMMIT WORK
CALL verifica_reserva()
ELSE
BEGIN WORK
INSERT INTO vetb00031
SELECT *
FROM tmp_kit
WHERE cotizacion_no = p_vetb50.cotizacion_no
DELETE FROM tmp_kit
WHERE cotizacion_no = p_vetb50.cotizacion_no
INSERT INTO vetb00050(
cod_cia,
ventas,
cotizacion_no,
tipo_cliente,
sec_cliente,
nombre_cliente,
rnc,
nombre_proyecto,
direccion_cliente,
cod_provincia,
direccion_proyecto,
telefono_r,
telefono_o,
email,
tipo_precio,
beeper,
celular,
prima,
fax1,
celular1,
fax,
fecha,
fecha_entrega,
plazo_entrega,
comentario,
contacto,
cond_pago,
sec_vend,
porc_itbi,
total_bruto,
sub_total,
monto_desc,
monto_itbi,
total_neto,
monto_dolar,
status_t,
us_crea,
fech_crea,
direccion_facturacion,
num_emp_inst,
codigo_dgii,
tipo_ncf,
cliente_generico,
sec_vend_aux,
codigo,
cod_zona,
num_oc,
sincronizado,
bodega,
titulo_bodega,
estado)
VALUES(p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
NULL,
usuarios,
GETDATE(),
p_vetb50.direccion_facturacion,
p_vetb50.num_emp_inst,
p_vetb50.codigo_dgii,
comprobante,
p_vetb50.cliente_generico,
p_vetb50.sec_vend_aux,
p_vetb50.codigo,
p_vetb50.cod_zona,
prtb12.num_oc,
psincroniza,
p_vetb50.bodega,
tbodega,
p_vetb50.estado)
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
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].area IS NOT NULL THEN
LET arr_cotiza[idx].fila = idx
IF arr_cotiza[idx].porc_desc IS NULL THEN
LET arr_cotiza[idx].porc_desc = 0
END IF
LET pvalor_desc =
(arr_cotiza[idx].cantidad
* arr_cotiza[idx].precio)
* (arr_cotiza[idx].porc_desc / 100)
INSERT INTO vetb00051(
cod_cia,
cotizacion_no,
ventas,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_Sec,
descripcion,
cantidad_1,
cantidad,
precio,
porc_desc,
status_t,
us_crea,
fech_crea,
descripcion_area,
id_kit,
cantidad_reservada,
fecha_inicio_reserva,
fecha_vence_reserva,
secuencia,
sincronizado,
valor_desc)
VALUES(p_vetb50.cod_cia,
p_vetb50.cotizacion_no,
p_vetb50.ventas,
arr_cotiza[idx].area,
arr_cotiza[idx].cod_n,
arr_cotiza[idx].cod_grupo,
arr_cotiza[idx].cod_tipo,
arr_cotiza[idx].cod_sec,
arr_cotiza[idx].nombre_p,
arr_cotiza[idx].cantidad_1,
arr_cotiza[idx].cantidad,
arr_cotiza[idx].precio,
arr_cotiza[idx].porc_desc,
NULL,
suser_sname(),
GETDATE(),
arr_cotiza[idx].nombre_area,
arr_cotiza[idx].id_kit,
arr_cotiza[idx].cantidad_reservada,
arr_cotiza[idx].fecha_inicial_reserva,
arr_cotiza[idx].fecha_vence_reserva,
idx,
psincroniza,
pvalor_desc)
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
IF arr_cotiza[idx].ruta IS NULL
OR LENGTH(arr_cotiza[idx].ruta) < 4 THEN
LOCATE arr_cotiza[idx].ruta IN MEMORY
CALL arr_cotiza[idx]
.ruta.readFile("fotodefault.jpg")
END IF
# UPDATE vetb00051 SET foto_producto = arr_cotiza[idx].ruta
# WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_n = arr_cotiza[idx].cod_n AND
# cod_grupo = arr_cotiza[idx].cod_grupo AND
# cod_tipo = arr_cotiza[idx].cod_tipo AND
# cod_sec = arr_cotiza[idx].cod_sec
FREE arr_cotiza[idx].ruta
# AUTORIZACION RESERVA
# Busca el email de los agentes de almacenes
DECLARE buscaemail2 CURSOR FOR
SELECT DISTINCT a.correo
FROM seg0003 a, seg0001 b, iptb00002 c
WHERE a.aviso_reservas = 'SI'
AND a.usuario = b.usuario
AND b.bodega = c.bodega
AND c.cod_n = arr_cotiza[idx].cod_n
AND cod_grupo
=
arr_cotiza[idx].cod_grupo
AND cod_tipo
=
arr_cotiza[idx].cod_tipo
AND cod_sec
=
arr_cotiza[idx].cod_sec
FOREACH buscaemail2 INTO emailvendedor
IF vendedorEmail IS NULL THEN
LET vendedorEmail =
emailvendedor CLIPPED
ELSE
LET vendedorEmail =
vendedoremail CLIPPED,
";",
emailvendedor CLIPPED
END IF
END FOREACH
IF arr_cotiza[idx].fecha_vence_reserva
- arr_cotiza[idx]
.fecha_inicial_reserva
<= p_companias.dias_vence_reservas
AND arr_cotiza[idx].cantidad_reservada
> 0 THEN
LET xautorizada = 'SI'
CALL actualiza_reserva()
LET cuerpo_correo =
cuerpo_correo CLIPPED,
"<tr><td>",
arr_cotiza[idx].cod_n USING "&&&&",
'-',
arr_cotiza[idx].cod_grupo USING "&&&&",
'-',
arr_cotiza[idx].cod_tipo USING "&&&&",
'-',
arr_cotiza[idx].cod_sec USING "&&&&",
"</td>",
"<td>",
arr_cotiza[idx].nombre_p CLIPPED,
"</td>",
"<td> ",
arr_cotiza[idx].cantidad_reservada
USING "#,###.##",
"</td>
<td> ",
arr_cotiza[idx].fecha_vence_reserva
USING "dd/mm/yyyy",
"</tr>"
LET procedimiento =
"{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
LET enviaElcorreo = "SI"
END IF
END IF
END IF
END FOR
IF enviaElcorreo = "SI" THEN
CALL envia_correo(
'jsoto@marmotech.com.do',
vendedorEmail,
cuerpo_correo,
subject,
procedimiento)
END IF
#Actualiza SOPORTE A VENTAS
DELETE FROM vetb00093
WHERE cotizacion_no = p_vetb50.cotizacion_no
FOR idx = 1 TO soporte_ventas.getLength()
IF soporte_ventas[idx].num_emp IS NOT NULL THEN
SELECT a.sec_vend
FROM vetb00093 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND a.sec_vend = soporte_ventas[idx].num_emp
IF STATUS = NOTFOUND THEN
INSERT INTO vetb00093(
cotizacion_no, sec_vend, nombre_vendedor)
VALUES(p_vetb50.cotizacion_no,
soporte_ventas[idx].num_emp,
soporte_ventas[idx].nombre_adicional)
IF STATUS < 0 THEN
ROLLBACK WORK
EXIT PROGRAM
END IF
END IF
END IF
END FOR
# Replica a EXTERIOR en la MISMA transaccion (atomico).
IF NOT replica_exterior() THEN
ROLLBACK WORK
CALL fgl_winmessage(
"ERROR",
"NO FUE POSIBLE REPLICAR LA COTIZACION EN EXTERIOR, SE REVIRTIO TODO",
"STOP")
EXIT PROGRAM
END IF
COMMIT WORK
END IF
DELETE FROM repitecodigo
WHERE documento = tmpnumero1 AND tipo_doc = 'CO'
IF p_vetb50.tipo_cliente IS NOT NULL THEN
# IF p_vetb50.cond_pago <> 4 AND p_vetb50.cond_pago <> 10 THEN
LET chconvierte =
fgl_winquestion(
"ORDEN",
"DESEA CONVERTIR ESTA COTIZACION EN ORDEN DE PEDIDOS?",
"NO",
"YES|NO",
"QUESTION",
0)
IF p_vetb50.bodega IS NULL THEN
CALL msg(16)
NEXT FIELD bodega
END IF
IF chconvierte = "YES" THEN
INPUT BY NAME orden_cliente, ptipo_orden
ATTRIBUTE(MAGENTA)
AFTER INPUT
IF orden_cliente IS NULL THEN
CALL msg(16)
NEXT FIELD orden_cliente
END IF
IF ptipo_orden <> 'GENERAL' THEN
SELECT a.printer_cheque
INTO copia
FROM seg0001 a
WHERE a.usuario = usuarios
END IF
END INPUT
SET CONNECTION "MSSQL"
CALL convierteorden(
p_vetb50.cotizacion_no,
orden_cliente,
usuarios,
clave,
impresor,
copia,
ptipo_orden)
RETURNING prtb12.num_oc, exito
IF NOT exito THEN
CALL fgl_winmessage(
"ERROR", "NO SE REALIZO LA ORDEN", "STOP")
ELSE
LET p_vetb50.estado = 'LOGRADA'
UPDATE vetb00050
SET estado = p_vetb50.estado
WHERE cotizacion_no = p_vetb50.cotizacion_no
DISPLAY BY NAME p_vetb50.estado
# IF p_vetb50.cond_pago <> 4 THEN
LET respuesta_req =
fgl_winquestion(
"REQUISICION",
"ADICIONO LA REQUISICION DE DESPACHO AHORA?",
"NO",
"YES|NO",
"QUESTION",
0)
IF respuesta_req = "YES" THEN
SELECT a.num_oc
INTO prtb12.num_oc
FROM prtb00012 a
WHERE a.cotizacion_no
=
p_vetb50.cotizacion_no
AND a.status_t IS NULL
IF p_vetb50.sec_vend_aux IS NULL THEN
CALL requisiciondespacho(
prtb12.num_oc,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.cond_pago,
p_vetb50.total_neto,
p_vetb50.fecha,
p_vetb50.sec_vend,
usuarios)
RETURNING xnum_req, xmonto
ELSE
CALL requisiciondespacho(
prtb12.num_oc,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.cond_pago,
p_vetb50.total_neto,
p_vetb50.fecha,
p_vetb50.sec_vend_aux,
usuarios)
RETURNING xnum_req, xmonto
END IF
IF xnum_req = 0 AND xmonto = 0 THEN
CONTINUE DIALOG
END IF
CALL evaluaclientes(
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.cond_pago,
xnum_req,
prtb12.num_oc,
p_vetb50.sec_vend,
'CO',
xmonto)
RETURNING pestado
END IF ---- RESPUESTA_REQ
# END IF --------- CONDICION PAGO
END IF ------- IF NOT EXITO
END IF ------- RESPUESTA IF CONVIERTE
# END IF--------- CONDICION PAGO
END IF --------- IF CLIENTE NO ES NULO
CALL asignavalores()
LET data_imp.bodega = p_Vetb50.bodega
LET data_imp.tbodega = tbodega
CALL impresion(
data_imp.*,
'veprmt049.4rp',
'PDF',
cuenta_item,
etiqueta_cotiza)
RETURNING salida
#LET cmd="del ",filedestino CLIPPED
#RUN cmd
#=================================================================================================
# La replica a EXTERIOR ya se hizo dentro de la transaccion del
# guardado (ver replica_exterior()), de forma atomica y por la
# misma conexion MSSQL. Se elimino el antiguo bloque que abria
# SET CONNECTION "IFMX" con transaccion aparte.
LET numero_msg = 1
CALL msg(numero_msg)
ELSE
DELETE FROM repitecodigo
WHERE documento = tmpnumero1 AND tipo_doc = 'CO'
CONTINUE DIALOG
END IF
EXIT DIALOG
END DIALOG
END FUNCTION
FUNCTION vepcmf008()
DEFINE chanula CHAR(3)
DEFINE l_ext_orden INT
DEFINE l_sql STRING
## Aqui se prepara para la captura del criterio de seleccion
SET CONNECTION "MSSQL"
CONSTRUCT BY NAME criterio
ON a.cod_cia,
a.cotizacion_no,
a.tipo_cliente,
a.sec_cliente,
a.nombre_cliente,
a.rnc,
a.nombre_proyecto,
a.direccion_proyecto,
a.fecha
BEFORE CONSTRUCT
CALL cinstalador()
SELECT a.porciento, a.prima
INTO pporciento, ptasa
FROM vetb00019 a
WHERE a.disponible = 'S'
AFTER CONSTRUCT
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET INT_FLAG = FALSE
RETURN
END IF
EXIT CONSTRUCT
END CONSTRUCT
LET SELEC =
" SELECT DISTINCT a.cod_cia,a.ventas,a.cotizacion_no,a.tipo_cliente,a.sec_cliente,a.nombre_cliente, "
|| " a.rnc,a.nombre_proyecto,a.direccion_cliente,a.cod_provincia,a.direccion_proyecto, "
|| " a.telefono_r,a.telefono_o,a.email,a.tipo_precio,a.beeper,a.celular,a.prima,a.fax1,a.celular1, "
|| " a.fax, CONVERT(CHAR(10),a.fecha,103),CONVERT(CHAR(10),a.fecha_entrega,103), "
|| " a.plazo_entrega,a.comentario,a.contacto, a.cond_pago,a.sec_Vend,a.porc_itbi,"
|| " a.total_bruto,a.sub_total,a.monto_Desc,a.monto_itbi,a.total_neto,a.monto_dolar,a.num_emp_inst, "
|| " a.codigo_dgii,a.tipo_ncf,a.cliente_generico,a.sec_vend_aux,a.codigo,a.cod_zona,a.sincronizado, "
|| " a.us_crea,a.fech_crea, a.us_mod,a.fech_mod,a.bodega,a.titulo_bodega "
|| " FROM vetb00050 a "
|| " WHERE "
|| criterio CLIPPED
|| " AND a.status_t is null ",
" ORDER BY a.cotizacion_no"
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos
INTO p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_Vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_Desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
p_vetb50.num_emp_inst,
p_vetb50.codigo_dgii,
comprobante,
p_vetb50.cliente_generico,
p_vetb50.sec_vend_aux,
p_vetb50.codigo,
p_vetb50.cod_zona,
psincroniza,
p_vetb50.us_crea,
p_vetb50.fech_crea,
p_vetb50.us_mod,
p_vetb50.fech_mod,
p_vetb50.bodega,
tbodega
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL cvendedor_aux(p_vetb50.tipo_cliente, p_vetb50.sec_cliente)
CALL busca_info()
LET etiqueta_cotiza = "COTIZACION"
MENU "OPCIONES "
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
COMMAND "Siguiente"
"Presenta en pantalla la siguiente cotizacion encontrada"
FETCH NEXT datos
INTO p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_Vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_Desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
p_vetb50.num_emp_inst,
p_vetb50.codigo_dgii,
comprobante,
p_vetb50.cliente_generico,
p_vetb50.sec_vend_aux,
p_vetb50.codigo,
p_vetb50.cod_zona,
psincroniza,
p_vetb50.us_crea,
p_vetb50.fech_crea,
p_vetb50.us_mod,
p_vetb50.fech_mod,
p_vetb50.bodega,
tbodega
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL busca_info()
COMMAND "anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos
INTO p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_Vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_Desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
p_vetb50.num_emp_inst,
p_vetb50.codigo_dgii,
comprobante,
p_vetb50.cliente_generico,
p_vetb50.sec_vend_aux,
p_vetb50.codigo,
p_vetb50.cod_zona,
psincroniza,
p_vetb50.us_crea,
p_vetb50.fech_crea,
p_vetb50.us_mod,
p_vetb50.fech_mod,
p_vetb50.bodega,
tbodega
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL busca_info()
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos
INTO p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_Vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_Desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
p_vetb50.num_emp_inst,
p_vetb50.codigo_dgii,
comprobante,
p_vetb50.cliente_generico,
p_vetb50.sec_vend_aux,
p_vetb50.codigo,
p_vetb50.cod_zona,
psincroniza,
p_vetb50.us_crea,
p_vetb50.fech_crea,
p_vetb50.us_mod,
p_vetb50.fech_mod,
p_vetb50.bodega,
tbodega
CALL busca_info()
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos
INTO p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_Vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_Desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
p_vetb50.num_emp_inst,
p_vetb50.codigo_dgii,
comprobante,
p_vetb50.cliente_generico,
p_vetb50.sec_vend_aux,
p_vetb50.codigo,
p_vetb50.cod_zona,
psincroniza,
p_vetb50.us_crea,
p_vetb50.fech_crea,
p_vetb50.us_mod,
p_vetb50.fech_mod,
p_vetb50.bodega,
tbodega
CALL busca_info()
ON ACTION copiar
CALL duplicar(p_vetb50.cotizacion_no, usuarios)
ON ACTION impresion
CALL asignavalores()
DISPLAY "antes: ", tbodega
LET data_imp.tbodega = tbodega
LET data_imp.bodega = p_Vetb50.bodega
CALL impresion(
data_imp.*,
'veprmt049.4rp',
'PDF',
cuenta_item,
etiqueta_cotiza)
RETURNING salida
{ON ACTION Borrar
SELECT DISTINCT a.banco FROM cctb00001 a WHERE a.banco = p_vetb50.cotizacion_no
IF STATUS <> NOTFOUND THEN
CALL fgl_Winmessage("INFO","COTIZACION TIENE AVANCE, NO PUEDE ANULAR","INFO")
CONTINUE MENU
END IF
SELECT DISTINCT a.cotizacion_no FROM prtb00012 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_Winmessage("INFO","COTIZACION TIENE ORDEN PEDIDO, NO PUEDE ANULAR","INFO")
CONTINUE MENU
END IF
CALL busca_info()
LET esta = fgl_winquestion("BORRAR","ESTA SEGURO?","NO","YES|NO","QUESTION",0)
IF esta = "YES" THEN
UPDATE vetb00050 set status_t = "E",
us_mod = usuarios,
fech_mod = GETDATE()
WHERE @cotizacion_no = p_vetb50.cotizacion_no
UPDATE vetb00051 set status_t = "E",
us_mod = usuarios,
fech_mod = GETDATE()
WHERE @cotizacion_no = p_vetb50.cotizacion_no
LET numero_msg = 39
CALL msg(numero_msg)
END IF
}
COMMAND "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
FOR idx1 = 1 TO soporte_ventas.getLength()
IF soporte_ventas[idx1].num_emp IS NOT NULL THEN
SELECT DISTINCT a.cotizacion_no
FROM vetb00093 a
WHERE a.sec_vend = soporte_ventas[idx1].num_emp
AND a.cotizacion_no = p_vetb50.cotizacion_no
IF STATUS = NOTFOUND THEN
INSERT INTO vetb00093(
cotizacion_no, sec_vend, nombre_vendedor)
VALUES(p_vetb50.cotizacion_no,
soporte_ventas[idx1].num_emp,
soporte_ventas[idx1].nombre_adicional)
END IF
END IF
END FOR
END INPUT
COMMAND "Escoger" "Actualiza Cotizacion"
LET actualiza = "S"
IF p_Vetb50.tipo_cliente IS NOT NULL THEN
SELECT UNIQUE a.cotizacion_no
FROM prtb00012 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
LET numero_msg = 392
CALL msg(numero_msg)
CALL update_excep()
EXIT MENU
END IF
END IF
CALL vepcad008()
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND "Orden" "Hacer Orden Pedidos"
# IF p_vetb50.cond_pago = 4 OR p_vetb50.cond_pago = 10 THEN
# CALL fgl_winmessage("INFO","NO PUEDES COLOCAR ORDEN CUANDO LA COTIZACION ES AL CONTADO o 50% / 50%","INFO")
# CONTINUE MENU
# END IF
IF p_vetb50.num_oc IS NOT NULL THEN
CALL fgl_winmessage(
"ERROR", "ESTA COTIZACION YA TIENE ORDEN", "STOP")
ELSE
IF p_vetb50.bodega IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"NO PUEDE GENERAR ORDEN, EL LUGAR DE ENTREGA ESTA EN BLANCO",
"STOP")
CONTINUE MENU
END IF
INPUT BY NAME orden_cliente, ptipo_orden ATTRIBUTE(MAGENTA)
AFTER INPUT
IF orden_cliente IS NULL THEN
CALL msg(16)
NEXT FIELD orden_cliente
END IF
IF ptipo_orden <> 'GENERAL' THEN
SELECT a.printer_cheque
INTO copia
FROM seg0001 a
WHERE a.usuario = usuarios
END IF
END INPUT
IF p_vetb50.tipo_cliente IS NOT NULL THEN
CALL convierteorden(
p_vetb50.cotizacion_no,
orden_cliente,
usuarios,
clave,
impresor,
copia,
ptipo_orden)
RETURNING prtb12.num_oc, exito
IF NOT exito THEN
CALL fgl_winmessage(
"ERROR", "NO SE REALIZO LA ORDEN", "STOP")
CONTINUE MENU
ELSE
LET p_vetb50.estado = 'LOGRADA'
UPDATE vetb00050
SET estado = p_vetb50.estado
WHERE cotizacion_no = p_vetb50.cotizacion_no
END IF
DISPLAY BY NAME prtb12.num_oc, p_vetb50.estado
CALL msg(1)
END IF
END IF
COMMAND "Anula Orden" "Anulacion de la orden de pedidos"
IF p_vetb50.num_oc IS NOT NULL THEN
LET chanula =
fgl_winquestion(
"ORDEN",
"ESTA SEGURO DE ANULAR ESTA ORDEN?",
"NO",
"YES|NO",
"QUESTION",
0)
IF chanula = "YES" THEN
# Acceso a EXTERIOR via SQL dinamico con nombres de 3 partes
# (fglcomp no valida el SQL dinamico contra el esquema local).
IF NOT prep_anula THEN
LET l_sql =
"SELECT DISTINCT orden FROM exterior.dbo.vetb00002",
" WHERE orden = ? AND status_t IS NULL"
PREPARE anula_sel FROM l_sql
LET l_sql =
"UPDATE exterior.dbo.prtb00012",
" SET status_t='E',cerrada='E',us_mod=?,fech_mod=getdate()",
" WHERE num_oc = ?"
PREPARE anula_upd12 FROM l_sql
LET l_sql =
"UPDATE exterior.dbo.prtb00013",
" SET status_t='E',us_mod=?,fech_mod=getdate()",
" WHERE num_oc = ?"
PREPARE anula_upd13 FROM l_sql
LET prep_anula = TRUE
END IF
# Verifica en EXTERIOR si la orden tiene factura con NCF
EXECUTE anula_sel USING p_vetb50.num_oc INTO l_ext_orden
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage(
"INFO",
"NO PUEDE ANULAR ESTA ORDEN, TIENE FACTURA CON NCF",
"INFO")
CONTINUE MENU
END IF
# VERIFICACION SI TIENE FECHA DE PRODUCCION
LET tiene_compromiso = 0
SELECT COUNT(*)
INTO tiene_compromiso
FROM prtb00013 a
WHERE a.num_oc = p_vetb50.num_oc
AND a.fech_Crea > '01/01/2007'
AND a.fecha_compromiso IS NOT NULL
AND a.status_t IS NULL
IF tiene_compromiso > 0 THEN
CALL FGL_WINMESSAGE(
"INFO",
"NO PUEDE ANULAR ORDEN, TIENE FECHA COMPROMISO PRODUCCION",
"INFO")
CONTINUE MENU
END IF
# VERIFICA SI TIENE REQUISICION
SELECT UNIQUE a.num_oc
FROM cctb00026 a
WHERE a.num_oc = p_vetb50.num_oc AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage(
"ERROR",
"NO PUEDE ANULAR ORDEN, TIENE REQUISICION",
"INFO")
CONTINUE MENU
END IF
# VERIFICA SI ESTA FACTURADA LA ORDEN
SELECT UNIQUE a.orden
FROM vetb00002 a
WHERE a.orden = p_vetb50.num_oc AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
ERROR "NO PUEDE ANULAR ORDEN, TIENE FACTURAS"
CONTINUE MENU
END IF
# VERIFICACION DESPACHO
SELECT UNIQUE a.num_oc
FROM iptb00006 a
WHERE a.num_oc = p_vetb50.num_oc
AND a.fech_Crea > '01/01/2007'
AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
ERROR "NO PUEDE ANULAR ORDEN, TIENE TRANSACCIONES DE INVENTARIO"
CONTINUE MENU
END IF
LET p_vetb50.estado = 'NO LOGRADA'
UPDATE prtb00012
SET status_t = 'E',
cerrada = 'E',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_oc = p_vetb50.num_oc
UPDATE prtb00013
SET status_t = 'E',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_oc = p_vetb50.num_oc
UPDATE vetb00050
SET estado = p_vetb50.estado
WHERE cotizacion_no = p_vetb50.cotizacion_no
DISPLAY BY NAME p_vetb50.estado
# Espeja la anulacion a EXTERIOR via SQL dinamico (misma conexion
# MSSQL; antes usaba SET CONNECTION "IFMX" con conexion aparte)
EXECUTE anula_upd12 USING usuarios, p_vetb50.num_oc
EXECUTE anula_upd13 USING usuarios, p_vetb50.num_oc
CALL fgl_winmessage("WARNING", "ORDEN ANULADA", "INFO")
END IF
END IF
SET CONNECTION "MSSQL"
COMMAND "Requisicion" "Hacer requisicion"
SET CONNECTION "MSSQL"
# IF p_vetb50.cond_pago <> 4 THEN
SELECT a.num_oc
INTO p_vetb50.num_oc
FROM prtb00012 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND a.status_t IS NULL
IF p_vetb50.num_oc IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"ESTA COTIZACION NO TIENE ORDEN, NO PUEDE HACER REQUISICION",
"STOP")
CONTINUE MENU
END IF
LET respuesta_req =
fgl_winquestion(
"REQUISICION",
"ESTA SEGURO DE HACER LA REQUISICION?",
"NO",
"YES|NO",
"QUESTION",
0)
IF respuesta_req = "YES" THEN
SELECT UNIQUE a.num_oc
FROM cctb00026 a
WHERE a.num_oc = p_vetb50.num_oc AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
CALL fgl_winmessage(
"ERROR",
"ORDEN TIENE REQUISICION, DEBE HACERLA POR EL PROGRAMA NORMAL",
"STOP")
CONTINUE MENU
END IF
CALL requisiciondespacho(
prtb12.num_oc,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.cond_pago,
p_vetb50.total_neto,
p_vetb50.fecha,
p_vetb50.sec_vend,
usuarios)
RETURNING xnum_req, xmonto
IF xnum_req = 0 AND xmonto = 0 THEN
CALL fgl_winmessage(
"INFO",
"EL MONTO DE LA REQUISICION ESTA RESULTANDO EN CERO, NO PUEDO HACER DOCUMENTO",
"INFO")
CONTINUE MENU
END IF
CALL evaluaclientes(
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.cond_pago,
xnum_req,
prtb12.num_oc,
p_vetb50.sec_vend,
'CO',
xmonto)
RETURNING pestado
END IF
# END IF
COMMAND "Salir" "Retorna al menu anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_area()
OPEN WINDOW busqueda
AT 7, 12
WITH FORM "vefmwd102"
ATTRIBUTE(BORDER,
FORM LINE FIRST + 2,
COMMENT LINE LAST,
MESSAGE LINE LAST)
LET INT_FLAG = FALSE
CONSTRUCT criterio ON a.nombre_area FROM nombre_area
LET selec2 =
"SELECT a.area_num, a.nombre_area ",
" FROM prtb00016 a",
" WHERE ",
"a.status_t is NULL AND ",
criterio CLIPPED,
"ORDER BY 2 "
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_c
END IF
PREPARE busca_area FROM selec2
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
END IF
DECLARE buscar_area1 CURSOR FOR busca_area
LET idx = 1
FOREACH buscar_area1 INTO arr_area[idx].*
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
MESSAGE " <Esc> Selecciona Cliente donde esta el cursor"
DISPLAY ARRAY arr_area TO s_area.*
LET curr1 = arr_curr()
LET int_flag = FALSE
LET arr_cotiza[curr].area = arr_area[curr1].area_num
LET arr_cotiza[curr].nombre_area = arr_area[curr1].nombre_area
LABEL salir_consulta_c:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION busca_provincia1()
DEFINE arr_provincias DYNAMIC ARRAY OF RECORD
cod_provincia LIKE vetb00020.cod_provincia,
nombre_provincia LIKE vetb00020.nombre_provincia
END RECORD
OPEN WINDOW busqueda
AT 7, 12
WITH FORM "vefmwd018"
ATTRIBUTE(BORDER,
FORM LINE FIRST + 2,
COMMENT LINE LAST,
MESSAGE LINE LAST)
LET INT_FLAG = FALSE
CONSTRUCT criterio ON a.nombre_provincia FROM nombre_provincia
AFTER CONSTRUCT
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT CONSTRUCT
END IF
EXIT CONSTRUCT
END CONSTRUCT
IF int_flag THEN
LET int_flag = FALSE
CLOSE WINDOW busqueda
RETURN
END IF
LET selec2 =
"SELECT a.cod_provincia, a.nombre_provincia ",
" FROM vetb00020 a,vetb00009 b ",
" WHERE a.cod_provincia = b.cod_provincia and ",
" b.cod_zona = ",
p_vetb50.cod_zona,
" and a.status_t is NULL AND ",
criterio CLIPPED,
" ORDER BY a.nombre_provincia "
PREPARE busca_provp FROM selec2
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
END IF
DECLARE buscar_prov CURSOR FOR busca_provp
LET idx = 1
FOREACH buscar_prov INTO arr_provincias[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
MESSAGE " <Esc> Selecciona Cliente donde esta el cursor"
DISPLAY ARRAY arr_provincias TO s_provincias.*
LET curr1 = arr_curr()
LET int_flag = FALSE
LET p_vetb50.cod_provincia = arr_provincias[curr1].cod_provincia
LET nombre_ciudad = arr_provincias[curr1].nombre_provincia
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION busca_cliente8()
OPEN WINDOW busqueda
AT 7, 12
WITH FORM "vefmwd002"
ATTRIBUTE(BORDER,
FORM LINE FIRST + 2,
COMMENT LINE LAST,
MESSAGE LINE LAST)
LET INT_FLAG = FALSE
CONSTRUCT criterio ON a.tipo_cliente, a.nombre FROM tipo_cliente, nombre
LET selec2 =
"SELECT a.tipo_cliente, a.sec_cliente, a.nombre,RTRIM(b.calle)+' '+RTRIM(b.casa_num)+' '+RTRIM(b.urbanizacion), ",
" f.nombre_provincia,",
"RTRIM(d.nom1_emp)+' '+ISNULL(d.apell1_emp,' '),c.sec_vend ",
" FROM vetb00004 a LEFT OUTER JOIN vetb00005 b ON a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente ",
" LEFT OUTER JOIN vetb00028 c ON a.tipo_cliente = c.tipo_cliente AND a.sec_cliente = c.sec_cliente ",
" LEFT OUTER JOIN adtb00003 d ON d.num_emp = c.sec_vend ",
" LEFT OUTER JOIN vetb00020 f ON a.cod_provincia = f.cod_provincia ",
" INNER JOIN vetb00060 g ON a.tipo_cliente = g.tipo_cliente AND g.clientes_activos = 'SI' ",
" where ",
"a.status_t is NULL AND ",
criterio CLIPPED,
" ORDER BY a.tipo_cliente, a.sec_cliente "
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_c
END IF
PREPARE busca_cliente8s FROM selec2
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
END IF
DECLARE buscar_clientes CURSOR FOR busca_cliente8s
LET idx = 1
FOREACH buscar_clientes INTO arr_clientes[idx].*
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
MESSAGE " <Esc> Selecciona Cliente donde esta el cursor"
DISPLAY ARRAY arr_clientes TO sclientes.*
LET curr1 = arr_curr()
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
GOTO salir_consulta_c
END IF
LET int_flag = FALSE
LET p_vetb50.tipo_cliente = arr_clientes[curr1].tipo_cliente
LET p_vetb50.sec_cliente = arr_clientes[curr1].sec_cliente
LET p_vetb50.nombre_cliente = arr_clientes[curr1].nombre
LABEL salir_consulta_c:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION busca_prod1()
DEFINE
arr_prod DYNAMIC ARRAY OF RECORD
cod_n INTEGER,
cod_grupo INTEGER,
cod_tipo INTEGER,
cod_sec INTEGER,
descrip_esp CHAR(50),
unidad_med LIKE intb00001.unidad_med,
existencia1 DEC(18, 4),
cantidad_o DEC(18, 4),
cantidad_c DEC(18, 4),
existencia DEC(18, 4)
END RECORD,
selec_pt CHAR(1500),
cantidad_orden, pcantidadConduce, transito, existencia, reservado
DEC(12, 2)
OPEN WINDOW busca_2
AT 8, 4
WITH FORM "vefmwd100a"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST)
CONSTRUCT criterio
ON a.cod_n, a.cod_grupo, a.cod_tipo, a.descrip_esp
FROM cod_n, cod_grupo, cod_tipo, descrip_esp
{ ESTE FUE EL QUERY ORIGINAL, LE QUITE LA TABLA VETB00051 y PRTB00013 PORQUE NO
TRAIA LOS CODIGOS EN LA CONSULTA
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,SUM(e.cantidad),SUM(d.cantidad),SUM(b.cantidad_2) ",
" FROM iptb00002 AS a INNER JOIN iptb00001 AS c ON a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ",
" a.cod_tipo = c.cod_tipo and a.cod_Sec = c.cod_Sec LEFT OUTER JOIN ",
" iptb00006 AS b ON 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 b.status_t IS NULL LEFT OUTER JOIN ",
" vetb00051 AS e ON a.cod_n = e.cod_n AND a.cod_grupo = e.cod_grupo AND ",
" a.cod_tipo = e.cod_tipo AND a.cod_sec = e.cod_sec LEFT OUTER JOIN ",
" prtb00013 AS d ON ",
" a.cod_n = d.cod_n AND a.cod_grupo = d.cod_grupo AND ",
" a.cod_tipo = d.cod_tipo AND a.cod_sec = d.cod_sec INNER JOIN ",
" prtb00012 AS f ON d.num_oc = f.num_oc and f.cotizacion_no = e.cotizacion_no ",
" AND f.cerrada = 'N' ",
" WHERE a.status_t IS NULL AND ",CRITERIO CLIPPED,
" GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med ",
" ORDER BY a.descrip_esp "
}
LET selec_pt =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,'0','0','0' ",
" FROM iptb00002 AS a INNER JOIN iptb00001 AS c ON a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ",
" a.cod_tipo = c.cod_tipo and a.cod_Sec = c.cod_Sec ",
" WHERE a.status_t IS NULL AND ",
CRITERIO CLIPPED,
" ORDER BY a.descrip_esp "
IF int_flag THEN
LET Int_flag = FALSE
CLOSE WINDOW busca_2
RETURN
END IF
PREPARE comando_p FROM selec_pt
DECLARE busca_2 CURSOR FOR comando_p
LET idx = 1
FOREACH busca_2 INTO arr_prod[idx].*
LET arr_prod[idx].cantidad_o = 0
LET arr_prod[idx].existencia = 0
CALL disponibles(
arr_prod[idx].cod_n,
arr_prod[idx].cod_grupo,
arr_prod[idx].cod_tipo,
arr_prod[idx].cod_sec,
TODAY)
RETURNING cantidad_orden,
pcantidadConduce,
transito,
existencia,
reservado
#CANTIDAD COTIZACIONES
LET reservado = 0
SELECT SUM(a.cantidad)
INTO reservado
FROM vetb00051 a, vetb00050 b
WHERE (a.cod_n = arr_prod[idx].cod_n
AND a.cod_grupo = arr_prod[idx].cod_grupo
AND a.cod_tipo = arr_prod[idx].cod_tipo
AND a.cod_sec = arr_prod[idx].cod_sec)
AND (a.cotizacion_no = b.cotizacion_no)
AND (b.fecha BETWEEN TODAY - 30 AND TODAY)
AND b.status_t IS NULL
LET arr_prod[idx].existencia1 = existencia
LET arr_prod[idx].cantidad_c = reservado
LET arr_prod[idx].cantidad_o = cantidad_orden + pcantidadConduce
LET arr_prod[idx].existencia = existencia - cantidad_orden
LET idx = idx + 1
END FOREACH
# CALL SET_COUNT(idx - 1)
IF idx - 1 > 0 THEN
DISPLAY idx - 1 TO numero_registros
ELSE
CALL fgl_Winmessage(
"INFO", "NO EXISTEN REGISTROS CON ESTA CONDICION", "INFO")
CLOSE WINDOW busca_2
RETURN
END IF
DISPLAY ARRAY arr_prod TO s_prod.*
LET idx = ARR_CURR()
LET arr_cotiza[curr].cod_n = arr_prod[idx].cod_n
LET arr_cotiza[curr].cod_grupo = arr_prod[idx].cod_grupo
LET arr_cotiza[curr].cod_tipo = arr_prod[idx].cod_tipo
LET arr_cotiza[curr].cod_sec = arr_prod[idx].cod_sec
LET arr_cotiza[curr].nombre_p = arr_prod[idx].descrip_esp
LET arr_cotiza[curr].unidad = arr_prod[idx].unidad_med
LET pexistencia = arr_prod[idx].existencia
CLOSE WINDOW busca_2
END FUNCTION
FUNCTION vendedor8es()
OPEN WINDOW busqueda2
AT 7, 12
WITH FORM "vefmwd001"
ATTRIBUTE(BORDER,
FORM LINE FIRST + 2,
COMMENT LINE LAST,
MESSAGE LINE LAST)
LET INT_FLAG = FALSE
CONSTRUCT criterio ON a.nom1_emp FROM descrip6
LET selec2 =
"SELECT UNIQUE a.num_emp,a.nom1_emp,a.apell1_emp,a.telefono ",
" FROM adtb00003 a,vetb00028 b",
" WHERE a.num_emp = b.sec_vend AND ",
"a.status_t is NULL AND ",
criterio CLIPPED,
"ORDER BY 1 "
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_e
END IF
PREPARE busca_empleados FROM selec2
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
END IF
DECLARE buscar_empleados CURSOR FOR busca_empleados
LET idx = 1
FOREACH buscar_empleados INTO arr_empleados[idx].*
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET empleados[idx].cod_emp_sec = arr_empleados[idx].num_emp
LET empleados[idx].descrip6 =
arr_empleados[idx].nom1_emp CLIPPED,
" ",
arr_empleados[idx].apell1_emp CLIPPED
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
MESSAGE " <Esc> Selecciona Empleado donde esta el cursor"
DISPLAY ARRAY empleados TO s_empleados.*
LET curr1 = scr_line()
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
GOTO salir_consulta_e
END IF
LET p_vetb50.sec_vend = empleados[curr1].cod_emp_sec
LET nombre_vend = empleados[curr1].descrip6
LABEL salir_consulta_e:
CLOSE WINDOW busqueda2
END FUNCTION
FUNCTION busca_vendm8()
IF p_vetb50.sec_vend IS NOT NULL THEN
SELECT a.nom1_emp, a.apell1_emp
INTO nombres, apellidos
FROM adtb00003 a
WHERE a.num_emp = p_vetb50.sec_vend
LET nombre_vend = nombres CLIPPED, " ", apellidos CLIPPED
DISPLAY BY NAME nombre_vend ATTRIBUTE(BLUE)
END IF
END FUNCTION
FUNCTION busca_info()
# Busca Bodega
CALL lugarentregas()
DISPLAY BY NAME p_Vetb50.bodega
SELECT a.descripcion
INTO data_imp.tbodega
FROM intb00009 a
WHERE a.cod_bodega = p_vetb50.bodega
IF p_vetb50.cod_cia = 1 THEN
LET nombre_cia = p_companias.nombre
ELSE
LET nombre_cia = "EMPRESA DEMO 2"
END IF
CALL paises()
CALL zonas(p_vetb50.codigo)
LET pventas = ui.ComboBox.forName("formonly.ventas")
CALL cventas()
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
#VENDEDOR
SELECT RTRIM(a.nom1_emp) || ' ' || RTRIM(ISNULL(a.apell1_emp, ' '))
INTO nombre_vend
FROM adtb00003 a
WHERE a.num_emp = p_vetb50.sec_vend
SELECT DISTINCT a.num_oc, RTRIM(a.nombre_file)
INTO p_vetb50.num_oc, orden_cliente
FROM prtb00012 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.status_t IS NULL
DISPLAY BY NAME p_vetb50.*,
nombre_cia,
orden_cliente,
comprobante,
nombre_vend
LET prtb12.num_oc = p_vetb50.num_oc
SELECT a.nombre_provincia
INTO nombre_ciudad
FROM vetb00020 a
WHERE a.cod_provincia = p_vetb50.cod_provincia
DISPLAY BY NAME nombre_ciudad
# 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
CALL arr_cotiza.clear()
DECLARE buscaitm1 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,
' ',
a.id_kit,
a.cantidad_reservada,
CONVERT(CHAR(10), a.fecha_inicio_reserva, 103),
CONVERT(CHAR(10), a.fecha_vence_reserva, 103)
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 buscaitm1 INTO arr_cotiza[idx].*
IF arr_cotiza[idx].fila IS NULL THEN
LET arr_cotiza[idx].fila = idx
END IF
LET arr_cotiza[idx].total_p =
(arr_cotiza[idx].cantidad * arr_cotiza[idx].precio)
- ((arr_cotiza[idx].cantidad * arr_cotiza[idx].precio)
* (arr_cotiza[idx].porc_desc / 100))
IF arr_cotiza[idx].nombre_p IS NULL THEN
SELECT a.descrip_esp
INTO arr_cotiza[idx].nombre_p
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
END IF
SELECT UNIQUE a.autoriza
INTO arr_cotiza[idx].chactualiza
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
LET idx = idx + 1
LOCATE arr_cotiza[idx].ruta IN MEMORY
END FOREACH
CALL set_count(idx)
DISPLAY ARRAY arr_cotiza TO s_pedido.*
ON KEY(CONTROL-W)
CALL despiece()
{EN COMENTARIO FECHA 8/12/2015, ESTO FUE PORQUE NO SE COMO CONTROLAR CUANDO DIGITEN VARIOS CODIGOS DE DIFERENTES SOPORTES
ON ACTION 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
IF INT_FLAG THEN
IF fgl_winquestion("INFO","ESTAS SEGURO DE CANCELAR OPERACION?","NO","YES|NO","QUESTION",0) THEN
EXIT INPUT
ELSE
CONTINUE INPUT
END IF
END IF
LET tiene_soporte = "N"
FOR idx = 1 TO arr_cotiza.getLength()
IF arr_cotiza[idx].cod_n IS NOT NULL THEN
SELECT DISTINCT a.cod_n FROM vetb00076 a
WHERE a.cod_n = arr_cotiza[idx].cod_n AND
a.sec_Vend = soporte_ventas[arr_curr()].num_emp
IF STATUS <> NOTFOUND THEN
LET tiene_soporte = "S"
END IF
END IF
END FOR
IF tiene_soporte = "N" THEN
CALL fgl_winmessage("E
END IF
END INPUT}
BEFORE ROW
LET idx = arr_curr()
CALL arr_cotiza[idx].ruta.writeFile(filedestino)
DISPLAY filedestino TO foto_producto
ON ACTION modifica_kit
SELECT UNIQUE a.cotizacion_no
FROM cctb00026 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND a.status_T IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_Winmessage(
"ERROR",
"COTIZACION TIENE REQUISICION, NO PUEDES MODIFICAR EL KIT",
"INFO")
CONTINUE DISPLAY
END IF
IF arr_cotiza[arr_curr()].id_kit IS NOT NULL THEN
CALL modifica_detalle_kit(
arr_cotiza[idx].id_kit, p_vetb50.cotizacion_no)
ELSE
CALL fgl_winmessage(
"ERROR", "ESE ARTICULO NO TIENE KIT", "INFO")
END IF
AFTER DISPLAY
END DISPLAY
CALL soporte_ventas.clear()
DECLARE busca_soporte CURSOR FOR
SELECT a.sec_vend, a.nombre_vendedor
FROM vetb00093 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
LET idx = 1
FOREACH busca_soporte INTO soporte_ventas[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx)
DISPLAY ARRAY soporte_ventas TO soporte.*
END FUNCTION
{
FUNCTION f_canvas()
-- Define parameters
DEFINE porciento ,l_offset SMALLINT
DEFINE test CHAR(1)
-- Define local variables
DEFINE l_span smallint,
l_objid smallint,
valor_cotizado,valor_facturado INT,
str_facturado,str_cotizado CHAR(25),
fecha1 LIKE vetb00002.fecha_factura
LET l_offset = 50
CALL drawinit()
# OPEN WINDOW w_card AT 2,2 WITH FORM "canvas"
-- Select and initialize drawing room
CALL DisableColorlines(0)
CALL DrawSelect("canvas1")
CALL DrawClear()
LET fecha1 = TODAY - 30
SELECT SUM(a.neto) INTO valor_facturado FROM vetb00002 a
WHERE a.fecha_factura BETWEEN fecha1 AND TODAY AND
a.cod_cia = 1 AND
a.status_t is null
SELECT SUM(a.total_neto) INTO valor_cotizado FROM vetb00050 a
WHERE a.cod_cia = 1 AND
a.fecha BETWEEN fecha1 AND TODAY AND a.status_t is null
# LET valor_facturado = 500000
# LET valor_cotizado = 2000000
LET Porciento = (valor_facturado / valor_cotizado) * 100
LET l_span = 360 * (porciento / 100)
-- Select the color for the first arc
CALL DrawFillColor("blue")
-- Draw the first arc.
# LET l_span = 0
CALL DrawArc(900,200,600,0,100) RETURNING l_objid
# CALL DrawArc(900,200,600,0,l_span) RETURNING l_objid
-- Compute the next arc.
# LET l_span = l_offset
LET l_offset = l_span
LET l_offset = 360 - l_span
CALL drawfillcolor("red")
CALL DrawArc(900,200,600,100,260) RETURNING l_objid
# CALL DrawArc(900,200,600,l_span,l_offset) RETURNING l_objid
-- Write the legend
LET str_facturado = "Facturado ",valor_facturado USING "<<,<<<,<<<"
LET str_cotizado = "Cotizado ", Valor_cotizado USING "##,###,###"
CALL drawanchor("w")
CALL drawtext(200,90, str_facturado) RETURNING l_objid
CALL drawtext(100,90, str_cotizado) RETURNING l_objid
CALL drawfillcolor("blue")
CALL drawrectangle(180,50,30,30) RETURNING l_objid
CALL drawfillcolor("red")
CALL drawrectangle(80,50,30,30) RETURNING l_objid
# PROMPT "Press a key Con 300 : " FOR test
# CLOSE WINDOW w_card
END FUNCTION
FUNCTION chqDdeError(p_res,p_msg)
DEFINE p_res INTEGER,
p_msg STRING,
m_err STRING,
m_log STRING
IF p_res THEN
RETURN
END IF
CALL ui.Interface.frontCall("WINDDE","DDEError",[],[m_err])
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [p_res] )
LET m_log="DDE Error: ",m_err CLIPPED," (",p_msg,")"
CALL errorlog(m_log)
LET m_log="Se ha producido un Error en '",p_msg CLIPPED,"'. Para mas detalle revise el LOG de errores."
CALL fgl_winmessage("DDE Error", m_log, "stop")
EXIT PROGRAM
END FUNCTION
FUNCTION pru_new_dde(xval,xcol,i)
DEFINE celda,rval,xval,xcol STRING
DEFINE i INTEGER
LET celda = fila_excel,i USING "<<<<&",xcol CLIPPED
LET rval = xval
CALL ui.Interface.frontCall("WINDDE","DDEPoke", [prog,file,celda,rval], [p_res] )
CALL chqDdeError(p_res,"DDEPoke "||celda)
MESSAGE "Salvando la planilla ",file CLIPPED," !"
CALL ui.Interface.refresh()
LET p_cmd="[save()]"
CALL ui.Interface.frontCall("WINDDE","DDEExecute", [prog,file,p_cmd], [p_res] )
IF p_res THEN
CALL fgl_winmessage("Planilla salvada", "Nombre = "||file, "information")
ELSE
CALL chqDdeError(p_res,"DDEExecute save")
END IF
CAL ui.Interface.frontCall("WINDDE","DDEFinish", [prog,file], [p_res] )
CALL chqDdeError(p_res,"DDEFinish")
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [p_res] )
CALL chqDdeError(p_res,"DDEFinishAll")
END FUNCTION
}
FUNCTION cotizacion_display()
DEFINE arr_display DYNAMIC ARRAY OF RECORD
cotizacion_no INTEGER,
fecha DATE,
nombre_cliente CHAR(50),
nombre_proyecto CHAR(50)
END RECORD
OPEN WINDOW cotizaciones WITH FORM "vefmmt149"
DECLARE busca_cotiza CURSOR FOR
SELECT a.cotizacion_no, a.fecha, a.nombre_cliente, a.nombre_proyecto
FROM vetb00050 a
WHERE a.sec_Vend = pvend
ORDER BY a.fecha DESC
LET idx = 1
FOREACH busca_cotiza INTO arr_display[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY arr_display TO s_cotiza.*
AFTER DISPLAY
LET idx = arr_curr()
EXIT DISPLAY
END DISPLAY
END FUNCTION
FUNCTION despiece()
DEFINE vuelve BOOLEAN
OPEN WINDOW wdespiece
AT 5, 3
WITH FORM "vefmwd019"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST)
DISPLAY arr_cotiza[curr].nombre_p TO descrip_esp ATTRIBUTE(BLUE)
DISPLAY arr_cotiza[curr].unidad TO unidad_med ATTRIBUTE(BLUE)
DISPLAY arr_cotiza[curr].area TO area ATTRIBUTE(BLUE)
DISPLAY arr_cotiza[curr].nombre_area TO descripcion_area ATTRIBUTE(BLUE)
CALL despiece.clear()
IF actualiza = "N" THEN
LET p_vetb50.cotizacion_no = tmpnumero1
DECLARE busca_despiece CURSOR FOR
SELECT a.etiqueta,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.lado_1,
a.lado_2,
a.lado_3,
a.cantidad,
a.medida
FROM vetb00022 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND
# a.secuencia = curr AND
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
LET idx = 1
FOREACH busca_despiece INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
ELSE
DECLARE busca_despiece1 CURSOR FOR
SELECT a.etiqueta,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.lado_1,
a.lado_2,
a.lado_3,
a.cantidad,
a.medida
FROM vetb00022 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND
#a.secuencia = curr AND
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
LET idx = 1
FOREACH busca_despiece1 INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
END IF
# LET despiece[1].cod_n = arr_cotiza[curr].cod_n
# LET despiece[1].cod_grupo = arr_cotiza[curr].cod_grupo
# LET despiece[1].cod_tipo = arr_cotiza[curr].cod_tipo
# LET despiece[1].cod_sec = arr_cotiza[curr].cod_sec
CALL set_count(idx - 1)
INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.*
BEFORE ROW
LET curr1 = arr_curr()
LET fila = scr_line()
# LET petiquetas = ui.ComboBox.forName("formonly.etiqueta")
CALL cetiquetas()
LET despiece[curr1].cod_n = arr_cotiza[curr].cod_n
LET despiece[curr1].cod_grupo = arr_cotiza[curr].cod_grupo
LET despiece[curr1].cod_tipo = arr_cotiza[curr].cod_tipo
LET despiece[curr1].cod_sec = arr_cotiza[curr].cod_sec
IF curr1 > 1 THEN
IF despiece[curr1].etiqueta IS NULL THEN
LET despiece[curr1].etiqueta = despiece[curr1 - 1].etiqueta
END IF
END IF
DISPLAY despiece[curr1].etiqueta TO sdespiece[fila].etiqueta
DISPLAY arr_cotiza[curr].cod_n TO sdespiece[fila].cod_n
DISPLAY arr_cotiza[curr].cod_grupo TO sdespiece[fila].cod_grupo
DISPLAY arr_cotiza[curr].cod_tipo TO sdespiece[fila].cod_tipo
DISPLAY arr_cotiza[curr].cod_sec TO sdespiece[fila].cod_sec
AFTER FIELD cantidad
IF arr_cotiza[curr].unidad = "M2" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad
* (despiece[curr1].lado_1 * despiece[curr1].lado_2)
END IF
IF arr_cotiza[curr].unidad = "M3" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad
* (despiece[curr1].lado_1
* despiece[curr1].lado_2
* despiece[curr1].lado_3)
END IF
IF arr_cotiza[curr].unidad = "ML" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad * despiece[curr1].lado_1
LET despiece[curr1].lado_2 = 0
END IF
IF arr_cotiza[curr].unidad = "UD"
OR arr_cotiza[curr].unidad = "GL" THEN
LET despiece[curr1].medida = despiece[curr1].cantidad
END IF
DISPLAY despiece[curr1].medida TO sdespiece[fila].medida
AFTER ROW
IF despiece[curr1].medida IS NULL
AND despiece[curr1].lado_1 IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD lado_1
END IF
LET total_medida = 0
FOR idx = 1 TO arr_count()
IF despiece[idx].medida IS NOT NULL THEN
LET total_medida = total_medida + despiece[idx].medida
END IF
END FOR
DISPLAY BY NAME total_medida
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
LET total_medida = 0
LET vuelve = FALSE
FOR idx = 1 TO despiece.getLength()
IF despiece[idx].lado_1 IS NOT NULL
AND despiece[idx].cantidad IS NULL THEN
CALL msg(16)
NEXT FIELD cantidad
END IF
IF despiece[idx].medida IS NOT NULL THEN
IF despiece[idx].etiqueta IS NULL THEN
LET vuelve = TRUE
EXIT FOR
END IF
LET total_medida = total_medida + despiece[idx].medida
END IF
END FOR
IF vuelve THEN
CALL msg(16)
NEXT FIELD medida
CONTINUE INPUT
END IF
DISPLAY BY NAME total_medida
END INPUT
IF int_flag THEN
LET int_flag = FALSE
CLOSE WINDOW wdespiece
RETURN
END IF
# CONTROL NUMERICO
BEGIN WORK
#WHENEVER ERROR CONTINUE
DELETE FROM veTB00022
WHERE cotizacion_no = p_vetb50.cotizacion_no
AND
# secuencia = curr AND
area = arr_cotiza[curr].area
AND cod_n = arr_cotiza[curr].cod_n
AND cod_grupo = arr_cotiza[curr].cod_grupo
AND cod_tipo = arr_cotiza[curr].cod_tipo
AND cod_sec = arr_cotiza[curr].cod_sec
IF SQLSTATE > 02 THEN
LET chmensaje =
SQLERRMESSAGE CLIPPED, "NO ES POSIBLE GUARDAR LA TRANSACCION"
ROLLBACK WORK
CALL fgl_winmessage("ERROR", chmensaje, "STOP")
CLOSE WINDOW wdespiece
RETURN
END IF
LET total_medida = 0
FOR idx = 1 TO despiece.getLength()
IF despiece[idx].medida IS NOT NULL THEN
INSERT INTO vetb00022
VALUES(despiece[idx].etiqueta,
p_vetb50.cotizacion_no,
curr,
arr_cotiza[curr].area,
arr_cotiza[curr].cod_n,
arr_cotiza[curr].cod_grupo,
arr_cotiza[curr].cod_tipo,
arr_cotiza[curr].cod_sec,
despiece[idx].lado_1,
despiece[idx].lado_2,
despiece[idx].lado_3,
despiece[idx].cantidad,
despiece[idx].medida,
NULL,
SUSER_SNAME(),
GETDATE(),
NULL,
NULL)
IF SQLSTATE > 02 THEN
LET chmensaje =
SQLERRMESSAGE CLIPPED,
"NO ES POSIBLE GUARDAR LA TRANSACCION"
ROLLBACK WORK
CALL fgl_winmessage("ERROR", chmensaje, "STOP")
CLOSE WINDOW wdespiece
RETURN
END IF
LET total_medida = total_medida + despiece[idx].medida
END IF
END FOR
COMMIT WORK
LET arr_cotiza[curr].cantidad_1 = total_medida
CLOSE WINDOW wdespiece
END FUNCTION
FUNCTION control_vendedor(xvendedor, xtipo, xcliente)
DEFINE
xvendedor SMALLINT,
xtipo, xcliente INT,
existe BOOLEAN
# CONTROL VENDEDOR
LET existe = FALSE
IF pgenerico <> "SI" THEN
IF xtipo IS NOT NULL THEN
SELECT UNIQUE a.sec_vend
FROM vetb00028 a
WHERE a.tipo_cliente = xtipo
AND a.sec_cliente = xcliente
AND a.sec_vend = xvendedor
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage(
"ERROR",
"USTED NO PUEDE VENDERLE A ESTE CLIENTE, TIENE EJECUTIVO ASINADO",
"STOP")
LET existe = TRUE
END IF
END IF
END IF
RETURN existe
END FUNCTION
FUNCTION busca_descripcion()
DEFINE pdescripcion LIKE iptb00002.descrip_esp
SELECT a.descrip_esp
INTO pdescripcion
FROM iptb00002 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
RETURN pdescripcion
END FUNCTION
FUNCTION control_descuento()
DEFINE pporc DEC(12, 2)
SELECT AVG(a.porc_Desc)
INTO pporc
FROM vetb00033 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.fecha_final >= GETDATE()
AND a.fecha_inicial <= GETDATE()
RETURN pporc
END FUNCTION
FUNCTION repite_codigo()
DEFINE k INT
LET verdad = NULL
LET ant_art.area = arr_cotiza[curr].area
LET ant_art.cod_n = arr_cotiza[curr].cod_n
LET ant_art.cod_grupo = arr_cotiza[curr].cod_grupo
LET ant_art.cod_tipo = arr_cotiza[curr].cod_tipo
LET ant_art.cod_sec = arr_cotiza[curr].cod_sec
LET ant_art.cantidad = arr_cotiza[curr].cantidad
LET ant_art.precio = arr_cotiza[curr].precio
FOR k = 1 TO arr_cotiza.getLength()
IF k != curr THEN
IF arr_cotiza[k].cod_n IS NOT NULL
AND arr_cotiza[k].cod_grupo IS NOT NULL
AND arr_cotiza[k].cod_tipo IS NOT NULL
AND arr_cotiza[k].cod_sec IS NOT NULL THEN
IF arr_cotiza[k].area = ant_art.area
AND arr_cotiza[k].cod_n = ant_art.cod_n
AND arr_cotiza[k].cod_grupo = ant_art.cod_grupo
AND arr_cotiza[k].cod_tipo = ant_art.cod_tipo
AND arr_cotiza[k].cod_sec = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET verdad = "S"
ELSE
IF verdad != "S" THEN
LET verdad = "N"
END IF
END IF
END IF
END IF
END FOR
END FUNCTION
FUNCTION busca_descripcion_ncf()
SELECT a.tipo_ncf, CONVERT(CHAR(10), a.fecha_vencimiento, 103)
INTO comprobante, fecha_vence_ncf
FROM vetb00071 a
WHERE a.tipo_doc = 'FT'
AND a.disponible = "S"
AND a.sucid = 1
AND a.codigo_dgii = codigodgii
DISPLAY BY NAME comprobante
END FUNCTION
FUNCTION actualiza_reserva()
SELECT a.cotizacion_no
FROM vetb00102 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
IF STATUS = NOTFOUND THEN
INSERT INTO vetb00102(
cotizacion_no, tipo_cliente, sec_cliente, nombre, fecha_aprobacion)
VALUES(p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.fecha)
END IF
SELECT DISTINCT a.cod_n
FROM vetb00103 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND 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
IF STATUS = NOTFOUND THEN
INSERT INTO vetb00103(
cotizacion_no,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
descrip_ing,
cantidad,
unidad_med,
fecha_inicio,
fecha_final,
autorizada,
usuario_autoriza)
VALUES(p_vetb50.cotizacion_no,
arr_cotiza[idx].area,
arr_cotiza[idx].cod_n,
arr_cotiza[idx].cod_grupo,
arr_cotiza[idx].cod_tipo,
arr_cotiza[idx].cod_sec,
arr_cotiza[idx].nombre_p,
arr_cotiza[idx].cantidad,
arr_cotiza[idx].unidad,
arr_cotiza[idx].fecha_inicial_reserva,
arr_cotiza[idx].fecha_vence_reserva,
'SI',
usuarios)
END IF
END FUNCTION
FUNCTION verifica_reserva()
DEFINE xcodn, xcodgrupo, xcodtipo, xcodsec, cuenta INT
DECLARE busca_reserva CURSOR FOR
SELECT DISTINCT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec
FROM vetb00103 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
FOREACH busca_reserva INTO xcodn, xcodgrupo, xcodtipo, xcodsec
SELECT DISTINCT a.cod_n
FROM vetb00051 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
AND a.cod_n = xcodn
AND a.cod_grupo = xcodgrupo
AND a.cod_tipo = xcodtipo
AND a.cod_sec = xcodsec
IF STATUS = NOTFOUND THEN
DELETE FROM vetb00103
WHERE cotizacion_no = p_vetb50.cotizacion_no
AND cod_n = xcodn
AND cod_grupo = xcodgrupo
AND cod_tipo = xcodtipo
AND cod_sec = xcodsec
END IF
END FOREACH
# VERIFICA QUE LA MAESTRA DE LAS AUTORIZACIONES DE RESERVA EXISTA LA COTIZACION SI NO HAY DETALLE
SELECT COUNT(*)
INTO cuenta
FROM vetb00103 a
WHERE a.cotizacion_no = p_vetb50.cotizacion_no
IF cuenta IS NULL OR cuenta = 0 THEN
DELETE FROM vetb00102 WHERE cotizacion_no = p_vetb50.cotizacion_no
END IF
END FUNCTION
#------------------------------------------------------------------------------
# Replica la cotizacion a la base de datos EXTERIOR (misma instancia SQL Server)
# via SQL DINAMICO con nombres de 3 partes (exterior.dbo.*) por la MISMA conexion
# MSSQL. Se usa SQL dinamico a proposito: fglcomp valida el SQL estatico contra
# el esquema local y rechazaria exterior.dbo.*; el PREPARE evita esa validacion.
# Debe llamarse DENTRO del BEGIN WORK del guardado, justo antes del COMMIT WORK,
# para que marmotech y exterior sean atomicos: si devuelve FALSE el caller hace
# ROLLBACK y no queda nada en ninguna de las dos DB.
# Copia (INSERT..SELECT) las filas recien escritas en marmotech -> exterior queda
# identico a marmotech. Reemplaza el antiguo bloque "SET CONNECTION IFMX".
#------------------------------------------------------------------------------
FUNCTION replica_exterior()
DEFINE xncf CHAR(1)
DEFINE l_sql STRING
# Solo se replica cuando el tipo de cliente maneja NCF
LET xncf = NULL
SELECT a.ncf INTO xncf FROM vetb00060 a
WHERE a.tipo_cliente = p_vetb50.tipo_cliente
IF xncf IS NULL OR xncf != "S" THEN
RETURN TRUE
END IF
IF NOT prep_ext THEN
PREPARE ext_del50 FROM
"DELETE FROM exterior.dbo.vetb00050 WHERE cotizacion_no = ?"
LET l_sql =
"INSERT INTO exterior.dbo.vetb00050",
" (cod_cia,ventas,cotizacion_no,tipo_cliente,sec_cliente,nombre_cliente,",
" rnc,nombre_proyecto,direccion_cliente,cod_provincia,direccion_proyecto,",
" telefono_r,telefono_o,email,tipo_precio,beeper,celular,prima,fax1,",
" celular1,fax,fecha,fecha_entrega,plazo_entrega,comentario,contacto,",
" cond_pago,sec_vend,porc_itbi,total_bruto,sub_total,monto_desc,monto_itbi,",
" total_neto,monto_dolar,status_t,us_crea,fech_crea,direccion_facturacion)",
" SELECT cod_cia,ventas,cotizacion_no,tipo_cliente,sec_cliente,nombre_cliente,",
" rnc,nombre_proyecto,direccion_cliente,cod_provincia,direccion_proyecto,",
" telefono_r,telefono_o,email,tipo_precio,beeper,celular,prima,fax1,",
" celular1,fax,fecha,fecha_entrega,plazo_entrega,comentario,contacto,",
" cond_pago,sec_vend,porc_itbi,total_bruto,sub_total,monto_desc,monto_itbi,",
" total_neto,monto_dolar,NULL,?,getdate(),direccion_facturacion",
" FROM vetb00050 WHERE cotizacion_no = ?"
PREPARE ext_ins50 FROM l_sql
LET l_sql =
"UPDATE exterior.dbo.vetb00050 SET us_mod = ?, fech_mod = getdate()",
" WHERE cotizacion_no = ? AND cod_cia = ?"
PREPARE ext_updmod FROM l_sql
PREPARE ext_del51 FROM
"DELETE FROM exterior.dbo.vetb00051 WHERE cotizacion_no = ?"
LET l_sql =
"INSERT INTO exterior.dbo.vetb00051",
" (cod_cia,cotizacion_no,ventas,area,cod_n,cod_grupo,cod_tipo,cod_sec,",
" cantidad_1,cantidad,precio,porc_desc,status_t,us_crea,fech_crea,id_kit)",
" SELECT cod_cia,cotizacion_no,ventas,area,cod_n,cod_grupo,cod_tipo,cod_sec,",
" cantidad_1,cantidad,precio,porc_desc,NULL,?,getdate(),id_kit",
" FROM vetb00051 WHERE cotizacion_no = ?"
PREPARE ext_ins51 FROM l_sql
PREPARE ext_del31 FROM
"DELETE FROM exterior.dbo.vetb00031 WHERE cotizacion_no = ?"
LET l_sql =
"INSERT INTO exterior.dbo.vetb00031",
" (cotizacion_no,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,precio,",
" porc_desc,id_kit)",
" SELECT cotizacion_no,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,precio,",
" porc_desc,id_kit",
" FROM vetb00031 WHERE cotizacion_no = ?"
PREPARE ext_ins31 FROM l_sql
LET prep_ext = TRUE
END IF
# --- Encabezado ---
EXECUTE ext_del50 USING p_vetb50.cotizacion_no
IF STATUS < 0 THEN RETURN FALSE END IF
EXECUTE ext_ins50 USING usuarios, p_vetb50.cotizacion_no
IF STATUS < 0 THEN RETURN FALSE END IF
IF actualiza = "S" THEN
EXECUTE ext_updmod
USING usuarios, p_vetb50.cotizacion_no, p_vetb50.cod_cia
IF STATUS < 0 THEN RETURN FALSE END IF
END IF
# --- Lineas ---
EXECUTE ext_del51 USING p_vetb50.cotizacion_no
IF STATUS < 0 THEN RETURN FALSE END IF
EXECUTE ext_ins51 USING usuarios, p_vetb50.cotizacion_no
IF STATUS < 0 THEN RETURN FALSE END IF
# --- Kits ---
EXECUTE ext_del31 USING p_vetb50.cotizacion_no
IF STATUS < 0 THEN RETURN FALSE END IF
EXECUTE ext_ins31 USING p_vetb50.cotizacion_no
IF STATUS < 0 THEN RETURN FALSE END IF
RETURN TRUE
END FUNCTION
FUNCTION cambio_codigo()
IF codn_a <> arr_cotiza[curr].cod_n
OR codgrupo_a <> arr_cotiza[curr].cod_grupo
OR codtipo_a <> arr_cotiza[curr].cod_tipo
OR codsec_a <> arr_cotiza[curr].cod_sec THEN
LET arr_cotiza[curr].cantidad_reservada = 0
LET arr_cotiza[curr].fecha_inicial_reserva = NULL
LET arr_cotiza[curr].fecha_vence_reserva = NULL
END IF
DISPLAY arr_cotiza[curr].cantidad_reservada
TO s_pedido[scr_line()].cantidad_reservada
DISPLAY arr_cotiza[curr].fecha_inicial_reserva
TO s_pedido[scr_line()].fecha_inicial_reserva
DISPLAY arr_cotiza[curr].fecha_vence_reserva
TO s_pedido[scr_line()].fecha_vence_reserva
END FUNCTION
FUNCTION duplicar(xcotizacion, xusuario)
DEFINE
xcotizacion, pcotizacion INT,
xusuario CHAR(50)
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,
chnumero STRING
SELECT a.cotizacion_no INTO pcotizacion FROM vetb00053 a
LET pcotizacion = pcotizacion + 1
UPDATE vetb00053 SET cotizacion_no = pcotizacion, us_mod = SUSER_SNAME()
SELECT a.cod_cia,
ventas,
cotizacion_no,
tipo_cliente,
sec_cliente,
a.nombre_cliente,
rnc,
nombre_proyecto,
direccion_cliente,
a.cod_provincia,
direccion_proyecto,
telefono_r,
telefono_o,
a.email,
tipo_precio,
beeper,
celular,
prima,
fax1,
celular1,
a.fax,
a.plazo_entrega,
a.comentario,
contacto,
a.cond_pago,
a.sec_vend,
a.porc_itbi,
a.total_bruto,
a.sub_total,
a.monto_desc,
a.monto_itbi,
a.total_neto,
a.monto_dolar,
a.codigo,
a.cod_Zona
INTO p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
p_vetb50.rnc,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
p_vetb50.codigo,
p_vetb50.cod_zona
FROM vetb00050 a
WHERE a.cotizacion_no = xcotizacion
LET p_vetb50.cotizacion_no = pcotizacion
LET p_vetb50.fecha = TODAY
BEGIN WORK
IF psincroniza IS NULL THEN
LET psincroniza = FALSE
END IF
IF p_vetb50.total_neto < 0 THEN
DISPLAY "VALOR NETO MENOR QUE 0"
ROLLBACK WORK
END IF
INSERT INTO vetb00050(
cod_cia,
ventas,
cotizacion_no,
tipo_cliente,
sec_cliente,
nombre_cliente,
rnc,
nombre_proyecto,
direccion_cliente,
cod_provincia,
direccion_proyecto,
telefono_r,
telefono_o,
email,
tipo_precio,
beeper,
celular,
prima,
fax1,
celular1,
fax,
fecha,
fecha_entrega,
plazo_entrega,
comentario,
contacto,
cond_pago,
sec_vend,
porc_itbi,
total_bruto,
sub_total,
monto_desc,
monto_itbi,
total_neto,
monto_dolar,
us_crea,
fech_crea,
codigo,
cod_zona,
sincronizado,
estado)
VALUES(p_vetb50.cod_cia,
p_vetb50.ventas,
p_vetb50.cotizacion_no,
p_vetb50.tipo_cliente,
p_vetb50.sec_cliente,
p_vetb50.nombre_cliente,
NULL,
p_vetb50.nombre_proyecto,
p_vetb50.direccion_cliente,
p_vetb50.cod_provincia,
p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,
p_vetb50.telefono_o,
p_vetb50.email,
p_vetb50.tipo_precio,
p_vetb50.beeper,
p_vetb50.celular,
p_vetb50.prima,
p_vetb50.fax1,
p_vetb50.celular1,
p_vetb50.fax,
p_vetb50.fecha,
p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,
p_vetb50.comentario,
p_vetb50.contacto,
p_vetb50.cond_pago,
p_vetb50.sec_vend,
p_vetb50.porc_itbi,
p_vetb50.total_bruto,
p_vetb50.sub_total,
p_vetb50.monto_desc,
p_vetb50.monto_itbi,
p_vetb50.total_neto,
p_vetb50.monto_dolar,
xusuario,
GETDATE(),
p_vetb50.codigo,
p_vetb50.cod_zona,
psincroniza,
'NO LOGRADA')
IF STATUS < 0 THEN
ROLLBACK WORK
RETURN
CALL fgl_winmessage(
"ERROR", "NO FUE POSIBLE LA COPIA DE ESTA COTIZACION", "INFO")
END IF
DECLARE busca_detalle CURSOR FOR
SELECT a.secuencia,
a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_Sec,
a.descripcion,
a.cantidad_1,
a.cantidad,
a.precio,
a.porc_desc,
a.foto_producto,
a.descripcion_area,
a.id_kit
FROM vetb00051 a
WHERE a.cotizacion_no = xcotizacion
LET idx = 1
LOCATE arr_cotiza[idx].ruta IN MEMORY
FOREACH busca_detalle
INTO arr_cotiza[idx].fila,
arr_cotiza[idx].area,
arr_cotiza[idx].cod_n,
arr_cotiza[idx].cod_grupo,
arr_cotiza[idx].cod_tipo,
arr_cotiza[idx].cod_sec,
arr_cotiza[idx].nombre_p,
arr_cotiza[idx].cantidad_1,
arr_cotiza[idx].cantidad,
arr_cotiza[idx].precio,
arr_cotiza[idx].porc_desc,
arr_cotiza[idx].ruta,
arr_cotiza[idx].nombre_area,
arr_cotiza[idx].id_kit
# IF arr_cotiza[idx].fila IS NULL THEN
LET arr_cotiza[idx].fila = idx
# END IF
IF arr_cotiza[idx].porc_desc IS NULL THEN
LET arr_cotiza[idx].porc_desc = 0
END IF
LET pvalor_desc =
(arr_cotiza[idx].cantidad * arr_cotiza[idx].precio)
* (arr_cotiza[idx].porc_desc / 100)
INSERT INTO vetb00051(
cod_cia,
cotizacion_no,
ventas,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_Sec,
descripcion,
cantidad_1,
cantidad,
precio,
porc_desc,
us_crea,
fech_crea,
descripcion_area,
id_kit,
secuencia,
valor_desc)
VALUES(p_vetb50.cod_cia,
p_vetb50.cotizacion_no,
p_vetb50.ventas,
arr_cotiza[idx].area,
arr_cotiza[idx].cod_n,
arr_cotiza[idx].cod_grupo,
arr_cotiza[idx].cod_tipo,
arr_cotiza[idx].cod_sec,
arr_cotiza[idx].nombre_p,
arr_cotiza[idx].cantidad_1,
arr_cotiza[idx].cantidad,
arr_cotiza[idx].precio,
arr_cotiza[idx].porc_desc,
xusuario,
GETDATE(),
arr_cotiza[idx].nombre_area,
arr_cotiza[idx].id_kit,
arr_cotiza[idx].fila,
pvalor_desc)
IF STATUS < 0 THEN
ROLLBACK WORK
DISPLAY "ERROR ", SQLCA.SQLERRD[2]
RETURN
CALL fgl_winmessage(
"ERROR", "NO FUE POSIBLE LA COPIA DE ESTA COTIZACION", "INFO")
END IF
IF arr_cotiza[idx].ruta IS NOT NULL THEN
WHENEVER ERROR CONTINUE
UPDATE vetb00051
SET foto_producto = arr_cotiza[idx].ruta
WHERE cotizacion_no = p_vetb50.cotizacion_no
IF STATUS < 0 THEN
ROLLBACK WORK
RETURN
CALL fgl_winmessage(
"ERROR",
"NO FUE POSIBLE LA COPIA DE ESTA COTIZACION",
"INFO")
END IF
END IF
FREE arr_cotiza[idx].ruta
LET idx = idx + 1
LOCATE arr_cotiza[idx].ruta IN MEMORY
END FOREACH
# DESPIECE COTIZACION
DECLARE busca_despiece12 CURSOR FOR
SELECT a.etiqueta,
a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_Sec,
a.lado_1,
a.lado_2,
a.lado_3,
a.cantidad,
a.medida
FROM vetb00022 a
WHERE a.cotizacion_no = xcotizacion
LET p_vetb50.cotizacion_no = pcotizacion
LET idx = 1
FOREACH busca_despiece12
INTO despiece[idx].etiqueta,
arr_cotiza[idx].area,
arr_cotiza[idx].cod_n,
arr_cotiza[idx].cod_grupo,
arr_cotiza[idx].cod_tipo,
arr_cotiza[idx].cod_sec,
despiece[idx].lado_1,
despiece[idx].lado_2,
despiece[idx].lado_3,
despiece[idx].cantidad,
despiece[idx].medida
INSERT INTO vetb00022
VALUES(despiece[idx].etiqueta,
p_vetb50.cotizacion_no,
idx,
arr_cotiza[idx].area,
arr_cotiza[idx].cod_n,
arr_cotiza[idx].cod_grupo,
arr_cotiza[idx].cod_tipo,
arr_cotiza[idx].cod_sec,
despiece[idx].lado_1,
despiece[idx].lado_2,
despiece[idx].lado_3,
despiece[idx].cantidad,
despiece[idx].medida,
NULL,
xusuario,
GETDATE(),
NULL,
NULL)
IF STATUS < 0 THEN
ROLLBACK WORK
RETURN
CALL fgl_winmessage(
"ERROR", "NO FUE POSIBLE LA COPIA DE ESTA COTIZACION", "INFO")
END IF
LET idx = idx + 1
END FOREACH
COMMIT WORK
LET chnumero = "NUEVA COTIZACION NO. ", pcotizacion USING "&&&&&&&"
CALL fgl_winmessage("ACT", "COTIZACION COPIADA EXITOSAMENTE", "INFO")
CALL fgl_winmessage("ACT", chnumero, "INFO")
END FUNCTION
FUNCTION asignavalores()
LET data_imp.cotizacion_no = p_vetb50.cotizacion_no
LET data_imp.tipo_cliente = p_vetb50.tipo_cliente
LET data_imp.sec_cliente = p_vetb50.sec_cliente
LET data_imp.direccion_cliente = p_vetb50.direccion_cliente
LET data_imp.nombre = p_vetb50.nombre_cliente
LET data_imp.contacto = p_vetb50.contacto
LET data_imp.nombre_proyecto = p_vetb50.nombre_proyecto
LET data_imp.direccion_proyecto = p_vetb50.direccion_proyecto
LET data_imp.cond_pago = p_vetb50.cond_pago
LET data_imp.fecha = p_vetb50.fecha
LET data_imp.sec_vend = p_Vetb50.sec_vend
LET data_imp.nombre_cliente = p_vetb50.nombre_cliente
LET data_imp.total_neto = p_vetb50.total_neto
LET data_imp.comentario = p_vetb50.comentario
LET data_imp.nombre_vend = nombre_vend
LET data_imp.rnc = p_vetb50.rnc
LET data_imp.telefono_o = p_vetb50.telefono_o
LET data_imp.telefono_r = p_vetb50.telefono_r
LET data_imp.celular = p_vetb50.celular
LET data_imp.celular1 = p_vetb50.celular1
LET data_imp.email = p_vetb50.email
LET data_imp.orden = prtb12.num_oc
LET data_imp.plazo_entrega = p_vetb50.plazo_entrega
LET data_imp.num_emp_int = p_vetb50.num_emp_inst
LET data_imp.sub_total = p_vetb50.sub_total
LET data_imp.monto_desc = p_vetb50.monto_desc
LET data_imp.porc_itbis = p_vetb50.porc_itbi
LET data_imp.neto = p_vetb50.total_neto
LET data_imp.total_bruto = p_vetb50.total_bruto
LET data_imp.vendedor_aux = p_vetb50.sec_vend_aux
LET data_imp.monto_itbis = p_vetb50.monto_itbi
END FUNCTION
FUNCTION inicializar()
LET url_verification = NULL #'https://api.apilayer.com/email_verification/'
END FUNCTION
FUNCTION update_excep()
INPUT BY NAME p_vetb50.cond_pago,
p_vetb50.rnc,
p_vetb50.email,
p_vetb50.direccion_cliente,
p_vetb50.direccion_proyecto,
p_vetb50.direccion_facturacion
ATTRIBUTES(WITHOUT DEFAULTS, UNBUFFERED)
{ AFTER FIELD rnc
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 rnc
END IF
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
}
AFTER INPUT
UPDATE vetb00050
SET cond_pago = p_vetb50.cond_pago,
rnc = p_vetb50.rnc,
email = p_vetb50.email,
direccion_cliente = p_vetb50.direccion_cliente,
direccion_proyecto = p_vetb50.direccion_proyecto,
direccion_facturacion = p_vetb50.direccion_facturacion
WHERE cotizacion_no = p_vetb50.cotizacion_no
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
END FUNCTION