Files
MBS/PROYECTO/otrodir/evaluaclientes.4gl
T

268 lines
9.3 KiB
Plaintext

{
FUNCION : evaluaclientes
OBJETIVO : Evaluar la situacion de los clientes de acuerdo a
montos vencidos, control limite de credidtos
FECHA : 26/08/2011
DESAROLLADO POR : Ing. Juan Soto
MODIFICACION: 26/10/2020
MODIFICADO POR: JUAN SOTO
DESCRIPCION MOD: Adicione una variable para la parte de incrementar RD$100.00 al control
MAIN
DEFER INTERRUPT
CONNECT to "smarmotech" USER "jsoto" USING "lmmjvsd2009"
CALL evaluaclientes(19,71,4,100000)
END MAIN
}
FUNCTION evaluaclientes
(xtipocliente,xseccliente,pcondpago,xnum_req,xdocumentoref,xsec_vend,xtipodoc,xmonto)
DEFINE xcotizacion_no,xseccliente,xaplicacion,facturas,xdocumentoref,xsec_vend,xnum_req INT,
xtipocliente,pcondpago,dias SMALLINT,
balance,valor1,valor2,xlimite,xmonto,xpendiente,valor_total,tasa DEC(12,2),
autoriza BOOLEAN,
xnombre_vendedor CHAR(60),
xtipodoc CHAR(2),
xfechaVence DATE,
monto_cotizacion DEC(12,2),
pestado VARCHAR(20),string_estado VARCHAR(250),
xnombre,emailTO VARCHAR(50),
emailCC, emailBody,emailSubject,procedimiento STRING,
tienefactura CHAR(2),
usuario_autoriza VARCHAR(50),
monto_control FLOAT
# BUSCA TASA
SELECT a.ultima_tasa INTO tasa FROM vetb00060 a WHERE a.tipo_cliente = xtipocliente
IF tasa > 1 THEN
LET monto_control = 1.60 * tasa
ELSE
LET monto_control = 100
END IF
LET autoriza = FALSE
# 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 = xtipocliente AND
a.sec_cliente = xseccliente 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
# IF pcondpago <> 4 THEN
# 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 = xtipocliente AND
a.sec_cliente = xseccliente AND
a.tipo_doc NOT IN ("AV","PC","AP") AND a.status_t IS NULL
IF valor2 IS NULL THEN
LET valor2 = 0
END IF
LET balance = valor2 - valor1
# BUSCA EL LIMITE DE CREDITO
LET xlimite = 0
SELECT MAX(a.limite_cr_grupo),a.descripcion INTO xlimite,xnombre FROM vetb00054 a,vetb00052 b
WHERE a.codigo_grupo = b.codigo_grupo AND
b.tipo_cliente=xtipocliente and b.sec_cliente = xseccliente AND a.status_t IS null
group by a.descripcion
IF xlimite IS NULL OR xlimite = 0 THEN
SELECT a.limite_credito,a.nombre INTO xlimite,xnombre
FROM vetb00004 a
WHERE a.tipo_cliente= xtipocliente AND
a.sec_cliente = xseccliente
IF xlimite IS NULL THEN
LET xlimite = 0
END IF
END IF
# SUMA LAS COTIZACIONES QUE TIENEN REQUISICIONES AUTORIZADAS, NO DESPACHADAS
LET monto_cotizacion = 0
SELECT SUM(b.valor) INTO monto_cotizacion
FROM cctb00026 b,cctb00025 c,vetb00050 d,prtb00012 e
WHERE d.tipo_cliente = xtipocliente and
d.sec_cliente = xseccliente and
b.num_req = c.num_req AND
b.num_req <> xnum_req AND
b.cotizacion_no = d.cotizacion_no AND
b.num_oc = e.num_oc AND e.status_t IS NULL AND
e.cerrada = 'N' AND
c.estado_despacho not in ('DESPACHADA') AND
c.estado = 'AUTORIZADA' AND
b.status_t is NULL AND c.status_t IS NULL
IF monto_cotizacion IS NULL THEN
LET monto_cotizacion = 0
END IF
# REQUISICIONES PENDIENTES POR APROVAR CUANDO ES AVANCE A COTIZACION
{ IF xmonto < 0 THEN
LET monto_cotizacion = 0
SELECT SUM(b.valor) INTO monto_cotizacion
FROM cctb00026 b,cctb00025 c
WHERE b.num_req = c.num_req and
b.num_req = xnum_req AND
c.estado_despacho not in ('DESPACHADA') AND
c.estado = 'NO AUTORIZADA' AND
b.status_t is NULL AND c.status_t IS NULL
IF monto_cotizacion IS NULL THEN
LET monto_cotizacion = 0
END IF
END IF
}
# VERIFICA MONTO VENCIDO
# START REPORT prueba TO "prueba"
LET tienefactura = 'NO'
LET xfechaVence =NULL
LET facturas = NULL
IF balance > 0 THEN
DECLARE busca_vencido CURSOR FOR
SELECT a.aplica_a,SUM(a.valor+a.monto_Desc)
FROM cctb00001 a
WHERE a.tipo_cliente = xtipocliente AND
a.sec_cliente = xseccliente AND
a.status_t IS NULL
GROUP BY a.aplica_a
HAVING SUM(a.valor+a.monto_Desc) > 0
FOREACH busca_vencido INTO xaplicacion,xpendiente
IF xpendiente > 0 THEN
SELECT MAX( a.tipo_doc),MAX(a.fecha_ven)
INTO Xtipodoc,Xfechavence
FROM cctb00001 a
WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND
a.num_doc=xaplicacion AND
a.tipo_doc not in ("PG","NC","PC","OC","DV","AV","AP") and
a.tipo_cliente=xtipocliente AND
a.sec_cliente=xseccliente
LET dias = 0
IF xfechavence IS NULL THEN
CONTINUE FOREACH
END IF
# DISPLAY "documentos : ",xfechavence
IF xtipodoc = 'FT' OR xtipodoc= 'FE' THEN
LET dias = today - xfechavence
IF dias >= 1 THEN
LET facturas = xaplicacion
LET autoriza = FALSE
LET xdocumentoref=xaplicacion
LET tienefactura = 'SI'
EXIT FOREACH
END IF
END IF
END IF
# OUTPUT TO REPORT prueba(xaplicacion,xpendiente,xfechavence,dias)
END FOREACH
END IF
IF xlimite IS NULL THEN
LET xlimite = 0
END IF
#FINISH REPORT prueba
# DISPLAY "balance ",balance," monto cotiza "," xmonto ",xmonto," xlimite ",xlimite
IF monto_cotizacion IS NULL THEN
LET monto_cotizacion = 0
END IF
#FUNCTION PARAMETROS AUTORIZACIONES DESPACHO
CALL autorizarequisicion(balance,xmonto,monto_cotizacion,xlimite,tienefactura,facturas) RETURNING autoriza,string_estado
SELECT a.correo INTO emailto FROM seg0003 a,seg0000 b
WHERE b.sec_vend = xsec_vend AND
a.usuario = b.usuario AND
a.autorizaciondespacho = 'SI'
IF autoriza THEN
LET pestado = 'AUTORIZADA'
UPDATE cctb00025 SET estado = pestado,
us_mod = 'MBS',
fech_mod = getdate()
WHERE num_req = xnum_req
LET usuario_autoriza = 'MBS'
ELSE
LET pestado ='NO AUTORIZADA'
UPDATE cctb00025 SET estado = pestado,
us_mod = 'MBS',
fech_mod = getdate()
WHERE num_req = xnum_req
# CALL envia_correo(emailto,emailcc,emailbody,emailsubject,procedimiento)
END IF
# END IF
LET usuario_autoriza = 'MBS'
# NOMBRE VENDEDOR
SELECT ISNULL(RTRIM(a.nom1_emp),' ')+' '+ISNULL(RTRIM(a.apell1_emp),' ') INTO xnombre_vendedor
FROM adtb00003 a
WHERE a.num_emp = xsec_vend
# BUSCA COTIZACION
SELECT a.cotizacion_no INTO xcotizacion_no FROM prtb00012 a WHERE a.num_oc = xdocumentoref AND
a.status_t IS NULL
IF xnombre IS NULL THEN
SELECT a.nombre INTO xnombre FROM vetb00004 a WHERE a.tipo_cliente = xtipocliente AND a.sec_cliente = xseccliente
END IF
INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,sec_cliente,num_req,limite_cr,
monto_cotizacion,balance,estado,tipo_doc_ref,monto_req,
factura,
descrip_estado,nombrevendedor,nombrecliente,cotizacion_no,num_oc)
VALUES
(GETDATE(),usuario_autoriza,xsec_vend,xtipocliente,xseccliente,xnum_req,
xlimite,monto_cotizacion,balance,pestado,'EV',xmonto,facturas,
string_estado,xnombre_vendedor,xnombre,xcotizacion_no,xdocumentoref)
IF pestado = "AUTORIZADA" THEN
IF emailto IS NULL THEN
LET emailto ="jsoto@marmotech.com.do"
END IF
#LET emailCC = "rantonio@marmotech.com.do"
LET emailBody = "AUTORIZACION DESPACHO"
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
IF tienefactura = 'SI' THEN
LET emailSubject ="NUMERO REQ. : ",xnum_req USING "&&&&&&"
ELSE
LET emailSubject ="ORDEN : ",xdocumentoref USING "&&&&&&"," \n",
xtipocliente USING "&&","-",xseccliente USING "&&&&&&"," ",xnombre CLIPPED
END IF
END IF
# CALL estado_requisicion(xnum_req)
RETURN autoriza
END FUNCTION
REPORT prueba(zaplica,zbalance,zfecha,zdias)
DEFINE zaplica INT,
zbalance DEC(12,2),
zfecha DATE,
zdias smallint
FORMAT
ON EVERY ROW
PRINT zfecha," ",zaplica," ",zbalance USING "---,---,--#.##",
" ",zdias
END REPORT