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 }