const path = require("path");
const config = require("../config");
const JsonResponse = require("../Controllers/JsonResponse");
const ConnectedUser = require("../database/dto/ConnectedUser");
const { request } = require("http");
/**
* @memberof Myintranet.Services
* @inheritDoc
*/
class DashBoardService {
constructor(db) {
this.db = db;
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getPrevDataSuperAdmin() {
let { db } = this;
let prevText, prevStats;
let actMonth = new Date().getMonth() + 1;
let actYear = new Date().getFullYear();
let PrevSaisie = await db.PrevHistory.count({
where: {
nbJours: { [db.Sequelize.Op.not]: null },
mounth: actMonth,
year: actYear,
}
});
let PrevSaisieNon = await db.PrevHistory.count({
where: {
nbJours: null,
mounth: actMonth,
year: actYear
}
});
let HandredPrev = PrevSaisie + PrevSaisieNon;
prevText = PrevSaisie + "/" + HandredPrev + " Prev Saisies"
if (HandredPrev === 0) {
prevStats = [100, 0];
} else {
let percentSaisiePrev = (PrevSaisie * 100) / HandredPrev;
prevStats = [percentSaisiePrev, 100 - percentSaisiePrev];
}
return { prevText, prevStats }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getPrevDataAdmin(request) {
let { db } = this;
let prevText, prevStats;
let actMonth = new Date().getMonth() + 1;
let actYear = new Date().getFullYear();
let connectedUser = request.user;
let consultantsIds = [];
let admin = await db.User.findOne({
where: { id: connectedUser.id },
include: {
model: db.Employeur,
include: db.Consultant,
},
});
admin.Employeurs.map((emp) => {
const ids = emp.Consultants.map((con) => con.id);
consultantsIds = consultantsIds.concat(ids);
});
let mis = await db.Mission.findAll({
where:{ ConsultantId: { [db.Sequelize.Op.in]: consultantsIds }},
});
// console.log(mis);
let missionsIds = mis.map((mission) => {
return mission.id;
});
// console.log(missionsIds);
// console.log(consultantsIds);
let PrevSaisie = await db.PrevHistory.count({
where: {
nbJours: { [db.Sequelize.Op.not]: null },
mounth: actMonth,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
let PrevSaisieNon = await db.PrevHistory.count({
where: {
nbJours: null,
mounth: actMonth,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
let HandredPrev = PrevSaisie + PrevSaisieNon;
prevText = PrevSaisie + "/" + HandredPrev + " Prev Saisies"
if (HandredPrev === 0) {
prevStats = [100, 0];
} else {
let percentSaisiePrev = (PrevSaisie * 100) / HandredPrev;
prevStats = [percentSaisiePrev, 100 - percentSaisiePrev];
}
return { prevText, prevStats }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getCraDataSuperAdmin() {
let { db } = this;
let craText, craStats;
let actMonth = new Date().getMonth() + 1;
let actYear = new Date().getFullYear();
let craSaisie = await db.CraHistory.count({
where: {
craFilename: { [db.Sequelize.Op.not]: null },
mounth: actMonth,
year: actYear
}
});
let craSaisieNon = await db.CraHistory.count({
where: {
craFilename: null,
mounth: actMonth,
year: actYear
}
});
let HandredCra = craSaisie + craSaisieNon;
craText = craSaisie + "/" + HandredCra + " CRA Chargés"
if (HandredCra === 0) {
// base de donnée vide on qffiche 100% saisie
craStats = [100, 0];
} else {
let percentSaisieCra = (craSaisie * 100) / HandredCra;
craStats = [percentSaisieCra, 100 - percentSaisieCra];
}
return { craText, craStats }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getCraDataAdmin(request) {
let { db } = this;
let craText, craStats;
let actMonth = new Date().getMonth() + 1;
let actYear = new Date().getFullYear();
let connectedUser = request.user;
let consultantsIds = [];
let admin = await db.User.findOne({
where: { id: connectedUser.id },
include: {
model: db.Employeur,
include: db.Consultant,
},
});
admin.Employeurs.map((emp) => {
const ids = emp.Consultants.map((con) => con.id);
consultantsIds = consultantsIds.concat(ids);
});
let mis = await db.Mission.findAll({
where:{ ConsultantId: { [db.Sequelize.Op.in]: consultantsIds }},
});
let missionsIds = mis.map((mission) => {
return mission.id;
});
let craSaisie = await db.CraHistory.count({
where: {
craFilename: { [db.Sequelize.Op.not]: null },
mounth: actMonth,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
let craSaisieNon = await db.CraHistory.count({
where: {
craFilename: null,
mounth: actMonth,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
let HandredCra = craSaisie + craSaisieNon;
craText = craSaisie + "/" + HandredCra + " CRA Chargés"
if (HandredCra === 0) {
// base de donnée vide on qffiche 100% saisie
craStats = [100, 0];
} else {
let percentSaisieCra = (craSaisie * 100) / HandredCra;
craStats = [percentSaisieCra, 100 - percentSaisieCra];
}
return { craText, craStats }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getCraYearDataSuperAdmin() {
let { db } = this;
let craYearStatsSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let craYearStatsNonSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let craText, craStats;
let actYear = new Date().getFullYear();
for (let i = 0; i < 12; i++) {
let craSaisie = await db.CraHistory.count({
where: {
craFilename: { [db.Sequelize.Op.not]: null },
mounth: i + 1,
year: actYear
}
});
craYearStatsSasie[i] = craSaisie
let craSaisieNon = await db.CraHistory.count({
where: {
craFilename: null,
mounth: i + 1,
year: actYear
}
});
craYearStatsNonSasie[i] = craSaisieNon
}
return { craYearStatsSasie, craYearStatsNonSasie }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getCraYearDataAdmin(request) {
let { db } = this;
let craYearStatsSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let craYearStatsNonSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let craText, craStats;
let actYear = new Date().getFullYear();
let connectedUser = request.user;
let consultantsIds = [];
let admin = await db.User.findOne({
where: { id: connectedUser.id },
include: {
model: db.Employeur,
include: db.Consultant,
},
});
admin.Employeurs.map((emp) => {
const ids = emp.Consultants.map((con) => con.id);
consultantsIds = consultantsIds.concat(ids);
});
let mis = await db.Mission.findAll({
where:{ ConsultantId: { [db.Sequelize.Op.in]: consultantsIds }},
});
let missionsIds = mis.map((mission) => {
return mission.id;
});
for (let i = 0; i < 12; i++) {
let craSaisie = await db.CraHistory.count({
where: {
craFilename: { [db.Sequelize.Op.not]: null },
mounth: i + 1,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
craYearStatsSasie[i] = craSaisie
let craSaisieNon = await db.CraHistory.count({
where: {
craFilename: null,
mounth: i + 1,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
craYearStatsNonSasie[i] = craSaisieNon
}
return { craYearStatsSasie, craYearStatsNonSasie }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getYearPrevDataSuperAdmin() {
let { db } = this;
let prevYearStatsSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let prevYearStatsNonSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let actYear = new Date().getFullYear();
for (let i = 0; i < 12; i++) {
let PrevSaisie = await db.PrevHistory.count({
where: {
nbJours: { [db.Sequelize.Op.not]: null },
mounth: i + 1,
year: actYear
}
});
prevYearStatsSasie[i] = PrevSaisie
let PrevSaisieNon = await db.PrevHistory.count({
where: {
nbJours: null,
mounth: i + 1,
year: actYear
}
});
prevYearStatsNonSasie[i] = PrevSaisieNon
}
return { prevYearStatsSasie, prevYearStatsNonSasie }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getYearPrevDataAdmin(request) {
let { db } = this;
let prevYearStatsSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let prevYearStatsNonSasie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let actYear = new Date().getFullYear();
let connectedUser = request.user;
let consultantsIds = [];
let admin = await db.User.findOne({
where: { id: connectedUser.id},
include: {
model: db.Employeur,
include: db.Consultant
},
});
admin.Employeurs.map((emp) => {
const ids = emp.Consultants.map((con) => con.id);
consultantsIds = consultantsIds.concat(ids);
});
let mis = await db.Mission.findAll({
where: { ConsultantId: { [db.Sequelize.Op.in]: consultantsIds}},
});
let missionsIds = mis.map((mission) => {
return mission.id;
});
for (let i = 0; i < 12; i++) {
let PrevSaisie = await db.PrevHistory.count({
where: {
nbJours: { [db.Sequelize.Op.not]: null },
mounth: i + 1,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
prevYearStatsSasie[i] = PrevSaisie
let PrevSaisieNon = await db.PrevHistory.count({
where: {
nbJours: null,
mounth: i + 1,
year: actYear,
MissionId:{ [db.Sequelize.Op.in]: missionsIds }
}
});
prevYearStatsNonSasie[i] = PrevSaisieNon
}
return { prevYearStatsSasie, prevYearStatsNonSasie }
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getDashBoardDataAdmin(request) {
// let t = await db.sequelize.transaction();
try {
let dd = {};
dd.connected = new ConnectedUser(request.user);
let prevData = await this.getPrevDataAdmin(request);
dd.prevText = prevData.prevText;
dd.prevStats = prevData.prevStats;
let craData = await this.getCraDataAdmin(request);
dd.craText = craData.craText;
dd.craStats = craData.craStats;
let craYearData = await this.getCraYearDataAdmin(request);
dd.craYearStats = craYearData;
let prevYearData = await this.getYearPrevDataAdmin(request);
dd.prevYearStats = prevYearData;
return dd;
} catch (e) {
throw e;
}
}
/**
* @private
* @param {*} request
* @returns {Object}
*/
async getDashBoardDataSuperAdmin(request) {
// let t = await db.sequelize.transaction();
try {
let dd = {};
dd.connected = new ConnectedUser(request.user);
let prevData = await this.getPrevDataSuperAdmin();
dd.prevText = prevData.prevText;
dd.prevStats = prevData.prevStats;
let craData = await this.getCraDataSuperAdmin();
dd.craText = craData.craText;
dd.craStats = craData.craStats;
let craYearData = await this.getCraYearDataSuperAdmin();
dd.craYearStats = craYearData;
let prevYearData = await this.getYearPrevDataSuperAdmin();
dd.prevYearStats = prevYearData;
return dd;
} catch (e) {
throw e;
}
}
/**
* recupére les donnees statistiques affichées dans le dashboard pour l'admin et le superadmin
* @param {*} request
* @returns {Object}
*/
async getDashBoardData(request) {
return request.user.type === "SuperAdmin" ? await this.getDashBoardDataSuperAdmin(request) : await this.getDashBoardDataAdmin(request);
}
}
module.exports = DashBoardService;