197 lines
6.5 KiB
Plaintext
197 lines
6.5 KiB
Plaintext
IMPORT util
|
|
IMPORT com
|
|
IMPORT os
|
|
IMPORT security
|
|
SCHEMA mbs
|
|
|
|
TYPE t_sync_cmd RECORD
|
|
oper STRING,
|
|
data STRING
|
|
END RECORD
|
|
|
|
MAIN
|
|
DEFINE k,kurl,kbodega STRING,
|
|
ktrue BOOLEAN
|
|
DEFINE ku RECORD
|
|
usuario VARCHAR(50),
|
|
clave VARCHAR(20),
|
|
sesion VARCHAR(10)
|
|
END RECORD
|
|
LET ku.usuario = 'jsoto'
|
|
LET ku.clave = 'lmmjvsd2014'
|
|
|
|
LET kurl = "https://ws.marmotech.com.do/gas/ws/r/restserver"
|
|
# LET kurl = "http://192.168.40.9/gas/ws/r/restserver"
|
|
CALL chequea_prod(kurl)
|
|
LET ku.usuario = 'conecta'
|
|
LET ku.clave = 'conecta'
|
|
|
|
END MAIN
|
|
|
|
FUNCTION chequea_prod(xurl)
|
|
DEFINE xurl STRING
|
|
|
|
DEFINE orden RECORD
|
|
encabezado RECORD
|
|
num_oc,cotizacion_no,factura,tipo_cliente,sec_cliente,cond_pago,sec_vend INT,
|
|
nombre,direccion_linea1,direccion_linea2,ciudad,codigo_postal,pais_region,region_provincia,
|
|
telefono1,telefono2,correo_electronico,contacto VARCHAR(100),
|
|
orden_externa VARCHAR(30),
|
|
fecha_orden DATE,
|
|
metodo_pago,referencia STRING,
|
|
tipo_envio VARCHAR(100),
|
|
total_bruto,monto_descuento,sub_total,monto_itbis,total_neto,itbis,valor_envio FLOAT,
|
|
codigo_dgii,titulo_ncf,num_rnc VARCHAR(11),
|
|
ventas VARCHAR(1),
|
|
cod_zona VARCHAR(3),
|
|
conexion ,
|
|
usuario,clave STRING
|
|
|
|
END RECORD,
|
|
detalle DYNAMIC ARRAY OF RECORD
|
|
ultima_cotizacion,codid,cod_n,cod_grupo,cod_tipo,cod_sec INT,
|
|
precio,cantidad1,cantidad,descuento FLOAT,
|
|
titulo STRING
|
|
|
|
END RECORD
|
|
END RECORD
|
|
|
|
DEFINE respuesta RECORD
|
|
cod_msg INT,
|
|
descripcion STRING
|
|
END RECORD,
|
|
|
|
r_cmd t_sync_cmd
|
|
|
|
DEFINE cmd, res, msg,url STRING,
|
|
ret INT
|
|
|
|
|
|
LET orden.encabezado.factura = 0
|
|
LET orden.encabezado.tipo_cliente =25
|
|
LET orden.encabezado.sec_cliente =0
|
|
LET orden.encabezado.cond_pago =4
|
|
LET orden.encabezado.sec_vend =9
|
|
LET orden.encabezado.codigo_dgii ='B02'
|
|
LET orden.encabezado.titulo_ncf = 'CONSUMO'
|
|
LET orden.encabezado.nombre ="SUPERMERCADOS NACIONAL SIN RNC"
|
|
LET orden.encabezado.direccion_linea1 = "CALLE MANUEL EMILIO RICARD HERNANDEZ, ESQUINA MARION II"
|
|
LET orden.encabezado.direccion_linea2 = "VIEJO"
|
|
LET orden.encabezado.ciudad ="01"
|
|
LET orden.encabezado.codigo_postal ="000000"
|
|
LET orden.encabezado.pais_region = "DO"
|
|
LET orden.encabezado.region_provincia = "01"
|
|
LET orden.encabezado.telefono1 = "(809)620-2924"
|
|
LET orden.encabezado.telefono2 = "(829)847-3878"
|
|
LET orden.encabezado.correo_electronico = "jsoto@marmotech.com.do"
|
|
LET orden.encabezado.orden_externa = "2129"
|
|
LET orden.encabezado.fecha_orden = TODAY
|
|
LET orden.encabezado.metodo_pago = "PayPal"
|
|
LET orden.encabezado.tipo_envio = 'DCM SANTO DOMINGO'
|
|
LET orden.encabezado.total_bruto = 739.32
|
|
LET orden.encabezado.monto_descuento =0
|
|
LET orden.encabezado.sub_total =739.32
|
|
LET orden.encabezado.monto_itbis =133.07
|
|
LET orden.encabezado.total_neto =0
|
|
LET orden.encabezado.itbis =18
|
|
LET orden.encabezado.contacto = 'JHONNY SOTO'
|
|
LET orden.encabezado.referencia = 'FRENTE AL PARQUE DE ARROYO HONDO II'
|
|
LET orden.encabezado.num_rnc = 0
|
|
LET orden.encabezado.ventas = 0
|
|
LET orden.encabezado.cod_zona =0
|
|
|
|
LET orden.detalle[1].ultima_cotizacion =0
|
|
LET orden.detalle[1].codid =3684
|
|
LET orden.detalle[1].precio =433.59
|
|
LET orden.detalle[1].cantidad1 = 1
|
|
LET orden.detalle[1].cantidad =1
|
|
LET orden.detalle[1].descuento =0
|
|
LET orden.detalle[1].titulo = "GRIFERIA DELTA VERO P/LAV. 1H CR 553LF"
|
|
|
|
LET orden.detalle[2].ultima_cotizacion =0
|
|
LET orden.detalle[2].codid =3691
|
|
LET orden.detalle[2].precio =305.73
|
|
LET orden.detalle[2].cantidad1 = 1
|
|
LET orden.detalle[2].cantidad =1
|
|
LET orden.detalle[2].descuento =0
|
|
LET orden.detalle[2].titulo = "GRIFERIA DELTA COMPEL LAV.1H CR 761-DST"
|
|
|
|
LET orden.encabezado.conexion = 'NO ACTIVA'
|
|
LET orden.encabezado.usuario = 'conecta'
|
|
LET orden.encabezado.clave = 'conecta'
|
|
DISPLAY " URL ",xurl
|
|
LET r_cmd.oper = "orden_e"
|
|
LET r_cmd.data = util.JSON.stringify(orden) -- aca se convierte a string los datos de la operacion
|
|
LET cmd = util.JSON.stringify(r_cmd)
|
|
|
|
CALL sync_send_command(xurl, cmd) RETURNING ret, res
|
|
DISPLAY "cmd", cmd,"ret ",ret," RES: ",RES
|
|
IF ret == 0 THEN
|
|
|
|
CALL util.JSON.parse(res,respuesta)
|
|
|
|
ELSE
|
|
LET msg=SFMT(%"Connection '%1' failed",r_cmd.oper),"\n",url
|
|
CALL show_sync_err(msg)
|
|
|
|
END IF
|
|
|
|
|
|
END FUNCTION
|
|
|
|
|
|
#
|
|
## Communications library using com (http or https)
|
|
#
|
|
|
|
FUNCTION sync_send_command(url, cmd)
|
|
|
|
DEFINE url, cmd STRING
|
|
DEFINE result, tmp STRING
|
|
DEFINE http_req com.HTTPRequest
|
|
DEFINE http_resp com.HTTPResponse
|
|
|
|
|
|
TRY LET http_req = com.HTTPRequest.Create(url)
|
|
CALL http_req.setConnectionTimeout(40)
|
|
CALL http_req.setTimeout(40)
|
|
CALL http_req.setMethod("POST")
|
|
CALL http_req.setCharset("UTF-8")
|
|
CALL http_req.setHeader("DBSync-Client","mbs")
|
|
CALL http_req.setHeader("Content-Type","dbsync/json")
|
|
|
|
CALL http_req.doTextRequest(cmd)
|
|
LET http_resp=http_req.getResponse()
|
|
IF http_resp.getStatusCode() != 200 THEN
|
|
RETURN http_resp.getStatusCode(), http_resp.getStatusDescription()
|
|
END IF
|
|
LET tmp = http_resp.getStatusDescription()
|
|
IF (tmp == "OK" || tmp == "no error" ) THEN
|
|
RETURN -1, SFMT("HTTP request status description: %1 ",tmp)
|
|
END IF
|
|
LET result = http_resp.getTextResponse()
|
|
CATCH
|
|
RETURN -2, SFMT("HTTP request error: STATUS=%1 (%2)",STATUS,SQLCA.SQLERRM)
|
|
END TRY
|
|
|
|
RETURN 0, result
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION show_sync_err(msg)
|
|
DEFINE msg STRING
|
|
CALL fgl_winmessage(%"ERROR", msg, "exclamation")
|
|
END FUNCTION
|
|
|
|
FUNCTION b64_to_file(str_b64,f_sal)
|
|
|
|
DEFINE f_sal,str_b64,str_aux STRING
|
|
|
|
TRY
|
|
CALL security.Base64.SaveBinary(f_sal,str_b64)
|
|
CATCH
|
|
DISPLAY " data ",str_b64
|
|
LET str_aux="Unable to convert Base64 String to file :",STATUS
|
|
CALL fgl_winmessage("Error",str_aux,"stop")
|
|
END TRY
|
|
END FUNCTION |