get next agent from a department queue

pull/1734/head
Diego Sampaio 10 years ago
parent ee4da05d5a
commit 7f08e48614
  1. 3
      packages/rocketchat-livechat/client/stylesheets/livechat.less
  2. 21
      packages/rocketchat-livechat/server/lib/getNextAgent.js
  3. 60
      packages/rocketchat-livechat/server/models/LivechatDepartment.js
  4. 39
      packages/rocketchat-livechat/server/models/LivechatDepartmentAgents.js

@ -431,8 +431,9 @@
}
.agent-info {
input {
input[type='text'] {
width: auto;
line-height: 24px;
height: 24px;
}
}

@ -1,27 +1,8 @@
this.getNextAgent = function(department) {
var agentFilter = {};
// find agents from that department
if (department) {
var agents = RocketChat.models.LivechatDepartment.getNextAgent(department);
if (!agents) {
return;
}
// sort = {
// count: 1,
// order: 1,
// 'user.name': 1
// }
// update = {
// $inc: {
// count: 1
// }
// }
// queueUser = findAndModify query, sort, update
return RocketChat.models.LivechatDepartment.getNextAgent(department);
} else {
return RocketChat.models.Users.getNextAgent();
}

@ -50,8 +50,8 @@ class LivechatDepartment extends RocketChat.models._Base {
agentId: agent.agentId,
departmentId: _id,
username: agent.username,
count: agent.count,
order: agent.order
count: parseInt(agent.count),
order: parseInt(agent.order)
});
});
@ -63,62 +63,6 @@ class LivechatDepartment extends RocketChat.models._Base {
query = { _id: _id };
return this.remove(query);
}
getNextAgent(departmentId) {
var department = this.findOne({ _id: departmentId }, { fields: { agents: 1 } })
if (!department || !department.agents || department.agents.length === 0) {
return;
}
var onlineUsers = RocketChat.models.Users.findOnlineUserFromList(_.pluck(department.agents, 'username'));
var onlineUsernames = _.pluck(onlineUsers.fetch(), 'username');
console.log('onlineUsernames ->',onlineUsernames);
var query = {
_id: departmentId,
"agents.username": {
$in: onlineUsernames
}
};
var sort = {
livechatCount: 1,
// sort: 1,
username: 1
};
var update = {
$inc: {
"agents.$.livechatCount": 1
}
};
// var query = {
// status: 'online'
// };
// query['roles.' + Roles.GLOBAL_GROUP] = 'livechat-agent';
var collectionObj = this.model.rawCollection();
var findAndModify = Meteor.wrapAsync(collectionObj.findAndModify, collectionObj);
// var sort = {
// livechatCount: 1,
// username: 1
// };
// var update = {
// $inc: {
// livechatCount: 1
// }
// };
return findAndModify(query, sort, update);
// return RocketChat.models.Users.getNextAgent(department.agents);
}
}
RocketChat.models.LivechatDepartment = new LivechatDepartment();

@ -21,8 +21,8 @@ class LivechatDepartmentAgents extends RocketChat.models._Base {
}, {
$set: {
username: agent.username,
count: agent.count,
order: agent.order
count: parseInt(agent.count),
order: parseInt(agent.order)
}
});
}
@ -31,6 +31,41 @@ class LivechatDepartmentAgents extends RocketChat.models._Base {
removeByDepartmentIdAndAgentId(departmentId, agentId) {
this.remove({ departmentId: departmentId, agentId: agentId });
}
getNextAgentForDepartment(departmentId) {
var agents = this.findByDepartmentId(departmentId).fetch();
if (agents.length === 0) {
return;
}
var onlineUsers = RocketChat.models.Users.findOnlineUserFromList(_.pluck(agents, 'username'));
var onlineUsernames = _.pluck(onlineUsers.fetch(), 'username');
var query = {
departmentId: departmentId,
username: {
$in: onlineUsernames
}
};
var sort = {
count: 1,
sort: 1,
username: 1
};
var update = {
$inc: {
count: 1
}
};
var collectionObj = this.model.rawCollection();
var findAndModify = Meteor.wrapAsync(collectionObj.findAndModify, collectionObj);
return findAndModify(query, sort, update);
}
}
RocketChat.models.LivechatDepartmentAgents = new LivechatDepartmentAgents();

Loading…
Cancel
Save