JSOTO Adicion grupos ADMINISTRACION PERSONAL Y NOMINA
This commit is contained in:
+22
-16
@@ -43,7 +43,7 @@ FUNCTION orden_e(sorden)
|
||||
tipo_cliente INT
|
||||
END RECORD,
|
||||
s,url, selec,ret,res STRING,
|
||||
ult_numero,vendedor,i,ultimo_req INT,
|
||||
ult_numero,vendedor,i,ultimo_req,existe_oc INT,
|
||||
pprima,pitbis,valor_orden DEC(12,2),
|
||||
puser,pfecha_crea VARCHAR(50),
|
||||
cmd,r_cmd t_sync_cmd,
|
||||
@@ -108,8 +108,15 @@ FUNCTION orden_e(sorden)
|
||||
SELECT num_oc FROM marmotech.dbo.prtb00020"
|
||||
|
||||
PREPARE ordencmd FROM selec
|
||||
LET selec = "UPDATE marmotech.dbo.prtb00020 set num_oc = ?,us_crea='ECOMMERCE',fech_crea = getdate()"
|
||||
# Incremento atomico (bloquea la fila hasta el COMMIT); ver BEGIN WORK
|
||||
LET selec = "UPDATE marmotech.dbo.prtb00020 set num_oc = ISNULL(num_oc,0)+1,us_crea='ECOMMERCE',fech_crea = getdate()"
|
||||
PREPARE updateprtb20 FROM selec
|
||||
LET selec = "SELECT COUNT(*) FROM marmotech.dbo.prtb00012 WHERE num_oc = ?"
|
||||
PREPARE existeprtb12 FROM selec
|
||||
LET selec = "SELECT MAX(num_oc) + 1 FROM marmotech.dbo.prtb00012"
|
||||
PREPARE maxprtb12 FROM selec
|
||||
LET selec = "UPDATE marmotech.dbo.prtb00020 set num_oc = ?"
|
||||
PREPARE fijaprtb20 FROM selec
|
||||
|
||||
LET selec = "SELECT cod_n,cod_grupo,cod_tipo,cod_sec FROM marmotech.dbo.iptb00002 WHERE codid = ?"
|
||||
PREPARE buscaprod FROM selec
|
||||
@@ -136,7 +143,8 @@ FUNCTION orden_e(sorden)
|
||||
|
||||
PREPARE buscacot FROM selec
|
||||
|
||||
LET selec = "UPDATE marmotech.dbo.vetb00053 SET cotizacion_no = ?"
|
||||
# Incremento atomico del consecutivo de cotizacion (bloquea la fila hasta el COMMIT)
|
||||
LET selec = "UPDATE marmotech.dbo.vetb00053 SET cotizacion_no = ISNULL(cotizacion_no,0)+1"
|
||||
|
||||
PREPARE actualizacot FROM selec
|
||||
|
||||
@@ -179,22 +187,20 @@ FUNCTION orden_e(sorden)
|
||||
|
||||
BEGIN WORK
|
||||
|
||||
# CONSECUTIVOS ATOMICOS: primero se incrementa (UPDATE bloquea la fila hasta
|
||||
# el COMMIT) y despues se lee; antes se leia y luego se escribia -> duplicados
|
||||
EXECUTE actualizacot
|
||||
EXECUTE buscacot INTO orden.encabezado.cotizacion_no
|
||||
IF orden.encabezado.cotizacion_no IS NULL THEN
|
||||
LET orden.encabezado.cotizacion_no = 0
|
||||
END IF
|
||||
|
||||
LET orden.encabezado.cotizacion_no = orden.encabezado.cotizacion_no + 1
|
||||
EXECUTE actualizacot USING orden.encabezado.cotizacion_no
|
||||
|
||||
EXECUTE updateprtb20
|
||||
EXECUTE ordencmd INTO ult_numero
|
||||
|
||||
IF ult_numero IS NULL THEN
|
||||
LET ult_numero = 0
|
||||
END IF
|
||||
LET ult_numero = ult_numero + 1
|
||||
|
||||
EXECUTE updateprtb20 USING ult_numero
|
||||
# AUTOCORRECCION: si el contador quedo por detras de prtb00012, salta al siguiente libre
|
||||
LET existe_oc = 0
|
||||
EXECUTE existeprtb12 USING ult_numero INTO existe_oc
|
||||
IF existe_oc > 0 THEN
|
||||
EXECUTE maxprtb12 INTO ult_numero
|
||||
EXECUTE fijaprtb20 USING ult_numero
|
||||
END IF
|
||||
|
||||
LET orden.encabezado.num_oc = ult_numero
|
||||
LET orden.encabezado.fecha_orden = TODAY
|
||||
|
||||
@@ -63,14 +63,16 @@ FUNCTION ordenApi(xorden)
|
||||
CALL crearcliente(cliente.*) RETURNING xtipocliente,xseccliente
|
||||
|
||||
|
||||
SELECT ISNULL(a.num_oc,0) INTO ult_numero FROM prtb00020
|
||||
|
||||
IF ult_numero = 0 THEN
|
||||
INSERT INTO prtb00020 (num_oc,us_crea) VALUES (ult_numero,orden.credenciales.usuario)
|
||||
|
||||
# CONSECUTIVO ATOMICO: incrementa prtb00020 (antes nunca lo avanzaba y solo
|
||||
# leia +1 -> el contador quedaba atrasado y se duplicaba PK_prtb00012)
|
||||
BEGIN WORK
|
||||
UPDATE prtb00020 SET num_oc = ISNULL(num_oc,0) + 1, us_crea = orden.credenciales.usuario, fech_crea = GETDATE()
|
||||
IF SQLCA.SQLERRD[3] = 0 THEN
|
||||
INSERT INTO prtb00020 (num_oc,us_crea) VALUES (1,orden.credenciales.usuario)
|
||||
END IF
|
||||
LET ult_numero = ult_numero + 1
|
||||
|
||||
SELECT num_oc INTO ult_numero FROM prtb00020
|
||||
COMMIT WORK
|
||||
|
||||
INSERT INTO prtb00012 (ventas,tipo_orden,num_oc,fecha,tipo_cliente,sec_cliente,telefono,direccion,ubicacion,
|
||||
cerrada,cond_pago,itbis, valor_bruto,monto_desc,sub_total,neto,us_crea,fech_crea,num_oc_r)
|
||||
VALUES ('1','ECOMMERCE',ult_numero,orden.encabezado.fecha_orden,xtipocliente,xseccliente,
|
||||
|
||||
@@ -37,6 +37,7 @@ END GLOBALS
|
||||
FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,xtipo_orden,xcomentario,xnosolicitud,archivos)
|
||||
|
||||
DEFINE xcotizacion_no,xsecvend_a INT,
|
||||
existe_oc INT,
|
||||
actualizar STRING,
|
||||
psolicitud_sql STRING,
|
||||
sb_sol base.StringBuffer,
|
||||
@@ -130,16 +131,21 @@ FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,x
|
||||
xcotizacion_no)
|
||||
RETURN 0,false
|
||||
END IF
|
||||
SELECT num_oc INTO ult_numero FROM prtb00020
|
||||
IF ult_numero IS NULL THEN
|
||||
LET ult_numero = 0
|
||||
END IF
|
||||
LET ult_numero = ult_numero + 1
|
||||
|
||||
BEGIN WORK
|
||||
UPDATE prtb00020 set num_oc = ult_numero,
|
||||
# CONSECUTIVO ATOMICO: el UPDATE incrementa y bloquea la fila de prtb00020
|
||||
# hasta el COMMIT/ROLLBACK, asi dos usuarios no pueden tomar el mismo num_oc
|
||||
# (antes se leia fuera de la transaccion -> PK_prtb00012 duplicada)
|
||||
UPDATE prtb00020 SET num_oc = ISNULL(num_oc, 0) + 1,
|
||||
us_crea = xusuario,
|
||||
fech_crea = GETDATE()
|
||||
SELECT num_oc INTO ult_numero FROM prtb00020
|
||||
# AUTOCORRECCION: si el contador quedo por detras de prtb00012, salta al siguiente libre
|
||||
LET existe_oc = 0
|
||||
SELECT COUNT(*) INTO existe_oc FROM prtb00012 WHERE num_oc = ult_numero
|
||||
IF existe_oc > 0 THEN
|
||||
SELECT MAX(num_oc) + 1 INTO ult_numero FROM prtb00012
|
||||
UPDATE prtb00020 SET num_oc = ult_numero
|
||||
END IF
|
||||
DISPLAY "ACTUALICE ULTIMO NUMERO: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
||||
|
||||
LET p_prtb14.observacion = xcomentario CLIPPED
|
||||
|
||||
Reference in New Issue
Block a user