1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| ALTER PROCEDURE [dbo].[calcul_prime_individuelle](@id_utilisateur_gldr int, @annee int)
AS
DECLARE @pb float;
DECLARE @pm int;
DECLARE @abs1 int;
DECLARE @abs2 int;
DECLARE @coef1 float;
DECLARE @coef2 float;
DECLARE @date1 datetime;
DECLARE @date2 datetime;
DECLARE @nb_jour int;
DECLARE @prime_debase_parjour float;
DECLARE @prime_auprorata_jour float;
DECLARE @prime_individuelle float;
-- Récupération des valeurs nécéssaires au calcul de la prime individuelle
SELECT
@date1=ISNULL(d_entree,'2010-01-01')
,@date2=ISNULL(d_sortie, '2010-31-12')
,@abs1=absenteisme1
,@abs2=absenteisme2
,@pm=ISNULL(part_manageriale, 0)
FROM
dbo.utilisateur_gldr A
WHERE
id_utilisateur_gldr=@id_utilisateur_gldr
SELECT
@pb = prime_Debase
FROM
dbo.PEG_HISTORIQUE_CALCUL
WHERE
annee = @annee
AND etat = 1
-- ********************************************************************************
-- CALCUL DE LA PRIME INDIVIDUELLE
--*********************************************************************************
-- On vérifit l'existance de la prime de base
IF NOT EXISTS(SELECT prime_Debase FROM peg_historique_calcul WHERE annee = @annee)
BEGIN
PRINT 'Il manque la prime de base';
RETURN;
END
IF EXISTS (SELECT prime_Debase FROM peg_historique_calcul WHERE annee = @annee)
BEGIN
-- Si les dates d'entrée et sortie de l'entreprise sont à NULL, on effectue le calcul sur 365 jours :
--IF @date1 IS NULL SET @date1 = '2010-01-01' ELSE SET @date1 = @date1;
--IF @date2 IS NULL SET @date2 = '2010-31-12' ELSE SET @date2 = @date2;
-- Si la prime managèriale (@pm) est à NULL, on remplace NULL par 0 pour que le calcul s'effectue :
--IF @pm IS NULL SET @pm = 0 ELSE SET @pm = @pm;
-- calcul du nombre de jours :
SET @nb_jour = DATEDIFF(day,@date1, @date2);
-- Calcule du montant de la prime de base par jour pour une année :
SET @prime_debase_parjour = @pb/364;
-- Calcul de la prime de base par jour sur l'année :
SET @prime_auprorata_jour = @nb_jour*@prime_debase_parjour;
-- Récupération des COEFFICIENTS en fonction des JOURS D'ABSENTEISME sur les deux semestres (ABS1 et ABS2):
SELECT
@coef1=coeff
FROM peg_parametre
WHERE @abs1 BETWEEN valeur_min AND valeur_max
SELECT
@coef2=coeff
FROM peg_parametre
WHERE @abs2 BETWEEN valeur_min AND valeur_max
-- CALCULE DE LA PRIME INDIVIDUELLE :
SET @prime_individuelle = (((@prime_auprorata_jour + @pm)/2) * @coef1) + (((@prime_auprorata_jour + @pm)/2) * @coef2);
-- Insertion de la prime individuelle :
UPDATE dbo.utilisateur_gldr
SET MONTANT_PEG=ROUND(@prime_individuelle,0)
WHERE id_utilisateur_gldr=@id_utilisateur_gldr
--Debug:
--PRINT @date1;
--PRINT @date2;
--PRINT @nb_jour;
--PRINT @pb;
--PRINT @prime_debase_parjour;
--PRINT @prime_auprorata_jour;
--PRINT @coef1;
--PRINT @coef1;
PRINT @prime_individuelle;
RETURN;
END |