{------------------------------------------------------------------------------ PROGRAMA : CCPRMT050 OBJETIVO : Programa para cobros compulsivos CxC PROGRAMADOR : Valentin Rodriguez FECHA REALIZACION : ------------------------------------------------------------------------------} IMPORT JAVA javax.mail.Session GLOBALS "ccprgb000.4gl" #VARIABLES PARA INTERACTUAR CON CAMPO DEL FORMULARIO #DEFINE sec_cliente SMALLINT DEFINE campos RECORD tipo_cliente SMALLINT, f_vencimiento DATE, rangoFecha CHAR(10), f_final DATE, f_inicio DATE END RECORD, att dynamic array of record col1 , col2 , col3 , col4 , col5 , col6 , col7 , col8 , col9 , col10,col11 STRING end RECORD, xcliente,enviainfo,sqlconnect STRING, retorne BOOLEAN, montopendiente DECIMAL(12,2) DEFINE xusername,xsmtphost,xsmtpport,xpassword,respuesta,mensajes STRING # VARIABLES PARA GUARDAR LOS DATOS DEVUELTOS POR EL METODO 'busca_balance' # DEFINE xcorriente,x1a30,x31a60,x61a90,xmas90,xtotalSaldo DECIMAL(12,2) #RECORD DONDE GUARDAREMOS LAS COTIZACIONES, ORDENES Y FACTURAS ENVIADOS #POR EL METODO 'busca_balance' DEFINE tb_acuerdo DYNAMIC ARRAY OF RECORD ACfechaPago DATE, ACobservacion VARCHAR(100), ACmontoPago DEC(12,2), fechCompromiso , fecha_registro CHAR(40), usuario VARCHAR(100), ACidCliente INT END RECORD, arrContactos DYNAMIC ARRAY OF RECORD seleccionar, contacto,puesto,email,celular,telefonoOficina STRING END RECORD, arrConsolidado DYNAMIC ARRAY OF RECORD cCliente,cDocumento,cfechaVen,cTipoDoc,cOrden,cCotizacion STRING, cCorriente,cDe1a30,cDe31a60,cD61a90,cMasde90,cTotal DECIMAL(12,2), cmoneda STRING END RECORD DEFINE notaCliente, cliente VARCHAR(200), fecha_compromiso DATE, monto_pago DECIMAL(12,2), xtipocliente,xseccliente INT MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" AS 'MSSQL' USER usuarios USING clave CONNECT TO "marmotech" AS 'IFMX' USER usuarios USING clave CALL buscaInformacion() END MAIN FUNCTION buscaInformacion() DEFINE selec STRING, datatree DYNAMIC ARRAY OF RECORD cliente,factura,orden,cotizacion,telefono STRING, limCredito,corriente,de1a30,de31a60,de61a90,masde90,totalSaldo DEC(12,2), moneda STRING, nodo,hijo,imagen STRING, idregistro,tcliente,scliente,sec_vend INT,tipo_doc VARCHAR(10) END RECORD, idx INT, compromiso RECORD tipo_cliente,sec_cliente INT, fechaActualizaacion DATE, observacion VARCHAR(200), montoPago DEC(12,2), documento VARCHAR(25), tipo_doc VARCHAR(10), fechaCompromiso DATE, envioemail VARCHAR(10) END RECORD # SET CONNECTION 'IFMX' LET sqlconnect = 'marmotech' LET selec = "SELECT a.clientes, a.factura,a.orden,a.cotizacion,a.telefono,a.limcredito,a.corriente,a.d1a30, a.d31a60,a.d31a60,a.mas90,a.totalSaldo,a.moneda, a.nodo,a.hijos,imagen,idregistro,a.tipo_cliente,a.sec_cliente,sec_vend,a.tipo_doc FROM cctb00042 a WHERE a.totalSaldo > 0 ORDER BY a.idregistro,a.nodo,a.hijos " LET idx = 1 PREPARE comando FROM selec DECLARE buscacxc CURSOR FOR comando FOREACH buscacxc INTO datatree[idx].* LET idx = idx + 1 END FOREACH call ui.Interface.loadStyles("formularios") OPEN WINDOW w1 WITH FORM "ccfmmt050" DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY datatree TO s_record.* BEFORE DISPLAY LET Xtipocliente = datatree[arr_curr()].tcliente LET xseccliente = datatree[arr_curr()].scliente call dialog.setCellAttributes(att) FOR idx = 1 TO datatree.getLength() LET att[idx].col1 = NULL LET att[idx].col2 = NULL LET att[idx].col3 = NULL LET att[idx].col4 = NULL LET att[idx].col5 = NULL LET att[idx].col6 = NULL LET att[idx].col7 = NULL LET att[idx].col8 = NULL LET att[idx].col9 = NULL LET att[idx].col10 = NULL LET att[idx].col11 = NULL IF datatree[idx].masde90 > 0 THEN LET ATT[idx].col11 = 'red reverse' END IF IF datatree[idx].de61a90 > 0 THEN LET ATT[idx].col10 = 'red reverse' END IF IF datatree[idx].de31a60 > 0 THEN LET att[idx].coL9 = "yellow reverse" END IF IF datatree[idx].de1a30 > 0 THEN LET att[idx].coL8 = "yellow reverse" END IF IF datatree[idx].corriente > 0 THEN LET att[idx].coL7 = "green reverse" END IF END FOR ON SELECTION CHANGE LET montopendiente =datatree[arr_curr()].totalSaldo DISPLAY datatree[arr_curr()].factura TO nfactura DISPLAY montopendiente TO montopendiente CALL compromiso(datatree[arr_curr()].tcliente,datatree[arr_curr()].scliente,datatree[arr_curr()].factura, datatree[arr_curr()].tipo_doc) RETURNING cliente DISPLAY cliente TO ncliente CALL contactos(datatree[arr_curr()].tcliente,datatree[arr_curr()].scliente) AFTER DISPLAY END DISPLAY DISPLAY ARRAY arrContactos TO scontactos.* END DISPLAY INPUT BY NAME fecha_compromiso,monto_pago,notaCliente,enviainfo BEFORE INPUT LET notaCliente = 'Por medio de la presente le estamos notificando los acuerdos que conversamos:' AFTER FIELD monto_pago IF monto_pago IS NOT NULL THEN IF monto_pago > montopendiente THEN CALL msg(168) NEXT FIELD monto_pago END IF END IF AFTER FIELD fecha_compromiso IF fecha_compromiso IS NOT NULL THEN IF fecha_compromiso < TODAY THEN CALL msg(1011) NEXT FIELD fecha_compromiso END IF END IF ON ACTION guardar ATTRIBUTE(TEXT='Salvar', IMAGE="save") LET compromiso.tipo_cliente = datatree[arr_curr()].tcliente LET compromiso.sec_cliente = datatree[arr_curr()].scliente LET compromiso.fechaCompromiso = fecha_compromiso LET compromiso.observacion = notaCliente LET compromiso.montoPago = monto_pago LET compromiso.documento =datatree[arr_curr()].factura LET compromiso.tipo_doc = datatree[arr_curr()].tipo_doc CALL salvacompromiso(compromiso.*) DISPLAY datatree[arr_curr()].factura TO nfactura DISPLAY datatree[arr_curr()].totalSaldo TO montopendiente CALL compromiso(datatree[arr_curr()].tcliente,datatree[arr_curr()].scliente,datatree[arr_curr()].factura, datatree[arr_curr()].tipo_doc) RETURNING cliente DISPLAY cliente TO ncliente IF enviainfo = 'SI' THEN CALL notificar() END IF END INPUT DISPLAY ARRAY tb_acuerdo TO src_acuerdo.* END DISPLAY DISPLAY ARRAY arrConsolidado TO sconsolidado.* END DISPLAY ON ACTION estado ATTRIBUTE(TEXT="Estado",IMAGE="fa-dollar") DISPLAY "sqlconnect ",sqlconnect IF sqlconnect = 'smarmotech' THEN SET CONNECTION "MSSQL" END IF CALL visualiza_estado(datatree[arr_curr()].tcliente,datatree[arr_curr()].scliente,sqlconnect) LET sqlconnect = 'marmotech' SET CONNECTION "IFMX" ON ACTION consolidado ATTRIBUTE(IMAGE='fa-sellsy') LET sqlconnect = 'smarmotech' CALL buscaBalance(xtipocliente,xseccliente,1) ON ACTION CANCEL EXIT PROGRAM END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION compromiso(xtipocliente,xseccliente,xfactura,xtipo) DEFINE xtipocliente,xseccliente,i,xfactura INT, xtipo STRING # SELECT a.fechaPago,a.observacion,a.montoPago,a.idCliente,a.fechacompromiso,a.fech_crea, # ISNULL(c.nom1_emp,'NO TIENE')+' '+ISNULL(c.apell1_emp,'NO TIENE') SELECT a.nombre INTO xcliente FROM vetb00004 a WHERE a.tipo_cliente = xtipocliente AND a.sec_cliente = xseccliente DISPLAY "CLIENTE: ",xtipocliente," ",xseccliente," documento ",xfactura," ",xtipo DECLARE busca_acuerdos CURSOR FOR SELECT a.fechaPago,a.observacion,a.montoPago ,a.fechacompromiso ,a.fech_crea # ,ISNULL(c.nom1_emp,'NO TIENE')+' '+ISNULL(c.apell1_emp,'NO TIENE'),a.idCliente FROM cctb00043 a LEFT OUTER JOIN seg0001 b ON a.us_crea = b.usuario # LEFT OUTER JOIN adtb00003 c ON b.num_emp = c.num_emp WHERE a.tipo_cliente = xtipocliente AND a.sec_cliente = xseccliente AND (a.estado = 'ACTIVO' OR a.estado IS NULL) AND a.documento=xfactura AND a.tipo_doc = xtipo ORDER BY a.fechapago LET i =1 FOREACH busca_acuerdos INTO tb_acuerdo[i].* LET i = i +1 END FOREACH RETURN xcliente END FUNCTION FUNCTION salvacompromiso(xcompromiso) DEFINE xcompromiso RECORD tipo_cliente,sec_cliente INT, fechaActualizaacion DATE, observacion VARCHAR(200), montoPago DEC(12,2), documento VARCHAR(25), tipo_doc VARCHAR(10), fechaCompromiso DATE, envioemail VARCHAR(10) END RECORD INSERT INTO cctb00043 (tipo_cliente,sec_cliente,fechaActualizacion,observacion,montoPago,documento, tipo_doc,fechaCompromiso,envioemail,us_crea,fech_crea,estado) VALUES (xcompromiso.*, suser_sname(),getdate(),'ACTIVO') CALL msg(13) END FUNCTION FUNCTION notificar() DEFINE sesion Session, password,s_protocol,respuesta,mensajes STRING LET subject = "NOTIFICACION COMPROMISO PAGOS" LET cuerpo_correo ="
Estimados Seņores: ",xcliente CLIPPED, "
",notaCliente CLIPPED, "
Acordamos el pago por un monto de ",monto_pago USING"###,###,###.##"," en fecha ",fecha_compromiso USING "dd/mm/yyyy", "
Nos reiteramos a sus ordenes