241 lines
7.8 KiB
Plaintext
241 lines
7.8 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
|
|
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
|
|
CONNECT to "decomarmol" 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 xseccliente,xaplicacion,facturas,xdocumentoref,xsec_vend,xnum_req INT,
|
|
xtipocliente,pcondpago,dias SMALLINT,
|
|
balance,valor1,valor2,xlimite,xmonto,xpendiente DEC(12,2),
|
|
autoriza BOOLEAN,
|
|
xtipodoc CHAR(2),
|
|
xfechaVence DATE,
|
|
monto_cotizacion DEC(12,2),
|
|
pestado VARCHAR(20),
|
|
xnombre,emailTO VARCHAR(50),
|
|
emailCC, emailBody,emailSubject,procedimiento STRING,
|
|
tienefactura CHAR(2)
|
|
|
|
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
|
|
|
|
# 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 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
|
|
|
|
# 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.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
|
|
|
|
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
|
|
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
|
|
# 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
|
|
|
|
IF tienefactura = 'NO' THEN
|
|
IF balance < 0 THEN
|
|
IF ((balance * -1)+100) > monto_cotizacion+xmonto THEN
|
|
LET autoriza = TRUE
|
|
ELSE
|
|
LET autoriza = FALSE
|
|
END IF
|
|
END IF
|
|
IF xlimite > 0 THEN
|
|
IF balance+monto_cotizacion+xmonto > xlimite THEN
|
|
LET autoriza = FALSE
|
|
ELSE
|
|
LET autoriza = TRUE
|
|
END IF
|
|
END IF
|
|
IF balance = 0 AND xlimite = 0 THEN
|
|
LET autoriza = FALSE
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF autoriza THEN
|
|
LET pestado = 'AUTORIZADA'
|
|
UPDATE cctb00025 SET estado = pestado,
|
|
us_mod = suser_name(),
|
|
fech_mod = getdate()
|
|
WHERE num_req = xnum_req
|
|
ELSE
|
|
LET pestado ='AUTORIZADA'
|
|
UPDATE cctb00025 SET estado = pestado,
|
|
us_mod = suser_name(),
|
|
fech_mod = getdate()
|
|
WHERE num_req = xnum_req
|
|
END IF
|
|
|
|
INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,sec_cliente,num_req,limite_cr,
|
|
monto_cotizacion,balance,estado,documento_ref,tipo_doc_ref,monto_req,factura,fecha_vence)
|
|
VALUES (GETDATE(),suser_sname(),xsec_vend,xtipocliente,xseccliente,xnum_req,
|
|
xlimite,monto_cotizacion,balance,pestado,xdocumentoref,xtipodoc,xmonto,facturas,xfechaVence)
|
|
|
|
IF pestado = "AUTORIZADA" THEN
|
|
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 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
|
|
# CALL envia_correo(emailto,emailcc,emailbody,emailsubject,procedimiento)
|
|
|
|
END IF
|
|
|
|
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 |