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;