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>