maestrano/mnoe-admin-panel

View on GitHub
src/app/views/sub-tenant/update-account-managers-modal/update-account-managers.controller.coffee

Summary

Maintainability
Test Coverage
@App.controller 'UpdateAccountManagersController', ($filter, $stateParams, $log, $uibModalInstance, toastr, MnoeSubTenants, MnoeUsers, MnoErrorsHandler, MnoeAdminConfig, subTenant) ->
  'ngInject'
  vm = this
  # Variables initialization
  vm.selectedUsers = {}
  _.each(subTenant.account_manager_ids, (id) -> vm.selectedUsers[id] = true)
  vm = this
  vm.staff_roles = MnoeAdminConfig.adminRoles()
  vm.getAdminRoleLabel = (admin_role) ->
    return _.find(vm.staff_roles, (role) -> role.value == admin_role).label

  # Manage sorting, search and pagination
  vm.callServer = (tableState) ->
    sort = updateSort(tableState.sort)
    search = updateSearch(tableState.search)
    fetchStaffs(vm.staff.nbItems, vm.staff.offset, sort, search)

  # Update sorting parameters
  updateSort = (sortState = {}) ->
    sort = "surname"
    if sortState.predicate
      sort = sortState.predicate
      if sortState.reverse
        sort += ".desc"
      else
        sort += ".asc"

    # Update staff sort
    vm.staff.sort = sort
    return sort

  # Update searching parameters
  updateSearch = (searchingState = {}) ->
    search = {}
    if searchingState.predicateObject
      for attr, value of searchingState.predicateObject
        if attr == "admin_role"
          search[ 'where[admin_role.in][]' ] = [value]
        else
          search[ 'where[' + attr + '.like]' ] = value + '%'

    # Update staff sort
    vm.staff.search = search
    return search

  vm.staff =
    search: {}
    sort: "surname"
    nbItems: 10
    page: 1
    pageChangedCb: (nbItems, page) ->
      vm.staff.nbItems = nbItems
      vm.staff.page = page
      offset = (page  - 1) * nbItems
      fetchStaffs(nbItems, offset)

  # Fetch staffs
  fetchStaffs = (limit, offset, sort = vm.staff.sort, search = vm.staff.search) ->
    vm.staff.loading = true
    return MnoeUsers.staffs(limit, offset, sort, search).then(
      (response) ->
        vm.staff.totalItems = response.headers('x-total-count')
        vm.listOfStaff = response.data
    ).finally(-> vm.staff.loading = false)

  vm.onSubmit = () ->
    vm.isLoading = true
    subTenant.account_manager_ids = (orgId for orgId, val of vm.selectedUsers when val)
    MnoeSubTenants.update(subTenant).then(
      (result) ->
        $uibModalInstance.close(result.data.sub_tenant.account_managers)
        toastr.success("mnoe_admin_panel.dashboard.sub_tenant.select_account_managers.modal.toastr_success", {extraData: { sub_tenant_name: subTenant.name }})
      (error) ->
        toastr.error("mnoe_admin_panel.dashboard.sub_tenant.select_account_managers.modal.toastr_error", {extraData: { sub_tenant_name: subTenant.name }})
        $log.error("An error occurred while updating account managers of #{subTenant.name}.", error)
    ).finally(-> vm.isLoading = false)

  vm.onCancel = () ->
    $uibModalInstance.dismiss('cancel')

  return