1363 lines
56 KiB
Plaintext
1363 lines
56 KiB
Plaintext
{
|
|
-----------------------------------------------------------------------------
|
|
PROGRAMA : CCPRMT008
|
|
OBJETIVO : Mantenimiento Requisiciones Despacho
|
|
REALIZADO POR : JUAN SOTO
|
|
FECHA : Enero 2010
|
|
|
|
FUNCTIONES : envia_correo() Envia correo a la persona quien autoriza las ordenes
|
|
|
|
-----------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "ccprgb000.4gl"
|
|
DEFINE estado BOOLEAN,
|
|
actualiza CHAR(2),
|
|
|
|
accion CHAR(1),
|
|
idx2 SMALLINT,
|
|
resultado,total_medida_r DEC(12,5),
|
|
porc_itbis DYNAMIC ARRAY OF DEC(8,2),
|
|
rcantidad,numerotemp INT,
|
|
|
|
|
|
listarequisi DYNAMIC ARRAY OF RECORD
|
|
estado1 CHAR(20),
|
|
estado2 CHAR(20),
|
|
estado_produccion VARCHAR(20),
|
|
num_req1 INT,
|
|
fecha1 CHAR(10),
|
|
material CHAR(50),
|
|
fecha_transporte CHAR(10),
|
|
fecha_llegada CHAR(10),
|
|
num_oc1 INT,
|
|
cliente1 CHAR(40),
|
|
valor1 DEC(12,2)
|
|
END RECORD,
|
|
pcerrada CHAR(1),
|
|
xmonto DEC(12,2),
|
|
|
|
rdespiece DYNAMIC ARRAY OF RECORD
|
|
etiqueta CHAR(20),
|
|
cod_n ,
|
|
cod_grupo ,
|
|
cod_tipo ,
|
|
cod_sec SMALLINT,
|
|
lado_1 ,
|
|
lado_2 ,
|
|
lado_3 ,
|
|
cantidad ,
|
|
medida,
|
|
cantidad_r,
|
|
medida_r DEC(12,5)
|
|
END RECORD,
|
|
idx1,cuenta_despiece,pcondpago SMALLINT,
|
|
pneto DEC(12,2),
|
|
pcotizacion,xorden,xtipocliente,xseccliente INT,
|
|
pfecha_req CHAR(10)
|
|
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(4) RETURNING impresor
|
|
CALL STARTLOG("ccprmt008.txt")
|
|
CONNECT to "smarmotech" USER usuarios USING clave
|
|
|
|
INITIALIZE requisicion.* TO NULL
|
|
|
|
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
|
|
CALL ccprmt008()
|
|
END MAIN
|
|
|
|
FUNCTION ccprmt008()
|
|
OPTIONS INPUT WRAP
|
|
OPEN WINDOW w1 AT 10,5 WITH FORM "ccfmmt008"
|
|
|
|
CALL carga_lista()
|
|
LET requisicion.fecha_requisicion = TODAY
|
|
DISPLAY BY NAME requisicion.nombre_vendedor,
|
|
requisicion.sec_vend,requisicion.fecha_requisicion
|
|
MENU
|
|
ON ACTION nuevo ATTRIBUTE(TEXT="Nuevo",IMAGE="new")
|
|
LET actualiza = "NO"
|
|
LET accion = "A"
|
|
CALL arr_requisicion.clear()
|
|
|
|
CALL ccprad008()
|
|
ON ACTION buscar ATTRIBUTE(TEXT="Buscar",IMAGE="find")
|
|
LET accion = "M"
|
|
CALL ccprmf008()
|
|
ON ACTION refrescar ATTRIBUTE(TEXT="Refrescar",IMAGE="Refresh")
|
|
CALL carga_lista()
|
|
ON ACTION salir
|
|
EXIT MENU
|
|
END MENU
|
|
|
|
CLOSE WINDOW w1
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION ccprad008()
|
|
DEFINE remanente,unidadRemanente DEC(12,4),
|
|
total_cotizacion,total_requisicion DEC(12,2)
|
|
|
|
LET requisicion.fecha_requisicion = TODAY
|
|
LET requisicion.estado = 'NO AUTORIZADA'
|
|
LET requisicion.num_req = 0
|
|
|
|
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
|
|
INPUT BY NAME requisicion.busca_orden ATTRIBUTES(WITHOUT DEFAULTS)
|
|
{AFTER FIELD sec_vend
|
|
SELECT UNIQUE RTRIM(b.nom1_emp)||' '||b.apell1_emp,a.email
|
|
INTO requisicion.nombre_vendedor,vendedoremail
|
|
FROM adtb00003 b,seg0000 a
|
|
WHERE b.num_emp = requisicion.sec_vend and
|
|
b.num_Emp = a.sec_vend
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD sec_vend
|
|
END IF
|
|
DISPLAY BY NAME requisicion.nombre_vendedor}
|
|
|
|
AFTER FIELD busca_orden
|
|
LET pcerrada = null
|
|
SELECT a.sec_vend,a.cerrada,a.cond_pago
|
|
INTO requisicion.sec_vend,pcerrada,pcondpago
|
|
FROM prtb00012 a
|
|
WHERE a.num_oc = requisicion.busca_orden AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
END IF
|
|
IF pcerrada = 'S' THEN
|
|
CALL fgl_winmessage("INFO","ORDEN ESTA CERRADA","STOP")
|
|
NEXT FIELD busca_orden
|
|
END IF
|
|
SELECT RTRIM(b.nom1_emp)||' '||b.apell1_emp
|
|
INTO requisicion.nombre_vendedor
|
|
FROM adtb00003 b
|
|
WHERE b.num_emp = requisicion.sec_vend
|
|
|
|
DISPLAY BY NAME requisicion.sec_vend,requisicion.nombre_vendedor
|
|
# IF pcondpago = 4 THEN
|
|
# CALL fgl_winmessage("INFO","ESTA ORDEN ES AL CONTADO, NO PUEDES HACER REQUISICION","INFO")
|
|
# NEXT FIELD busca_orden
|
|
# END IF
|
|
# ESTE CONSTRUCT SE COLOCO EN COMENTARIO PORQUE EL DIRECTOR DE VENTAS
|
|
# INFORMO QUE EN LA PRIMERA VERSION, EL VENDEDOR DEBE SABER QUE ORDEN
|
|
# VA A REQUERIR.
|
|
# CONSTRUCT criterio ON a.num_oc,a.fecha_oc,a.cotizacion_no
|
|
# FROM busca_orden,busca_fecha,busca_cotizacion
|
|
|
|
# BEFORE CONSTRUCT
|
|
# CALL DIALOG.setactionactive("procesa",0)
|
|
# CALL arr_requisicion.clear()
|
|
|
|
# ON ACTION busca_parametros
|
|
|
|
LET selec3 =
|
|
"SELECT 'N',a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre,SUM(b.cantidad),SUM(h.cantidad_1), ",
|
|
" b.area,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med, ",
|
|
" SUM(h.cantidad_1),SUM(b.cantidad),'0','0','0','0','0',h.id_kit,g.porc_itbi ",
|
|
"FROM prtb00012 a,vetb00004 c,prtb00013 b,iptb00002 d, ",
|
|
" vetb00050 g,prtb00023 h ",
|
|
"WHERE a.num_oc =",requisicion.busca_orden," AND ",
|
|
# " a.sec_vend = g.sec_vend AND ",
|
|
" a.tipo_cliente = c.tipo_cliente AND ",
|
|
" a.sec_cliente = c.sec_cliente AND ",
|
|
" a.num_oc = b.num_oc and ",
|
|
" a.num_oc = h.num_oc AND",
|
|
" b.cod_n = d.cod_n and ",
|
|
" b.cod_grupo = d.cod_grupo and ",
|
|
" b.cod_tipo = d.cod_tipo and ",
|
|
" b.cod_Sec = d.cod_Sec and ",
|
|
" b.secuencia = h.secuencia AND ",
|
|
" b.cod_n = h.cod_n and ",
|
|
" b.cod_grupo = h.cod_grupo and ",
|
|
" b.cod_tipo = h.cod_tipo and ",
|
|
" b.cod_Sec = h.cod_Sec and ",
|
|
" a.cotizacion_no = g.cotizacion_no AND ",
|
|
" a.cerrada = 'N' and a.status_t IS NULL ",
|
|
" GROUP BY a.fecha_oc,a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre, ",
|
|
" b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med,g.porc_itbi,b.area,h.id_kit "
|
|
|
|
{ " UNION ",
|
|
"SELECT 'N',a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre,b.cantidad,b.cantidad, ",
|
|
" b.area,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med, ",
|
|
" b.cantidad,b.cantidad,'0','0','0','0','0',b.id_kit,g.porc_itbi ",
|
|
"FROM prtb00012 a,vetb00004 c,prtb00031 b,iptb00002 d, ",
|
|
" vetb00050 g ",
|
|
"WHERE a.num_oc =",requisicion.busca_orden," AND ",
|
|
" a.sec_vend = g.sec_vend AND ",
|
|
" a.tipo_cliente = c.tipo_cliente AND ",
|
|
" a.sec_cliente = c.sec_cliente AND ",
|
|
" a.num_oc = b.num_oc and ",
|
|
" b.cod_n = d.cod_n and ",
|
|
" b.cod_grupo = d.cod_grupo and ",
|
|
" b.cod_tipo = d.cod_tipo and ",
|
|
" b.cod_Sec = d.cod_Sec and ",
|
|
" a.cotizacion_no = g.cotizacion_no AND ",
|
|
" a.cerrada = 'N' and a.status_t IS NULL "
|
|
|
|
}
|
|
PREPARE comando FROM selec3
|
|
DECLARE busca_orden CURSOR FOR comando
|
|
OPEN busca_orden
|
|
|
|
LET total_cotizacion = 0
|
|
LET idx = 1
|
|
LET pcotizacion = 0
|
|
FOREACH busca_orden INTO arr_requisicion[idx].*,
|
|
porc_itbis[idx]
|
|
LET arr_requisicion[idx].procesa = "NO"
|
|
|
|
|
|
# BUSCA PRECIO
|
|
LET arr_requisicion[idx].precio = 0
|
|
IF arr_requisicion[idx].kit IS NULL THEN
|
|
SELECT AVG(a.precio),AVG(a.porc_Desc)
|
|
INTO arr_requisicion[idx].precio,arr_requisicion[idx].descuento
|
|
FROM vetb00051 a
|
|
WHERE a.cotizacion_no = arr_requisicion[idx].cotizacion_no AND
|
|
a.area = arr_requisicion[idx].area AND
|
|
a.cod_n = arr_requisicion[idx].cod_n AND
|
|
a.cod_grupo = arr_requisicion[idx].cod_grupo AND
|
|
a.cod_tipo = arr_requisicion[idx].cod_tipo AND
|
|
a.cod_Sec = arr_requisicion[idx].cod_sec
|
|
ELSE
|
|
SELECT AVG(a.precio),AVG(a.porc_Desc)
|
|
INTO arr_requisicion[idx].precio,arr_requisicion[idx].descuento
|
|
FROM vetb00031 a
|
|
WHERE a.cotizacion_no = arr_requisicion[idx].cotizacion_no AND
|
|
a.area = arr_requisicion[idx].area AND
|
|
a.cod_n = arr_requisicion[idx].cod_n AND
|
|
a.cod_grupo = arr_requisicion[idx].cod_grupo AND
|
|
a.cod_tipo = arr_requisicion[idx].cod_tipo AND
|
|
a.cod_Sec = arr_requisicion[idx].cod_sec AND
|
|
a.id_kit = arr_requisicion[idx].kit
|
|
|
|
END IF
|
|
IF arr_requisicion[idx].precio IS NULL THEN
|
|
LET arr_requisicion[idx].precio = 0
|
|
END IF
|
|
LET pcotizacion = arr_requisicion[idx].cotizacion_no
|
|
LET arr_requisicion[idx].valor = arr_requisicion[idx].cantidad_ord *
|
|
arr_requisicion[idx].precio
|
|
LET arr_requisicion[idx].descvalor =
|
|
(arr_requisicion[idx].cantidad_ord *
|
|
arr_requisicion[idx].precio) *
|
|
(arr_requisicion[idx].descuento/100)
|
|
|
|
LET arr_requisicion[idx].valor = arr_requisicion[idx].valor -
|
|
arr_requisicion[idx].descvalor
|
|
|
|
LET arr_requisicion[idx].valor = (arr_requisicion[idx].valor *
|
|
(porc_itbis[idx] /100)) +
|
|
arr_requisicion[idx].valor
|
|
|
|
|
|
CALL controles(requisicion.num_req,arr_requisicion[idx].area, arr_requisicion[idx].cod_n,
|
|
arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo,
|
|
arr_requisicion[idx].cod_sec,arr_requisicion[idx].num_oc,0,arr_requisicion[idx].cantidad_ord)
|
|
RETURNING estado,arr_requisicion[idx].cantidad,arr_requisicion[idx].cantidad_1
|
|
|
|
LET total_cotizacion = total_cotizacion + arr_requisicion[idx].valor
|
|
|
|
IF arr_requisicion[idx].cantidad IS NULL THEN
|
|
LET arr_requisicion[idx].cantidad_1 = arr_requisicion[idx].cantidad_ord1
|
|
LET arr_requisicion[idx].cantidad = arr_requisicion[idx].cantidad_ord
|
|
LET arr_requisicion[idx].cantidad_pendiente = 0
|
|
ELSE
|
|
|
|
DISPLAY "CALCULO: CODIGO: ", arr_requisicion[idx].cod_sec," ORDEN:",arr_requisicion[idx].cantidad_ord1," CANTIDAD1: ",arr_requisicion[idx].cantidad_1
|
|
LET arr_requisicion[idx].cantidad_1 = arr_requisicion[idx].cantidad_ord1 -
|
|
arr_requisicion[idx].cantidad_1
|
|
|
|
CALL factor_conv(arr_requisicion[idx].cod_n,
|
|
arr_requisicion[idx].cod_grupo,
|
|
arr_requisicion[idx].cod_tipo,
|
|
arr_requisicion[idx].cod_sec,
|
|
arr_requisicion[idx].cantidad_1)
|
|
RETURNING resultado,estado
|
|
|
|
LET arr_requisicion[idx].cantidad_pendiente = arr_requisicion[idx].cantidad_1
|
|
DISPLAY "pendiente: ",arr_requisicion[idx].cantidad_pendiente
|
|
CALL factor_conv(arr_requisicion[idx].cod_n,
|
|
arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo,
|
|
arr_requisicion[idx].cod_sec,arr_requisicion[idx].cantidad_1)
|
|
RETURNING resultado,estado
|
|
IF resultado > 0 THEN
|
|
LET arr_requisicion[idx].cantidad = resultado
|
|
ELSE
|
|
LET arr_requisicion[idx].cantidad = arr_requisicion[idx].cantidad_1
|
|
END IF
|
|
|
|
IF arr_requisicion[idx].cantidad_1 <=0 THEN
|
|
DISPLAY "SE DEVUELVE: ",arr_requisicion[idx].cod_sec," cantidad: ",arr_requisicion[idx].cantidad_1
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
LET estado = FALSE
|
|
IF idx = 1 THEN
|
|
CALL fgl_winmessage("ERROR","NO EXISTEN ORDENES CON ESA CONDICION","STOP")
|
|
CALL arr_requisicion.clear()
|
|
EXIT DIALOG
|
|
END IF
|
|
DISPLAY BY NAME total_cotizacion
|
|
CALL set_count(idx-1)
|
|
# AFTER CONSTRUCT
|
|
# CALL input_data()
|
|
AFTER INPUT
|
|
SELECT UNIQUE RTRIM(b.nom1_emp)||' '||b.apell1_emp,a.email
|
|
INTO requisicion.nombre_vendedor,vendedoremail
|
|
FROM adtb00003 b,seg0000 a
|
|
WHERE b.num_emp = requisicion.sec_vend and
|
|
b.num_Emp = a.sec_vend
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD busca_orden
|
|
END IF
|
|
DISPLAY BY NAME requisicion.nombre_vendedor
|
|
|
|
END INPUT
|
|
|
|
|
|
INPUT ARRAY arr_requisicion FROM s_requisi.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
|
|
ON ACTION desseleccion
|
|
|
|
FOR idx2 = 1 TO idx
|
|
IF arr_requisicion[idx2].num_oc IS NOT NULL THEN
|
|
LET arr_requisicion[idx2].procesa = "NO"
|
|
|
|
DISPLAY arr_requisicion[idx2].procesa TO s_requisi[scr_l].procesa
|
|
END IF
|
|
END FOR
|
|
|
|
|
|
ON ACTION seleccion
|
|
|
|
FOR idx2 = 1 TO arr_requisicion.getLength()
|
|
IF arr_requisicion[idx2].num_oc IS NOT NULL THEN
|
|
LET arr_requisicion[idx2].procesa = "SI"
|
|
LET scr_l = scr_line()
|
|
DISPLAY arr_requisicion[idx2].procesa TO s_requisi[idx2].procesa
|
|
END IF
|
|
END FOR
|
|
|
|
BEFORE INPUT
|
|
CALL DIALOG.setactionactive("procesa",1)
|
|
CALL DIALOG.setactionactive("insert",FALSE)
|
|
CALL DIALOG.setactionactive("delete",FALSE)
|
|
CALL DIALOG.setactionactive("append",FALSE)
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
|
|
AFTER FIELD cantidad_1
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF arr_requisicion[curr].cantidad_1 > 0 AND arr_requisicion[curr].procesa = "SI" THEN
|
|
LET arr_requisicion[curr].valor = 0
|
|
CALL factor_conv(arr_requisicion[curr].cod_n,
|
|
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
|
|
arr_requisicion[curr].cod_sec,arr_requisicion[curr].cantidad_1)
|
|
RETURNING resultado,estado
|
|
|
|
IF estado = FALSE THEN
|
|
CALL fgl_winmessage("ERROR","PROBLEMA EN EL FACTOR DE CONVERSION, CONTACTE ADM INVENTARIO","STOP")
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
|
|
LET arr_requisicion[curr].cantidad = resultado
|
|
DISPLAY arr_requisicion[curr].cantidad TO s_requisi[scr_l].cantidad
|
|
IF arr_requisicion[curr].cantidad_1 > arr_requisicion[curr].cantidad_ord1 THEN
|
|
CALL fgl_Winmessage("ERROR","CANTIDAD EXECEDE CANTIDAD ORDEN","STOP")
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
CALL controles(requisicion.num_req,arr_requisicion[curr].area,arr_requisicion[curr].cod_n,
|
|
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
|
|
arr_requisicion[curr].cod_sec,arr_requisicion[curr].num_oc,arr_requisicion[curr].cantidad,
|
|
arr_requisicion[curr].cantidad_ord)
|
|
RETURNING estado,remanente,unidadRemanente
|
|
|
|
IF NOT estado THEN
|
|
CALL fgl_winmessage("ERROR","NO PUEDE HACER MAS REQUISICION A ESTA ORDEN","STOP")
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
|
|
# CALL control_despiece(arr_requisicion[curr].area,arr_requisicion[curr].cod_n,arr_requisicion[curr].cod_grupo,
|
|
# arr_requisicion[curr].cod_tipo,arr_requisicion[curr].cod_sec,
|
|
# arr_requisicion[curr].num_oc ,arr_requisicion[curr].cantidad,accion) RETURNING estado
|
|
|
|
# IF estado = FALSE THEN
|
|
# CALL fgl_winmessage("ERROR","NO PUEDE ADICIONAR REQUISICION, EXISTE UN ITEM QUE DEBE DESPIEZAR o LA CANTIDAD DIFIERE DE LA CANTIDAD EN LA REQUISICION","STOP")
|
|
# NEXT FIELD cantidad_1
|
|
# END IF
|
|
# call fgl_winmessage("w",rcantidad||' '||arr_requisicion[idx].num_oc||' '||
|
|
# arr_requisicion[idx].procesa||' '||
|
|
# arr_requisicion[idx].cod_sec|| ' '||idx,"stop")
|
|
|
|
LET arr_requisicion[curr].descvalor =(arr_requisicion[curr].cantidad *
|
|
arr_requisicion[curr].precio) *
|
|
(arr_requisicion[curr].descuento/100)
|
|
|
|
LET arr_requisicion[curr].valor = (arr_requisicion[curr].cantidad *
|
|
arr_requisicion[curr].precio) -
|
|
arr_requisicion[curr].descvalor
|
|
|
|
LET arr_requisicion[curr].valor = arr_requisicion[curr].valor +
|
|
(arr_requisicion[curr].valor * (porc_itbis[curr]/100))
|
|
IF arr_requisicion[curr].valor < 0 THEN
|
|
LET arr_requisicion[curr].valor =arr_requisicion[curr].cantidad *
|
|
arr_requisicion[curr].precio
|
|
END IF
|
|
DISPLAY arr_requisicion[curr].valor TO s_requisi[scr_l].valor
|
|
|
|
END IF
|
|
AFTER INPUT
|
|
LET total_requisicion = 0
|
|
FOR idx = 1 TO arr_count()
|
|
# CALL control_despiece(arr_requisicion[idx].area,arr_requisicion[idx].cod_n,arr_requisicion[idx].cod_grupo,
|
|
# arr_requisicion[idx].cod_tipo,arr_requisicion[idx].cod_sec,
|
|
# arr_requisicion[idx].num_oc ,arr_requisicion[idx].cantidad,accion) RETURNING estado
|
|
|
|
# IF estado = FALSE THEN
|
|
# CALL fgl_winmessage("ERROR","NO PUEDE ADICIONAR REQUISICION, EXISTE UN ITEM QUE DEBE DESPIEZAR o LA CANTIDAD DIFIERE DE LA CANTIDAD EN LA REQUISICION","STOP")
|
|
# NEXT FIELD cantidad_1
|
|
# END IF
|
|
|
|
LET total_Requisicion = total_requisicion + arr_requisicion[curr].valor
|
|
# call fgl_winmessage("w",rcantidad||' '||arr_requisicion[idx].num_oc||' '||
|
|
# arr_requisicion[idx].procesa||' '||
|
|
# arr_requisicion[idx].cod_sec|| ' '||idx,"stop")
|
|
|
|
END FOR
|
|
DISPLAY BY NAME total_requisicion
|
|
END INPUT
|
|
|
|
ON ACTION procesa
|
|
LET rcantidad = arr_requisicion.getLength()
|
|
IF rcantidad > 0 THEN
|
|
CALL req_insert() RETURNING estado
|
|
IF estado THEN
|
|
|
|
DECLARE busca_emails CURSOR FOR
|
|
SELECT a.correo FROM seg0003 a
|
|
WHERE a.autorizacionDespacho = 'SI'
|
|
LET idx = 1
|
|
FOREACH busca_emails INTO copiacorreo[idx]
|
|
LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx] CLIPPED
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
IF idx=1 THEN
|
|
LET copiaemail='jsoto@marmotech.com.do'
|
|
END IF
|
|
CALL fgl_winmessage("MENSAJE","ADICION EXITOSA","STOP")
|
|
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
|
|
# CALL envia_correo(vendedorEmail,copiaemail,cuerpo_correo,
|
|
# subject, procedimiento )
|
|
SELECT a.cond_pago,a.total_neto INTO pcondpago,pneto
|
|
FROM vetb00050 a
|
|
WHERE a.cotizacion_no = arr_requisicion[1].cotizacion_no
|
|
|
|
CALL evaluaclientes(arr_requisicion[1].tipo_cliente,
|
|
arr_requisicion[1].sec_cliente,pcondpago,requisicion.num_req,
|
|
arr_requisicion[1].num_oc,
|
|
requisicion.sec_vend,'RQ',xmonto) RETURNING estado
|
|
|
|
IF estado THEN
|
|
UPDATE cctb00025 set estado = 'AUTORIZADA',
|
|
sec_vend_aprobado = requisicion.sec_vend,
|
|
fecha_autorizacion = GETDATE()
|
|
where num_req = requisicion.num_req
|
|
UPDATE cctb00026 set estado = 'AUTORIZADA',
|
|
us_mod = 'MBS',
|
|
fech_mod = GETDATE()
|
|
where num_req = requisicion.num_req
|
|
|
|
END IF
|
|
CALL entraMensaje(requisicion.num_req, pcotizacion,"A",usuarios)
|
|
CLEAR FORM
|
|
CALL arr_requisicion.clear()
|
|
RETURN
|
|
|
|
END IF
|
|
END IF
|
|
ON ACTION refrescar
|
|
CALL carga_lista()
|
|
|
|
ON ACTION CANCEL
|
|
CALL arr_requisicion.clear()
|
|
CALL msg(2)
|
|
DELETE FROM cctb00027 WHERE Num_req = numerotemp
|
|
EXIT DIALOG
|
|
|
|
END DIALOG
|
|
END FUNCTION
|
|
|
|
FUNCTION req_insert()
|
|
DEFINE ultimo,numeroOrden INT
|
|
|
|
# WHENEVER ERROR CONTINUE
|
|
SELECT a.num_req INTO ultimo FROM cctb00019 a
|
|
|
|
IF ultimo IS NULL THEN
|
|
LET ultimo = 0
|
|
END IF
|
|
LET ultimo = ultimo + 1
|
|
LET requisicion.num_req = ultimo
|
|
|
|
UPDATE cctb00019 SET num_req = requisicion.num_req,us_crea=usuarios,fech_crea=getdate()
|
|
|
|
# GUARDA MASTER TABLE
|
|
# PREPARE s FROM "SELECT @@IDENTITY"
|
|
BEGIN WORK
|
|
# EXECUTE s INTO requisicion.num_req
|
|
|
|
DISPLAY BY NAME requisicion.num_req
|
|
|
|
LET subject = "AVISO REQUISICION DESPACHO NO. ",requisicion.num_req USING "&&&&&&"," VALOR: "
|
|
LET cuerpo_correo = "VENDEDOR : ",requisicion.nombre_vendedor CLIPPED
|
|
LET cuerpo_correo = " ",cuerpo_correo CLIPPED," FECHA REQUISICION : ",requisicion.fecha_requisicion USING "DD/MM/YYYY"
|
|
LET cuerpo_correo = " ",cuerpo_correo CLIPPED," NUMERO DE ORDEN: ",requisicion.busca_orden USING "&&&&&&"
|
|
LET selec =
|
|
"INSERT INTO cctb00034 (id_kit,num_req,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad)",
|
|
"SELECT a.id_kit,'",requisicion.num_req USING "<<<<<<","',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ",
|
|
"FROM prtb00030 a ",
|
|
" WHERE a.id_kit = ? AND ",
|
|
" a.num_oc =?"
|
|
|
|
# PREPARE xcctb34 FROM selec
|
|
|
|
LET xmonto = 0
|
|
FOR idx = 1 TO arr_requisicion.getLength()
|
|
IF arr_requisicion[idx].num_oc is not null THEN
|
|
IF arr_requisicion[idx].procesa = "SI" THEN
|
|
|
|
LET cuerpo_correo = " ",cuerpo_correo CLIPPED," CLIENTE: ",arr_requisicion[idx].nombre CLIPPED," ",
|
|
" CONTIENE EL PRODUCTO ",
|
|
arr_requisicion[idx].unidad_med," ",
|
|
arr_requisicion[idx].cantidad_1," ",
|
|
arr_requisicion[idx].cantidad USING "<<,<<<.##",
|
|
arr_requisicion[idx].descripcion CLIPPED
|
|
|
|
|
|
LET numeroOrden = arr_requisicion[idx].num_oc
|
|
|
|
|
|
# IF arr_requisicion[idx].valor = 0 OR arr_requisicion[idx].valor IS NULL THEN
|
|
IF arr_requisicion[idx].descvalor IS NULL THEN
|
|
LET arr_requisicion[idx].descvalor = 0
|
|
END IF
|
|
IF arr_requisicion[idx].descuento IS NULL THEN
|
|
LET arr_requisicion[idx].descuento = 0
|
|
END IF
|
|
|
|
LET arr_requisicion[idx].valor = ((arr_requisicion[idx].cantidad * arr_requisicion[idx].precio)-
|
|
arr_requisicion[idx].descvalor)
|
|
|
|
DISPLAY "data1 ",arr_requisicion[idx].cantidad," precio ",arr_requisicion[idx].precio,
|
|
" valor ",arr_requisicion[idx].valor,"descuento ",arr_requisicion[idx].descvalor
|
|
|
|
LET arr_requisicion[idx].valor = arr_requisicion[idx].valor +
|
|
(arr_requisicion[idx].valor * (porc_itbis[idx]/100))
|
|
|
|
DISPLAY "data2 ",arr_requisicion[idx].cantidad," precio ",arr_requisicion[idx].precio,
|
|
" valor ",arr_requisicion[idx].valor,"descuento ",arr_requisicion[idx].descvalor
|
|
|
|
|
|
# END IF
|
|
LET xmonto = xmonto + arr_requisicion[idx].valor
|
|
IF arr_requisicion[idx].cantidad IS NULL THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("INFO","CANTIDAD EN BLANCO","INFO")
|
|
RETURN FALSE
|
|
END IF
|
|
INSERT INTO cctb00026 (num_req,num_oc,cotizacion_no,id,area,cod_n,cod_grupo,cod_tipo,cod_Sec,
|
|
cantidad_ord1,cantidad_ord,cantidad_1,cantidad,precio,descuento,descvalor,valor,us_crea,fech_crea,estado,
|
|
id_kit)
|
|
|
|
VALUES (requisicion.num_req,arr_requisicion[idx].num_oc,arr_requisicion[idx].cotizacion_no,
|
|
idx,arr_requisicion[idx].area,arr_requisicion[idx].cod_n,arr_requisicion[idx].cod_grupo,
|
|
arr_requisicion[idx].cod_tipo,arr_requisicion[idx].cod_Sec,
|
|
arr_requisicion[idx].cantidad_ord1,arr_requisicion[idx].cantidad_ord,arr_requisicion[idx].cantidad_1,
|
|
arr_requisicion[idx].cantidad,
|
|
arr_requisicion[idx].precio,arr_requisicion[idx].descuento,
|
|
arr_requisicion[idx].descvalor,
|
|
arr_requisicion[idx].valor,SUSER_SNAME(),GETDATE(),requisicion.estado,arr_requisicion[idx].kit)
|
|
|
|
IF SQLSTATE > 02 THEN
|
|
LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION"
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR",chmensaje,"STOP")
|
|
RETURN FALSE
|
|
EXIT FOR
|
|
END IF
|
|
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
|
|
|
|
# INSERTA DESPIECE
|
|
FOR idx1 = 1 TO rdespiece.getLength()
|
|
IF rdespiece[idx1].medida> 0 THEN
|
|
INSERT INTO cctb00027
|
|
(num_req,etiqueta,num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
|
|
Lado_1,lado_2,lado_3,cantidad,medida,cantidad_r,medida_r,us_crea,
|
|
fech_crea)
|
|
VALUES
|
|
(requisicion.num_req,rdespiece[idx1].etiqueta,numeroOrden,idx,arr_requisicion[idx].area,
|
|
rdespiece[idx1].cod_n,
|
|
rdespiece[idx1].cod_grupo,rdespiece[idx1].cod_tipo,rdespiece[idx1].cod_sec,
|
|
rdespiece[idx1].lado_1,rdespiece[idx1].lado_2,rdespiece[idx1].lado_3,
|
|
rdespiece[idx1].cantidad,rdespiece[idx1].medida,rdespiece[idx1].cantidad_r,
|
|
rdespiece[idx1].medida_r,usuarios,GETDATE())
|
|
|
|
IF STATUS < 0 THEN
|
|
|
|
ROLLBACK WORK
|
|
CLOSE WINDOW w10
|
|
|
|
CALL fgl_winmessage("ERROR","OCURRIO UN ERROR ACTUALIZANDO LOS DATOS","STOP")
|
|
LET estado = FALSE
|
|
RETURN FALSE
|
|
ELSE
|
|
|
|
LET estado = TRUE
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
INSERT INTO cctb00025 (num_req,fecha,sec_vend,us_crea,fech_crea,estado,estado_despacho,monto_req)
|
|
VALUES (requisicion.num_req,requisicion.fecha_requisicion,
|
|
requisicion.sec_vend,SUSER_SNAME(),GETDATE(),requisicion.estado,"NO DESPACHADA",xmonto)
|
|
|
|
IF STATUS < 0 THEN
|
|
LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION"
|
|
ROLLBACK WORK
|
|
CALL fgl_Winmessage("ERROR",chmensaje,"STOP")
|
|
RETURN FALSE
|
|
END IF
|
|
IF estado THEN
|
|
COMMIT WORK
|
|
CALL entramensaje(requisicion.num_req,pcotizacion,"A",usuarios)
|
|
RETURN TRUE
|
|
ELSE
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("MENSAJE","NO SE INSERTARON DATOS EN REQUISICION","STOP")
|
|
RETURN FALSE
|
|
END IF
|
|
|
|
END FUNCTION
|
|
FUNCTION controles(pnumreq,parea,pcodn,pcodgrupo,pcodtipo,pcodsec,numero,cantidad_Trx,cantidadORD)
|
|
DEFINE unidad_ctrl,cantidad_ctrl,cantidad_trx,cantidadORD DEC(12,2),
|
|
pcodn,pcodgrupo,pcodtipo,pcodsec,parea SMALLINT,
|
|
numero,pnumreq INT,
|
|
chmesage CHAR(80)
|
|
|
|
SELECT ISNULL(SUM(a.cantidad),0) INTO cantidadord
|
|
FROM prtb00013 a
|
|
WHERE a.num_oc = numero AND
|
|
a.cod_n = pcodn AND
|
|
a.cod_grupo = pcodgrupo AND
|
|
a.cod_tipo = pcodtipo AND
|
|
a.cod_sec = pcodsec AND
|
|
a.area = parea AND
|
|
a.status_t IS NULL
|
|
|
|
# CONTROL 01 CANTIDAD REQUISICION VS CANTIDAD ORDENADA
|
|
LET cantidad_ctrl=0
|
|
LET unidad_ctrl=0
|
|
SELECT ISNULL(SUM(a.cantidad),0),ISNULL(SUM(a.cantidad_1),0) INTO cantidad_ctrl,unidad_ctrl
|
|
FROM cctb00026 a
|
|
WHERE a.num_oc = numero AND
|
|
a.cod_n = pcodn AND
|
|
a.cod_grupo = pcodgrupo AND
|
|
a.cod_tipo = pcodtipo AND
|
|
a.cod_sec = pcodsec AND
|
|
a.num_req <> pnumreq AND
|
|
a.area = parea AND
|
|
a.status_t IS NULL
|
|
|
|
IF cantidad_ctrl IS NULL THEN
|
|
LET cantidad_ctrl=0
|
|
END IF
|
|
#LET chmesage = " TRX "+cantidad_trx using "&&&&.####"," CTRL ",cantidad_ctrl USING "&&&.####"
|
|
#LET chmesage = " ORDEN "+numero USING "&&&&&&"
|
|
#LET chmesage = " codn ",pcodn using "&&&"," codgrupo ",pcodgrupo USING "&&&"," codtipo " ,pcodtipo using "&&&"," codsec ",pcodsec USING "&&&"
|
|
# CALL FGL_WINMESSAGE("W",cantidad_ctrl,"STOP")
|
|
# DISPLAY "cantidad ctrl ",cantidad_ctrl, "cantidad_trx,",cantidad_trx,
|
|
#"cantidadORD ",cantidadord," cod ",pcodsec
|
|
IF cantidad_trx IS NULL THEN
|
|
LET cantidad_Trx = 0
|
|
END IF
|
|
DISPLAY "control: ",cantidad_ctrl," cantidad trx: ",cantidad_trx," orden: ",cantidadOrd
|
|
IF cantidad_ctrl +cantidad_Trx > cantidadORD THEN
|
|
DISPLAY "resultado: ",cantidad_ctrl +cantidad_Trx," orden ",cantidadORD
|
|
RETURN FALSE,cantidad_ctrl,unidad_ctrl
|
|
ELSE
|
|
RETURN TRUE, cantidad_ctrl,unidad_ctrl
|
|
END IF
|
|
|
|
END FUNCTION
|
|
FUNCTION busca_info()
|
|
|
|
DISPLAY pfecha_req TO fecha_requisicion
|
|
DISPLAY requisicion.num_req,
|
|
requisicion.sec_vend_a,requisicion.nombre_a,
|
|
requisicion.nombre_vendedor,requisicion.sec_vend,
|
|
requisicion.estado
|
|
TO num_req,sec_vend_a,nombre_a,nombre_vendedor,sec_vend,estado
|
|
CALL arr_requisicion.clear()
|
|
DECLARE busca_req2 CURSOR FOR
|
|
SELECT a.num_oc,CAST(b.fecha_oc AS CHAR(10)),a.cotizacion_no,
|
|
a.cantidad_1,a.cantidad,a.cantidad_ord1,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
|
b.tipo_cliente,b.sec_cliente,c.nombre,a.cantidad_ord,a.precio,
|
|
a.descuento,a.descvalor,a.valor,d.descrip_esp,a.estado,a.id_kit
|
|
FROM cctb00026 a,prtb00012 b,vetb00004 c,iptb00002 d
|
|
WHERE a.num_req = requisicion.num_req and
|
|
a.num_oc = b.num_oc AND
|
|
b.tipo_cliente = c.tipo_cliente AND
|
|
b.sec_cliente = c.sec_cliente AND
|
|
a.cod_n = d.cod_n AND
|
|
a.cod_grupo = d.cod_grupo AND
|
|
a.cod_tipo = d.cod_tipo AND
|
|
a.cod_Sec = d.cod_sec
|
|
|
|
LET idx = 1
|
|
FOREACH busca_req2 INTO arr_requisicion[idx].num_oc,arr_requisicion[idx].fecha,
|
|
arr_requisicion[idx].cotizacion_no,arr_requisicion[idx].cantidad_1,
|
|
arr_requisicion[idx].cantidad,arr_requisicion[idx].cantidad_ord1,
|
|
arr_requisicion[idx].area,
|
|
arr_requisicion[idx].cod_n,
|
|
arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo,
|
|
arr_requisicion[idx].cod_Sec,arr_requisicion[idx].tipo_cliente,
|
|
arr_requisicion[idx].sec_cliente,arr_requisicion[idx].nombre,
|
|
arr_requisicion[idx].cantidad_ord,
|
|
arr_requisicion[idx].precio,arr_requisicion[idx].descuento,
|
|
arr_requisicion[idx].descvalor,arr_requisicion[idx].valor,
|
|
arr_requisicion[idx].descripcion,arr_requisicion[idx].procesa,
|
|
arr_requisicion[idx].kit
|
|
LET pcotizacion = arr_requisicion[idx].cotizacion_no
|
|
LET arr_requisicion[idx].cantidad_pendiente = arr_requisicion[idx].cantidad_ord - arr_requisicion[idx].cantidad
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx-1)
|
|
DISPLAY ARRAY arr_requisicion TO s_requisi.*
|
|
|
|
END FUNCTION
|
|
#FUNCTION envia_correo()
|
|
# IF vendedorEmail IS NULL THEN
|
|
# LET vendedorEmail = 'jsoto@marmotech.com.do'
|
|
# END IF
|
|
# LET vendedorEmail = vendedorEmail CLIPPED,'rantonio@marmotech.com.do'
|
|
|
|
# PREPARE smt FROM "{ call cc_avisadespacho(?,?,?) }"
|
|
# EXECUTE smt USING cuerpo_correo IN,subject IN,vendedorEmail IN
|
|
|
|
#END FUNCTION
|
|
|
|
FUNCTION control_despiece(parea,pcodn,pcodgrupo,pcodtipo,pcodsec,numero_ord,pcantidad,accion)
|
|
DEFINE pestado BOOLEAN,
|
|
total_medida DEC(12,5),
|
|
punidad CHAR(3),accion CHAR(1),
|
|
pdescripcion CHAR(60),
|
|
numero_ord,numero_req INT,
|
|
parea,pcodn,pcodgrupo,pcodtipo,pcodsec SMALLINT,
|
|
medidactrl,pcantidad DEC(12,5)
|
|
|
|
CALL rdespiece.clear()
|
|
# BUSCA SI EL ARTICULO SE DESPIEZA
|
|
|
|
SELECT UNIQUE b.unidad_med,b.descrip_esp
|
|
INTO punidad,pdescripcion
|
|
FROM iptb00027 a,iptb00002 b
|
|
WHERE a.cod_n = pcodn AND
|
|
a.cod_grupo = pcodgrupo AND
|
|
a.cod_tipo = pcodtipo AND
|
|
a.cod_Sec = pcodsec AND
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_Sec = b.cod_sec
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET estado=TRUE
|
|
RETURN estado
|
|
END IF
|
|
|
|
IF accion = "A" THEN
|
|
|
|
# SELECT a.num_temp_req INTO numero_req FROM cctb00028 a
|
|
# IF numero_req IS NULL THEN
|
|
LET numero_req = 1000
|
|
# INSERT INTO cctb00028 (num_temp_req) VALUES (numero_req) SE COLOCO ESTAS INSTRUCCIONES EN COMENTARIO PORQUE SE CREO UNA TABLA TEMPORAL cctb00030
|
|
# END IF
|
|
# LET numero_req = numero_req + 1
|
|
# UPDATE cctb00028 set num_temp_req = numero_req
|
|
|
|
|
|
DECLARE busca_despiece CURSOR FOR
|
|
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
|
a.lado_1,a.lado_2,a.lado_3,
|
|
SUM(a.cantidad),SUM(a.medida),SUM(b.cantidad),SUM(b.medida)
|
|
FROM prtb00022 a LEFT OUTER JOIN cctb00030 b ON
|
|
a.num_oc = b.num_oc AND
|
|
a.area = b.area AND
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_sec AND
|
|
a.lado_1 = b.lado_1 AND
|
|
a.lado_2 = b.lado_2 AND
|
|
a.lado_3 = b.lado_3 AND
|
|
b.us_crea = usuarios AND
|
|
a.etiqueta = b.etiqueta
|
|
WHERE
|
|
a.num_oc = numero_ord AND
|
|
a.area = parea AND
|
|
a.cod_n = pcodn AND
|
|
a.cod_grupo = pcodgrupo AND
|
|
a.cod_tipo = pcodtipo AND
|
|
a.cod_sec = pcodsec
|
|
GROUP BY a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
|
a.lado_1,a.lado_2,a.lado_3
|
|
LET idx1 = 1
|
|
FOREACH busca_despiece INTO rdespiece[idx1].*
|
|
LET rdespiece[idx1].cantidad_r = rdespiece[idx1].cantidad
|
|
LET rdespiece[idx1].medida_r = rdespiece[idx1].medida
|
|
LET idx1 = idx1 + 1
|
|
END FOREACH
|
|
|
|
ELSE
|
|
# call fgl_winmessage("w",numero_Req,"stop")
|
|
DECLARE busca_despiece1 CURSOR FOR
|
|
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
|
a.lado_1,a.lado_2,a.lado_3,
|
|
SUM(a.cantidad),SUM(a.medida),SUM(a.cantidad),SUM(a.medida)
|
|
FROM cctb00027 a
|
|
WHERE
|
|
a.num_oc = numero_ord AND
|
|
a.area = parea AND
|
|
a.cod_n = pcodn AND
|
|
a.cod_grupo = pcodgrupo AND
|
|
a.cod_tipo = pcodtipo AND
|
|
a.cod_sec = pcodsec AND
|
|
a.num_req = numero_req
|
|
GROUP BY a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
|
a.lado_1,a.lado_2,a.lado_3
|
|
|
|
LET idx1 = 1
|
|
FOREACH busca_despiece1 INTO rdespiece[idx1].*
|
|
LET idx1 = idx1 + 1
|
|
END FOREACH
|
|
END IF
|
|
|
|
IF idx1 = 1 THEN
|
|
LET pestado = FALSE
|
|
RETURN pestado
|
|
ELSE
|
|
LET pestado = TRUE
|
|
END IF
|
|
|
|
OPEN WINDOW w10 AT 5,6 WITH FORM "ccfmwd004"
|
|
DISPLAY pdescripcion TO descrip_esp
|
|
DISPLAY punidad TO unidad_med
|
|
|
|
CALL set_count(idx1-1)
|
|
INPUT ARRAY rdespiece WITHOUT DEFAULTS FROM sdespiece.*
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET fila = scr_line()
|
|
|
|
AFTER FIELD cantidad_r
|
|
IF rdespiece[curr].cantidad_r IS NOT NULL THEN
|
|
LET medidactrl = 0
|
|
SELECT SUM(a.medida_r) INTO medidaCtrl
|
|
FROM cctb00027 a
|
|
WHERE a.area = parea AND
|
|
a.cod_n = rdespiece[curr].cod_n AND
|
|
a.cod_grupo =rdespiece[curr].cod_grupo AND
|
|
a.cod_tipo = rdespiece[curr].cod_tipo AND
|
|
a.cod_sec = rdespiece[curr].cod_Sec AND
|
|
a.lado_1 = rdespiece[curr].lado_1 AND
|
|
a.lado_2 = rdespiece[curr].lado_2 AND
|
|
a.num_oc = numero_ord AND a.status_t IS NULL AND
|
|
a.num_req <> numero_req
|
|
|
|
IF medidaCtrl IS NULL THEN
|
|
LET medidactrl = 0
|
|
END IF
|
|
|
|
IF punidad= "M2" THEN
|
|
LET rdespiece[curr].medida_r =
|
|
rdespiece[curr].cantidad_r * (rdespiece[curr].lado_1 * rdespiece[curr].lado_2)
|
|
END IF
|
|
|
|
IF punidad= "M3" THEN
|
|
LET rdespiece[curr].medida_r =
|
|
rdespiece[curr].cantidad_r * (rdespiece[curr].lado_1 * rdespiece[curr].lado_2 * rdespiece[curr].lado_3)
|
|
END IF
|
|
|
|
IF punidad= "ML" THEN
|
|
LET rdespiece[curr].medida_r =
|
|
rdespiece[curr].cantidad_r * rdespiece[curr].lado_1
|
|
LET rdespiece[curr].lado_2 = 0
|
|
END IF
|
|
|
|
IF punidad= "UD" OR punidad= "GL" THEN
|
|
LET rdespiece[curr].medida_r = rdespiece[curr].cantidad_r
|
|
END IF
|
|
DISPLAY rdespiece[curr].medida_r TO sdespiece[fila].medida_r
|
|
|
|
#IF medidaCtrl + rdespiece[curr].medida_r > rdespiece[curr].medida THEN
|
|
# LET pestado = FALSE
|
|
|
|
# EXIT INPUT LOCOLOQUE POR TIENE OTRO AFTER INPUT FECHA:14/10/11
|
|
|
|
|
|
# END IF
|
|
LET total_medida_r = 0
|
|
LET cuenta_despiece = arr_count()
|
|
LET total_medida = 0
|
|
FOR idx1= 1 TO cuenta_despiece
|
|
IF rdespiece[idx1].medida_r > 0 THEN
|
|
LET total_medida_r = total_medida_r + rdespiece[idx1].medida_r
|
|
END IF
|
|
IF rdespiece[idx1].medida > 0 THEN
|
|
LET total_medida = total_medida + rdespiece[idx1].medida
|
|
END IF
|
|
END FOR
|
|
DISPLAY BY NAME total_medida,total_medida_r
|
|
END IF
|
|
AFTER INPUT
|
|
IF Int_flag THEN
|
|
LET pestado = FALSE
|
|
EXIT INPUT
|
|
END IF
|
|
LET total_medida_r = 0
|
|
LET cuenta_despiece = arr_count()
|
|
FOR idx1 = 1 TO cuenta_despiece
|
|
IF rdespiece[idx1].medida_r > 0 THEN
|
|
LET total_medida_r = total_medida_r + rdespiece[idx1].medida_r
|
|
END IF
|
|
IF rdespiece[idx1].medida > 0 THEN
|
|
LET total_medida = total_medida + rdespiece[idx1].medida
|
|
END IF
|
|
END FOR
|
|
DISPLAY "T ",total_medida_r," ",pcantidad
|
|
IF total_medida_r <> pcantidad THEN
|
|
|
|
CONTINUE INPUT
|
|
END IF
|
|
|
|
DISPLAY BY NAME total_medida,total_medida_r
|
|
IF int_flag THEN
|
|
CLOSE WINDOW w10
|
|
RETURN FALSE
|
|
END IF
|
|
END INPUT
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
LET pestado = FALSE
|
|
END IF
|
|
# WHENEVER ERROR CONTINUE
|
|
BEGIN WORK
|
|
|
|
LET numerotemp = numero_req
|
|
FOR idx1 = 1 TO cuenta_despiece
|
|
IF rdespiece[idx1].cantidad_r > 0 THEN
|
|
DELETE FROM cctb00030 WHERE us_crea = usuarios and num_req = numero_req and
|
|
area = parea AND
|
|
cod_n = rdespiece[idx1].cod_n and
|
|
cod_grupo = rdespiece[idx1].cod_grupo and
|
|
cod_tipo = rdespiece[idx1].cod_tipo and
|
|
cod_Sec = rdespiece[idx1].cod_sec
|
|
LET rdespiece[idx].etiqueta=idx
|
|
INSERT INTO cctb00030
|
|
(num_req,etiqueta,num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
|
|
Lado_1,lado_2,lado_3,cantidad,medida,cantidad_r,medida_r,us_crea,
|
|
fech_crea)
|
|
VALUES
|
|
(numero_req,rdespiece[idx1].etiqueta,numero_ord,idx,parea,rdespiece[idx1].cod_n,
|
|
rdespiece[idx1].cod_grupo,rdespiece[idx1].cod_tipo,rdespiece[idx1].cod_sec,
|
|
rdespiece[idx1].lado_1,rdespiece[idx1].lado_2,rdespiece[idx1].lado_3,
|
|
rdespiece[idx1].cantidad,rdespiece[idx1].medida,rdespiece[idx1].cantidad_r,
|
|
rdespiece[idx1].medida_r,usuarios,GETDATE())
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","OCURRIO UN ERROR ACTUALIZANDO LOS DATOS","STOP")
|
|
LET pestado = FALSE
|
|
EXIT FOR
|
|
CLOSE WINDOW w10
|
|
ELSE
|
|
|
|
LET pestado = TRUE
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
IF pestado THEN
|
|
COMMIT WORK
|
|
ELSE
|
|
ROLLBACK WORK
|
|
END IF
|
|
|
|
CLOSE WINDOW w10
|
|
|
|
RETURN pestado
|
|
END FUNCTION
|
|
|
|
FUNCTION carga_lista()
|
|
DEFINE busca_vend SMALLINT,
|
|
bnombre_vend CHAR(50)
|
|
|
|
INPUT BY NAME busca_vend
|
|
AFTER FIELD busca_vend
|
|
IF busca_vend IS NOT NULL THEN
|
|
|
|
SELECT RTRIM(b.nom1_emp)||' '||b.apell1_emp
|
|
INTO bnombre_vend
|
|
FROM adtb00003 b
|
|
WHERE b.num_emp = busca_vend
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD busca_vend
|
|
END IF
|
|
DISPLAY BY NAME bnombre_vend
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF Int_flag THEN
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
END INPUT
|
|
|
|
DISPLAY ARRAY listarequisi TO s_lista.*
|
|
BEFORE DISPLAY
|
|
|
|
CALL busca_lista(busca_vend)
|
|
|
|
IF idx = 1 THEN
|
|
RETURN
|
|
END IF
|
|
ON ACTION refrescar
|
|
CALL busca_lista(busca_vend)
|
|
AFTER DISPLAY
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_lista(xvend)
|
|
DEFINE xvend SMALLINT
|
|
DECLARE busca_requi20 CURSOR FOR
|
|
SELECT a.estado,a.estado_despacho,x.estado_produccion,a.num_req,CAST(a.fecha AS CHAR(10)),
|
|
e.descrip_Esp||' '||e.unidad_med,CAST(b.fecha_transporte AS CHAR(10)),CAST(b.fecha_llegada AS CHAR(10)),
|
|
b.num_oc,c.nombre,SUM(b.valor)
|
|
FROM cctb00025 a,cctb00026 b,vetb00004 c,prtb00012 d,iptb00002 e,prtb00013 x
|
|
WHERE a.sec_vend = xvend AND
|
|
a.num_req = b.num_req AND
|
|
b.num_oc = d.num_oc AND
|
|
b.num_oc = x.num_oc AND
|
|
d.tipo_cliente = c.tipo_cliente AND
|
|
d.sec_cliente = c.sec_cliente AND
|
|
b.area = x.area AND
|
|
b.cod_n = e.cod_n AND b.cod_grupo = e.cod_grupo AND
|
|
b.cod_tipo = e.cod_tipo AND b.cod_Sec = e.cod_sec AND
|
|
b.cod_n = x.cod_n AND b.cod_grupo = x.cod_grupo AND
|
|
b.cod_tipo = x.cod_tipo AND b.cod_Sec = x.cod_Sec AND
|
|
d.cerrada = 'N' AND a.status_t IS NULL AND a.estado_despacho NOT IN ('DESPACHADA')
|
|
GROUP BY a.estado,a.estado_despacho,a.num_req,b.num_oc,c.nombre,a.fecha, e.descrip_Esp,e.unidad_med,
|
|
b.fecha_transporte,b.fecha_llegada,x.estado_produccion
|
|
ORDER BY a.estado DESC
|
|
LET idx = 1
|
|
FOREACH busca_requi20 INTO listarequisi[idx].estado1,
|
|
listarequisi[idx].estado2,
|
|
listarequisi[idx].estado_produccion,
|
|
listarequisi[idx].num_req1,
|
|
listarequisi[idx].fecha1,
|
|
listarequisi[idx].material,
|
|
listarequisi[idx].fecha_transporte,
|
|
listarequisi[idx].fecha_llegada,
|
|
listarequisi[idx].num_oc1,
|
|
listarequisi[idx].cliente1,
|
|
listarequisi[idx].valor1
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx-1)
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION factor_conv(pcodn,pcodgrupo,pcodtipo,pcodsec,pcantidad)
|
|
DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec SMALLINT,
|
|
pcantidad,pfactor,presultado DEC(12,5),
|
|
pestado BOOLEAN
|
|
|
|
LET pfactor = 0
|
|
SELECT a.factor_conv INTO pfactor
|
|
FROM iptb00001 a
|
|
WHERE a.cod_n = pcodn AND
|
|
a.cod_grupo = pcodgrupo AND
|
|
a.cod_tipo = pcodtipo AND
|
|
a.cod_sec = pcodsec AND a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET pestado = FALSE
|
|
ELSE
|
|
|
|
LET presultado = pcantidad * pfactor
|
|
|
|
LET pestado = TRUE
|
|
END IF
|
|
RETURN presultado,pestado
|
|
END FUNCTION
|
|
|
|
FUNCTION input_data()
|
|
DEFINE remanente,unidadRemanente DEC(12,4)
|
|
CALL set_count(idx-1)
|
|
|
|
INPUT ARRAY arr_requisicion WITHOUT DEFAULTS FROM s_requisi.*
|
|
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
|
|
AFTER FIELD cantidad_1
|
|
IF arr_requisicion[curr].cantidad_1 > 0 AND arr_requisicion[curr].procesa = "SI" THEN
|
|
LET arr_requisicion[curr].valor = 0
|
|
CALL factor_conv(arr_requisicion[curr].cod_n,
|
|
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
|
|
arr_requisicion[curr].cod_sec,arr_requisicion[curr].cantidad_1)
|
|
RETURNING resultado,estado
|
|
|
|
IF estado = FALSE THEN
|
|
CALL fgl_winmessage("ERROR","PROBLEMA EN EL FACTOR DE CONVERSION, CONTACTE ADM INVENTARIO","STOP")
|
|
NEXT FIELD cantidad
|
|
END IF
|
|
|
|
LET arr_requisicion[curr].cantidad = resultado
|
|
DISPLAY arr_requisicion[curr].cantidad TO s_requisi[scr_l].cantidad
|
|
IF arr_requisicion[curr].cantidad_1 > arr_requisicion[curr].cantidad_ord1 THEN
|
|
CALL fgl_Winmessage("ERROR","CANTIDAD EXECEDE CANTIDAD ORDEN","STOP")
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
CALL controles(requisicion.num_req,arr_requisicion[curr].area,arr_requisicion[curr].cod_n,
|
|
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
|
|
arr_requisicion[curr].cod_sec,arr_requisicion[curr].num_oc,arr_requisicion[curr].cantidad,
|
|
arr_requisicion[curr].cantidad_ord)
|
|
RETURNING estado,remanente,unidadRemanente
|
|
|
|
IF NOT estado THEN
|
|
CALL fgl_winmessage("ERROR","NO PUEDE HACER MAS REQUISICION A ESTA ORDEN","STOP")
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
LET arr_requisicion[curr].descvalor =(arr_requisicion[curr].cantidad *
|
|
arr_requisicion[curr].precio) *
|
|
(arr_requisicion[curr].descuento/100)
|
|
LET arr_requisicion[curr].valor = (arr_requisicion[curr].cantidad *
|
|
arr_requisicion[curr].precio) -
|
|
arr_requisicion[curr].descvalor
|
|
|
|
LET arr_requisicion[curr].valor = arr_requisicion[curr].valor +
|
|
(arr_requisicion[curr].valor * (porc_itbis[curr]/100))
|
|
|
|
IF arr_requisicion[curr].valor < 0 THEN
|
|
LET arr_requisicion[curr].valor =arr_requisicion[curr].cantidad *
|
|
arr_requisicion[curr].precio
|
|
END IF
|
|
DISPLAY arr_requisicion[curr].valor TO s_requisi[scr_l].valor
|
|
END IF
|
|
|
|
ON ACTION procesa
|
|
LET rcantidad = arr_count()
|
|
CALL req_insert() RETURNING estado
|
|
IF estado = TRUE THEN
|
|
# CALL envia_correo()
|
|
DISPLAY BY NAME requisicion.num_req
|
|
CALL fgl_winmessage("MENSAJE","ADICION EXITOSA","STOP")
|
|
CLEAR FORM
|
|
CALL arr_requisicion.clear()
|
|
RETURN
|
|
END IF
|
|
END INPUT
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION ccprmf008()
|
|
|
|
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
|
|
CONSTRUCT criterio ON a.num_req,c.num_oc,a.fecha FROM num_req,busca_orden,fecha_requisicion
|
|
ON ACTION refrescar
|
|
CALL carga_lista()
|
|
ON ACTION busca_parametros ATTRIBUTE(TEXT="Ejecuta Busqueda",IMAGE="find_all")
|
|
|
|
LET selec =
|
|
"SELECT DISTINCT a.num_req,CONVERT(CHAR(10),a.fecha,103),a.sec_vend_aprobado,",
|
|
"(SELECT RTRIM(k.nom1_emp)+' '+k.apell1_emp FROM adtb00003 k WHERE ",
|
|
"k.num_emp = a.sec_vend_aprobado) as nombre_aprobado,",
|
|
"a.sec_vend,ISNULL(RTRIM(b.nom1_emp),' ') +' '+ISNULL(b.apell1_emp,' '),a.estado ",
|
|
" FROM cctb00025 a,adtb00003 b,cctb00026 c ",
|
|
" WHERE ",criterio CLIPPED," AND a.num_req = c.num_req ",
|
|
" AND a.sec_vend = b.num_emp AND a.status_t is null ",
|
|
" ORDER BY a.num_req"
|
|
|
|
PREPARE comando2 FROM selec
|
|
DECLARE busca_req SCROLL CURSOR FOR comando2
|
|
OPEN busca_req
|
|
|
|
|
|
FETCH FIRST busca_req INTO requisicion.num_req,pfecha_req,
|
|
requisicion.sec_vend_a,requisicion.nombre_a,
|
|
requisicion.sec_vend,requisicion.nombre_vendedor,
|
|
requisicion.estado
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage("ERROR","NO EXISTEN ORDENES CON ESTE CRITERIO DE BUSQUEDA","STOP")
|
|
EXIT DIALOG
|
|
ELSE
|
|
CALL busca_info()
|
|
|
|
MENU
|
|
ON ACTION mensaje
|
|
CALL entraMensaje(requisicion.num_req,pcotizacion,"M",usuarios)
|
|
|
|
ON ACTION siguiente
|
|
FETCH NEXT busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
|
|
requisicion.sec_vend_a,requisicion.nombre_a,
|
|
requisicion.sec_vend,requisicion.nombre_vendedor,
|
|
requisicion.estado
|
|
|
|
CALL busca_info()
|
|
ON ACTION primero
|
|
FETCH FIRST busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
|
|
requisicion.sec_vend_a,requisicion.nombre_a,
|
|
requisicion.sec_vend,requisicion.nombre_vendedor,
|
|
requisicion.estado
|
|
|
|
CALL busca_info()
|
|
ON ACTION ultimo
|
|
FETCH LAST busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
|
|
requisicion.sec_vend_a,requisicion.nombre_a,
|
|
requisicion.sec_vend,requisicion.nombre_vendedor,
|
|
requisicion.estado
|
|
|
|
CALL busca_info()
|
|
CALL fgl_winmessage("MENSAJE","ULTIMO REGISTRO","STOP")
|
|
ON ACTION anterior
|
|
FETCH PREVIOUS busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
|
|
requisicion.sec_vend_a,requisicion.nombre_a,
|
|
requisicion.sec_vend,requisicion.nombre_vendedor,
|
|
requisicion.estado
|
|
|
|
CALL busca_info()
|
|
ON ACTION anular
|
|
|
|
# CONTROL REQUISICION DESPACHADA
|
|
SELECT UNIQUE a.num_req FROM iptb00006 a
|
|
WHERE a.num_req = requisicion.num_req AND a.status_t IS null
|
|
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL fgl_winmessage("ERR0R","REQUISICION TIENE DESPACHO NO PUEDE ANULAR","INFO")
|
|
CONTINUE DIALOG
|
|
END IF
|
|
LET respuesta= fgl_winquestion("ATENCION","ESTA SEGURO DE ANULAR ESTA REQUISICION?","no","yes|no","question",0)
|
|
IF respuesta = "yes" THEN
|
|
LET pcotizacion = NULL
|
|
LET xorden = NULL
|
|
LET xtipocliente=NULL
|
|
LET xseccliente = NULL
|
|
LET requisicion.estado=NULL
|
|
|
|
SELECT DISTINCT a.cotizacion_no,a.num_oc,b.tipo_cliente,b.sec_cliente,c.monto_req,c.estado
|
|
INTO pcotizacion, xorden,xtipocliente,xseccliente,xmonto,requisicion.estado
|
|
FROM cctb00026 a,prtb00012 b,cctb00025 c
|
|
WHERE a.num_req = requisicion.num_req AND a.num_req = c.num_req AND a.cotizacion_no = b.cotizacion_no AND
|
|
b.status_t IS NULL AND c.status_t IS null
|
|
BEGIN WORK
|
|
UPDATE cctb00025 SET status_t = 'E',
|
|
us_mod = suser_sname(),
|
|
fech_mod = getdate(),
|
|
estado = 'ANULADA'
|
|
WHERE num_req = requisicion.num_req
|
|
UPDATE cctb00026 SET status_t = 'E',
|
|
us_mod = suser_sname(),
|
|
fech_mod = getdate()
|
|
|
|
WHERE num_req = requisicion.num_req
|
|
UPDATE cctb00027 SET status_t = 'E',
|
|
us_mod = suser_sname(),
|
|
fech_mod = getdate()
|
|
|
|
WHERE num_req = requisicion.num_req
|
|
|
|
#INSERTA EN TABLA LOG
|
|
INSERT INTO cctb00031
|
|
(fecha,us_crea,sec_vend,nombrevendedor,tipo_cliente,sec_cliente,num_oc,descrip_estado,
|
|
num_req,tipo_doc_ref,cotizacion_no )
|
|
VALUES (getdate(),usuarios,requisicion.sec_vend,requisicion.nombre_vendedor,
|
|
xtipocliente,xseccliente,xorden,
|
|
'ESTA REQUISICION FUE ANULADA',requisicion.num_req,'RQ',pcotizacion)
|
|
COMMIT WORK
|
|
END IF
|
|
CLEAR FORM
|
|
{ ON ACTION actualizar
|
|
|
|
IF requisicion.sec_vend_a IS NULL THEN
|
|
CALL input_data()
|
|
FOR idx = 1 TO arr_count()
|
|
IF arr_requisicion[idx].cantidad > 0 THEN
|
|
IF arr_requisicion[idx].procesa = "SI" THEN
|
|
UPDATE cctb00026 SET cantidad = arr_requisicion[idx].cantidad,
|
|
us_mod = usuarios,
|
|
fech_mod = getdate()
|
|
WHERE cod_n = arr_requisicion[idx].cod_n AND
|
|
cod_n = arr_requisicion[idx].cod_n AND
|
|
cod_grupo = arr_requisicion[idx].cod_grupo AND
|
|
cod_tipo = arr_requisicion[idx].cod_tipo AND
|
|
cod_sec = arr_requisicion[idx].cod_sec AND
|
|
num_req = requisicion.num_req
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
ELSE
|
|
CALL fgl_winmessage("ERROR","NO PUEDE ACTUALIZAR REQUISICION, YA ESTA APROBADA","STOP")
|
|
END IF
|
|
}
|
|
|
|
|
|
ON ACTION sale
|
|
EXIT DIALOG
|
|
END MENU
|
|
END IF
|
|
|
|
END CONSTRUCT
|
|
|
|
ON ACTION cancel
|
|
CALL arr_requisicion.clear()
|
|
CALL msg(2)
|
|
EXIT DIALOG
|
|
|
|
END DIALOG
|
|
END FUNCTION
|
|
|