Controllers_MissionController.js
const MissionService = require("../Services/MissionService");
const CrudController = require("./CrudController");
const MissionValidatorAdd = require("../Validators/MissionValidatorAdd");
const MissionValidatorUpdate = require("../Validators/MissionValidatorUpdate");
const JsonResponse = require("./JsonResponse");
const MissionDto = require("../database/dto/MissionDto");
const fs = require("fs");
const logger = require("../Logger");
const config = require("../config");
const path = require("path");
/**
* @extends Myintranet.Controllers.CrudController
* @memberOf Myintranet.Controllers
* @inheritDoc
*/
class MissionController extends CrudController {
constructor(db) {
let service = new MissionService(db);
super(service,MissionValidatorAdd,db,MissionValidatorUpdate);
}
// isValidForAdd(request) {
// let data =JSON.parse(JSON.stringify(request.body));
// // console.log(data)
// let errors = MissionValidator.validate(data)
// // console.log(errors)
// if(!data.dateEnd || data.dateEnd == null){
// return errors;
// }else{
// return errors.push(new Error( 'La date de fin est saisi veuillez l\'enlever.'));
// }
// }
/**
* <span style="color:red">NO DESCRIPTION</span>
* @param request
* @param response
*/
getPrevCraHistory(request,response){
this.service.getPrevCraHistory(request).then(data=>{
response.json(new JsonResponse(true, data, ''))
}).catch(err=>{
response.json(new JsonResponse(false, err, err.message))
})
}
async downloadContrat(request, response) {
let { id } = request.params;
let { db } = this;
let mission = await db.Mission.findOne({
where: { id },
include: [
db.Client,
db.Employeur,
{ model: db.Consultant, include: db.User },
{ model: db.Missionfiles}
],
});
if (!mission) {
response.json(new JsonResponse(false, null, "Mission introuvable"));
return;
}
let contratFile = mission.Missionfiles.length > 0 ? (mission.Missionfiles[0].type === "contrat" ? mission.Missionfiles[0] : mission.Missionfiles[1]) : null;
let cfolder =mission.Consultant.id +
"-" +
mission.Consultant.Utilisateur.firstname +
"-" +
mission.Consultant.Utilisateur.lastname;
let mfolder= "mission-" + mission.id + "-" + mission.title;
try {
let filePath = path.join(config.storageLocation,cfolder,mfolder, "contrat", contratFile.name);
if (fs.existsSync(filePath)) {
response.setHeader("Content-Disposition", `attachment; filename=${contratFile.name}`);
fs.createReadStream(filePath).pipe(response);
} else {
response.json(new JsonResponse(false, null, "Fichier de contrat introuvable"));
}
} catch (err) {
logger.error("erreur lors du téléchargement du contrat: ", 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));
// })
// }
async downloadAvenant(request, response) {
let { id } = request.params;
let { db } = this;
let mission = await db.Mission.findOne({
where: { id },
include: [
db.Client,
db.Employeur,
{ model: db.Consultant, include: db.User },
{ model: db.Missionfiles}
],
});
if (!mission) {
response.json(new JsonResponse(false, null, "Mission introuvable"));
return;
}
let contratFile = mission.Missionfiles.length > 0 ? (mission.Missionfiles[0].type === "avenant" ? mission.Missionfiles[0] : mission.Missionfiles[1]) : null;
let cfolder =mission.Consultant.id +
"-" +
mission.Consultant.Utilisateur.firstname +
"-" +
mission.Consultant.Utilisateur.lastname;
let mfolder= "mission-" + mission.id + "-" + mission.title;
try {
let filePath = path.join(config.storageLocation,cfolder,mfolder, "avenant", contratFile.name);
if (fs.existsSync(filePath)) {
response.setHeader("Content-Disposition", `attachment; filename=${contratFile.name}`);
fs.createReadStream(filePath).pipe(response);
} else {
response.json(new JsonResponse(false, null, "Fichier de l'avenant introuvable"));
}
} catch (err) {
logger.error("erreur lors du téléchargement du avenant: ", err);
response.json(new JsonResponse(false, err, err.message));
}
}
/**
* <span style="color:red">NO DESCRIPTION</span>
* @param request
* @param response
*/
getMissionHistory(request,response){
this.service.getMissionHistory(request).then(data=>{
response.json(new JsonResponse(true, data, ''))
}).catch(err=>{
response.json(new JsonResponse(false, err, err.message))
})
}
toDto(data){
return new MissionDto(data);
}
}
module.exports = MissionController;