From 9c4829e773c737f2014f9a977f9a1df650af0964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Sun, 30 Aug 2020 18:23:21 +0200 Subject: [PATCH] Revue calcul date sans quiz + affichage jour de la semaine dates des prochains quizs --- controllers/questionnaire.js | 36 ++++++++++++++++++++++--------- front/src/homeManager.js | 5 +++-- front/src/manageQuestionnaires.js | 5 +++-- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/controllers/questionnaire.js b/controllers/questionnaire.js index dfbabd6..4405b01 100644 --- a/controllers/questionnaire.js +++ b/controllers/questionnaire.js @@ -295,26 +295,42 @@ exports.getListNextQuestionnaires = async(req, res, next) => try { let questionnaires=await getNextQuestionnaires(); - let dateNeeded="", questionnairesDatas, dateSearch, dateQuestionnaire; + const dayWithoutPublication=[0,6];// à déclarer dans config + gérer cas où aucun jour n'est obligatoire + let dateNeeded="", questionnairesDatas, dateQuestionnaireTS, previousDayNeededTS, previousDayTS; for(let i in questionnaires) { questionnairesDatas=await searchQuestionnaireById(questionnaires[i].id); questionnaires[i].isPublishable=checkQuestionnaireIsPublishable(questionnairesDatas, false); // le questionnaire est-il complet ? - if(dateNeeded==="") // si il y a plus de 24H entre deux dates de publication, c'est mal ! + dateQuestionnaireTS=new Date(questionnaires[i].datePublishing).getTime(); + if(dateNeeded==="") { - if(i==0) - dateSearch=new Date(Date.now()+3600*1000*24); + // je commence par chercher le jour précédent pour lequel je dois avoir publié quelque chose : + previousDayTS=new Date(new Date(dateQuestionnaireTS-3600*1000*24)); + previousDayNeededTS=0; + while (previousDayNeededTS===0) + { + if(dayWithoutPublication.indexOf(previousDayTS.getDay())===-1) + previousDayNeededTS=previousDayTS; + else + previousDayTS=new Date(previousDayTS.getTime()-3600*1000*24); + } + // si il n'y a pas de quiz précédent, cette date est celle que je cherche + if(!questionnaires[i-1]) + { + if(previousDayNeededTS >= Date.now()) + dateNeeded=previousDayNeededTS; + } else - dateSearch=new Date(questionnaires[i-1].datePublishing).getTime()+3600*1000*24; - dateQuestionnaire=new Date(questionnaires[i].datePublishing).getTime(); - if(dateQuestionnaire > dateSearch) - dateNeeded=dateSearch; + { // sinon je compare la date du précédent quiz à celle pour laquelle j'ai besoin d'un quiz + if(new Date(questionnaires[i-1].datePublishing).getTime() < previousDayNeededTS) + dateNeeded=previousDayNeededTS; + } } } if(questionnaires.length > 0 && dateNeeded==="") - dateNeeded=new Date(dateQuestionnaire+3600*1000*24);// le jour suivant celui du dernier questionnaire + dateNeeded=new Date(dateQuestionnaireTS+3600*1000*24);// le jour suivant celui du dernier questionnaire else - dateNeeded=new Date();// rien pour ce jour + dateNeeded=new Date(Date.now()+3600*1000*24);// mais il est possible que rien n'ai été publié ce jour, le quiz du jour étant absent de la liste traitée res.status(200).json({questionnaires: questionnaires, dateNeeded: dateNeeded }); next(); } diff --git a/front/src/homeManager.js b/front/src/homeManager.js index ce9a8a9..18a1fbc 100644 --- a/front/src/homeManager.js +++ b/front/src/homeManager.js @@ -96,10 +96,11 @@ const initialise = async () => let response=JSON.parse(this.responseText); if (this.status === 200 && Array.isArray(response.questionnaires)) { - let listHTML=""; + let listHTML="", dayStr, optionsDayStr = { weekday: 'long'}; for(let i in response.questionnaires) { - listHTML+="
  • "+dateFormat(response.questionnaires[i].datePublishing, "fr")+": "+response.questionnaires[i].title+""; + dayStr=new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing)); + listHTML+="
  • "+dayStr+" "+dateFormat(response.questionnaires[i].datePublishing, "fr")+": "+response.questionnaires[i].title+""; if(response.questionnaires[i].isPublishable===false) listHTML+=" ("+txtQuestionnaire.needBeCompleted+")
  • "; listHTML+=""; diff --git a/front/src/manageQuestionnaires.js b/front/src/manageQuestionnaires.js index 9aed989..a1fcc3e 100644 --- a/front/src/manageQuestionnaires.js +++ b/front/src/manageQuestionnaires.js @@ -405,10 +405,11 @@ const initialise = async () => let response=JSON.parse(this.responseText); if (this.status === 200 && Array.isArray(response.questionnaires)) { - let listHTML=""; + let listHTML="", dayStr, optionsDayStr = { weekday: 'long'}; for(let i in response.questionnaires) { - listHTML+="
  • "+dateFormat(response.questionnaires[i].datePublishing, "fr")+": "+response.questionnaires[i].title+""; + dayStr=new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing)); + listHTML+="
  • "+dayStr+" "+dateFormat(response.questionnaires[i].datePublishing, "fr")+": "+response.questionnaires[i].title+""; if(response.questionnaires[i].isPublishable===false) listHTML+=" ("+txtQuestionnaire.needBeCompleted+")
  • "; listHTML+="";