Files
MBS/PROYECTO/ccdir/ccprmt003.4gl
T

2769 lines
95 KiB
Plaintext

{
-----------------------------------------------------------------------------
PROGRAMA : CCPRMT003
OBJETIVO : Generacion de Notas de Credito Por Avance a Orden.
REALIZADO POR : Tadeo A. Ferreras
FECHA : Enero 26, 1993
-----------------------------------------------------------------------------
}
GLOBALS "ccprgb000.4gl"
DEFINE xvalorck, xvalorCr, xvalorEfectivo, xvalorComision, xvalorLink,
link_pesos,efectivo_pesos,tarjeta_pesos,ck_pesos,tasa,monto_av, cr_pesos, xefectivo_pesos, xck_pesos, xlink_pesos, xcr_pesos DEC(12, 2) ,ventas int
DEFINE decenas DYNAMIC ARRAY OF CHAR(20)
DEFINE centenas DYNAMIC ARRAY OF CHAR(20)
DEFINE
unidades1 DYNAMIC ARRAY OF CHAR(20),
soporteVentas VARCHAR(100),
tieneorden BOOLEAN,
xestado VARCHAR(20),
ptasa, diferencia, remanente, xmontoDeposito, p_comision, v_comision
DEC(12, 2),
pventas CHAR(1),
tipoimprime VARCHAR(2),
xventas CHAR(1),
email_cliente,
vendedorEmail,
xusername,
xsmtphost,
xsmtpport,
xpassword,
estado_req
VARCHAR(100),
entradaDiario VARCHAR(25),
i, plataforma SMALLINT,
deposito, rdeposito,tipo_cuenta INT,
monto_link DECIMAL(12, 2)
DEFINE
otro_num, recibo_cons, recibo_Ext, psecvend1, XidEntrada INT,
psimbolo CHAR(10),
pmoneda CHAR(20),
ch_itbis CHAR(2),
ppaga_itbis CHAR(1),
fecha_vence DATE
DEFINE registroEntrada DYNAMIC ARRAY OF RECORD
referenciaEntrada VARCHAR(25),
fecha DATE,
tipo CHAR(1),
cuenta_no VARCHAR(8),
departamento INT,
detalle VARCHAR(100),
debito, credito DEC(12, 2)
END RECORD
DEFINE
valor_orig, montos_avance DECIMAL(12, 2),
valor_letras CHAR(240)
DEFINE nombre1, nombre2, apell CHAR(15)
DEFINE nombre_ven, nombre_cli STRING
DEFINE tipo_p CHAR(1)
DEFINE
recibo_nc RECORD
num_doc INTEGER,
num_orden INTEGER,
tipo_cliente INTEGER,
sec_cliente INTEGER,
cod_emp_sec INTEGER,
cuenta_no CHAR(8),
fecha DATE,
avance DECIMAL(12, 2)
END RECORD,
pcondpago SMALLINT,
psecvend INT,
valor_cotizado DEC(12, 2),
codigodgii VARCHAR(10),
comprobante VARCHAR(100)
####### Funcion para agregar un recibo de pago Por Avance
MAIN
DEFER INTERRUPT
CALL STARTLOG("ccprmt03.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT TO "marmotech" AS "IFMX" USER usuarios USING clave
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
SELECT a.nombre, a.rnc, a.direccion, a.telefono, a.fax
INTO p_companias.nombre,
p_companias.rnc,
p_companias.direccion,
p_companias.telefono,
p_companias.fax
FROM companias a
SELECT UNIQUE a.sucid, a.sucnombre
INTO codigo_sucursal, nombre_sucursal
FROM sucursales a, seg0001 b
WHERE b.usuario = usuarios AND b.sucid = a.sucid
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage(
"ERROR",
"USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS",
"STOP")
EXIT PROGRAM
END IF
CALL ccprmt003()
END MAIN
FUNCTION ccprmt003()
OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23
#CALL pantalla()
OPEN FORM ccfmmt003 FROM "ccfmmt003"
DISPLAY FORM ccfmmt003
DISPLAY "ccprmt003" AT 4, 3
DISPLAY "Generacion Nota de Credito Por Avance Orden" AT 6, 18
DISPLAY nombre_sucursal TO localidad
MENU
ON ACTION nuevo
LET tipo_p = "A"
CLEAR FORM
INITIALIZE recibo_nc.* TO NULL
LET recibo_nc.fecha = TODAY
CALL ccpcad003()
ON ACTION buscar
LET tipo_p = "C"
INITIALIZE recibo_nc.* TO NULL
SET CONNECTION "IFMX"
CALL ccpcmf003()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION ccpcad003()
DEFINE
hoy DATE,
generaE BOOLEAN
LET hoy = NULL
LABEL volver:
INPUT BY NAME recibo_nc.*,
tipoimprime,
monto_efectivo,
monto_ck,
monto_cr,
monto_link,
recibo.comentario,
ch_itbis,
plataforma,tasa
WITHOUT DEFAULTS
## AQUI SE PREPARA PARA LA CAPTURA DE INFORMACION
BEFORE INPUT
LET monto_efectivo = 0
LET monto_ck = 0
LET monto_cr = 0
LET monto_link = 0
LET efectivo_pesos=0
LET ck_pesos=0
LET tarjeta_pesos=0
LET link_pesos=0
# Limpia en pantalla los valores en pesos para que no quede el de un recibo anterior
DISPLAY BY NAME efectivo_pesos, ck_pesos, tarjeta_pesos, link_pesos
LET tipoimprime = 'MT'
DISPLAY BY NAME tipoimprime
LET ch_itbis = 'SI'
DISPLAY BY NAME ch_itbis
CALL plataformapago()
CALL cuenta()
NEXT FIELD Num_orden
SELECT UNIQUE a.sucid, a.sucnombre
INTO codigo_sucursal, nombre_sucursal
FROM sucursales a, seg0001 b
WHERE b.usuario = usuarios AND b.sucid = a.sucid
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage(
"ERROR",
"USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS",
"STOP")
EXIT PROGRAM
END IF
AFTER FIELD cod_emp_Sec
SELECT a.nom1_emp || " " || a.apell1_Emp
INTO nombre_ven
FROM adtb00003 a
WHERE a.num_emp = recibo_nc.cod_Emp_sec
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD cod_emp_sec
END IF
DISPLAY BY NAME nombre_ven
AFTER FIELD num_orden
LET monto_efectivo = 0
LET monto_ck = 0
LET monto_cr = 0
LET monto_link = 0
IF recibo_nc.num_orden IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_orden
END IF
LET nombre_cli = NULL
{SELECT UNIQUE a.tipo_cliente,a.sec_cliente,b.nombre,CONVERT(char(10),a.fecha_oc,103)
INTO recibo_nc.tipo_cliente,recibo_nc.sec_cliente,nombre_cli,
recibo_nc.fecha
FROM prtb00012 a, b
WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente
AND a.num_oc = recibo_nc.num_orden
}
IF tipo_p = 'A' THEN
LET xnombre_proyecto = NULL
LET xnombre_provincia = NULL
LET xdireccion = NULL
LET nombre_cli = NULL
LET recibo_nc.avance = 0
LET psecvend1 = NULL
LET condicionPago = NULL
SET CONNECTION "MSSQL"
SELECT UNIQUE a.tipo_cliente,
a.sec_cliente,
a.nombre_cliente,
a.nombre_proyecto,
c.nombre_provincia,
a.direccion_cliente,
a.cond_pago,
a.sec_vend,
a.total_neto,
a.codigo_dgii,
ISNULL(a.sec_vend_aux, 0),
a.ventas,
d.descrip,
b.patente,
a.ventas
INTO recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
nombre_cli,
xnombre_proyecto,
xnombre_provincia,
xdireccion,
pcondpago,
psecvend,
valor_cotizado,
codigodgii,
psecvend1,
pventas,
condicionPago,
email_cliente,
opcion
FROM vetb00050 a, vetb00004 b, vetb00020 c, vetb00012 d
WHERE a.tipo_cliente = b.tipo_cliente
AND a.sec_cliente = b.sec_cliente
AND a.cotizacion_no = recibo_nc.num_orden
AND b.cod_provincia = c.cod_provincia
AND a.cond_pago = d.cond_pago
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_orden
END IF
# LET nombre_cli = nombre_cli CLIPPED," ",recibo_nc.tipo_cliente USING "<<","-",recibo_nc.sec_cliente USING "<<<<<<<"
IF psecvend1 = 0 THEN
LET recibo_nc.cod_emp_sec = psecvend
ELSE
LET recibo_nc.cod_emp_sec = psecvend1
END IF
# BUSCA DESCRIPCION COMPROBANTE
SELECT a.tipo_ncf, a.fecha_vencimiento
INTO comprobante, fecha_vence
FROM vetb00071 a
WHERE a.codigo_dgii = codigodgii AND a.disponible = 'S'
DISPLAY BY NAME valor_cotizado,
comprobante,
codigodgii,
condicionPago
#BUSCA LA TASA
SELECT ISNULL(a.prima, 0)
INTO ptasa
FROM vetb00019 a
WHERE a.disponible = 'S'
CALL procesaCliente(recibo_nc.tipo_cliente) RETURNING verdad
SELECT a.paga_itbis, a.ventas, a.idEntrada
INTO ppaga_itbis, xventas, XidEntrada
FROM vetb00060 a
WHERE a.tipo_cliente = recibo_nc.tipo_cliente
IF ppaga_itbis = 'N' THEN
LET ch_itbis = 'NO'
ELSE
LET ch_itbis = "SI"
END IF
IF pventas = '1' THEN
LET diferencia = 100
ELSE
LET diferencia = 100 / ptasa
END IF
# LET monto_cr=valor_cotizado
DISPLAY BY NAME monto_cr, email_cliente
#SUMA AVANCES
LET montos_avance = 0
SELECT ISNULL(SUM(a.valor), 0)
INTO montos_avance
FROM cctb00001 a
WHERE a.documento_ref = recibo_nc.num_orden
AND a.tipo_Doc = 'AV'
AND a.num_doc = a.aplica_a
AND a.tipo_cliente = recibo_nc.tipo_cliente
AND a.sec_cliente = recibo_nc.sec_cliente
AND a.status_t IS NULL
DISPLAY BY NAME montos_avance
LET remanente = valor_cotizado - montos_avance
DISPLAY BY NAME remanente
END IF
IF tipo_p = 'C' THEN
LET condicionPago = NULL
SELECT UNIQUE a.tipo_cliente,
a.sec_cliente,
a.nombre_cliente,
d.descrip,
a.ventas
INTO recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
nombre_cli,
condicionPago,
opcion
FROM vetb00050 a, vetb00004 b, vetb00012 d
WHERE a.tipo_cliente = b.tipo_cliente
AND a.sec_cliente = b.sec_cliente
AND a.cotizacion_no = recibo_nc.num_orden
AND a.cond_pago = d.cond_pago
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_orden
END IF
CALL procesaCliente(recibo_nc.tipo_cliente) RETURNING verdad
END IF
LET nombre_cli =
nombre_cli CLIPPED,
" ",
recibo_nc.tipo_cliente USING "<<",
"-",
recibo_nc.sec_cliente USING "<<<<<<<"
# SELECT UNIQUE a.sec_vend INTO recibo_nc.cod_emp_sec FROM vetb00028 a
# WHERE a.tipo_cliente = recibo_nc.tipo_cliente AND
# a.sec_cliente = recibo_nc.sec_cliente
LET nombre_ven = NULL
LET nombre1 = NULL
LET nombre2 = NULL
LET apell = NULL
SELECT UNIQUE a.nom1_emp, a.nom2_emp, a.apell1_emp
INTO nombre1, nombre2, apell
FROM adtb00003 a
WHERE a.num_emp = recibo_nc.cod_emp_sec
LET nombre_ven =
nombre1 CLIPPED, " ", nombre2 CLIPPED, " ", apell CLIPPED
DISPLAY BY NAME recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
nombre_cli,
recibo_nc.cod_emp_sec,
nombre_ven,
valor_cotizado
ATTRIBUTE(REVERSE)
DISPLAY BY NAME recibo_nc.fecha ATTRIBUTE(BLUE)
AFTER FIELD fecha
IF recibo_nc.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = recibo_nc.fecha
CALL prd(p_fechas, usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha
END IF
AFTER FIELD monto_efectivo
LET recibo_nc.avance = 0
LET efectivo_pesos=0
LET recibo_nc.avance =
monto_ck + monto_efectivo + monto_cr + monto_link
LET efectivo_pesos=monto_efectivo*tasa
DISPLAY BY NAME recibo_nc.avance,efectivo_pesos
AFTER FIELD monto_ck
LET recibo_nc.avance = 0
LET ck_pesos=0
LET recibo_nc.avance =
monto_ck + monto_efectivo + monto_cr + monto_link
LET ck_pesos=monto_ck*tasa
DISPLAY BY NAME recibo_nc.avance,ck_pesos
AFTER FIELD monto_cr
LET recibo_nc.avance = 0
LET tarjeta_pesos=0
LET recibo_nc.avance =
monto_ck + monto_efectivo + monto_cr + monto_link
LET tarjeta_pesos=monto_cr*tasa
DISPLAY BY NAME recibo_nc.avance,tarjeta_pesos
AFTER FIELD monto_link
LET recibo_nc.avance = 0
LET link_pesos=0
LET recibo_nc.avance =
monto_ck + monto_efectivo + monto_cr + monto_link
LET link_pesos=monto_link*tasa
DISPLAY BY NAME recibo_nc.avance,link_pesos
AFTER FIELD tasa
IF opcion !=1 AND ventas !=1 THEN
IF tipo_cuenta = 1 THEN
# Cuenta en pesos y cliente en dolares: la tasa es obligatoria y no puede ser 1
IF tasa IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tasa
ELSE
IF tasa <= 1 THEN
CALL fgl_winmessage(
"TASA NO PERMITIDA",
"EL CLIENTE ES EN DOLARES Y LA CUENTA DE DEPOSITO ESTA EN PESOS.\n\nDEBE REGISTRAR LA TASA DE CAMBIO (MAYOR QUE 1). NO SE PERMITE DEJARLA EN 1.",
"STOP")
NEXT FIELD tasa
END IF
END IF
ELSE
IF tasa IS NULL OR tasa=0 THEN
LET tasa=1
END IF
END IF
END IF
IF opcion !=1 AND ventas=1 THEN
IF tasa IS NULL or tasa=0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tasa
END IF
END IF
LET link_pesos=0
LET tarjeta_pesos=0
LET ck_pesos=0
LET efectivo_pesos=0
LET link_pesos=monto_link*tasa
LET tarjeta_pesos=monto_cr*tasa
LET ck_pesos=monto_ck*tasa
LET efectivo_pesos=monto_efectivo*tasa
DISPLAY BY NAME link_pesos,efectivo_pesos,tarjeta_pesos,ck_pesos
AFTER FIELD plataforma
IF monto_cr != 0 THEN
SELECT a.comisiones
INTO p_comision
FROM cctb00009 a
WHERE a.id = plataforma
LET v_comision = monto_cr * (p_comision / 100)
DISPLAY BY NAME v_comision, p_comision
IF plataforma IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD plataforma
END IF
END IF
BEFORE FIELD avance
IF monto_ck IS NULL THEN
LET monto_ck = 0
END IF
IF monto_efectivo IS NULL THEN
LET monto_efectivo = 0
END IF
IF monto_cr IS NULL THEN
LET monto_cr = 0
END IF
IF monto_link IS NULL THEN
LET monto_link = 0
END IF
DISPLAY BY NAME recibo_nc.avance
AFTER FIELD cuenta_no
SELECT a.ventas INTO tipo_cuenta FROM cgtb00012 a
WHERE a.cuenta_no=recibo_nc.cuenta_no
NEXT FIELD tasa
# AFTER FIELD avance
# IF recibo_nc.avance IS NULL OR recibo_nc.avance < 0 THEN
# LET numero_msg = 16
# CALL msg(numero_msg)
# NEXT FIELD avance
# END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF opcion !=1 AND ventas!=1 AND tipo_cuenta = 1 THEN
# Cuenta en pesos y cliente en dolares: la tasa es obligatoria y no puede ser 1
IF tasa IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tasa
ELSE
IF tasa <= 1 THEN
CALL fgl_winmessage(
"TASA NO PERMITIDA",
"EL CLIENTE ES EN DOLARES Y LA CUENTA DE DEPOSITO ESTA EN PESOS.\n\nDEBE REGISTRAR LA TASA DE CAMBIO (MAYOR QUE 1). NO SE PERMITE DEJARLA EN 1.",
"STOP")
NEXT FIELD tasa
END IF
END IF
END IF
IF monto_cr > 0 THEN
IF plataforma IS NULL OR plataforma= 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD plataforma
END IF
END IF
IF monto_cr = 0 THEN
LET plataforma = 0
END IF
IF v_comision IS NULL THEN
LET v_comision = 0
END IF
IF monto_ck IS NULL THEN
LET monto_ck = 0
END IF
IF monto_efectivo IS NULL THEN
LET monto_efectivo = 0
END IF
IF monto_cr IS NULL THEN
LET monto_cr = 0
END IF
IF recibo_nc.num_orden IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_doc
END IF
IF recibo_nc.cuenta_no IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
IF recibo_nc.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
IF monto_efectivo IS NULL
AND monto_ck IS NULL
AND monto_cr IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"DEBES IDENTIFICAR LA VIA DEL INGRESO, EFECTIVO, CK O TARJETA",
"INFO")
NEXT FIELD monto_efectivo
END IF
IF recibo_nc.cod_emp_sec IS NULL OR recibo_nc.cod_emp_sec = 0 THEN
SELECT a.sec_vend, ISNULL(a.sec_vend_aux, 0)
INTO psecvend, psecvend1
FROM vetb00050 a
WHERE a.cotizacion_no = recibo_nc.num_orden
IF psecvend1 = 0 THEN
LET recibo_nc.cod_emp_sec = psecvend
ELSE
LET recibo_nc.cod_emp_sec = psecvend1
END IF
END IF
IF monto_ck = 0 AND monto_cr = 0 AND monto_efectivo=0 AND monto_link=0 THEN
CALL msg(16)
NEXT FIELD monto_efectivo
END IF
LET recibo_nc.avance =
monto_efectivo + monto_ck + monto_cr + monto_link
DISPLAY BY NAME recibo_nc.avance
IF recibo_nc.avance IS NULL OR recibo_nc.avance < 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto_efectivo
END IF
IF recibo_nc.avance = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD avance
END IF
IF codigo_sucursal IS NULL THEN
CALL fgl_Winmessage(
"ERROR",
"SUCURSAL ESTA EN BLANCO, USTED POSIBLEMENTE NO TIENE SUCURSAL ASIGNADA",
"INFO")
CONTINUE INPUT
END IF
# EN CASO QUE LA COTIZACION SEA AL CONTADO DEBE VERIFICAR SI TIENE ORDEN
IF pcondpago = 4 OR pcondpago = 10 THEN
CALL verifica_orden()
IF NOT tieneorden THEN
CALL msg(1018)
NEXT FIELD num_orden
END IF
END IF
END INPUT
INITIALIZE p_companias.* TO NULL
SELECT UNIQUE a.sucid, a.sucnombre
INTO codigo_sucursal, nombre_sucursal
FROM sucursales a, seg0001 b
WHERE b.usuario = usuarios AND b.sucid = a.sucid
#SI ES CLIENTE 17 - EXPORTACION PREGUNTA SI VA A AFECTAR EN FINANZAS
# POR DEFECTO SI SE AFECTA FINANZAS (IFMX) => afecta_ex = "YES".
# SOLO AL CLIENTE 17 (EXPORTACION) SE LE PREGUNTA; SI RESPONDE "NO" NO
# SE AFECTA. TODOS LOS DEMAS CLIENTES AFECTAN POR DEFECTO. LOS 18/19
# NUNCA VAN A IFMX PORQUE procesacliente() DEVUELVE verdad = FALSE.
LET afecta_ex = "YES"
IF recibo_nc.tipo_cliente = 17 THEN
LET afecta_ex =
fgl_winquestion(
"AFECTA",
"DESEA AFECTAR FINANZAS?",
"YES",
"YES|NO",
"QUESTION",
0)
END IF
#-------------------------------------- AFECTACION A FINANZAS ---------------------------
IF tipo_p = "A" THEN
# AQUI VIENE LA FUNCION PARA EVALUAR EL CLIENTE
SET CONNECTION "MSSQL"
# SE COLOCO EN COMENTARIO PORQUE SE ESTA TOMANDO OTRAS DECICIONES CON RELACION A LA ORDEN Y
# REQUISICIONES DE DESPACHOS FECHA: 30/12/2020
CALL genera_orden()
{SE PUSO EN COMENTARIO EL 23/12/2022, EN ESTE MOMENTO DESARROLLE UNA FUNCION PARA LOS PAGOS AL CONTADO,
ESTA PARTE EVALUA AL CLIENTE PARA SABER SI CON EL RECIBO DE INGRESO SE PUEDE AUTORIZAR UNA DE LAS REQUISICIONES
QUE TIENE
IF pcondpago <> 4 AND pcondpago <> 10 THEN
CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad
IF verdad THEN
CALL evalua_clientes()
END IF
END IF}
CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad
LET otro_num = 0
#------------------------------------------------------------------------
# AFECTACION A FINANZAS (IFMX): SOLO SI afecta_ex = "YES" (CLIENTE 17 + EL
# USUARIO RESPONDIO YES) Y EL CLIENTE ES AFECTABLE (verdad = TRUE).
# ESTE BLOQUE ES LO UNICO QUE ESCRIBE EN LA CONEXION IFMX. TODO LO DEMAS
# (smarmotech / MSSQL) SE EJECUTA SIEMPRE, FUERA DE ESTE IF.
#------------------------------------------------------------------------
IF afecta_ex = "YES" AND verdad = TRUE THEN
SET CONNECTION "IFMX"
SELECT a.nombre, a.rnc, a.direccion, a.telefono, a.fax
INTO p_companias.nombre,
p_companias.rnc,
p_companias.direccion,
p_companias.telefono,
p_companias.fax
FROM companias a
SELECT a.ult_recibo
INTO recibo_nc.num_doc
FROM cctb00003 a
WHERE a.tipo_doc = "AV"
IF recibo_nc.num_doc IS NULL THEN
LET recibo_nc.num_doc = 0
END IF
LET recibo_nc.num_doc = recibo_nc.num_doc + 1
LET otro_num = recibo_nc.num_doc
BEGIN WORK
UPDATE cctb00003
SET ult_recibo = recibo_nc.num_doc
WHERE tipo_doc = 'AV'
IF otro_num = 0 OR otro_num IS NULL THEN
CALL fgl_winmessage(
"ERROR", "PROBLEMAS EN EL CONTROL NUMERO", "STOP")
RETURN
END IF
DISPLAY BY NAME recibo_nc.num_doc ATTRIBUTE(REVERSE)
SELECT UNIQUE a.sucid, a.sucnombre
INTO codigo_sucursal, nombre_sucursal
FROM sucursales a, seg0001 b
WHERE b.usuario = usuarios AND b.sucid = a.sucid
INSERT INTO cctb00001(
cuenta_no,
cod_cia,
num_doc,
tipo_doc,
tipo_cliente,
sec_cliente,
cod_emp,
cod_emp_sec,
fecha_orig,
aplica_a,
documento_ref,
valor,
monto_desc,
us_crea,
fech_crea,
costo,
valor_efectivo,
valor_cheque,
valor_tarjeta,
sucid,
plataforma,
p_comision,
v_comision,
valor_link,efectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
VALUES(recibo_nc.cuenta_no,
p_companias.cod_comp,
recibo_nc.num_doc,
"AV",
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
codigo_sucursal,
recibo_nc.cod_emp_sec,
recibo_nc.fecha,
recibo_nc.num_doc,
recibo_nc.num_orden,
recibo_nc.avance,
0,
usuarios,
getdate(),
'1',
monto_efectivo,
monto_ck,
monto_cr,
codigo_sucursal,
plataforma,
p_comision,
v_comision,
monto_link,efectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
INSERT INTO cctb00011(
cod_cia,
tipo_cliente,
sec_cliente,
num_doc,
tipo_doc,
comentario,
us_crea,
fech_crea,
sucid,
valor_efectivo,
valor_cheque,
valor_tarjeta)
VALUES(p_companias.cod_comp,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.num_doc,
'AV',
recibo.comentario,
usuarios,
getdate(),
codigo_sucursal,
monto_efectivo,
monto_ck,
monto_cr)
COMMIT WORK
END IF
#---------------------------------------- TERMINO AFECTACION FINANZAS -------------------
SET CONNECTION "MSSQL"
SELECT a.ult_recibo
INTO recibo_nc.num_doc
FROM cctb00003 a
WHERE a.tipo_doc = "AV"
IF recibo_nc.num_doc IS NULL THEN
LET recibo_nc.num_doc = 0
END IF
LET recibo_nc.num_doc = recibo_nc.num_doc + 1
SELECT UNIQUE a.sucid, a.sucnombre
INTO codigo_sucursal, nombre_sucursal
FROM sucursales a, seg0001 b
WHERE b.usuario = usuarios AND b.sucid = a.sucid
IF recibo_nc.cuenta_no IS NOT NULL THEN
CALL numeroDeposito(
recibo_nc.cuenta_no,
recibo_nc.fecha,
codigo_sucursal,
pventas,
plataforma)
RETURNING rdeposito,
xmontoDeposito,
xvalorck,
xvalorCr,
xvalorEfectivo,
xvalorComision,
xvalorLink, xefectivo_pesos, xck_pesos, xlink_pesos, xcr_pesos
DISPLAY "XMONTODEPOSITO: ",xmontoDeposito," xvalorck: ",xvalorck," valorcr: ",xvalorCr,
" valorefectivo: ",xvalorEfectivo," xvalorComision: ",xvalorComision," valorlink: ",xvalorlink
IF rdeposito = 0 THEN
SELECT a.num_doc INTO deposito FROM tetb00009 a
IF deposito IS NULL THEN
LET deposito = 0
INSERT INTO tetb00009 VALUES(deposito)
END IF
LET deposito = deposito + 1
UPDATE tetb00009 SET num_doc = deposito
DISPLAY BY NAME deposito
END IF
END IF
#----------------------------------------------------------------------------------------------
# GENERA REGISTROS PARA LA ENTRADA AL DIARIO GENERAL
#----------------------------------------------------------------------------------------------
CALL GeneraEntradaDiario(
usuarios,
'RECIBOS INGRESOS',
XidEntrada,
recibo_nc.cuenta_no,
recibo_nc.fecha,
recibo_nc.avance,
0,
0,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
xventas,
0,
recibo_nc.num_doc,
v_comision)
RETURNING generaE, registroEntrada
FOR i = 1 TO registroEntrada.getLength()
IF registroEntrada[i].referenciaEntrada IS NOT NULL THEN
LET entradaDiario = registroEntrada[i].referenciaEntrada
DISPLAY "SECUENCIA DE ENTRADA: ", entradaDiario
END IF
END FOR
#-----------------------------------------------------------------------------------------------
BEGIN WORK
UPDATE cctb00003
SET ult_recibo = recibo_nc.num_doc
WHERE tipo_doc = 'AV'
IF recibo_nc.tipo_cliente = 19 OR recibo_nc.tipo_cliente = 18 THEN
LET ch_itbis = 'NO'
END IF
IF rdeposito > 0 THEN
LET deposito = rdeposito
END IF
INSERT INTO cctb00001(
cuenta_no,
cod_cia,
num_doc,
tipo_doc,
tipo_cliente,
sec_cliente,
cod_emp,
cod_emp_sec,
fecha_orig,
aplica_a,
documento_ref,
valor,
monto_desc,
us_crea,
fech_crea,
costo,
valor_efectivo,
valor_cheque,
valor_tarjeta,
factura_ext,
sucid,
referenciaEntrada,
num_doc_deposito,
valor_link,
plataforma,
p_comision,
v_comision,efectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
VALUES(recibo_nc.cuenta_no,
p_companias.cod_comp,
recibo_nc.num_doc,
"AV",
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
codigo_sucursal,
recibo_nc.cod_emp_sec,
recibo_nc.fecha,
recibo_nc.num_doc,
recibo_nc.num_orden,
recibo_nc.avance,
0,
SUSER_SNAME(),
GETDATE(),
'1',
monto_efectivo,
monto_ck,
monto_cr,
otro_num,
codigo_sucursal,
entradaDiario,
deposito,
monto_link,
plataforma,
p_comision,
v_comision,efectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
INSERT INTO cctb00011(
cod_cia,
tipo_cliente,
sec_cliente,
num_doc,
tipo_doc,
comentario,
us_crea,
fech_crea,
chitbis,
sucid,
valor_efectivo,
valor_cheque,
valor_tarjeta,
num_doc_relacionado,
valor_link)
VALUES(p_companias.cod_comp,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.num_doc,
'AV',
recibo.comentario,
usuarios,
getdate(),
ch_itbis,
codigo_sucursal,
monto_efectivo,
monto_ck,
monto_cr,
otro_num,
monto_link)
#ACTUALIZACION CONTABILIDAD GENERAL
IF generaE THEN
FOR idx = 1 TO registroEntrada.getLength()
IF registroEntrada[idx].cuenta_no IS NOT NULL THEN
INSERT INTO cgtb00004(
fecha,
tipo,
ref,
cuenta_no,
detalle_1,
departamento,
debito,
credito,
us_crea,
fech_crea,
tipo_doc_cxc,
num_doc_cxc,
tipo_cliente,
sec_cliente,
sucid,
valor_original,
nombre_proveedor)
VALUES(registroEntrada[idx].fecha,
registroEntrada[idx].tipo,
registroEntrada[idx].referenciaEntrada,
registroEntrada[idx].cuenta_no,
registroEntrada[idx].detalle,
registroEntrada[idx].departamento,
registroEntrada[idx].debito,
registroEntrada[idx].credito,
usuarios,
GETDATE(),
'AV',
recibo_nc.num_doc,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
codigo_sucursal,
recibo_nc.avance,
nombre_cli)
END IF
END FOR
END IF
#INSERTAR EN LA TABLA DE DEPOSITOS
IF recibo_nc.cuenta_no IS NOT NULL THEN
IF tipo_cuenta=1 THEN
IF opcion!=1 THEN
LET monto_av=efectivo_pesos+ck_pesos+link_pesos+ck_pesos
END IF
ELSE
LET monto_av=recibo_nc.avance
END IF
IF monto_av IS NULL THEN
LET monto_av=recibo_nc.avance
END if
IF rdeposito = 0 THEN
DISPLAY "en rdeposito =0, XMONTODEPOSITO: ",xmontoDeposito," xvalorck: ",xvalorck," valorcr: ",xvalorCr,
" valorefectivo: ",xvalorEfectivo," xvalorComision: ",xvalorComision," valorlink: ",xvalorlink
LET monto_av=0
INSERT INTO tetb00001(
num_doc,
cuenta_no,
fecha,
monto,
sucursal,
us_crea,
fech_crea,
monto_efectivo,
monto_ck,
monto_tarjeta,
monto_link,
plataforma,
p_comision,
v_comision,
ventas,efectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
VALUES(deposito,
recibo_nc.cuenta_no,
recibo_nc.fecha,
monto_av,
codigo_sucursal,
usuarios,
getdate(),
monto_efectivo,
monto_ck,
monto_cr,
monto_link,
plataforma,
p_comision,
v_comision,
pventas,efectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
ELSE
LET deposito = rdeposito
DISPLAY "en update rdeposito =0, XMONTODEPOSITO: ",xmontoDeposito," xvalorck: ",xvalorck," valorcr: ",xvalorCr,
" valorefectivo: ",xvalorEfectivo," xvalorComision: ",xvalorComision," valorlink: ",xvalorlink
IF xmontoDeposito IS NULL THEN
LET xmontoDeposito = 0
END IF
UPDATE tetb00001
SET monto = xmontoDeposito + monto_av,
monto_efectivo = xvalorEfectivo + monto_efectivo,
monto_tarjeta = xvalorCr + monto_cr,
monto_ck = xvalorck + monto_ck,
v_comision = v_comision + xvalorComision,
efectivo_pesos=xefectivo_pesos+efectivo_pesos,
tarjeta_pesos=xcr_pesos+tarjeta_pesos,
ck_pesos=xck_pesos+ck_pesos,
link_pesos=xlink_pesos+link_pesos
WHERE num_doc = rdeposito
END IF
INSERT INTO tetb00008(
num_doc,
tipo_doc,
documento,
fecha,
tipo_cliente,
sec_cliente,
nombre,
valor,
us_crea,
fech_crea)
VALUES(deposito,
'AV',
recibo_nc.num_doc,
recibo_nc.fecha,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
nombre_cli,
recibo_nc.avance,
usuarios,
getdate())
END IF
#------------------------------------------------------------------------------------------------
COMMIT WORK
IF afecta_ex ="YES" THEN
# RELACIONA EL RECIBO DE IFMX (MARMOTECH, num_doc = otro_num) CON EL
# NUMERO DE DOCUMENTO DE SMARMOTECH (recibo_nc.num_doc). SOLO CORRE
# CUANDO EL USUARIO RESPONDIO YES (CLIENTE 17). SI RESPONDIO NO, NO
# SE AFECTA IFMX Y ESTE UPDATE NO SE EJECUTA.
SET CONNECTION "IFMX"
UPDATE cctb00001
SET factura_ext = recibo_nc.num_doc
WHERE num_doc = otro_num
AND tipo_cliente = recibo_nc.tipo_cliente
AND sec_cliente = recibo_nc.sec_cliente
AND tipo_doc = 'AV'
END IF
SET CONNECTION "MSSQL"
# BUSCA EMAIL VENDEDOR
SELECT a.email
INTO vendedorEmail
FROM seg0000 a
WHERE a.sec_vend = recibo_nc.cod_emp_sec
# BUSCA SOPORTE VENTAS
LET soporteVentas = NULL
SELECT MAX(a.email)
INTO soporteVentas
FROM seg0001 a, vetb00093 b
WHERE b.cotizacion_no = recibo_nc.num_orden
AND b.sec_vend = a.num_emp
IF soporteVentas IS NOT NULL THEN
LET vendedorEmail = vendedorEmail CLIPPED, ";", soporteVentas
END IF
LET chmensaje = "NUMERO RECIBO: ", recibo_nc.num_doc USING "<<<<<<"
LET subject =
"AVISO PAGO AVANCE COTIZACION NO. ",
recibo_nc.num_orden USING "&&&&&&"
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
LET cuerpo_correo = "VENDEDOR : ", nombre_ven CLIPPED
LET cuerpo_correo =
cuerpo_correo CLIPPED,
" FECHA : ",
recibo_nc.fecha USING "DD/MM/YYYY"
LET cuerpo_correo =
cuerpo_correo CLIPPED,
" RECIBO : ",
recibo_nc.num_doc USING "&&&&&&"
LET cuerpo_correo =
cuerpo_correo CLIPPED, " CLIENTE: ", nombre_cli CLIPPED
####################
IF afecta_ex = "YES" THEN
IF verdad THEN
INSERT INTO cctb00020(
cod_cia,
tipo_doc,
num_oc,
fecha,
tipo_cliente,
sec_cliente,
factura,
valor_efectivo,
num_trans,
us_crea,
fech_crea)
VALUES(p_companias.cod_comp,
'AV',
recibo_nc.num_doc,
recibo_nc.fecha,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.num_orden,
recibo_nc.avance,
otro_num,
usuarios,
getdate())
END IF
END IF
#CREA LA REQUISICION DE DESPACHO SI NO SE HA ADICIONADO ALGUNA, TAMBIEN ADICIONA LA ORDEN EN CASO QUE NO TENGA
IF pcondpago = 4 OR pcondpago = 10 THEN
CALL autorizacioncontado(
recibo_nc.num_orden,
valor_cotizado,
montos_avance,
usuarios,
recibo_nc.avance,
recibo_nc.num_doc,
'AV',
nombre_cli)
RETURNING estado_req
DISPLAY BY NAME estado_req
END IF
#-------------------------------------------------------------------------
LET cuerpo_correo = cuerpo_correo CLIPPED, " ", estado_req CLIPPED
LET xusername = 'notificacion@marmotech.com.do'
LET xsmtphost = 'smtp.office365.com'
LET xsmtpport = '587'
LET xpassword = 'Lmmjvsd2020'
# LET vendedoremail = 'jsoto@marmotech.com.do'
CALL enviaemail(
vendedorEmail,
subject,
cuerpo_correo,
NULL,
xusername,
xsmtphost,
xsmtpport,
xpassword) #RETURNING retorne
SET CONNECTION "MSSQL"
IF opcion = '1' OR opcion = '2' OR opcion = '3' THEN
IF email_cliente IS NOT NULL THEN
CALL envia_encuesta(
email_cliente,
recibo_nc.num_orden,
nombre_cli,
opcion,
'RECIBO')
END IF
END IF
#--- FIN DEL PROCESO TIPO "A" (NUEVO). LO ANTERIOR SIEMPRE SE EJECUTA EN
# smarmotech/MSSQL; SOLO EL BLOQUE IFMX QUEDO CONDICIONADO A afecta_ex.
END IF
IF tipo_p = "C" THEN
CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad
IF verdad = TRUE AND afecta_ex="YES" THEN
SET CONNECTION "IFMX"
SELECT a.* INTO p_companias.* FROM companias a
UPDATE cctb00001
SET (cuenta_no,
banco,
tipo_cliente,
sec_cliente,
cod_emp_sec,
fecha_orig,
valor,
monto_desc,
us_mod,
fech_mod)
= (recibo_nc.cuenta_no,
recibo_nc.num_orden,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.cod_emp_sec,
recibo_nc.fecha,
recibo_nc.avance,
0,
usuarios,
getdate())
WHERE tipo_doc = "AV"
AND num_doc = recibo_nc.num_doc
AND aplica_a = recibo_nc.num_doc
UPDATE cctb00011
SET comentario = recibo.comentario,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_cia = p_companias.cod_comp
AND num_doc = recibo_nc.num_doc
AND tipo_doc = 'AV'
END IF
SET CONNECTION "MSSQL"
SELECT UNIQUE a.num_trans
INTO otro_num
FROM cctb00020 a
WHERE a.num_trans = recibo_nc.num_doc
UPDATE cctb00001
SET (cuenta_no,
banco,
tipo_cliente,
sec_cliente,
cod_emp_sec,
fecha_orig,
valor,
monto_desc,
us_mod,
fech_mod)
= (recibo_nc.cuenta_no,
recibo_nc.num_orden,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.cod_emp_sec,
recibo_nc.fecha,
recibo_nc.avance,
0,
SUSER_SNAME(),
GETDATE())
WHERE tipo_doc = "AV"
AND num_doc = otro_num
AND aplica_a = recibo_nc.num_doc
UPDATE cctb00011
SET comentario = recibo.comentario,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_cia = p_companias.cod_comp
AND num_doc = recibo_nc.num_doc
AND tipo_doc = 'AV'
END IF
# NUMERO DE RECIBO A IMPRIMIR:
# - SI SE AFECTO IFMX (afecta_ex="YES", cliente 17): se imprime el
# secuencial de IFMX/MARMOTECH (otro_num), que es el numero con que se
# actualizo esa base.
# - SI NO SE AFECTO IFMX: se conserva el numero del flujo de SMARMOTECH
# que ya viene en recibo_nc.num_doc.
IF afecta_ex = "YES" AND otro_num IS NOT NULL AND otro_num > 0 THEN
LET recibo_nc.num_doc = otro_num
END IF
# IMPRESION MATRICIAL
IF tipoimprime = 'GR' THEN
LET r_filename = "ccprmt001a.4rp"
LET r_output = "SVG"
LET preview = 1
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT cctb01b TO XML HANDLER HANDLER
OUTPUT TO REPORT cctb01b(
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.fecha,
recibo_nc.num_doc,
recibo_nc.cod_emp_sec,
'AV',
NULL,
NULL,
recibo_nc.num_orden,
0,
recibo_nc.avance,
nombre_cli,
nombre_ven,
' ',
recibo.comentario)
FINISH REPORT cctb01b
END IF
ELSE
CALL defecto(
usuarios, clave, impresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
START REPORT volante TO archivo
DISPLAY "imprime ", imprime
DISPLAY BY NAME recibo_nc.num_doc ATTRIBUTE(REVERSE)
OUTPUT TO REPORT volante(recibo_nc.*)
FINISH REPORT volante
IF tipoimprime = 'MT' THEN
RUN imprime
END IF
END IF
{
LET r_filename = "ccprmt001a.4rp"
LET r_output = "SVG"
LET preview = 1
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
IF preview = 0 THEN
CALL fgl_report_selectPreview(1) -- changing default
# CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
ELSE
CALL fgl_report_selectPreview(preview)
END IF
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
IF verdad THEN
LET recibo_nc.num_doc = otro_num
END IF
START REPORT cctb01b TO XML HANDLER HANDLER
OUTPUT TO REPORT cctb01b(recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,recibo_nc.fecha,recibo_nc.num_doc,
recibo_nc.cod_emp_sec,'AV',null,null,
recibo_nc.num_orden,0,recibo_nc.avance,
nombre_cli,nombre_ven,' ',recibo.comentario)
FINISH REPORT cctb01b
END IF}
LET numero_msg = 1
CALL msg(numero_msg)
END FUNCTION
FUNCTION ccpcmf003()
DEFINE conexion STRING
INPUT BY NAME recibo_nc.num_doc
BEFORE INPUT
SET CONNECTION "IFMX"
LET conexion = "IFMX"
ON KEY(F2)
SET CONNECTION "IFMX"
LET conexion = "IFMX"
ON KEY(F3)
SET CONNECTION "MSSQL"
LET conexion = "MSSQL"
AFTER FIELD num_doc
LET recibo_cons = NULL
LET recibo_ext = NULL
SELECT a.documento_ref,
a.tipo_cliente,
a.sec_cliente,
a.cod_emp_sec,
CONVERT(CHAR(10), a.fecha_orig, 103),
a.valor,
a.cod_emp,
a.valor_efectivo,
a.valor_cheque,
a.valor_tarjeta,
b.comentario,
a.valor_link
INTO recibo_nc.num_orden,
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.cod_emp_sec,
recibo_nc.fecha,
recibo_nc.avance,
codigo_sucursal,
monto_efectivo,
monto_ck,
monto_cr,
recibo.comentario,
monto_link
FROM cctb00001 a
LEFT OUTER
JOIN cctb00011 b
ON a.tipo_doc = b.tipo_doc
AND a.num_Doc = b.num_doc
AND a.sucid = b.sucid
WHERE a.status_t IS NULL
AND a.num_doc = a.aplica_a
AND a.tipo_doc = 'AV'
AND a.num_Doc = recibo_nc.num_doc
# QUITE EL CONTROL DE LA SUCURSAL PARA QUE SE PUDIERA CONSULTAR DE CUALQUIER SUCURSAL
# AND a.sucid = codigo_sucursal
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD Num_Doc
END IF
IF conexion = "MSSQL" THEN
LET recibo_cons = recibo_nc.num_doc
ELSE
LET recibo_ext = recibo_nc.num_doc
END IF
{ IF STATUS = NOTFOUND THEN
SET CONNECTION "MSSQL"
SELECT a.banco,a.tipo_cliente,a.sec_cliente,a.cod_emp_sec,
a.fecha_orig,a.valor,a.cod_emp
INTO recibo_nc.num_orden,recibo_nc.tipo_cliente,recibo_nc.sec_cliente,
recibo_nc.cod_emp_sec,recibo_nc.fecha,recibo_nc.avance,codigo_sucursal
FROM cctb00001 a
WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND
a.tipo_doc = 'AV' AND a.num_Doc = recibo_nc.num_doc
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD Num_Doc
END IF
LET recibo_cons = recibo_nc.num_doc
ELSE
LET recibo_ext = recibo_nc.num_doc
END IF
}
# SELECT a.nombre INTO nombre_cli FROM vetb00004 a
# WHERE a.tipo_cliente = recibo_nc.tipo_cliente AND
# a.sec_cliente = recibo_nc.sec_cliente
SELECT a.nombre_cliente
INTO nombre_cli
FROM vetb00050 a
WHERE a.cotizacion_no = recibo_nc.num_orden
SELECT UNIQUE a.nom1_emp, a.nom2_emp, a.apell1_emp
INTO nombre1, nombre2, apell
FROM adtb00003 a
WHERE a.num_emp = recibo_nc.cod_emp_sec
CALL busca_info()
LET nombre_ven =
nombre1 CLIPPED, " ", nombre2 CLIPPED, " ", apell CLIPPED
DISPLAY BY NAME recibo_nc.*,
nombre_cli,
nombre_ven,
monto_efectivo,
monto_ck,
monto_cr,
monto_link
DISPLAY codigo_sucursal TO localidad
AFTER INPUT
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET INT_FLAG = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
MENU
{ ESTA FUNCIONABILIDAD SE QUITO TEMPORALMENTE, YA QUE EL PROGRAMA TIENE
QUE ACTUALIZAR DOS BASE DE DATOS DIFERENTES, PERO NO TENGO LA IDENTIFICACION DE
CUAL SERIA LA PRIMERA
ON ACTION anular
LET p_fechas = recibo_nc.fecha
SET CONNECTION "MSSQL"
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LET otro_num = recibo_nc.num_doc
LET recibo_orig = recibo_nc.num_doc
CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad
IF verdad THEN
SET CONNECTION "IFMX"
SELECT SUM(a.valor+a.monto_desc) INTO monto1 FROM cctb00001 a
WHERE a.status_t IS NULL AND a.num_doc = recibo_nc.num_doc AND
a.num_doc != a.aplica_a AND a.tipo_doc = "AV"
IF monto1 IS NULL THEN
LET monto1 = 0
END IF
IF monto1 <> 0 THEN
ERROR "Documento Tiene Aplicaciones... No Puede Ser Eliminado"
CONTINUE MENU
END IF
END IF
SET CONNECTION "MSSQL"
IF verdad THEN
SELECT a.num_oc INTO recibo_nc.num_doc FROM cctb00020 a
WHERE a.num_trans = otro_num and tipo_Doc = 'AV'
END IF
SELECT SUM(a.valor+a.monto_desc) INTO monto1 FROM cctb00001 a
WHERE a.status_t IS NULL AND a.num_doc = recibo_nc.num_doc AND
a.num_doc != a.aplica_a AND a.tipo_doc = "AV"
IF monto1 IS NULL THEN
LET monto1 = 0
END IF
IF monto1 <> 0 THEN
ERROR "Documento Tiene Aplicaciones... No Puede Ser Eliminado"
CONTINUE MENU
END IF
LET respuesta = fgl_winquestion("INFO","ESTA SEGURO DE QUERER ANULAR ESTE DOCUMENTO?","NO","NO|YES","question",0)
IF UPSHIFT(respuesta) = "YES" THEN
IF verdad THEN
SET CONNECTION "IFMX"
LET recibo_nc.num_doc= recibo_orig
UPDATE cctb00001 SET (status_t,us_mod,fech_mod) = ( "E",usuarios,getdate())
WHERE tipo_doc = "AV" AND num_doc = recibo_nc.num_doc AND
aplica_a = recibo_nc.num_doc and fecha_orig > '03/01/2011'
END IF
SET CONNECTION "MSSQL"
SELECT a.num_oc INTO recibo_nc.num_doc FROM cctb00020 a
WHERE a.num_trans = otro_num
UPDATE cctb00001 SET (status_t,us_mod,fech_mod) = ( "E",SUSER_SNAME(),GETDATE())
WHERE tipo_doc = "AV" AND num_doc = recibo_nc.num_doc AND
aplica_a = recibo_nc.num_doc and fecha_orig > '03/01/2011'
LET numero_msg = 82
CALL msg(numero_msg)
END IF
}
ON ACTION rImprimir
INPUT BY NAME tipoimprime
CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad
IF verdad = TRUE THEN
SET CONNECTION "IFMX"
SELECT a.rnc, a.direccion, a.telefono, a.fax
INTO p_companias.rnc,
p_companias.direccion,
p_companias.telefono,
p_companias.fax
FROM companias a
END IF
SET CONNECTION "MSSQL"
SELECT a.cod_perfil
INTO pperfil
FROM seg0001 a
WHERE a.usuario = usuarios
# CALL seg000(usuarios,pperfil,'otroimp') RETURNING acceso
# CALL fgl_Winmessage("IMP",acceso,"INFO")
# IF acceso = "SI" THEN
CALL defecto(
usuarios, clave, impresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
IF tipoimprime = 'GR' THEN
LET r_filename = "ccprmt001a.4rp"
LET r_output = "SVG"
LET preview = 1
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF fgl_report_loadCurrentSettings(
r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
IF preview = 0 THEN
CALL fgl_report_selectPreview(1) -- changing default
# CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
ELSE
CALL fgl_report_selectPreview(preview)
END IF
LET handler =
fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT cctb01b TO XML HANDLER HANDLER
OUTPUT TO REPORT cctb01b(
recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,
recibo_nc.fecha,
recibo_nc.num_doc,
recibo_nc.cod_emp_sec,
'AV',
NULL,
NULL,
recibo_nc.num_orden,
0,
recibo_nc.avance,
nombre_cli,
nombre_ven,
' ',
recibo.comentario)
FINISH REPORT cctb01b
END IF
ELSE
DISPLAY "archivo ", archivo
START REPORT volante TO archivo
OUTPUT TO REPORT volante(recibo_nc.*)
FINISH REPORT volante
IF tipoimprime = 'MT' THEN
RUN imprime
END IF
END IF
CALL fgl_winmessage(
"IMPRESION", "ENVIO INFORMACION A LA IMPRESORA", "STOP")
# END IF
{
LET r_filename = "ccprmt001a.4rp"
LET r_output = "SVG"
LET preview = 1
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
IF preview = 0 THEN
CALL fgl_report_selectPreview(1) -- changing default
# CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
ELSE
CALL fgl_report_selectPreview(preview)
END IF
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT cctb01b TO XML HANDLER HANDLER
OUTPUT TO REPORT cctb01b(recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,recibo_nc.fecha,recibo_nc.num_doc,
recibo_nc.cod_emp_sec,'AV',null,null,
recibo_nc.num_orden,0,recibo_nc.avance,
nombre_cli,nombre_ven,' ',recibo.comentario)
FINISH REPORT cctb01b
END IF
}
{ON ACTION otroimp
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
#CALL configureoutput("PDF") RETURNING HANDLER
#START REPORT volante1 TO XML HANDLER HANDLER
START REPORT volante1 TO archivo
OUTPUT TO REPORT volante1(recibo_nc.*)
FINISH REPORT volante1
RUN imprime
CALL fgl_winmessage("IMPRESION","ENVIO INFORMACION A LA IMPRESORA","STOP")
}
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
REPORT volante(x)
DEFINE x RECORD
num_doc INTEGER,
num_orden INTEGER,
tipo_cliente INTEGER,
sec_cliente INTEGER,
cod_emp_sec INTEGER,
cuenta_no CHAR(8),
fecha DATE,
avance DECIMAL(12, 2)
END RECORD
DEFINE doble CHAR(1)
DEFINE comp_off, negras, negras_of, italic, italic_of CHAR(2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
PAGE LENGTH 33
FORMAT
PAGE HEADER
LET negras = ASCII 27, ASCII 69
LET negras_of = ASCII 27, ASCII 70
LET doble = ASCII 14
LET italic = ASCII 27, ASCII 52
LET italic_of = ASCII 27, ASCII 53
LET comp_off = ASCII 18
PRINT COLUMN 70, comp_off, ASCII 27, ASCII 80
PRINT COLUMN 68, doble, x.num_doc USING "&&&&&&"
IF NOT verdad THEN
PRINT " "
PRINT " "
ELSE
PRINT COLUMN 5,
negras,
p_companias.nombre CLIPPED,
negras_of,
COLUMN 74,
x.fecha USING "dd/mm/yyyy"
PRINT COLUMN 5,
p_companias.direccion CLIPPED,
" TEL.",
p_companias.telefono CLIPPED
END IF
PRINT COLUMN 15, italic, "RECIBO DE INGRESO"
PRINT COLUMN 15, italic, "AVANCE A COTIZACION"
SKIP 1 LINE
LET valor_orig = x.avance
LET valor_letras = NULL
SELECT a.simbolo, a.descripcion_moneda
INTO psimbolo, pmoneda
FROM vetb00061 a, vetb00060 b
WHERE a.ventas = b.ventas AND b.tipo_cliente = x.tipo_cliente
CALL convierte()
# BUSCA TIPO DE VENTAS
PRINT COLUMN 5, "LOCALIDAD: ", nombre_sucursal
PRINT COLUMN 5,
"RECIBIMOS DE :",
negras,
nombre_cli CLIPPED,
"(",
x.tipo_cliente USING "&&",
"-",
x.sec_cliente USING "&&&&&&",
")",
negras_of
PRINT COLUMN 5, "DIRECCION :", negras, xdireccion, negras_of
PRINT COLUMN 5,
"PROVINCIA :",
negras,
xnombre_provincia CLIPPED,
negras_of
PRINT COLUMN 5,
"VENDEDOR :",
recibo_nc.cod_emp_sec USING "<<<<",
" ",
nombre_ven
PRINT COLUMN 5,
"PROYECTO :",
negras,
xnombre_proyecto CLIPPED,
negras_of
PRINT COLUMN 5,
"LA SUMA DE :",
negras,
valor_letras CLIPPED,
negras_of
PRINT COLUMN 5,
"VALOR RECIBIDO:",
negras,
psimbolo CLIPPED,
x.avance USING "<<<,<<<,<<<.##",
negras_of
SKIP 1 LINE
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
PRINT COLUMN 5,
"FECHA",
COLUMN 40,
"COTIZACION NO.",
COLUMN 60,
"NETO COBRADO"
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
SKIP 1 LINE
PRINT COLUMN 5,
x.fecha USING "dd/mm/yyyy",
COLUMN 40,
x.num_orden USING "&&&&&&",
COLUMN 58,
psimbolo CLIPPED,
x.avance USING "<<<,<<<,<##.##"
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 5, "OBSERVACION: ", recibo.comentario
PRINT COLUMN 5,
"_______________________________",
COLUMN 45,
"_______________________________"
PRINT COLUMN 10,
" Preparado Por ",
COLUMN 45,
" Autorizado Por"
PRINT italic_of
END REPORT
REPORT volante1(x)
DEFINE x RECORD
num_doc INTEGER,
num_orden INTEGER,
tipo_cliente INTEGER,
sec_cliente INTEGER,
cod_emp_sec INTEGER,
fecha DATE,
avance DECIMAL(12, 2)
END RECORD
DEFINE doble CHAR(1)
DEFINE comp_off, negras, negras_of, italic, italic_of CHAR(2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
PAGE LENGTH 33
FORMAT
PAGE HEADER
{ LET negras = ASCII 27, ASCII 69
LET negras_of = ASCII 27, ASCII 70
LET doble = ASCII 14
LET italic = ASCII 27, ASCII 52
LET italic_of = ASCII 27, ASCII 53
LET comp_off = ASCII 18
}
PRINT COLUMN 70, comp_off, ASCII 27, ASCII 80
PRINT COLUMN 68, doble, x.num_doc USING "&&&&&&"
IF NOT verdad THEN
PRINT " "
PRINT " "
ELSE
PRINT COLUMN 5,
negras,
p_companias.nombre CLIPPED,
negras_of,
COLUMN 74,
TODAY USING "dd/mm/yyyy"
PRINT COLUMN 5,
p_companias.direccion CLIPPED,
" TEL.",
p_companias.telefono CLIPPED
END IF
PRINT COLUMN 15, italic, "RECIBO DE INGRESO"
PRINT COLUMN 15, italic, "AVANCE A COTIZACION"
SKIP 1 LINE
LET valor_orig = x.avance
LET valor_letras = NULL
CALL convierte()
SET CONNECTION "MSSQL"
# BUSCA TIPO DE VENTAS
SELECT a.simbolo, a.descripcion_moneda
INTO psimbolo, pmoneda
FROM vetb00061 a, vetb00060 b
WHERE a.ventas = b.ventas AND b.tipo_cliente = x.tipo_cliente
PRINT COLUMN 60, "LOCALIDAD: ", nombre_sucursal
PRINT COLUMN 5,
"RECIBIMOS DE :",
negras,
nombre_cli CLIPPED,
"(",
x.tipo_cliente USING "&&",
"-",
x.sec_cliente USING "&&&&&&",
")",
negras_of
PRINT COLUMN 5, "DIRECCION :", negras, xdireccion, negras_of
PRINT COLUMN 5,
"PROVINCIA :",
negras,
xnombre_provincia CLIPPED,
negras_of
PRINT COLUMN 5,
"VENDEDOR :",
recibo_nc.cod_emp_sec USING "<<<<",
" ",
nombre_ven
PRINT COLUMN 5,
"PROYECTO :",
negras,
xnombre_proyecto CLIPPED,
negras_of
PRINT COLUMN 5,
"LA SUMA DE :",
negras,
valor_letras CLIPPED,
negras_of
PRINT COLUMN 5,
"VALOR RECIBIDO:",
negras,
psimbolo CLIPPED,
x.avance USING "<<<,<<<,<<<.##",
negras_of
PRINT COLUMN 5, "REFERENCIA : ", otro_num USING "&&&&&&"
SKIP 1 LINE
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
PRINT COLUMN 5,
"FECHA",
COLUMN 40,
"COTIZACION NO.",
COLUMN 60,
"NETO COBRADO"
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
SKIP 1 LINE
PRINT COLUMN 5,
x.fecha USING "dd/mm/yyyy",
COLUMN 40,
x.num_orden USING "&&&&&&",
COLUMN 58,
psimbolo CLIPPED,
x.avance USING "<<<,<<<,<##.##"
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 5, "OBSERVACION: ", recibo.comentario
PRINT COLUMN 5,
"_______________________________",
COLUMN 45,
"_______________________________"
PRINT COLUMN 10,
" Preparado Por ",
COLUMN 45,
" Autorizado Por"
PRINT italic_of
END REPORT
FUNCTION convierte()
DEFINE consegui CHAR(1)
DEFINE p,
miles,
m,
k,
a,
b,
d,
c,
entero,
unidades_mi,
unidades_m,
unidad,
mil,
millon,
unid_c,
u
INTEGER
DEFINE cheles DECIMAL(7, 2)
CALL letras()
LET valor_letras = NULL
LET consegui = "N"
LET entero = valor_orig
LET cheles = (valor_orig - entero) * 100
LET unidad = entero / 100
LET unidad = entero - (unidad * 100)
LET a = entero / 1000
LET a = entero - (a * 1000)
LET d = entero - 19
IF d >= 82 THEN
LET c = entero / 100
# Para Controlar los miles y los cientos
IF c <= 9 THEN
LET valor_letras = valor_letras CLIPPED, " ", centenas[c] CLIPPED
ELSE
LET c = entero / 1000
LET b = entero / 1000000
END IF
IF d > 19 THEN
LET d = unidad - 19
END IF
IF unidad > 0 AND unidad < 20 THEN
LET d = unidad
LET valor_letras = valor_letras CLIPPED, " ", unidades1[d] CLIPPED
LET consegui = "S"
END IF
ELSE
IF d > 0 AND d <= 81 THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[d] CLIPPED
LET consegui = "S"
END IF
END IF
# Para controlar los miles
IF entero > 999 THEN
LET unidades_m = a / 100
LET unidades_m = a - (unidades_m * 100)
LET valor_letras = NULL
IF c = 1 THEN
LET valor_letras = "MIL"
END IF
IF c > 1 AND c <= 19 THEN
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[c] CLIPPED, " ", "MIL"
END IF
IF c >= 20 AND c <= 999 THEN
IF c < 82 THEN
LET c = c - 19
LET valor_letras = valor_letras CLIPPED, " ", decenas[c] CLIPPED
ELSE
LET k = c / 100
IF k > 0 AND k < 10 THEN
LET unid_c = c - (k * 100) # AQUI FUE
IF k > 1 THEN
LET valor_letras =
valor_letras CLIPPED, " ", centenas[k] CLIPPED
ELSE
IF k = 1 THEN
IF unid_c > 0 THEN
LET valor_letras =
valor_letras CLIPPED,
" ",
centenas[k] CLIPPED
ELSE
LET valor_letras =
valor_letras CLIPPED,
" ",
decenas[81] CLIPPED
END IF
END IF
END IF
END IF
LET unid_c = c - (k * 100)
IF unid_c > 0 AND unid_c < 20 THEN
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[unid_c] CLIPPED
ELSE
LET unid_c = unid_c - 19
IF unid_c > 0 AND unid_c <= 81 THEN
LET valor_letras =
valor_letras CLIPPED, " ", decenas[unid_c] CLIPPED
LET consegui = "S"
END IF
END IF
IF c > 82 AND c < 100 AND consegui <> "S" THEN
LET c = c - 19
LET valor_letras =
valor_letras CLIPPED, " ", decenas[c] CLIPPED
END IF
IF c > 100 AND consegui <> "S" THEN
LET c = c - 119
IF c > 0 AND c <= 81 THEN
LET valor_letras =
valor_letras CLIPPED, " ", decenas[c] CLIPPED
LET consegui = "N"
END IF
END IF
END IF
LET valor_letras = valor_letras CLIPPED, " ", "MIL"
END IF
LET c = a
IF c > 100 THEN
LET c = c / 100
LET valor_letras = valor_letras CLIPPED, " ", centenas[c] CLIPPED
END IF
IF c = 100 THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[81] CLIPPED
END IF
IF unidades_m > 0 AND unidades_m - 19 <= 81 THEN
LET a = unidades_m - 19
IF a > 0 AND a <= 81 THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[a] CLIPPED
LET consegui = "S"
ELSE
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[unidades_m] CLIPPED
END IF
END IF
END IF
#========================================================================================
# Para Controlar cantidades en millones
IF entero > 999999 THEN
LET c = 0
LET miles = entero - 1000000
LET m = miles / 1000
LET p = miles - (m * 1000)
LET u = m / 100
LET u = m - (u * 100)
LET unidades_mi = p
LET unidades_mi = unidades_mi / 100
LET unidades_mi = p - (unidades_mi * 100)
LET valor_letras = NULL
IF b = 1 THEN
LET valor_letras = "UN MILLON"
END IF
IF b > 1 AND b <= 19 THEN
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[b] CLIPPED, " ", "MILLONES"
END IF
IF b >= 20 AND b <= 999999 THEN
IF b < 82 THEN
LET b = b - 19
LET valor_letras =
valor_letras CLIPPED,
" ",
decenas[b] CLIPPED,
" ",
"MILLONES"
ELSE
LET k = b / 100
LET valor_letras =
valor_letras CLIPPED,
" ",
centenas[k] CLIPPED,
" ",
"MILLONES"
END IF
END IF
LET b = m / 100
IF b > 0 AND b <= 9 THEN
IF b = 1 THEN
LET valor_letras = valor_letras CLIPPED, " CIEN "
ELSE
LET valor_letras =
valor_letras CLIPPED, " ", centenas[b] CLIPPED
END IF
IF u > 0 AND u <= 19 THEN
IF u = 1 THEN
LET unidades1[1] = "UN"
END IF
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[u] CLIPPED
END IF
LET u = u - 19
# IF u > 0 and u <= 19 THEN
# IF u = 1 THEN
# LET unidades1[1] = "UN"
# END IF
# LET valor_letras = valor_letras clipped," ",unidades1[u] clipped
# END IF
IF u >= 1 AND u < 82 THEN
# LET u = u - 19 # adicione este 13/5/2011 La quite el 30/5/2011
LET valor_letras = valor_letras CLIPPED, " ", decenas[u] CLIPPED
END IF
LET valor_letras = valor_letras CLIPPED, " ", "MIL"
END IF
IF p > 100 THEN
LET p = p / 100
LET valor_letras = valor_letras CLIPPED, " ", centenas[p] CLIPPED
END IF
LET unidades_mi = unidades_mi - 19
IF unidades_mi > 0 AND unidades_mi <= 81 THEN
LET m = unidades_mi
LET valor_letras = valor_letras CLIPPED, " ", decenas[m] CLIPPED
END IF
END IF
IF unidad > 0 AND unidad < 20 AND consegui = "N" THEN
LET d = unidad
LET valor_letras = valor_letras CLIPPED, " ", unidades1[d] CLIPPED
END IF
IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[d] CLIPPED
END IF
LET valor_letras =
valor_letras CLIPPED,
" ",
pmoneda CLIPPED,
" CON",
" ",
cheles USING "&&",
"/100"
END FUNCTION
FUNCTION letras()
LET unidades1[1] = "UNO"
LET unidades1[2] = "DOS"
LET unidades1[3] = "TRES"
LET unidades1[4] = "CUATRO"
LET unidades1[5] = "CINCO"
LET unidades1[6] = "SEIS"
LET unidades1[7] = "SIETE"
LET unidades1[8] = "OCHO"
LET unidades1[9] = "NUEVE"
LET unidades1[10] = "DIEZ"
LET unidades1[11] = "ONCE"
LET unidades1[12] = "DOCE"
LET unidades1[13] = "TRECE"
LET unidades1[14] = "CATORCE"
LET unidades1[15] = "QUINCE"
LET unidades1[16] = "DIECISEIS"
LET unidades1[17] = "DIECISIETE"
LET unidades1[18] = "DIECIOCHO"
LET unidades1[19] = "DIECINUEVE"
LET decenas[1] = "VEINTE"
LET decenas[2] = "VEINTE Y UNO"
LET decenas[3] = "VEINTE Y DOS"
LET decenas[4] = "VEINTE Y TRES"
LET decenas[5] = "VEINTE Y CUATRO"
LET decenas[6] = "VEINTE Y CINCO"
LET decenas[7] = "VEINTE Y SEIS"
LET decenas[8] = "VEINTE Y SIETE"
LET decenas[9] = "VEINTE Y OCHO"
LET decenas[10] = "VEINTE Y NUEVE"
LET decenas[11] = "TREINTA"
LET decenas[12] = "TREINTA Y UNO"
LET decenas[13] = "TREINTA Y DOS"
LET decenas[14] = "TREINTA Y TRES"
LET decenas[15] = "TREINTA Y CUATRO"
LET decenas[16] = "TREINTA Y CINCO"
LET decenas[17] = "TREINTA Y SEIS"
LET decenas[18] = "TREINTA Y SIETE"
LET decenas[19] = "TREINTA Y OCHO"
LET decenas[20] = "TREINTA Y NUEVE"
LET decenas[21] = "CUARENTA"
LET decenas[22] = "CUARENTA Y UNO"
LET decenas[23] = "CUARENTA Y DOS"
LET decenas[24] = "CUARENTA Y TRES"
LET decenas[25] = "CUARENTA Y CUATRO"
LET decenas[26] = "CUARENTA Y CINCO"
LET decenas[27] = "CUARENTA Y SEIS"
LET decenas[28] = "CUARENTA Y SIETE"
LET decenas[29] = "CUARENTA Y OCHO"
LET decenas[30] = "CUARENTA Y NUEVE"
LET decenas[31] = "CINCUENTA"
LET decenas[32] = "CINCUENTA Y UNO"
LET decenas[33] = "CINCUENTA Y DOS"
LET decenas[34] = "CINCUENTA Y TRES"
LET decenas[35] = "CINCUENTA Y CUATRO"
LET decenas[36] = "CINCUENTA Y CINCO"
LET decenas[37] = "CINCUENTA Y SEIS"
LET decenas[38] = "CINCUENTA Y SIETE"
LET decenas[39] = "CINCUENTA Y OCHO"
LET decenas[40] = "CINCUENTA Y NUEVE"
LET decenas[41] = "SESENTA"
LET decenas[42] = "SESENTA Y UNO"
LET decenas[43] = "SESENTA Y DOS"
LET decenas[44] = "SESENTA Y TRES"
LET decenas[45] = "SESENTA Y CUATRO"
LET decenas[46] = "SESENTA Y CINCO"
LET decenas[47] = "SESENTA Y SEIS"
LET decenas[48] = "SESENTA Y SIETE"
LET decenas[49] = "SESENTA Y OCHO"
LET decenas[50] = "SESENTA Y NUEVE"
LET decenas[51] = "SETENTA"
LET decenas[52] = "SETENTA Y UNO"
LET decenas[53] = "SETENTA Y DOS"
LET decenas[54] = "SETENTA Y TRES"
LET decenas[55] = "SETENTA Y CUATRO"
LET decenas[56] = "SETENTA Y CINCO"
LET decenas[57] = "SETENTA Y SEIS"
LET decenas[58] = "SETENTA Y SIETE"
LET decenas[59] = "SETENTA Y OCHO"
LET decenas[60] = "SETENTA Y NUEVE"
LET decenas[61] = "OCHENTA"
LET decenas[62] = "OCHENTA Y UNO"
LET decenas[63] = "OCHENTA Y DOS"
LET decenas[64] = "OCHENTA Y TRES"
LET decenas[65] = "OCHENTA Y CUATRO"
LET decenas[66] = "OCHENTA Y CINCO"
LET decenas[67] = "OCHENTA Y SEIS"
LET decenas[68] = "OCHENTA Y SIETE"
LET decenas[69] = "OCHENTA Y OCHO"
LET decenas[70] = "OCHENTA Y NUEVE"
LET decenas[71] = "NOVENTA"
LET decenas[72] = "NOVENTA Y UNO"
LET decenas[73] = "NOVENTA Y DOS"
LET decenas[74] = "NOVENTA Y TRES"
LET decenas[75] = "NOVENTA Y CUATRO"
LET decenas[76] = "NOVENTA Y CINCO"
LET decenas[77] = "NOVENTA Y SEIS"
LET decenas[78] = "NOVENTA Y SIETE"
LET decenas[79] = "NOVENTA Y OCHO"
LET decenas[80] = "NOVENTA Y NUEVE"
LET decenas[81] = "CIEN"
LET centenas[1] = "CIENTO"
LET centenas[2] = "DOCIENTOS"
LET centenas[3] = "TRESCIENTOS"
LET centenas[4] = "CUATROCIENTOS"
LET centenas[5] = "QUINIENTOS"
LET centenas[6] = "SEISCIENTOS"
LET centenas[7] = "SETECIENTOS"
LET centenas[8] = "OCHOCIENTOS"
LET centenas[9] = "NOVECIENTOS"
END FUNCTION
FUNCTION busca_info()
SET CONNECTION "MSSQL"
SELECT a.nombre
INTO nombre_cli
FROM vetb00004 a
WHERE a.tipo_cliente = recibo_nc.tipo_cliente
AND a.sec_cliente = recibo_nc.sec_cliente
LET xdireccion = NULL
SELECT a.direccion_cliente
INTO xdireccion
FROM vetb00050 a
WHERE a.cotizacion_no = recibo_nc.num_orden
SELECT UNIQUE a.nom1_emp, a.nom2_emp, a.apell1_emp
INTO nombre1, nombre2, apell
FROM adtb00003 a
WHERE a.num_emp = recibo_nc.cod_emp_sec
LET nombre_ven = nombre1 CLIPPED, " ", nombre2 CLIPPED, " ", apell CLIPPED
SELECT a.sucnombre
INTO nombre_sucursal
FROM sucursales a
WHERE a.sucid = codigo_sucursal
LET otro_num = NULL
SELECT a.num_trans
INTO otro_num
FROM cctb00020 a
WHERE a.num_oc = recibo_nc.num_doc
SELECT a.chitbis
INTO ch_itbis
FROM cctb00011 a
WHERE a.tipo_Doc = 'AV' AND a.num_doc = recibo_nc.num_doc
LET nombre_cli =
nombre_cli CLIPPED,
" ",
recibo_nc.tipo_cliente USING "<<",
"-",
recibo_nc.sec_cliente USING "<<<<<<"
LET condicionPago = NULL
SELECT a.descrip
INTO condicionPago
FROM vetb00012 a, vetb00050 b
WHERE a.cond_pago = b.cond_pago
AND b.cotizacion_no = recibo_nc.num_orden
SET CONNECTION "IFMX"
DISPLAY BY NAME recibo_nc.*, nombre_cli, nombre_ven, ch_itbis
DISPLAY codigo_sucursal TO Localidad
END FUNCTION
FUNCTION procesacliente(xtipo_cliente)
DEFINE
xtipo_cliente SMALLINT,
verdad1 BOOLEAN
LET verdad1 = TRUE
IF xtipo_cliente = 18 THEN
LET verdad1 = FALSE
END IF
IF xtipo_cliente = 19 THEN
LET verdad1 = FALSE
END IF
RETURN verdad1
END FUNCTION
FUNCTION evalua_clientes()
DEFINE
xnum_req INT,
xvalor DEC(12, 2),
xfecha CHAR(10),
mensaje VARCHAR(100)
DECLARE busca_req CURSOR FOR
SELECT CONVERT(char(10), b.fecha, 103), a.num_req, SUM(a.valor)
FROM cctb00026 a, cctb00025 b
WHERE a.cotizacion_no = recibo_nc.num_orden
AND a.num_req = b.num_req
AND b.estado = "NO AUTORIZADA"
AND b.status_t IS NULL
GROUP BY b.fecha, a.num_req
ORDER BY b.fecha DESC
LET idx = 1
FOREACH busca_req INTO xfecha, xnum_req, xvalor
IF xvalor IS NOT NULL THEN
IF xvalor <= recibo_nc.avance + montos_avance + diferencia THEN
{ EL RECIBO DE INGRESO NO VA AUTORIZAR NADA FECHA 19-12-2022
UPDATE cctb00025 SET estado = "AUTORIZADA",
us_mod = "MBS",
fech_mod = getdate()
WHERE num_req = xnum_req
DISPLAY "CASO CUATRO "
LET mensaje ='ESTA REQUISICION FUE AUTORIZADA POR EL RECIBO DE PAGO ',recibo_nc.avance USING "<<<<<<"
INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,
sec_cliente,nombreCliente,num_req,limite_cr,monto_cotizacion,
balance,estado,tipo_doc_ref,monto_req,num_recibo,monto_avance,cotizacion_no,
descrip_estado,nombrevendedor,num_oc)
VALUES (getdate(),'MBS',recibo_nc.cod_emp_sec,recibo_nc.tipo_cliente,
recibo_nc.sec_cliente,nombre_cli,xnum_req,'0',valor_cotizado,'0',"AUTORIZADA",
"AV",xvalor,recibo_nc.num_doc,recibo_nc.avance,recibo_nc.num_orden,mensaje,
nombre_ven,xnum_oc )
LET chmensaje = "NUMERO RECIBO: ",recibo_nc.num_doc USING "<<<<<<"
LET subject = "AUROTIZACION REQUISICION DESPACHO COTIZACION: ",recibo_nc.num_orden USING "&&&&&&"
}
# LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
# LET cuerpo_correo = "VENDEDOR : ",nombre_ven CLIPPED
# LET cuerpo_correo = cuerpo_correo CLIPPED," FECHA : ",recibo_nc.fecha USING "DD/MM/YYYY"
# LET cuerpo_correo = cuerpo_correo CLIPPED," RECIBO : ",recibo_nc.num_doc USING "&&&&&&"
# LET cuerpo_correo = cuerpo_correo CLIPPED," CLIENTE: ",nombre_cli CLIPPED
# CALL envia_correo(
# 'soporteclientes@marmotech.com.do;cxc@marmotech.com.do',
# vendedorEmail,
# cuerpo_correo,
# subject,
# procedimiento)
END IF
END IF
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
IF pcondpago = 4 OR pcondpago = 10 THEN
CALL autorizacioncontado(
recibo_nc.num_orden,
valor_cotizado,
montos_avance,
usuarios,
montos_avance,
recibo_nc.num_doc,
'AV',
nombre_cli)
END IF
END IF
END FUNCTION
FUNCTION genera_orden()
DEFINE
rcod DYNAMIC ARRAY OF INT,
xorden DYNAMIC ARRAY OF VARCHAR(10)
DECLARE busca_cot CURSOR FOR
SELECT DISTINCT a.cod_n, b.genera_orden
FROM vetb00051 a, iptb00020 b
WHERE a.cotizacion_no = recibo_nc.num_orden AND a.cod_n = b.cod_n
LET idx = 1
LET xestado = 'S'
FOREACH busca_cot INTO rcod[idx], xorden[idx]
IF xorden[idx] = "NO" THEN
LET xestado = 'N'
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION
REPORT cctb01b(
p_tipo_cliente,
p_sec_cliente,
p_fecha_orig,
p_num_doc,
p_cod_emp_sec,
p_tipo_doc,
p_cuenta_no,
p_banco,
p_aplica_a,
p_monto_desc,
p_valor,
p_nombre,
p_nomb_emp,
p_nombre_cta,
p_comentario)
DEFINE
p_tipo_cliente LIKE cctb00001.tipo_cliente,
p_sec_cliente LIKE cctb00001.sec_cliente,
p_fecha_orig LIKE cctb00001.fecha_orig,
p_num_doc LIKE cctb00001.num_doc,
p_cod_emp_sec LIKE cctb00001.cod_emp_sec,
p_tipo_doc LIKE cctb00001.tipo_doc,
p_cuenta_no LIKE cctb00001.cuenta_no,
p_banco LIKE cctb00001.banco,
p_aplica_a LIKE cctb00001.aplica_a,
p_monto_desc LIKE cctb00001.monto_desc,
p_valor LIKE cctb00001.valor,
p_nomb_emp CHAR(40),
p_nombre_cta CHAR(30),
pitbis DEC(12, 2),
labelcliente STRING
DEFINE
hora CHAR(5),
p_nombre LIKE vetb00004.nombre,
p_comentario CHAR(120), #LIKE cctb00011.comentario,
descuento, total_monto, ditbis DEC(12, 2),
tipodocumento VARCHAR(50)
ORDER BY p_sec_cliente
FORMAT
PAGE HEADER
LET hora = TIME
IF p_tipo_doc = 'AV' OR p_tipo_doc = 'PG' THEN
LET tipodocumento = 'RECIBO DE INGRESOS'
LET labelcliente = "HEMOS RECIBIDO DE "
LET p_nombre_tipo = 'AVANCE A COTIZACION'
ELSE
LET tipodocumento = 'DOCUMENTO CUENTAS POR COBRAR'
LET labelcliente = "CLIENTE: "
END IF
BEFORE GROUP OF p_sec_cliente
SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S"
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
PRINTX nombre_sucursal,
p_cuenta_no,
p_nombre_cta,
p_banco,
p_nombre,
p_tipo_cliente,
p_sec_cliente,
p_cod_emp_sec,
p_nomb_emp,
p_tipo_doc,
p_nombre_tipo,
tipodocumento,
hora,
p_companias.nombre,
p_num_doc,
p_companias.rnc,
p_companias.direccion,
p_fecha_orig,
p_companias.telefono,
p_companias.fax,
fecha_proximo,
labelcliente,
nombre_sucursal,
condicionPago,
xdireccion
ON EVERY ROW
PRINTX p_aplica_a, p_monto_desc, p_valor, ditbis, p_valor
AFTER GROUP OF p_sec_cliente
# BUSCA TIPO DE VENTAS
SELECT a.simbolo, a.descripcion_moneda
INTO psimbolo, pmoneda
FROM vetb00061 a, vetb00060 b
WHERE a.ventas = b.ventas AND b.tipo_cliente = p_tipo_cliente
LET descuento = GROUP SUM(p_monto_desc)
LET total_monto = GROUP SUM(p_valor)
LET valor_orig = total_monto
LET valor_letras = NULL
CALL convierte()
PRINTX descuento, total_monto, valor_letras, psimbolo
ON LAST ROW
PRINTX p_comentario
END REPORT
FUNCTION verifica_orden()
LET tieneorden = TRUE
SELECT a.num_oc
FROM prtb00012 a
WHERE a.cotizacion_no = recibo_nc.num_orden AND a.status_T IS NULL
IF STATUS = NOTFOUND THEN
LET tieneorden = FALSE
END IF
END FUNCTION