Skip to content

Commit

Permalink
chore(core): groups and departments updates
Browse files Browse the repository at this point in the history
  • Loading branch information
polonel committed Apr 10, 2019
1 parent d743389 commit 0f67611
Show file tree
Hide file tree
Showing 9 changed files with 110 additions and 24 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "trudesk",
"version": "1.0.11-beta",
"version": "1.1.0-beta",
"private": true,
"engines": {
"node": ">=9.10.0"
Expand Down
10 changes: 7 additions & 3 deletions src/client/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ api.accounts.create = payload => {
api.accounts.getWithPage = payload => {
const limit = payload && payload.limit ? payload.limit : 25
const page = payload && payload.page ? payload.page : 0
const type = payload && payload.type ? payload.type : 'customers'
const type = payload && payload.type ? payload.type : 'all'
let search = payload && payload.search ? payload.search : ''
if (search) search = `&search=${search}`

Expand All @@ -156,8 +156,12 @@ api.accounts.enableAccount = ({ username }) => {
}

api.groups = {}
api.groups.get = () => {
return axios.get('/api/v2/groups').then(res => {
api.groups.get = payload => {
const limit = payload && payload.limit ? payload.limit : 25
const page = payload && payload.page ? payload.page : 0
const type = payload && payload.type ? `&type=${payload.type}` : ''

return axios.get(`/api/v2/groups?limit=${limit}&page=${page}${type}`).then(res => {
return res.data
})
}
Expand Down
22 changes: 16 additions & 6 deletions src/client/containers/Modals/CreateAccountModal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { observer } from 'mobx-react'
import { observable } from 'mobx'

import { createAccount } from 'actions/accounts'
import { fetchGroups, unloadGroups } from 'actions/groups'

import BaseModal from './BaseModal'
import Button from 'components/Button'
Expand All @@ -39,6 +40,8 @@ class CreateAccountModal extends React.Component {
selectedRole = ''

componentDidMount () {
this.props.fetchGroups()

helpers.UI.inputs()
helpers.formvalidator()
}
Expand Down Expand Up @@ -103,9 +106,12 @@ class CreateAccountModal extends React.Component {
const roles = this.props.common.roles.map(role => {
return { text: role.name, value: role._id }
})
const groups = this.props.common.groups.map(group => {
return { text: group.name, value: group._id }
})
const groups = this.props.groups
.map(group => {
return { text: group.get('name'), value: group.get('_id') }
})
.toArray()

return (
<BaseModal parentExtraClass={'pt-0'} extraClass={'p-0 pb-25'}>
<div className='user-heading' style={{ minHeight: '130px', background: '#1976d2', padding: '24px' }}>
Expand Down Expand Up @@ -241,14 +247,18 @@ class CreateAccountModal extends React.Component {

CreateAccountModal.propTypes = {
common: PropTypes.object.isRequired,
createAccount: PropTypes.func.isRequired
groups: PropTypes.object.isRequired,
createAccount: PropTypes.func.isRequired,
fetchGroups: PropTypes.func.isRequired,
unloadGroups: PropTypes.func.isRequired
}

const mapStateToProps = state => ({
common: state.common
common: state.common,
groups: state.groupsState.groups
})

export default connect(
mapStateToProps,
{ createAccount }
{ createAccount, fetchGroups, unloadGroups }
)(CreateAccountModal)
2 changes: 1 addition & 1 deletion src/client/containers/Modals/CreateDepartmentModal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class CreateDepartmentModal extends React.Component {
componentDidMount () {
this.props.fetchTeams()
this.props.fetchGroups()
this.props.fetchGroups({ type: 'all' })
helpers.UI.inputs()
helpers.UI.reRenderInputs()
Expand Down
9 changes: 2 additions & 7 deletions src/controllers/api/v2/departments.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,10 @@ apiDepartments.create = function (req, res) {
}

apiDepartments.test = function (req, res) {
Department.getUserDepartments(req.user._id, function (err, departments) {
Department.getDepartmentGroupsOfUser(req.user._id, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)

var ticketSchema = require('../../../models/ticket')
ticketSchema.getTicketsByDepartments(departments, {}, function (err, tickets) {
if (err) return apiUtils.sendApiError(res, 500, err.message)

return apiUtils.sendApiSuccess(res, { departments: departments, tickets: tickets })
})
return apiUtils.sendApiSuccess(res, { groups: groups, count: groups.length })
})
}

Expand Down
29 changes: 25 additions & 4 deletions src/controllers/api/v2/groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,36 @@

var apiUtils = require('../apiUtils')
var Group = require('../../../models/group')
var Department = require('../../../models/department')

var apiGroups = {}

apiGroups.get = function (req, res) {
Group.find({}, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
var limit = Number(req.query.limit) || 10
var page = Number(req.query.page) || 0
var type = req.query.type || 'user'

return apiUtils.sendApiSuccess(res, { groups: groups })
})
if (type === 'all') {
Group.getWithObject({ limit: limit, page: page }, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)

return apiUtils.sendApiSuccess(res, { groups: groups, count: groups.length })
})
} else {
if (req.user.role.isAdmin || req.user.role.isAgent) {
Department.getDepartmentGroupsOfUser(req.user._id, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)

return apiUtils.sendApiSuccess(res, { groups: groups, count: groups.length })
})
} else {
Group.getAllGroupsOfUser(req.user._id, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)

return apiUtils.sendApiSuccess(res, { groups: groups, count: groups.length })
})
}
}
}

module.exports = apiGroups
32 changes: 31 additions & 1 deletion src/models/department.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
**/

var _ = require('lodash')
var async = require('async')
var mongoose = require('mongoose')

// Refs
require('./group')
var Teams = require('./team')
var Groups = require('./group')

var COLLECTION = 'departments'

Expand All @@ -42,7 +44,7 @@ departmentSchema.statics.getUserDepartments = function (userId, callback) {
var self = this

Teams.getTeamsOfUser(userId, function (err, teams) {
if (err) return callback({ error: err })
if (err) return callback(err)

return self
.model(COLLECTION)
Expand All @@ -51,4 +53,32 @@ departmentSchema.statics.getUserDepartments = function (userId, callback) {
})
}

departmentSchema.statics.getDepartmentGroupsOfUser = function (userId, callback) {
var self = this

Teams.getTeamsOfUser(userId, function (err, teams) {
if (err) return callback(err)

return self
.model(COLLECTION)
.find({ teams: { $in: teams } })
.exec(function (err, departments) {
if (err) return callback(err)

var hasAllGroups = _.some(departments, { allGroups: true })
if (hasAllGroups) {
return Groups.getAllGroups(callback)
}

var groups = _.flattenDeep(
departments.map(function (department) {
return department.groups
})
)

return callback(null, groups)
})
})
}

module.exports = mongoose.model(COLLECTION, departmentSchema)
26 changes: 26 additions & 0 deletions src/models/group.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,32 @@ groupSchema.statics.getGroupByName = function (name, callback) {
return q.exec(callback)
}

groupSchema.statics.getWithObject = function (obj, callback) {
var limit = obj.limit ? Number(obj.limit) : 100
var page = obj.page ? Number(obj.page) : 0
var userId = obj.userId

if (userId) {
return this.model(COLLECTION)
.find({ members: userId })
.limit(limit)
.skip(page * limit)
.populate('members', '_id username fullname email role preferences image title')
.populate('sendMailTo', '_id username fullname email role preferences image title')
.sort('name')
.exec(callback)
}

return this.model(COLLECTION)
.find({})
.limit(limit)
.skip(page * limit)
.populate('members', '_id username fullname email role preferences image title')
.populate('sendMailTo', '_id username fullname email role preferences image title')
.sort('name')
.exec(callback)
}

groupSchema.statics.getAllGroups = function (callback) {
var q = this.model(COLLECTION)
.find({})
Expand Down
2 changes: 1 addition & 1 deletion src/public/js/angularjs/controllers/singleTicket.js
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ define([
})

var groupHttpGet = $http
.get('/api/v1/groups')
.get('/api/v2/groups')
.success(function (data) {
_.each(data.groups, function (item) {
$scope.groups.push(item)
Expand Down

0 comments on commit 0f67611

Please sign in to comment.