{ 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