const ConsultantService = require("../Services/ConsultantService");
const CrudController = require("./CrudController");
const JsonResponse = require("./JsonResponse");
const logger = require("../Logger");
const path = require("path");
const ConsultantValidatorAdd = require("../Validators/ConsultantValidatorAdd");
const ConsultantDto = require("../database/dto/ConsultantDto");
const ConsultantValidatorUpdate = require("../Validators/ConsultantValidatorUpdate")
/**
* @extends Myintranet.Controllers.CrudController
* @memberOf Myintranet.Controllers
* @inheritDoc
*/
class ConsultantController extends CrudController {
constructor(db) {
let service = new ConsultantService(db);
super(service, ConsultantValidatorAdd, db, ConsultantValidatorUpdate);
}
/**
* recupére un document pour download
* @param request
* @param response
*/
// downloadDocs(request, response) {
// this.service.getFullDocPathname(request.params.id).then(({ filePath, fileName }) => {
// console.log(filePath, fileName)
// response.setHeader('Content-Disposition', 'attachement; filename=' + fileName);
// response.sendFile(filePath);
// }).catch(err => {
// logger.error(err.message, err);
// response.json(new JsonResponse(false, err, err.message));
// })
// }
downloadDocs(request, response) {
this.service.getFullDocPathname(request.params.id).then((data) => {
console.log(data)
response.setHeader('Content-Disposition', 'attachement; filename=' + path.basename(data));
response.sendFile(data);
}).catch(err => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
})
}
/**
* upload un document du consultants
* @param request
* @param response
*/
docs1upload(request, response) {
this.service.uploadDocs1Files(request).then((data) => {
response.json(new JsonResponse(true, data, ""));
}).catch(err => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
})
}
/**
* recupére un document pour preview
* @param request
* @param response
*/
getDocs1(request, response) {
this.service.getDocs1(request).then(data => {
response.json(new JsonResponse(true, data, ""));
}).catch(err => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
})
}
validateSunscriber(request, response) {
//TODO: Create service method and validators
console.log(request.body)
this.service.validateSunscriber(request).then(data => {
response.json(new JsonResponse(true, data, ""));
}).catch(err => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
})
}
reSendNotificationPrev(request, response) {
}
reSendNotificationCra(request, response) {
}
/**
* Ajoute un nouveau consultant au system
* @param request
* @param response
*/
add(request, response) {
this.service.add(request).then(data => {
response.json(new JsonResponse(true, data, ""));
}).catch(err => {
if (err.parent && err.parent.code === "ER_DUP_ENTRY") {
response.json(new JsonResponse(false, err, err.errors[0].path + "=>" + err.errors[0].value + " exist deja"));
} else {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
}
})
// let errors = this.isValidForAdd(request);
// if (errors.length === 0) {
// this.service.add(request).then(data => {
// response.json(new JsonResponse(true, data, ""));
// }).catch(err => {
// if (err.parent && err.parent.code === "ER_DUP_ENTRY") {
// response.json(new JsonResponse(false, err, err.errors[0].path + "=>" + err.errors[0].value + " exist deja"));
// } else {
// logger.error(err.message, err);
// response.json(new JsonResponse(false, err, err.message));
// }
// })
// } else {
// logger.error(errors[0], errors);
// let e = errors.map((err) => {
// return err.message;
// })
// response.json(new JsonResponse(false, e, errors[0].message));
// }
}
addConsultant(request, response) {
this.service.addConsultantforAdmin(request).then(data => {
response.json(new JsonResponse(true, data, ""));
}).catch(err => {
if (err.parent && err.parent.code === "ER_DUP_ENTRY") {
response.json(new JsonResponse(false, err, err.errors[0].path + "=>" + err.errors[0].value + " existe déjà"));
} else {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
}
});
}
/**
* recuprére les donnée de la chart du chiffre d'affaire
* @param request
* @param response
*/
getCAdata(request, response) {
// recuparation de l'id des params de la route /:id
let {id} = request.params;
// recuperatoion de l'objet de dbase de donnée
let {db} = this;
//recuperation de l'année en cours
let date = new Date(Date.now());
let year = date.getFullYear(); // YYYY ex:2019
//creation d'un tableau de data a afficher dans la chart des chiffres d'affaire
let data = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]// donnees a zero pour 12 mois
let condition = {
where: {id},
include: [
{
model: db.User,
}, {
model: db.Mission,
include: [
{model: db.Client},
{model: db.CraHistory}, // add the where condition to exclude old mounths
{model: db.PrevHistory, where: {year}}, // add the where condition to exclude old mounths
{model: db.Employeur}]
}
]
};
db.Consultant.findOne(condition).then(consultant => {
for (const mission of consultant.Missions) {
if (mission.dateEnd === null) {
//Cette boucle parcourt les prévisions associées à chaque mission.
for (const prev of mission.PrevHistories) {
//Cette ligne accumule les valeurs de CA en fonction des prévisions et des jours facturables pour chaque mois.
if (prev.nbJours) {
data[parseInt(prev.mounth) - 1] += parseFloat(prev.nbJours) * parseFloat(mission.tjm)
}
}
}
}
response.json(new JsonResponse(true, data, ""));
}).catch(err => {
response.json(new JsonResponse(false, err, err.message));
})
}
/**
* recupére le photo de profile sans securité
* @param request
* @param response
*/
getPublicAvatar(request, response) {
let id = request.params.userId;
let {db} = this;
let condition = {
where: {id},
};
db.User.findOne(condition).then(user => {
// console.log(user.pic)
if (user.pic) {
response.contentType(user.picType);
response.send(Buffer.from(user.pic, 'binary'));
} else {
response.sendFile(path.resolve("./staticFiles/profile.jpg"));
}
}).catch(err => {
response.json(new JsonResponse(false, err, err.message));
})
}
// FilterPrevandCra (request,response){
// this.service.FilterPrevandCra(request).then(data => {
// response.json(new JsonResponse(true, data, ""));
// }).catch(err => {
// logger.error(err.message, err);
// response.json(new JsonResponse(false, err, err.message));
// })
// }
getSubs(request, response) {
this.service.getAllSubs(request)
.then(data => {
response.json(new JsonResponse(true, data, ""));
})
.catch(err => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
})
}
toDto(data) {
return new ConsultantDto(data);
}
}
module.exports = ConsultantController;