/* VALIDE EL DIA DESCENDENTE PARA EVOTAR CONFLICTOS DIAS 3 Y 4 */
SET TERM ^ ;

CREATE OR ALTER procedure TRAE_CLIENTE_MOVIL (
    NIT varchar(20))
returns (
    DV varchar(2),
    TERC_NOM varchar(124),
    SALDO numeric(18,2),
    DISPONIBLE numeric(18,2),
    CART_VENCIDA varchar(10),
    CUPO_VENCIDO varchar(10),
    DIGV char(1),
    APELLIDO1 varchar(60),
    APELLIDO2 varchar(60),
    NOMBRE1 varchar(60),
    NOMBRE2 varchar(60),
    PAIS varchar(3),
    CIUDCOD varchar(5),
    CIUDNOM varchar(60),
    DIR varchar(60),
    ZONAP varchar(8),
    FAX varchar(25),
    TEL varchar(40),
    CEL varchar(25),
    EMAIL varchar(100),
    CONTACTO varchar(60),
    ZONACOD varchar(3),
    ZONANOM varchar(60),
    GRUPCOD integer,
    GRUPNOM varchar(60),
    VEND integer,
    OBSERV varchar(60),
    TIPOID char(1),
    TIPOID_NOM varchar(30),
    CUPO T_MONTO,
    DIAS integer,
    SUCURSAL varchar(10),
    NOMSUCURSAL varchar(125),
    LISTA integer,
    DIASREM integer,
    DIASREMCLI integer,
    MAXDIAS integer,
    RTEICA T_PORCENTAJE,
    RTEFTE T_PORCENTAJE,
    CLIE_LATI T_PORCENTAJE,
    CLIE_LNGT T_PORCENTAJE,
    SECV integer)
as
declare variable NROSUC integer;
declare variable VALCUPO varchar(10);
declare variable FECHA date;
declare variable CLIXVEND char(2);
declare variable VENDUSU integer;
declare variable RUTAPREV VARCHAR(2);
declare variable DIA INTEGER;
begin
EXECUTE PROCEDURE lee_configuracion('FACTURACION', 'PEDIDOS', 'VALIDAR RUTA DE PREVENTA POR VENDEDOR') returning_values :RUTAPREV;
EXECUTE PROCEDURE lee_configuracion('FACTURACION', 'PEDIDOS', 'MOSTRAR SOLO CLIENTES DEL VENDEDOR EN PEDIDOS WEB') returning_values (:CLIXVEND);
EXECUTE PROCEDURE LEE_CONFIGURACION('CARTERA','SALDOS', 'ACCION A TOMAR SI EL CUPO DE CREDITO ES INSUFICIENTE') RETURNING_VALUES(:CUPO_VENCIDO);
EXECUTE PROCEDURE LEE_CONFIGURACION('FACTURACION','PEDIDOS','ACCION A TOMAR SI EL CLIENTE TIENE CARTERA VENCIDA') RETURNING_VALUES(:CART_VENCIDA);
EXECUTE PROCEDURE LEE_CONFIGURACION('FACTURACION','PEDIDOS','VALIDAR CUPO DE CREDITO EN EL PEDIDO') RETURNING_VALUES(:VALCUPO);
EXECUTE PROCEDURE LEE_CONFIGURACION('FACTURACION','REMISIONES','NUMERO DIAS PARA BLOQUEAR CLIENTES CON REMISIONES POR FACTURAR') RETURNING_VALUES(:DIASREM);
SELECT VEND_COD FROM USUARIO WHERE user = USER_COD into :vendusu;
select terc_dv, terc_nom, substring(terc_contacto FROM 1 FOR 60), terc_dv, terc_apellido1, terc_apellido2, terc_nombre1, terc_nombre2, pais_id, terc_ciu,
  ciud_cod, terc_dir, terc_zonapostal, terc_fax, terc_tel, terc_cel, terc_email, zona_cod, substring(terc_obs from 1 for 60), terc_tipoid, clie_cupo, clie_dias, grca_cod, vend_cod, CLIE_DIASREMP, CLIE_RTEFTE, CLIE_RTEICA, CLIE_LATI, CLIE_LNGT
  from terceros t, clientes c where t.terc_nit = c.terc_nit and t.terc_nit = :NIT
  INTO :DV, :TERC_NOM, :CONTACTO, :DIGV, :APELLIDO1, :APELLIDO2, :NOMBRE1, :NOMBRE2, :PAIS, :CIUDNOM, :CIUDCOD, :DIR, :ZONAP, :FAX, :TEL, :CEL,
  :EMAIL, :ZONACOD, :OBSERV, :TIPOID, :CUPO, :DIAS, :grupcod, :vend, :DIASREMCLI, :rtefte, :rteica, :clie_lati, :clie_lngt;
