salix/modules/client/back/models/credit-insurance.js

71 lines
2.2 KiB
JavaScript
Raw Normal View History

2020-01-23 12:31:07 +00:00
const LoopBackContext = require('loopback-context');
module.exports = function(Self) {
2018-03-26 09:43:17 +00:00
Self.validateCredit = function(credit) {
return credit >= 0;
};
Self.validateBinded('credit', Self.validateCredit, {
message: 'The credit must be an integer greater than or equal to zero',
allowNull: false,
allowBlank: false
});
2018-03-26 09:43:17 +00:00
Self.validateGrade = function(grade) {
return typeof grade === 'undefined' || grade >= 0;
};
Self.validateBinded('grade', Self.validateGrade, {
message: 'The grade must be an integer greater than or equal to zero',
allowNull: true
});
2018-05-31 05:59:42 +00:00
async function validateNullGrade(err, done) {
let filter = {
fields: ['grade'],
2018-05-31 05:59:42 +00:00
where: {
creditClassification: this.creditClassification
},
order: 'created DESC'
};
let insurance = await Self.findOne(filter);
2018-08-21 11:38:16 +00:00
if (insurance && (!insurance.grade && this.grade || insurance.grade && !this.grade))
2018-05-31 05:59:42 +00:00
err();
done();
}
Self.validateAsync('nullGrade', validateNullGrade, {
message: 'The grade must be similar to the last one'
});
2020-01-23 12:31:07 +00:00
Self.observe('after save', async function(ctx) {
const loopBackContext = LoopBackContext.getCurrentContext();
const httpCtx = {req: loopBackContext.active};
const options = ctx.options ? ctx.options : null;
const models = Self.app.models;
2020-01-23 12:31:07 +00:00
if (!ctx.isNewInstance) return;
2020-01-23 12:31:07 +00:00
const data = ctx.instance;
const insurance = await Self.findById(data.id, null, options);
const client = insurance.classification().customer();
const salesPerson = client.salesPerson();
2020-01-23 12:31:07 +00:00
if (!salesPerson) return;
2020-01-23 12:31:07 +00:00
const httpRequest = httpCtx.req.http.req;
const $t = httpRequest.__;
const origin = httpRequest.headers.origin;
const fullPath = `${origin}/#!/client/${client.id}`;
const message = $t('MESSAGE_INSURANCE_CHANGE', {
clientId: client.id,
clientName: client.name,
credit: data.credit,
url: fullPath
});
await models.Chat.sendCheckingPresence(httpCtx, salesPerson.id, message);
});
};