92 lines
2.5 KiB
JavaScript
92 lines
2.5 KiB
JavaScript
const {db} = require('../db/db-connect');
|
|
const logger = require('../utils/logger');
|
|
const globalService = require('../services/globalService');
|
|
|
|
async function getContratByNumContrat(numContrat) {
|
|
const criteria = {
|
|
filter: `numContrat='${numContrat}'`,
|
|
expand: "client, intermediaire, rc, fac, tppc"
|
|
};
|
|
|
|
const resultat = await globalService.fetchInfoByCriteria('contrat', criteria)
|
|
if (resultat) {
|
|
return placerDansEnCours(await expandProjetTarif(resultat))
|
|
}
|
|
}
|
|
|
|
async function getContratByNumSaisine(numSaisine) {
|
|
const criteria = {
|
|
filter: `numSaisine='${numSaisine}'`,
|
|
expand: "client, intermediaire, rc, fac, tppc"
|
|
};
|
|
|
|
const resultat = await globalService.fetchInfoByCriteria('contrat', criteria)
|
|
if (resultat) {
|
|
return placerDansEnCours(await expandProjetTarif(resultat))
|
|
}
|
|
}
|
|
|
|
async function getContratById(id) {
|
|
const criteria = {
|
|
filter: `id='${id}'`,
|
|
expand: "client, intermediaire, rc, fac, tppc"
|
|
};
|
|
|
|
const resultat = await globalService.fetchInfoByCriteria('contrat', criteria)
|
|
if (resultat) {
|
|
return placerDansEnCours(await expandProjetTarif(resultat))
|
|
}
|
|
}
|
|
|
|
async function createContrat() {
|
|
return await db.records.create('contrat', {});
|
|
}
|
|
|
|
|
|
async function expandProjetTarif(resultat) {
|
|
const produit = resultat?.['produit'].toLowerCase()
|
|
const idProjet = resultat?.['@expand']?.[produit]?.['projet'] || undefined
|
|
const idTarif = resultat?.['@expand']?.[produit]?.['tarif'] || undefined
|
|
|
|
const expand = {
|
|
projet: (idProjet) ? await db.records.getOne(produit + "projet", idProjet) : null,
|
|
tarif: (idTarif) ? await db.records.getOne(produit + "tarif", idTarif) : null
|
|
}
|
|
|
|
resultat['@expand'][produit] = {...resultat['@expand'][produit], '@expand': expand}
|
|
return resultat
|
|
}
|
|
|
|
function placerDansEnCours(result) {
|
|
/* déplace le contenu du produit dans @expand:enCours
|
|
pour que le front y accède au même emplacement
|
|
quelque soit le type du produit*/
|
|
|
|
if (result !== null && result.produit !== null) {
|
|
switch (result.produit.toLowerCase()) {
|
|
case 'rc':
|
|
result["@expand"]['enCours'] = result['@expand'].rc;
|
|
delete result["@expand"]['rc'];
|
|
break;
|
|
|
|
case 'fac':
|
|
result["@expand"]['enCours'] = result['@expand'].fac;
|
|
delete result["@expand"]['fac'];
|
|
break;
|
|
|
|
case 'tppc':
|
|
result["@expand"]['enCours'] = result['@expand'].tppc;
|
|
delete result["@expand"]['tppc']
|
|
break;
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
module.exports = {
|
|
getContratByNumContrat,
|
|
getContratByNumSaisine,
|
|
createContrat,
|
|
getContratById
|
|
}; |