IF (:CLIXVEND = 'SI') THEN
BEGIN
    IF (EXISTS(SELECT 1 FROM cliente_sucursales 
               WHERE terc_nit = :nit AND vend_cod = :vendusu)) THEN
    BEGIN
        vend = :vendusu;
    END
    ELSE IF (:vend <> :vendusu) THEN
    BEGIN
        TERC_NOM = NULL;
    END
END
/* Logica de Rutas de Preventa integrada */
if (rutaprev = 'SI' AND TERC_NOM IS NOT NULL) then
    BEGIN
    DIA = EXTRACT(WEEKDAY FROM current_date);
    if (DIA = 0) then DIA = 64; -- Domingo
    if (DIA = 6) then DIA = 32; -- Sabado
    if (DIA = 5) then DIA = 16; -- Viernes
    if (DIA = 4) then DIA = 8;  -- Jueves
    if (DIA = 3) then DIA = 4;  -- Miercoles

    if (NOT EXISTS (SELECT S.terc_nit FROM rutas_preventa R, CLIENTE_SUCURSALES S 
                    WHERE R.rupv_vendedor = :vendusu AND S.terc_nit = :NIT 
                    AND S.clsu_ruta = R.rupv_id AND (BIN_AND(:DIA, S.clsu_diasv) <> 0))) then
        TERC_NOM = NULL;
    END
if (TERC_NOM IS NULL) then
    TERC_NOM = '';
if (CONTACTO IS NULL) then
    CONTACTO = '';
if (ZONAP IS NULL) then
    ZONAP = '';
if (FAX IS NULL) then
    FAX = '';
if (TEL IS NULL) then
    TEL = '';
if (CEL IS NULL) then
    CEL = '';
if (EMAIL IS NULL) then
    EMAIL = '';
if (:CUPO is null) then
    CUPO = 0;
if (:GRUPCOD is null) then
    GRUPCOD = 0;
if (:DIAS is null) then
    DIAS = 0;
    
SECV = 0; /* Inicializar SECV */
SELECT ZONA_NOM FROM ZONAS WHERE ZONA_COD = :ZONACOD INTO :ZONANOM;
if (GRUPCOD <> 0) then
    SELECT GRCA_NOMBRE FROM GRUPO_CARTERA WHERE GRCA_COD = :grupcod INTO :GRUPNOM;
ELSE
    GRUPNOM = '';
SELECT TIID_NOM FROM TIPO_ID WHERE TIID_COD = :TIPOID INTO :TIPOID_NOM;
EXECUTE PROCEDURE NOMBRE_ASCII(TERC_NOM) returning_values (TERC_NOM);
EXECUTE PROCEDURE NOMBRE_ASCII(CONTACTO) returning_values (CONTACTO);
EXECUTE PROCEDURE NOMBRE_ASCII(ZONANOM) returning_values (ZONANOM);
EXECUTE PROCEDURE NOMBRE_ASCII(GRUPNOM) returning_values (GRUPNOM);
EXECUTE PROCEDURE NOMBRE_ASCII(CIUDNOM) returning_values (CIUDNOM);
EXECUTE PROCEDURE NOMBRE_ASCII(APELLIDO1) returning_values (APELLIDO1);
EXECUTE PROCEDURE NOMBRE_ASCII(APELLIDO2) returning_values (APELLIDO2);
EXECUTE PROCEDURE NOMBRE_ASCII(NOMBRE1) returning_values (NOMBRE1);
EXECUTE PROCEDURE NOMBRE_ASCII(NOMBRE2) returning_values (NOMBRE2);
EXECUTE PROCEDURE NOMBRE_ASCII(OBSERV) returning_values (OBSERV);
EXECUTE PROCEDURE NOMBRE_ASCII(DIR) returning_values (DIR);
EXECUTE PROCEDURE NOMBRE_ASCII(EMAIL) returning_values (EMAIL);
EXECUTE PROCEDURE NOMBRE_ASCII(TIPOID_NOM) returning_values (TIPOID_NOM);
select sum(SALDO) FROM vencido_cliente(:nit, CAST('NOW' AS DATE), '0', 'S') INTO :SALDO;
if (:saldo is null) then
    saldo = 0;
