Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
IMPORT util
|
||||
IMPORT security
|
||||
|
||||
FUNCTION orden_insert(xorden)
|
||||
DEFINE
|
||||
i SMALLINT,
|
||||
xorden STRING,
|
||||
ximpresor, xcopia SMALLINT,
|
||||
xtipoOrden VARCHAR(30),
|
||||
estado BOOLEAN,
|
||||
pbodega INT
|
||||
|
||||
DEFINE data RECORD
|
||||
generales RECORD
|
||||
usuario VARCHAR(50),
|
||||
clave VARCHAR(50),
|
||||
cotizacion_no INT,
|
||||
orden_cliente STRING,
|
||||
comentario_adicional VARCHAR(100),
|
||||
nosolicitud VARCHAR(200)
|
||||
END RECORD,
|
||||
archivos DYNAMIC ARRAY OF RECORD
|
||||
tipo_file VARCHAR(3),
|
||||
contenido STRING,
|
||||
nombre_arch STRING
|
||||
END RECORD
|
||||
END RECORD
|
||||
DEFINE
|
||||
r_out RECORD
|
||||
orden INT,
|
||||
mensaje_out STRING,
|
||||
cod_msg INT
|
||||
END RECORD,
|
||||
archivos DYNAMIC ARRAY OF RECORD
|
||||
tipo_file VARCHAR(3),
|
||||
contenido STRING,
|
||||
nombre_arch STRING
|
||||
END RECORD,
|
||||
id_file, cuentaInstalacion SMALLINT
|
||||
# LOCATE data.archivos.imagen IN MEMORY
|
||||
CALL util.JSON.parse(xorden, data)
|
||||
WHENEVER ANY ERROR CONTINUE
|
||||
DISPLAY "DATOS orden_insert ", data.generales.cotizacion_no
|
||||
CONNECT TO "smarmotech"
|
||||
USER data.generales.usuario USING data.generales.clave
|
||||
IF STATUS < 0 THEN
|
||||
# Posible conexion "smarmotech" que quedo colgada de un request anterior
|
||||
# (proceso servidor unico). La cierro y reintento una sola vez.
|
||||
DISCONNECT ALL
|
||||
CONNECT TO "smarmotech"
|
||||
USER data.generales.usuario USING data.generales.clave
|
||||
END IF
|
||||
IF STATUS < 0 THEN
|
||||
LET r_out.cod_msg = STATUS
|
||||
LET r_out.orden = 0
|
||||
LET r_out.mensaje_out =
|
||||
'ERROR CONECTANDOSE A LA BASE DE DATOS: ', err_get(STATUS)
|
||||
DISCONNECT CURRENT
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
END IF
|
||||
|
||||
# Valida que el CRM haya enviado el numero de cotizacion en el JSON.
|
||||
# Sin esto, los SELECT de abajo dan NOTFOUND y se responde el mensaje
|
||||
# enganoso "COTIZACION SIN LUGAR DE ENTREGA".
|
||||
IF data.generales.cotizacion_no IS NULL
|
||||
OR data.generales.cotizacion_no = 0 THEN
|
||||
LET r_out.cod_msg = 400
|
||||
LET r_out.orden = 0
|
||||
LET r_out.mensaje_out =
|
||||
'NO SE RECIBIO EL NUMERO DE COTIZACION EN EL JSON (generales.cotizacion_no)'
|
||||
DISPLAY "orden_insert: cotizacion_no vacio en el request"
|
||||
DISCONNECT CURRENT
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
END IF
|
||||
|
||||
SELECT a.num_oc
|
||||
FROM prtb00012 a
|
||||
WHERE a.cotizacion_no = data.generales.cotizacion_no
|
||||
AND a.status_t IS NULL
|
||||
IF STATUS <> NOTFOUND THEN
|
||||
LET r_out.cod_msg = -10
|
||||
LET r_out.orden = 0
|
||||
LET r_out.mensaje_out = 'COTIZACION TIENE ORDEN DE PEDIDOS'
|
||||
DISCONNECT CURRENT
|
||||
DISPLAY "data orden ", data.archivos.getLength()
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
ELSE
|
||||
SELECT a.printerdefecto, a.otro_printer
|
||||
INTO ximpresor, xcopia
|
||||
FROM seg0001 a
|
||||
WHERE a.usuario = data.generales.usuario
|
||||
LET xtipoOrden = 'GENERAL'
|
||||
LET archivos = data.archivos
|
||||
|
||||
SELECT a.bodega
|
||||
INTO pbodega
|
||||
FROM vetb00050 a
|
||||
WHERE a.cotizacion_no = data.generales.cotizacion_no
|
||||
# Distinguir "la cotizacion no existe" de "existe pero sin bodega".
|
||||
IF STATUS = NOTFOUND THEN
|
||||
LET r_out.cod_msg = 400
|
||||
LET r_out.orden = 0
|
||||
LET r_out.mensaje_out =
|
||||
SFMT("LA COTIZACION %1 NO EXISTE EN VENTAS (vetb00050). Verifique el numero enviado por el CRM.",
|
||||
data.generales.cotizacion_no)
|
||||
DISPLAY "orden_insert: cotizacion inexistente ",
|
||||
data.generales.cotizacion_no
|
||||
DISCONNECT CURRENT
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
END IF
|
||||
IF pbodega IS NULL THEN
|
||||
LET r_out.cod_msg = 400
|
||||
LET r_out.orden = 0
|
||||
LET r_out.mensaje_out =
|
||||
SFMT("LA COTIZACION %1 NO TIENE BODEGA / LUGAR DE ENTREGA ASIGNADO.",
|
||||
data.generales.cotizacion_no)
|
||||
DISPLAY "orden_insert: sin bodega ", data.generales.cotizacion_no
|
||||
DISCONNECT CURRENT
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
END IF
|
||||
|
||||
# VERIFICA SI TIENE ITEM DE INSTALACION (cod_n = 12).
|
||||
# OJO: cod_n esta en el DETALLE vetb00051, NO en vetb00050. El query
|
||||
# anterior apuntaba a vetb00050 (columna inexistente) y reventaba en
|
||||
# CADA cotizacion -> STATUS negativo -> devolvia el error a todas.
|
||||
LET cuentaInstalacion = NULL
|
||||
SELECT DISTINCT a.cod_n
|
||||
INTO cuentaInstalacion
|
||||
FROM vetb00051 a
|
||||
WHERE a.cotizacion_no = data.generales.cotizacion_no
|
||||
AND a.cod_n = 12
|
||||
|
||||
# Si tiene instalacion y el vendedor NO envio el numero de solicitud,
|
||||
# se rechaza para que lo coloque en la orden.
|
||||
IF cuentaInstalacion = 12 THEN
|
||||
IF data.generales.nosolicitud IS NULL
|
||||
OR LENGTH(data.generales.nosolicitud CLIPPED) = 0 THEN
|
||||
LET r_out.cod_msg = 400
|
||||
LET r_out.orden = 0
|
||||
LET r_out.mensaje_out =
|
||||
SFMT("LA COTIZACION %1 TIENE INSTALACION (cod_n=12): debe enviar el numero de solicitud.",
|
||||
data.generales.cotizacion_no)
|
||||
DISPLAY "orden_insert: falta nosolicitud (cod_n=12) ",
|
||||
data.generales.cotizacion_no
|
||||
DISCONNECT CURRENT
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
END IF
|
||||
END IF
|
||||
|
||||
CALL convierteorden(
|
||||
data.generales.cotizacion_no,
|
||||
data.generales.orden_cliente,
|
||||
data.generales.usuario,
|
||||
data.generales.clave,
|
||||
ximpresor,
|
||||
xcopia,
|
||||
xtipoOrden,
|
||||
data.generales.comentario_adicional,
|
||||
data.generales.nosolicitud,
|
||||
archivos)
|
||||
RETURNING r_out.orden, estado
|
||||
|
||||
# Si convierteorden hizo ROLLBACK (estado=FALSE) NO reportar exito al CRM:
|
||||
# devolver el motivo especifico para que el CRM lo muestre.
|
||||
IF NOT estado THEN
|
||||
LET r_out.cod_msg = 400
|
||||
LET r_out.orden = 0
|
||||
LET r_out.mensaje_out = convierte_error()
|
||||
IF r_out.mensaje_out IS NULL OR LENGTH(r_out.mensaje_out) = 0 THEN
|
||||
LET r_out.mensaje_out =
|
||||
'NO SE PUDO CONVERTIR LA COTIZACION EN ORDEN (error en base de datos, se revirtio la transaccion)'
|
||||
END IF
|
||||
DISCONNECT CURRENT
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
END IF
|
||||
END IF
|
||||
LET r_out.cod_msg = 13
|
||||
LET r_out.mensaje_out = 'ADICION EXITOSA'
|
||||
DISCONNECT CURRENT
|
||||
RETURN util.JSON.stringify(r_out)
|
||||
END FUNCTION
|
||||
Reference in New Issue
Block a user