USE [HCITools] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Wait_Random_Time_Sunday]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[Wait_Random_Time_Sunday] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[Wait_Random_Time_Sunday] @in_debug tinyint = 0, @in_Minutes smallint AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- La SP sert à attendre un temps aléatoire compris entre 0 et une valeur définie seulement pour les pharmacies qui ne sont pas ouvertes le dimanche et pour les centrales Contexte d'utilisation ---------------------- Appelé depuis n'importe quel job Parametres ---------- @in_debug : non utilisé @in_Minutes : temps maximum en minute Creation : 15.08.19 / SPE Modifications : 29.10.19 / SPE : Ajout de la partie centrales 21.11.19 / SPE : Ajout verification du jour si dimanche et ne pas faire de random sur les centrales GC =============================================================================*/ set nocount on; /*------------------- Declaration des variables --------------------*/ DECLARE @errno int, @cvCurrentOrganizationalUnit int, @subsidiary_id int, @delay int, @errmsg varchar(255), @out_default_value varchar(60), @format varchar(60), @ou varchar(3), @time datetime /*------------ Affectation des parametres aux variables ------------*/ /*-------------------------- Traitement ---------------------------*/ BEGIN TRY /* only if it's sunday */ IF DATEPART(DW, GETDATE()) = 1 BEGIN IF EXISTS(SELECT 1 FROM [master].[cfg].[InstanceContext] WHERE Business = 'TPPHAR') BEGIN /* ------------------------------------------------------------------------------------------------------------------------------------- */ /* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 2 : RETRIEVE FORMAT AND OU CODE /////////////////////////////////////////////////// */ /* ------------------------------------------------------------------------------------------------------------------------------------- */ /* Get the cvCurrentOrganizationalUnit */ EXEC arizona.dbo.sp_bmc_Bmc_Applic_Default @in_job_type = 3, @in_param_int_1 = null, @in_param_int_2 = null, @in_param_varchar_1 = 'cvCurrentOrganizationalUnit', @out_default_value = @out_default_value OUTPUT, @out_param_int_1 = null; SELECT @cvCurrentOrganizationalUnit = convert(int,@out_default_value); /* Check if we have a value, if not leave this SP */ IF @cvCurrentOrganizationalUnit is null BEGIN SELECT @errno = 70001, @errmsg = '(APS) Error cvCurrentOrganizationalUnit does not exist!'; goto error_99; END /* Get the subsidiary id and OU code */ SELECT @subsidiary_id = ou.OU_subsidiary, @ou = ou.OU_Code FROM arizona.dbo.Organizational_unit ou with (nolock) WHERE ou.Organizational_unit_ID = @cvCurrentOrganizationalUnit; /* Check if we have a value, if not leave this SP */ IF @subsidiary_id is null BEGIN SELECT @errno = 70001, @errmsg = '(APS) Error subsidiary_id does not exist!'; goto error_99; END /* Get the current format */ SELECT @format = sub.SUB_code FROM arizona.dbo.Subsidiary sub with (nolock) WHERE sub.Subsidiary_ID = @subsidiary_id; /* Check if we have a value, if not leave this SP */ IF @format is null BEGIN SELECT @errno = 70001, @errmsg = '(APS) Error format does not exist!'; goto error_99; END /* Change the value into a compatible format */ IF @format = 'COOP' BEGIN SET @format = 'CVI' END IF @format = 'CENT' BEGIN SET @format = 'SUN' END IF @format = '000' BEGIN SET @format = 'AAI' END IF NOT EXISTS(SELECT 1 FROM HCITools.dbo.HCI_PARAMS WHERE HCIP_Key = 'WorkonSUN' and HCIP_value like '%' + @format+@ou + '%') BEGIN SELECT @delay = rand()* 60 * @in_Minutes SELECT @time = dateadd(ss,@delay, '01.01.1900') WAITFOR DELAY @time END END ELSE BEGIN /* Others servers (centrals) */ IF EXISTS(SELECT 1 FROM [master].[cfg].[Identity] WHERE Format = 'GCM') AND EXISTS(SELECT 1 FROM [master].[cfg].[InstanceContext] WHERE Business = 'TPCENT' and [Type] = 'PROD') BEGIN return(0) END ELSE BEGIN SELECT @delay = rand()* 60 * @in_Minutes SELECT @time = dateadd(ss,@delay, '01.01.1900') WAITFOR DELAY @time END END END /*---------------------- Traitement des erreurs ----------------------*/ END TRY BEGIN CATCH SELECT @errno = 70003, @errmsg = 'error on Wait_Random_Time_Sunday!' goto error_99 END CATCH; /*------------------ Retour au programme appelant -----------------*/ RETURN(@@error); /*---------------------- Traitement des erreurs ----------------------*/ error_99: RAISERROR (@errmsg, 16, 1); RETURN(@errno); GO