github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/client/GUI/onglets/aides.go (about) 1 package onglets 2 3 import ( 4 "fmt" 5 6 dm "github.com/benoitkugler/goACVE/server/core/datamodel" 7 rd "github.com/benoitkugler/goACVE/server/core/rawdata" 8 9 "github.com/therecipe/qt/core" 10 11 "github.com/benoitkugler/goACVE/client/GUI/fields" 12 13 "github.com/benoitkugler/goACVE/client/GUI/basic" 14 "github.com/benoitkugler/goACVE/client/GUI/common" 15 "github.com/benoitkugler/goACVE/client/GUI/lists" 16 "github.com/benoitkugler/goACVE/client/controllers" 17 "github.com/therecipe/qt/widgets" 18 ) 19 20 func (t *Aides) Render() { 21 t.liste.Model().SetData(t.controller.Liste) 22 t.liste.SetSearch(t.controller.Etat.Recherche) 23 if t.controller.Etat.AideCurrent != nil { 24 t.liste.SelectRow(t.controller.Etat.AideCurrent) 25 } 26 t.stats.SetData(t.controller.GetStats()) 27 t.valide.SetData(t.controller.Etat.CritereValide) 28 t.camp.SetData(t.controller.Etat.CritereCamp) 29 } 30 31 func (t *Aides) ConfirmeSupprimeAide(aide dm.AccesAide) bool { 32 doc := aide.GetDocuments() 33 msg := fmt.Sprintf("Confirmez-vous la suppression de l'aide attribuée par <i>%s</i> à <b>%s</b> ?", 34 aide.GetStructureaide().RawData().Nom, aide.GetParticipant().GetPersonne().RawData().NomPrenom()) 35 if len(doc) == 1 { 36 msg += "<br/><i>une</i> pièce justificative sera aussi supprimée." 37 } else if len(doc) > 1 { 38 msg += fmt.Sprintf("<br/><i>%d</i> pièces justificatives seront aussi supprimées.", len(doc)) 39 } 40 return basic.Confirmation(msg, "Supprimer", basic.ONDelete) 41 } 42 43 func (t *Aides) ConfirmeSupprimeStructureaide(msg string) bool { 44 return basic.Confirmation(msg, "Supprimer", basic.ONDelete) 45 } 46 47 type Aides struct { 48 *widgets.QFrame 49 controller *controllers.Aides 50 parent *widgets.QTabWidget 51 toolbar *widgets.QToolBar 52 53 liste lists.Table 54 stats common.Statistics 55 valide fields.OptionnalBool 56 camp fields.Camp 57 } 58 59 func newAides(ct *controllers.Aides) *Aides { 60 p := Aides{QFrame: basic.Frame(), controller: ct} 61 62 p.liste = lists.Table{ 63 Liste: lists.Liste{ 64 Headers: ct.Header, 65 OnClick: func(acces rd.Item, _ int) { 66 ct.Etat.AideCurrent = acces.Id 67 p.UpdateToolbar() 68 }, 69 OnDoubleClick: func(acces rd.Item, _ int) { 70 p.editAide(acces.Id.Int64()) 71 }, 72 OnRightClick: func(acces rd.Item, pos *core.QPoint) { 73 aide := ct.Base.NewAide(acces.Id.Int64()) 74 if fac, has := aide.GetParticipant().GetFacture(); has { 75 menu := widgets.NewQMenu(p.liste) 76 menu.AddAction("Aller au dossier").ConnectTriggered(func(bool) { 77 ct.Main().Controllers.SuiviDossiers.SelectFacture(fac) 78 }) 79 p.liste.ShowContextMenu(menu, pos) 80 } 81 }, 82 OnSearch: func(pattern string) { 83 ct.Etat.Recherche = pattern 84 ct.Reset() 85 }, 86 OnSort: func(field rd.Field, reverse bool) { 87 lists.DefaultSort(p.liste, field, reverse) 88 }, 89 }, 90 } 91 p.liste.Init() 92 p.liste.HorizontalHeader().SetMinimumSectionSize(200) 93 p.stats = common.NewStatistics(true) 94 p.valide = fields.NewOptionnalBool(true, "Validées", "Non validées") 95 p.valide.ConnectActivated(func(_ int) { 96 ct.Etat.CritereValide = p.valide.GetData() 97 ct.Reset() 98 }) 99 100 p.camp = fields.NewCamp(true, ct.Base, true) 101 p.camp.ShowTerminated(false) 102 p.camp.ConnectActivated(func(_ int) { 103 ac := p.camp.GetData() 104 var optId rd.OptionnalId 105 if ac != nil { 106 optId = rd.NewOptionnalId(ac.Id) 107 } 108 ct.Etat.CritereCamp = optId 109 ct.Reset() 110 }) 111 showTerminated := widgets.NewQCheckBox2("Afficher les camps terminés", nil) 112 showTerminated.ConnectClicked(p.camp.ShowTerminated) 113 114 butons := widgets.NewQHBoxLayout() 115 butons.AddWidget(basic.Label("Choix du camp :"), 1, 0) 116 butons.AddWidget(p.camp, 1, core.Qt__AlignLeft) 117 butons.AddWidget(showTerminated, 1, core.Qt__AlignLeft) 118 butons.AddStretch(5) 119 butons.AddWidget(basic.Label("Etat des aides"), 1, core.Qt__AlignRight) 120 butons.AddWidget(p.valide, 1, 0) 121 lay := widgets.NewQVBoxLayout2(p) 122 lay.AddWidget(p.stats, 0, 0) 123 lay.AddLayout(butons, 0) 124 lay.AddWidget(p.liste, 2, 0) 125 return &p 126 } 127 128 func (t *Aides) creer() { 129 aide := CreeAide(t.controller.Base, rd.OptionnalId{}) 130 if aide == nil { 131 return 132 } 133 t.controller.CreeAide(*aide) 134 } 135 func (t *Aides) afficherStructures() { 136 f := newListeStructures(t.controller) 137 dial := basic.Dialog("Structures d'aide") 138 dial.Layout().AddWidget(f) 139 dial.Exec() 140 } 141 142 func (t *Aides) afficherDocuments() { 143 d := common.NewDocuments(t.controller.Main(), t.controller.EditRight, true) 144 d.SetModal(true) 145 d.Show() 146 d.RenderDocuments() 147 } 148 149 func (t *Aides) supprimer() { 150 t.controller.SupprimeAideCourante() 151 } 152 153 func (t *Aides) exporter() { 154 path := t.controller.ExportAides() 155 if path == "" { 156 return 157 } 158 basic.ShowFile(path) 159 } 160 161 func (t *Aides) editAide(id int64) { 162 aide := t.controller.Base.Aides[id] 163 modif := EditAide(t.controller.Base, t.controller.EditRight, aide, 164 rd.NewOptionnalId(aide.IdParticipant), 165 rd.NewOptionnalId(aide.IdStructureaide), 166 ) 167 if modif == nil { 168 return 169 } 170 t.controller.UpdateAide(*modif) 171 } 172 173 // CreeAide propose la création d'une aide. 174 // En cas d'annulation, out vaut `nil` 175 func CreeAide(base *dm.BaseLocale, idParticipant rd.OptionnalId) *rd.Aide { 176 return EditAide(base, true, rd.Aide{ 177 Valide: true, 178 ParJour: true, 179 }, idParticipant, rd.OptionnalId{}) 180 } 181 182 func EditAide(base *dm.BaseLocale, editable bool, aide rd.Aide, 183 idParticipant rd.OptionnalId, idStructureaide rd.OptionnalId) *rd.Aide { 184 d := common.NewFicheAide(base, editable) 185 d.SetData(aide, idParticipant, idStructureaide) 186 dialog := common.NewDetails(&d, editable) 187 if dialog.Exec() == 0 { 188 return nil 189 } 190 aide = d.GetData() 191 return &aide 192 } 193 194 // ------------------- Structures ------------------- 195 196 func newListeStructures(ct *controllers.Aides) *lists.Table { 197 t := lists.Table{ 198 Liste: lists.Liste{ 199 Headers: []rd.Header{ 200 {Field: dm.StructureaideNom, Label: "Nom"}, 201 {Field: dm.StructureaideImmatriculation, Label: "Immatriculation"}, 202 }, 203 OnDoubleClick: func(acces rd.Item, _ int) { 204 s := editStructure(ct.Base.Structureaides[acces.Id.Int64()], ct.EditRight) 205 if s == nil { 206 return 207 } 208 ct.UpdateStructureaide(*s) 209 }, 210 }, 211 } 212 resetListe := func() { 213 t.Model().SetData(ct.Base.RechercheRapideStructureaides("*")) 214 } 215 if ct.EditRight { 216 t.OnAdd = func() { 217 ne := editStructure(rd.Structureaide{}, true) 218 if ne != nil { 219 ct.CreeStructureaide(*ne) 220 resetListe() 221 } 222 } 223 t.OnDelete = func(acces rd.Item, _ int) { 224 ct.SupprimeStructureaide(acces.Id.Int64()) 225 resetListe() 226 } 227 } 228 t.Init() 229 resetListe() 230 return &t 231 } 232 233 func editStructure(s rd.Structureaide, editable bool) *rd.Structureaide { 234 f := common.NewFicheStructureaide(editable) 235 f.SetData(s) 236 det := common.NewDetails(&f, editable) 237 if det.Exec() == 0 { 238 return nil 239 } 240 s = f.GetData() 241 return &s 242 }