github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/client/GUI/common/fiches_impl.go (about)

     1  package common
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/benoitkugler/goACVE/client/GUI/basic"
     8  	"github.com/benoitkugler/goACVE/client/GUI/fields"
     9  	dm "github.com/benoitkugler/goACVE/server/core/datamodel"
    10  	rd "github.com/benoitkugler/goACVE/server/core/rawdata"
    11  	"github.com/therecipe/qt/widgets"
    12  )
    13  
    14  type Coordonnees struct {
    15  	tels       fields.Tels
    16  	mail       fields.String
    17  	adresse    fields.MultiLineString
    18  	codePostal fields.String
    19  	ville      fields.String
    20  	pays       fields.String
    21  }
    22  
    23  func NewCoordonnes(editable bool) Coordonnees {
    24  	var out Coordonnees
    25  	out.tels = fields.NewTels(editable)
    26  	out.mail = fields.NewString(editable)
    27  	out.adresse = fields.NewMultiLineString(editable, "Adresse")
    28  	out.codePostal = fields.NewString(editable)
    29  	out.ville = fields.NewString(editable)
    30  	out.pays = fields.NewString(editable)
    31  
    32  	out.adresse.SetMaximumHeight(80)
    33  
    34  	return out
    35  }
    36  
    37  func (f Coordonnees) GetData() rd.Coordonnees {
    38  	return rd.Coordonnees{
    39  		Tels:       f.tels.GetData(),
    40  		Mail:       f.mail.GetData(),
    41  		Adresse:    f.adresse.GetData(),
    42  		CodePostal: f.codePostal.GetData(),
    43  		Ville:      f.ville.GetData(),
    44  		Pays:       f.pays.GetData(),
    45  	}
    46  }
    47  
    48  func (f Coordonnees) SetData(coord rd.Coordonnees) {
    49  	f.tels.SetData(coord.Tels)
    50  	f.mail.SetData(coord.Mail)
    51  	f.adresse.SetData(coord.Adresse)
    52  	f.codePostal.SetData(coord.CodePostal)
    53  	f.ville.SetData(coord.Ville)
    54  	f.pays.SetData(coord.Pays)
    55  }
    56  
    57  func (f Coordonnees) ToLayout() *widgets.QFormLayout {
    58  	l := widgets.NewQFormLayout(nil)
    59  	l.AddRow3("Téléphone", f.tels)
    60  	l.AddRow3("Mail", f.mail)
    61  	l.AddRow3("Adresse", f.adresse)
    62  	l.AddRow3("Code postal", f.codePostal)
    63  	l.AddRow3("Ville", f.ville)
    64  	l.AddRow3("Pays", f.pays)
    65  	return l
    66  }
    67  
    68  func (f Coordonnees) setEnabled(b bool) {
    69  	f.tels.SetEnabled(b)
    70  	f.mail.SetEnabled(b)
    71  	f.adresse.SetEnabled(b)
    72  	f.codePostal.SetEnabled(b)
    73  	f.ville.SetEnabled(b)
    74  	f.pays.SetEnabled(b)
    75  }
    76  
    77  func NewWidgetsBasePersonne(editable bool) WidgetsBasePersonne {
    78  	var f WidgetsBasePersonne
    79  	f.nom = fields.NewString(editable)
    80  	f.nomJeuneFille = fields.NewString(editable)
    81  	f.prenom = fields.NewString(editable)
    82  	f.dateNaissance = fields.NewDate(editable, 1900)
    83  	f.villeNaissance = fields.NewString(editable)
    84  	f.departementNaissance = fields.NewDepartement(editable)
    85  	f.sexe = fields.NewSexe(editable)
    86  
    87  	f.Coordonnees = NewCoordonnes(editable)
    88  
    89  	f.securiteSociale = fields.NewString(editable)
    90  	f.profession = fields.NewString(editable)
    91  	f.etudiant = fields.NewBool(editable)
    92  	f.fonctionnaire = fields.NewBool(editable)
    93  
    94  	return f
    95  }
    96  
    97  // SetCoordonnees n'utilise que les champs `Tels`  `Mail` `Adresse` `CodePostal` `Ville` `Pays`
    98  func (f WidgetsBasePersonne) SetCoordonnees(p rd.Personne) {
    99  	f.Coordonnees.SetData(p.Coordonnees())
   100  }
   101  
   102  func (f WidgetsBasePersonne) ConnectDataChanged(fu func()) {
   103  	f.nom.ConnectTextChanged(func(_ string) { fu() })
   104  	f.nomJeuneFille.ConnectTextChanged(func(_ string) { fu() })
   105  	f.prenom.ConnectTextChanged(func(_ string) { fu() })
   106  	f.dateNaissance.ConnectDataChanged(fu)
   107  	f.villeNaissance.ConnectTextChanged(func(_ string) { fu() })
   108  	f.departementNaissance.ConnectTextChanged(func(_ string) { fu() })
   109  	f.sexe.ConnectCurrentIndexChanged(func(_ int) { fu() })
   110  
   111  	f.Coordonnees.tels.ConnectDataChanged(fu)
   112  	f.Coordonnees.mail.ConnectTextChanged(func(_ string) { fu() })
   113  	f.Coordonnees.adresse.ConnectTextChanged(fu)
   114  	f.Coordonnees.codePostal.ConnectTextChanged(func(_ string) { fu() })
   115  	f.Coordonnees.ville.ConnectTextChanged(func(_ string) { fu() })
   116  	f.Coordonnees.pays.ConnectTextChanged(func(_ string) { fu() })
   117  
   118  	f.securiteSociale.ConnectTextChanged(func(_ string) { fu() })
   119  	f.profession.ConnectTextChanged(func(_ string) { fu() })
   120  	f.etudiant.ConnectClicked(func(_ bool) { fu() })
   121  	f.fonctionnaire.ConnectClicked(func(_ bool) { fu() })
   122  }
   123  
   124  func (f *WidgetsBasePersonne) SetData(p rd.BasePersonne) {
   125  	f.nom.SetData(p.Nom)
   126  	f.nomJeuneFille.SetData(p.NomJeuneFille)
   127  	f.prenom.SetData(p.Prenom)
   128  	f.dateNaissance.SetData(p.DateNaissance)
   129  	f.villeNaissance.SetData(p.VilleNaissance)
   130  	f.departementNaissance.SetData(p.DepartementNaissance)
   131  	f.sexe.SetData(p.Sexe)
   132  
   133  	f.Coordonnees.SetData(p.Coordonnees())
   134  
   135  	f.securiteSociale.SetData(rd.FormatSecuriteSocial(p.SecuriteSociale))
   136  	f.profession.SetData(p.Profession)
   137  	f.etudiant.SetData(p.Etudiant)
   138  	f.fonctionnaire.SetData(p.Fonctionnaire)
   139  }
   140  
   141  func (f WidgetsBasePersonne) GetData(p *rd.BasePersonne) {
   142  	p.Nom = f.nom.GetData()
   143  	p.NomJeuneFille = f.nomJeuneFille.GetData()
   144  	p.Prenom = f.prenom.GetData()
   145  	p.DateNaissance = f.dateNaissance.GetData()
   146  	p.VilleNaissance = f.villeNaissance.GetData()
   147  	p.DepartementNaissance = f.departementNaissance.GetData()
   148  	p.Sexe = f.sexe.GetData()
   149  
   150  	coord := f.Coordonnees.GetData()
   151  	p.Tels = coord.Tels
   152  	p.Mail = coord.Mail
   153  	p.Adresse = coord.Adresse
   154  	p.CodePostal = coord.CodePostal
   155  	p.Ville = coord.Ville
   156  	p.Pays = coord.Pays
   157  
   158  	p.SecuriteSociale = f.securiteSociale.GetData()
   159  	p.Profession = f.profession.GetData()
   160  	p.Etudiant = f.etudiant.GetData()
   161  	p.Fonctionnaire = f.fonctionnaire.GetData()
   162  }
   163  
   164  // RemoveFocus enlève le focus. Utile pour la fonction
   165  // coller.
   166  func (f WidgetsBasePersonne) RemoveFocus() {
   167  	f.nom.ClearFocus()
   168  }
   169  
   170  func NewFichePersonne(editable bool) FichePersonne {
   171  	f := FichePersonne{QFrame: basic.Frame(), WidgetsBasePersonne: NewWidgetsBasePersonne(editable)}
   172  
   173  	f.quotientFamilial = fields.NewInt(editable)
   174  	f.rangMembreAsso = fields.NewRangMembreAsso(editable, false)
   175  	f.cotisation = fields.NewCotisation(editable)
   176  	f.echoRocher = fields.NewBool(editable)
   177  	f.eonews = fields.NewBool(editable)
   178  	f.pubEte = fields.NewBool(editable)
   179  	f.pubHiver = fields.NewBool(editable)
   180  	f.versionPapier = fields.NewBool(editable)
   181  	f.SetMinimumWidth(1200)
   182  	return f
   183  }
   184  
   185  func (f *FichePersonne) SetData(p rd.Personne) {
   186  	f.initialPersonne = p
   187  	f.WidgetsBasePersonne.SetData(p.BasePersonne)
   188  
   189  	f.quotientFamilial.SetData(p.QuotientFamilial)
   190  	f.rangMembreAsso.SetData(p.RangMembreAsso)
   191  	f.cotisation.SetData(p.Cotisation)
   192  	f.echoRocher.SetData(p.EchoRocher)
   193  	f.eonews.SetData(p.Eonews)
   194  	f.pubEte.SetData(p.PubEte)
   195  	f.pubHiver.SetData(p.PubHiver)
   196  	f.versionPapier.SetData(p.VersionPapier)
   197  }
   198  
   199  func (f *FichePersonne) Reset() {
   200  	f.SetData(f.initialPersonne)
   201  }
   202  
   203  func (f FichePersonne) GetData() rd.Personne {
   204  	p := f.initialPersonne
   205  	f.WidgetsBasePersonne.GetData(&p.BasePersonne)
   206  
   207  	p.QuotientFamilial = f.quotientFamilial.GetData()
   208  	p.RangMembreAsso = f.rangMembreAsso.GetData()
   209  	p.Cotisation = f.cotisation.GetData()
   210  	p.EchoRocher = f.echoRocher.GetData()
   211  	p.Eonews = f.eonews.GetData()
   212  	p.PubEte = f.pubEte.GetData()
   213  	p.PubHiver = f.pubHiver.GetData()
   214  	p.VersionPapier = f.versionPapier.GetData()
   215  	return p
   216  }
   217  
   218  func (f FichePersonne) SetLayout() {
   219  	lG, lD := widgets.NewQFormLayout(nil), widgets.NewQFormLayout(nil)
   220  	lM := f.Coordonnees.ToLayout()
   221  	lG.SetVerticalSpacing(15)
   222  	lM.SetVerticalSpacing(15)
   223  	lD.SetVerticalSpacing(15)
   224  
   225  	lG.AddRow3("Nom", f.nom)
   226  	lG.AddRow3("Nom de jeune fille", f.nomJeuneFille)
   227  	lG.AddRow3("Prénom", f.prenom)
   228  	lG.AddRow3("Date de naissance", f.dateNaissance)
   229  	lG.AddRow3("Ville de naissance", f.villeNaissance)
   230  	lG.AddRow3("Département de naissance", f.departementNaissance)
   231  	lG.AddRow3("Sexe", f.sexe)
   232  
   233  	lM.AddRow3("Sécurité sociale", f.securiteSociale)
   234  	lM.AddRow3("Profession", f.profession)
   235  	lM.AddRow3("Etudiant", f.etudiant)
   236  	lM.AddRow3("Fonctionnaire", f.fonctionnaire)
   237  
   238  	lD.AddRow3("Quotient familial", f.quotientFamilial)
   239  	lD.AddRow3("Membre", f.rangMembreAsso)
   240  	lD.AddRow5(f.cotisation)
   241  	lD.AddRow3("Echo du Rocher", f.echoRocher)
   242  	lD.AddRow3("éoNews", f.eonews)
   243  	lD.AddRow3("Publicité Eté", f.pubEte)
   244  	lD.AddRow3("Publicité Hiver", f.pubHiver)
   245  	lD.AddRow3("Version papier", f.versionPapier)
   246  
   247  	lay := widgets.NewQHBoxLayout2(f)
   248  	lay.AddLayout(lG, 4)
   249  	lay.AddLayout(lM, 4)
   250  	lay.AddLayout(lD, 1)
   251  }
   252  
   253  func NewFicheOrganisme(base *dm.BaseLocale, editable bool) FicheOrganisme {
   254  	out := FicheOrganisme{QFrame: basic.Frame()}
   255  
   256  	out.nom = fields.NewString(editable)
   257  	out.contactPropre = fields.NewBool(editable)
   258  	out.contact = NewCoordonnes(editable)
   259  	out.idContact = fields.NewBoutonIdPersonne(editable, base, false)
   260  	out.idContactDon = fields.NewBoutonIdPersonne(editable, base, false)
   261  	out.exemplaires = fields.NewExemplaires(editable)
   262  
   263  	out.contactPropre.ConnectClicked(func(bool) { out.update() })
   264  
   265  	return out
   266  }
   267  
   268  func (f *FicheOrganisme) update() {
   269  	checked := bool(f.contactPropre.GetData())
   270  	f.idContact.SetEnabled(!checked)
   271  	f.contact.setEnabled(checked)
   272  	if checked { // on enlève l'id courant
   273  		f.idContact.SetData(nil)
   274  	}
   275  }
   276  
   277  func (f FicheOrganisme) GetData() rd.Organisme {
   278  	out := f.initialOrganisme
   279  	out.Nom = f.nom.GetData()
   280  	out.ContactPropre = f.contactPropre.GetData()
   281  	out.Contact = f.contact.GetData()
   282  	out.IdContact = rd.FromIId(f.idContact.GetData())
   283  	out.IdContactDon = rd.FromIId(f.idContactDon.GetData())
   284  	out.Exemplaires = f.exemplaires.GetData()
   285  	return out
   286  }
   287  
   288  func (f *FicheOrganisme) Reset() { f.SetData(f.initialOrganisme) }
   289  
   290  func (f *FicheOrganisme) SetData(org rd.Organisme) {
   291  	f.initialOrganisme = org
   292  	f.nom.SetData(org.Nom)
   293  	f.contactPropre.SetData(org.ContactPropre)
   294  	f.contact.SetData(org.Contact)
   295  	f.idContact.SetData(org.IdContact.AsIId())
   296  	f.idContactDon.SetData(org.IdContactDon.AsIId())
   297  	f.exemplaires.SetData(org.Exemplaires)
   298  	f.update()
   299  }
   300  
   301  func (f *FicheOrganisme) SetLayout() {
   302  	removeCDon := widgets.NewQToolButton(nil)
   303  	removeCDon.SetIcon(basic.Icons.Delete)
   304  	removeCDon.ConnectClicked(func(_ bool) {
   305  		f.idContactDon.SetData(nil)
   306  	})
   307  
   308  	lContactDon := widgets.NewQHBoxLayout()
   309  	lContactDon.AddWidget(f.idContactDon, 1, 0)
   310  	lContactDon.AddWidget(removeCDon, 0, 0)
   311  
   312  	h := widgets.NewQHBoxLayout2(f)
   313  	lG := widgets.NewQFormLayout(nil)
   314  	lG.AddRow3("Nom", f.nom)
   315  	lG.AddRow3("Coordonnées propre", f.contactPropre)
   316  	lG.AddRow3("Contact", f.idContact)
   317  	lG.AddRow4("Contact pour les dons", lContactDon)
   318  	lG.AddRow3("Exemplaires", f.exemplaires)
   319  
   320  	lD := f.contact.ToLayout()
   321  	h.AddLayout(lG, 1)
   322  	h.AddLayout(lD, 1)
   323  }
   324  
   325  func NewFicheAide(base *dm.BaseLocale, editable bool) FicheAide {
   326  	f := FicheAide{QFrame: basic.Frame()}
   327  
   328  	f.valeur = fields.NewEuros(editable)
   329  	f.parJour = fields.NewBool(editable)
   330  	f.nbJoursMax = fields.NewInt(editable)
   331  	f.valide = fields.NewBool(editable)
   332  	f.idParticipant = fields.NewBoutonIdParticipant(editable, base)
   333  	f.idStructureaide = fields.NewBoutonIdStructureaide(editable, base)
   334  
   335  	return f
   336  }
   337  
   338  func (f *FicheAide) SetData(p rd.Aide, idParticipant rd.OptionnalId, idStructureaide rd.OptionnalId) {
   339  	f.initialAide = p
   340  	f.initialIdParticipant = idParticipant
   341  	f.initialIdStructureaide = idStructureaide
   342  
   343  	f.valeur.SetData(p.Valeur)
   344  	f.parJour.SetData(p.ParJour)
   345  	f.nbJoursMax.SetData(p.NbJoursMax)
   346  	f.valide.SetData(p.Valide)
   347  	f.idParticipant.SetData(idParticipant.AsIId())
   348  	f.idStructureaide.SetData(idStructureaide.AsIId())
   349  
   350  }
   351  
   352  func (f *FicheAide) Reset() {
   353  	f.SetData(f.initialAide, f.initialIdParticipant, f.initialIdStructureaide)
   354  }
   355  
   356  // GetData utilise les ids optionnels, qui DOIVENT être valides.
   357  func (f FicheAide) GetData() rd.Aide {
   358  	p := f.initialAide
   359  	p.Valeur = f.valeur.GetData()
   360  	p.ParJour = f.parJour.GetData()
   361  	p.NbJoursMax = f.nbJoursMax.GetData()
   362  	p.Valide = f.valide.GetData()
   363  
   364  	p.IdParticipant = f.idParticipant.GetData().Int64()
   365  	p.IdStructureaide = f.idStructureaide.GetData().Int64()
   366  	return p
   367  }
   368  
   369  func (f FicheAide) SetLayout() {
   370  	lG := widgets.NewQFormLayout(nil)
   371  	lG.SetVerticalSpacing(15)
   372  
   373  	lG.AddRow3("Structure d'aide", f.idStructureaide)
   374  	lG.AddRow3("Participant", f.idParticipant)
   375  	lG.AddRow3("Valeur", f.valeur)
   376  	lG.AddRow3("Aide journalière", f.parJour)
   377  	lG.AddRow3("Nombre de jours maximum", f.nbJoursMax)
   378  	lG.AddRow3("Aide valide", f.valide)
   379  
   380  	lay := widgets.NewQHBoxLayout2(f)
   381  	lay.AddLayout(lG, 4)
   382  }
   383  
   384  func NewFicheStructureaide(editable bool) FicheStructureaide {
   385  	f := FicheStructureaide{QFrame: basic.Frame()}
   386  
   387  	f.nom = fields.NewString(editable)
   388  	f.immatriculation = fields.NewString(editable)
   389  	f.adresse = fields.NewString(editable)
   390  	f.codePostal = fields.NewString(editable)
   391  	f.ville = fields.NewString(editable)
   392  	f.telephone = fields.NewString(editable)
   393  	f.info = fields.NewMultiLineString(editable, "Informations diverses...")
   394  
   395  	return f
   396  }
   397  
   398  func (f *FicheStructureaide) SetData(p rd.Structureaide) {
   399  	f.initialStructureaide = p
   400  	f.nom.SetData(p.Nom)
   401  	f.immatriculation.SetData(p.Immatriculation)
   402  	f.adresse.SetData(p.Adresse)
   403  	f.codePostal.SetData(p.CodePostal)
   404  	f.ville.SetData(p.Ville)
   405  	f.telephone.SetData(p.Telephone)
   406  	f.info.SetData(p.Info)
   407  
   408  }
   409  
   410  func (f *FicheStructureaide) Reset() {
   411  	f.SetData(f.initialStructureaide)
   412  }
   413  
   414  func (f FicheStructureaide) GetData() rd.Structureaide {
   415  	p := f.initialStructureaide
   416  	p.Nom = f.nom.GetData()
   417  	p.Immatriculation = f.immatriculation.GetData()
   418  	p.Adresse = f.adresse.GetData()
   419  	p.CodePostal = f.codePostal.GetData()
   420  	p.Ville = f.ville.GetData()
   421  	p.Telephone = f.telephone.GetData()
   422  	p.Info = f.info.GetData()
   423  
   424  	return p
   425  }
   426  
   427  func (f FicheStructureaide) SetLayout() {
   428  	lG := widgets.NewQFormLayout(nil)
   429  	lG.SetVerticalSpacing(15)
   430  
   431  	lG.AddRow3("Nom", f.nom)
   432  	lG.AddRow3("Immatriculation", f.immatriculation)
   433  	lG.AddRow3("Adresse", f.adresse)
   434  	lG.AddRow3("Code postal", f.codePostal)
   435  	lG.AddRow3("Ville", f.ville)
   436  	lG.AddRow3("Téléphone", f.telephone)
   437  	lG.AddRow3("Informations", f.info)
   438  
   439  	lay := widgets.NewQHBoxLayout2(f)
   440  	lay.AddLayout(lG, 4)
   441  }
   442  
   443  const (
   444  	placeholderRaisonAttente = "Raison supplémentaire pour être en liste d'attente..."
   445  	placeholderRaisonInscrit = "Raison supplémentaire pour être en liste principale..."
   446  )
   447  
   448  func NewFicheParticipant(base *dm.BaseLocale, editable bool, idCamp int64) *FicheParticipant {
   449  	f := FicheParticipant{QFrame: basic.Frame(), base: base}
   450  
   451  	f.idPersonne = fields.NewBoutonIdPersonne(editable, base, false)
   452  	f.idCamp = fields.NewBoutonIdCamp(false, base)
   453  	f.idCamp.SetData(rd.Id(idCamp))
   454  
   455  	f.statutAttente = fields.NewStatutAttente(editable)
   456  	f.raisonAttente = fields.NewMultiLineString(editable, "")
   457  	f.optionsParticipant = fields.NewOptionsParticipant(editable)
   458  
   459  	camp := f.base.NewCamp(idCamp).RawData()
   460  	categorie, statuts := camp.OptionPrix.Active, camp.OptionPrix.Statut
   461  	defaultPlage := rd.Plage{From: camp.DateDebut, To: camp.DateFin}
   462  	f.optionsPrix = fields.NewOptionsFinanceParticipant(editable, categorie, statuts, defaultPlage)
   463  
   464  	// le choix de la personne ou d'une option
   465  	// influe sur la place en liste d'attente
   466  	f.idPersonne.DataChanged = f.setHintAttente
   467  	f.optionsPrix.DataChanged = f.setHintAttente
   468  
   469  	// on ajuste le champ raison attente
   470  	f.setPlaceholderRaison()
   471  	f.statutAttente.ConnectCurrentIndexChanged(func(_ int) {
   472  		f.setPlaceholderRaison()
   473  	})
   474  
   475  	return &f
   476  }
   477  
   478  // calcule le statut préféré et le pré-selectionne
   479  func (f *FicheParticipant) setHintAttente() {
   480  	idPersonne := f.idPersonne.GetData()
   481  	if idPersonne == nil {
   482  		return
   483  	}
   484  
   485  	// un participant en cours de création compte comme n'étant
   486  	// pas (encore) dans la liste des inscrits
   487  	_, isEditMode := f.base.Participants[f.initialParticipant.Id]
   488  	isCurrentInscrit := isEditMode && f.initialParticipant.ListeAttente.Statut == rd.Inscrit
   489  
   490  	hint := f.base.NewCamp(f.idCamp.GetData().Int64()).HintsAttente(idPersonne.Int64(), isCurrentInscrit).Hint()
   491  	oldHint := f.statutAttente.GetData()
   492  	f.statutAttente.SetData(hint)
   493  	if oldHint != hint { // on alerte l'utilisateur
   494  		currentStyle := f.statutAttente.StyleSheet()
   495  		f.statutAttente.SetStyleSheet(currentStyle + "background-color: yellow;")
   496  		basic.DelayExt(func() {
   497  			f.statutAttente.SetStyleSheet(currentStyle)
   498  		}, 3000)
   499  	}
   500  }
   501  
   502  func (f *FicheParticipant) setPlaceholderRaison() {
   503  	placeholder := placeholderRaisonAttente
   504  	if f.statutAttente.GetData() == rd.Inscrit {
   505  		placeholder = placeholderRaisonInscrit
   506  	}
   507  	f.raisonAttente.SetPlaceholderText(placeholder)
   508  }
   509  
   510  func (f *FicheParticipant) SetData(p rd.Participant, idPersonne rd.OptionnalId) {
   511  	f.initialParticipant = p
   512  	f.initialIdPersonne = idPersonne
   513  
   514  	f.statutAttente.SetData(p.ListeAttente.Statut)
   515  	f.raisonAttente.SetData(rd.String(p.ListeAttente.Raison))
   516  	f.idPersonne.SetData(idPersonne.AsIId())
   517  
   518  	f.optionsParticipant.SetData(p.Options)
   519  	f.optionsPrix.SetData(p.Remises, p.OptionPrix)
   520  
   521  }
   522  
   523  func (f FicheParticipant) GetData() rd.Participant {
   524  	p := f.initialParticipant
   525  	p.IdPersonne = f.idPersonne.GetData().Int64()
   526  	p.IdCamp = f.idCamp.GetData().Int64()
   527  
   528  	p.ListeAttente.Statut = f.statutAttente.GetData()
   529  	p.ListeAttente.Raison = f.raisonAttente.GetData().String()
   530  	p.Options = f.optionsParticipant.GetData()
   531  	p.Remises, p.OptionPrix = f.optionsPrix.GetData()
   532  
   533  	return p
   534  }
   535  
   536  func (f FicheParticipant) SetLayout() {
   537  	layout := widgets.NewQHBoxLayout2(f)
   538  	lG := widgets.NewQFormLayout(nil)
   539  	lD := widgets.NewQFormLayout(nil)
   540  	lG.SetVerticalSpacing(15)
   541  
   542  	lG.AddRow3("Personne", f.idPersonne)
   543  	lG.AddRow3("Camp", f.idCamp)
   544  
   545  	lG.AddRow3("Place", f.statutAttente)
   546  	lG.AddRow3("Explication", f.raisonAttente)
   547  
   548  	lD.AddRow5(f.optionsParticipant)
   549  	lD.AddRow5(f.optionsPrix)
   550  
   551  	layout.AddLayout(lG, 1)
   552  	layout.AddLayout(lD, 1)
   553  }
   554  
   555  func (f *FicheParticipant) Reset() {
   556  	f.SetData(f.initialParticipant, f.initialIdPersonne)
   557  }
   558  
   559  func newFicheParticipantsimple(base *dm.BaseLocale, editable bool) ficheParticipantsimple {
   560  	f := ficheParticipantsimple{QFrame: basic.Frame()}
   561  
   562  	f.idPersonne = fields.NewBoutonIdPersonne(editable, base, false)
   563  	f.idCamp = fields.NewBoutonIdCamp(editable, base)
   564  	return f
   565  }
   566  
   567  func (f ficheParticipantsimple) ActiveCamp(b bool) {
   568  	f.idCamp.SetEnabled(b)
   569  }
   570  
   571  func (f *ficheParticipantsimple) SetData(idPersonne, idCamp rd.OptionnalId) {
   572  	f.initialIdCamp = idCamp
   573  	f.initialIdPersonne = idPersonne
   574  
   575  	f.idPersonne.SetData(idPersonne.AsIId())
   576  	f.idCamp.SetData(idCamp.AsIId())
   577  }
   578  
   579  func (f ficheParticipantsimple) setLayout() *widgets.QFormLayout {
   580  	lG := widgets.NewQFormLayout(f)
   581  	lG.SetVerticalSpacing(15)
   582  
   583  	lG.AddRow3("Personne", f.idPersonne)
   584  	lG.AddRow3("Camp", f.idCamp)
   585  
   586  	return lG
   587  }
   588  
   589  func NewFicheEquipier(base *dm.BaseLocale, editable bool) FicheEquipier {
   590  	f := FicheEquipier{ficheParticipantsimple: newFicheParticipantsimple(base, editable)}
   591  
   592  	f.roles = fields.NewRoles(editable)
   593  	f.diplome = fields.NewDiplome(editable)
   594  	f.approfondissement = fields.NewApprofondissement(editable)
   595  
   596  	return f
   597  }
   598  
   599  func (f *FicheEquipier) SetData(p rd.Equipier, idPersonne, idCamp rd.OptionnalId) {
   600  	f.ficheParticipantsimple.SetData(idPersonne, idCamp)
   601  	f.initialEquipier = p
   602  	f.roles.SetData(p.Roles)
   603  	f.diplome.SetData(p.Diplome)
   604  	f.approfondissement.SetData(p.Appro)
   605  }
   606  
   607  func (f *FicheEquipier) Reset() {
   608  	f.SetData(f.initialEquipier, f.initialIdPersonne, f.initialIdCamp)
   609  }
   610  
   611  func (f FicheEquipier) GetData() rd.Equipier {
   612  	p := f.initialEquipier
   613  	p.IdPersonne = f.idPersonne.GetData().Int64()
   614  	p.IdCamp = f.idCamp.GetData().Int64()
   615  
   616  	p.Roles = f.roles.GetData()
   617  	p.Diplome = f.diplome.GetData()
   618  	p.Appro = f.approfondissement.GetData()
   619  
   620  	return p
   621  }
   622  
   623  func (f FicheEquipier) SetLayout() {
   624  	lG := f.ficheParticipantsimple.setLayout()
   625  	lG.AddRow3("Rôle dans le séjour", f.roles)
   626  	lG.AddRow3("Diplôme", f.diplome)
   627  	lG.AddRow3("Approfondissement", f.approfondissement)
   628  }
   629  
   630  func NewFicheParticipantsimple(base *dm.BaseLocale, editable bool) FicheParticipantsimple {
   631  	f := FicheParticipantsimple{ficheParticipantsimple: newFicheParticipantsimple(base, editable)}
   632  
   633  	f.info = fields.NewMultiLineString(editable, "Info...")
   634  	return f
   635  }
   636  
   637  func (f *FicheParticipantsimple) SetData(p rd.Participantsimple, idPersonne, idCamp rd.OptionnalId) {
   638  	f.ficheParticipantsimple.SetData(idPersonne, idCamp)
   639  	f.initialParticipantsimple = p
   640  	f.info.SetData(p.Info)
   641  }
   642  
   643  func (f *FicheParticipantsimple) Reset() {
   644  	f.SetData(f.initialParticipantsimple, f.initialIdPersonne, f.initialIdCamp)
   645  }
   646  
   647  func (f FicheParticipantsimple) GetData() rd.Participantsimple {
   648  	p := f.initialParticipantsimple
   649  	p.IdPersonne = f.idPersonne.GetData().Int64()
   650  	p.IdCamp = f.idCamp.GetData().Int64()
   651  
   652  	p.Info = f.info.GetData()
   653  
   654  	return p
   655  }
   656  
   657  func (f FicheParticipantsimple) SetLayout() {
   658  	lG := f.ficheParticipantsimple.setLayout()
   659  	lG.AddRow3("Informations", f.info)
   660  }
   661  
   662  func NewFicheCamp(editable, minimalEdit, enableInscriptionSimple bool) FicheCamp {
   663  	f := FicheCamp{QFrame: basic.Frame(), minimalEdit: minimalEdit}
   664  
   665  	f.lieu = fields.NewString(editable)
   666  	f.nom = fields.NewString(editable)
   667  	f.prix = fields.NewEuros(editable)
   668  	f.nbPlaces = fields.NewInt(editable)
   669  	f.password = fields.NewString(editable)
   670  	f.ouvert = fields.NewBool(editable)
   671  	f.nbPlacesReservees = fields.NewInt(editable)
   672  	f.numeroJs = fields.NewString(editable)
   673  	f.needEquilibreGf = fields.NewBool(editable)
   674  	f.ageMin = fields.NewInt(editable)
   675  	f.ageMax = fields.NewInt(editable)
   676  	f.options = fields.NewOptionsCamp(editable)
   677  	f.dateDebut = fields.NewDate(editable, 2000)
   678  	f.dateFin = fields.NewDate(editable, 2000)
   679  	f.schemaPaiement = fields.NewSchemaPaiement(editable)
   680  	f.lienCompta = fields.NewMultiLineString(editable, "Lien vers un fichier partagé pour la comptabilité du séjour...")
   681  	f.optionPrix = fields.NewOptionsPrixCamp(editable)
   682  	f.optionPrix.GetPrixBaseNbJoursMax = f.prixBaseNbJoursMax
   683  	f.envois = basic.Label("")
   684  	f.inscriptionSimple = fields.NewBool(editable)
   685  	f.infos = fields.NewMultiLineString(editable, "Infos supplémentaires...")
   686  
   687  	// permet de désactiver les champs inutiles en mode simple
   688  	f.inscriptionSimple.ConnectClicked(f.setModeInscriptionSimple)
   689  
   690  	f.inscriptionSimple.SetEnabled(enableInscriptionSimple)
   691  
   692  	return f
   693  }
   694  
   695  func (f *FicheCamp) setModeInscriptionSimple(b bool) {
   696  	f.options.SetEnabled(!b)
   697  	f.schemaPaiement.SetEnabled(!b)
   698  	f.optionPrix.SetEnabled(!b)
   699  }
   700  
   701  func (f *FicheCamp) prixBaseNbJoursMax() (rd.Euros, int) {
   702  	return f.prix.GetData(), int(rd.Plage{From: f.dateDebut.GetData(), To: f.dateFin.GetData()}.NbJours())
   703  }
   704  
   705  func (f *FicheCamp) SetData(p rd.Camp) {
   706  	f.initialCamp = p
   707  
   708  	f.lieu.SetData(p.Lieu)
   709  	f.nom.SetData(p.Nom)
   710  	f.prix.SetData(p.Prix)
   711  	f.nbPlaces.SetData(p.NbPlaces)
   712  	f.password.SetData(p.Password)
   713  	f.ouvert.SetData(p.Ouvert)
   714  	f.inscriptionSimple.SetData(p.InscriptionSimple)
   715  	f.nbPlacesReservees.SetData(p.NbPlacesReservees)
   716  	f.numeroJs.SetData(p.NumeroJS)
   717  	f.needEquilibreGf.SetData(p.NeedEquilibreGf)
   718  	f.ageMin.SetData(p.AgeMin)
   719  	f.ageMax.SetData(p.AgeMax)
   720  	f.options.SetData(p.Options)
   721  	f.dateDebut.SetData(p.DateDebut)
   722  	f.dateFin.SetData(p.DateFin)
   723  	f.schemaPaiement.SetData(p.SchemaPaiement)
   724  	f.lienCompta.SetData(p.LienCompta)
   725  	f.infos.SetData(p.Infos)
   726  	pr, n := f.prixBaseNbJoursMax()
   727  	f.optionPrix.SetData(p.OptionPrix, pr, n)
   728  
   729  	f.envois.SetText(p.Envois.Description())
   730  	f.setModeInscriptionSimple(bool(p.InscriptionSimple))
   731  }
   732  
   733  func (f *FicheCamp) Reset() {
   734  	f.SetData(f.initialCamp)
   735  }
   736  
   737  func (f FicheCamp) GetData() rd.Camp {
   738  	p := f.initialCamp
   739  
   740  	p.Lieu = f.lieu.GetData()
   741  	p.Nom = f.nom.GetData()
   742  	p.Prix = f.prix.GetData()
   743  	p.NbPlaces = f.nbPlaces.GetData()
   744  	p.Password = f.password.GetData()
   745  	p.Ouvert = f.ouvert.GetData()
   746  	p.InscriptionSimple = f.inscriptionSimple.GetData()
   747  	p.NbPlacesReservees = f.nbPlacesReservees.GetData()
   748  	p.NumeroJS = f.numeroJs.GetData()
   749  	p.NeedEquilibreGf = f.needEquilibreGf.GetData()
   750  	p.AgeMin = f.ageMin.GetData()
   751  	p.AgeMax = f.ageMax.GetData()
   752  	p.Options = f.options.GetData()
   753  	p.DateDebut = f.dateDebut.GetData()
   754  	p.DateFin = f.dateFin.GetData()
   755  	p.SchemaPaiement = f.schemaPaiement.GetData()
   756  	p.LienCompta = f.lienCompta.GetData()
   757  	p.OptionPrix = f.optionPrix.GetData()
   758  	p.Infos = f.infos.GetData()
   759  	return p
   760  }
   761  
   762  func (f FicheCamp) SetLayout() {
   763  	if f.minimalEdit {
   764  		f.setMinimalEdit()
   765  	}
   766  	lG, lD := widgets.NewQFormLayout(nil), widgets.NewQFormLayout(nil)
   767  	lG.SetVerticalSpacing(15)
   768  	lD.SetVerticalSpacing(15)
   769  
   770  	f.lienCompta.SetMinimumWidth(400)
   771  	lG.AddRow3("Lieu", f.lieu)
   772  	lG.AddRow3("Nom", f.nom)
   773  	lG.AddRow3("N° Jeunesse et Sport", f.numeroJs)
   774  	lG.AddRow3("Date de début", f.dateDebut)
   775  	lG.AddRow3("Date de fin", f.dateFin)
   776  	lG.AddRow3("Ouvert aux inscriptions", f.ouvert)
   777  	lG.AddRow3("Inscription simplifiée", f.inscriptionSimple)
   778  	lG.AddRow3("Prix", f.prix)
   779  	lG.AddRow5(f.optionPrix)
   780  	if !f.minimalEdit {
   781  		lG.AddRow3("Password", f.password)
   782  		lG.AddRow3("Lien Comptabilité", f.lienCompta)
   783  	}
   784  	lG.AddRow3("Informations", f.infos)
   785  
   786  	lD.AddRow5(f.options)
   787  	lD.AddRow3("Nombre de places", f.nbPlaces)
   788  	lD.AddRow3("Nombre de places réservées", f.nbPlacesReservees)
   789  	lD.AddRow3("Equilibre Garçons/Filles", f.needEquilibreGf)
   790  	lD.AddRow3("Age minimum", f.ageMin)
   791  	lD.AddRow3("Age maximum", f.ageMax)
   792  	lD.AddRow3("Schema de paiement", f.schemaPaiement)
   793  	lD.AddRow3("Envois des documents", f.envois)
   794  
   795  	lay := widgets.NewQHBoxLayout2(f)
   796  	lay.AddLayout(lG, 2)
   797  	lay.AddLayout(lD, 1)
   798  }
   799  
   800  func NewFicheFacture(base *dm.BaseLocale, editable bool) FicheFacture {
   801  	f := FicheFacture{QFrame: basic.Frame()}
   802  
   803  	f.destinataires = fields.NewDestinataires(editable)
   804  	f.copiesMails = fields.NewMails(editable)
   805  
   806  	f.idPersonne = fields.NewBoutonIdPersonne(editable, base, false)
   807  
   808  	return f
   809  }
   810  
   811  func (f *FicheFacture) SetData(p rd.Facture, idResponsable rd.OptionnalId) {
   812  	f.initialFacture = p
   813  	f.initialIdResponsable = idResponsable
   814  
   815  	f.idPersonne.SetData(idResponsable.AsIId())
   816  	f.destinataires.SetData(p.DestinatairesOptionnels)
   817  	f.copiesMails.SetData(p.CopiesMails)
   818  }
   819  
   820  func (f *FicheFacture) Reset() {
   821  	f.SetData(f.initialFacture, f.initialIdResponsable)
   822  }
   823  
   824  func (f FicheFacture) GetData() rd.Facture {
   825  	p := f.initialFacture
   826  
   827  	p.DestinatairesOptionnels = f.destinataires.GetData()
   828  	p.IdPersonne = f.idPersonne.GetData().Int64()
   829  	p.CopiesMails = f.copiesMails.GetData()
   830  	return p
   831  }
   832  
   833  func (f FicheFacture) SetLayout() {
   834  	lG := widgets.NewQFormLayout(nil)
   835  	lG.SetVerticalSpacing(15)
   836  
   837  	lG.AddRow3("Responsable", f.idPersonne)
   838  	lG.AddRow3("Destinataires", f.destinataires)
   839  	lG.AddRow3("Mails en copie", f.copiesMails)
   840  
   841  	lay := widgets.NewQHBoxLayout2(f)
   842  	lay.AddLayout(lG, 4)
   843  	f.SetMinimumWidth(600)
   844  }
   845  
   846  func NewFichePaiement(base *dm.BaseLocale, editable bool) FichePaiement {
   847  	f := FichePaiement{QFrame: basic.Frame(), base: base}
   848  
   849  	payeurs, banques := base.GetPayeursBanques()
   850  	f.labelPayeur = fields.NewString2(editable, 0, payeurs)
   851  	f.modePaiement = fields.NewModePaiment(editable)
   852  	f.numero = fields.NewString(editable)
   853  	f.nomBanque = fields.NewString2(editable, 0, banques)
   854  	f.valeur = fields.NewEuros(editable)
   855  	f.dateReglement = basic.Label("")
   856  	f.details = fields.NewString(editable)
   857  	f.isAcompte = fields.NewBool(editable)
   858  	f.isRemboursement = fields.NewBool(editable)
   859  	f.isInvalide = fields.NewBool(editable)
   860  	f.idFacture = fields.NewBoutonIdFacture(editable, base)
   861  
   862  	f.modePaiement.ConnectCurrentIndexChanged(func(int) { f.updateDetails() })
   863  	return f
   864  }
   865  
   866  func (f *FichePaiement) updateDetails() {
   867  	if f.modePaiement.GetData() == rd.MPCheque && f.details.GetData() == "" {
   868  		f.details.SetData(rd.String(fmt.Sprintf("encaissement: %s", rd.Date(time.Now()))))
   869  	}
   870  }
   871  
   872  func (f *FichePaiement) SetData(p rd.Paiement, idFacture rd.OptionnalId) {
   873  	f.initialPaiement = p
   874  	f.initialIdFacture = idFacture
   875  
   876  	f.labelPayeur.SetData(p.LabelPayeur)
   877  	f.modePaiement.SetData(p.ModePaiement)
   878  	f.numero.SetData(p.Numero)
   879  	f.nomBanque.SetData(p.NomBanque)
   880  	f.valeur.SetData(p.Valeur)
   881  	f.dateReglement.SetText(p.DateReglement.String())
   882  	f.details.SetData(p.Details)
   883  	f.isAcompte.SetData(p.IsAcompte)
   884  	f.isRemboursement.SetData(p.IsRemboursement)
   885  	f.isInvalide.SetData(p.IsInvalide)
   886  	f.idFacture.SetData(idFacture.AsIId())
   887  }
   888  
   889  func (f *FichePaiement) Reset() {
   890  	f.SetData(f.initialPaiement, f.initialIdFacture)
   891  }
   892  
   893  func (f FichePaiement) GetData() rd.Paiement {
   894  	p := f.initialPaiement
   895  
   896  	p.LabelPayeur = f.labelPayeur.GetData()
   897  	p.ModePaiement = f.modePaiement.GetData()
   898  	p.Numero = f.numero.GetData()
   899  	p.NomBanque = f.nomBanque.GetData()
   900  	p.Valeur = f.valeur.GetData()
   901  	p.Details = f.details.GetData()
   902  	p.IsAcompte = f.isAcompte.GetData()
   903  	p.IsRemboursement = f.isRemboursement.GetData()
   904  	p.IsInvalide = f.isInvalide.GetData()
   905  
   906  	p.IdFacture = f.idFacture.GetData().Int64()
   907  
   908  	return p
   909  }
   910  
   911  func (f FichePaiement) SetLayout() {
   912  	lG := widgets.NewQFormLayout(nil)
   913  	lG.SetVerticalSpacing(15)
   914  
   915  	lG.AddRow3("Dossier", f.idFacture)
   916  	lG.AddRow3("Payeur", f.labelPayeur)
   917  	lG.AddRow3("Banque", f.nomBanque)
   918  	lG.AddRow3("Mode de paiement", f.modePaiement)
   919  	lG.AddRow3("Numero", f.numero)
   920  	lG.AddRow3("Valeur", f.valeur)
   921  	lG.AddRow3("Moment d'ajout", f.dateReglement)
   922  	lG.AddRow3("Détails", f.details)
   923  	lG.AddRow3("Acompte", f.isAcompte)
   924  	lG.AddRow3("Remboursement", f.isRemboursement)
   925  	lG.AddRow3("Invalide", f.isInvalide)
   926  
   927  	lay := widgets.NewQHBoxLayout2(f)
   928  	lay.AddLayout(lG, 4)
   929  }
   930  
   931  func newFicheDocument(base *dm.BaseLocale, editable bool, idTarget *fields.BoutonId) ficheDocument {
   932  	f := ficheDocument{QFrame: basic.Frame(), base: base}
   933  	f.SetMinimumWidth(500)
   934  	f.nomClient = fields.NewString(editable)
   935  	f.description = fields.NewString(editable)
   936  
   937  	f.taille = basic.Label("")
   938  	f.dateHeureModif = basic.Label("")
   939  	f.idTarget = idTarget
   940  
   941  	return f
   942  }
   943  
   944  func (f *ficheDocument) SetData(p rd.Document, idTarget rd.OptionnalId) {
   945  	f.initialDocument = p
   946  	f.initialIdTarget = idTarget
   947  
   948  	f.nomClient.SetData(p.NomClient)
   949  	f.description.SetData(p.Description)
   950  
   951  	f.taille.SetText(fmt.Sprintf("<i>%d</i> KB", p.Taille/1000))
   952  	f.dateHeureModif.SetText(p.DateHeureModif.String())
   953  
   954  	f.idTarget.SetData(idTarget.AsIId())
   955  }
   956  
   957  func (f *ficheDocument) Reset() {
   958  	f.SetData(f.initialDocument, f.initialIdTarget)
   959  }
   960  
   961  func (f ficheDocument) getDocument() (rd.Document, rd.OptionnalId) {
   962  	p := f.initialDocument
   963  
   964  	p.NomClient = f.nomClient.GetData()
   965  	p.Description = f.description.GetData()
   966  
   967  	return p, rd.FromIId(f.idTarget.GetData())
   968  }
   969  
   970  func (f ficheDocument) setLayout(labelTarget string) *widgets.QFormLayout {
   971  	lG := widgets.NewQFormLayout(nil)
   972  	lG.SetVerticalSpacing(15)
   973  
   974  	lG.AddRow3(labelTarget, f.idTarget)
   975  	lG.AddRow3("Description", f.description)
   976  	lG.AddRow3("Fichier", f.nomClient)
   977  	lG.AddRow3("Taille", f.taille)
   978  	lG.AddRow3("Dernière modification", f.dateHeureModif)
   979  
   980  	lay := widgets.NewQHBoxLayout2(f)
   981  	lay.AddLayout(lG, 4)
   982  	return lG
   983  }
   984  
   985  func NewFicheDocumentPersonne(base *dm.BaseLocale, editable bool) *FicheDocumentPersonne {
   986  	f := FicheDocumentPersonne{ficheDocument: newFicheDocument(
   987  		base, editable,
   988  		fields.NewBoutonIdPersonne(editable, base, false),
   989  	)}
   990  
   991  	f.categorie = fields.NewCategorieDocument(base, editable)
   992  	return &f
   993  }
   994  
   995  func (f *FicheDocumentPersonne) SetData(p rd.Document, target rd.TargetDocument) {
   996  	var id rd.OptionnalId
   997  	if t, ok := target.(rd.DocumentPersonne); ok {
   998  		id = rd.NewOptionnalId(t.IdPersonne)
   999  		contrainte := f.base.Contraintes[t.IdContrainte].Builtin
  1000  		f.initialCategorie = contrainte
  1001  		f.categorie.SetData(contrainte)
  1002  	}
  1003  	f.ficheDocument.SetData(p, id)
  1004  }
  1005  
  1006  func (f *FicheDocumentPersonne) Reset() {
  1007  	f.ficheDocument.Reset()
  1008  	f.categorie.SetData(f.initialCategorie)
  1009  }
  1010  
  1011  func (f FicheDocumentPersonne) GetData() (rd.Document, rd.TargetDocument) {
  1012  	// on suppose que la validation a eu lieu
  1013  	out, idTarget := f.ficheDocument.getDocument()
  1014  
  1015  	contrainte := f.base.Contraintes.FindBuiltin(f.categorie.GetData())
  1016  
  1017  	dp := rd.DocumentPersonne{
  1018  		IdPersonne:   idTarget.Int64,
  1019  		IdContrainte: contrainte.Id,
  1020  	}
  1021  	return out, dp
  1022  }
  1023  
  1024  func (f FicheDocumentPersonne) SetLayout() {
  1025  	lG := f.ficheDocument.setLayout("Propriétaire")
  1026  	lG.AddRow3("Catégorie", f.categorie)
  1027  }
  1028  
  1029  func NewFicheDocumentAide(base *dm.BaseLocale, editable bool) *FicheDocumentAide {
  1030  	f := FicheDocumentAide{ficheDocument: newFicheDocument(base, editable, fields.NewBoutonIdAide(editable, base))}
  1031  	return &f
  1032  }
  1033  
  1034  func (f FicheDocumentAide) GetData() (rd.Document, rd.TargetDocument) {
  1035  	// on suppose que la validation a eu lieu
  1036  	out, idTarget := f.ficheDocument.getDocument()
  1037  	dp := rd.DocumentAide{IdAide: idTarget.Int64}
  1038  	return out, dp
  1039  }
  1040  
  1041  func (f *FicheDocumentAide) SetData(document rd.Document, targetDocument rd.TargetDocument) {
  1042  	var id rd.OptionnalId
  1043  	if t, ok := targetDocument.(rd.DocumentAide); ok {
  1044  		id = rd.NewOptionnalId(t.IdAide)
  1045  	}
  1046  	f.ficheDocument.SetData(document, id)
  1047  }
  1048  
  1049  func (f FicheDocumentAide) SetLayout() {
  1050  	f.ficheDocument.setLayout("Aide")
  1051  }
  1052  
  1053  func NewFicheDon(base *dm.BaseLocale, editable bool) FicheDon {
  1054  	f := FicheDon{QFrame: basic.Frame()}
  1055  	f.SetMinimumWidth(500)
  1056  
  1057  	f.valeur = fields.NewEuros(editable)
  1058  	f.modePaiement = fields.NewModePaiment(editable)
  1059  	f.dateReception = fields.NewDate(editable, 2000)
  1060  	f.remercie = fields.NewBool(editable)
  1061  	f.idDonateur = fields.NewBoutonIdPersonne(editable, base, true)
  1062  	f.details = fields.NewString(true)
  1063  	f.details.SetPlaceholderText("Optionnel")
  1064  	f.affectation = fields.NewString(true)
  1065  	f.affectation.SetPlaceholderText("Optionnel")
  1066  
  1067  	return f
  1068  }
  1069  
  1070  func (f *FicheDon) SetData(p rd.Don, donateur rd.DonDonateur) {
  1071  	f.initialDon = p
  1072  	f.initialDonateur = donateur
  1073  
  1074  	f.valeur.SetData(p.Valeur)
  1075  	f.modePaiement.SetData(p.ModePaiement)
  1076  	f.dateReception.SetData(p.DateReception)
  1077  	f.remercie.SetData(p.Remercie)
  1078  	f.idDonateur.SetData(donateur.IId())
  1079  	f.details.SetData(p.Details)
  1080  	f.affectation.SetData(p.Affectation)
  1081  }
  1082  
  1083  func (f FicheDon) GetData() (rd.Don, rd.DonDonateur) {
  1084  	p := f.initialDon
  1085  
  1086  	p.Valeur = f.valeur.GetData()
  1087  	p.ModePaiement = f.modePaiement.GetData()
  1088  	p.DateReception = f.dateReception.GetData()
  1089  	p.Remercie = f.remercie.GetData()
  1090  	p.Details = f.details.GetData()
  1091  	p.Affectation = f.affectation.GetData()
  1092  
  1093  	var dd rd.DonDonateur
  1094  	switch donateur := f.idDonateur.GetData().(type) {
  1095  	case rd.IdPersonne:
  1096  		dd = rd.DonDonateur{IdDon: p.Id, IdPersonne: rd.NewOptionnalId(donateur.Int64())}
  1097  	case rd.IdOrganisme:
  1098  		dd = rd.DonDonateur{IdDon: p.Id, IdOrganisme: rd.NewOptionnalId(donateur.Int64())}
  1099  	}
  1100  	return p, dd
  1101  }
  1102  
  1103  func (f FicheDon) SetLayout() {
  1104  	lG := widgets.NewQFormLayout(f)
  1105  	lG.SetVerticalSpacing(15)
  1106  
  1107  	lG.AddRow3("Donateur", f.idDonateur)
  1108  	lG.AddRow3("Valeur", f.valeur)
  1109  	lG.AddRow3("Mode de paiement", f.modePaiement)
  1110  	lG.AddRow3("Reçu le", f.dateReception)
  1111  	lG.AddRow3("Remercié ?", f.remercie)
  1112  	lG.AddRow3("Détails", f.details)
  1113  	lG.AddRow3("Affectation", f.affectation)
  1114  }
  1115  
  1116  func (f *FicheDon) Reset() {
  1117  	f.SetData(f.initialDon, f.initialDonateur)
  1118  }