Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 12.95 KB | None | 0 0
  1. --BAZA DANYCH ZAMÓWIEŃ CERTYFIKATÓW--
  2. CREATE DATABASE Obsluga_Zamowien_Certyfikatow;
  3.  
  4. GO
  5.  
  6. USE Obsluga_Zamowien_Certyfikatow;
  7.  
  8. GO
  9.  
  10. CREATE TABLE Dzialy
  11. (id_dzialu INT IDENTITY(1,1) PRIMARY KEY,
  12. nazwa_dzialu VARCHAR(20));
  13.  
  14. GO
  15.  
  16. CREATE TABLE Pracownicy
  17. (id_pracownik INT IDENTITY(1,1) PRIMARY KEY,
  18. imie_pracownika VARCHAR(20) NOT NULL,
  19. nazwisko_pracownika VARCHAR(30) NOT NULL,
  20. PESEL BIGINT UNIQUE NOT NULL,
  21. id_dzialu INT REFERENCES Dzialy(id_dzialu));
  22.  
  23. GO
  24.  
  25. CREATE TABLE Klienci
  26. (id_klient INT IDENTITY(1,1) PRIMARY KEY,
  27. imie_klienta VARCHAR(20) NOT NULL,
  28. nazwisko_klienta VARCHAR(30) NOT NULL,
  29. ulica VARCHAR(100) NOT NULL,
  30. kod_pocztowy VARCHAR(6) NOT NULL,
  31. miasto VARCHAR(50) NOT NULL,
  32. telefon INT UNIQUE NOT NULL,
  33. e_mail VARCHAR(100) UNIQUE NOT NULL);
  34.  
  35. GO
  36.  
  37. CREATE TABLE Zamowienia
  38. (id_zamowienia INT IDENTITY(1,1) PRIMARY KEY,
  39. id_klient INT REFERENCES Klienci(id_klient),
  40. status_zamowienia VARCHAR(50) DEFAULT 'W realizacji',
  41. data_zamowienia DATE DEFAULT (GETDATE()),
  42. planowana_data_realizacji DATE DEFAULT (DATEADD(DAY,+14,GETDATE())),
  43. data_wyslania DATE,
  44. kto_wyslal INT REFERENCES Pracownicy(id_pracownik));
  45.  
  46. GO
  47.  
  48. CREATE TABLE Certyfikaty
  49. (id_certyfikat INT IDENTITY(1,1) PRIMARY KEY,
  50. id_zamowienia INT REFERENCES Zamowienia(id_zamowienia),
  51. typ VARCHAR(50));
  52.  
  53. GO
  54.  
  55.  
  56. CREATE TABLE Certyfikaty_log
  57. (id_certyfikaty_log INT IDENTITY(1,1) PRIMARY KEY,
  58. id_certyfikat INT REFERENCES Certyfikaty(id_certyfikat),
  59. id_pracownik INT REFERENCES Pracownicy(id_pracownik),
  60. status_certyfikatu VARCHAR(50) DEFAULT 'PRZEKAZANY DO PRODUKCJI' CHECK(status_certyfikatu='PRZEKAZANY DO PRODUKCJI' OR status_certyfikatu='WYDRUKOWANY' OR status_certyfikatu ='OHOLOGRAMOWANY' OR status_certyfikatu ='PODPISANY' OR status_certyfikatu ='PRZYGOTOWANY DO WYSYŁKI' OR status_certyfikatu ='WYSŁANE' OR status_certyfikatu ='ANULOWANY'),
  61. DATA DATETIME DEFAULT GETDATE());
  62.  
  63. GO
  64.  
  65.  
  66.  
  67. --PRZYKŁADOWE DANE--
  68.  
  69. USE Obsluga_Zamowien_Certyfikatow;
  70.  
  71. GO
  72.  
  73. INSERT INTO Dzialy (nazwa_dzialu)
  74. VALUES
  75. ('DRUK'),
  76. ('HOLOGRAMOWANIE'),
  77. ('PODPISY'),
  78. ('PAKOWANIE'),
  79. ('SPEDYCJA');
  80. GO
  81.  
  82. INSERT INTO Pracownicy (imie_pracownika, nazwisko_pracownika, PESEL, id_dzialu)
  83. VALUES
  84. ('Damian', 'Krzesik', 94012502365, 1),
  85. ('Danuta', 'Polaczek', 86020306369, 4),
  86. ('Krzysztof', 'Turet', 89111405667, 2),
  87. ('Marian', 'Stoker', 780117078960, 3),
  88. ('Barbara', 'Mańczuk', 85061570789, 2),
  89. ('Aleksander', 'Szewc', 89020326532, 1),
  90. ('Daria', 'Mróz', 91020406326, 3),
  91. ('Piotr', 'Szczęk', 91031202698, 4),
  92. ('Daria', 'Mocna', 92111503652, 5);
  93.  
  94. GO
  95.  
  96. INSERT INTO Klienci (imie_klienta,nazwisko_klienta,ulica,kod_pocztowy,miasto,telefon,e_mail) VALUES
  97. /*('Konrad','Tkacz','Połomskiego 4/16', '80-326','Gdańsk', 503698236, 'korad.tkacz@gmail.com'),*/
  98. ('Dorota','Zwada','Mściwoja 6', '52-200','Komorowice', 698642856, 'dorota.zwada@gmail.com'),
  99. ('Wojciech','Czart','Poznańska 56/3', '76-200','Słupsk', 768523695, 'wojciech.czart@gmail.com'),
  100. ('Damian','Ósmy','Wajdeloty 3', '80-437','Gdańsk', 659523655, 'damian.osmy@gmail.com'),
  101. ('Marzena','Mościcka','Jana Pawła II 43', '00-175','Warszawa', 563268958, 'marzena.moscicka@gmail.com'),
  102. ('Wiesław','Wszywka','Kołobrzeska 42', '80-394','Gdańsk', 503624857, 'wieslaw.wszywka@gmail.com');
  103.  
  104. GO
  105.  
  106. INSERT INTO Zamowienia (id_klient, status_zamowienia, data_zamowienia, planowana_data_realizacji, data_wyslania,kto_wyslal) VALUES
  107. (1, 'WYSŁANE', '2017-05-20', '2017-06-03', '2017-06-02', 9),
  108. (2, DEFAULT, '2017-06-01', '2017-06-15', NULL,NULL),
  109. (3, DEFAULT, '2017-06-05', '2017-06-19', NULL,NULL),
  110. (4, DEFAULT, '2017-06-10', '2017-06-24', NULL,NULL),
  111. (5, DEFAULT, DEFAULT, DEFAULT, NULL,NULL);
  112.  
  113. GO
  114.  
  115. INSERT INTO Certyfikaty (id_zamowienia, typ) VALUES
  116. (1, 'Szkoleniowy'),
  117. (1, 'Szkoleniowy'),
  118. (2, 'Jakościowy'),
  119. (2, 'Jakościowy'),
  120. (3, 'Szkoleniowy'),
  121. (3, 'Jakościowy'),
  122. (3, 'Szkoleniowy'),
  123. (4, 'Szkoleniowy'),
  124. (5, 'Jakościowy'),
  125. (5, 'Jakościowy');
  126.  
  127. GO
  128.  
  129. INSERT INTO Certyfikaty_log (id_certyfikat, id_pracownik, status_certyfikatu, DATA) VALUES
  130. (1, NULL, DEFAULT, '2017-05-20'),/*Zamowienie nr1*/
  131. (1, 1, 'WYDRUKOWANY', '2017-05-21'),
  132. (1, 3, 'OHOLOGRAMOWANY', '2017-05-22'),
  133. (1, 4, 'PODPISANY', '2017-05-23'),
  134. (1, 2, 'PRZYGOTOWANY DO WYSYŁKI', '2017-05-23'),
  135. (1, 9, 'WYSŁANE', '2017-06-02'),
  136. (2, NULL, DEFAULT, '2017-05-20'),
  137. (2, 6, 'WYDRUKOWANY', '2017-05-21'),
  138. (2, 5, 'OHOLOGRAMOWANY', '2017-05-22'),
  139. (2, 7, 'PODPISANY', '2017-05-23'),
  140. (2, 1, 'PRZYGOTOWANY DO WYSYŁKI', '2017-05-23'),
  141. (2, 9, 'WYSŁANE', '2017-06-02'),
  142. (3, NULL, DEFAULT, '2017-06-01'),/*Zamowienie nr2*/
  143. (3, 1, 'WYDRUKOWANY', '2017-06-02'),
  144. (3, 1, 'OHOLOGRAMOWANY', '2017-06-03'),
  145. (3, 1, 'PODPISANY', '2017-06-04'),
  146. (3, 1, 'PRZYGOTOWANY DO WYSYŁKI', '2017-06-05'),
  147. (4, NULL, DEFAULT, '2017-06-01'),
  148. (4, 1, 'WYDRUKOWANY', '2017-06-06'),
  149. (4, 1, 'OHOLOGRAMOWANY', '2017-06-07'),
  150. (4, 1, 'PODPISANY', '2017-06-08'),
  151. (5, NULL, DEFAULT, '2017-06-05'), /*Zamowienie nr3*/
  152. (5, 1, 'WYDRUKOWANY', '2017-06-06'),
  153. (5, 3, 'OHOLOGRAMOWANY', '2017-06-07'),
  154. (5, 4, 'PODPISANY', '2017-06-08'),
  155. (5, 2, 'PRZYGOTOWANY DO WYSYŁKI', '2017-06-09'),
  156. (6, NULL, DEFAULT, '2017-06-06'),
  157. (6, 1, 'WYDRUKOWANY', '2017-06-07'),
  158. (6, 5, 'OHOLOGRAMOWANY', '2017-06-09'),
  159. (7, 6, 'WYDRUKOWANY', '2017-06-09'),
  160. (8, NULL, DEFAULT, '2017-06-10'),/*Zamowienie nr4*/
  161. (8, 1, 'WYDRUKOWANY', '2017-06-12'),
  162. (9, NULL, DEFAULT, GETDATE()),/*Zamowienie nr5*/
  163. (10, NULL, DEFAULT, GETDATE());
  164.  
  165. GO
  166.  
  167. --WYZWALACZE--
  168.  
  169. /*Wyzwalacz zmieniający status zlecenia gdy wyszystkie certyfikaty z zamówienia są gotowe do wysyłki*/
  170.  
  171. USE Obsluga_Zamowien_Certyfikatow;
  172.  
  173. GO
  174. CREATE TRIGGER zmiana_statusu_zamowienia ON Certyfikaty_log
  175. AFTER INSERT AS
  176. BEGIN
  177. IF (SELECT COUNT(c.id_zamowienia)
  178. FROM (SELECT DISTINCT cl.id_certyfikat, MAX(DATA) DATA
  179. FROM Certyfikaty_log cl GROUP BY cl.id_certyfikat) sort
  180. INNER JOIN Certyfikaty_log cl ON sort.DATA=cl.DATA AND sort.id_certyfikat=cl.id_certyfikat
  181. INNER JOIN Certyfikaty c ON cl.id_certyfikat=c.id_certyfikat
  182. WHERE c.id_zamowienia IN (SELECT TOP 1 c.id_zamowienia FROM Certyfikaty_log cl INNER JOIN Certyfikaty c
  183. ON c.id_certyfikat=cl.id_certyfikat ORDER BY cl.id_certyfikaty_log DESC)
  184. AND (cl.status_certyfikatu LIKE 'PRZYGOTOWANY DO WYSYŁKI'))>=
  185. (SELECT COUNT(id_zamowienia) FROM Certyfikaty c
  186. WHERE c.id_zamowienia IN (SELECT TOP 1 c.id_zamowienia FROM Certyfikaty_log cl INNER JOIN Certyfikaty c
  187. ON c.id_certyfikat=cl.id_certyfikat ORDER BY cl.id_certyfikaty_log DESC))
  188. BEGIN
  189. UPDATE Zamowienia SET status_zamowienia=cl.status_certyfikatu
  190. FROM Zamowienia z INNER JOIN Certyfikaty c ON z.id_zamowienia=c.id_zamowienia INNER JOIN Certyfikaty_log cl ON c.id_certyfikat=cl.id_certyfikat
  191. WHERE cl.id_certyfikaty_log IN (SELECT MAX(id_certyfikaty_log) FROM Certyfikaty_log)
  192. END
  193. END;
  194. GO
  195. --PROCEDURY--
  196.  
  197. USE Obsluga_Zamowien_Certyfikatow;
  198.  
  199. GO
  200.  
  201. /*Procedura pokazująca opóźnione zamówienia*/
  202. CREATE PROC opoznione_zamowienia
  203. AS
  204. SELECT
  205. z.id_zamowienia, k.id_klient,k.imie_klienta,k.nazwisko_klienta,z.status_zamowienia, z.data_zamowienia, z.planowana_data_realizacji, DATEDIFF(dd,z.planowana_data_realizacji,GETDATE()) AS DNI_OPOZNIENIA
  206. FROM Zamowienia z INNER JOIN Klienci k ON z.id_klient=k.id_klient
  207. WHERE z.planowana_data_realizacji<= GETDATE() AND z.data_wyslania IS NULL;
  208. GO
  209.  
  210.  
  211. /*Procedura pokazująca wysłane zamowienia*/
  212. CREATE PROC wyslane_zamowienia
  213. AS
  214. SELECT z.id_zamowienia,z.status_zamowienia,z.data_zamowienia,z.data_wyslania,(p.imie_pracownika+' '+p.nazwisko_pracownika) AS Kto_wyslal
  215. FROM Zamowienia z INNER JOIN Pracownicy p ON z.kto_wyslal=p.id_pracownik
  216. WHERE z.status_zamowienia='WYSŁANE'
  217. ORDER BY z.id_zamowienia;
  218. GO
  219.  
  220. /*Procedura pokazująca kto przygotowywał certyfikaty dla danego zamówienia*/
  221. CREATE PROC kto_przygotowal @nr_zamowienia INT
  222. AS
  223. SELECT c.id_zamowienia, cl.id_certyfikat, c.typ, cl.status_certyfikatu, (p.imie_pracownika+' '+p.nazwisko_pracownika) AS 'Osoba odpowiedzialna',d.nazwa_dzialu AS Dział, cl.DATA
  224. FROM Certyfikaty c INNER JOIN Certyfikaty_log cl ON c.id_certyfikat=cl.id_certyfikat INNER JOIN Pracownicy p ON cl.id_pracownik=p.id_pracownik INNER JOIN Dzialy d ON  p.id_pracownik=d.id_dzialu
  225. WHERE c.id_zamowienia=@nr_zamowienia
  226. ORDER BY c.id_certyfikat,cl.DATA;
  227. GO
  228.  
  229. /*Procedura pokazująca certyfikaty gotowe do wysyłki*/
  230. CREATE PROC gotowe_do_wysylki
  231. AS
  232. SELECT c.id_zamowienia AS Numer_zamówienia,
  233. c.id_certyfikat AS Numer_Certyfikatu,
  234. cl.status_certyfikatu AS Status_certyfikatu, cl.DATA
  235.  
  236. FROM (SELECT DISTINCT cl.id_certyfikat, MAX(DATA) DATA
  237. FROM Certyfikaty_log cl GROUP BY cl.id_certyfikat) sort
  238. INNER JOIN Certyfikaty_log cl ON sort.DATA=cl.DATA AND sort.id_certyfikat=cl.id_certyfikat
  239. INNER JOIN Certyfikaty c ON cl.id_certyfikat=c.id_certyfikat
  240. WHERE cl.status_certyfikatu = 'PRZYGOTOWANY DO WYSYŁKI' AND cl.status_certyfikatu NOT LIKE 'WYSŁANE';
  241. GO
  242.  
  243. /*Procedura pokazująca które certyfikaty nie zostały przygotowane*/
  244. CREATE PROC ktore_nieprzygotwane
  245. AS
  246. SELECT c.id_zamowienia AS Numer_zamówienia,
  247. c.id_certyfikat AS Numer_Certyfikatu,
  248. cl.status_certyfikatu AS Status_certyfikatu, cl.DATA
  249.  
  250. FROM (SELECT DISTINCT cl.id_certyfikat, MAX(DATA) DATA
  251. FROM Certyfikaty_log cl GROUP BY cl.id_certyfikat) sort
  252. INNER JOIN Certyfikaty_log cl ON sort.DATA=cl.DATA AND sort.id_certyfikat=cl.id_certyfikat
  253. INNER JOIN Certyfikaty c ON cl.id_certyfikat=c.id_certyfikat
  254. WHERE cl.status_certyfikatu NOT LIKE 'PRZYGOTOWANY DO WYSYŁKI' AND cl.status_certyfikatu NOT LIKE 'WYSŁANE';
  255. GO
  256.  
  257. /*Procedura pokazująca certyfikaty do druku*/
  258. CREATE PROC do_druku
  259. AS
  260. SELECT c.id_zamowienia AS Numer_zamówienia,
  261. c.id_certyfikat AS Numer_Certyfikatu,
  262. cl.status_certyfikatu AS Status_certyfikatu, cl.DATA
  263.  
  264. FROM (SELECT DISTINCT cl.id_certyfikat, MAX(DATA) DATA
  265. FROM Certyfikaty_log cl GROUP BY cl.id_certyfikat) sort
  266. INNER JOIN Certyfikaty_log cl ON sort.DATA=cl.DATA AND sort.id_certyfikat=cl.id_certyfikat
  267. INNER JOIN Certyfikaty c ON cl.id_certyfikat=c.id_certyfikat
  268. WHERE cl.status_certyfikatu LIKE 'PRZEKAZANY DO PRODUKCJI';
  269. GO
  270.  
  271. /*Procedura pokazująca certyfikaty do hologramowania*/
  272. CREATE PROC do_hologramowania
  273. AS
  274. SELECT c.id_zamowienia AS Numer_zamówienia,
  275. c.id_certyfikat AS Numer_Certyfikatu,
  276. cl.status_certyfikatu AS Status_certyfikatu, cl.DATA
  277.  
  278. FROM (SELECT DISTINCT cl.id_certyfikat, MAX(DATA) DATA
  279. FROM Certyfikaty_log cl GROUP BY cl.id_certyfikat) sort
  280. INNER JOIN Certyfikaty_log cl ON sort.DATA=cl.DATA AND sort.id_certyfikat=cl.id_certyfikat
  281. INNER JOIN Certyfikaty c ON cl.id_certyfikat=c.id_certyfikat
  282. WHERE cl.status_certyfikatu LIKE 'WYDRUKOWANY';
  283. GO
  284.  
  285. /*Procedura pokazująca certyfikaty do podpisania*/
  286. CREATE PROC do_podpisania
  287. AS
  288. SELECT c.id_zamowienia AS Numer_zamówienia,
  289. c.id_certyfikat AS Numer_Certyfikatu,
  290. cl.status_certyfikatu AS Status_certyfikatu, cl.DATA
  291.  
  292. FROM (SELECT DISTINCT cl.id_certyfikat, MAX(DATA) DATA
  293. FROM Certyfikaty_log cl GROUP BY cl.id_certyfikat) sort
  294. INNER JOIN Certyfikaty_log cl ON sort.DATA=cl.DATA AND sort.id_certyfikat=cl.id_certyfikat
  295. INNER JOIN Certyfikaty c ON cl.id_certyfikat=c.id_certyfikat
  296. WHERE cl.status_certyfikatu LIKE 'OHOLOGRAMOWANY';
  297. GO
  298.  
  299. /*Procedura pokazująca certyfikaty do przygotowania do wysyłki*/
  300. CREATE PROC na_przygotowanie_do_wysylki
  301. AS
  302. SELECT c.id_zamowienia AS Numer_zamówienia,
  303. c.id_certyfikat AS Numer_Certyfikatu,
  304. cl.status_certyfikatu AS Status_certyfikatu, cl.DATA
  305.  
  306. FROM (SELECT DISTINCT cl.id_certyfikat, MAX(DATA) DATA
  307. FROM Certyfikaty_log cl GROUP BY cl.id_certyfikat) sort
  308. INNER JOIN Certyfikaty_log cl ON sort.DATA=cl.DATA AND sort.id_certyfikat=cl.id_certyfikat
  309. INNER JOIN Certyfikaty c ON cl.id_certyfikat=c.id_certyfikat
  310. WHERE cl.status_certyfikatu LIKE 'PODPISANY';
  311. GO
  312.  
  313. /*Wysłanie zamówienia do klienta*/
  314. CREATE PROC wyslanie_zamowienia @id_zamówienia INT, @id_pracownik INT,  @data_wyslania DATE
  315. AS
  316.  
  317. UPDATE Zamowienia SET status_zamowienia = 'WYSŁANE', kto_wyslal = @id_pracownik, data_wyslania=@data_wyslania
  318. WHERE id_zamowienia=@id_zamówienia;
  319.  
  320. INSERT INTO Certyfikaty_log (id_certyfikat,id_pracownik,status_certyfikatu)
  321. SELECT DISTINCT c.id_certyfikat,z.kto_wyslal,z.status_zamowienia
  322. FROM Zamowienia z INNER JOIN Certyfikaty c ON z.id_zamowienia=c.id_zamowienia
  323. INNER JOIN Certyfikaty_log cl ON c.id_certyfikat=cl.id_certyfikat
  324. WHERE z.id_zamowienia=@id_zamówienia;
  325. GO
  326.  
  327. /*Dodanie zapisu pracy*/
  328. CREATE proc dodanie_pracy @id_certyfikatu INT,@id_pracownika INT, @STATUS VARCHAR(50)
  329. AS
  330. INSERT INTO Certyfikaty_log(id_certyfikat,id_pracownik,status_certyfikatu) VALUES
  331. (@id_certyfikatu,@id_pracownika,@STATUS);
  332. GO
  333.  
  334. /*anulowanie zamówienia*/
  335. CREATE proc anuluj_zamowienie @id_zamowienia INT
  336. AS
  337. UPDATE Zamowienia SET status_zamowienia = 'ANULOWANE' WHERE id_zamowienia = @id_zamowienia
  338.  
  339. DECLARE @id_certyfikat INT
  340. DECLARE cur CURSOR LOCAL FOR SELECT id_certyfikat FROM Certyfikaty WHERE id_zamowienia = @id_zamowienia
  341. OPEN cur
  342. fetch NEXT FROM cur INTO @id_certyfikat
  343. while @@FETCH_STATUS = 0 BEGIN
  344.     INSERT INTO Certyfikaty_log (id_certyfikat, id_pracownik, DATA, status_certyfikatu) VALUES (@id_certyfikat, NULL, GETDATE(), 'ANULOWANY')
  345.  
  346.     fetch NEXT FROM cur INTO @id_certyfikat
  347. END
  348. close cur
  349. deallocate cur
  350. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement