salix/back/methods/chat/notifyIssues.js

49 lines
1.7 KiB
JavaScript

module.exports = Self => {
Self.remoteMethodCtx('notifyIssues', {
description: 'Notifies new urgent issues',
accessType: 'READ',
returns: {
type: 'Object',
root: true
},
http: {
path: `/notifyIssues`,
verb: 'POST'
}
});
Self.notifyIssues = async ctx => {
const models = Self.app.models;
const $t = ctx.req.__; // $translate
const tickets = await models.OsTicket.rawSql(`
SELECT t.ticket_id AS id, t.number, ua.username, td.subject
FROM ost_ticket t
JOIN ost_user_account ua ON t.user_id = ua.user_id
JOIN ost_ticket__cdata td ON t.ticket_id = td.ticket_id
JOIN ost_ticket_priority tp ON td.priority = tp.priority_id
LEFT JOIN ost_department dept ON dept.id = t.dept_id
WHERE tp.priority = 'emergency'
AND (t.staff_id = 0 AND t.team_id = 0)
AND dept.code = 'IT'
`);
if (!tickets.length) return;
let message = $t(`There's a new urgent ticket:`);
const ostUri = 'https://cau.verdnatura.es/scp/tickets.php?id=';
tickets.forEach(ticket => {
message += `\r\n[ID: *${ticket.number}* - ${ticket.subject} (@${ticket.username})](${ostUri + ticket.id})`;
});
const department = await models.Department.findOne({
where: {code: 'IT'}
});
const channelName = department && department.chatName;
if (channelName)
return Self.send(ctx, `#${channelName}`, `@all ➔ ${message}`);
return;
};
};