PageSourceSearch

https://rekrutacja.pedagogium.pl/pdg-irk-app/content/script/irk/pages/egzaminy/EgzaminyController.js

js pedagogium.pl collected 2026-10-04 13:34:44 UTC 15,737 bytes, 409 lines download raw bytes

1(function() {
2    'use strict';
3
4    angular.module('irk').controller('EgzaminyController', EgzaminyController);
5
6    function EgzaminyController($templateCache, $controller, $http, $resource, $scope, $injector, $modal, toaster, 
7        i18n, $interval, $rootScope, EGZAMIN_EVENTS, $location) {
8        angular.extend(this, $controller('IntakeControllerMixin', {
9            $scope : $scope
10        }));
11        $templateCache.remove('irk.auth.egzaminy.Egzaminy');
12        $scope.kampanieRekrutacyjne = [];
13        $scope.downloadState = {};
14
15        var pobierzTlumaczenia = function() {
16            // wartości domyślne
17            $scope.i18nNiezapisaneZmiany = "Masz niezapisane zmiany. Czy na pewno chcesz opuścić tę stronę?";
18            $scope.i18nPotwierdz = "Potwierdź";
19            $scope.i18nAnuluj = "Anuluj";
20            // pobranie tłumaczeń
21            i18n.get('interfejs.irk.strona.Egzaminy.NiezapisaneZmiany').then(function(tlumaczenie) {
22                $scope.i18nNiezapisaneZmiany = tlumaczenie;
23            });
24            i18n.get('interfejs.irk.strona.Egzaminy.Potwierdz').then(function(tlumaczenie) {
25                $scope.i18nPotwierdz = tlumaczenie;
26            });
27            i18n.get('interfejs.irk.strona.Egzaminy.Anuluj').then(function(tlumaczenie) {
28                $scope.i18nAnuluj = tlumaczenie;
29            });
30        };
31
32        var usunOstrzezeniaONiezapisanychZmianach = function() {
33            window.onbeforeunload = () => undefined;
34            deregisterLocationChangeListener();
35            deregisterLocationChangeListener = null;
36        };
37        
38        var deregisterLocationChangeListener = null;
39        pobierzTlumaczenia();
40        // po wgraniu pliku wyświetla ostrzeżenie
41        $scope.$on('filesUpdated', function(event) {
42            // przy opuszczaniu strony
43            window.onbeforeunload = function (event) {
44               return $scope.i18nNiezapisaneZmiany;
45            };
46            if(deregisterLocationChangeListener == null)
47            {
48                // przy zmianie zakładki
49                deregisterLocationChangeListener = $scope.$on('$locationChangeStart', function (event, next, current) {
50                    event.preventDefault();
51                    $modal.open({
52                        templateUrl: 'potwierdzOpuszczenieStrony.html',
53                        scope: $scope
54                    }).result.then(function() {
55                        usunOstrzezeniaONiezapisanychZmianach();
56                        var arr = next.split('/');
57                        $location.path('/' + arr[arr.length-1]);
58                    });
59                });
60            }
61         });
62
63        var updateKampanieRekrutacyjne = function() {
64            $http.get('REST/egzaminy', {}).then(function(result) {
65                $scope.kampanieRekrutacyjne = result.data;
66            });
67        };
68
69        var keepAlive = $interval(function() {
70            $http.get("REST/keepalive");
71        }, 10000);
72
73        $scope.$on('$destroy', function() {
74            $interval.cancel(keepAlive);
75        });
76
77        $scope.isDostepneListyPlikow = function() {
78            for (var i = 0; i < $scope.kampanieRekrutacyjne.length; ++i) {
79                if ($scope.isDostepneListyPlikowKampanii($scope.kampanieRekrutacyjne[i])) {
80                    return true;
81                }
82            }
83            return false;
84        };
85
86        $scope.isDostepneListyPlikowKampanii = function(kampania) {
87            for (var i = 0; i < kampania.procesy.length; ++i) {
88                if ($scope.isDostepneListyPlikowProcesu(kampania.procesy[i])) {
89                    return true;
90                }
91            }
92            return false;
93        };
94
95        $scope.isDostepneListyPlikowProcesu = function(proces) {
96            for (var i = 0; i < proces.egzaminy.length; ++i) {
97                if ($scope.isDostepneListyPlikowEgzaminu(proces.egzaminy[i])) {
98                    return true;
99                }
100            }
101            return false;
102        };
103
104        $scope.isDostepneListyPlikowEgzaminu = function(egzamin) {
105            return egzamin.listyPlikow.length > 0;
106        };
107
108        var getListaPlikowRestDtoList = function(egzamin) {
109            var listyPlikowRestDto = [];
110            for (var i = 0; i < egzamin.listyPlikow.length; ++i) {
111                var listaPlikow = egzamin.listyPlikow[i];
112                listyPlikowRestDto.push({
113                    idZestawu: listaPlikow.idZestawu,
114                    nrReguly: listaPlikow.nrReguly,
115                    pliki : listaPlikow.pliki
116                });
117            }
118            return listyPlikowRestDto;
119        };
120
121        var getEgzaminRestDtoList = function() {
122            var egzaminRestDtoList = [];
123            for (var i = 0; i < $scope.kampanieRekrutacyjne.length; ++i) {
124                var kampania = $scope.kampanieRekrutacyjne[i];
125                for (var j = 0; j < kampania.procesy.length; ++j) {
126                    var proces = kampania.procesy[j];
127                    for (var k = 0; k < proces.egzaminy.length; ++k) {
128                        var egzamin = proces.egzaminy[k];
129                        egzaminRestDtoList.push({
130                            idEgzaminu : egzamin.idEgzaminu,
131                            listyPlikow : getListaPlikowRestDtoList(egzamin),
132                        });
133                    }
134                }
135            }
136            return egzaminRestDtoList;
137        };
138
139        $scope.trwaZapisPlikow = false;
140
141        $scope.zapiszPliki = function() {
142            $scope.trwaZapisPlikow = true;
143            var egzaminRestDtoList = getEgzaminRestDtoList();
144            $http.post('REST/egzaminy/pliki', egzaminRestDtoList).then(function() {
145                $scope.trwaZapisPlikow = false;
146                i18n.get('interfejs.irk.strona.Egzaminy.ZapisanoFormularz').then(function(komunikat) {
147                    toaster.pop('success', komunikat);
148                });
149                updateKampanieRekrutacyjne();
150            });
151            usunOstrzezeniaONiezapisanychZmianach();
152        };
153
154        $scope.isDostepnyZapisDoGrup = function() {
155            for (var i = 0; i < $scope.kampanieRekrutacyjne.length; ++i) {
156                if ($scope.isDostepnyZapisDoGrupKampanii($scope.kampanieRekrutacyjne[i])) {
157                    return true;
158                }
159            }
160            return false;
161        };
162
163        $scope.isDostepnyZapisDoGrupKampanii = function(kampania) {
164            for (var i = 0; i < kampania.procesy.length; ++i) {
165                if ($scope.isDostepnyZapisDoGrupProcesu(kampania.procesy[i])) {
166                    return true;
167                }
168            }
169            return false;
170        };
171
172        $scope.isDostepnyZapisDoGrupProcesu = function(proces) {
173            for (var i = 0; i < proces.egzaminy.length; ++i) {
174                if ($scope.isDostepnyZapisDoGrupEgzaminu(proces.egzaminy[i])) {
175                    return true;
176                }
177            }
178            return false;
179        };
180
181        $scope.isDostepnyZapisDoGrupEgzaminu = function(egzamin) {
182            return egzamin.budynkiEgzaminu.length > 0;
183        };
184
185        $scope.zmienWyborGrupy = function(grupa, egzamin) {
186            if (!grupa.wybrana && isDocelowoJednaGrupa()) {
187                odznaczWszystkieGrupy(egzamin);
188            }
189            grupa.wybrana = !grupa.wybrana;
190        };
191
192        var odznaczWszystkieGrupy = function(egzamin) {
193            for (var k = 0; k < egzamin.budynkiEgzaminu.length; ++k) {
194                var budynek = egzamin.budynkiEgzaminu[k];
195                for (var i = 0; i < budynek.dniEgzaminu.length; ++i) {
196                    var dzien = budynek.dniEgzaminu[i];
197                    for (var j = 0; j < dzien.grupy.length; ++j) {
198                        dzien.grupy[j].wybrana = false;
199                    }
200                }
201            }
202        };
203
204        $scope.pokazWybraneTerminyDialog = function() {
205            $modal.open({
206                animation : true,
207                templateUrl : 'wybraneTerminyDialog.html',
208                scope : $scope
209            });
210        };
211
212        $scope.pokazDialogZapisuDoGrupy = function(egzamin) {
213            $scope.egzamin = egzamin;
214            egzamin.wybranyBudynek = undefined;
215            if(egzamin.budynkiEgzaminu.length == 1) {
216                egzamin.wybranyBudynek = egzamin.budynkiEgzaminu[0];
217                $scope.resetujSelektorDaty();
218            }
219            $modal.open({
220                animation : true,
221                templateUrl : 'zapiszSieDoGrupyDialog.html',
222                scope : $scope
223            }).result.then(function() {
224                $modal.open({
225                    animation : true,
226                    templateUrl : 'potwierdzZapisDoGrupyEgzaminu.html',
227                    scope : $scope
228                }).result.then(function() {
229                    zapiszGrupy(egzamin);
230                });
231            });
232        };
233
234        var zapiszGrupy = function(egzamin) {
235            var params = {
236                idEgzaminu : egzamin.idEgzaminu,
237                idWybranychGrup : getIdWybranychGrup(egzamin)
238            }
239            var url = egzamin.metodaZapisu == 'SAMODZIELNIE' 
240                ? 'REST/egzaminy/zapisdogrupy'
241                : 'REST/egzaminy/deklaracjagrupy';
242            $http.post(url, params).then(function(wynik) {
243                if (wynik.data.bledy.length == 0) {
244                    i18n.get('interfejs.irk.strona.Egzaminy.ZapisanoFormularz').then(function(komunikat) {
245                        toaster.pop('success', komunikat);
246                        egzamin.budynkiEgzaminu = [];
247                        $rootScope.$broadcast(EGZAMIN_EVENTS.zmianaTerminowEgzaminow);
248                    });
249                } else {
250                    i18n.get('interfejs.irk.strona.Egzaminy.' + wynik.data.bledy[0]).then(function(komunikat) {
251                        toaster.pop('error', komunikat);
252                    });
253                }
254            });
255        }
256
257        var getIdWybranychGrup = function(egzamin) {
258            var wybraneGrupy = $scope.getWybraneGrupyEgzaminu(egzamin);
259            var idWybranychGrup = [];
260            for (var i = 0; i < wybraneGrupy.length; ++i) {
261                idWybranychGrup.push(wybraneGrupy[i].idGrupy);
262            }
263            return idWybranychGrup;
264        };
265
266        $scope.getWybraneGrupyEgzaminu = function(egzamin) {
267            var wybraneGrupy = [];
268            for (var i = 0; i < egzamin.budynkiEgzaminu.length; ++i) {
269                var budynek = egzamin.budynkiEgzaminu[i];
270                var wybraneGrupyBudynku = getWybraneGrupyBudynku(budynek);
271                wybraneGrupy = wybraneGrupy.concat(wybraneGrupyBudynku);
272            }
273            return wybraneGrupy;
274        };
275
276        var getWybraneGrupyBudynku = function(budynek) {
277            var wybraneGrupy = [];
278            for (var i = 0; i < budynek.dniEgzaminu.length; ++i) {
279                var dzien = budynek.dniEgzaminu[i];
280                var wybraneGrupyDnia = $scope.getWybraneGrupyDnia(dzien);
281                wybraneGrupy = wybraneGrupy.concat(wybraneGrupyDnia);
282            }
283            return wybraneGrupy;
284        };
285
286        $scope.getWybraneGrupyDnia = function(dzien) {
287            var wybraneGrupyDnia = [];
288            for (var i = 0; i < dzien.grupy.length; ++i) {
289                var grupa = dzien.grupy[i];
290                if (grupa.wybrana) {
291                    wybraneGrupyDnia.push(grupa);
292                }
293            }
294            return wybraneGrupyDnia;
295        };
296
297        $scope.selektorDatyKalendarz = {
298            otwarty : false,
299            wybranaData: null,
300            dateOptions: {
301                formatYear : 'yy',
302                startingDay : 1
303            },
304            otworz: function($event) {
305                $event.preventDefault();
306                $event.stopPropagation();
307                $scope.selektorDatyKalendarz.otwarty = !$scope.selektorDatyKalendarz.otwarty;
308            },
309            zmienWybranyDzien: function() {
310                var budynek = $scope.egzamin.wybranyBudynek;
311                var formatDaty = formatujDate($scope.selektorDatyKalendarz.wybranaData);
312                for(var i = 0; i < budynek.dniEgzaminu.length; ++i) {
313                    var dzienEgzaminu = budynek.dniEgzaminu[i];
314                    if(dzienEgzaminu.data === formatDaty) {
315                        budynek.wybranyDzien = dzienEgzaminu;
316                        $scope.resetujSelektorGodziny();
317                        return;
318                    }
319                }
320            },
321            isZabronionaData: function(date, mode) {
322                if(!$scope.egzamin || !$scope.egzamin.wybranyBudynek || mode !== 'day') {
323                    return false;
324                }
325                var formatDaty = formatujDate(date);
326                var budynek = $scope.egzamin.wybranyBudynek;
327                for(var i = 0; i < budynek.dniEgzaminu.length; ++i)
328                {
329                    if(budynek.dniEgzaminu[i].data === formatDaty)
330                    {
331                        return false;
332                    }
333                }
334                return true;
335            }
336        };
337
338        /**
339         * Po zmianie wyboru budynku należy odświeżyć dostępne opcje w
340         * selektorze daty.
341         */
342        $scope.resetujSelektorDaty = function() {
343            var budynek = $scope.egzamin.wybranyBudynek;
344            $scope.egzamin.wybranyBudynek = undefined;
345
346            $scope.selektorDatyKalendarz.wybranaData = null;
347
348            for (var k = 0; k < $scope.egzamin.budynkiEgzaminu.length; ++k) {
349                $scope.egzamin.budynkiEgzaminu[k].wybranyDzien = undefined;
350            }
351
352            $scope.egzamin.wybranyBudynek = budynek;
353
354            if(budynek && budynek.dniEgzaminu.length == 1) {
355                budynek.wybranyDzien = budynek.dniEgzaminu[0];
356                $scope.resetujSelektorGodziny();
357            }
358        };
359        
360        /**
361         * Po zmienia wyboru dnia należy zaznaczyć pierwszą grupę dnia, jeśli
362         * dzień ma tylko jedną grupę i tylko jedna grupa powinna być wybrana.
363         */
364        $scope.resetujSelektorGodziny = function() {
365            var egzamin = $scope.egzamin;
366            if(!egzamin.wybranyBudynek || !egzamin.wybranyBudynek.wybranyDzien) {
367                return;
368            }
369            var dzien;
370            if(isDocelowoJednaGrupa()) {
371                dzien = egzamin.wybranyBudynek.wybranyDzien;
372            }
373            else if(egzamin.budynkiEgzaminu.length == 1 
374                && egzamin.budynkiEgzaminu[0].dniEgzaminu.length == 1) {
375                dzien = egzamin.budynkiEgzaminu[0].dniEgzaminu[0];
376            }
377            else {
378                return;
379            }
380            odznaczWszystkieGrupy(egzamin);
381            if(dzien.grupy.length == 1) {
382                $scope.zmienWyborGrupy(dzien.grupy[0], egzamin);
383            }
384        };
385
386        /**
387         * Sprawdzenei czy w widoku powinna być wybrana tylko jedna grupa.
388         */
389        var isDocelowoJednaGrupa = function() {
390            return $scope.egzamin.metodaZapisu == 'SAMODZIELNIE';
391        }
392
393        var formatujDate = function(data) {
394            if(!data) {
395                return "";
396            }
397            var day = "" + data.getDate();
398            var month = "" + (data.getMonth() + 1);
399            var year = "" + (data.getYear() + 1900);
400            if (month.length < 2) month = '0' + month;
401            if (day.length < 2) day = '0' + day;
402            return day + "." + month + "." + year;
403        };
404
405        updateKampanieRekrutacyjne();
406
407    }
408
409})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.