github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/shared/contraintes_defaut.go (about) 1 package shared 2 3 import ( 4 "database/sql" 5 6 rd "github.com/benoitkugler/goACVE/server/core/rawdata" 7 ) 8 9 // un nouvel équipier est crée avec ces contraintes par défaut 10 var contraintesDefaut = map[rd.Role][]rd.BuiltinContrainte{ 11 rd.RDirecteur: {rd.CBafa, rd.CBafd, rd.CCarteId, rd.CPermis, rd.CSb, rd.CBafdEquiv, rd.CCarteVitale, rd.CVaccin}, 12 rd.RAdjoint: {rd.CCarteId, rd.CPermis, rd.CSb, rd.CCarteVitale, rd.CVaccin}, 13 rd.RAnimation: {rd.CBafa, rd.CCarteId, rd.CPermis, rd.CSb, rd.CBafaEquiv, rd.CCarteVitale, rd.CScolarite, rd.CVaccin}, 14 rd.RAideAnimation: {rd.CCarteId, rd.CCarteVitale, rd.CScolarite, rd.CVaccin}, 15 rd.RChauffeur: {rd.CCarteId, rd.CCarteVitale, rd.CVaccin}, 16 rd.RIntend: {rd.CCarteId, rd.CCarteVitale, rd.CHaccp, rd.CVaccin}, 17 rd.RBabysiter: {rd.CCarteId, rd.CCarteVitale, rd.CScolarite, rd.CVaccin}, 18 rd.RMen: {rd.CCarteId, rd.CCarteVitale, rd.CScolarite, rd.CVaccin}, 19 rd.RFactotum: {rd.CCarteId, rd.CCarteVitale, rd.CVaccin}, 20 rd.RInfirm: {rd.CCarteId, rd.CSecour, rd.CCarteVitale, rd.CVaccin}, 21 rd.RCuis: {rd.CCarteId, rd.CCarteVitale, rd.CHaccp, rd.CScolarite, rd.CVaccin}, 22 rd.RLing: {rd.CCarteId, rd.CCarteVitale, rd.CVaccin}, 23 } 24 25 var contraintesOptionnelles = map[rd.BuiltinContrainte]bool{ 26 rd.CBafa: true, 27 rd.CBafd: true, 28 rd.CBafaEquiv: true, 29 rd.CBafdEquiv: true, 30 rd.CPermis: true, 31 rd.CSb: true, 32 rd.CScolarite: true, 33 rd.CHaccp: true, 34 rd.CCarteVitale: true, 35 } 36 37 func isContrainteOptionnelle(contrainte rd.BuiltinContrainte, roles rd.Roles) bool { 38 // un certificat de secourisme est obligatoire pour l'infirmière 39 if roles.Is(rd.RInfirm) && contrainte == rd.CSecour { 40 return false 41 } 42 return contraintesOptionnelles[contrainte] 43 } 44 45 // AddEquipierDefautContraintes insère les contraintes par défaut, sans commit ni rollback 46 func AddEquipierDefautContraintes(tx *sql.Tx, contraintes rd.Contraintes, equipier rd.Equipier) (rd.EquipierContraintes, error) { 47 // on aggrège les contraintes suivant les rôles 48 uniq := map[rd.BuiltinContrainte]bool{} 49 for _, role := range equipier.Roles { 50 for _, defaultContrainte := range contraintesDefaut[role] { 51 uniq[defaultContrainte] = true 52 } 53 } 54 // on prend en compte le caractère optionnelle 55 var contraintesEq rd.EquipierContraintes 56 for contrainte := range uniq { 57 contraintesEq = append(contraintesEq, rd.EquipierContrainte{ 58 IdEquipier: equipier.Id, 59 IdContrainte: contraintes.FindBuiltin(contrainte).Id, 60 Optionnel: isContrainteOptionnelle(contrainte, equipier.Roles), 61 }) 62 } 63 err := rd.InsertManyEquipierContraintes(tx, contraintesEq...) 64 return contraintesEq, err 65 }