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