Files
MBS/PROYECTO/ccdir/ccprmt009.4gl
T

345 lines
14 KiB
Plaintext

{
=======================================================================
PROGRAMA : AUTORIZACIONES DESPACHOS
OBJETIVO : VISUALIZAR LAS REQUISICIONES DESPACHOS PARA AUTORIZAR POSTERIORMENTE
PROGRAMADOR : ING. JUAN SOTO
FECHA REALIZACION: OCTUBRE 2011
========================================================================
}
GLOBALS "ccprgb000.4gl"
DEFINE str_autoriza,nombre_usuario VARCHAR(100)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(4) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
DECLARE buscacorreo CURSOR FOR
SELECT a.correo FROM seg0003 a
WHERE a.autorizaciondespacho = 'SI'
LET idx = 1
FOREACH buscacorreo INTO copiacorreo[idx]
LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx]
LET idx = idx + 1
END FOREACH
SELECT a.sec_vend,RTRIM(b.nom1_emp)||' '||b.apell1_emp,
a.email
INTO requisicion.sec_vend,requisicion.nombre_vendedor,vendedoremail
FROM seg0000 a,adtb00003 b
WHERE a.usuario = usuarios AND
a.sec_vend = b.num_emp
SELECT a.* INTO p_companias.* FROM companias a
CALL ccprmt009()
END MAIN
FUNCTION ccprmt009()
DEFINE actualice BOOLEAN,
registros SMALLINT
OPTIONS INPUT WRAP
OPEN WINDOW w1 AT 5,5 WITH FORM "ccfmmt009"
CALL ui.Interface.LoadStyles("mbsStyle")
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
CONSTRUCT criterio ON a.estado,a.num_req,a.fecha,c.cotizacion_no,c.num_oc,e.nombre
FROM estado,num_req,fecha,cotizacion_no,num_oc,cliente
BEFORE CONSTRUCT
CLEAR FORM
AFTER CONSTRUCT
IF int_flag THEN
CALL fgl_winmessage("WARNING","OPERACION CANCELADA","STOP")
LET int_flag = FALSE
CLEAR FORM
EXIT PROGRAM
END IF
END CONSTRUCT
ON ACTION procesar ATTRIBUTE(TEXT="Buscar",IMAGE="find")
CLEAR FORM
CALL arr_autoriza.clear()
CALL carga_ordenes()
LET registros = arr_autoriza.getLength()
DISPLAY BY NAME registros
INPUT ARRAY arr_autoriza FROM s_autoriza.* ATTRIBUTE(WITHOUT DEFAULTS)
ON ACTION visualiza_log ATTRIBUTE (TEXT="Visualiza Log",IMAGE="download")
LET curr=arr_curr()
CALL visualiza_log(arr_autoriza[curr].num_req,arr_autoriza[curr].tipo_cliente,
arr_autoriza[curr].sec_cliente)
BEFORE INPUT
#CALL DIALOG.setactionactive("accept",FALSE)
CALL DIALOG.setactionactive("insert",FALSE)
CALL DIALOG.setactionactive("append",FALSE)
CALL DIALOG.setactionactive("delete",FALSE)
AFTER INPUT
#WHENEVER ERROR CONTINUE
IF int_flag THEN
EXIT INPUT
END IF
LET respuesta = fgl_winquestion("ADVERTENCIA","ESTA SEGURO DE ACTUALIZAR ESTAS REQUISICIONES?","no","yes|no","question",0)
IF respuesta = "yes" THEN
SELECT rtrim(a.nom1_emp)||' '||a.apell1_emp INTO nombre_usuario FROM adtb00003 a,seg0001 b
WHERE a.num_emp = b.num_emp AND b.usuario = usuarios
IF STATUS = NOTFOUND THEN
LET nombre_usuario = usuarios
END IF
BEGIN WORK
FOR idx = 1 TO arr_count()
IF arr_autoriza[idx].num_req IS NOT NULL THEN
IF arr_autoriza[idx].inserta = 'SI' THEN
UPDATE cctb00025 set sec_vend_aprobado = requisicion.sec_vend,
fecha_autorizacion = getdate(),
estado = arr_autoriza[idx].estado,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE num_req = arr_autoriza[idx].num_req
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","LA REQUISICION NO PUDO SER AUTORIZADA","STOP")
LET actualice = FALSE
CLOSE WINDOW w1
EXIT PROGRAM
END IF
# INSERTA EN EL LOG DEL USUARIO.
LET str_autoriza= "LA REQUISICION ",arr_autoriza[idx].num_req USING "<<<<<<", " CONTIENE EL STATUS ",arr_autoriza[idx].estado CLIPPED,
" ACTUALIZADO POR EL USUARIO ",nombre_usuario
INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,sec_cliente,num_req,
monto_cotizacion,balance,estado,tipo_doc_ref,descrip_estado,num_oc,cotizacion_no,
nombrevendedor,nombrecliente)
VALUES (GETDATE(),usuarios,requisicion.sec_vend,arr_autoriza[idx].tipo_cliente,
arr_autoriza[idx].sec_cliente,arr_autoriza[idx].num_req,
arr_autoriza[idx].valor_cotizacion,arr_autoriza[idx].balance,
arr_autoriza[idx].estado,'AU',str_autoriza,arr_autoriza[idx].num_oc,
arr_autoriza[idx].cotizacion_no,requisicion.nombre_vendedor,arr_autoriza[idx].cliente)
SELECT a.sec_vend,RTRIM(b.nom1_emp)||' '||b.apell1_emp,
a.email
INTO requisicion.sec_vend,requisicion.nombre_vendedor,vendedoremail
FROM seg0000 a,adtb00003 b
WHERE a.sec_vend = b.num_emp AND
b.num_emp = arr_autoriza[idx].sec_vend
LET subject = arr_autoriza[idx].estado CLIPPED," DESPACHO NO. ",arr_autoriza[idx].num_req USING "&&&&&&"
LET cuerpo_correo = "'VENDEDOR : ",requisicion.nombre_vendedor CLIPPED
LET cuerpo_correo = " ESTA REQUISICION ESTA ",arr_autoriza[idx].estado CLIPPED
LET cuerpo_correo = cuerpo_correo CLIPPED," ORDEN NO: ", arr_autoriza[idx].num_oc USING "&&&&&&"," ",
" CLIENTE: ",arr_autoriza[idx].cliente CLIPPED," ",
" COTIZACION NO: ",arr_autoriza[idx].cotizacion_no USING "<<<<<<"
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
CALL envia_correo(vendedorEmail,copiaemail,cuerpo_correo,
subject, procedimiento )
# LOG AUTORIZACIONES DESPACHOS
INSERT INTO cctb00035
(inserta
,estado
,estado_despacho
,vendedor
,sec_vend_sp
,num_req
,fecha
,cotizacion_no
,num_oc
,tipo_venta
,cliente
,valor_cotizacion
,valor_autorizar
,sec_vend
,tipo_cliente
,sec_cliente
,balance
,balance_restante
,us_crea
,fech_crea)
VALUES
(arr_autoriza[idx].inserta
,arr_autoriza[idx].estado
,arr_autoriza[idx].estado_despacho
,arr_autoriza[idx].vendedor
,arr_autoriza[idx].sec_vend_sp
,arr_autoriza[idx].num_req
,arr_autoriza[idx].fecha
,arr_autoriza[idx].cotizacion_no
,arr_autoriza[idx].num_oc
,arr_autoriza[idx].tipo_venta
,arr_autoriza[idx].cliente
,arr_autoriza[idx].valor_cotizacion
,arr_autoriza[idx].valor_autorizar
,arr_autoriza[idx].sec_vend
,arr_autoriza[idx].tipo_cliente
,arr_autoriza[idx].sec_cliente
,arr_autoriza[idx].balance
,arr_autoriza[idx].balance_restante
,usuarios
,getdate())
END IF
END IF
END FOR
IF NOT INT_FLAG THEN
COMMIT WORK
CALL fgl_winmessage("INFORMACION","ACTUALIZACION EXITOSA","STOP")
CLEAR FORM
EXIT INPUT
END IF
END IF
END INPUT
IF int_Flag THEN
CALL fgl_winmessage("WARNING","OPERACION CANCELADA","STOP")
LET int_flag = FALSE
CLEAR FORM
CONTINUE DIALOG
LET int_flag = FALSE
END IF
# ON ACTION mensaje
# CALL entramensaje(arr_autoriza[idx].num_req,'M')
ON ACTION CANCEL ATTRIBUTE(TEXT="Cancela Operacion",IMAGE="quit")
CALL fgl_winmessage("WARNING","OPERACION CANCELADA","STOP")
LET int_flag = FALSE
CLEAR FORM
EXIT PROGRAM
END DIALOG
CLOSE WINDOW w1
END FUNCTION
FUNCTION carga_ordenes()
DEFINE pbalance,valor_avances,valor_s_avances DEC(12,2)
LET selec =
" SELECT 'NO',a.estado,a.estado_despacho,RTRIM(CAST(a.sec_vend AS CHAR))+' '+RTRIM(b.nom1_emp)+' '+b.apell1_emp , ",
" (SELECT TOP 1 RTRIM(CAST(x1.sec_vend AS CHAR))+' '+RTRIM(x2.nom1_emp)+' '+x2.apell1_emp FROM vetb00093 x1,adtb00003 x2 ",
" WHERE x1.cotizacion_no = d.cotizacion_no AND x1.sec_vend = x2.num_emp),",
" a.num_req,CONVERT(CHAR(10),a.fecha,103),c.cotizacion_no,c.num_oc,g.descripcion as tipo_venta, ",
" CAST(e.tipo_cliente AS CHAR(2))+'-'+CAST(e.sec_cliente AS CHAR(6))+' '+RTRIM(e.nombre) ",
" AS cliente,d.total_neto as valor_cotizacion, ",
" SUM(c.valor),a.sec_vend,d.tipo_cliente,d.sec_cliente ",
" FROM cctb00025 a,adtb00003 b,cctb00026 c,vetb00050 d,vetb00004 e,vetb00061 g,vetb00060 h,seg0007 x ",
"WHERE ",
# " ( a.sec_vend = d.sec_vend )and ",
" ( a.sec_vend = b.num_emp) and ",
" ( a.num_req = c.num_req) and ",
" ( c.cotizacion_no = d.cotizacion_no AND ",
" d.tipo_cliente = e.tipo_cliente AND ",
" d.sec_cliente = e.sec_cliente) AND ",
" ( d.tipo_cliente = h.tipo_cliente) AND ",
# " a.estado_despacho not in ('DESPACHADA') AND ",
" x.usuario ='",usuarios CLIPPED,"' AND ",
" (x.sec_vend = a.sec_vend ) AND ",
" h.ventas = g.ventas and ",criterio CLIPPED," AND ",
" a.status_t is null ",
" GROUP BY a.estado,RTRIM(CAST(a.sec_vend AS CHAR))+' '+RTRIM(b.nom1_emp)+' '+b.apell1_emp, ",
" a.num_req,c.cotizacion_no,g.descripcion, ",
" CAST(e.tipo_cliente AS CHAR(2))+'-'+CAST(e.sec_cliente AS CHAR(6))+' '+RTRIM(e.nombre) ",
" ,d.total_neto,a.fecha,a.sec_vend,c.num_oc, ",
" a.estado_despacho,d.tipo_cliente,d.sec_cliente,d.cotizacion_no ",
" ORDER BY a.fecha"
PREPARE comando FROM selec
DECLARE busca_requisi CURSOR FOR comando
LET idx = 1
FOREACH busca_requisi INTO arr_autoriza[idx].*
LET valor_avances = 0
LET valor_s_avances = 0
# SUMA LOS AVANCES
SELECT SUM(a.valor+a.monto_desc) INTO valor_avances
FROM cctb00001 a
WHERE a.fecha_orig <= today AND
a.tipo_cliente = arr_autoriza[idx].tipo_cliente AND
a.sec_cliente = arr_autoriza[idx].sec_cliente AND
a.tipo_doc IN ("AV") AND a.num_doc = a.aplica_a AND a.status_t IS NULL
IF valor_avances IS NULL THEN
LET valor_avances = 0
END IF
# SUMA SIN AVANCES
SELECT SUM(a.valor+a.monto_desc) INTO valor_s_avances
FROM cctb00001 a
WHERE a.fecha_orig <= today AND
a.tipo_cliente = arr_autoriza[idx].tipo_cliente AND
a.sec_cliente = arr_autoriza[idx].sec_cliente AND
a.tipo_doc NOT IN ("AV","AP") AND a.status_t IS NULL
IF valor_s_avances IS NULL THEN
LET valor_s_avances = 0
END IF
CALL pendiente_ordenes(arr_autoriza[idx].tipo_cliente,arr_autoriza[idx].sec_cliente) RETURNING pbalance
LET arr_autoriza[idx].balance = valor_s_avances - valor_avances
LET arr_autoriza[idx].balance_restante = pbalance #+ arr_autoriza[idx].balance
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
CALL fgl_winmessage("ERROR","NO EXISTEN REQUISICIONES CON ESA CONDICION ","STOP")
RETURN
END IF
END FUNCTION
FUNCTION visualiza_log(xnumreq,xtipocliente,xseccliente)
DEFINE xnumreq INT,
arr_trx DYNAMIC ARRAY OF RECORD
fecha VARCHAR(40),
usuario VARCHAR(50),
estado VARCHAR(250),
num_req INT,
limite_cr DEC(12,2),
monto_cotizacion DEC(12,2),
num_recibo INT,
tipo_Doc VARCHAR(2),
cotizacion_no INT,
monto_avance,
balance DEC(12,2)
END RECORD,
l SMALLINT,
xtipocliente,xseccliente INT
OPEN WINDOW w2 WITH FORM "ccfmwd010"
DECLARE busca_log CURSOR FOR
SELECT a.fecha,a.us_crea,a.descrip_estado,a.num_req,a.limite_cr,a.monto_cotizacion,a.num_recibo,a.tipo_Doc,a.cotizacion_no,a.monto_avance,a.balance
FROM cctb00031 a
WHERE a.num_req = xnumreq AND
a.tipo_cliente = xtipocliente AND
a.sec_cliente = xseccliente
ORDER BY a.fecha
LET l=1
FOREACH busca_log INTO arr_trx[l].*
LET l=l+1
END FOREACH
DISPLAY ARRAY arr_trx TO record1.*
CLOSE WINDOW w2
END FUNCTION