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  }