Files
MBS/PROYECTO/PRDIR/prprmt021.4gl
T

373 lines
14 KiB
Plaintext

{
PROGRAMA : PRPRMT021
TITULO : ADMINISTRACION ORDENES ECOMMERCE
OBJETIVO : VISUALIAR LAS ORDENES QUE COLOCAN LOS CLIENTES EN LA TIENDA ONLINE
DESARROLLADO POR : ING. JUAN SOTO
FECHA : 09/02/2021
}
DEFINE ordenes DYNAMIC ARRAY OF RECORD
estado_trx,
tipo_orden VARCHAR(100),
num_oc,cotizacion_no INT,
num_req INT,
estado_req,estado_despacho VARCHAR(100),
fecha DATE,
cliente ,
vendedor VARCHAR(100),
direccione STRING,
bodega int,
eorden INT,
estado ,
factura STRING,
tipo_envio STRING,
valor,valor_inv FLOAT
END RECORD ,
usuarios,clave,dnombrecliente,criterio STRING,
dbodega,destado VARCHAR(100),
idx,pnumoc,scr_l,curr,orden_externa,pfactura,pbodega,pcotizacion INT,
valor_inv FLOAT
DEFINE detalle DYNAMIC ARRAY OF RECORD
producto VARCHAR(100),
precio,cantidad1,cantidad FLOAT,
ubicacion STRING,
valor FLOAT,
empacar STRING,
pcodn,pcodgrupo,pcodtipo,pcodse INT
END RECORD,
att dynamic array of record
col1 string,
col2 string,
col3 string,
col4 string,
col5 string,
col6 string,
col7 string,
col8 string,
col9 STRING,
col10,col11,col12,col13 STRING
end record
MAIN
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
CALL prprmt021()
END MAIN
FUNCTION prprmt021()
DEFINE i INT
call ui.Interface.loadStyles("formularios")
OPEN WINDOW w1 WITH FORM "prfmmt021"
INPUT ARRAY ordenes WITHOUT DEFAULTS FROM sordenes.*
BEFORE INPUT
CALL buscainfo()
call dialog.setCellAttributes(att)
FOR i = 1 TO ordenes.getLength()
IF ordenes[i].estado_req = 'AUTORIZADA' THEN
LET att[i].col2 = 'magenta reverse'
LET att[i].col4 = 'magenta reverse'
END IF
END FOR
CALL lugarentregas()
ON ACTION entregas
CALL entregas()
ON IDLE 60
CALL buscainfo()
ON CHANGE estado_trx
LET curr = arr_curr()
LET pnumoc = ordenes[curr].num_oc
LET destado = ordenes[curr].estado_trx
CALL updateestado()
ON CHANGE bodega
LET curr = arr_curr()
LET dbodega = ui.ComboBox.forName('formonly.bodega').getTextOf(ordenes[curr].bodega)
LET pbodega = ordenes[curr].bodega
LET pnumoc = ordenes[curr].num_oc
LET pcotizacion = ordenes[curr].cotizacion_no
DISPLAY "bodega ",pbodega
CALL updateentrega()
ON ACTION mostrar ATTRIBUTE(TEXT='Mostrar')
LET curr = arr_curr()
LET pnumoc = ordenes[curr].num_oc
LET dnombrecliente = ordenes[curr].cliente
LET orden_externa = ordenes[curr].eorden
LET pfactura = ordenes[curr].factura
CALL mostrar()
AFTER INPUT
IF int_flag THEN
LET int_flag = FALSE
CALL msg(2)
EXIT INPUT
END IF
END INPUT
CLOSE WINDOW w1
END FUNCTION
FUNCTION mostrar()
DEFINE orden RECORD
fecha CHAR(10),
ordene,
orden,
nombre_fact,dir_fact,pais_fact,numrnc,nombre_envio,dir_envio,pais_envio,zona_envio,celular,
email,contacto,referencia,provincia,tipo_envio VARCHAR(100),
factura INT
END RECORD,
idx,pnum_oc,pnum_externa INT,
dencabezado,encabezadoe STRING
DEFINE arr_empaque DYNAMIC ARRAY OF RECORD
producto, unidad STRING,
cantidad,cantidad_orden FLOAT,
pcodn,pcodgrupo,pcodtipo,pcodsec INT
END RECORD
DEFINE datos RECORD
cliente,direccion,telefono,celular,email,contacto,provincia,pais,referencia,orden,orden_e STRING
END RECORD
LET int_flag = FALSE
call ui.Interface.loadStyles("formularios")
OPEN WINDOW w2 WITH FORM "prfmmt021a"
LET dencabezado = "ORDEN CLIENTE #",pnumoc USING "&&&&&&&&"," ",dnombrecliente CLIPPED
DISPLAY BY NAME dencabezado
CALL detalle.clear()
SELECT a.fecha_oc,a.orden_sustituta,a.num_oc,b.nombre,c.calle,x1.nombre,b.num_rnc,
b.nombre,c.calle,x1.nombre,x2.descrip,b.telex,b.patente,b.nombre_patente,a.ubicacion,
x3.nombre_provincia,
CASE WHEN a.nombre_file IS NULL OR a.nombre_file = '0' THEN 'LUGAR ENTREGA:'+ RTRIM(a.titulo_bodega) END
INTO orden.*
FROM prtb00012 a,vetb00004 b
LEFT OUTER JOIN vetb00017 x1 ON x1.codigo = b.codigo
LEFT OUTER JOIN vetb00020 X3 ON x3.cod_provincia = b.cod_provincia
LEFT OUTER JOIN vetb00008 x2 ON b.cod_zona =x2.cod_zona
LEFT OUTER JOIN vetb00005 c ON c.tipo_cliente = b.tipo_cliente AND c.sec_cliente = b.sec_cliente
WHERE a.num_oc =pnumoc AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND
a.status_t IS NULL AND a.cerrada = 'N'
LET orden.factura = pfactura
DISPLAY BY NAME orden.*
LET idx = 1
DECLARE buscadetalle CURSOR FOR
SELECT CAST(a.cod_n AS VARCHAR)||'-'||CAST(a.cod_grupo AS VARCHAR)||'-'||
CAST(a.cod_tipo AS VARCHAR)||'-'||CAST(a.cod_sec AS VARCHAR)||' '||
CASE WHEN RTRIM(a.descripcion) IS NULL THEN b.descrip_esp END,a.precio,c.cantidad_1,c.cantidad,'NO TIENE',a.precio*c.cantidad,'S',
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
FROM prtb00013 a INNER JOIN iptb00002 b ON 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
, prtb00023 c
WHERE a.num_oc =pnumoc AND
a.num_oc = c.num_oc AND
a.cod_n = c.cod_n AND
a.cod_grupo = c.cod_grupo AND
a.cod_tipo = c.cod_tipo AND
a.cod_Sec = c.cod_Sec
FOREACH buscadetalle INTO detalle[idx].*
LET idx = idx + 1
END FOREACH
LET pnum_oc = pnumoc
LET pnum_externa = orden_externa
LET encabezadoe = "EMPACANDO LA ORDEN ",pnumoc USING "&&&&&&&&"," DEL CLIENTE ",dnombrecliente CLIPPED,
" ORDEN ECOMMERCE ",orden_externa USING "&&&&&&&"
INPUT ARRAY detalle FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS)
ON ACTION impresion ATTRIBUTE(TEXT="Orden",IMAGE="printer")
CALL impresion(pnum_oc)
ON ACTION etiqueta ATTRIBUTE(TEXT="Label",IMAGE="fa-tag")
LET datos.celular = orden.celular
LET datos.cliente = orden.nombre_envio
LET datos.direccion = orden.dir_envio
LET datos.email = orden.email
LET datos.orden = pnumoc
LET datos.contacto = orden.contacto
LET datos.referencia = orden.referencia
LET datos.pais = orden.pais_envio
LET datos.provincia = orden.provincia
LET datos.telefono = orden.celular
LET datos.orden_e = orden_externa USING "&&&&&&&"
CALL etiquetas_e(datos.*)
ON CHANGE empacar
LET detalle[arr_curr()].empacar = detalle[arr_curr()].empacar
DISPLAY "ON ",detalle[arr_curr()].empacar
ON ACTION empacar
FOR idx = 1 TO detalle.getLength()
DISPLAY "EM ",detalle[idx].empacar
IF detalle[idx].empacar = 'S' THEN
LET arr_empaque[idx].producto = detalle[idx].producto
LET arr_empaque[idx].cantidad = detalle[idx].cantidad
LET arr_empaque[idx].pcodgrupo = detalle[idx].pcodgrupo
LET arr_empaque[idx].pcodn = detalle[idx].pcodn
LET arr_empaque[idx].pcodtipo = detalle[idx].pcodtipo
LET arr_empaque[idx].pcodsec = detalle[idx].pcodse
LET arr_empaque[idx].cantidad_orden = detalle[idx].cantidad1
END IF
END FOR
CALL empacar(arr_empaque,encabezadoe,pnum_oc,pnum_externa,dnombrecliente,orden.dir_envio)
AFTER INPUT
EXIT INPUT
END INPUT
CLOSE WINDOW w2
END FUNCTION
FUNCTION disponibles(porden)
DEFINE porden INT,
pfecha,fecha_dia DATE,
reservado,existencia,transito,cantidad_orden,pcantidadconduce,cantidad_ordenada,cantidad_recibida DEC(12,5),
selec STRING,
pvalor FLOAT
LET reservado = 0
LET fecha_Dia = TODAY
{ LET selec= "
SELECT SUM(a.cantidad_reservada)
FROM vetb00051 a,vetb00050 b
WHERE a.status_t IS NULL AND
a.cotizacion_no = b.cotizacion_no AND
a.cod_n = ? AND
a.cod_grupo=? AND
a.cod_tipo=? AND
a.cod_sec=? AND a.cantidad_reservada IS NOT NULL AND
a.fecha_vence_reserva >= ? AND
DATEDIFF(day,a.fecha_vence_reserva,a.fecha_inicio_reserva) <= ?
"
PREPARE comando1 FROM selec
EXECUTE comando1 INTO reservado USING pcodn,pcodgrupo,pcodtipo,pcodsec,fecha_dia,dias
IF reservado IS NULL THEN
LET reservado =0
END IF
}
LET existencia = 0
SELECT SUM(a.cantidad_2) INTO existencia
FROM iptb00006 a,prtb00013 b
WHERE a.status_t IS NULL 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
b.num_oc = porden
LET cantidad_orden = 0
SELECT SUM(a.cantidad) INTO cantidad_orden
FROM prtb00013 a,prtb00012 b
WHERE a.num_oc = b.num_oc AND
b.cerrada = 'N' AND
b.status_t IS NULL AND
(a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec )
LET pcantidadConduce = 0
SELECT SUM(c.cantidad_2*-1) INTO pcantidadConduce
FROM prtb00013 a,prtb00012 b,iptb00006 c,iptb00005 d
WHERE (a.num_oc = b.num_oc) AND
b.cerrada = 'N' AND
b.status_t IS NULL AND
(a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec) AND
(a.cod_n = c.cod_n AND
a.cod_grupo=c.cod_grupo AND
a.cod_tipo=c.cod_tipo AND
a.cod_sec=c.cod_Sec) AND
c.cod_mov = d.cod_mov AND
(d.control_despacho = 'SI' OR d.control_devolucion = 'SI') AND
a.num_oc = c.num_oc AND
c.status_t IS NULL
# TRANSITO
LET cantidad_ordenada = 0
SELECT SUM(a.cantidad) INTO cantidad_ordenada
FROM cotb00015 a,cotb00014 b
WHERE (a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec) AND
(a.num_oc = b.num_oc) AND
b.cierre ='N' AND
a.status_t IS NULL
LET cantidad_recibida =0
SELECT SUM(a.cantidad_2) INTO cantidad_recibida
FROM iptb00006 a,cotb00015 b,cotb00014 c
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.orden_compra = b.num_oc) AND
b.num_oc = c.num_oc AND
c.cierre = 'N' AND
a.status_t IS NULL
LET transito = cantidad_ordenada - cantidad_recibida
IF cantidad_orden IS NULL THEN
LET cantidad_orden=0
END IF
IF transito IS NULL THEN
LET transito=0
END IF
IF pcantidadconduce IS NULL THEN
LET pcantidadconduce =0
END IF
RETURN pvalor
END FUNCTION
FUNCTION buscainfo()
DECLARE busca_orden CURSOR FOR
SELECT DISTINCT a.estado_entrega, a.tipo_orden,a.num_oc,a.cotizacion_no,f.num_req,d.estado,d.estado_despacho,a.fecha_oc,b.nombre,ISNULL(RTRIM(x.nom1_emp),' ')+' '+ISNULL(RTRIM(x.apell1_Emp),' '),a.direccion,
a.bodega,a.orden_sustituta,
CASE a.cerrada WHEN 'N' THEN 'ABIERTA' WHEN 'S' THEN 'CERRADA' END ,'0', a.nombre_file,a.cantidad_mo,
'0',a.fech_crea
FROM prtb00012 a
INNER JOIN adtb00003 x ON x.num_emp = a.sec_vend
INNER JOIN intb00009 h ON h.cod_bodega = a.bodega
LEFT OUTER JOIN cctb00026 f ON f.num_oc = a.num_oc AND f.status_t IS NULL
LEFT JOIN cctb00025 d ON d.num_req = f.num_req,
vetb00004 b,iptb00048 g
WHERE #a.tipo_orden = 'ECOMMERCE' AND
a.cerrada = 'N' AND
(a.bodega = g.bodega AND g.usuario = usuarios) AND
(a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente) AND
a.status_t IS NULL
ORDER BY a.fech_crea DESC
LET idx = 1
FOREACH busca_orden INTO ordenes[idx].*
# CALL disponibles(ordenes[idx].num_oc) RETURNING valor_inv
LET idx = idx + 1
END FOREACH
END FUNCTION
FUNCTION updateentrega()
BEGIN WORK
UPDATE prtb00012 SET bodega = pbodega,titulo_bodega = dbodega,us_mod = usuarios,fech_mod = getdate()
WHERE num_oc = pnumoc
UPDATE VETB00050 SET bodega = pbodega,titulo_bodega = dbodega,us_mod = usuarios,fech_mod = getdate()
WHERE cotizacion_no = pcotizacion
COMMIT WORK
END FUNCTION
FUNCTION updateestado()
UPDATE prtb00012 SET estado_entrega=destado,us_mod = usuarios,fech_mod = getdate()
WHERE num_oc = pnumoc
END FUNCTION