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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
CREATE PROCEDURE [dbo].sp_gen_relever
(
@Gerer int
)
AS
DECLARE @CodeUsager varchar(10)
DECLARE @CodeForage varchar(10)
DECLARE @VolumeAnnuelPrelever Float
DECLARE @VolumePrelever Float
DECLARE @PrevIndex Float
DECLARE @Coeff Float
DECLARE @UnitPrice Money
DECLARE @PresenceCompteur INTEGER
DECLARE @EtatCompteur INTEGER
DECLARE @Id_Trimestre INTEGER
DECLARE @TypeReleve char(1)
DECLARE @ModeCalcul char(1)
DECLARE @NumCompteur varchar(20)
DECLARE @CodeTypeUsager varchar(5)
DECLARE @ID INTEGER
DECLARE @TableName varchar(50)
DECLARE @Result INTEGER
DECLARE @NombreForage INTEGER
SELECT @Id_Trimestre=id_trimestre FROM table_periode_rel where current_trim=1
BEGIN TRAN
SELECT
dbo.table_usager.code_usager,
dbo.table_usager.volume_prel_forf,
dbo.table_type_usager.pu_ht,
dbo.table_usager.code_type_usager
FROM
dbo.table_usager
INNER JOIN dbo.table_type_usager ON (dbo.table_usager.code_type_usager = dbo.table_type_usager
AND table_usager.usager_inactif=@Gerer)
OPEN curUsager
FETCH NEXT FROM curUsager INTO @CodeUsager,@VolumeAnnuelPrelever,@UnitPrice,
@CodeTypeUsager
WHILE @@FETCH_STATUS=0 --PARCOUR DE LA TABLE USAGER ET SELECT TABLE FORRAGE PAR USAGER
BEGIN --1
--DEBUT DU WHILE FORAGE
DECLARE curForage CURSOR FOR
SELECT
COUNT(code_forage) AS nombreForage,table_forage.code_forage,
table_forage.num_compteur,
table_forage.presence_compteur from table_forage
WHERE (table_forage.code_usager=@CodeUsager)
GROUP BY code_forage,num_compteur,presence_compteur
Open curForage
FETCH NEXT FROM curForage INTO @nombreForage,@CodeForage,@NumCompteur,@PresenceCompteur
WHILE @@FETCH_STATUS=0
BEGIN --2
IF @NumCompteur=''
BEGIN --3
@VolumePrelever = (@VolumeAnnuelPrelever / @nombreForage)/4
IF @@CURSOR_ROWS=1
@VolumePrelever = (@VolumeAnnuelPrelever/4)
END
SELECT @EtatCompteur=C.compteur_activer,@PrevIndex=C.dernier_index,@Coeff=C.coefficient,
@ModeCalcul=C.mode_calcul FROM table_compteur C WHERE C.num_compteur=@NumCompteur
IF @EtatCompteur=1
--si c'est un releve depuis le compteur type C et sans VolumePrelever (0)
BEGIN --4
SET @TypeReleve='I'
SET @VolumePrelever=0
END
ELSE
BEGIN --5
--si absence de compteur c'est un releve forfaitaire AVEC tYPE F
SET @TypeReleve='F'
SET @VolumePrelever = @VolumePrelever
END
EXEC @ID=dbo.sp_sys_key @TableName = 'table_releve'
INSERT INTO dbo.table_releve
(
Id,
code_usager,
num_compteur, -- TABLE FORAGE
prev_index, --TABLE COMPTEUR
nouvel_index,
volume_prelev, --TABLE USAGER
type_prelev,
date_releve,
pu_ht, -- TABLE TYPE_USAGER
code_type_usager,
id_fact,
num_fact,
coefficient, --COMPTEUR
calculer,
facturer,
id_trimestre,
mode_calcul
)
VALUES
(
@Id,
@CodeUsager,
@NumCompteur,
@PrevIndex,
0,
@VolumePrelever,
@TypeReleve,
null,
@UnitPrice,
@CodeTypeUsager,
null,
null,
@Coeff,
0,
0,
@Id_Trimestre,
@ModeCalcul
)
IF (@@error!=0)
BEGIN
RAISERROR 20000 'SERVEUR : Traitement impossible pour l''usager '
ROLLBACK TRAN
RETURN(@@error)
END
FETCH NEXT FROM curForage INTO @nombreForage,@CodeForage,
@NumCompteur,@PresenceCompteur
END --2 ---FIN DU WHILE FORAGE
CLOSE curForage
DEALLOCATE curForage
FETCH NEXT FROM curUsager INTO @CodeForage,@CodeUsager,@numcompteur,@PresenceCompteur,
@CodeTypeUsager,@VolumePrelever,@UnitPrice
END -- WHILE @@FETCH_STATUS=0 (1)
CLOSE curUsager
DEALLOCATE curUsager
COMMIT TRAN |
Partager