github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/directeurs/sondages.go (about) 1 package directeurs 2 3 import ( 4 "sort" 5 6 rd "github.com/benoitkugler/goACVE/server/core/rawdata" 7 ) 8 9 func (dr DriverCampComplet) loadSondages() ([]SondageParts, error) { 10 sondages, err := rd.SelectSondagesByIdCamps(dr.DB, dr.camp.Id) 11 if err != nil { 12 return nil, err 13 } 14 // on ajoute du contexte : responsable et participants 15 rows, err := dr.DB.Query(`SELECT factures.* FROM factures 16 JOIN sondages ON sondages.id_facture = factures.id 17 WHERE sondages.id_camp = $1`, dr.camp.Id) 18 if err != nil { 19 return nil, err 20 } 21 factures, err := rd.ScanFactures(rows) 22 if err != nil { 23 return nil, err 24 } 25 rows, err = dr.DB.Query(`SELECT * FROM participants 26 WHERE participants.id_facture = ANY($1) AND participants.id_camp = $2`, 27 factures.Ids().AsSQL(), dr.camp.Id) 28 if err != nil { 29 return nil, err 30 } 31 participants, err := rd.ScanParticipants(rows) 32 if err != nil { 33 return nil, err 34 } 35 rows, err = dr.DB.Query(`SELECT personnes.* FROM personnes 36 JOIN factures ON factures.id_personne = personnes.id 37 WHERE factures.id = ANY($1) 38 UNION 39 SELECT personnes.* FROM personnes 40 JOIN participants ON participants.id_personne = personnes.id 41 WHERE participants.id = ANY($2)`, factures.Ids().AsSQL(), participants.Ids().AsSQL()) 42 if err != nil { 43 return nil, err 44 } 45 personnes, err := rd.ScanPersonnes(rows) 46 if err != nil { 47 return nil, err 48 } 49 cache, _ := participants.Resoud() 50 var out []SondageParts 51 for _, sondage := range sondages { 52 var sd SondageParts 53 respo := personnes[factures[sondage.IdFacture].IdPersonne] 54 sd.Responsable = respo.NomPrenom() 55 sd.Mail = respo.Mail 56 for _, idPart := range cache[sondage.IdFacture] { 57 part := personnes[participants[idPart].IdPersonne] 58 sd.Participants = append(sd.Participants, part.NomPrenom()) 59 } 60 sd.Sondage = sondage 61 out = append(out, sd) 62 } 63 sort.Slice(out, func(i, j int) bool { 64 return out[i].Modified.Before(out[j].Modified) 65 }) 66 return out, nil 67 }