BD.FUNC.ACD FUNC LLAMAME CREAR SIN INTENTO
PARÁMETROS
USE `nimitz`;
DROP function IF EXISTS `nimitz`.`ACD_FUNC_LLAMAME_CREAR_SIN_INTENTO`;
DELIMITER $$
USE `nimitz`$$
CREATE DEFINER=`adminNimitz`@`%` FUNCTION `ACD_FUNC_LLAMAME_CREAR_SIN_INTENTO`(
PAR_HORA_INTENTO DATETIME,
PAR_ID_LISTA_LLAMAMES INT,
PAR_COD_CLIENTE VARCHAR(32),
PAR_NOMBRE VARCHAR(45),
PAR_APELLIDO1 VARCHAR(45),
PAR_APELLIDO2 VARCHAR(45),
PAR_EMPRESA VARCHAR(45),
PAR_DIRECCION_1 VARCHAR(45),
PAR_DIRECCION_2 VARCHAR(45),
PAR_CODIGO_POSTAL VARCHAR(8),
PAR_LOCALIDAD VARCHAR(45),
PAR_PROVINCIA VARCHAR(45),
PAR_ID_PAIS INT,
PAR_EMAIL VARCHAR(45),
PAR_DESTINO VARCHAR(45),
PAR_SEXO INT,
PAR_ID_IDIOMA INT,
PAR_TRATAMIENTO INT,
PAR_OPCIONAL1_INT INT,
PAR_OPCIONAL2_INT INT,
PAR_OPCIONAL3_INT INT,
PAR_OPCIONAL4_INT INT,
PAR_OPCIONAL1_CAD VARCHAR(64),
PAR_OPCIONAL2_CAD VARCHAR(64),
PAR_OPCIONAL3_CAD VARCHAR(64),
PAR_OPCIONAL4_CAD VARCHAR(64)
) RETURNS varchar(32) CHARSET utf8
MODIFIES SQL DATA
DETERMINISTIC
begin
declare VAR_NO_HAY BOOLEAN;
declare VAR_HORA_INTENTO DATETIME;
declare VAR_ID_CAMPANNA INT;
declare VAR_TIPO_CANAL INT;
declare VAR_SEGS_LIMITE INT;
declare VAR_PRIORIDAD INT;
declare VAR_CAMPANNA_ACTIVA INT;
declare VAR_CAMPANNA_NO_USAR INT;
declare VAR_ID_LLAMAME INT;
declare VAR_CONTADOR INT;
declare SQL_LISTA_LLAMAMES CURSOR for
select C.`ID`,L.`E_TIPO_CANAL`,L.`N_SEGS_LIMITE`,L.`N_PRIORIDAD`,C.`B_ACTIVA`,C.`B_NO_USAR`
from `ACD_LISTAS_LLAMAMES` as L
left join `ACD_CAMPANNAS` as C on L.`ID_CAMPANNA`=C.`ID`
where L.`ID`=PAR_ID_LISTA_LLAMAMES and L.`B_NO_USAR`=0;
declare SQL_NUM_INTENTOS CURSOR for
select DI.`ID`
from DAT_INTENTOS_MARCADOR as DI
inner join DAT_LLAMAMES as DL
on DL.`ID` = DI.`ID_LLAMAME` and DI.`ID_LLAMAME` is not null
where DI.`C_DESTINO`=CONVERT(PAR_DESTINO using utf8) collate utf8_spanish_ci and DI.`E_ESTADO_INTENTO`<110 or DI.`C_DESTINO`=CONVERT(PAR_DESTINO using utf8) collate utf8_spanish_ci and DI.`E_ESTADO_INTENTO`=110 and DL.`E_TIPO_COMPLETADO`=300;
declare CONTINUE HANDLER FOR NOT FOUND set VAR_NO_HAY=TRUE;
declare EXIT HANDLER FOR SQLEXCEPTION
begin
return 'SQL_ERROR';
end;
if PAR_DESTINO IS NULL
then return 'PAR_DESTINO nulo'; end if;
if PAR_DESTINO=
then return 'PAR_DESTINO vacio';
end if;
set VAR_NO_HAY=FALSE;
open SQL_NUM_INTENTOS;
fetch SQL_NUM_INTENTOS into VAR_CONTADOR;
close SQL_NUM_INTENTOS;
if VAR_NO_HAY=FALSE then return 'Existen intentos'; end if;
set VAR_NO_HAY=FALSE;
open SQL_LISTA_LLAMAMES;
fetch SQL_LISTA_LLAMAMES into VAR_ID_CAMPANNA,VAR_TIPO_CANAL,VAR_SEGS_LIMITE,VAR_PRIORIDAD,VAR_CAMPANNA_ACTIVA,VAR_CAMPANNA_NO_USAR;
close SQL_LISTA_LLAMAMES;
if VAR_NO_HAY then return 'No existe ID_LISTA_LLAMAMES'; end if;
if (VAR_ID_CAMPANNA is NULL) or (VAR_ID_CAMPANNA=0) then return 'No hay CAMPANNA'; end if;
if (VAR_CAMPANNA_ACTIVA is NULL) or (VAR_CAMPANNA_ACTIVA=0) or (VAR_CAMPANNA_NO_USAR is NULL) or (VAR_CAMPANNA_NO_USAR<>0) then return 'CAMPANNA cerrada'; end if;
if PAR_HORA_INTENTO is NULL then set VAR_HORA_INTENTO = Now(); else set VAR_HORA_INTENTO = PAR_HORA_INTENTO; end if;
insert into `DAT_LLAMAMES`
( `D_HORA_INI`,
`ID_LISTA_LLAMAMES`,
`C_COD_CLIENTE`,
`C_NOMBRE`,
`C_APELLIDO1`,
`C_APELLIDO2`,
`C_EMPRESA`,
`C_DIRECCION_1`,
`C_DIRECCION_2`,
`C_CODIGO_POSTAL`,
`C_LOCALIDAD`,
`C_PROVINCIA`,
`ID_PAIS`,
`E_TIPO_CANAL`,
`C_EMAIL`,
`C_DESTINO`,
`E_SEXO`,
`ID_IDIOMA`,
`E_TRATAMIENTO`,
`N_OPCIONAL1_INT`,
`N_OPCIONAL2_INT`,
`N_OPCIONAL3_INT`,
`N_OPCIONAL4_INT`,
`C_OPCIONAL1_CAD`,
`C_OPCIONAL2_CAD`,
`C_OPCIONAL3_CAD`,
`C_OPCIONAL4_CAD`,
`E_TIPO_COMPLETADO`,
`B_INTENTO_EN_EJECUCION`
)
values
( VAR_HORA_INTENTO,
PAR_ID_LISTA_LLAMAMES,
PAR_COD_CLIENTE,
PAR_NOMBRE,
PAR_APELLIDO1,
PAR_APELLIDO2,
PAR_EMPRESA,
PAR_DIRECCION_1,
PAR_DIRECCION_2,
PAR_CODIGO_POSTAL,
PAR_LOCALIDAD,
PAR_PROVINCIA,
PAR_ID_PAIS,
VAR_TIPO_CANAL,
PAR_EMAIL,
PAR_DESTINO,
PAR_SEXO,
PAR_ID_IDIOMA,
PAR_TRATAMIENTO,
PAR_OPCIONAL1_INT,
PAR_OPCIONAL2_INT,
PAR_OPCIONAL3_INT,
PAR_OPCIONAL4_INT,
PAR_OPCIONAL1_CAD,
PAR_OPCIONAL2_CAD,
PAR_OPCIONAL3_CAD,
PAR_OPCIONAL4_CAD,
0,
1 );
set VAR_ID_LLAMAME = last_insert_id();
insert into `DAT_INTENTOS_MARCADOR` ( `D_HORA_PROXIMA`,
`D_HORA_LIMITE`,
`D_HORA_ULTIMA`,
`ID_CAMPANNA`,
`E_ORIGEN_INTENTO`,
`ID_LLAMAME`,
`E_TIPO_CANAL`,
`C_DESTINO`,
`C_COD_CLIENTE`,
`N_PRIORIDAD`,
`E_ESTADO_INTENTO`,
`E_TIPO_COMPLETADO`
)
values
(
VAR_HORA_INTENTO,
DATE_ADD(VAR_HORA_INTENTO, interval VAR_SEGS_LIMITE SECOND),
Now(),
VAR_ID_CAMPANNA,
20,
VAR_ID_LLAMAME,
VAR_TIPO_CANAL,
PAR_DESTINO,
PAR_COD_CLIENTE,
VAR_PRIORIDAD,
20,
0 );
return NULL;
end$$
DELIMITER ;