- Abilita a Tutti la Newsletter news_on - isCommerciale - JobsInProgress - PCB: Corretto Totali che era a zero
129 lines
3.4 KiB
JavaScript
Executable File
129 lines
3.4 KiB
JavaScript
Executable File
const mongoose = require('mongoose').set('debug', false)
|
|
const Schema = mongoose.Schema;
|
|
|
|
const tools = require('../tools/general');
|
|
|
|
mongoose.Promise = global.Promise;
|
|
mongoose.level = "F";
|
|
|
|
const shared_consts = require('../tools/shared_nodejs');
|
|
|
|
// Resolving error Unknown modifier: $pushAll
|
|
mongoose.plugin(schema => {
|
|
schema.options.usePushEach = true
|
|
});
|
|
|
|
|
|
const JobsInProgressSchema = new Schema({
|
|
idapp: {
|
|
type: String,
|
|
},
|
|
descr: {
|
|
type: String,
|
|
},
|
|
nomeFunzioneDbOp: {
|
|
type: String,
|
|
},
|
|
status: {
|
|
type: Number,
|
|
},
|
|
terminatedWhy: {
|
|
type: Number,
|
|
},
|
|
comment: {
|
|
type: String,
|
|
},
|
|
date_created: {
|
|
type: Date,
|
|
default: Date.now
|
|
},
|
|
});
|
|
|
|
JobsInProgressSchema.statics.chechifExistJobWorking = async function (jobData, terminateiftoolong) {
|
|
|
|
// controlla se esiste un altro job, non ancora terminato !STATUS_JOB.FINISH
|
|
// se esiste già allora ritorna false
|
|
const existingJob = await this.findOne({ idapp: jobData.idapp, nomeFunzioneDbOp: jobData.nomeFunzioneDbOp, status: { $ne: shared_consts.STATUS_JOB.FINISH } });
|
|
if (existingJob) {
|
|
// se il Job trovato è passato troppo tempo (oltre 3 ore date_created), allora fai finta che abbia già terminato
|
|
// (in questo caso, non ritorna false, ma ritorna il job trovato, per permettere di gestire il caso in cui si vuole forzare il job a terminare)
|
|
if (Math.abs(Date.now() - existingJob.date_created.getTime()) > 180 * 60 * 1000) {
|
|
if (terminateiftoolong) {
|
|
existingJob.status = shared_consts.STATUS_JOB.FINISH;
|
|
existingJob.terminatedWhy = shared_consts.TERMINATED_WHY.TOOLONGTIME;
|
|
await existingJob.save();
|
|
return false;
|
|
}
|
|
} else {
|
|
return true; // E' in FUNZIONE il JOB
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
JobsInProgressSchema.statics.addNewJob = async function (jobData) {
|
|
if (!jobData || typeof jobData !== 'object') {
|
|
console.error('ERRORE: ❌ jobData deve essere un oggetto valido');
|
|
}
|
|
|
|
const esistegia = await this.chechifExistJobWorking(jobData, true);
|
|
|
|
if (esistegia) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const newJob = await this.create(jobData);
|
|
return newJob;
|
|
} catch (err) {
|
|
console.error('Errore nell\'aggiungere un nuovo record: ', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
JobsInProgressSchema.methods.terminateJob = async function (witherror) {
|
|
try {
|
|
|
|
this.status = shared_consts.STATUS_JOB.FINISH;
|
|
this.terminatedWhy = witherror ? shared_consts.TERMINATED_WHY.END_WITHERROR : shared_consts.TERMINATED_WHY.END_NORMALLY;
|
|
await this.save();
|
|
return true;
|
|
} catch (err) {
|
|
console.error('Errore durante la terminazione del job: ', err);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
|
|
JobsInProgressSchema.statics.getFieldsForSearch = function () {
|
|
return [{ field: 'descr', type: tools.FieldType.string }]
|
|
};
|
|
|
|
JobsInProgressSchema.statics.executeQueryTable = function (idapp, params, user) {
|
|
params.fieldsearch = this.getFieldsForSearch();
|
|
return tools.executeQueryTable(this, idapp, params, user);
|
|
};
|
|
|
|
JobsInProgressSchema.statics.findAllIdApp = async function (idapp) {
|
|
const JobsInProgress = this;
|
|
|
|
try {
|
|
return await JobsInProgress.find({ idapp }).then((arrrec) => {
|
|
return arrrec;
|
|
});
|
|
|
|
} catch (err) {
|
|
console.error('Errore: ', err);
|
|
}
|
|
};
|
|
|
|
const JobsInProgress = mongoose.model('JobsInProgress', JobsInProgressSchema);
|
|
|
|
JobsInProgress.createIndexes()
|
|
.then(() => { })
|
|
.catch((err) => { throw err; });
|
|
|
|
|
|
module.exports = { JobsInProgress };
|