Skip to content

Commit

Permalink
feat:résilience gestion des avis
Browse files Browse the repository at this point in the history
Julien Perrin committed Jul 9, 2024
1 parent 7813b37 commit 127eba7
Showing 10 changed files with 60 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const BadDataError = require('./../../../errors');

module.exports = (db, regions, mailer) => {

const templateName = 'avisRejectedAlerteEmail';
@@ -13,6 +15,10 @@ module.exports = (db, regions, mailer) => {
templateName,
render,
send: async stagiaire => {
if (!stagiaire.individu || !stagiaire.individu.email) {
throw new BadDataError(`Le courriel de l'individu a été supprimé pour raison de RGPD. `);
}

let region = regions.findRegionByCodeRegion(stagiaire.codeRegion);

return mailer.createRegionalMailer(region).sendEmail(
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const BadDataError = require('./../../../errors');

module.exports = (db, regions, mailer) => {

const templateName = 'avisRejectedInjureEmail';
@@ -13,6 +15,9 @@ module.exports = (db, regions, mailer) => {
templateName,
render,
send: async stagiaire => {
if (!stagiaire.individu || !stagiaire.individu.email) {
throw new BadDataError(`Le courriel de l'individu a été supprimé pour raison de RGPD. `);
}

let formation = stagiaire.formation;
let region = regions.findRegionByCodeRegion(stagiaire.codeRegion);
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const BadDataError = require('./../../../errors');

module.exports = (db, regions, mailer) => {

const templateName = 'avisStagiaireEmail';
@@ -16,6 +18,9 @@ module.exports = (db, regions, mailer) => {
templateName,
render,
send: async stagiaire => {
if (!stagiaire.individu || !stagiaire.individu.email) {
throw new BadDataError(`Le courriel de l'individu a été supprimé pour raison de RGPD. `);
}

let onSuccess = () => {
return db.collection('stagiaires').updateOne({ '_id': stagiaire._id }, {
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const BadDataError = require('./../../../errors');

module.exports = (db, regions, mailer) => {

const templateName = 'questionnaire6MoisEmail';
@@ -14,6 +16,9 @@ module.exports = (db, regions, mailer) => {
templateName,
render,
send: async stagiaire => {
if (!stagiaire.individu || !stagiaire.individu.email) {
throw new BadDataError(`Le courriel de l'individu a été supprimé pour raison de RGPD. `);
}
let onSuccess = () => {
return db.collection('stagiaires').updateOne({ '_id': stagiaire._id }, {
$set: {
12 changes: 9 additions & 3 deletions backend/src/core/components/workflow.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const ObjectID = require('mongodb').ObjectID;
const _ = require('lodash');
const { IdNotFoundError, ForbiddenError } = require('./../errors');
const Boom = require('boom');

module.exports = (db, logger, emails) => {

@@ -109,9 +110,11 @@ module.exports = (db, logger, emails) => {
}

if ((qualification === 'injure' || qualification === 'alerte')) {
let stagiaire = await db.collection('stagiaires').findOne({ token: original.token });
if (!stagiaire.individu || !stagiaire.individu.email) {
throw Boom.badRequest(`Avis rejeté, cependant le stagiaire n'a pas pu être notifié. `);
}
sendEmail(async () => {
let stagiaire = await db.collection('stagiaires').findOne({ token: original.token });

let message = emails.getEmailMessageByTemplateName(`avisRejected${_.capitalize(qualification)}Email`);
return message.send(stagiaire);
});
@@ -187,8 +190,11 @@ module.exports = (db, logger, emails) => {
});

if (options.sendEmail) {
let stagiaire = await db.collection('stagiaires').findOne({ token: previous.token });
if (!stagiaire.individu || !stagiaire.individu.email) {
throw Boom.badRequest(`Avis supprimé, cependant le courriel n'a pas pu être renvoyé. `);
}
sendEmail(async () => {
let stagiaire = await db.collection('stagiaires').findOne({ token: previous.token });
let message = emails.getEmailMessageByTemplateName('avisStagiaireEmail');
return message.send(stagiaire);
});
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ class ResendAction {
{ mailRetry: { $lt: parseInt(avisMaxRelaunch) } }
],
'formation.action.session.nbStagiairesFormes': { $gte: 5 },
'individu.email': { $exists: true },
};
}
}
Original file line number Diff line number Diff line change
@@ -20,6 +20,7 @@ class RetryAction {
mailRetry: { $lt: parseInt(this.configuration.smtp.stagiaires.avisMaxRelaunch) }
}
],
'individu.email': { $exists: true },
};
}
}
Original file line number Diff line number Diff line change
@@ -16,6 +16,7 @@ class SendAction {
...(this.filters.codeRegions ? { 'codeRegion': { $in: this.filters.codeRegions } } : {}),
...(this.filters.campaign ? { 'campaign': this.filters.campaign } : {}),
'formation.action.session.nbStagiairesFormes': { $gte: 5 },
'individu.email': { $exists: true },
};
}
}
14 changes: 13 additions & 1 deletion ui/src/backoffice/components/common/avis/buttons/EditButton.jsx
Original file line number Diff line number Diff line change
@@ -41,6 +41,7 @@ export default class EditButton extends React.Component {
await this.props.onChange(this.props.avis, {
message: {
type: 'local',
color: 'red',
text: 'L\'avis a été supprimé.',
},
});
@@ -59,7 +60,18 @@ export default class EditButton extends React.Component {
}
onClose={this.handleCancel}
onConfirmed={async () => {
await deleteAvis(this.props.avis._id, { sendEmail: true });
try {
await deleteAvis(this.props.avis._id, { sendEmail: true });
} catch(e) {
const messageJson = (await e.json).message;
await this.props.onChange(this.props.avis, {
message: {
text: !messageJson ? e.message : messageJson,
color: 'red',
type: 'local',
}
});
}
await this.props.onChange(this.props.avis, {
message: {
text: 'Le questionnaire a bien été envoyé au stagiaire.',
Original file line number Diff line number Diff line change
@@ -49,7 +49,20 @@ export default class RejectButton extends React.Component {
</span>
}
onClose={this.handleCancel}
onConfirmed={() => this.reject(this.props.avis, this.state.qualification)} />
onConfirmed={async () => {
try {
await this.reject(this.props.avis, this.state.qualification);
} catch(e) {
const messageJson = (await e.json).message;
await this.props.onChange(this.props.avis, {
message: {
text: !messageJson ? e.message : messageJson,
color: 'red',
type: 'local',
}
});
}
}} />
);
};

0 comments on commit 127eba7

Please sign in to comment.