JSOTO Adicion grupos ADMINISTRACION PERSONAL Y NOMINA

This commit is contained in:
2026-10-07 12:11:28 -04:00
parent ccf12198ba
commit a5ccd3083f
14 changed files with 1888 additions and 111 deletions
+22 -16
View File
@@ -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
+9 -7
View File
@@ -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,
+13 -7
View File
@@ -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