if (FECHA IS NULL) then
    FECHA = CAST('NOW' AS DATE);
if (DIASREMCLI <> 0) then
begin
MAXDIAS = 0;
SELECT MAX(DIAS) FROM DIAS_REMISIONES_POR_FACTURAR(:nit, :fecha) INTO :MAXDIAS;
end
if ((VALCUPO = 'PROHIBIR') and (not exists (select ptvt_id from punto_venta p where p.terc_nit = :nit))) then
    execute procedure cupo_disponible(:nit, CAST('NOW' AS DATE), '0') returning_values (:DISPONIBLE);
else
    DISPONIBLE = 999999999;
    
select count(clcu_cod), max(clcu_cod) from cliente_sucursales cs where cs.terc_nit = :nit into :nrosuc, :sucursal;
if (nrosuc <> 1) then
    sucursal = '';
ELSE
    BEGIN
    SELECT CS.clsu_nombre ||  ' - ' || cs.clsu_dir, CS.lipr_cod, COALESCE(CS.CLSU_SECV, 0)
        FROM cliente_sucursales CS WHERE CS.terc_nit = :NIT AND CLCU_COD = :SUCURSAL
        INTO :NOMSUCURSAL, :LISTA, :SECV;  /* <<< AGREGADO CLSU_SECV */
        EXECUTE PROCEDURE NOMBRE_ASCII(NOMSUCURSAL) returning_values (NOMSUCURSAL);
    END
    
if (TERC_NOM <> '' and TERC_NOM is not null) then
  suspend;
end^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure TRAE_PEDIDOS_VEND (
    VEND integer,
    FECHA date)
returns (
    NUMDOC varchar(12),
    FECDOC date,
    NIT varchar(20),
    SUCURSAL varchar(10),
    NOMBRE varchar(60),
    TOTAL numeric(18,2),
    ITEMS numeric(18,2),
    ID_PEDIDO integer,
    ID_PEDWEB integer,
    PORPRES numeric(9,2),
    PRESUP numeric(18,2),
    PORACUM numeric(9,2))
as
declare variable DIAS INTEGER;
declare variable RUTAPREV VARCHAR(2);
declare variable DIA INTEGER;
begin
EXECUTE PROCEDURE lee_configuracion('FACTURACION', 'PEDIDOS', 'VALIDAR RUTA DE PREVENTA POR VENDEDOR') returning_values (:RUTAPREV);
EXECUTE PROCEDURE lee_configuracion('FACTURACION', 'PEDIDOS', 'NUMERO DE DIAS PARA VER PEDIDOS MOVILES PREVIOS') returning_values (:DIAS);
if (rutaprev = 'SI') then
    BEGIN
    DIA = EXTRACT(WEEKDAY FROM :fecha);
    if (DIA = 0) then DIA = 64; -- Domingo
    if (DIA = 6) then DIA = 32; -- Sabado
    if (DIA = 5) then DIA = 16; -- Viernes
    if (DIA = 4) then DIA = 8;  -- Jueves
    if (DIA = 3) then DIA = 4;  -- Miercoles
    SELECT MAX(r.rupv_presup) FROM rutas_preventa R WHERE R.rupv_vendedor = :vend and (BIN_AND(:DIA, r.rupv_dias) <> 0) into :PRESUP;
    if (PRESUP IS NULL) then
        PRESUP = 0;
    END
ELSE
    PRESUP = 0;
PORACUM = 0;
FOR select PEDI_ID, PEDI_PEDWEB, PREF_PRE || PEDI_NUMERO, PEDI_FECHA, TERC_NIT, PEDI_SUCURSAL, PEDI_NOMTERC, PEDI_TOTAL
    from PEDIDOS WHERE PEDI_ANULADO = 'N' AND PEDI_FECHA >= (:FECHA - :DIAS) AND VEND_COD = :VEND
    INTO :ID_PEDIDO, :ID_PEDWEB, :NUMDOC, :FECDOC, :NIT, :SUCURSAL, :NOMBRE, :TOTAL
    DO
    BEGIN
    SELECT COUNT(pede_item) FROM pedidos_detalle WHERE PEDI_ID = :ID_PEDIDO INTO :ITEMS;
    EXECUTE PROCEDURE NOMBRE_ASCII(:NOMBRE) returning_values (:NOMBRE);
    if (PRESUP <> 0) then
        PORPRES = (TOTAL / PRESUP) * 100;
    else
        PORPRES = 0;
    PORACUM = PORACUM + PORPRES;
    suspend;
    END
end^

SET TERM ; ^



