github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/bv/src/pages/espace_perso/components/fiche_sanitaire/FicheSanitaire.vue (about)

     1  <template>
     2    <div>
     3      <b-card :title="personne.nom_prenom">
     4        <b-card-body class="p-1">
     5          <b-alert :show="personne.is_temporaire" variant="info">
     6            Ce profil n'a pas encore été validé par le centre d'inscription.
     7            <br />
     8            En conséquence, la modification de la fiche sanitaire est
     9            temporairement désactivée.
    10          </b-alert>
    11  
    12          <b-alert
    13            class="my-1"
    14            variant="success"
    15            :show="showForm && !needValidation && !isMajeur"
    16          >
    17            <span v-if="hasVaccins">
    18              Votre fiche sanitaire est à jour. Merci !
    19            </span>
    20            <span v-else>
    21              Votre fiche sanitaire est à jour, mais vous n'avez déposé aucun
    22              vaccins...
    23            </span>
    24          </b-alert>
    25  
    26          <b-alert class="my-1" variant="info" :show="isMajeur && showForm">
    27            Puisque {{ personne.prenom }} est majeur{{ sexeE }}, les
    28            renseignements ci-dessous ne sont plus nécessaires. Ils sont affichés
    29            à titre informatif.
    30          </b-alert>
    31  
    32          <b-alert
    33            class="my-1"
    34            variant="warning"
    35            :show="needValidation && showForm"
    36          >
    37            Merci de bien vouloir vérifier que les données ci-dessous sont à jour
    38            et les valider.
    39            <br />Nous avons besoin de votre consentement, décrit dans l'encart
    40            <b>Validation</b> (en bas de page).
    41          </b-alert>
    42  
    43          <b-alert
    44            class="my-1"
    45            variant="warning"
    46            :show="personne.fiche_sanitaire.locked"
    47          >
    48            Votre adresse mail n'est pas reconnu dans notre logiciel comme celle
    49            du responsable de cette fiche sanitaire. Elle est actuellement liée
    50            {{ hasManyMails ? "aux adresses" : "à l'adresse" }}
    51            <b>{{ textMails }}</b
    52            >.
    53            <br />
    54  
    55            Afin de protéger vos données, vous devez demander à leur propriétaire
    56            de vous transmettre les droits de lecture et d'écriture. Un mail
    57            contenant un lien de transfert va être envoyé
    58            {{ hasManyMails ? "aux adresses" : "à l'adresse" }}
    59            <i>({{ textMails }})</i>.
    60            <btn
    61              variant="outline-success"
    62              label="Demander le transfert de la fiche sanitaire"
    63              @click="transfertFicheSanitaire"
    64              block
    65              class="mt-2"
    66            >
    67              <b-icon-unlock></b-icon-unlock>
    68            </btn>
    69          </b-alert>
    70        </b-card-body>
    71        <template v-slot:footer class="text-muted p-2">
    72          <small>
    73            Dernière modification :
    74            <i>{{ lastModif }}</i> / Propriétaire(s) :
    75            <i>{{ textMails }}</i>
    76          </small>
    77        </template>
    78      </b-card>
    79  
    80      <div v-if="showForm">
    81        <vaccins :idPersonneCrypted="personne.id_crypted" class="mt-2"></vaccins>
    82  
    83        <fiche-sanitaire-form
    84          :value="personne.fiche_sanitaire"
    85          :nomPrenom="personne.nom_prenom"
    86          :completion="completion"
    87          :tag="personne.id_crypted"
    88          @valid="(ev, fs, v) => $emit('valid', ev, fs, v, personne.id_crypted)"
    89        ></fiche-sanitaire-form>
    90      </div>
    91    </div>
    92  </template>
    93  
    94  <script lang="ts">
    95  import Vue from "vue";
    96  import Component from "vue-class-component";
    97  import Btn from "../../../../shared/Btn.vue";
    98  import FicheSanitaireForm from "./forms/FicheSanitaireForm.vue";
    99  import Vaccins from "./Vaccins.vue";
   100  
   101  import { C } from "../../logic/controller";
   102  import { age, formatDateTime } from "../../../../shared/logic/utils";
   103  import { Personne, Sexe } from "@/shared/logic/types";
   104  import { ValidEvent } from "../../../../shared/utils";
   105  
   106  const FicheSanitaireProps = Vue.extend({
   107    props: {
   108      personne: Object as () => Personne
   109    }
   110  });
   111  
   112  @Component({
   113    components: { Btn, FicheSanitaireForm, Vaccins }
   114  })
   115  export default class FicheSanitaire extends FicheSanitaireProps {
   116    get sexeE() {
   117      return this.personne.sexe == Sexe.SFemme ? "e" : "";
   118    }
   119  
   120    get isMajeur() {
   121      return C.isPersonneMajeur(this.personne);
   122    }
   123  
   124    get needValidation() {
   125      return C.needValidationFicheSanitaire(this.personne);
   126    }
   127  
   128    get isFsUpToDate() {
   129      return C.isFsUpToDate(this.personne.id_crypted);
   130    }
   131  
   132    get hasManyMails() {
   133      return (
   134        this.personne.fiche_sanitaire.mails &&
   135        this.personne.fiche_sanitaire.mails.length > 1
   136      );
   137    }
   138  
   139    get textMails() {
   140      const mails = this.personne.fiche_sanitaire.mails || [];
   141      return mails.join(", ") || " - ";
   142    }
   143  
   144    get lastModif() {
   145      if (!this.personne.fiche_sanitaire.last_modif) return "";
   146      return formatDateTime(this.personne.fiche_sanitaire.last_modif);
   147    }
   148  
   149    get hasVaccins() {
   150      return this.personne.vaccins && this.personne.vaccins.length > 0;
   151    }
   152  
   153    get completion() {
   154      return C.hintsFichesSanitaires();
   155    }
   156  
   157    get showForm() {
   158      return (
   159        !this.personne.fiche_sanitaire.locked && !this.personne.is_temporaire
   160      );
   161    }
   162  
   163    async transfertFicheSanitaire(event: ValidEvent) {
   164      event.spinning = true;
   165      await C.data.transfertFicheSanitaire(this.personne.id_crypted);
   166      event.spinning = false;
   167    }
   168  }
   169  </script>
   170  
   171  <style scoped></style>