PageSourceSearch

https://rekrutacja.pedagogium.pl/pdg-irk-app/content/script/irk/pa…/wyksztalcenie/WyksztalcenieControllerV2.js

js pedagogium.pl collected 2026-10-04 13:34:43 UTC 32,469 bytes, 789 lines download raw bytes

1(function() {
2    'use strict';
3    
4    angular
5        .module('irk')
6        .controller('WyksztalcenieController', WyksztalcenieController);
7
8    function WyksztalcenieController($templateCache, $controller, $http, $resource, $scope, $injector, toaster, i18n, 
9            slownik, zarzadcaModulow, $rootScope, SIDEBAR_MENU_EVENTS, PYTANIA_DODATKOWE_EVENTS) {
10        angular.extend(this, $controller('IntakeControllerMixin', {$scope: $scope}));
11        $scope.typyAnkietPytanDodatkowych = ['WYKSZTALCENIE_KANDYDATA', 'WYKSZTALCENIE_KANDYDATA_MATURY'];
12        $templateCache.remove('irk.auth.wyksztalcenie.Wyksztalcenie');
13        $scope.wartosciSlownikowe = {};
14        $scope.groups = {};
15        $scope.dostepneModuly = {};
16        $scope.procesyRekrutacyjne = [];
17        $scope.konkursy = {};
18        var skaleOcen = {};
19        var ocenaIntakeMap = {};
20        var przedmiotMap = {};
21        var znanaOcenaMap = {};
22        var procesyRekrutacyjneMap = {};
23        var constantEmptyArray = [];
24        
25        var updateKonkursy = function() {
26            return $http.get('REST/wyksztalcenie/konkursy', {}).then(function(result) {
27                var map = {};
28                var selectValues = [];
29                for(var i = 0; i < result.data.length; ++i) {
30                    var konkurs = result.data[i];
31                    var id = konkurs.idKonkursu.toString()
32                    map[id] = konkurs;
33                    selectValues.push({value: id, label: konkurs.nazwa});
34                }
35                $scope.konkursy.map = map;
36                $scope.konkursy.selectValues = selectValues;
37            });
38        };
39        
40        var getWybraneKonkursy = function() {
41            var result = [];
42            if($scope.konkursy.laureat) {
43                var ids = $scope.konkursy.fieldMap.IdKonkursu.value;
44                for(var i = 0; i < ids.length; ++i) {
45                    var id = ids[i];
46                    if(id) {
47                        result.push($scope.konkursy.map[id])
48                    }
49                }
50            }
51            return result;
52        };
53        
54        var isOcenaZaKonkurs = function(idWymagania, idPrzedmiotu) {
55            return idPrzedmiotu && getWybraneKonkursy().some(function(konkurs) {
56                var zaliczanePrzedmioty = konkurs.idZaliczanychPrzedmiotowWymagan[idWymagania];
57                return zaliczanePrzedmioty && zaliczanePrzedmioty.indexOf(Number(idPrzedmiotu)) >= 0;
58            });
59        };
60        
61        $scope.isOcenaZaKonkurs = function(wymaganie) {
62            var group = $scope.getOcenaGroup(wymaganie)
63            return group && isOcenaZaKonkurs(wymaganie.idWymagania, group.IdPrzedmiotu.value);
64        };
65        
66        $scope.isSpelnioneKonkursem = function(wymaganie) {
67            return getWybraneKonkursy().some(function(konkurs) {
68                return konkurs.idSpelnianychWymagan.indexOf(wymaganie.idWymagania) >= 0;
69            });
70        };
71        
72        var getSkaleOcen = function(wymaganie) {
73            var group = $scope.getOcenaGroup(wymaganie);
74            if(!group || !group.IdPrzedmiotu.value) {
75                return constantEmptyArray;
76            }
77            var skale = [];
78            skale = skaleOcen.list.filter(function(skala) {
79                return wymaganie.dostepneSkaleOcen.indexOf(skala.idSkali) >= 0;
80            });
81            
82            return skale.map(function(skala) {
83                return {
84                    value: skala.idSkali.toString(),
85                    label: skala.nazwa
86                };
87            });
88        };
89        
90        $scope.getRodzajeDokumentow = function(wymaganie) {
91            var group = $scope.getOcenaGroup(wymaganie);
92            if(!group) {
93                return constantEmptyArray;
94            }
95            
96            var rodzajeOcen = $scope.wartosciSlownikowe['RodzajOcenyPrzedmiotuMaturalnego'];
97            if(rodzajeOcen.length == 0) {
98                return rodzajeOcen;
99            }
100            
101            var rodzajeDokumentow = getSkaleOcen(wymaganie);
102            rodzajeOcen.forEach(function(rodzajOcen) {
103                if(rodzajOcen.value != 'SKALA_OCEN') {
104                    rodzajeDokumentow.push(rodzajOcen);
105                }
106            });
107            
108            if(!angular.equals(rodzajeDokumentow, group.cache.getRodzajeDokumentow)) {
109                group.cache.getRodzajeDokumentow = rodzajeDokumentow;
110            }
111            
112            var values = group.cache.getRodzajeDokumentow.map(function(elem) {
113                return elem.value;
114            });
115            if(skaleOcen.zaladowane && isSkalaOcen(group) && values.indexOf(group.rodzajDokumentu) < 0) {
116                group.rodzajDokumentu = undefined;
117            }
118            
119            return group.cache.getRodzajeDokumentow;
120        }
121        
122        $scope.getOcenaMinimalna = function(wymaganie) {
123            return getSkalaParams($scope.getOcenaGroup(wymaganie)).ocenaMinimalna;
124        };
125        
126        $scope.getOcenaMaksymalna = function(wymaganie) {
127            return getSkalaParams($scope.getOcenaGroup(wymaganie)).ocenaMaksymalna;
128        };
129        
130        $scope.getKrok = function(wymaganie) {
131            return getSkalaParams($scope.getOcenaGroup(wymaganie)).krok;
132        };
133        
134        $scope.getTypSkali = function(wymaganie) {
135            return getSkalaParams($scope.getOcenaGroup(wymaganie)).typSkali;
136        };
137        
138        $scope.getOcenySkali = function(wymaganie) {
139            return getSkalaParams($scope.getOcenaGroup(wymaganie)).oceny;
140        };
141        
142        var isSkalaOcen = function(group) {
143            return group && group.rodzajDokumentu != null && isFinite(group.rodzajDokumentu);
144        }
145        
146        var getSkalaParams = function(group) {
147            if(!isSkalaOcen(group)) {
148                return {};
149            }
150            var params = buildSkalaParams(getSkalaOcen(group));
151            if(!angular.equals(params, group.cache.getSkalaParams)) {
152                group.cache.getSkalaParams = params;
153            }
154            return group.cache.getSkalaParams;
155        }
156        
157        var buildSkalaParams = function(skala) {
158            return {
159                ocenaMinimalna: skala.ocenaMinimalna == null ? null : skala.ocenaMinimalna,
160                ocenaMaksymalna: skala.ocenaMaksymalna == null ? null : skala.ocenaMaksymalna,
161                krok: skala.krok == null ? null : skala.krok,
162                oceny: skala.oceny || [],
163                typSkali: getTypSkali(skala),
164            };
165        };
166        
167        var getSkalaOcen = function(group) {
168            if(!skaleOcen.map) {
169                return undefined;
170            }
171            if(!isSkalaOcen(group)) {
172                return {};
173            }
174            return skaleOcen.map[group.rodzajDokumentu] || {};
175        }
176        
177        var getTypSkali = function(skala) {
178            if(skala.ocenaMinimalna == null || skala.ocenaMaksymalna == null || skala.krok == null) {
179                return 'select';
180            }
181            if(skala.oceny.length > 20 || skala.krok % 1 != 0) {
182                return 'number';
183            }
184            return 'number-select';
185        };
186        
187        $scope.isOcenaGlowna = function(wymaganie) {
188            return isOcenaGlowna($scope.getOcenaGroup(wymaganie));
189        }
190        
191        var isOcenaGlowna = function(group) {
192            var skalaParams = getSkalaParams(group);
193            return skalaParams.oceny && skalaParams.oceny.length > 0;
194        };
195        
196        $scope.isOcenaDodatkowa = function(wymaganie) {
197            return isOcenaDodatkowa($scope.getOcenaGroup(wymaganie));
198        };
199        
200        var isOcenaDodatkowa = function(group) {
201            if(!isOcenaGlowna(group) || group.OcenaGlowna.value == null || Number.isNaN(group.OcenaGlowna.value)) {
202                return false;
203            }
204            var rodzajMatury;
205            switch(przedmiotMap[group.IdPrzedmiotu.value].czescUstna) {
206                case 'ZAWSZE': 
207                    rodzajMatury = getRodzajMatury();
208                    return rodzajMatury == 'NOWA_MATURA' || 
209                        rodzajMatury == 'STARA_MATURA_DO_1991' || 
210                        rodzajMatury == 'STARA_MATURA_OD_1992';
211                case 'BEZ_NOWEJ_MATURY':
212                    rodzajMatury = getRodzajMatury();
213                    return rodzajMatury == 'STARA_MATURA_DO_1991' || 
214                        rodzajMatury == 'STARA_MATURA_OD_1992';
215                case 'BRAK':
216                    return false;
217            }
218        };
219
220        $scope.isOcenaOpisowa = function(group) {
221            return group && group.IdPrzedmiotu.value && group.rodzajDokumentu == 'OCENA_OPISOWA';
222        };
223        
224        var getRodzajMatury = function() {
225            var szkolaList = $scope.groups.ModulUkonczonaSzkolaSredniaV1IntakeList;
226            if(typeof szkolaList == 'undefined' || szkolaList.length == 0 || !szkolaList[0].WersjaEgzaminuDojrzalosci) {
227                return null;
228            }
229            return szkolaList[0].WersjaEgzaminuDojrzalosci.value;
230        };
231        
232        var getIdKrajuSwiadectwaDojrzalosci = function() {
233            var krajList = $scope.groups.ModulKrajSwiadectwaDojrzalosciV1IntakeList;
234            if(typeof krajList == 'undefined' || krajList.length == 0 || !krajList[0].IdKraju) {
235                return null;
236            }
237            return krajList[0].IdKraju.value;
238        };
239
240        $scope.$watch(getRodzajMatury, function(_newValue, oldValue) {
241            if(!oldValue) {
242                return;
243            }
244            var key, group;
245            for(key in ocenaIntakeMap) {
246                group = ocenaIntakeMap[key];
247                if(isSkalaOcen(group)) {
248                    group.rodzajDokumentu = null;
249                }
250                group.OcenaGlowna.value = null;
251                group.OcenaDodatkowa.value = null;
252                group.OcenaOpisowa.value = null;
253            }
254        });
255        
256        $scope.getWymagania = function(proces) {
257            var rodzajMatury = getRodzajMatury();
258            return proces.wymagania.filter(function(wymaganie) {
259                return wymaganie.rodzajeMatury.indexOf(rodzajMatury) >= 0;
260            });
261        };
262        
263        $scope.isDostepnePunktyRekrutacyjne = function(proces) {
264            return proces.punktyRekrutacyjne != null &&
265                typeof proces.punktyRekrutacyjne == 'object' &&
266                typeof proces.punktyRekrutacyjne.punkty == 'number';
267        };
268
269        $scope.isBlokadaOceny = function(wymaganie) {
270            var key = getOcenaUniqueKey($scope.getOcenaGroup(wymaganie));
271            var groups = znanaOcenaMap[key] || [];
272            return groups.some(function(group) {
273                var idProcesu = group.IdProcesuRekrutacyjnego.value;
274                var proces = procesyRekrutacyjneMap[idProcesu.toString()];
275                return $scope.isBlokadaProcesu(proces);
276            });
277        };
278        
279        $scope.isBlokadaProcesu = function(proces) {
280            return proces.blokadaWyksztalcenia;
281        };
282        
283        $scope.isBlokadaKonkursow = function() {
284            return $scope.procesyRekrutacyjne.some($scope.isBlokadaProcesu);
285        };
286
287        $scope.getOcenaGroup = function(wymaganie) {
288            if(!wymaganie || !wymaganie.proces) {
289                return null;
290            }
291            return ocenaIntakeMap[wymaganie.proces.idProcesu + '_' + wymaganie.nrWymagania];
292        };
293
294        var getGroupId = function(group) {
295            return group.IdProcesuRekrutacyjnego.value + '_' + group.NrWymagania.value;
296        };
297        
298        var isBrakWartosciOceny = function(group) {
299            if(!group.rodzajDokumentu) {
300                return true;
301            }
302            if(isSkalaOcen(group)) {
303                return group.OcenaGlowna.value == null || Number.isNaN(group.OcenaGlowna.value);
304            }
305            return group.rodzajDokumentu != 'OCENA_OPISOWA' || !group.OcenaOpisowa.value;
306        };
307        
308        var sanitizeGroup = function(group) {
309            if(isBrakWartosciOceny(group)) {
310                group.Rodzaj.value = group.rodzajDokumentu == 'BRAK_OCENY' ? 'BRAK_OCENY' : null;
311                group.IdSkaliOcen.value = null;
312                group.OcenaGlowna.value = null;
313                group.OcenaDodatkowa.value = null;
314                group.OcenaOpisowa.value = null;
315            }
316            else if(group.rodzajDokumentu == 'OCENA_OPISOWA') {
317                group.Rodzaj.value = 'OCENA_OPISOWA';
318                group.IdSkaliOcen.value = null;
319                group.OcenaGlowna.value = null;
320                group.OcenaDodatkowa.value = null;
321            }
322            else if(isSkalaOcen(group)) {
323                group.Rodzaj.value = 'SKALA_OCEN';
324                if(!isOcenaGlowna(group)) {
325                    group.IdSkaliOcen.value = null;
326                    group.OcenaGlowna.value = null;
327                }
328                else {
329                    group.IdSkaliOcen.value = group.rodzajDokumentu;
330                    group.OcenaGlowna.value = formatujOcene(group.IdSkaliOcen.value, group.OcenaGlowna.value);
331                }
332                if(!isOcenaDodatkowa(group)) {
333                    group.OcenaDodatkowa.value = null;
334                }
335                else {
336                    group.OcenaDodatkowa.value = formatujOcene(group.IdSkaliOcen.value, group.OcenaDodatkowa.value);
337                }
338                group.OcenaOpisowa.value = null;
339            }
340            group.rodzajDokumentu = undefined;
341            group.cache = undefined;
342        };
343        
344        var formatujOcene = function(idSkali, ocena) {
345            if(idSkali == null || ocena == null) {
346                return ocena;
347            }
348            var skala = skaleOcen.map[idSkali.toString()];
349            if(skala == null || skala.krok == null) {
350                return ocena;
351            }
352            return skala.ocenyNumeryczneMap[ocena.toString()];
353        };
354
355        var beforeSave = function(groupCopy) {
356            var key, group;
357            for(key in groupCopy.ocenaprzedmiotumaturalnegointake)
358            {
359                group = groupCopy.ocenaprzedmiotumaturalnegointake[key].fieldMap;
360                sanitizeGroup(group);
361            }
362            for(key in groupCopy.konkurskandydataintake)
363            {
364                group = groupCopy.konkurskandydataintake[key].fieldMap;
365                if(!$scope.konkursy.laureat) {
366                    group.IdKonkursu.value = [];
367                }
368            }
369        };
370        
371        var getDaneDoPunktacji = function(idWymagania, group, wymaganieSpelnioneKonkursem, przedmiotZaliczonyOlimpiada,
372            idKrajuSwiadectwaDojrzalosci) {
373            if(wymaganieSpelnioneKonkursem) {
374                return {
375                    idWymagania: idWymagania,
376                    rodzaj: 'BRAK_OCENY',
377                    konkurs: true,
378                    idKrajuSwiadectwaDojrzalosci: idKrajuSwiadectwaDojrzalosci
379                };
380            }
381            if(group) {
382                if(!przedmiotZaliczonyOlimpiada && isBrakWartosciOceny(group)) {
383                    return 0;
384                }
385                var groupCopy = angular.copy(group);
386                sanitizeGroup(groupCopy);
387                var result = {
388                    idWymagania: idWymagania,
389                    idPrzedmiotu: groupCopy.IdPrzedmiotu.value,
390                    idSkaliOcen: groupCopy.IdSkaliOcen.value,
391                    ocenaGlowna: groupCopy.OcenaGlowna.value,
392                    ocenaDodatkowa: groupCopy.OcenaDodatkowa.value,
393                    rodzaj: groupCopy.Rodzaj.value,
394                    konkurs: przedmiotZaliczonyOlimpiada,
395                    idKrajuSwiadectwaDojrzalosci: idKrajuSwiadectwaDojrzalosci
396                };
397                if(result.idPrzedmiotu && result.rodzaj && result.idKrajuSwiadectwaDojrzalosci) {
398                    return result;
399                }
400            }
401            return null;
402        };
403        
404        var getIdSkaliOcen = function(group) {
405            if(!group || !group.IdSkaliOcen || !skaleOcen.zaladowane) {
406                return undefined;
407            }
408            if(!isSkalaOcen(group)) {
409                return "";
410            }
411            return group.rodzajDokumentu;
412        }
413        
414        $scope.$watch(
415            function() { 
416                return [getIdKrajuSwiadectwaDojrzalosci(), getRodzajMatury()]
417            }, 
418            function(value) {
419                var kraj = value[0];
420                var rodzajMatury = value[1];
421                if(kraj && rodzajMatury) {
422                    $http.get('REST/wyksztalcenie/skalaocen/' + kraj + '/' + rodzajMatury, {}).then(function(result) {
423                        if(angular.equals(value, [getIdKrajuSwiadectwaDojrzalosci(), getRodzajMatury()])) {
424                            var list = result.data;
425                            var map = {};
426                            for(var i = 0; i < list.length; ++i) {
427                                var skalaOcen = result.data[i];
428                                var id = skalaOcen.idSkali.toString();
429                                var oceny = [];
430                                var ocenyNumeryczneMap = {};
431                                for(var ocena of skalaOcen.oceny) {
432                                    oceny.push({value: ocena, label: ocena});
433                                    if(skalaOcen.krok != null) {
434                                        ocenyNumeryczneMap[parseFloat(ocena).toString()] = ocena;
435                                    }
436                                }
437                                skalaOcen.oceny = oceny;
438                                skalaOcen.ocenyNumeryczneMap = ocenyNumeryczneMap;
439                                map[id] = skalaOcen;
440                            }
441                            skaleOcen.list = list;
442                            skaleOcen.map = map;
443                            skaleOcen.zaladowane = true;
444                            if(skaleOcen.intakeMap) {
445                               var intakeMap = skaleOcen.intakeMap;
446                               skaleOcen.intakeMap = undefined;
447                               updateOceny(intakeMap); 
448                            }
449                        }
450                    });
451                }
452                else {
453                    skaleOcen.list = [];
454                    skaleOcen.map = {};
455                    skaleOcen.zaladowane = false;
456                }
457            },
458            true
459        );
460        
461        var watchOcenaZaKonkurs = function(wymaganie) {
462            if(wymaganie) {
463                $scope.$watch(
464                    function() {
465                        return $scope.isOcenaZaKonkurs(wymaganie);
466                    },
467                    function(przedmiotZaliczonyOlimpiada) {
468                        if(przedmiotZaliczonyOlimpiada) {
469                            $scope.getOcenaGroup(wymaganie).rodzajDokumentu = 'BRAK_OCENY';
470                        }
471                    }
472                );
473            }
474        };
475
476        var watchZaleznosciDanychDoPunktacji = function(wymaganie) {
477            if(wymaganie) {
478                $scope.$watch(
479                    function() {
480                        var group = $scope.getOcenaGroup(wymaganie);
481                        var isSpelnioneKonkursem = $scope.isSpelnioneKonkursem(wymaganie);
482                        var przedmiotZaliczonyOlimpiada = $scope.isOcenaZaKonkurs(wymaganie);
483                        return [group, getIdSkaliOcen(group), isSpelnioneKonkursem, przedmiotZaliczonyOlimpiada,
484                            getIdKrajuSwiadectwaDojrzalosci(), getWybraneKonkursy()];
485                    },
486                    function(grupaZeSkalaOcen) {
487                        var group = grupaZeSkalaOcen[0];
488                        var isSpelnioneKonkursem = grupaZeSkalaOcen[2];
489                        var przedmiotZaliczonyOlimpiada = grupaZeSkalaOcen[3];
490                        var idKrajuSwiadectwaDojrzalosci = grupaZeSkalaOcen[4];
491                        wymaganie.daneDoPunktacji = getDaneDoPunktacji(wymaganie.idWymagania, group,
492                            isSpelnioneKonkursem, przedmiotZaliczonyOlimpiada, idKrajuSwiadectwaDojrzalosci);
493                    },
494                    true
495                );
496            }
497        };
498        
499        var watchZmianaWidocznosciWymagania = function(proces, wymaganie) {
500            $scope.$watch(
501                function() {
502                    return $scope.getWymagania(proces).indexOf(wymaganie) < 0;
503                },
504                function(disabled) {
505                    if(disabled) {
506                        var group = $scope.getOcenaGroup(wymaganie);
507                        if(group) {
508                            group.IdPrzedmiotu.value = null;
509                        }
510                    }
511                }
512            );
513        };
514
515        var watchZmianaProcesu = function(proces) {
516            var punktyPath = 'REST/punktyrekrutacyjne/' + proces.idProcesu;
517            var getDaneDoPunktacjiFunc = function() {
518                var wybraneKonkursyIdList = getWybraneKonkursy().map(function(konkurs) {
519                    return konkurs.idKonkursu; 
520                }); 
521                var listaOcen = $scope.getWymagania(proces).map(function(wymaganie) {
522                    return wymaganie.daneDoPunktacji;
523                }).filter(function(dane) {
524                    return dane != 0;
525                });
526                return {ocenyProcesu: listaOcen, wybraneKonkursyIdList: wybraneKonkursyIdList}
527            }
528            $scope.$watch(
529                getDaneDoPunktacjiFunc,
530                function(daneDoPunktacji) {
531                    if(daneDoPunktacji.ocenyProcesu.length > 0 && daneDoPunktacji.ocenyProcesu.indexOf(null) < 0) {
532                        $http.post(punktyPath, daneDoPunktacji)
533                            .then(function(result) {
534                                if(angular.equals(daneDoPunktacji, getDaneDoPunktacjiFunc())) {
535                                    proces.punktyRekrutacyjne = result.data;
536                                }
537                            });
538                    }
539                    else {
540                        proces.punktyRekrutacyjne = null;
541                    }
542                },
543                true
544            );
545        };
546
547        var updateProcesyRekrutacyjne = function() {
548            return $http.get('REST/wyksztalcenie', {}).then(function(result) {
549                angular.forEach(result.data, function(proces) {
550                    angular.forEach(proces.wymagania, function(wymaganie) {
551                        wymaganie.proces = proces;
552                        angular.forEach(wymaganie.przedmioty, function(przedmiot) {
553                            przedmiotMap[przedmiot.idPrzedmiotu] = przedmiot;
554                        });
555                        watchOcenaZaKonkurs(wymaganie);
556                        watchZaleznosciDanychDoPunktacji(wymaganie);
557                        watchZmianaWidocznosciWymagania(proces, wymaganie);
558                    });
559                    watchZmianaProcesu(proces);
560                    procesyRekrutacyjneMap[proces.idProcesu.toString()] = proces;
561                });
562                $scope.procesyRekrutacyjne = result.data;
563                $scope.loadGroup();
564            });
565        };
566
567        var intakeResource = $resource('REST/wyksztalcenie/intake');
568
569        $scope.zapisz = function() {
570            $scope.saveGroup($scope.gidGroupMap);
571        };
572
573        $scope.saveGroup = function(group) {
574            var groupCopy = angular.copy(group);
575            beforeSave(groupCopy);
576            intakeResource.save({gidGroupMap: groupCopy}, function(groupDefinition) {
577                $scope.updateAllGroups(groupDefinition);
578                if(groupDefinition.valid) {
579                  i18n.get('interfejs.irk.shared.ZapisanoFormularz').then(function(komunikat) {
580                      toaster.pop('success', komunikat);
581                      $rootScope.$broadcast(SIDEBAR_MENU_EVENTS.zmianaLiczbyNieprzeczytanychWiadomosci);
582                      $rootScope.$broadcast(PYTANIA_DODATKOWE_EVENTS.przeladuj);
583                  });
584                }
585            });
586        };
587
588        $scope.loadGroup = function() {
589            intakeResource.get(function (groupDefinition) {
590                $scope.updateAllGroups(groupDefinition);
591            });
592        };
593
594        var parseNumericField = function(field) {
595            if(field.value) {
596                field.value = parseFloat(String(field.value).replaceAll(',', '.'));
597            }
598        };
599
600        $scope.updateAllGroups = function(gidGroupMap) {
601            $scope.updateGroup(gidGroupMap);
602            ocenaIntakeMap = {};
603            var key;
604            var fieldMap;
605            var field;
606            for(key in gidGroupMap.gidGroupMap.konkurskandydataintake)
607            {
608                fieldMap = gidGroupMap.gidGroupMap.konkurskandydataintake[key].fieldMap;
609                field = fieldMap.IdKonkursu;
610                if(!field.value || field.value.length === 0) {
611                    field.value = [null];
612                }
613                $scope.konkursy.fieldMap = fieldMap;
614                $scope.konkursy.laureat = field.value.some(function(e){ return e != null });
615            }
616            
617            updateOceny(gidGroupMap.gidGroupMap.ocenaprzedmiotumaturalnegointake);
618
619            zarzadcaModulow.getModulyDoWyswietlenia().then(function(moduly) {
620                angular.forEach(moduly, function(modul) {
621                    var modulDoUruchomienia = $injector.get(modul);
622                    modulDoUruchomienia.updateGroup($scope, gidGroupMap);
623                });
624            });
625        };
626        
627        var updateOceny = function(intakeMap) {
628            if(skaleOcen.list.length == 0) {
629                skaleOcen.intakeMap = intakeMap;
630            }
631            var key;
632            var fieldMap;
633            var skalaOcen;
634            var skalaOcenParams;
635            for(key in intakeMap)
636            {
637                fieldMap = intakeMap[key].fieldMap;
638                fieldMap.cache = {};
639                fieldMap.rodzajDokumentu = fieldMap.Rodzaj.value == 'SKALA_OCEN' ? fieldMap.IdSkaliOcen.value : fieldMap.Rodzaj.value;
640                ocenaIntakeMap[getGroupId(fieldMap)] = fieldMap;
641                skalaOcen = getSkalaOcen(fieldMap);
642                skalaOcenParams = buildSkalaParams(skalaOcen);
643                if(skalaOcenParams.typSkali == 'number' || skalaOcenParams.typSkali == 'number-select') {
644                    parseNumericField(fieldMap.OcenaGlowna);
645                    parseNumericField(fieldMap.OcenaDodatkowa);
646                }
647                watchGroup(fieldMap);
648            }
649        };
650        
651        var getOcenaUniqueKey = function(group) {
652            var idSemestru = group.IdSemestru.value;
653            var idPrzedmiotu = group.IdPrzedmiotu.value;
654            var idSkaliOcen = getIdSkaliOcen(group);
655            if(idSemestru == null || idPrzedmiotu == null || idSkaliOcen == null) {
656                return null;
657            }
658            return idSemestru + '_' + idPrzedmiotu + '_' + idSkaliOcen;
659        };
660        
661        var watchGroup = function(group) {
662            $scope.$watch(
663                function() {
664                    return getOcenaUniqueKey(group);
665                },
666                function(newKey, oldKey) {
667                    var groups;
668                    if(oldKey && oldKey != newKey) {
669                        groups = znanaOcenaMap[oldKey];
670                        if(groups) {
671                            znanaOcenaMap[oldKey] = groups.filter(function(otherGroup) {
672                                return group != otherGroup;
673                            });
674                        }
675                        group.OcenaGlowna.value = undefined;
676                        group.OcenaDodatkowa.value = undefined;
677                        group.OcenaOpisowa.value = undefined;
678                    }
679                    if(newKey) {
680                        groups = znanaOcenaMap[newKey];
681                        if(groups) {
682                            if(groups.length > 0) {
683                                group.OcenaGlowna.value = groups[0].OcenaGlowna.value;
684                                group.OcenaDodatkowa.value = groups[0].OcenaDodatkowa.value;
685                                group.OcenaOpisowa.value = groups[0].OcenaOpisowa.value;                                
686                            }
687                            if(groups.indexOf(group) < 0) {
688                                groups.push(group);
689                            }
690                        }
691                        else {
692                            znanaOcenaMap[newKey] = [group];
693                        }
694                    }
695                }
696            );
697            $scope.$watch(
698                function() {
699                    return [group.OcenaGlowna.value, group.OcenaDodatkowa.value, group.OcenaOpisowa.value]
700                },
701                function() {
702                    var key = getOcenaUniqueKey(group);
703                    var groups = key && znanaOcenaMap[key];
704                    if(groups) {
705                        for(var i = 0; i < groups.length; ++i) {
706                            groups[i].OcenaGlowna.value = group.OcenaGlowna.value;
707                            groups[i].OcenaDodatkowa.value = group.OcenaDodatkowa.value;
708                            groups[i].OcenaOpisowa.value = group.OcenaOpisowa.value;
709                        }
710                    }
711                },
712                true
713            );
714        }
715        
716        $scope.popErrorToasters = function(response){
717            try{
718                var jsonResponse = JSON.parse(response)
719                if(angular.isArray(jsonResponse))
720                {
721                    angular.forEach(jsonResponse, function(message) {
722                        toaster.pop('error', message);
723                    });
724                }
725                else
726                {
727                    toaster.pop('error', jsonResponse);
728                }
729            }
730            catch(error)
731            {
732                toaster.pop('error', response);
733            }
734        };
735
736        $scope.updateSlowniki = function() {
737            var slowniki = [
738                'DeklaracjaPodjeciaNauki',
739                'FormaKsztalcenia',
740                'FormaStudiow',
741                'Jezyk',
742                'JezykNaMaturze',
743                'KategoriaZdrowia',
744                'Kraj',
745                'OkregowaKomisjaEgzaminacyjna',
746                'OkresPrzyjazdu',
747                'Plec',
748                'PoziomZnajomosciJezyka',
749                'PrzyczynaNiepelnosprawnosci',
750                'RodzajDokumentuTozsamosci',
751                'RodzajKartyPobytu',
752                'StopienNiepelnosprawnosci',
753                'StopienPokrewienstwa',
754                'StopienWojskowy',
755                'StosunekDoSluzbyWojskowej',
756                'TypEltRejestruSzkol',
757                'Uczelnia',
758                'WarunkiFinansowe',
759                'WersjaEgzaminuDojrzalosci',
760                'Wojewodztwo',
761                'WKU',
762                'RodzajOcenyPrzedmiotuMaturalnego'
763            ];
764
765            zarzadcaModulow.getModulyDoWyswietlenia().then(function(moduly) {
766                angular.forEach(moduly, function(modul) {
767                    var modulDoUruchomienia = $injector.get(modul);
768                    slowniki = slowniki.concat(modulDoUruchomienia.getNazwyUzywanychSlownikow());
769                });
770
771                angular.forEach(slowniki, function(nazwaSlownika) {
772                    $scope.wartosciSlownikowe[nazwaSlownika] = slownik.get(nazwaSlownika); 
773                });
774            });
775
776        };
777
778        zarzadcaModulow.getModulyDoWyswietlenia().then(function(moduly) {
779            angular.forEach(moduly, function(modul) {
780                var modulDoUruchomienia = $injector.get(modul);
781                modulDoUruchomienia.process($scope);
782            });
783        });
784
785        $scope.updateSlowniki();
786        updateKonkursy();
787        updateProcesyRekrutacyjne();
788    }
789})();

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.