309 lines
15 KiB
Plaintext
309 lines
15 KiB
Plaintext
{
|
|
PROGRAMA : veprmt040
|
|
OBJETIVO : AUTORIZACIONES DESCUENTOS
|
|
PROGRAMADOR : ING. JUAN FRANCISCO SOTO
|
|
FECHA DESARROLLO : 24/08/2015
|
|
|
|
|
|
}
|
|
SCHEMA smarmotech
|
|
GLOBALS
|
|
DEFINE pvetb88 RECORD LIKE vetb00088.*,
|
|
porc_desc DEC(8,2),
|
|
opt VARCHAR(3)
|
|
DEFINE usuarios,clave,nombre,nombre_v,descripcion VARCHAR(50),
|
|
impresor,ptipo SMALLINT,
|
|
pcotizacion,secCliente,psecvend,idx,s_idx INT,
|
|
|
|
pneto,subtotal,descuento,itbis,porc_itbis DEC(12,2),
|
|
pfecha DATE,
|
|
salida STRING,
|
|
chdescuento varchar(2),
|
|
p_vetb50 RECORD LIKE vetb00050.*
|
|
|
|
DEFINE arr_items 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),
|
|
valor dec(12,2),
|
|
porc_desc dec(12,2),
|
|
valor_desc dec(12,2),
|
|
costo dec(12,5),
|
|
valor_costo dec(12,5),
|
|
margen dec(12,2),
|
|
margen_porc dec(12,3),
|
|
descuento_aplicado dec(12,2)
|
|
END RECORD
|
|
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 INT,bodega INT,
|
|
tbodega VARCHAR(100)
|
|
|
|
|
|
END RECORD
|
|
|
|
END GLOBALS
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(4) RETURNING impresor
|
|
|
|
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
|
|
|
|
OPEN WINDOW vefmmt040 WITH FORM "vefmmt040"
|
|
DIALOG
|
|
INPUT BY NAME pcotizacion ATTRIBUTE(WITHOUT DEFAULTS)
|
|
AFTER FIELD pcotizacion
|
|
IF pcotizacion IS NOT NULL THEN
|
|
SET CONNECTION "MSSQL"
|
|
LOCATE p_vetb50.guiid IN MEMORY
|
|
{ SELECT a.tipo_cliente,a.sec_cliente,a.nombre_cliente,
|
|
a.total_bruto,a.monto_desc,a.monto_itbi,a.total_neto,
|
|
a.sec_vend,CONVERT(CHAR(10), a.fecha,103),b.nom1_emp||' '||b.apell1_emp,
|
|
a.porc_itbi}
|
|
SELECT a.*,b.nom1_emp||' '||b.apell1_emp
|
|
INTO p_vetb50.*,data_imp.nombre_vend
|
|
FROM vetb00050 a,adtb00003 b
|
|
WHERE a.cotizacion_no =pcotizacion AND
|
|
a.sec_vend = b.num_emp
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage("ERROR","COTIZACION NO EXISTE","INFO")
|
|
NEXT FIELD pcotizacion
|
|
END IF
|
|
|
|
DISPLAY BY NAME p_vetb50.tipo_cliente ,p_vetb50.sec_cliente,p_vetb50.nombre_cliente,p_vetb50.total_bruto,
|
|
p_vetb50.monto_desc,p_vetb50.monto_itbi,p_vetb50.total_neto,
|
|
p_vetb50.sec_vend,p_vetb50.fecha,data_imp.nombre_vend
|
|
|
|
# CONTROL ORDEN DE PEDIDOS
|
|
SELECT DISTINCT a.cotizacion_no FROM prtb00012 a
|
|
WHERE a.cotizacion_no = pcotizacion AND a.status_t IS NULL
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL fgl_winmessage("INFO","COTIZACION TIENE ORDEN, NO PUEDES OTORGAR DESCUENTO","INFO")
|
|
NEXT FIELD pcotizacion
|
|
END IF
|
|
END IF
|
|
CALL arr_items.clear()
|
|
END INPUT
|
|
|
|
INPUT ARRAY arr_items FROM s_items.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
|
|
DECLARE busca_items CURSOR FOR
|
|
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,a.cantidad,a.precio,'0',
|
|
a.porc_desc,'0',c.material+c.gastos+c.labor,'0','0','0',d.porc_descuento
|
|
FROM vetb00051 a INNER JOIN iptb00002 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 LEFT OUTER JOIN
|
|
iptb00004 c ON b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND
|
|
b.cod_tipo = c.cod_tipo AND b.cod_sec = c.cod_sec AND
|
|
c.ano = YEAR(TODAY) AND c.mes_ini = '01' AND c.mes_fin ='12' LEFT OUTER JOIN
|
|
vetb00088 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 AND a.cotizacion_no = d.cotizacion_no
|
|
|
|
WHERE a.cotizacion_no = pcotizacion
|
|
LET idx = 1
|
|
FOREACH busca_items INTO arr_items[idx].*
|
|
LET arr_items[idx].valor = arr_items[idx].cantidad*arr_items[idx].precio
|
|
LET arr_items[idx].valor_desc = arr_items[idx].valor*(arr_items[idx].porc_desc/100)
|
|
LET arr_items[idx].valor_costo = arr_items[idx].costo * arr_items[idx].cantidad
|
|
LET arr_items[idx].margen = (arr_items[idx].valor - arr_items[idx].valor_desc)-
|
|
arr_items[idx].valor_costo
|
|
|
|
IF arr_items[idx].valor_costo >0 THEN
|
|
LET arr_items[idx].margen_porc = ((arr_items[idx].precio - (arr_items[idx].costo *1.63))/
|
|
arr_items[idx].precio)*100
|
|
|
|
ELSE
|
|
LET arr_items[idx].margen_porc = 0
|
|
END IF
|
|
LET idx=idx + 1
|
|
END FOREACH
|
|
|
|
|
|
ON ACTION ACTUALIZAR
|
|
LET opt = fgl_winquestion("INFO","ESTA SEGURO DE ACTUALIZAR?","NO","YES|NO","QUESTION",0)
|
|
IF opt = "YES" THEN
|
|
BEGIN WORK
|
|
FOR idx = 1 TO arr_items.getLength()
|
|
IF arr_items[idx].descuento_aplicado IS NOT NULL THEN
|
|
IF arr_items[idx].cod_Sec IS NOT NULL THEN
|
|
SELECT b.descrip_esp,b.descuento_permitido
|
|
INTO arr_items[idx].descripcion,chdescuento
|
|
FROM vetb00051 a,iptb00002 b
|
|
WHERE a.cotizacion_no = pcotizacion AND
|
|
a.cod_n = arr_items[idx].cod_n AND a.cod_grupo = arr_items[idx].cod_grupo AND
|
|
a.cod_tipo = arr_items[idx].cod_tipo AND a.cod_sec = arr_items[idx].cod_sec AND
|
|
a.area = arr_items[idx].area 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
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_Winmessage("ERROR","CODIGO NO PERTENECE A COTIZACION","INFO")
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
IF chdescuento = "NO" THEN
|
|
DISPLAY arr_items[idx].descripcion TO s_items[s_idx].descripcion ATTRIBUTE(RED)
|
|
CALL msg(1010)
|
|
CALL arr_items.deleteElement(idx)
|
|
END IF
|
|
|
|
END IF
|
|
IF arr_items[idx].area IS NOT NULL THEN
|
|
|
|
SELECT a.cotizacion_no FROM vetb00088 a WHERE a.cotizacion_no = pcotizacion AND
|
|
a.area = arr_items[idx].area AND
|
|
a.cod_n = arr_items[idx].cod_n AND
|
|
a.cod_grupo = arr_items[idx].cod_grupo AND
|
|
a.cod_tipo = arr_items[idx].cod_tipo AND
|
|
a.cod_Sec = arr_items[idx].cod_sec
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
INSERT INTO vetb00088 (cotizacion_no,fecha_autorizacion,area,cod_n,cod_grupo,cod_tipo,cod_Sec,porc_descuento,costo,porc_desc,us_autoriza,autoriza)
|
|
VALUES (pcotizacion,getdate(),arr_items[idx].area,arr_items[idx].cod_n,arr_items[idx].cod_grupo,arr_items[idx].cod_tipo,arr_items[idx].cod_sec,
|
|
arr_items[idx].descuento_aplicado,arr_items[idx].costo, arr_items[idx].porc_desc,usuarios,'SI')
|
|
|
|
|
|
ELSE
|
|
|
|
UPDATE vetb00088 SET vetb00088.porc_descuento =arr_items[idx].descuento_aplicado,
|
|
vetb00088.fecha_autorizacion=getdate(),
|
|
us_autoriza = usuarios,
|
|
autoriza = 'SI'
|
|
WHERE cotizacion_no = pcotizacion AND
|
|
area = arr_items[idx].area AND
|
|
cod_n = arr_items[idx].cod_n AND
|
|
cod_grupo = arr_items[idx].cod_grupo AND
|
|
cod_tipo = arr_items[idx].cod_tipo AND
|
|
cod_sec = arr_items[idx].cod_sec
|
|
END IF
|
|
CALL registra_log(arr_items[idx].porc_desc,arr_items[idx].area,arr_items[idx].cod_n,
|
|
arr_items[idx].cod_grupo,arr_items[idx].cod_tipo,arr_items[idx].cod_sec)
|
|
CALL actualiza_cotizacion(arr_items[idx].descuento_aplicado,arr_items[idx].area,arr_items[idx].cod_n,arr_items[idx].cod_grupo,arr_items[idx].cod_tipo,arr_items[idx].cod_sec)
|
|
|
|
END IF
|
|
END IF
|
|
|
|
|
|
END FOR
|
|
COMMIT WORK
|
|
CALL asignavalores()
|
|
CALL impresion(data_imp.*,'veprmt049.4rp','PDF',arr_items.getlength(),"COTIZACION") RETURNING salida
|
|
CALL msg(13)
|
|
END IF
|
|
NEXT FIELD pcotizacion
|
|
|
|
END INPUT
|
|
|
|
ON ACTION CANCEL
|
|
CALL fgl_winmessage("ERROR","OPERACION ABORTADA","INFO")
|
|
|
|
RETURN
|
|
|
|
END DIALOG
|
|
|
|
CLOSE WINDOW vefmmt040
|
|
|
|
END MAIN
|
|
FUNCTION actualiza_cotizacion(xporc_desc,xarea,codn,codgrupo,codtipo,codsec)
|
|
DEFINE total_bruto,xporc_desc DEC(12,2),
|
|
codn,codgrupo,codtipo,codsec,xarea INT
|
|
UPDATE vetb00051 SET porc_desc = xporc_Desc,
|
|
us_mod = usuarios,
|
|
fech_mod = getdate(),
|
|
sincronizado=0
|
|
WHERE cotizacion_no = pcotizacion AND area = xarea AND
|
|
cod_n = codn AND cod_grupo = codgrupo AND
|
|
cod_tipo = codtipo AND cod_sec = codsec
|
|
|
|
SELECT SUM(a.cantidad*a.precio),ISNULL(SUM((a.cantidad*a.precio)*(a.porc_desc/100)),0)
|
|
INTO p_vetb50.total_bruto,descuento
|
|
FROM vetb00051 a
|
|
WHERE a.cotizacion_no = pcotizacion
|
|
LET subtotal = p_vetb50.total_bruto - descuento
|
|
LET itbis = subtotal * (p_vetb50.porc_itbi/100)
|
|
|
|
LET pneto = subtotal + itbis
|
|
|
|
LET p_vetb50.total_neto = pneto
|
|
LET p_vetb50.monto_itbi = itbis
|
|
LET p_vetb50.sub_total = subtotal
|
|
LET p_vetb50.monto_desc = descuento
|
|
UPDATE vetb00050 SET vetb00050.total_bruto = p_vetb50.total_bruto,
|
|
monto_desc = p_vetb50.monto_desc,
|
|
monto_itbi= p_vetb50.monto_itbi,
|
|
sub_total = p_vetb50.sub_total,
|
|
total_neto = p_vetb50.total_neto,
|
|
us_mod = usuarios,fech_mod = getdate(),
|
|
sincronizado=0
|
|
WHERE cotizacion_no = pcotizacion
|
|
|
|
END FUNCTION
|
|
FUNCTION registra_log(xporc_desc,xarea,codn,codgrupo,codtipo,codsec)
|
|
define codn,codgrupo,codtipo,codsec,xarea INT,
|
|
xporc_desc DEC(12,2)
|
|
|
|
|
|
|
|
INSERT INTO vetb00094 (cotizacion_no,fecha_registro,us_crea,area,cod_n,cod_grupo,cod_tipo,cod_sec,porc_desc)
|
|
VALUES (pcotizacion,getdate(),usuarios,xarea,codn,codgrupo,codtipo,codsec,
|
|
xporc_desc)
|
|
END FUNCTION
|
|
FUNCTION asignavalores()
|
|
#Busca el lugar de entrega
|
|
LET p_vetb50.titulo_bodega = null
|
|
SELECT a.descripcion INTO p_vetb50.titulo_bodega FROM intb00009 a WHERE a.cod_bodega = p_vetb50.bodega
|
|
|
|
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 |