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  }