diff --git a/back/methods/chat/notifyIssues.js b/back/methods/chat/notifyIssues.js
new file mode 100644
index 000000000..54eb41c89
--- /dev/null
+++ b/back/methods/chat/notifyIssues.js
@@ -0,0 +1,39 @@
+module.exports = Self => {
+ Self.remoteMethodCtx('notifyIssues', {
+ description: 'Notifies new urgent issues',
+ accessType: 'READ',
+ returns: {
+ type: 'Object',
+ root: true
+ },
+ http: {
+ path: `/notifyIssues`,
+ verb: 'GET'
+ }
+ });
+
+ Self.notifyIssues = async ctx => {
+ const models = Self.app.models;
+ const $t = ctx.req.__; // $translate
+ const [urgentIssue] = await Self.rawSql(`
+ SELECT * FROM managedesktop.vn_workOrderInmediata LIMIT 1
+ `);
+
+ if (!urgentIssue) return;
+
+ const message = $t(`There's a new urgent ticket`, {
+ title: urgentIssue.title,
+ issueId: urgentIssue.workOrderId
+ });
+
+ const department = await models.Department.findOne({
+ where: {code: 'IT'}
+ });
+ const channelName = department && department.chatName;
+
+ if (channelName)
+ return Self.send(ctx, `#${channelName}`, `@all ➔ ${message}`);
+
+ return;
+ };
+};
diff --git a/back/methods/chat/spec/notifyIssue.spec.js b/back/methods/chat/spec/notifyIssue.spec.js
new file mode 100644
index 000000000..e23c33859
--- /dev/null
+++ b/back/methods/chat/spec/notifyIssue.spec.js
@@ -0,0 +1,38 @@
+const app = require('vn-loopback/server/server');
+
+describe('Chat notifyIssue()', () => {
+ const ctx = {req: {accessToken: {userId: 1}}};
+ ctx.req.__ = value => {
+ return value;
+ };
+ const chatModel = app.models.Chat;
+ const departmentId = 31;
+
+ it(`should not call to the send() method and neither return a response`, async() => {
+ spyOn(chatModel, 'send').and.callThrough();
+ spyOn(chatModel, 'rawSql').and.returnValue([]);
+
+ const response = await chatModel.notifyIssues(ctx);
+
+ expect(chatModel.send).not.toHaveBeenCalled();
+ expect(response).toBeUndefined();
+ });
+
+ it(`should return a response calling the send() method`, async() => {
+ spyOn(chatModel, 'send').and.callThrough();
+ spyOn(chatModel, 'rawSql').and.returnValue([{title: 'Issue title'}]);
+
+ const department = await app.models.Department.findById(departmentId);
+ let orgChatName = department.chatName;
+ await department.updateAttribute('chatName', 'IT');
+
+ const response = await chatModel.notifyIssues(ctx);
+
+ expect(response.statusCode).toEqual(200);
+ expect(response.message).toEqual('Fake notification sent');
+ expect(chatModel.send).toHaveBeenCalledWith(ctx, '#IT', `@all ➔ There's a new urgent ticket`);
+
+ // restores
+ await department.updateAttribute('chatName', orgChatName);
+ });
+});
diff --git a/back/methods/chat/spec/send.spec.js b/back/methods/chat/spec/send.spec.js
index 56f2a9c27..2c23bb591 100644
--- a/back/methods/chat/spec/send.spec.js
+++ b/back/methods/chat/spec/send.spec.js
@@ -1,6 +1,6 @@
const app = require('vn-loopback/server/server');
-describe('chat send()', () => {
+describe('Chat send()', () => {
it('should return a "Fake notification sent" as response', async() => {
let ctx = {req: {accessToken: {userId: 1}}};
let response = await app.models.Chat.send(ctx, '@salesPerson', 'I changed something');
diff --git a/back/methods/chat/spec/sendCheckingPresence.spec.js b/back/methods/chat/spec/sendCheckingPresence.spec.js
index b3e89180c..aa4a80801 100644
--- a/back/methods/chat/spec/sendCheckingPresence.spec.js
+++ b/back/methods/chat/spec/sendCheckingPresence.spec.js
@@ -1,6 +1,6 @@
const app = require('vn-loopback/server/server');
-describe('chat sendCheckingPresence()', () => {
+describe('Chat sendCheckingPresence()', () => {
const today = new Date();
today.setHours(6, 0);
const ctx = {req: {accessToken: {userId: 1}}};
diff --git a/back/models/chat.js b/back/models/chat.js
index ab23ef713..5487569c1 100644
--- a/back/models/chat.js
+++ b/back/models/chat.js
@@ -1,4 +1,5 @@
module.exports = Self => {
require('../methods/chat/send')(Self);
require('../methods/chat/sendCheckingPresence')(Self);
+ require('../methods/chat/notifyIssues')(Self);
};
diff --git a/db/changes/10280-valentineDay/00-department.sql b/db/changes/10280-valentineDay/00-department.sql
new file mode 100644
index 000000000..bb3062825
--- /dev/null
+++ b/db/changes/10280-valentineDay/00-department.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `vn`.`department`
+ ADD code VARCHAR(45) NULL AFTER id;
+
+UPDATE `vn`.`department` t SET t.code = 'IT', t.chatName = 'informatica-cau' WHERE t.id = 31;
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index 0db7554c1..207b4a7e7 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -90,5 +90,6 @@
"A travel with this data already exists": "A travel with this data already exists",
"The observation type can't be repeated": "The observation type can't be repeated",
"New ticket request has been created with price": "New ticket request has been created '{{description}}' for day {{shipped}}, with a quantity of {{quantity}} and a price of {{price}} €",
- "New ticket request has been created": "New ticket request has been created '{{description}}' for day {{shipped}}, with a quantity of {{quantity}}"
+ "New ticket request has been created": "New ticket request has been created '{{description}}' for day {{shipped}}, with a quantity of {{quantity}}",
+ "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})"
}
\ No newline at end of file
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index b6b3271af..25976c952 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -170,5 +170,6 @@
"Invalid account": "Cuenta inválida",
"New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día {{shipped}}, con una cantidad de {{quantity}} y un precio de {{price}} €",
"New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día {{shipped}}, con una cantidad de {{quantity}}",
- "That item doesn't exists": "Ese artículo no existe"
+ "That item doesn't exists": "Ese artículo no existe",
+ "There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})"
}
\ No newline at end of file
diff --git a/modules/worker/back/models/department.json b/modules/worker/back/models/department.json
index 31ebbb09a..7d6f7a7be 100644
--- a/modules/worker/back/models/department.json
+++ b/modules/worker/back/models/department.json
@@ -9,28 +9,31 @@
"properties": {
"id": {
"id": true,
- "type": "Number"
+ "type": "number"
+ },
+ "code": {
+ "type": "string"
},
"name": {
- "type": "String"
+ "type": "string"
},
"parentFk": {
- "type": "Number"
+ "type": "number"
},
"lft": {
- "type": "Number"
+ "type": "number"
},
"rgt": {
- "type": "Number"
+ "type": "number"
},
"sons": {
- "type": "Number"
+ "type": "number"
},
"chatName": {
- "type": "String"
+ "type": "string"
},
"notificationEmail": {
- "type": "String"
+ "type": "string"
}
}
}