-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrigger.sql
155 lines (130 loc) · 5.26 KB
/
trigger.sql
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
/*
Kargodaki hareketliliklerin sproc içerisinde Insert edilirken kurallara uygunluğunu daha sonra ise
kargo istatisliklerinin tutulduğu tabloda kargo durumuna göre istatistiklerin güncellenmesi yapılıyor.
*/
IF OBJECT_ID('dbo.trgKargo_Hareketleri') IS NOT NULL
BEGIN
DROP TRIGGER dbo.trgKargo_Hareketleri
END
GO
CREATE TRIGGER trgKargo_Hareketleri ON tblKargoHareketleri AFTER INSERT AS
DECLARE @DurumId INT
DECLARE @KargoSonDurumId INT
DECLARE @KargoId INT
DECLARE @VarisSubeId varchar(50)
DECLARE @CikisSaati time(7)
DECLARE @VarisSaati time(7)
-- inserted tablosundan gerekli bilgilerin çekilmesi
SELECT @DurumId = KargoDurumId,@KargoId=KargoId,@VarisSubeId=VarisSubeId,
@CikisSaati=CikisSaati,@VarisSaati = VarisSaati
FROM inserted
--Kargonun insertten önceki son durumu tblkargo tablosundan çekiliyor
SELECT @KargoSonDurumId = KargoSonDurumId FROM tblKargo WHERE ID= @KargoId
IF @KargoSonDurumId = 6
BEGIN
RAISERROR('KARGO ÇOKTAN TESLİM EDİLMİŞ,TESLİM DURUMUNDA BİR DEĞİŞİKLİK YAPAMAZSINIZ',16,1)
ROLLBACK
END
ELSE IF @KargoSonDurumId = @DurumId
BEGIN
RAISERROR('KARGO ZATEN MEVCUT DURUMDA',16,1)
ROLLBACK
END
ELSE IF @DurumId = 3
BEGIN
IF @VarisSaati IS NOT NULL OR @VarisSubeId IS NOT NULL
BEGIN
RAISERROR('ARACA YÜKLENEN BİR ÜRÜNÜN VARDIĞI BİR ŞUBE VE VARIŞ SAATİ OLAMAZ',16,1)
ROLLBACK
END
END
ELSE IF @DurumId = 5
BEGIN
IF @VarisSubeId IS NOT NULL
BEGIN
RAISERROR('KARGO,KURYEYE TESLİM EDİLMİŞ OLMALI,ŞUBEYE DEĞİL',16,1)
ROLLBACK
END
END
ELSE IF @DurumId = 6
BEGIN
IF @VarisSubeId IS NOT NULL OR @CikisSaati IS NOT NULL
BEGIN
RAISERROR('TESLİM EDİLEN BİR KARGONUN VARIŞ ŞUBESİ VEYA ÇIKIŞ SAATİ OLAMAZ',16,1)
ROLLBACK
END
END
IF @DurumId = 1
BEGIN
--Teslim edilemeyen ürün tekrar dağıtıma çıkarılırsa
IF @KargoSonDurumId = 7
UPDATE tblKargoIstatistikleri SET Basarisiz_Teslim_Sayisi = Basarisiz_Teslim_Sayisi - 1,Islemde_Olan_Kargo_Sayisi = Islemde_Olan_Kargo_Sayisi + 1
ELSE IF @KargoSonDurumId IS NULL
UPDATE tblKargoIstatistikleri SET Islemde_Olan_Kargo_Sayisi = Islemde_Olan_Kargo_Sayisi + 1
END
IF @DurumId = 6
BEGIN
-- Teslim edilemeyen ürün teslim edilirse
IF @KargoSonDurumId = 7
UPDATE tblKargoIstatistikleri SET Basarisiz_Teslim_Sayisi = Basarisiz_Teslim_Sayisi -1,Teslim_Sayisi = Teslim_Sayisi + 1
ELSE
UPDATE tblKargoIstatistikleri SET Islemde_Olan_Kargo_Sayisi = Islemde_Olan_Kargo_Sayisi - 1,Teslim_Sayisi = Teslim_Sayisi + 1
END
IF @DurumId = 7
BEGIN
UPDATE tblKargoIstatistikleri SET Islemde_Olan_Kargo_Sayisi = Islemde_Olan_Kargo_Sayisi - 1,Basarisiz_Teslim_Sayisi = Basarisiz_Teslim_Sayisi + 1
END
--trigger test 1 => hatasız
select * from tblKargoIstatistikleri
DECLARE @DateTimeForTry AS DATETIME = GETDATE();
DECLARE @DateForTry DATE
SET @DateForTry = CONVERT(date, @DateTimeForTry)
DECLARE @TimeForTry time(0)
SET @TimeForTry = CONVERT(time(7), @DateTimeForTry)
DECLARE @Plaka varchar(10)
DECLARE @BarkodNumarası varchar(200)
DECLARE @DurumBilgisi varchar(50)
DECLARE @VarisSubeKodu varchar(50)
DECLARE @CikisSubeKodu varchar(50)
SELECT @Plaka = Plaka FROM tblArac WHERE ID = 1
SELECT @BarkodNumarası=Barkod_Numarası FROM tblKargo WHERE ID = 25
SELECT @DurumBilgisi=Durum FROM tblKargoDurumu Where ID = 1
SELECT @VarisSubeKodu = Sube_Kodu FROM tblSube WHERE ID = 3
SELECT @CikisSubeKodu= Sube_Kodu FROM tblSube WHERE ID = 2
EXEC spKargo_Durumu_Update @DateForTry,@DateForTry,@Plaka,@BarkodNumarası,@DurumBilgisi,NULL,@TimeForTry,NULL,@CikisSubeKodu
select * from tblKargoIstatistikleri
--trigger test 2 => hatalı
DECLARE @DateTimeForTry AS DATETIME = GETDATE();
DECLARE @DateForTry DATE
SET @DateForTry = CONVERT(date, @DateTimeForTry)
DECLARE @TimeForTry time(0)
SET @TimeForTry = CONVERT(time(7), @DateTimeForTry)
DECLARE @Plaka varchar(10)
DECLARE @BarkodNumarası varchar(200)
DECLARE @DurumBilgisi varchar(50)
DECLARE @VarisSubeKodu varchar(50)
DECLARE @CikisSubeKodu varchar(50)
SELECT @Plaka = Plaka FROM tblArac WHERE ID = 1
SELECT @BarkodNumarası=Barkod_Numarası FROM tblKargo WHERE ID = 23
SELECT @DurumBilgisi=Durum FROM tblKargoDurumu Where ID = 1
SELECT @VarisSubeKodu = Sube_Kodu FROM tblSube WHERE ID = 3
SELECT @CikisSubeKodu= Sube_Kodu FROM tblSube WHERE ID = 2
EXEC spKargo_Durumu_Update @DateForTry,@DateForTry,@Plaka,@BarkodNumarası,@DurumBilgisi,NULL,@TimeForTry,NULL,@CikisSubeKodu
select * from tblKargoHareketleri
--trigger test 3 => hatalı
DECLARE @DateTimeForTry AS DATETIME = GETDATE();
DECLARE @DateForTry DATE
SET @DateForTry = CONVERT(date, @DateTimeForTry)
DECLARE @TimeForTry time(0)
SET @TimeForTry = CONVERT(time(7), @DateTimeForTry)
DECLARE @Plaka varchar(10)
DECLARE @BarkodNumarası varchar(200)
DECLARE @DurumBilgisi varchar(50)
DECLARE @VarisSubeKodu varchar(50)
DECLARE @CikisSubeKodu varchar(50)
SELECT @Plaka = Plaka FROM tblArac WHERE ID = 1
SELECT @BarkodNumarası=Barkod_Numarası FROM tblKargo WHERE ID = 17
SELECT @DurumBilgisi=Durum FROM tblKargoDurumu Where ID = 1
SELECT @VarisSubeKodu = Sube_Kodu FROM tblSube WHERE ID = 3
SELECT @CikisSubeKodu= Sube_Kodu FROM tblSube WHERE ID = 2
EXEC spKargo_Durumu_Update @DateForTry,@DateForTry,@Plaka,@BarkodNumarası,@DurumBilgisi,NULL,@TimeForTry,NULL,@CikisSubeKodu