github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/client/GUI/lists/recherche.go (about) 1 package lists 2 3 import ( 4 "github.com/benoitkugler/goACVE/client/GUI/basic" 5 dm "github.com/benoitkugler/goACVE/server/core/datamodel" 6 rd "github.com/benoitkugler/goACVE/server/core/rawdata" 7 "github.com/therecipe/qt/core" 8 "github.com/therecipe/qt/widgets" 9 ) 10 11 var HeadersRechercheParticipants = []rd.Header{ 12 {Field: dm.PersonneNom, Label: "Nom"}, 13 {Field: dm.PersonnePrenom, Label: "Prénom"}, 14 {Field: dm.ParticipantCamp, Label: "Camp"}, 15 } 16 17 type RechercheId struct { 18 *widgets.QDialog 19 20 // Out contient la valeur de retour, 21 // possiblement nil 22 Out rd.IId 23 } 24 25 func newRechercheId(onSearch func(pattern string) rd.Table, Headers []rd.Header, titre string) *RechercheId { 26 dialog := RechercheId{QDialog: basic.Dialog(titre)} 27 28 table := &Table{ 29 Liste: Liste{ 30 Placeholder: "Aucun résultat.", 31 HighlightOnHover: true, 32 OnClick: func(acces rd.Item, _ int) { 33 dialog.Out = acces.Id 34 dialog.Close() 35 }, 36 Headers: Headers, 37 MinHeight: 300, 38 }, 39 } 40 table.OnSearch = func(pattern string) { 41 table.Model().SetData(onSearch(pattern)) 42 } 43 table.OnSort = func(field rd.Field, reverse bool) { 44 data := table.Model().GetData() 45 dm.SortBy(data, field, reverse) 46 table.Model().SetData(data) 47 } 48 table.Init() 49 table.HorizontalHeader().SetMinimumSectionSize(300) 50 table.View.(*widgets.QTableView).SetVerticalScrollBarPolicy(core.Qt__ScrollBarAlwaysOn) 51 dialog.Layout().AddWidget(table) 52 return &dialog 53 } 54 55 func NewRecherchePersonne(base *dm.BaseLocale, withOrganismes bool) *RechercheId { 56 f := func(pattern string) rd.Table { 57 return base.RechercheRapidePersonnes(withOrganismes, pattern) 58 } 59 return newRechercheId(f, []rd.Header{ 60 {Field: dm.PersonneNom, Label: "Nom"}, 61 {Field: dm.PersonnePrenom, Label: "Prénom"}, 62 {Field: dm.PersonneDateNaissance, Label: "Date de naissance"}, 63 }, "Choix d'une personne") 64 } 65 66 func NewRechercheCamp(base *dm.BaseLocale) *RechercheId { 67 return newRechercheId(base.RechercheRapideCamps, []rd.Header{ 68 {Field: dm.CampNom, Label: "Nom"}, 69 {Field: dm.CampAnnee, Label: "Année"}, 70 {Field: dm.CampLieu, Label: "Lieu"}, 71 }, "Choix d'un camp") 72 } 73 74 func NewRechercheGroupe(base *dm.BaseLocale) *RechercheId { 75 return newRechercheId(base.RechercheRapideGroupes, []rd.Header{ 76 {Field: dm.GroupeLabel, Label: "Nom"}, 77 }, "Choix d'un groupe") 78 } 79 80 func NewRechercheAide(base *dm.BaseLocale) *RechercheId { 81 return newRechercheId(base.RechercheRapideAides, []rd.Header{ 82 {Field: dm.AideNomPrenom, Label: "Participant"}, 83 {Field: dm.AideStructure, Label: "Structure"}, 84 {Field: dm.AideMontant, Label: "Montant"}, 85 }, "Choix d'une aide") 86 } 87 88 func NewRechercheStructureaide(base *dm.BaseLocale) *RechercheId { 89 return newRechercheId(base.RechercheRapideStructureaides, []rd.Header{ 90 {Field: dm.StructureaideNom, Label: "Nom"}, 91 {Field: dm.StructureaideImmatriculation, Label: "Immatriculation"}, 92 }, "Choix d'une structure d'aide") 93 } 94 95 func NewRechercheParticipant(base *dm.BaseLocale) *RechercheId { 96 return newRechercheId(base.RechercheRapideParticipants, HeadersRechercheParticipants, "Choix d'un participant") 97 } 98 99 func NewRechercheFacture(base *dm.BaseLocale) *RechercheId { 100 return newRechercheId(base.RechercheRapideFactures, []rd.Header{ 101 {Field: dm.PersonneNomPrenom, Label: "Responsable"}, 102 {Field: dm.FactureCamps, Label: "Camps concernés"}, 103 }, "Choix d'une facture") 104 }