{ 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