github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/directeurs/src/components/retours/satisfactions.ts (about)

     1  import { RepSondage, Satisfaction } from "@/logic/types";
     2  
     3  type fields = Omit<RepSondage, "message_enfant" | "message_responsable">;
     4  type AveragedSondage = { [P in keyof fields]: number };
     5  const _fields: AveragedSondage = {
     6    infos_avant_sejour: 0,
     7    infos_pendant_sejour: 0,
     8    hebergement: 0,
     9    activites: 0,
    10    theme: 0,
    11    nourriture: 0,
    12    hygiene: 0,
    13    ambiance: 0,
    14    ressenti: 0
    15  };
    16  const _keys = Object.keys(_fields) as (keyof AveragedSondage)[];
    17  
    18  export function average(sondages: RepSondage[]): AveragedSondage {
    19    const N = sondages.length;
    20    const out: AveragedSondage = JSON.parse(JSON.stringify(_fields));
    21    if (N == 0) return out;
    22    _keys.forEach(key => {
    23      let valid = 0,
    24        sum = 0;
    25      sondages
    26        .map(s => s[key])
    27        .forEach(v => {
    28          if (v != Satisfaction.SVide) {
    29            valid += 1;
    30            sum += v;
    31          }
    32        });
    33      out[key] = valid > 0 ? sum / valid : 0;
    34    });
    35    return out;
    36  }