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

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