· 6 years ago · Sep 12, 2019, 09:54 AM
1-- =============================================
2-- WorkItem: #20751
3-- Author: Nikita Wołosewicz
4-- Create date: 2019-05-24
5-- Description: Wypełnia tabele wyników na podstawie XML z wynikami maturalnymi
6-- Modified: #23324; N.Wołosewicz; 2019-06-04; Aktualizacja typów tabeli tymczasowej; poprawienie case'a
7-- Modified: #23456; N.Wołosewicz; 2019-06-17; Usunięcie poszczególnych errorsów; insert do tabeli ImportPlikow; drobne poprawki
8-- Modified: #24417; N.Wołosewicz; 2019-07-17; Dodanie płci, miejsca oraz daty urodzenia
9-- Modified: #24492; N.Wołosewicz; 2019-07-23; Usunięcie nieużywanych pól
10-- Modified: #25658; N.Wołosewicz; 2019-08-29; Dodanie olimpiady oraz informacji czy egzamin jest obowiązkowy; usunięcie wymagalności kodu arkusza; sprawdzenie po kodzie KREM zamiast zwykłego kodu, dodanie id-ków sesji, rodzaju deklaracji oraz oke do responsu
11-- =============================================
12CREATE PROCEDURE [wynik].[proc_OKEImportEgzaminZMaturyAdd]
13 @SourceData [dbo].[EgzaminZMatury] READONLY,
14 @SesjaEgzaminacyjnaID INT,
15 @SystemNazwa NVARCHAR(100),
16 @NazwaPliku NVARCHAR(255),
17 @OkeID INT,
18 @RodzajDeklaracjiID INT,
19 @UzytkownikModyfikacjiID INT
20AS
21BEGIN
22 SET NOCOUNT ON;
23 SET XACT_ABORT ON;
24
25 /* insert do importu plików */
26 INSERT INTO wynik.ImportPlikow
27 (
28 IdOkregowaKomisjaEgzaminacyjna,
29 NazwaPliku,
30 NazwaSystemu,
31 DataDodania,
32 IdUzytkownikModyfikacji
33 )
34 VALUES
35 (
36 @OkeID,
37 @NazwaPliku,
38 @SystemNazwa,
39 SYSUTCDATETIME(),
40 @UzytkownikModyfikacjiID
41 )
42
43 /* errorsy */
44 DECLARE @SourceErrors TABLE(
45 PodmiotInternalID INT NOT NULL,
46 PodmiotNazwa NVARCHAR(270) NOT NULL,
47 PodmiotRspo INT NULL,
48 PodmiotTypID INT NOT NULL,
49 PodmiotKod NCHAR(12) NOT NULL,
50
51 ZdajacyID INT NOT NULL,
52 ZdajacyImie NVARCHAR(50) NOT NULL,
53 ZdajacyImieDrugie NVARCHAR(50),
54 ZdajacyNazwisko NVARCHAR(100) NOT NULL,
55 ZdajacyPesel NCHAR(11) NULL,
56 ZdajacyDokumentTypID INT NULL,
57 ZdajacyDokumentNumer NVARCHAR(30) NULL,
58 ZdajacyDataUrodzenia DATETIME2,
59 ZdajacyMiejsceUrodzenia NVARCHAR(100),
60 ZdajacyPlec NCHAR(1),
61 ZdajacyCzyPosiadaWyniki BIT NOT NULL,
62
63 WynikKodEgzaminu NVARCHAR(8) NULL,
64 WynikCzyEgzaminObowiazkowy BIT NULL,
65 WynikJezykZdawaniaID INT NULL,
66 WynikFormaZdawaniaID INT NULL,
67 WynikPoziomZdawaniaID INT NULL,
68 WynikStanWynikuID INT NULL,
69 WynikStanZdawaniaEgzaminuID INT NULL,
70 WynikProcent INT NULL,
71 WynikCentylWartosc INT NULL,
72 WynikUzyskanePunkty REAL NULL,
73 WynikOlimpiadaID INT NULL,
74
75 WynikArkuszaKodArkusza NVARCHAR(18) NULL,
76
77 NazwaBledu NVARCHAR(255) NOT NULL
78 )
79
80 ;WITH CTE_Duplicated AS
81 (
82 SELECT
83 1 AS ID,
84 ZdajacyPesel,
85 ZdajacyDokumentTypID,
86 ZdajacyDokumentNumer
87 FROM
88 @SourceData
89 GROUP BY
90 ZdajacyPesel,
91 ZdajacyDokumentTypID,
92 ZdajacyDokumentNumer
93 HAVING
94 COUNT(DISTINCT PodmiotInternalID) > 1
95 AND (
96 COUNT(ZdajacyPesel) > 1
97 OR COUNT(ZdajacyDokumentNumer) > 1
98 )
99 )
100 INSERT INTO @SourceErrors
101 (
102 PodmiotNazwa,
103 PodmiotRspo,
104 PodmiotTypID,
105 PodmiotKod,
106 PodmiotInternalID,
107 ZdajacyID,
108 ZdajacyImie,
109 ZdajacyImieDrugie,
110 ZdajacyNazwisko,
111 ZdajacyPesel,
112 ZdajacyCzyPosiadaWyniki,
113 ZdajacyDokumentTypID,
114 ZdajacyDokumentNumer,
115 ZdajacyDataUrodzenia,
116 ZdajacyMiejsceUrodzenia,
117 ZdajacyPlec,
118 WynikKodEgzaminu,
119 WynikCzyEgzaminObowiazkowy,
120 WynikJezykZdawaniaID,
121 WynikFormaZdawaniaID,
122 WynikPoziomZdawaniaID,
123 WynikStanWynikuID,
124 WynikStanZdawaniaEgzaminuID,
125 WynikProcent,
126 WynikCentylWartosc,
127 WynikUzyskanePunkty,
128 WynikOlimpiadaID,
129 WynikArkuszaKodArkusza,
130 NazwaBledu
131 )
132 SELECT DISTINCT
133 PodmiotNazwa,
134 PodmiotRspo,
135 PodmiotTypID,
136 PodmiotKod,
137 PodmiotInternalID,
138 ZdajacyID,
139 ZdajacyImie,
140 ZdajacyImieDrugie,
141 ZdajacyNazwisko,
142 sd.ZdajacyPesel,
143 ZdajacyCzyPosiadaWyniki,
144 sd.ZdajacyDokumentTypID,
145 sd.ZdajacyDokumentNumer,
146 sd.ZdajacyDataUrodzenia,
147 sd.ZdajacyMiejsceUrodzenia,
148 sd.ZdajacyPlec,
149 WynikKodEgzaminu,
150 WynikCzyEgzaminObowiazkowy,
151 WynikJezykZdawaniaID,
152 WynikFormaZdawaniaID,
153 WynikPoziomZdawaniaID,
154 WynikStanWynikuID,
155 WynikStanZdawaniaEgzaminuID,
156 WynikProcent,
157 WynikCentylWartosc,
158 WynikUzyskanePunkty,
159 WynikOlimpiadaID,
160 WynikArkuszaKodArkusza,
161 CASE WHEN s.ID IS NULL THEN N'Brak sesji egzaminacyjnej o podanym ID'
162 WHEN oke.ID IS NULL THEN N'Brak OKE o podanym ID'
163 WHEN rdek.ID IS NULL THEN N'Brak rodzaju deklaracji o podanym ID'
164 WHEN (s.IdTypZgloszenia <> rdek.IdTypZgloszenia) THEN N'Podana sesja egzaminacyjna nie należy do podanego rodzaju deklaracji'
165 WHEN (tdt.ID IS NULL AND sd.ZdajacyPesel IS NULL) THEN N'Brak typu dokumentu tożsamości o podanym ID'
166 WHEN tp.ID IS NULL THEN N'Brak typu placówki o podanym ID lub typ placowki dla deklaracji nie jest zgodny z typem zgłoszenia'
167 WHEN te.ID IS NULL THEN N'Brak egzaminu dla danego rodzaju deklaracji o podanym kodzie KREM, poziomie, formie bądź języku zdawania'
168 WHEN sze.ID IS NULL THEN N'Brak stanu zdawania egzaminu o podanym ID'
169 WHEN sw.ID IS NULL THEN N'Brak stanu wyniku o podanym ID lub podany stan wyniku nie obowiązuje dla podanego rodzaju deklaracji'
170 WHEN (sd.WynikArkuszaKodArkusza IS NOT NULL AND ae.ID IS NULL) THEN N'Brak arkusza egzaminacyjnego o podanym kodzie lub arkusz nie jest powiązany z danym egzaminem'
171 WHEN dp.ID IS NOT NULL THEN N'Podany pesel lub nr dokumentu się duplikuje w innej placówce'
172 WHEN (sd.WynikOlimpiadaID IS NOT NULL AND o.ID IS NULL) THEN N'Brak olimpiady o podanym ID lub olimpiada nie należy do danego typu zgłoszenia'
173 WHEN (sd.WynikOlimpiadaID IS NOT NULL AND oze.ID IS NULL) THEN N'Brak olimpiady zwalniającej z egzaminu dla danej olimpiady i danego typu egzaminu'
174 WHEN (sd.WynikCentylWartosc IS NOT NULL AND ae.ID IS NULL) THEN N'Brak arkusza egzaminacyjnego dla przypisania centyli'
175 ELSE NULL -- ma docelowo wyrzucić błąd, taka sytuacja powinna być niemożliwa
176 END
177 FROM
178 @SourceData sd
179 LEFT JOIN slownik.OkregowaKomisjaEgzaminacyjna oke ON oke.ID = @OkeID AND oke.CzyWycofany = 0
180 LEFT JOIN egzamin.SesjaEgzaminacyjna s ON s.ID = @SesjaEgzaminacyjnaID AND s.CzyUsuniety = 0
181 LEFT JOIN egzamin.TypZgloszeniaDlaRozporzadzenia rdek ON rdek.ID = @RodzajDeklaracjiID AND rdek.CzyWycofany = 0
182 LEFT JOIN slownik.TypDokumentuTozsamosci tdt ON tdt.ID = sd.ZdajacyDokumentTypID AND tdt.CzyWycofany = 0
183 LEFT JOIN slownik.TypPlacowki tp
184 INNER JOIN slownik.TypZgloszeniaDlaTypuPlacowki tzdtp ON tzdtp.IdTypPlacowki = tp.ID
185 INNER JOIN egzamin.TypZgloszeniaDlaRozporzadzenia tzdr_p ON tzdr_p.IdTypZgloszenia = tzdtp.IdTypZgloszenia
186 ON tp.ID = sd.PodmiotTypID
187 AND tp.CzyWycofany = 0
188 AND tzdtp.CzyWycofany = 0
189 AND tzdr_p.CzyWycofany = 0
190 AND tzdr_p.ID = @RodzajDeklaracjiID
191 LEFT JOIN egzamin.TypEgzaminu te
192 INNER JOIN egzamin.Egzamin e ON e.IdTypEgzaminu = te.ID
193 ON te.KodKrem = sd.WynikKodEgzaminu
194 AND e.IdSesjaEgzaminacyjna = @SesjaEgzaminacyjnaID
195 AND te.IdTypFormyZdawania = sd.WynikFormaZdawaniaID
196 AND te.IdTypJezykaZdawania = sd.WynikJezykZdawaniaID
197 AND te.IdTypPoziomu = sd.WynikPoziomZdawaniaID
198 AND te.CzyWycofany = 0
199 AND te.IdTypZgloszeniaDlaRozporzadzenia = @RodzajDeklaracjiID
200 LEFT JOIN wynik.StanZdawaniaEgzaminu sze ON sze.ID = sd.WynikStanZdawaniaEgzaminuID
201 LEFT JOIN wynik.StanWyniku sw
202 INNER JOIN wynik.StanWynikuDlaTypuZgloszenia swdtz ON swdtz.IdStanWyniku = sw.ID
203 INNER JOIN egzamin.TypZgloszeniaDlaRozporzadzenia tzdr ON tzdr.IdTypZgloszenia = swdtz.IdTypZgloszenia
204 ON sw.ID = sd.WynikStanWynikuID
205 AND sw.CzyWycofany = 0
206 AND swdtz.CzyWycofany = 0
207 AND tzdr.CzyWycofany = 0
208 AND tzdr.ID = @RodzajDeklaracjiID
209 LEFT JOIN egzamin.ArkuszEgzaminacyjny ae ON ae.KodArkusza = sd.WynikArkuszaKodArkusza
210 AND ae.CzyUsuniety = 0
211 AND ae.IdEgzamin = e.ID
212 LEFT JOIN CTE_Duplicated dp ON (dp.ZdajacyPesel = sd.ZdajacyPesel) OR (dp.ZdajacyDokumentTypID = sd.ZdajacyDokumentTypID AND dp.ZdajacyDokumentNumer = sd.ZdajacyDokumentNumer)
213 LEFT JOIN slownik.Olimpiada o ON o.ID = sd.WynikOlimpiadaID
214 AND o.IdTypZgloszenia = s.IdTypZgloszenia
215 AND o.CzyWycofany = 0
216 LEFT JOIN egzamin.OlimpiadaZwalniajacaZEgzaminu oze ON oze.IdOlimpiada = o.ID
217 AND oze.IdTypEgzaminu = te.ID
218 AND oze.CzyUsuniety = 0
219 WHERE
220 oke.ID IS NULL
221 OR s.ID IS NULL
222 OR rdek.ID IS NULL
223 OR (s.IdTypZgloszenia <> rdek.IdTypZgloszenia)
224 OR (tdt.ID IS NULL AND sd.ZdajacyPesel IS NULL)
225 OR tp.ID IS NULL
226 OR (
227 sd.ZdajacyCzyPosiadaWyniki = 1
228 AND (
229 te.ID IS NULL
230 OR sze.ID IS NULL
231 OR sw.ID IS NULL
232 OR (sd.WynikArkuszaKodArkusza IS NOT NULL AND ae.ID IS NULL)
233 OR (sd.WynikOlimpiadaID IS NOT NULL AND o.ID IS NULL)
234 OR (sd.WynikOlimpiadaID IS NOT NULL AND oze.ID IS NULL)
235 OR (sd.WynikCentylWartosc IS NOT NULL AND ae.ID IS NULL)
236 )
237 )
238 OR dp.ID IS NOT NULL
239
240 DECLARE @SourceFiltered [dbo].[EgzaminZMatury]
241 MERGE INTO @SourceFiltered target
242 USING
243 (
244 SELECT x.*, p.ID AS PodmiotID FROM (
245 SELECT
246 PodmiotKod,
247 PodmiotNazwa,
248 PodmiotRspo,
249 PodmiotTypID,
250 PodmiotInternalID,
251 ZdajacyDokumentNumer,
252 ZdajacyDokumentTypID,
253 ZdajacyID,
254 ZdajacyImie,
255 ZdajacyImieDrugie,
256 ZdajacyNazwisko,
257 ZdajacyPesel,
258 ZdajacyDataUrodzenia,
259 ZdajacyMiejsceUrodzenia,
260 ZdajacyPlec,
261 ZdajacyCzyPosiadaWyniki,
262 WynikKodEgzaminu,
263 WynikCzyEgzaminObowiazkowy,
264 WynikJezykZdawaniaID,
265 WynikFormaZdawaniaID,
266 WynikPoziomZdawaniaID,
267 WynikStanWynikuID,
268 WynikStanZdawaniaEgzaminuID,
269 WynikProcent,
270 WynikCentylWartosc,
271 WynikUzyskanePunkty,
272 WynikOlimpiadaID,
273 WynikArkuszaKodArkusza
274 FROM
275 @SourceData
276 EXCEPT
277 SELECT
278 PodmiotKod,
279 PodmiotNazwa,
280 PodmiotRspo,
281 PodmiotTypID,
282 PodmiotInternalID,
283 ZdajacyDokumentNumer,
284 ZdajacyDokumentTypID,
285 ZdajacyID,
286 ZdajacyImie,
287 ZdajacyImieDrugie,
288 ZdajacyNazwisko,
289 ZdajacyPesel,
290 ZdajacyDataUrodzenia,
291 ZdajacyMiejsceUrodzenia,
292 ZdajacyPlec,
293 ZdajacyCzyPosiadaWyniki,
294 WynikKodEgzaminu,
295 WynikCzyEgzaminObowiazkowy,
296 WynikJezykZdawaniaID,
297 WynikFormaZdawaniaID,
298 WynikPoziomZdawaniaID,
299 WynikStanWynikuID,
300 WynikStanZdawaniaEgzaminuID,
301 WynikProcent,
302 WynikCentylWartosc,
303 WynikUzyskanePunkty,
304 WynikOlimpiadaID,
305 WynikArkuszaKodArkusza
306 FROM
307 @SourceErrors
308 )x
309 LEFT JOIN podmiot.Placowka p ON (p.Rspo = x.PodmiotRspo OR p.Kod = x.PodmiotKod)
310 ) query
311 ON 1 <> 1
312 WHEN NOT MATCHED THEN
313 INSERT
314 (
315 PodmiotID,
316 PodmiotKod,
317 PodmiotNazwa,
318 PodmiotRspo,
319 PodmiotTypID,
320 PodmiotInternalID,
321 ZdajacyDokumentNumer,
322 ZdajacyDokumentTypID,
323 ZdajacyID,
324 ZdajacyImie,
325 ZdajacyImieDrugie,
326 ZdajacyNazwisko,
327 ZdajacyPesel,
328 ZdajacyDataUrodzenia,
329 ZdajacyMiejsceUrodzenia,
330 ZdajacyPlec,
331 ZdajacyCzyPosiadaWyniki,
332 WynikKodEgzaminu,
333 WynikCzyEgzaminObowiazkowy,
334 WynikJezykZdawaniaID,
335 WynikFormaZdawaniaID,
336 WynikPoziomZdawaniaID,
337 WynikStanWynikuID,
338 WynikStanZdawaniaEgzaminuID,
339 WynikProcent,
340 WynikCentylWartosc,
341 WynikUzyskanePunkty,
342 WynikOlimpiadaID,
343 WynikArkuszaKodArkusza
344 )
345 VALUES
346 (
347 query.PodmiotID,
348 query.PodmiotKod,
349 query.PodmiotNazwa,
350 query.PodmiotRspo,
351 query.PodmiotTypID,
352 query.PodmiotInternalID,
353 query.ZdajacyDokumentNumer,
354 query.ZdajacyDokumentTypID,
355 query.ZdajacyID,
356 query.ZdajacyImie,
357 query.ZdajacyImieDrugie,
358 query.ZdajacyNazwisko,
359 query.ZdajacyPesel,
360 query.ZdajacyDataUrodzenia,
361 query.ZdajacyMiejsceUrodzenia,
362 query.ZdajacyPlec,
363 query.ZdajacyCzyPosiadaWyniki,
364 query.WynikKodEgzaminu,
365 query.WynikCzyEgzaminObowiazkowy,
366 query.WynikJezykZdawaniaID,
367 query.WynikFormaZdawaniaID,
368 query.WynikPoziomZdawaniaID,
369 query.WynikStanWynikuID,
370 query.WynikStanZdawaniaEgzaminuID,
371 query.WynikProcent,
372 query.WynikCentylWartosc,
373 query.WynikUzyskanePunkty,
374 query.WynikOlimpiadaID,
375 query.WynikArkuszaKodArkusza
376 );
377
378 IF EXISTS (SELECT TOP 1 1 FROM @SourceFiltered)
379 BEGIN
380 BEGIN TRAN
381 /* insert placówek */
382 DECLARE @TempPodmioty TABLE (ID INT UNIQUE, InternalID INT UNIQUE)
383 MERGE INTO podmiot.Placowka target
384 USING
385 (
386 SELECT DISTINCT
387 sf.PodmiotID,
388 sf.PodmiotInternalID,
389 sf.PodmiotKod,
390 sf.PodmiotNazwa,
391 sf.PodmiotRspo,
392 sf.PodmiotTypID
393 FROM
394 @SourceFiltered sf
395 ) source
396 ON (target.ID = source.PodmiotID)
397 WHEN NOT MATCHED THEN
398 INSERT
399 (
400 Kod,
401 Nazwa,
402 Rspo,
403 IdTypPlacowki,
404 IdOkregowaKomisjaEgzaminacyjna,
405 IdUzytkownikModyfikacji,
406 DataZarejestrowaniaWOKE
407 )
408 VALUES
409 (
410 source.PodmiotKod,
411 source.PodmiotNazwa,
412 ISNULL(source.PodmiotRspo, -1), -- ustalenia z PO
413 source.PodmiotTypID,
414 @OkeID,
415 @UzytkownikModyfikacjiID,
416 SYSUTCDATETIME()
417 )
418 OUTPUT
419 INSERTED.ID,
420 source.PodmiotInternalID
421 INTO @TempPodmioty(ID, InternalID);
422
423 UPDATE sf
424 SET
425 sf.PodmiotID = tp.ID
426 FROM
427 @SourceFiltered sf
428 INNER JOIN @TempPodmioty tp ON sf.PodmiotInternalID = tp.InternalID
429
430 /* insert danych osobowych */
431 DECLARE @TempDaneOsobowe TABLE (ID INT UNIQUE, ImportZdajacyID INT, PlacowkaID INT NULL)
432
433 MERGE INTO deklaracja.DaneOsoboweZdajacego target
434 USING
435 (
436 SELECT
437 sf.ZdajacyID,
438 sf.ZdajacyImie,
439 sf.ZdajacyImieDrugie,
440 sf.ZdajacyNazwisko,
441 sf.ZdajacyDokumentTypID,
442 sf.ZdajacyDokumentNumer,
443 sf.ZdajacyPesel,
444 sf.ZdajacyDataUrodzenia,
445 sf.ZdajacyMiejsceUrodzenia,
446 sf.ZdajacyPlec,
447 sf.PodmiotID
448 FROM
449 @SourceFiltered sf
450 GROUP BY
451 sf.ZdajacyID,
452 sf.ZdajacyImie,
453 sf.ZdajacyImieDrugie,
454 sf.ZdajacyNazwisko,
455 sf.ZdajacyDokumentTypID,
456 sf.ZdajacyDokumentNumer,
457 sf.ZdajacyPesel,
458 sf.ZdajacyDataUrodzenia,
459 sf.ZdajacyMiejsceUrodzenia,
460 sf.ZdajacyPlec,
461 sf.PodmiotID
462 ) AS source
463 ON (
464 target.Pesel = source.ZdajacyPesel
465 OR (
466 target.NumerDokumentu = source.ZdajacyDokumentNumer
467 AND target.IdTypDokumentuTozsamosci = source.ZdajacyDokumentTypID
468 )
469 )
470 WHEN MATCHED THEN
471 UPDATE SET target.IdUzytkownikModyfikacji = target.IdUzytkownikModyfikacji -- update tylko po to żeby wyciągnąc ID danych osobowych do tabeli tymczasowej
472 WHEN NOT MATCHED THEN
473 INSERT
474 (
475 Imie,
476 DrugieImie,
477 MiejsceUrodzenia,
478 Nazwisko,
479 NazwiskoRodowe,
480 IdTypDokumentuTozsamosci,
481 NumerDokumentu,
482 Pesel,
483 Plec,
484 DataUrodzenia,
485 CzyZweryfikowany,
486 IdUzytkownikModyfikacji
487 )
488 VALUES
489 (
490 source.ZdajacyImie,
491 source.ZdajacyImieDrugie,
492 source.ZdajacyMiejsceUrodzenia,
493 source.ZdajacyNazwisko,
494 NULL,
495 source.ZdajacyDokumentTypID,
496 source.ZdajacyDokumentNumer,
497 source.ZdajacyPesel,
498 source.ZdajacyPlec,
499 source.ZdajacyDataUrodzenia,
500 0,
501 @UzytkownikModyfikacjiID
502 )
503 OUTPUT
504 INSERTED.ID,
505 source.ZdajacyID,
506 source.PodmiotID
507 INTO @TempDaneOsobowe (ID, ImportZdajacyID, PlacowkaID);
508
509 /* insert wyników */
510 -- delete
511 DECLARE @DeleteWynikDeklaracji IdList
512 DECLARE @DeleteWynikEgzaminu IdList
513
514 INSERT INTO @DeleteWynikDeklaracji
515 SELECT ID FROM wynik.WynikDeklaracjiZdajacego
516 WHERE
517 IdDaneOsoboweZdajacego IN (SELECT ID FROM @TempDaneOsobowe)
518 AND IdSesjaEgzaminacyjna = @SesjaEgzaminacyjnaID
519 AND IdTypZgloszeniaDlaRozporzadzenia = @RodzajDeklaracjiID
520
521 UPDATE wynik.WynikEgzaminuZdajacego
522 SET IdUzytkownikModyfikacji = @UzytkownikModyfikacjiID
523 OUTPUT INSERTED.ID INTO @DeleteWynikEgzaminu
524 WHERE IdWynikDeklaracjiZdajacego IN (SELECT ID FROM @DeleteWynikDeklaracji)
525
526 UPDATE wynik.WynikArkuszaEgzaminacyjnego
527 SET IdUzytkownikModyfikacji = @UzytkownikModyfikacjiID
528 WHERE IdWynikEgzaminuZdajacego IN (SELECT ID FROM @DeleteWynikEgzaminu)
529
530 DELETE FROM wynik.WynikArkuszaEgzaminacyjnego
531 WHERE IdWynikEgzaminuZdajacego IN (SELECT ID FROM @DeleteWynikEgzaminu)
532
533 DELETE FROM wynik.WynikEgzaminuZdajacego
534 WHERE ID IN (SELECT ID FROM @DeleteWynikEgzaminu)
535
536 DELETE FROM wynik.WynikDeklaracjiZdajacego
537 WHERE ID IN (SELECT ID FROM @DeleteWynikDeklaracji)
538
539 -- insert
540 DECLARE @TempWynikDeklaracji TABLE (WynikDeklaracjiZdajacegoID INT UNIQUE, ImportZdajacyID INT, PlacowkaID INT NULL);
541
542 MERGE INTO wynik.WynikDeklaracjiZdajacego target
543 USING
544 (
545 SELECT DISTINCT
546 tdo.ID,
547 sf.ZdajacyID,
548 sf.PodmiotID
549 FROM @SourceFiltered sf
550 INNER JOIN @TempDaneOsobowe tdo ON sf.ZdajacyID = tdo.ImportZdajacyID AND tdo.PlacowkaID = sf.PodmiotID
551 WHERE sf.ZdajacyCzyPosiadaWyniki = 1
552 ) AS source
553 ON 1 <> 1
554 WHEN NOT MATCHED THEN
555 INSERT
556 (
557 IdDaneOsoboweZdajacego,
558 IdDeklaracja,
559 IdPlacowka,
560 IdSesjaEgzaminacyjna,
561 IdTypZgloszeniaDlaRozporzadzenia,
562 IdUzytkownikModyfikacji
563 )
564 VALUES
565 (
566 source.ID,
567 NULL,
568 source.PodmiotID,
569 @SesjaEgzaminacyjnaID,
570 @RodzajDeklaracjiID,
571 @UzytkownikModyfikacjiID
572 )
573 OUTPUT
574 INSERTED.ID,
575 source.ZdajacyID,
576 source.PodmiotID
577 INTO @TempWynikDeklaracji (WynikDeklaracjiZdajacegoID, ImportZdajacyID, PlacowkaID);
578
579 DECLARE @TempWynikEgzaminu TABLE (WynikDeklaracjiID INT, WynikEgzaminuID INT, EgzaminID INT)
580 MERGE INTO wynik.WynikEgzaminuZdajacego target
581 USING
582 (
583 SELECT DISTINCT
584 twd.WynikDeklaracjiZdajacegoID,
585 e.ID AS EgzaminID,
586 swdtz.ID AS WynikStanWynikuID,
587 oze.ID AS OlimpiadaZwalniajacaZEgzaminuID,
588 sf.WynikCzyEgzaminObowiazkowy,
589 sf.WynikStanZdawaniaEgzaminuID,
590 sf.WynikUzyskanePunkty,
591 sf.WynikProcent
592 FROM
593 @SourceFiltered sf
594 INNER JOIN wynik.StanWynikuDlaTypuZgloszenia swdtz ON swdtz.IdStanWyniku = sf.WynikStanWynikuID
595 INNER JOIN @TempWynikDeklaracji twd ON twd.ImportZdajacyID = sf.ZdajacyID AND twd.PlacowkaID = sf.PodmiotID
596 INNER JOIN egzamin.TypEgzaminu te ON te.KodKrem = sf.WynikKodEgzaminu
597 AND te.IdTypFormyZdawania = sf.WynikFormaZdawaniaID
598 AND te.IdTypPoziomu = sf.WynikPoziomZdawaniaID
599 AND te.IdTypJezykaZdawania = sf.WynikJezykZdawaniaID
600 AND te.IdTypZgloszeniaDlaRozporzadzenia = @RodzajDeklaracjiID
601 INNER JOIN egzamin.Egzamin e ON e.IdTypEgzaminu = te.ID
602 LEFT JOIN egzamin.OlimpiadaZwalniajacaZEgzaminu oze ON oze.IdOlimpiada = sf.WynikOlimpiadaID
603 AND oze.IdTypEgzaminu = te.ID
604 AND oze.CzyUsuniety = 0
605 LEFT JOIN egzamin.ArkuszEgzaminacyjny ae ON ae.IdEgzamin = e.ID
606 AND ae.KodArkusza = sf.WynikArkuszaKodArkusza
607 AND ae.CzyUsuniety = 0
608 WHERE
609 e.IdSesjaEgzaminacyjna = @SesjaEgzaminacyjnaID
610 AND te.CzyWycofany = 0
611 AND sf.ZdajacyCzyPosiadaWyniki = 1
612 ) query
613 ON 1 <> 1
614 WHEN NOT MATCHED THEN
615 INSERT
616 (
617 IdWynikDeklaracjiZdajacego,
618 IdEgzamin,
619 IdStanWynikuDlaTypuZgloszenia,
620 IdStanZdawaniaEgzaminu,
621 IdDeklaracjaEgzaminu,
622 Wynik,
623 WynikProcentowy,
624 IdOlimpiadaZwalniajacaZEgzaminu,
625 CzyEgzaminObowiazkowy,
626 IdUzytkownikModyfikacji
627 )
628 VALUES
629 (
630 query.WynikDeklaracjiZdajacegoID,
631 query.EgzaminID,
632 query.WynikStanWynikuID,
633 query.WynikStanZdawaniaEgzaminuID,
634 NULL,
635 query.WynikUzyskanePunkty,
636 query.WynikProcent,
637 query.OlimpiadaZwalniajacaZEgzaminuID,
638 query.WynikCzyEgzaminObowiazkowy,
639 @UzytkownikModyfikacjiID
640 )
641 OUTPUT
642 query.WynikDeklaracjiZdajacegoID,
643 INSERTED.ID,
644 query.EgzaminID
645 INTO @TempWynikEgzaminu(WynikDeklaracjiID, WynikEgzaminuID, EgzaminID);
646
647 -- wyciągnięcie arkusza
648 DECLARE @TempArkusz TABLE (WynikEgzaminuID INT, ArkuszID INT)
649 INSERT INTO @TempArkusz(WynikEgzaminuID, ArkuszID)
650 SELECT DISTINCT
651 twe.WynikEgzaminuID,
652 ae.ID
653 FROM
654 @TempWynikEgzaminu twe
655 INNER JOIN @TempWynikDeklaracji twd ON twd.WynikDeklaracjiZdajacegoID = twe.WynikDeklaracjiID
656 INNER JOIN @SourceFiltered sf ON sf.ZdajacyID = twd.ImportZdajacyID AND twd.PlacowkaID = sf.PodmiotID
657 INNER JOIN egzamin.TypEgzaminu te ON te.KodKrem = sf.WynikKodEgzaminu
658 AND te.IdTypFormyZdawania = sf.WynikFormaZdawaniaID
659 AND te.IdTypPoziomu = sf.WynikPoziomZdawaniaID
660 AND te.IdTypJezykaZdawania = sf.WynikJezykZdawaniaID
661 AND te.IdTypZgloszeniaDlaRozporzadzenia = @RodzajDeklaracjiID
662 INNER JOIN egzamin.Egzamin e ON e.IdTypEgzaminu = te.ID
663 INNER JOIN egzamin.ArkuszEgzaminacyjny ae ON ae.IdEgzamin = twe.EgzaminID
664 AND ae.IdEgzamin = e.ID
665 AND ae.KodArkusza = sf.WynikArkuszaKodArkusza
666 WHERE
667 e.IdSesjaEgzaminacyjna = @SesjaEgzaminacyjnaID
668 AND te.CzyWycofany = 0
669 AND ae.CzyUsuniety = 0
670 AND sf.ZdajacyCzyPosiadaWyniki = 1
671
672 -- insert wyników dla arkuszy
673 INSERT INTO wynik.WynikArkuszaEgzaminacyjnego
674 (
675 IdArkuszEgzaminacyjny,
676 IdWynikEgzaminuZdajacego,
677 Punkty,
678 IdKartaZdajacego,
679 IdUzytkownikModyfikacji
680 )
681 SELECT DISTINCT
682 ta.ArkuszID,
683 twe.WynikEgzaminuID,
684 0,
685 NULL,
686 @UzytkownikModyfikacjiID
687 FROM
688 @TempWynikEgzaminu twe
689 INNER JOIN @TempWynikDeklaracji twd ON twd.WynikDeklaracjiZdajacegoID = twe.WynikDeklaracjiID
690 INNER JOIN @TempArkusz ta ON ta.WynikEgzaminuID = twe.WynikEgzaminuID
691 INNER JOIN @SourceFiltered sf ON sf.ZdajacyID = twd.ImportZdajacyID AND twd.PlacowkaID = sf.PodmiotID
692 INNER JOIN egzamin.ArkuszEgzaminacyjny ae ON ta.ArkuszID = ae.ID
693 AND ae.KodArkusza = sf.WynikArkuszaKodArkusza
694 AND ae.CzyUsuniety = 0
695 WHERE sf.ZdajacyCzyPosiadaWyniki = 1
696
697 -- centyle
698 INSERT INTO egzamin.Centyl
699 (
700 IdArkuszEgzaminacyjny,
701 Wartosc,
702 IdUzytkownikModyfikacji,
703 WynikProcentowy
704 )
705 SELECT DISTINCT
706 ta.ArkuszID,
707 sf.WynikCentylWartosc,
708 @UzytkownikModyfikacjiID,
709 sf.WynikProcent
710 FROM
711 @TempWynikEgzaminu twe
712 INNER JOIN @TempWynikDeklaracji twd ON twd.WynikDeklaracjiZdajacegoID = twe.WynikDeklaracjiID
713 INNER JOIN @TempArkusz ta ON ta.WynikEgzaminuID = twe.WynikEgzaminuID
714 INNER JOIN @SourceFiltered sf ON sf.ZdajacyID = twd.ImportZdajacyID AND twd.PlacowkaID = sf.PodmiotID
715 INNER JOIN egzamin.ArkuszEgzaminacyjny ae ON ta.ArkuszID = ae.ID
716 AND ae.KodArkusza = sf.WynikArkuszaKodArkusza
717 AND ae.CzyUsuniety = 0
718 WHERE sf.ZdajacyCzyPosiadaWyniki = 1
719
720 COMMIT TRAN;
721 END
722
723 SELECT
724 @SesjaEgzaminacyjnaID,
725 @OkeID,
726 @RodzajDeklaracjiID,
727 PodmiotNazwa,
728 PodmiotRspo,
729 PodmiotTypID,
730 PodmiotKod,
731 PodmiotInternalID,
732 ZdajacyID,
733 ZdajacyImie,
734 ZdajacyImieDrugie,
735 ZdajacyNazwisko,
736 ZdajacyPesel,
737 ZdajacyCzyPosiadaWyniki,
738 ZdajacyDokumentTypID,
739 ZdajacyDokumentNumer,
740 ZdajacyDataUrodzenia,
741 ZdajacyMiejsceUrodzenia,
742 ZdajacyPlec,
743 WynikKodEgzaminu,
744 WynikCzyEgzaminObowiazkowy,
745 WynikJezykZdawaniaID,
746 WynikFormaZdawaniaID,
747 WynikPoziomZdawaniaID,
748 WynikStanWynikuID,
749 WynikStanZdawaniaEgzaminuID,
750 WynikProcent,
751 WynikCentylWartosc,
752 WynikUzyskanePunkty,
753 WynikOlimpiadaID,
754 WynikArkuszaKodArkusza,
755 NazwaBledu
756 FROM
757 @SourceErrors
758END