6041 lines
247 KiB
Plaintext
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
|