Files
MBS/PROYECTO/PRDIR/prprmt011.4gl
T

1388 lines
60 KiB
Plaintext

{------------------------------------------------------------------
PROGRAMA : PRPRMT011
OBJETIVO : Matenimiento de Status de Orden de Produccion
PROGRAMADOR : Ing. Juan Soto
FECHA REALIZACION : Octubre, 2013
OBSERVACIONES : EL USUARIO QUIEN ADMINISTRA LAS INFORMACIONES DE
ESTA HERRAMIENTA DEBE TENER EN LA TABLA SEG0003
NOM_PUESTO = 'ADM PRODUCCION', LOS DEMAS USUARIOS
QUIENEN TIENEN PERMISOS PARA EJECUTARLO NO ACTUALIZAN
------------------------------------------------------------------}
GLOBALS "prprgb000.4gl"
DEFINE veces,vecesparcial SMALLINT,
arrparcial DYNAMIC ARRAY OF RECORD
fecha DATE,
cantidad DEC(12,4)
END RECORD,
puesto VARCHAR(50),
email,emailsubject,emailbody,procedimiento CHAR(200),
noencontre,resultado CHAR(2),
xarticulo STRING
DEFINE w ui.Window
DEFINE f ui.Form
DEFINE p_vetb50 RECORD LIKE vetb00050.*
DEFINE data_imp RECORD
cotizacion_no,tipo_cliente,sec_cliente INT,
fecha DATE,
sec_vend INT,
direccion_cliente,nombre,contacto,nombre_proyecto,direccion_proyecto,nombre_ciudad,
nombre_vend,nombre_cliente VARCHAR(100),
rnc VARCHAR(11),
telefono_o,telefono_r,celular,celular1 VARCHAR(25),
email VARCHAR(100),
orden,cond_pago INT,
soportes,instalador,plazo_entrega VARCHAR(100),
comentario VARCHAR(250),
sub_total,monto_desc,porc_itbis,neto,total_bruto,monto_itbis,total_neto DEC(12,2),
num_emp_int,vendedor_aux,bodega INT,
tbodega VARCHAR(100)
END RECORD
DEFINE container RECORD
vendedor STRING,
orden INT,
etiqueta_cotiza CHAR(30),
cuenta_item SMALLINT
END RECORD
MAIN
DEFER INTERRUPT
CALL STARTLOG("prprmt11.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
DECLARE buscacorreo CURSOR FOR
SELECT a.correo FROM seg0003 a
WHERE a.actualizacion_log_produccion = 'SI'
LET idx = 1
FOREACH buscacorreo INTO copiacorreo[idx]
LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx]
LET idx = idx + 1
END FOREACH
SELECT a.actualizacion_log_produccion,actualizacion_produccion
INTO actualiza_log_produccion,actualiza_produccion FROM seg0003 a
WHERE a.usuario = usuarios
CALL prprmt011()
END MAIN
FUNCTION prprmt011()
DEFINE arr_ordenes DYNAMIC ARRAY OF RECORD
actualiza VARCHAR(1),
cerrada VARCHAR(1),
estado_produccion VARCHAR(100),
estado_producto VARCHAR(100),
departamento SMALLINT,
descripcion_dpto VARCHAR(30),
vendedor VARCHAR(50),
apell1_emp VARCHAR(50),
fecha DATE,
fecha_compromiso DATE,
fecha_llegada DATE,
fechaDispEntrega DATE,
fechaSolDespacho DATE,
fechaInstalacion DATE,
cotizacion_no INT,
num_oc INT,
orden_compra INT,
observacion VARCHAR(250),
tipo_venta VARCHAR(30),
cliente VARCHAR(60),
origen VARCHAR(30),
producto VARCHAR(100),
cantidad_ord DEC(12,5),
cantidad_desp DEC(12,5),
cantidad_dev DEC(12,5),
pendiente DEC(12,5),
sec_vend SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
tipo_cliente SMALLINT,
sec_cliente INT,
balance DEC(12,5),
id_kit INT ,
area SMALLINT,
instalador,equipo VARCHAR(100),
costo NUMERIC(12,2)
END RECORD,
cantidad_Desp,cantidad_dev DEC(12,5),
registros INT,
fecha1,fecha2 DATE,
busqueda,entre STRING,
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,col14,col15,col16 STRING
end record,
estado VARCHAR(20),
cuenta INT,
arr_req DYNAMIC ARRAY OF RECORD
num_req INT,
nombre STRING,
precio FLOAT
END RECORD
## Captura los datos que va a contener el registro
--fechaSolDespacho
OPEN WINDOW prfmmt011 AT 10,10 WITH FORM "prfmmt011"
#WHENEVER ERROR CONTINUE
LET w = ui.Window.getCurrent()
LET f = w.getForm()
DIALOG ATTRIBUTE(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME fecha1,fecha2
BEFORE INPUT
LET entre='N'
LET busqueda = NULL
CALL f.setFieldHidden("fechaSolDespacho",1)
CALL f.setElementHidden("fechaSolDespacho",1)
AFTER INPUT
END INPUT
CONSTRUCT criterio ON x.cerrada,x.num_oc,x.departamento,x.cotizacion_no,e.tipo_cliente,e.sec_cliente,e.nombre,b.nom1_emp,
b.apell1_emp,x1.estado_produccion,x1.estado_producto,x4.cod_cia,x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_Sec,
x2.descrip_esp,
x1.fecha_compromiso,x.tipo_orden,x7.depto
FROM
cerrada,num_oc,departamento,cotizacion_no,tipo_cliente,sec_cliente,nombre,vendedor,
apell1_emp,estado_produccion,estado_producto,xorigen,pcod10,pcod11,pcod12,pcod13,descripcionprod,fecha_compromiso,
tipo_orden,equipos
BEFORE CONSTRUCT
LET entre = 'S'
CALL cequipos()
AFTER CONSTRUCT
END CONSTRUCT
ON ACTION busca ATTRIBUTE(TEXT="Buscar",IMAGE="find")
LET busqueda = NULL
IF fecha1 IS NOT NULL THEN
IF fecha1 > fecha2 THEN
CALL msg(64)
NEXT FIELD fecha1
END IF
LET busqueda = " AND x.fecha_oc BETWEEN '",fecha1 USING "MM/DD/YYYY",
"' AND '",fecha2 USING "mm/dd/yyyy","'"
END IF
LET selec2 = " SELECT SUM(a.cantidad_2)
FROM iptb00006 a
WHERE a.area =? AND
a.cod_n = ? AND
a.cod_grupo = ? AND
a.cod_tipo = ? AND
a.cod_sec = ? AND
a.num_oc = ? AND
a.cod_mov IN (30,31,55,56,12,13) AND
a.status_t IS NULL
"
PREPARE despachos FROM selec2
IF busqueda IS NULL THEN
LET selec1 =
" SELECT 'N', x.cerrada, x1.estado_produccion,x1.estado_producto,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ",
" CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,x1.fecha_llegada, x1.fecha_disp_entrega, ",
" x1.fecha_solic_despacho, x1.fecha_instalacion, x.cotizacion_no, x.num_oc,x5.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ",
" + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) ,x4.descripcion, CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ",
" + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(7)) + ' ' + RTRIM(x2.descrip_esp), ",
" SUM(x1.cantidad), '0' , '0' , '0' , x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente, ",
" '0',x1.id_kit,x1.area,(SELECT RTRIM(x10.nom1_emp)+' '+ISNULL(x10.apell1_emp,' ') FROM adtb00003 x10 WHERE x.num_emp_inst=x10.num_emp),
x7.nombre as equipo ",
" FROM vetb00004 AS e INNER JOIN ",
" prtb00012 AS x ON (e.tipo_cliente = x.tipo_cliente AND e.sec_cliente = x.sec_cliente) INNER JOIN ",
" vetb00060 AS h ON x.tipo_cliente = h.tipo_cliente INNER JOIN ",
" prtb00013 AS x1 ON (x.num_oc = x1.num_oc) LEFT OUTER JOIN ",
" cotb00015 AS x5 ON (x1.num_oc = x5.numero_orden) and (x1.cod_n = x5.cod_n AND ",
" x1.cod_grupo = x5.cod_grupo AND x1.cod_tipo = x5.cod_tipo AND x1.cod_sec = x5.cod_sec) ",
" LEFT OUTER JOIN ",
" adtb00001 AS x3 ON (x1.departamento = x3.departamento) INNER JOIN ",
" iptb00002 AS x2 ON (x1.cod_n = x2.cod_n) AND (x1.cod_grupo = x2.cod_grupo) AND (x1.cod_tipo = x2.cod_tipo) AND (x1.cod_sec = x2.cod_sec) INNER JOIN ",
" iptb00022 AS x4 ON x2.cod_cia = x4.cod_cia INNER JOIN ",
" vetb00061 AS g ON h.ventas = g.ventas INNER JOIN ",
" adtb00003 AS b ON (x.sec_vend = b.num_emp) LEFT OUTER JOIN ",
" seg0000 as x6 ON x6.sec_vend = b.num_emp LEFT OUTER JOIN ",
" seg0008 AS x7 ON x7.depto = x6.depto ",
" WHERE x.tipo_orden in ('GENERAL','COCINAS MODULARES, PUERTAS, BANOS','REPOSICION') AND ",criterio CLIPPED,
" GROUP BY x.cerrada, x1.estado_produccion,x.sec_vend ,b.nom1_emp, b.apell1_emp,
x.fecha_oc , x1.fecha_compromiso , x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, e.tipo_cliente,
e.sec_cliente ,e.nombre , x1.cod_n,x1.cod_grupo ,
x1.cod_tipo ,x1.cod_sec,x2.descrip_esp,x4.descripcion,
x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente,",
" x1.departamento,x3.nom_dpto,x1.id_kit,x1.area,x5.num_oc,x.num_emp_inst,x1.fecha_llegada, x1.fecha_disp_entrega,
x1.fecha_solic_despacho, x1.fecha_instalacion,x1.estado_producto,x7.nombre ",
" ORDER BY x.num_oc DESC "
ELSE
IF criterio IS NOT NULL THEN
LET busqueda = " AND x.fecha_oc BETWEEN '",fecha1 USING "MM/DD/YYYY",
"' AND '",fecha2 USING "mm/dd/yyyy","'"
ELSE
LET busqueda = " x.fecha_oc BETWEEN '",fecha1 USING "MM/DD/YYYY",
"' AND '",fecha2 USING "mm/dd/yyyy","'"
END IF
LET selec1 =
" SELECT 'N', x.cerrada, x1.estado_produccion,x1.estado_producto,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ",
" CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,
x1.fecha_llegada,x1.fecha_disp_entrega, ",
" x1.fecha_solic_despacho, x1.fecha_instalacion, x.cotizacion_no, x.num_oc,x5.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ",
" + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) ,x4.descripcion, CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ",
" + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(7)) + ' ' + RTRIM(x2.descrip_esp), ",
" SUM(x1.cantidad), '0' , '0' , '0' , x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente, ",
" '0',x1.id_kit,x1.area,(SELECT RTRIM(x10.nom1_emp)+' '+ISNULL(x10.apell1_emp,' ') FROM adtb00003 x10 WHERE x.num_emp_inst=x10.num_emp),
x7.nombre as equipos ",
" FROM vetb00004 AS e INNER JOIN ",
" prtb00012 AS x ON (e.tipo_cliente = x.tipo_cliente AND e.sec_cliente = x.sec_cliente) INNER JOIN ",
" vetb00060 AS h ON x.tipo_cliente = h.tipo_cliente INNER JOIN ",
" prtb00013 AS x1 ON (x.num_oc = x1.num_oc) LEFT OUTER JOIN ",
" cotb00015 AS x5 ON (x1.num_oc = x5.numero_orden) and (x1.cod_n = x5.cod_n AND ",
" x1.cod_grupo = x5.cod_grupo AND x1.cod_tipo = x5.cod_tipo AND x1.cod_sec = x5.cod_sec) ",
" LEFT OUTER JOIN ",
" adtb00001 AS x3 ON (x1.departamento = x3.departamento) INNER JOIN ",
" iptb00002 AS x2 ON (x1.cod_n = x2.cod_n) AND (x1.cod_grupo = x2.cod_grupo) AND (x1.cod_tipo = x2.cod_tipo) AND (x1.cod_sec = x2.cod_sec) INNER JOIN ",
" iptb00022 AS x4 ON x2.cod_cia = x4.cod_cia INNER JOIN ",
" vetb00061 AS g ON h.ventas = g.ventas INNER JOIN ",
" adtb00003 AS b ON (x.sec_vend = b.num_emp) LEFT OUTER JOIN ",
" seg0000 as x6 ON x6.sec_vend = b.num_emp LEFT OUTER JOIN ",
" seg0008 AS x7 ON x7.depto = x6.depto ",
" WHERE x.tipo_orden in ('GENERAL','COCINAS MODULARES, PUERTAS, BANOS') AND ",criterio CLIPPED,
busqueda CLIPPED,
" GROUP BY x.cerrada, x1.estado_produccion,x.sec_vend ,b.nom1_emp, b.apell1_emp,
x.fecha_oc , x1.fecha_compromiso , x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, e.tipo_cliente,
e.sec_cliente ,e.nombre , x1.cod_n,x1.cod_grupo ,
x1.cod_tipo ,x1.cod_sec,x2.descrip_esp,x4.descripcion,
x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente,",
" x1.departamento,x3.nom_dpto,x1.id_kit,x1.area,x5.num_oc,x.num_emp_inst,x1.fecha_llegada, x1.fecha_disp_entrega,
x1.fecha_solic_despacho, x1.fecha_instalacion,x1.estado_producto,x7.nombre ",
" ORDER BY x.num_oc DESC "
END IF
# CALL fgl_winmessage("info",selec1,"info")
{
IF actualiza_log_produccion="SI" THEN
LET selec1=
" SELECT 'N', x.cerrada, x1.estado_produccion,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ",
" CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,' ', x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ",
" + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) , CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ",
" + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(4)) + ' ' + RTRIM(x2.descrip_esp), ",
" SUM(x1.cantidad), '0' , '0' , '0' , x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente, ",
" '0' ",
"FROM vetb00004 AS e INNER JOIN ",
" prtb00012 AS x ON e.tipo_cliente = x.tipo_cliente AND e.sec_cliente = x.sec_cliente INNER JOIN ",
" vetb00060 AS h ON x.tipo_cliente = h.tipo_cliente INNER JOIN ",
" prtb00013 AS x1 ON x.num_oc = x1.num_oc LEFT OUTER JOIN ",
" adtb00001 AS x3 ON x1.departamento = x3.departamento INNER JOIN ",
" iptb00002 AS x2 ON x1.cod_n = x2.cod_n AND x1.cod_grupo = x2.cod_grupo AND x1.cod_tipo = x2.cod_tipo AND x1.cod_sec = x2.cod_sec INNER JOIN ",
" vetb00061 AS g ON h.ventas = g.ventas INNER JOIN ",
" adtb00003 AS b ON x.sec_vend = b.num_emp INNER JOIN ",
" seg0001 AS c ON x1.departamento =c.departamento ",
" WHERE (x.status_t IS NULL) ",
busqueda CLIPPED,
" AND c.usuario = '",usuarios CLIPPED,"' ",
" GROUP BY x.cerrada, x1.estado_produccion,x.sec_vend ,b.nom1_emp, b.apell1_emp,
x.fecha_oc , x1.fecha_compromiso , x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, e.tipo_cliente,
e.sec_cliente ,e.nombre , x1.cod_n,x1.cod_grupo ,
x1.cod_tipo ,x1.cod_sec,x2.descrip_esp,
x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente,",
" x1.departamento,x3.nom_dpto ",
" ORDER BY x.num_oc DESC "
END IF
}
DISPLAY "seleccion: ",selec1
PREPARE comando FROM selec1
DECLARE busca_orden CURSOR FOR comando
OPEN busca_orden
LET idx = 1
FOREACH busca_orden INTO arr_ordenes[idx].*
# BUSCA CANTIDAD DESPACHADA
LET cantidad_Desp=0
EXECUTE despachos INTO cantidad_desp USING arr_ordenes[idx].area,
arr_ordenes[idx].cod_n,arr_ordenes[idx].cod_grupo,
arr_ordenes[idx].cod_tipo,arr_ordenes[idx].cod_sec,
arr_ordenes[idx].num_oc
IF cantidad_Desp IS NULL THEN
LET cantidad_desp = 0
END IF
# BUSCA CANTIDAD DEVUELTA
LET cantidad_Dev = 0
# SELECT SUM(a.cantidad_2) INTO cantidad_dev
# FROM iptb00006 a
# WHERE a.cod_n = arr_ordenes[idx].cod_n AND
# a.cod_grupo = arr_ordenes[idx].cod_grupo AND
# a.cod_tipo = arr_ordenes[idx].cod_tipo AND
# a.cod_sec = arr_ordenes[idx].cod_sec AND
# a.conduce_no = arr_ordenes[idx].num_oc AND
# a.cod_mov IN (12,13) AND
# a.status_t IS NULL AND a.fech_crea > '2011-01-01'
IF cantidad_Desp IS NULL THEN
LET cantidad_desp = 0
END IF
LET arr_ordenes[idx].cantidad_desp = cantidad_desp
LET arr_ordenes[idx].pendiente = arr_ordenes[idx].cantidad_ord -
(arr_ordenes[idx].cantidad_desp*-1)
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
CALL fgl_winmessage("ADVERTENCIA","NO EXISTEN REGISTROS CON ESA CONDICION","INFO")
EXIT PROGRAM
END IF
CALL set_count(idx-1)
options input WRAP
INPUT ARRAY arr_ordenes WITHOUT DEFAULTS FROM s_ordenes.* attributes(UNBUFFERED)
ON ACTION transacciones
LET xarticulo = arr_ordenes[arr_curr()].producto
CALL transacciones(arr_ordenes[arr_curr()].num_oc,arr_ordenes[arr_curr()].cod_n,
arr_ordenes[arr_curr()].cod_grupo,arr_ordenes[arr_curr()].cod_tipo,
arr_ordenes[arr_curr()].cod_sec,xarticulo)
ON ACTION btransito
IF fecha2 IS NULL THEN
LET fecha2 = TODAY
END IF
CALL fechas_llegadas(arr_ordenes[arr_curr()].cod_n,arr_ordenes[arr_curr()].cod_grupo,arr_ordenes[arr_curr()].cod_tipo,
arr_ordenes[arr_curr()].cod_sec,fecha2)
ON ACTION buscareq ATTRIBUTE(TEXT="Requisicion")
IF verificaordenNoAutorizada(arr_ordenes[arr_curr()].num_oc) OR verificaordenAutorizada(arr_ordenes[arr_curr()].num_oc) THEN
CALL buscareq(arr_ordenes[arr_curr()].num_oc)
CLOSE WINDOW w1
END IF
ON ACTION cotizacion_detalle
INITIALIZE container TO NULL
LET container.vendedor = arr_ordenes[arr_curr()].vendedor
LET container.orden = arr_ordenes[arr_curr()].num_oc
LET container.cuenta_item = arr_count()
LET container.etiqueta_cotiza = "COTIZACION"
CALL vepcmf008(arr_ordenes[arr_curr()].cotizacion_no)
AFTER FIELD departamento
IF arr_ordenes[arr_curr()].departamento IS NOT NULL THEN
SELECT a.nom_dpto INTO arr_ordenes[arr_curr()].descripcion_dpto
FROM adtb00001 a
WHERE a.departamento = arr_ordenes[arr_curr()].departamento
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD departamento
END IF
DISPLAY arr_ordenes[arr_curr()].descripcion_dpto TO s_ordenes[scr_line()].descripcion_dpto
END IF
BEFORE INPUT
call dialog.setCellAttributes(att)
LET registros = DIALOG.getArrayLength("s_ordenes") - 1
DISPLAY BY NAME registros
FOR idx = 1 TO arr_ordenes.getLength()
LET att[idx].col1 = NULL
LET att[idx].col2 = NULL
LET att[idx].col3 = NULL
LET att[idx].col4 = NULL
LET att[idx].col5 = NULL
LET att[idx].col6 = NULL
LET att[idx].col7 = NULL
LET att[idx].col8 = NULL
LET att[idx].col9 = NULL
LET att[idx].col10 = NULL
LET att[idx].col11 = NULL
LET att[idx].col12 = NULL
LET att[idx].col13 = NULL
LET att[idx].col14 = NULL
LET att[idx].col15 = NULL
LET att[idx].col16 = NULL
#FECHA LLEGADA
LET veces = 0
SELECT COUNT(*) INTO veces FROM cctb00026 a
WHERE (a.num_oc = arr_ordenes[idx].num_oc AND
a.cod_n = arr_ordenes[idx].cod_n AND
a.cod_grupo = arr_ordenes[idx].cod_grupo AND
a.cod_tipo = arr_ordenes[idx].cod_tipo AND
a.cod_sec = arr_ordenes[idx].cod_sec) AND
a.status_t IS NULL
IF veces > 1 THEN
LET att[idx].col7 = 'blue reverse'
ELSE
SELECT CONVERT(CHAR(10),a.fecha_llegada,103) INTO arr_ordenes[idx].fecha_llegada
FROM cctb00026 a
WHERE a.num_oc = arr_ordenes[idx].num_oc AND
a.cod_n = arr_ordenes[idx].cod_n AND
a.cod_grupo = arr_ordenes[idx].cod_grupo AND
a.cod_tipo = arr_ordenes[idx].cod_tipo AND
a.cod_sec = arr_ordenes[idx].cod_sec AND
a.status_t IS NULL
END IF
#VERIFICA SI LA ORDEN TIENE REQUISICION DE DESPACHOS
IF verificaordenNoReq(arr_ordenes[idx].num_oc) THEN
LET att[idx].col16 = 'black'
DISPLAY "ORDENES NO TIENE ",arr_ordenes[idx].num_oc
END IF
IF verificaordenNoAutorizada(arr_ordenes[idx].num_oc) THEN
LET att[idx].col16 = 'yellow reverse'
END IF
IF verificaordenAutorizada(arr_ordenes[idx].num_oc) THEN
LET att[idx].col16 = 'magenta reverse'
END IF
#---------------------------------------------------------------------
# FECHA COMPROMISO O PRODUCCION
LET vecesparcial = 0
SELECT COUNT(*) INTO vecesparcial FROM prtb00028 a
WHERE a.num_oc =arr_ordenes[idx].num_oc AND
a.cod_n = arr_ordenes[idx].cod_n AND
a.cod_grupo = arr_ordenes[idx].cod_grupo AND
a.cod_tipo = arr_ordenes[idx].cod_tipo AND
a.cod_Sec = arr_ordenes[idx].cod_sec
IF vecesparcial > 1 THEN
LET att[idx].col8 = 'green reverse'
ELSE
LET att[idx].col8 = 'Black'
END IF
IF (arr_ordenes[idx].fecha_compromiso - TODAY) > 2 AND
(arr_ordenes[idx].fecha_compromiso - TODAY) < 3 THEN
LET att[idx].col9 = 'magenta reverse'
ELSE
LET att[idx].col9 = 'Black'
END IF
IF (arr_ordenes[idx].fecha_compromiso-TODAY) <0 THEN
LET att[idx].col9 = 'red reverse'
ELSE
LET att[idx].col9 = 'Black'
END IF
# VERIFICA QUE LA ORDEN TENGA DIBUJOS
SELECT ISNULL(COUNT(*),0) INTO cuenta FROM prtb00029 a
WHERE a.num_oc =arr_ordenes[idx].num_oc AND a.tipo_file = 'DI'
IF cuenta > 0 THEN
LET att[idx].col2='Yellow'
ELSE
LET att[idx].col2 = 'Black'
END IF
END FOR
ON ACTION existencia ATTRIBUTE(TEXT="Existencia",IMAGE='fa-list-alt')
LET xarticulo = arr_ordenes[arr_curr()].producto CLIPPED
CALL existenciaalmacenes(
arr_ordenes[arr_curr()].cod_n,
arr_ordenes[arr_curr()].cod_grupo,
arr_ordenes[arr_curr()].cod_tipo,
arr_ordenes[arr_curr()].cod_sec,
xarticulo
)
ON ACTION flujo
LET curr = arr_curr()
IF curr >0 THEN
CALL prprmt011c(arr_ordenes[curr].num_oc,arr_ordenes[curr].cod_n,arr_ordenes[curr].cod_grupo,
arr_ordenes[curr].cod_tipo,arr_ordenes[curr].cod_sec,usuarios,actualiza_log_produccion,
arr_ordenes[curr].departamento)
END IF
ON ACTION dibujo ATTRIBUTE(TEXT="Documentos")
LET curr = arr_curr()
CALL busca_dibujos(arr_ordenes[curr].num_oc)
{ON ACTION buscaConduce ATTRIBUTE(TEXT="CONDUCES", IMAGE='picture')
LET curr = arr_curr()
CALL busca_imagen_conduces(arr_ordenes[curr].num_oc) }
ON ACTION fllegada
LET curr = arr_curr()
LET scr_l = scr_line()
# FECHA LLEGADA
SELECT COUNT(*) INTO veces FROM cctb00026 a
WHERE a.num_oc = arr_ordenes[curr].num_oc AND
a.cod_n = arr_ordenes[curr].cod_n AND
a.cod_grupo = arr_ordenes[curr].cod_grupo AND
a.cod_tipo = arr_ordenes[curr].cod_tipo AND
a.cod_sec = arr_ordenes[curr].cod_sec AND
a.status_t IS NULL
IF veces > 1 THEN
CALL busca_fecha(arr_ordenes[curr].num_oc,arr_ordenes[curr].cod_n,
arr_ordenes[curr].cod_grupo,arr_ordenes[curr].cod_tipo,
arr_ordenes[curr].cod_sec)
END IF
ON ACTION forden
LET curr = arr_curr()
CALL prprrp016(arr_ordenes[curr].num_oc)
ON ACTION imprime_data ATTRIBUTE(TEXT="Reporte Data",image="print")
IF arr_ordenes.getLength() > 1 THEN
CALL seleccionarsalida() RETURNING r_output
#LET r_output='PDF'
LET preview = TRUE
LET r_filename ="prprmt011d.4rp"
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
START REPORT rordenes TO XML HANDLER HANDLER
FOR idx=1 TO arr_ordenes.getLength()
IF arr_ordenes[idx].num_oc >0 THEN
IF arr_ordenes[idx].cerrada='S' THEN
LET estado='CERRADA'
ELSE
IF arr_ordenes[idx].cerrada = 'N' THEN
LET estado='ABIERTA'
END IF
IF arr_ordenes[idx].cerrada = 'E' THEN
LET estado='NULA'
END IF
END IF
OUTPUT TO REPORT rordenes(arr_ordenes[idx].num_oc,estado,
arr_ordenes[idx].estado_produccion,arr_ordenes[idx].fecha_compromiso,
arr_ordenes[idx].vendedor,arr_ordenes[idx].cliente,arr_ordenes[idx].cotizacion_no,
arr_ordenes[idx].producto,arr_ordenes[idx].fecha,arr_ordenes[idx].cantidad_ord,
arr_ordenes[idx].pendiente,arr_ordenes[idx].costo)
END IF
END FOR
FINISH REPORT rordenes
ELSE
CALL fgl_winmessage("INFO","NO EXISTEN INFORMACIONES A IMPRIMIR","INFO")
END IF
ON ACTION parciales
LET curr = arr_curr()
CALL fparciales(arr_ordenes[curr].num_oc,arr_ordenes[curr].cod_n,
arr_ordenes[curr].cod_grupo,arr_ordenes[curr].cod_tipo,
arr_ordenes[curr].cod_sec,arr_ordenes[curr].fecha,
arr_ordenes[curr].producto)
ON ACTION informe ATTRIBUTE(TEXT="Informe",IMAGE="print")
CALL seg000(usuarios,0,'prprmt011.informe') RETURNING resultado
IF resultado = "SI" THEN
CALL prprmt011b(arr_ordenes)
ELSE
CALL fgl_winmessage("ADVERTENCIA","USTED NO TIENE PERMISOS PARA UTILIZAR OPCION","INFO")
CONTINUE DIALOG
END IF
AFTER FIELD fecha_compromiso
LET curr=arr_curr()
IF arr_ordenes[curr].fecha_compromiso IS NOT NULL THEN
IF arr_ordenes[curr].fecha_compromiso < arr_ordenes[curr].fecha THEN
CALL fgl_winmessage("ADVERTENCIA","FECHA COMPROMISO, NO PUEDE SER MENOR A LA FECHA DE LA ORDEN","INFO")
NEXT FIELD fecha_compromiso
ELSE
LET arr_ordenes[arr_curr()].fechaDispEntrega = arr_ordenes[arr_curr()].fecha_compromiso + 1
LET arr_ordenes[arr_curr()].fechaSolDespacho = arr_ordenes[arr_curr()].fechaDispEntrega
DISPLAY arr_ordenes[arr_curr()].fechaDispEntrega TO s_ordenes[scr_line()].fechaDispEntrega
DISPLAY arr_ordenes[arr_curr()].fechaDispEntrega TO s_ordenes[scr_line()].fechaDispEntrega
END IF
END IF
BEFORE FIELD fechaSolDespacho
CALL seg000(usuarios,0,'prprmt011.informe') RETURNING resultado
IF resultado = "NO" THEN
NEXT FIELD fechaInstalacion
CONTINUE DIALOG
END IF
BEFORE FIELD fechaInstalacion
CALL seg000(usuarios,0,'prprmt011.finstalacion') RETURNING resultado
IF resultado = "NO" THEN
NEXT FIELD cotizacion_no
CONTINUE DIALOG
END IF
ON ACTION visualiza_log
CALL ver_log(arr_ordenes[arr_curr()].num_oc,arr_ordenes[arr_curr()].cod_n,arr_ordenes[arr_curr()].cod_grupo
,arr_ordenes[arr_curr()].cod_tipo,arr_ordenes[arr_curr()].cod_sec)
AFTER INPUT
IF INT_FLAG THEN
LET INT_FLAG = FALSE
CALL msg(2)
EXIT INPUT
END IF
IF actualiza_produccion="SI" THEN
FOR idx = 1 TO arr_ordenes.getLength()
IF arr_ordenes[idx].actualiza = "S" THEN
IF arr_ordenes[idx].num_oc IS NOT NULL THEN
UPDATE prtb00012 SET cerrada = arr_ordenes[idx].cerrada,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE prtb00012.num_oc = arr_ordenes[idx].num_oc
IF arr_ordenes[idx].cerrada = 'E' THEN
IF arr_ordenes[idx].fecha_compromiso IS NOT NULL THEN
CALL msg(1011)
EXIT FOR
END IF
IF arr_ordenes[idx].estado_produccion IS NOT NULL THEN
CALL msg(1011)
EXIT FOR
END IF
IF arr_ordenes[idx].estado_producto IS NOT NULL THEN
CALL msg(1011)
EXIT FOR
END IF
UPDATE prtb00012 SET status_t = 'E',us_mod = usuarios,fech_mod = getdate()
WHERE num_oc = arr_ordenes[idx].num_oc
END IF
UPDATE prtb00013 SET prtb00013.fecha_compromiso = arr_ordenes[idx].fecha_compromiso,
prtb00013.estado_produccion = arr_ordenes[idx].estado_produccion,
prtb00013.estado_producto = arr_ordenes[idx].estado_producto,
prtb00013.observacion = arr_ordenes[idx].observacion,
departamento=arr_ordenes[idx].departamento,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE(),
fecha_llegada = arr_ordenes[idx].fecha_llegada,
fecha_disp_entrega = arr_ordenes[idx].fechaDispEntrega,
fecha_solic_despacho = arr_ordenes[idx].fechaSolDespacho,
fecha_instalacion = arr_ordenes[idx].fechaInstalacion
WHERE prtb00013.num_oc = arr_ordenes[idx].num_oc AND
cod_n = arr_ordenes[idx].cod_n AND
cod_grupo = arr_ordenes[idx].cod_grupo AND
cod_tipo = arr_ordenes[idx].cod_tipo AND
cod_sec = arr_ordenes[idx].cod_sec AND
area = arr_ordenes[idx].area
# Se buscan los usuarios quienes tienen permisos para el log de producion por que el usuario
# quien actualiza las ordenes de producion es el que tiene la autorizacion_produccion,
# este proceso de envio de correo esta orientado a informar a los usuarios quienes
# Deben actualizar las otras informaciones como fecha de compromisos y comentarios adicionales
SELECT a.correo FROM seg0003 a,seg0001 b
WHERE a.actualizacion_log_produccion = 'SI' AND
b.departamento = arr_ordenes[idx].departamento AND
a.usuario = b.usuario
LET j = 1
FOREACH buscacorreo INTO copiacorreo[j]
LET copiaemail = copiaemail CLIPPED,";",copiacorreo[j]
LET j = j + 1
END FOREACH
SELECT a.email INTO email FROM seg0000 a
WHERE a.sec_vend = arr_ordenes[idx].sec_vend
IF arr_ordenes[idx].estado_produccion IS NULL THEN
LET arr_ordenes[idx].estado_produccion ='SIN EVALUAR'
END IF
IF arr_ordenes[idx].estado_producto IS NULL THEN
LET arr_ordenes[idx].producto ='SIN EVALUAR'
END IF
LET email = email CLIPPED,';','soporteclientes@marmotech.com.do'
LET emailsubject = arr_ordenes[idx].num_oc USING "&&&&&&"," ",arr_ordenes[idx].cliente CLIPPED
IF arr_ordenes[idx].fecha_compromiso IS NOT NULL THEN
LET emailbody = " LA ORDEN ",arr_ordenes[idx].num_oc USING "&&&&&&"," FUE ACTUALIZADA CON LA FECHA PRODUCCION ",arr_ordenes[idx].fecha_compromiso USING "dd/mm/yyyy",
" EL ESTADO DE LA PRODUCCION: ",arr_ordenes[idx].estado_produccion CLIPPED,
" ",arr_ordenes[idx].observacion CLIPPED," Y EL ESTADO DEL PRODUCTO ",
arr_ordenes[idx].producto CLIPPED
IF arr_ordenes[idx].observacion IS NULL OR arr_ordenes[idx].observacion = ' ' THEN
LET arr_ordenes[idx].observacion = emailbody CLIPPED
END IF
ELSE
LET emailbody = " LA ORDEN ",arr_ordenes[idx].num_oc USING "&&&&&&"," FUE ACTUALIZADA ",
" EL ESTADO DE LA PRODUCCION ESTA EN ",arr_ordenes[idx].estado_produccion CLIPPED,
" ",arr_ordenes[idx].observacion CLIPPED," Y EL ESTADO DEL PRODUCTO ",
arr_ordenes[idx].estado_producto CLIPPED
IF arr_ordenes[idx].observacion IS NULL OR arr_ordenes[idx].observacion = ' ' THEN
LET arr_ordenes[idx].observacion = emailbody CLIPPED
END IF
END IF
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
CALL envia_correo(email,copiaemail,emailbody,emailsubject,procedimiento)
INSERT INTO prordenstatus(fecha_trx,num_oc,cerrada,observacion,fecha_compromiso,usuario,
cod_n,cod_grupo,cod_tipo,cod_sec)
VALUES (GETDATE(),arr_ordenes[idx].num_oc,arr_ordenes[idx].cerrada,
arr_ordenes[idx].observacion,arr_ordenes[idx].fecha_compromiso,usuarios,
arr_ordenes[idx].cod_n,arr_ordenes[idx].cod_grupo,arr_ordenes[idx].cod_tipo,
arr_ordenes[idx].cod_sec)
LET numero_msg = 1
CALL msg(numero_msg)
END IF
END IF
END FOR
END IF
EXIT INPUT
END INPUT
ON ACTION limpiar
LET fecha1 = NULL
LET fecha2 = NULL
LET busqueda = NULL
DISPLAY BY NAME fecha1,fecha2
CALL arr_ordenes.clear()
CLEAR FORM
ON ACTION CANCEL
LET fecha1 = NULL
LET fecha2 = NULL
LET busqueda = NULL
DISPLAY BY NAME fecha1,fecha2
EXIT DIALOG
EXIT PROGRAM
END DIALOG
END FUNCTION
FUNCTION busca_fecha(xnum_oc,xcodn,xcodgrupo,xcodtipo,xcodsec)
DEFINE xnum_oc INT,
xcodn,xcodgrupo,xcodtipo,xcodsec SMALLINT,
afecha_llegada DYNAMIC ARRAY OF RECORD
fecha_llegada CHAR(10),
num_req INT,
fecha CHAR(10)
END RECORD,
k smallint
OPEN WINDOW prfmwd014 AT 10,10 WITH FORM "prfmwd014"
DISPLAY xnum_oc TO num_oc
DECLARE busca_req CURSOR FOR
SELECT DISTINCT CONVERT(CHAR(10),a.fecha_llegada,103),a.num_req,
CONVERT(CHAR(10),b.fecha,103) FROM cctb00026 a,cctb00025 b
WHERE a.num_oc = xnum_oc AND
a.num_req = b.num_req AND
a.cod_n = xcodn AND
a.cod_grupo = xcodgrupo AND
a.cod_tipo = xcodtipo AND
a.cod_sec = xcodsec
LET k = 1
FOREACH busca_req INTO afecha_llegada[k].*
LET k = k + 1
END FOREACH
CALL set_count(k-1)
INPUT ARRAY afecha_llegada WITHOUT DEFAULTS FROM s_llegada.*
CLOSE WINDOW prfmwd014
END FUNCTION
FUNCTION prprrp016(pnum_oc)
DEFINE busqueda RECORD
cotizacion_no INT,
fecha CHAR(10),
tipo_cliente SMALLINT,
sec_cliente INT,
nombre_proyecto CHAR(40),
direccion_proyecto CHAR(40),
telefono_r CHAR(15),
nombre CHAR(40),
num_oc INT,
fecha_oc CHAR(10),
fecha_entrega CHAR(10),
fecha_cierre CHAR(10),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(100),
unidad_med CHAR(4),
cantidad DEC(12,5),
precio DEC(12,2),
cantidad_2 DEC(12,5),
cod_mov CHAR(60),
fecha_doc CHAR(10),
documento INT,
status_mov SMALLINT,
simbolo CHAR(6),
vendedor CHAR(50),
monto_cotizacion DEC(12,2),
condicion CHAR(30),
estado_orden CHAR(20),
avance CHAR(20),
monto_avance DEC(12,2),
fecha_avance CHAR(10),
codigo CHAR(31),
factura INT,
bodega SMALLINT
END RECORD,
pnum_oc INT
LET selec =
"SELECT a.cotizacion_no,CONVERT(CHAR(10),a.fecha,103) as fecha_cotizacion,a.tipo_cliente,a.sec_cliente, ",
"a.nombre_proyecto, ",
"a.direccion_proyecto,a.telefono_r, ",
"b.nombre,c.num_oc,CONVERT(CHAR(10),c.fecha_oc,103) as fecha_orden,",
"CONVERT(CHAR(10),c.fecha_entrega,103) as fecha_entrega,CONVERT(CHAR(10),c.fecha_cierre,103) as fecha_cierre,",
"x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_sec,",
"e.descrip_esp,e.unidad_med, SUM(x1.cantidad),'0',",
"i.simbolo,'('+CAST(a.sec_vend as char(7))+')'+ISNULL(RTRIM(j.nom1_emp),' ')+' '+ISNULL(RTRIM(j.nom2_emp),' ')+' '+ISNULL(RTRIM(j.apell1_emp),' ') as vendedor, ",
"a.total_neto, k.descrip, CASE WHEN c.cerrada='S' THEN 'CERRADA' ELSE 'ABIERTA' END ",
"FROM vetb00050 a,vetb00004 b,vetb00012 k,vetb00061 i,adtb00003 j,iptb00002 e, prtb00012 c,prtb00013 x1 ",
" WHERE a.cotizacion_no = c.cotizacion_no and ",
" a.tipo_cliente = b.tipo_cliente AND ",
" a.sec_cliente = b.sec_cliente and ",
" a.sec_vend = j.num_emp AND ",
" a.cond_pago = k.cond_pago AND ",
" a.ventas =i.ventas AND ",
" c.num_oc = x1.num_oc and ",
" c.num_oc = ",pnum_oc," AND ",
" e.cod_n = x1.cod_n and ",
" e.cod_grupo =x1.cod_grupo AND ",
" e.cod_tipo = x1.cod_tipo and ",
" e.cod_sec =x1.cod_sec ",
" GROUP BY a.cotizacion_no,a.fecha,a.tipo_cliente,a.sec_cliente, ",
"a.nombre_proyecto, c.cerrada, ",
"a.direccion_proyecto,a.telefono_r,",
"b.nombre,c.num_oc,c.fecha_oc, ",
"c.fecha_entrega,c.fecha_cierre,",
"x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_sec,",
"e.descrip_esp,e.unidad_med, ",
"i.simbolo,a.sec_vend ,j.nom1_emp,j.nom2_emp,j.apell1_emp,",
" a.total_neto, k.descrip",
" ORDER BY x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_sec "
PREPARE comando1 FROM selec
DECLARE busca CURSOR FOR comando1
OPEN busca
LET r_filename = 'prprmt011a.4rp'
CALL seleccionarSalida() RETURNING r_output
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
# LET r_output='SVG' CLIPPED
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT reporte_16a TO XML HANDLER HANDLER
LET idx = 1
FOREACH busca INTO busqueda.cotizacion_no,busqueda.fecha,busqueda.tipo_cliente,
busqueda.sec_cliente,busqueda.nombre_proyecto,busqueda.direccion_proyecto,
busqueda.telefono_r,busqueda.nombre,busqueda.num_oc,busqueda.fecha_oc,
busqueda.fecha_entrega,busqueda.fecha_cierre,busqueda.cod_n,
busqueda.cod_grupo,busqueda.cod_tipo,busqueda.cod_sec,
busqueda.descrip_esp,busqueda.unidad_med,busqueda.cantidad,
busqueda.precio,
busqueda.simbolo,busqueda.vendedor,busqueda.monto_cotizacion,
busqueda.condicion,busqueda.estado_orden
LET busqueda.avance = null
LET busqueda.fecha_avance= NULL
LET busqueda.monto_avance = NULL
SELECT MAX(a.num_doc),MAX(a.fecha_orig)
INTO busqueda.avance,busqueda.fecha_avance,
busqueda.monto_avance
FROM cctb00001 a
WHERE a.num_cheque = busqueda.cotizacion_no and
a.tipo_Doc = 'AV' and a.tipo_cliente = busqueda.tipo_cliente and
a.sec_cliente = busqueda.sec_cliente and a.status_t is null and
a.fecha_orig > '08/01/2009'
LET busqueda.codigo = busqueda.cod_n using "&&&&","-",
busqueda.cod_grupo USING "&&&&","-",
busqueda.cod_tipo USING "&&&&","-",
busqueda.cod_Sec USING "&&&&&&&"
LET selec1 =
" SELECT a.num_doc,CONVERT(CHAR(10),a.fecha,103),a.cod_mov,b.descrip_mov,a.cantidad_2,a.bodega,a.factura ",
" FROM iptb00006 a,iptb00005 b ",
" WHERE a.cod_mov = b.cod_mov AND ",
" a.num_oc = ",pnum_oc," AND ",
" a.cod_n = ",busqueda.cod_n," AND ",
" a.cod_grupo = ",busqueda.cod_grupo," AND ",
" a.cod_tipo = ",busqueda.cod_tipo, " AND ",
" a.cod_sec = ",busqueda.cod_sec," AND ",
" a.status_t IS NULL AND b.cod_mov in (30,31,55,12,13,56) ",
" ORDER BY a.fecha "
PREPARE transacciones FROM selec1
DECLARE trx_cursor CURSOR FOR transacciones
LET noencontre = "NO"
FOREACH trx_cursor INTO busqueda.documento,busqueda.fecha_doc,busqueda.cod_mov,
busqueda.cod_mov,busqueda.cantidad_2,busqueda.bodega,busqueda.factura
# BUSQUEDA FACTURA DE VENTAS
# LET busqueda.factura =NULL
# SELECT MAX(a.factura) INTO busqueda.factura
# FROM vetb00002 a
# WHERE a.conduce = busqueda.documento AND
# a.bodega = busqueda.bodega AND
# a.status_t IS NULL
IF busqueda.cantidad_2 IS NULL THEN
LET busqueda.cantidad_2 = 0
END IF
LET noencontre="SI"
OUTPUT TO REPORT reporte_16a(busqueda.*)
END FOREACH
IF noencontre = "NO" THEN
LET busqueda.documento=NULL
LET busqueda.cantidad_2=0
LET busqueda.fecha_doc=NULL
LET busqueda.cod_mov=NULL
LET busqueda.factura=NULL
OUTPUT TO REPORT reporte_16a(busqueda.*)
END IF
LET idx = idx + 1
END FOREACH
FINISH REPORT reporte_16a
END IF
END FUNCTION
REPORT reporte_16a(x)
DEFINE x RECORD
cotizacion_no INT,
fecha CHAR(10),
tipo_cliente SMALLINT,
sec_cliente INT,
nombre_proyecto CHAR(40),
direccion_proyecto CHAR(40),
telefono_r CHAR(15),
nombre CHAR(40),
num_oc INT,
fecha_oc CHAR(10),
fecha_entrega CHAR(10),
fecha_cierre CHAR(10),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(100),
unidad_med CHAR(4),
cantidad DEC(12,5),
precio DEC(12,2),
cantidad_2 DEC(12,5),
cod_mov CHAR(60),
fecha_doc CHAR(10),
documento INT,
status_mov SMALLINT,
simbolo CHAR(6),
vendedor CHAR(50),
monto_cotizacion DEC(12,2),
condicion CHAR(30),
estado_orden CHAR(20),
avance CHAR(20),
monto_avance DEC(12,2),
fecha_avance CHAR(10),
codigo CHAR(31),
factura INT,
bodega SMALLINT
END RECORD,
balance DEC(12,5),
v CHAR(1),
codigoant CHAR(11)
ORDER BY x.cotizacion_no,x.num_oc,x.codigo
FORMAT
BEFORE GROUP OF x.cotizacion_no
PRINTX x.cotizacion_no,x.direccion_proyecto,x.nombre,x.nombre_proyecto,
x.tipo_cliente,x.sec_cliente,x.telefono_r,x.num_oc,x.fecha,x.fecha_cierre,
x.fecha_entrega,x.fecha_oc
BEFORE GROUP OF x.codigo
IF codigoant <> x.codigo THEN
LET codigoant = x.codigo
END IF
PRINTX x.codigo,x.descrip_esp,x.unidad_med
LET balance = x.cantidad
ON EVERY ROW
IF x.status_mov <> 3 THEN
LET balance = balance + x.cantidad_2
END IF
PRINTX x.cantidad,x.cantidad_2,x.cod_mov,x.fecha_Doc,
x.documento,balance,x.precio,x.simbolo,v,x.avance,x.fecha_avance,
x.monto_avance,x.vendedor,x.monto_cotizacion,x.condicion,x.status_mov,
x.estado_orden,x.factura
LET x.cantidad = 0
END REPORT
FUNCTION fparciales(xnum_oc,xcodn,xcodgrupo,xcodtipo,xcodsec,xfecha,xproducto)
DEFINE xcodn,xcodgrupo,xcodtipo,xcodsec,i1 SMALLINT,
xnum_oc INT,
xfecha DATE,
xproducto STRING
CALL arrparcial.clear()
OPEN WINDOW prfmwd015 AT 10,10 WITH FORM "prfmwd015"
DISPLAY xnum_oc TO num_oc
DISPLAY xproducto TO producto
DECLARE busca_parcial CURSOR FOR
SELECT CONVERT(CHAR(10),a.fecha_compromiso,103),a.cantidad FROM prtb00028 a
WHERE a.num_oc = xnum_oc AND
a.cod_n = xcodn AND
a.cod_grupo = xcodgrupo AND
a.cod_tipo = xcodtipo AND
a.cod_sec = xcodsec
LET i1 = 1
FOREACH busca_parcial INTO arrparcial[i1].*
LET i1 = i1 + 1
END FOREACH
CALL set_count(i1-1)
INPUT ARRAY arrparcial WITHOUT DEFAULTS FROM sparcial.*
AFTER FIELD fecha
LET i1 = arr_curr()
IF arrparcial[i1].fecha IS NOT NULL THEN
IF arrparcial[i1].fecha < xfecha THEN
CALL msg(64)
NEXT FIELD fecha
END IF
END IF
AFTER INPUT
IF INT_FLAG THEN
CALL msg(2)
LET INT_FLAG = FALSE
EXIT INPUT
END IF
IF puesto = 'ADM PRODUCCION' OR puesto = 'ADMINISTRATOR' THEN
# WHENEVER ERROR CONTINUE
# BEGIN WORK
FOR idx = 1 TO arr_count()
IF arrparcial[idx].fecha IS NOT NULL THEN
DELETE FROM prtb00028 WHERE num_oc = xnum_oc AND
fecha_compromiso = arrparcial[idx].fecha AND
cod_n = xcodn AND
cod_grupo = xcodgrupo AND
cod_tipo = xcodtipo AND
cod_sec = xcodsec
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR ENTREGAS PARCIALES","INFO")
EXIT FOR
END IF
INSERT INTO prtb00028 (num_oc,fecha_compromiso,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,us_crea,fech_Crea)
VALUES(xnum_oc,arrparcial[idx].fecha,xcodn,xcodgrupo,xcodtipo,xcodsec,arrparcial[idx].cantidad,usuarios,getdate())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR ENTREGAS PARCIALES","INFO")
EXIT FOR
END IF
END IF
END FOR
# COMMIT WORK
END IF
EXIT INPUT
END INPUT
CLOSE WINDOW prfmwd015
END FUNCTION
FUNCTION desplega_dibujo(xnumero)
DEFINE xnumero INT,
desplega DYNAMIC ARRAY OF CHAR(100),
zruta,pruta STRING
OPEN WINDOW w1 WITH FORM "prfmmt012"
DECLARE busca_imagen CURSOR FOR
SELECT a.ruta_file,a.id
FROM prtb00029 a
WHERE a.num_oc = xnumero
ORDER BY a.id
LET idx = 1
FOREACH busca_imagen INTO desplega[idx]
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY xnumero TO num_oc
DISPLAY ARRAY desplega TO sdibujo.*
BEFORE ROW
LET idx = arr_curr()
DISPLAY desplega[idx] TO imagen
AFTER ROW
LET idx = arr_curr()
DISPLAY desplega[idx] TO imagen
ON ACTION imprime
LET r_output='PDF'
LET preview = TRUE
LET r_filename ="prprmt011.4rp"
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
START REPORT rdibujo TO XML HANDLER HANDLER
LET pruta = desplega[idx] CLIPPED
CALL remplazachar(pruta) RETURNING zruta
OUTPUT TO REPORT rdibujo(zruta,xnumero)
FINISH REPORT rdibujo
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
CLOSE WINDOW w1
END FUNCTION
REPORT rdibujo(xruta,znumero)
DEFINE xruta CHAR(150),
znumero, xtipo,xsec,xcotiza INT,
xfecha CHAR(10),
xcliente CHAR(60),
tiempo CHAR(30)
FORMAT
FIRST PAGE HEADER
LET tiempo = current
SELECT a.tipo_cliente,a.sec_cliente,b.nombre,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no
INTO xtipo,xsec,xcliente,xfecha,xcotiza
FROM prtb00012 a,vetb00004 b
WHERE a.num_oc = znumero AND
a.tipo_cliente = b.tipo_cliente AND
a.sec_cliente = b.sec_cliente
ON EVERY ROW
PRINTX xruta,xtipo,xsec,xcliente,xfecha,xcotiza,znumero,tiempo
END REPORT
REPORT rordenes(znumero,estado,estado_prod,xfecha_prod,vendedor,xcliente,xcotiza,xproducto,xfecha,xcantidad_ord,xpendiente,xcosto)
DEFINE estado CHAR(20),
estado_prod VARCHAR(50),
znumero, xcotiza INT,
xfecha CHAR(10),
xfecha_prod VARCHAR(10),
xcliente CHAR(60),
vendedor VARCHAR(60),
tiempo CHAR(25),
total_reg SMALLINT,
xproducto VARCHAR(100),
xcantidad_ord DEC(12,5),
xpendiente DEC(12,5),
xcosto, tmonto NUMERIC(12,2)
ORDER BY znumero
FORMAT
FIRST PAGE HEADER
LET tiempo = CURRENT
LET total_reg =0
ON EVERY ROW
LET tmonto = tmonto + xcosto
PRINTX znumero,estado,estado_prod,xfecha_prod,vendedor,xcliente,xfecha,xcotiza,tiempo,xproducto,
xcantidad_ord,xpendiente,xcosto
AFTER GROUP OF znumero
LET total_reg=total_reg+1
ON LAST ROW
PRINTX total_reg, tmonto
END REPORT
FUNCTION verificaordenNoAutorizada(pnum_oc)
DEFINE pnum_oc INT,
existe BOOLEAN
SELECT DISTINCT a.num_oc FROM cctb00026 a,cctb00025 b
WHERE a.num_oc = pnum_oc AND
a.num_req=b.num_req AND b.estado = 'NO AUTORIZADA' AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET existe = FALSE
ELSE
LET existe = TRUE
END IF
RETURN existe
END FUNCTION
FUNCTION verificaordenAutorizada(pnum_oc)
DEFINE pnum_oc INT,
existe BOOLEAN
SELECT DISTINCT a.num_oc FROM cctb00026 a,cctb00025 b
WHERE a.num_oc = pnum_oc AND
a.num_req=b.num_req AND b.estado = 'AUTORIZADA' AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET existe = FALSE
ELSE
LET existe = TRUE
END IF
RETURN existe
END FUNCTION
FUNCTION verificaordenNoReq(pnum_oc)
DEFINE pnum_oc INT,
existe BOOLEAN
SELECT DISTINCT a.num_oc FROM cctb00026 a,cctb00025 b
WHERE a.num_oc = pnum_oc AND
a.num_req=b.num_req AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET existe = TRUE
ELSE
LET existe = FALSE
END IF
RETURN existe
END FUNCTION
FUNCTION vepcmf008(num_cotizacion)
DEFINE chanula CHAR(3), salida STRING
DEFINE num_cotizacion INT, comprobante VARCHAR(100), psincroniza BOOLEAN, tbodega STRING
LET SELEC = " SELECT DISTINCT a.cod_cia,a.ventas,a.cotizacion_no,a.tipo_cliente,a.sec_cliente,a.nombre_cliente, " ||
" a.rnc,a.nombre_proyecto,a.direccion_cliente,a.cod_provincia,a.direccion_proyecto, " ||
" a.telefono_r,a.telefono_o,a.email,a.tipo_precio,a.beeper,a.celular,a.prima,a.fax1,a.celular1, " ||
" a.fax, CONVERT(CHAR(10),a.fecha,103),CONVERT(CHAR(10),a.fecha_entrega,103), " ||
" a.plazo_entrega,a.comentario,a.contacto, a.cond_pago,a.sec_Vend,a.porc_itbi," ||
" a.total_bruto,a.sub_total,a.monto_Desc,a.monto_itbi,a.total_neto,a.monto_dolar,a.num_emp_inst, " ||
" a.codigo_dgii,a.tipo_ncf,a.cliente_generico,a.sec_vend_aux,a.codigo,a.cod_zona,a.sincronizado, "||
" a.us_crea,a.fech_crea, a.us_mod,a.fech_mod,a.bodega,a.titulo_bodega "||
" FROM vetb00050 a " ||
" WHERE a.cotizacion_no = " || num_cotizacion CLIPPED || " AND a.status_t is null ",
" ORDER BY a.cotizacion_no"
PREPARE busca2 FROM selec
EXECUTE busca2 INTO p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente,
p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente,p_vetb50.cod_provincia,p_vetb50.direccion_proyecto,
p_vetb50.telefono_r,p_vetb50.telefono_o,p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1,
p_vetb50.fax, p_vetb50.fecha,p_vetb50.fecha_entrega,
p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_Vend,p_vetb50.porc_itbi,
p_vetb50.total_bruto,p_vetb50.sub_total,p_vetb50.monto_Desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar,
p_vetb50.num_emp_inst,p_vetb50.codigo_dgii,comprobante,
p_vetb50.cliente_generico,p_vetb50.sec_vend_aux,p_vetb50.codigo,p_vetb50.cod_zona,
psincroniza,
p_vetb50.us_crea,p_vetb50.fech_crea,p_vetb50.us_mod,p_vetb50.fech_mod,p_vetb50.bodega,tbodega
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL asignavalores()
LET data_imp.bodega = p_Vetb50.bodega
LET data_imp.tbodega = tbodega
CALL impresion(data_imp.*,'veprmt049.4rp','PDF',container.cuenta_item,container.etiqueta_cotiza) RETURNING salida
END FUNCTION
FUNCTION asignavalores()
LET data_imp.cotizacion_no = p_vetb50.cotizacion_no
LET data_imp.tipo_cliente = p_vetb50.tipo_cliente
LET data_imp.sec_cliente = p_vetb50.sec_cliente
LET data_imp.direccion_cliente = p_vetb50.direccion_cliente
LET data_imp.nombre = p_vetb50.nombre_cliente
LET data_imp.contacto = p_vetb50.contacto
LET data_imp.nombre_proyecto = p_vetb50.nombre_proyecto
LET data_imp.direccion_proyecto = p_vetb50.direccion_proyecto
LET data_imp.cond_pago = p_vetb50.cond_pago
LET data_imp.fecha = p_vetb50.fecha
LET data_imp.sec_vend = p_Vetb50.sec_vend
LET data_imp.nombre_cliente = p_vetb50.nombre_cliente
LET data_imp.total_neto = p_vetb50.total_neto
LET data_imp.comentario = p_vetb50.comentario
LET data_imp.nombre_vend = container.vendedor
LET data_imp.rnc = p_vetb50.rnc
LET data_imp.telefono_o =p_vetb50.telefono_o
LET data_imp.telefono_r = p_vetb50.telefono_r
LET data_imp.celular = p_vetb50.celular
LET data_imp.celular1 = p_vetb50.celular1
LET data_imp.email = p_vetb50.email
LET data_imp.orden =container.orden
LET data_imp.plazo_entrega = p_vetb50.plazo_entrega
LET data_imp.num_emp_int = p_vetb50.num_emp_inst
LET data_imp.sub_total = p_vetb50.sub_total
LET data_imp.monto_desc = p_vetb50.monto_desc
LET data_imp.porc_itbis = p_vetb50.porc_itbi
LET data_imp.neto = p_vetb50.total_neto
LET data_imp.total_bruto = p_vetb50.total_bruto
LET data_imp.vendedor_aux = p_vetb50.sec_vend_aux
LET data_imp.monto_itbis = p_vetb50.monto_itbi
END FUNCTION