| | 97 | Ook voor tonen van een sidebar bij een thema is wat code nodig in de eigen adaptatie. In dit geval gaat het om een opbouwfunctie die functionaliteit toevoegt aan de standaard decursus opbouwfunctie, en een functie die de sidebar implementeert. De opbouwfunctie: |
| | 98 | {{{ |
| | 99 | def dossierscherm_opbouw( |
| | 100 | scherm, |
| | 101 | **kwargs |
| | 102 | ) : |
| | 103 | """ |
| | 104 | Zet een box met knoppen rechts |
| | 105 | """ |
| | 106 | patient = scherm.entry |
| | 107 | |
| | 108 | # oude_dossierscherm_opbouw wordt gezet in __init__.py |
| | 109 | # |
| | 110 | oude_dossierscherm_opbouw(scherm, **kwargs) |
| | 111 | |
| | 112 | if scherm.entry: |
| | 113 | for behandeling in scherm.entry.behandelingen.values(): |
| | 114 | behandelpad = "entry/behandelingen(%s)" % behandeling.key |
| | 115 | |
| | 116 | for cursusentry in behandeling.cursusentries.values(): |
| | 117 | cursuspad = "%s/cursusentries(%s)" % (behandelpad, cursusentry.key) |
| | 118 | cursusbox = scherm.boxen.get(cursuspad) |
| | 119 | sidebarpad = "%s-sidebar" % cursuspad |
| | 120 | |
| | 121 | if not cursusbox \ |
| | 122 | or scherm.box_cursor not in [cursuspad, sidebarpad]: continue |
| | 123 | |
| | 124 | if not cursusentry.thema.startswith("consult"): continue |
| | 125 | |
| | 126 | sidebar = scherm.box( |
| | 127 | sidebarpad, |
| | 128 | kolom_op_scherm = 20, |
| | 129 | breedte_in_vakjes = 6, |
| | 130 | achtergrondkleur = "#d0c8d8") |
| | 131 | |
| | 132 | scherm.boxen._keys = reduce(lambda list1, list2: list1 + list2, |
| | 133 | [[key] + (key == cursuspad and ["%s-sidebar" % cursuspad] or []) |
| | 134 | for key in scherm.boxen._keys |
| | 135 | if not key.endswith("-sidebar")], |
| | 136 | []) |
| | 137 | |
| | 138 | cursusbox.heeft_subboxen_rechts = True |
| | 139 | sidebar.is_subbox = True |
| | 140 | |
| | 141 | sidebar.label(6, "<b>Brieftekst</b>") |
| | 142 | |
| | 143 | if cursusentry.thema.startswith("consult"): |
| | 144 | sidebar_consult(scherm, patient, cursusentry, sidebar, cursusentry.thema) |
| | 145 | }}} |
| | 146 | |
| | 147 | Implementatie van de sidebar: |
| | 148 | {{{ |
| | 149 | def sidebar_consult( |
| | 150 | scherm, |
| | 151 | patient, |
| | 152 | cursusentry, |
| | 153 | sidebar, |
| | 154 | thema |
| | 155 | ) : |
| | 156 | """ |
| | 157 | Vul de sidebar met knoppen voor consults |
| | 158 | """ |
| | 159 | gebruikte_keys = s080_decursus.thema_standaardzinnen(thema) |
| | 160 | |
| | 161 | vorig_kenmerk = "" |
| | 162 | for fragmentcode in gebruikte_keys: |
| | 163 | fragment = logica.datamodel.tabellen["brief_tekstfragment"].coderijen[fragmentcode] |
| | 164 | label = fragment.code |
| | 165 | doelveld = fragment.doelveld |
| | 166 | tekst = fragment.tekst.replace("{patient}", patienttekst(patient)) |
| | 167 | |
| | 168 | kenmerk_match = s080_decursus.exp_kenmerk.match(label) |
| | 169 | if kenmerk_match: kenmerk = kenmerk_match.group(1) |
| | 170 | else: kenmerk = None |
| | 171 | |
| | 172 | if kenmerk and vorig_kenmerk and kenmerk != vorig_kenmerk: |
| | 173 | sidebar.separator() |
| | 174 | |
| | 175 | else: |
| | 176 | sidebar.newline() |
| | 177 | |
| | 178 | vorig_kenmerk = kenmerk |
| | 179 | |
| | 180 | on_select = { |
| | 181 | "actie": "invoegen", |
| | 182 | "entry": cursusentry, |
| | 183 | "doelveld": doelveld, |
| | 184 | "tekst": tekst} |
| | 185 | |
| | 186 | if len(tekst) > 140: tekst = tekst[:138] + "..." |
| | 187 | |
| | 188 | sidebar.label( |
| | 189 | 1, "<b>%s</b>" % label, |
| | 190 | celhoogte_in_units = logica.opbouw.compacte_regelhoogte) |
| | 191 | sidebar.label( |
| | 192 | 15, "<i>%s</i>" % tekst, |
| | 193 | on_select = on_select, |
| | 194 | celhoogte_in_units = logica.opbouw.compacte_regelhoogte) |
| | 195 | }}} |
| | 196 | |
| | 197 | Ook hier is code nodig die ervoor zorgt dat de opbouwfunctie wordt uitgevoerd door het systeem: |
| | 198 | {{{ |
| | 199 | (decursus.oude_dossierscherm_opbouw, decursus.oude_dossierscherm_dispatch) = \ |
| | 200 | logica.opbouw.herdefinieer_scherm( |
| | 201 | "tabelscherm_patient", |
| | 202 | nieuwe_opbouwfunctie = decursus.dossierscherm_opbouw, |
| | 203 | nieuwe_dispatchfunctie = decursus.dossierscherm_dispatch) |
| | 204 | }}} |