Added method to send message to salesPerson on credit classification.
This commit is contained in:
parent
de40c400b4
commit
12e67b7b60
|
@ -1,11 +1,17 @@
|
||||||
module.exports = function(Self) {
|
module.exports = function(Self) {
|
||||||
Self.remoteMethod('createWithInsurance', {
|
Self.remoteMethod('createWithInsurance', {
|
||||||
description: 'Creates both classification and one insurance',
|
description: 'Creates both classification and one insurance',
|
||||||
accepts: {
|
accepts: [{
|
||||||
arg: 'data',
|
arg: 'data',
|
||||||
type: 'object',
|
type: 'object',
|
||||||
http: {source: 'body'}
|
http: {source: 'body'}
|
||||||
},
|
}, {
|
||||||
|
arg: 'context',
|
||||||
|
type: 'object',
|
||||||
|
http: function(ctx) {
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
}],
|
||||||
returns: {
|
returns: {
|
||||||
root: true,
|
root: true,
|
||||||
type: 'boolean'
|
type: 'boolean'
|
||||||
|
@ -16,21 +22,23 @@ module.exports = function(Self) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.createWithInsurance = async data => {
|
Self.createWithInsurance = async (data, ctx) => {
|
||||||
let transaction = await Self.beginTransaction({});
|
let transaction = await Self.beginTransaction({});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let classificationSchema = {client: data.clientFk, started: data.started};
|
let classificationSchema = {client: data.clientFk, started: data.started};
|
||||||
let newClassification = await Self.create(classificationSchema, {transaction});
|
let newClassification = await Self.create(classificationSchema, {transaction});
|
||||||
|
let CreditInsurance = Self.app.models.CreditInsurance;
|
||||||
let insuranceSchema = {
|
let insuranceSchema = {
|
||||||
creditClassification: newClassification.id,
|
creditClassification: newClassification.id,
|
||||||
credit: data.credit,
|
credit: data.credit,
|
||||||
grade: data.grade
|
grade: data.grade
|
||||||
};
|
};
|
||||||
|
|
||||||
Self.app.models.CreditInsurance.create(insuranceSchema, {transaction});
|
let newCreditInsurance = await CreditInsurance.create(insuranceSchema, {transaction});
|
||||||
|
|
||||||
await transaction.commit();
|
await transaction.commit();
|
||||||
|
await CreditInsurance.messageSend(newCreditInsurance, ctx.req.accessToken);
|
||||||
|
|
||||||
return newClassification;
|
return newClassification;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
transaction.rollback();
|
transaction.rollback();
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
"client": {
|
"customer": {
|
||||||
"type": "belongsTo",
|
"type": "belongsTo",
|
||||||
"model": "Client",
|
"model": "Client",
|
||||||
"foreignKey": "client"
|
"foreignKey": "client"
|
||||||
|
|
|
@ -19,4 +19,51 @@ module.exports = function(Self) {
|
||||||
message: 'The grade must be an integer greater than or equal to zero',
|
message: 'The grade must be an integer greater than or equal to zero',
|
||||||
allowNull: true
|
allowNull: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Self.messageSend = async function(data, accessToken) {
|
||||||
|
let filter = {
|
||||||
|
include: {
|
||||||
|
relation: 'classification',
|
||||||
|
scope: {
|
||||||
|
fields: ['client'],
|
||||||
|
include: {
|
||||||
|
relation: 'customer',
|
||||||
|
scope: {
|
||||||
|
fields: ['name', 'salesPersonFk'],
|
||||||
|
include: {
|
||||||
|
relation: 'salesPerson',
|
||||||
|
scope: {
|
||||||
|
fields: 'userFk',
|
||||||
|
include: {
|
||||||
|
relation: 'user',
|
||||||
|
scope: {
|
||||||
|
fields: ['name']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let ctx = {req: {accessToken: accessToken}};
|
||||||
|
let insurance = await Self.findById(data.id, filter);
|
||||||
|
let customer = insurance.classification().customer();
|
||||||
|
let salesPerson = customer.salesPerson().user().name;
|
||||||
|
let grade = data.grade ? `(Grado ${data.grade})` : '(Sin grado)';
|
||||||
|
let message = {
|
||||||
|
message: `He cambiado el crédito asegurado del cliente "${customer.name}" a ${data.credit} € ${grade}`
|
||||||
|
};
|
||||||
|
|
||||||
|
Self.app.models.Message.send(salesPerson, message, ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Update from transaction misses ctx accessToken.
|
||||||
|
// Fixed passing accessToken from method messageSend()
|
||||||
|
Self.observe('after save', async function(ctx) {
|
||||||
|
if (ctx.options.accessToken)
|
||||||
|
await Self.messageSend(ctx.instance, ctx.options.accessToken);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('send', {
|
||||||
|
description: 'Send message to user',
|
||||||
|
accessType: 'WRITE',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'recipient',
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
description: 'The user/alias name',
|
||||||
|
http: {source: 'path'}
|
||||||
|
}, {
|
||||||
|
arg: 'data',
|
||||||
|
type: 'object',
|
||||||
|
required: true,
|
||||||
|
description: 'Message data',
|
||||||
|
http: {source: 'body'}
|
||||||
|
}, {
|
||||||
|
arg: 'context',
|
||||||
|
type: 'object',
|
||||||
|
http: function(ctx) {
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
returns: {
|
||||||
|
type: 'boolean',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/:recipient/send`,
|
||||||
|
verb: 'post'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.send = async (recipient, data, ctx) => {
|
||||||
|
let query = `SELECT vn.messageSendWithUser(?, ?, ?) AS sent`;
|
||||||
|
let [result] = await Self.rawSql(query, [ctx.req.accessToken.userId, recipient, data.message]);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,12 @@
|
||||||
|
const app = require(`${servicesDir}/client/server/server`);
|
||||||
|
|
||||||
|
describe('message send()', () => {
|
||||||
|
it('should call the send method and return the response', done => {
|
||||||
|
let ctx = {req: {accessToken: {userId: 1}}};
|
||||||
|
app.models.Message.send('salesPerson', {message: 'I changed something'}, ctx)
|
||||||
|
.then(response => {
|
||||||
|
expect(response.sent).toEqual(1);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
require('../methods/message/send.js')(Self);
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"name": "Message",
|
||||||
|
"base": "VnModel",
|
||||||
|
"options": {
|
||||||
|
"mysql": {
|
||||||
|
"table": "message"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "Number",
|
||||||
|
"id": true,
|
||||||
|
"description": "Identifier"
|
||||||
|
},
|
||||||
|
"sender": {
|
||||||
|
"type": "String",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"recipient": {
|
||||||
|
"type": "String",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "String"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"relations": {
|
||||||
|
"remitter": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"model": "User",
|
||||||
|
"foreignKey": "sender"
|
||||||
|
},
|
||||||
|
"receptor": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"model": "User",
|
||||||
|
"foreignKey": "recipient"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,6 +20,10 @@
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"required": true
|
"required": true
|
||||||
|
},
|
||||||
|
"userFk": {
|
||||||
|
"type" : "Number",
|
||||||
|
"required": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
|
|
|
@ -101,5 +101,8 @@
|
||||||
},
|
},
|
||||||
"Producer": {
|
"Producer": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
|
},
|
||||||
|
"Message": {
|
||||||
|
"dataSource": "vn"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue