BerniWittmann/spielplanismaning

View on GitHub
src/public/components/jugend-panel/jugend-panel.ui.js

Summary

Maintainability
B
5 hrs
Test Coverage
(function () {
    'use strict';

    angular
        .module('spi.components.jugendpanel.ui', [
            'spi.auth', 'ui.bootstrap', 'spi.jugend', 'spi.gruppe', 'spi.components.panel.ui', 'spi.components.gruppe-edit-modal.ui', 'spi.spielplan', 'spi.components.bestaetigen-modal.ui', 'spi.components.add-zwischengruppe-modal.ui'
        ])
        .controller('JugendPanelController', JugendPanelController)
        .component('spiJugendPanel', {
            templateUrl: 'components/jugend-panel/jugend-panel.html',
            bindings: {
                jugend: '='
            },
            controller: 'JugendPanelController',
            controllerAs: 'vm'
        });

    function JugendPanelController(auth, gruppe, jugend, GruppeEditierenDialog, spielplan, $state, $scope, BestaetigenDialog, AddZwischengruppeDialog, $rootScope) {
        const vm = this;
        vm.loading = true;

        _.extend(vm, {
            gruppe: {},
            error: undefined,
            gruppen: _.sortBy(vm.jugend.gruppen, 'name'),
            canEdit: canEdit(),
            addGruppe: addGruppe,
            deleteGruppe: deleteGruppe,
            deleteJugend: deleteJugend,
            editGruppe: editGruppe,
            askDeleteJugend: askDeleteJugend,
            askDeleteGruppe: askDeleteGruppe,
            gruppeIsEditable: gruppeIsEditable,
            addZwischengruppe: addZwischengruppe,
            editZwischenGruppenVisible: !$rootScope.spielplanEnabled
        });

        vm.loading = false;

        function canEdit() {
            return auth.isAdmin() && $state.includes('spi.event.verwaltung');
        }

        function gruppeIsEditable(gruppe) {
            return gruppe.type === 'normal' && vm.canEdit;
        }

        function askDeleteGruppe(gruppe) {
            return BestaetigenDialog.open('Gruppe ' + gruppe.name + ' wirklich löschen?', vm.deleteGruppe, gruppe._id);
        }

        function askDeleteJugend(jugend) {
            return BestaetigenDialog.open('Jugend ' + jugend.name + ' wirklich löschen?', vm.deleteJugend, jugend._id);
        }

        function editGruppe(gewaehlteGruppe) {
            GruppeEditierenDialog.open(gewaehlteGruppe);
        }

        function deleteJugend(id) {
            if (!vm.loading) {
                vm.loading = true;
                jugend.delete(id).then(function () {
                    vm.jugend = {};
                    vm.loading = false;
                    $scope.$emit('jugendDeleted');
                    spielplan.createSpielplan();
                });
            }
        }

        function deleteGruppe(id) {
            if (!vm.loading) {
                vm.loading = true;
                vm.error = undefined;
                if (vm.gruppen.length > 1) {
                    gruppe.delete(id).then(function () {
                        spielplan.createSpielplan();
                        vm.gruppen = _.pullAllBy(vm.gruppen, [{'_id': id}], '_id');
                        vm.loading = false;
                    });
                } else {
                    vm.loading = false;
                    vm.showMinZahlGruppen = true;
                }
            }
        }

        function addZwischengruppe() {
            AddZwischengruppeDialog.open(vm.jugend).result.then(function (res) {
                vm.jugend = res;
                vm.gruppen = _.sortBy(vm.jugend.gruppen, 'name');
            });
        }

        function addGruppe(form) {
            if (!vm.loading && form.$valid) {
                vm.loading = true;
                vm.error = undefined;
                form.$setUntouched();
                gruppe.create(vm.jugend._id, vm.gruppe).catch(function (error) {
                    vm.error = error;
                    vm.loading = false;
                }).then(function (res) {
                    spielplan.createSpielplan();
                    vm.gruppen.push(res);
                    vm.gruppe = {};
                    vm.showMinZahlGruppen = false;
                    vm.loading = false;
                });
            }
        }
    }
})();