345 lines
14 KiB
Plaintext
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 |