314 lines
12 KiB
Plaintext
314 lines
12 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
|
|
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
|
|
IF tienefactura = "SI" THEN
|
|
LET string_estado = "ESTA REQUISICION NO FUE AUTORIZADA, PORQUE EL CLIENTE TIENE FACTURAS PENDIENTES"
|
|
|
|
|
|
END IF
|
|
IF tienefactura = 'NO' THEN
|
|
IF balance < 0 THEN
|
|
LET valor_total = monto_cotizacion+xmonto
|
|
IF ((balance * -1)+monto_control) > monto_cotizacion+xmonto THEN
|
|
|
|
LET autoriza = TRUE
|
|
LET string_estado = "ESTA REQUISICION ESTA AUTORIZADA, PORQUE EL BALANCE DE ",balance *-1 USING "##,###,###.##",
|
|
" ES MAYOR A LA SUMATORIA DEL MONTO DE LAS REQUISICIONES PENDIENTES POR DESPACHAR, LA CUAL ES ",valor_total USING "##,###,###.##"
|
|
ELSE
|
|
LET string_estado = "ESTA REQUISICION NO FUE AUTORIZADA, PORQUE EL BALANCE DE ",balance *-1 USING "##,###,###.##",
|
|
" NO SATISFACE EL VALOR DE LA COTIZACION MAS EL MONTO DE ESTA REQUISICION LA CUAL ES ",valor_total USING "##,###,###.##"
|
|
|
|
LET autoriza = FALSE
|
|
END IF
|
|
END IF
|
|
IF xlimite > 0 THEN
|
|
IF (balance+monto_cotizacion+xmonto)*tasa > xlimite THEN
|
|
|
|
LET autoriza = FALSE
|
|
LET string_estado = "ESTA REQUISICION NO FUE AUTORIZADA, PORQUE LA SUMATORIA DEL BALANCE, VALOR PENDIENTE POR DESPACHAR, MONTO DE ESTA REQUISICION, LO CUAL ES ",balance *-1 USING "##,###,###.##",
|
|
" NO SATISFACE EL VALOR DEL LIMITE DE CREDITO DEL CLIENTE, LO CUAL ES ",
|
|
xlimite USING "##,###,###.##"
|
|
|
|
ELSE
|
|
LET string_estado = "ESTA REQUISICION ESTA AUTORIZADA, PORQUE LA SUMATORIA DEL BALANCE, VALOR PENDIENTE POR DESPACHAR, MONTO DE ESTA REQUISICION, LO CUAL ES ",
|
|
balance+monto_cotizacion+xmonto USING "##,###,###.##",
|
|
" SATISFACE EL VALOR DEL LIMITE DE CREDITO DEL CLIENTE, LO CUAL ES ",xlimite USING "##,###,###.##"
|
|
LET autoriza = TRUE
|
|
END IF
|
|
END IF
|
|
IF balance = 0 AND xlimite = 0 THEN
|
|
LET autoriza = FALSE
|
|
LET string_estado = "ESTA REQUISICION NO FUE AUTORIZADA, YA QUE ESTE CLIENTE NO TIENE CREDITO "
|
|
END IF
|
|
|
|
END IF
|
|
|
|
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
|
|
{ IF pcondpago = 4 THEN
|
|
LET pestado = 'AUTORIZADA'
|
|
UPDATE cctb00025 SET estado = pestado,
|
|
us_mod = 'MBS',
|
|
fech_mod = getdate()
|
|
WHERE num_req = xnum_req
|
|
LET usuario_autoriza = 'MBS'
|
|
LET string_estado = "ESTA REQUISICION FUE AUTORIZADA POR EL HECHO QUE LA TRANSACCION FUE AL CONTADO "
|
|
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 |