dsd-meetme/frontend

View on GitHub
app/components/organization/group/groupController.js

Summary

Maintainability
F
5 days
Test Coverage
(function () {

    var controller = function ($routeParams, $location, mixedContentToArray, orgResources, arrayToUrlParams) {

        var c = this;
        //group id
        var id = $routeParams.id;
        var getUsers = function () {
            orgResources.orgUserInGroup.query({groupId: id, userId: ''}).$promise
                .then(function (response) {
                    c.data.members = response;
                })
        };

        //Gets user info in the context of an organization
        var getGroupInfo = function () {
            //restful show
            orgResources.orgGroup.get({groupId: id}).$promise
                .then(function (response) {
                    c.data.group.name = response.name;
                    c.data.group.description = response.description;
                    c.data.group.id = response.id;
                    c.data.group.planner_id = response.planner_id;
                    c.data.group.planner_name = response.planner_name;
                    //A copy of the retrieved data
                    //This copy will be used
                    c.data.groupCopy.name = response.name;
                    c.data.groupCopy.description = response.description;
                });
        };
        c.data = {
            group: {
                name: '',
                description: '',
                id: ''
            },
            members: [],
            groupCopy: {
                name: '',
                description: ''
            }
        };
        c.errors = {
            planner: [],
            info: []
        };
        c.invalidFields = {
            nameReq: false
        };
        c.editMode = {
            flag: false,
            enter: function () {
                this.flag = true;
            },
            exit: function () {
                this.flag = false;
                c.errors.info = [];
                c.errors.planner = [];
                c.data.groupCopy.name = c.data.group.name;
                c.data.groupCopy.description = c.data.group.description;
                c.invalidFields.nameReq = false;
            }
        };
        c.confirmPopup = {
            message: '',
            show: function () {
                jQuery('#authorizationPopup').modal('show');
            },
            hide: function () {
                jQuery('#authorizationPopup').modal('hide');
            }
        };
        c.inChange = false;
        c.pagination = {
            user: {
                pages: 1,
                currentPage: 1,
                utilArray: null,
                startIndex: 0,
                endIndex: 9,
                filterString: '0,9',
                changePage: function (page) {
                    if (page > this.currentPage) {
                        this.currentPage = page;
                        this.startIndex = this.endIndex + 1;
                        this.endIndex = this.startIndex + 9;
                        this.filterString = this.startIndex + ',' + this.endIndex;
                    }
                    else if (page < this.currentPage) {
                        this.currentPage = page;
                        this.endIndex = this.startIndex - 1;
                        this.startIndex = this.endIndex - 9;
                        this.filterString = this.startIndex + ',' + this.endIndex;

                    }

                }
            }
        };

        //Delete an employee in the context of an org
        c.delete = function () {
            //restful delete
            c.confirmPopup.message = "Deleting group";
            c.confirmPopup.show();
            orgResources.orgGroup.remove({groupId: id}).$promise
                .then(function () {
                    c.confirmPopup.hide();
                    $location.path('/organization')
                }, function(){
                    c.confirmPopup.hide();
                });
        };
        c.updatePlanner = function (plannerId) {
            c.confirmPopup.message = "Updating planner";
            c.confirmPopup.show();
            if (plannerId !== c.data.group.planner_id) {
                orgResources.orgGroup.update({groupId: id}, jQuery.param(
                        {
                            name: c.data.group.name,
                            description: c.data.group.description,
                            planner_id: plannerId
                        })
                ).$promise
                    .then(function () {
                        //Update view
                        getGroupInfo();
                        c.editMode.exit();
                        c.confirmPopup.hide();
                    }, function (response) {
                        if (response.status === 422) {
                            mixedContentToArray.process(response.data, c.errors.planner, true);
                            c.confirmPopup.hide();
                        }
                        c.confirmPopup.hide();
                    });
            }
        };
        //Update user info
        c.updateInfo = function () {
            //Checks the validity status of input fields
            c.invalidFields.nameReq = (c.data.groupCopy.name === '');

            if (!c.invalidFields.nameReq) {
                c.confirmPopup.message = "Saving changes";
                c.confirmPopup.show();
                orgResources.orgGroup.update({groupId: id}, jQuery.param(
                    {
                        name: c.data.groupCopy.name,
                        description: c.data.groupCopy.description,
                        planner_id: c.data.group.planner_id
                    })).$promise
                    .then(function () {
                        getGroupInfo();
                        c.editMode.exit();
                        c.confirmPopup.hide();
                    }, function (response) {
                        if (response.status === 422) {
                            mixedContentToArray.process(response.data, c.errors.info, true);
                            c.confirmPopup.hide();
                        }
                        c.confirmPopup.hide();
                    });
            }
        };
        c.changePlanner = {
            errors: [],
            popUp: {
                show: function (resetInputs) {
                    var popup = jQuery('#changePlanner');
                    if (resetInputs) {
                        c.changePlanner.errors = [];
                        c.changePlanner.plannerId = '';
                        popup.find('input').val('');
                    }
                    popup.modal('show')
                },
                hide: function () {
                    jQuery('#changePlanner').modal('hide');
                }
            },
            init: function () {
                if (c.allUsers.length === 0) {
                    orgResources.orgUser.query({userId: ''})
                        .$promise.then(function (response) {
                            var pages;
                            c.allUsers = response;
                            pages = Math.ceil(c.allUsers.length / 10);
                            c.pagination.user.pages = pages;
                            c.pagination.user.utilArray = new Array(pages);
                            c.changePlanner.popUp.show(true);
                            c.editMode.exit();
                        })
                }
                else {
                    c.changePlanner.popUp.show(true);
                }

            },
            change: function () {
                if (!this.plannerId) {
                    this.errors.push('Select a user to be planner');
                }
                else if (this.plannerId !== c.data.group.planner_id) {
                    c.confirmPopup.message = "Saving changes";
                    c.changePlanner.popUp.hide();
                    c.confirmPopup.show();

                    orgResources.orgGroup.update({groupId: id}, jQuery.param(
                            {
                                name: c.data.group.name,
                                description: c.data.group.description,
                                planner_id: c.changePlanner.plannerId
                            })
                    ).$promise
                        .then(function () {
                            //Update view
                            getGroupInfo();
                            c.editMode.exit();
                            c.confirmPopup.hide();
                        }, function (response) {
                            if (response.status === 422) {
                                mixedContentToArray.process(response.data, c.errors.planner, true);
                                c.confirmPopup.hide();
                                c.changePlanner.popUp.show();
                            }
                            c.confirmPopup.hide();
                        });
                }
            }

        };
        c.allUsers = [];
        c.addToGroup = {
            errors: [],
            members: [],
            validMembers: [],
            popUp: {
                show: function (resetInputs) {
                    var popup = jQuery('#addToGroup');
                    if (resetInputs) {
                        c.changePlanner.errors = [];
                        c.changePlanner.members = [];
                        c.changePlanner.validMembers = [];
                        popup.find('input').val('');
                    }
                    popup.modal('show')
                },
                hide: function () {
                    jQuery('#addToGroup').modal('hide');
                }
            },
            init: function () {
                var utilArray = [];
                var secondUtilArray = [];
                if (c.allUsers.length === 0) {
                    for (var i = 0; i < c.data.members.length; i++) {
                        secondUtilArray.push(c.data.members[i].id);
                    }
                    orgResources.orgUser.query({userId: ''})
                        .$promise.then(function (response) {
                            var pages;
                            for (var j = 0; j < response.length; j++) {
                                if (secondUtilArray.indexOf(response[j].id) === -1) {
                                    utilArray.push(response[j]);
                                }
                            }
                            c.allUsers = utilArray;
                            pages = Math.ceil(c.allUsers.length / 10);
                            c.pagination.user.pages = pages;
                            c.pagination.user.utilArray = new Array(pages);
                            c.addToGroup.popUp.show(true);
                            c.editMode.exit();
                        })
                }
                else {
                    c.addToGroup.popUp.show(true);
                }

            },
            change: function () {
                var validMembers = [];
                angular.forEach(this.members, function (value, key) {
                    if (value === true) {
                        validMembers.push(key.toString());
                    }
                });
                if (validMembers.length === 0) {
                    this.errors.push("Select at least one user");
                }
                else {
                    c.confirmPopup.message = "Adding user to group";
                    c.addToGroup.popUp.hide();
                    c.confirmPopup.show();
                    orgResources.orgUserInGroup.save({
                        groupId: c.data.group.id,
                        userId: ''
                    }, arrayToUrlParams.process('id', validMembers)).$promise
                        .then(function () {
                            getUsers();
                            c.editMode.exit();
                            c.confirmPopup.hide();
                        }, function (response) {
                            //Puts relevant errors in array
                            if (response.status === 422) {
                                mixedContentToArray.process(response.data, c.errors.planner, true);
                                c.confirmPopup.hide();
                                c.addToGroup.popUp.show();
                            }
                            c.confirmPopup.hide();
                        })
                }

            }
        };
        c.deleteFromGroup = function (userId) {
            c.confirmPopup.message = "Removing user";
            c.confirmPopup.show();
            orgResources.orgUserInGroup.remove({groupId: id, userId: userId}).$promise
                .then(
                function () {
                    getUsers();
                    c.editMode.exit();
                    c.confirmPopup.hide();
                }, function(){
                    c.confirmPopup.hide();
                }
            )
        };

        getGroupInfo();
        getUsers();

    };
    var app = angular.module('Plunner');
    app.controller('groupController', ['$routeParams', '$location', 'mixedContentToArray', 'orgResources', 'arrayToUrlParams', controller]);
}());