Changes between Version 11 and Version 12 of Documentatie/Beheerder/Modules/Decursus


Ignore:
Timestamp:
04/21/15 09:55:56 (11 years ago)
Author:
adriaan
Comment:

Programmatisch-inrichten via opbouw-hacks wil je echt niet promoten

Legend:

Unmodified
Added
Removed
Modified
  • Documentatie/Beheerder/Modules/Decursus

    v11 v12  
    127127 
    128128 
    129 == Programmatisch Inrichten == 
     129=== FENAC ICT === 
    130130 
    131 [[NoteBox(warn, Deze informatie maakt het mogelijk om tot aan de kleinste details de layout en het gedrag van decursusentries aan te passen. Voor dagelijks gebruik is het gebruik van een thema-engine te prefereren.)]] 
    132  
    133 Zoals onder het kopje "Thema's" staat beschreven, is het aantal invoervelden bij een nieuw thema beperkt. Alle decursus invoervelden kunnen in principe bij elk thema worden gebruikt, eventueel voorzien van een ander label dan het default label. Om de standaardfunctionaliteit van de decursus module te wijzigen of uit te breiden, moet een stukje code worden geschreven in de eigen adaptatie. Het AMC is één van de AC's met een eigen decursus.py in de adaptatie. 
    134  
    135 Het zichtbaar maken of aanpassen van velden bij een thema, gebeurt in twee stappen. Allereerst moet een defaults-functie worden geschreven die de standaard defaults-functie van de decursusmodule uitbreidt met nieuwe functionaliteit. Onderstaand een voorbeeld uit de adaptatie van het AMC: 
    136  
    137 {{{ 
    138 def decursus_defaults( 
    139    cursusentry, 
    140    **kwargs 
    141 ) : 
    142    """ 
    143    Decursus: regel zichtbaarheid van de velden. 
    144    """ 
    145    layouts = cursusentry.meta.layouts 
    146    layouts["team"] = "-" 
    147    layouts["bespreken"] = "-" 
    148    layouts["aanleiding"] = "-" 
    149    layouts["teamvraag"] = "-" 
    150    layouts["teambesluit"] = "-" 
    151     
    152    if cursusentry.thema.startswith("pb-aanm") or \ 
    153       cursusentry.thema.startswith("pb-team"): 
    154       layouts["actie_administratie"] = "-" 
    155       layouts["status_naar"] = "-" 
    156       layouts["notities"] = "-" 
    157       layouts["advies_afspraak"] = "-" 
    158        
    159       layouts["team"] = "02:08" 
    160       layouts["bespreken"] = "02:02" 
    161       layouts["aanleiding"] = "02:08" 
    162       layouts["teamvraag"] = "2:8x8" 
    163        
    164    if cursusentry.thema.startswith("pb-team"): 
    165       layouts["teambesluit"] = "2:8x8" 
    166        
    167    if cursusentry.thema.startswith("aantek"): 
    168       layouts["aanleiding"] = "02:08" 
    169        
    170    if cursusentry.thema.startswith("consult"): 
    171       layouts["anamnese"]              = "2:8x3" 
    172  
    173       if cursusentry.gehoor or cursusentry.spraaktaal: 
    174          layouts["gehoor"]             = "2:8x3"   
    175          layouts["spraaktaal"]         = "2:8x3"   
    176  
    177       else: 
    178          layouts["onderzoek"]          = "2:8x3" 
    179  
    180       layouts["conclusie"]             = "2:8x3" 
    181       layouts["afsluiting"]            = "2:8x3" 
    182       layouts["notities"]              = "2:8x2" 
    183       cursusentry.meta.veldlabels["notities"] = "Notities OpenAC" 
    184 }}} 
    185  
    186  
    187 In bovenstaand voorbeeld worden eerst velden verborgen door de layout van het veld in te stellen op een streepje. Vervolgens worden afhankelijk van het thema velden zichtbaar gemaakt. Ook laat dit voorbeeld zien dat bestaande velden een nieuw label kunnen krijgen. Het veld "notities" krijgt het label "Notities OpenAC".  
    188  
    189 Na het coderen van de defaults-functie moet deze worden geregistreerd bij het systeem, waardoor de functie door OpenAC zal worden aangeroepen. 
    190  
    191 {{{ 
    192    logica.callbacks.registreer( 
    193       "tabel.cursusentry.defaults", decursus.decursus_defaults, "z090.adaptatie") 
    194 }}} 
    195  
    196  
    197 === Sidebars === 
    198  
    199 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: 
    200 {{{ 
    201 def dossierscherm_opbouw( 
    202    scherm, 
    203    **kwargs 
    204 ) : 
    205    """ 
    206    Zet een box met knoppen rechts 
    207    """ 
    208    patient = scherm.entry 
    209  
    210    #  oude_dossierscherm_opbouw wordt gezet in __init__.py 
    211    # 
    212    oude_dossierscherm_opbouw(scherm, **kwargs) 
    213  
    214    if scherm.entry: 
    215       for behandeling in scherm.entry.behandelingen.values(): 
    216          behandelpad = "entry/behandelingen(%s)" % behandeling.key 
    217  
    218          for cursusentry in behandeling.cursusentries.values(): 
    219             cursuspad = "%s/cursusentries(%s)" % (behandelpad, cursusentry.key) 
    220             cursusbox = scherm.boxen.get(cursuspad) 
    221             sidebarpad = "%s-sidebar" % cursuspad 
    222  
    223             if not cursusbox \ 
    224             or scherm.box_cursor not in [cursuspad, sidebarpad]: continue 
    225  
    226             if not cursusentry.thema.startswith("consult"): continue 
    227  
    228             sidebar = scherm.box( 
    229                sidebarpad, 
    230                kolom_op_scherm      =  20, 
    231                breedte_in_vakjes    =  6, 
    232                achtergrondkleur     =  "#d0c8d8") 
    233  
    234             scherm.boxen._keys = reduce(lambda list1, list2: list1 + list2, 
    235                [[key] + (key == cursuspad and ["%s-sidebar" % cursuspad] or []) 
    236                 for key in scherm.boxen._keys 
    237                 if not key.endswith("-sidebar")], 
    238                []) 
    239  
    240             cursusbox.heeft_subboxen_rechts = True 
    241             sidebar.is_subbox = True 
    242  
    243             sidebar.label(6, "<b>Brieftekst</b>") 
    244  
    245             if cursusentry.thema.startswith("consult"): 
    246                sidebar_consult(scherm, patient, cursusentry, sidebar, cursusentry.thema) 
    247 }}} 
    248 Bovenstaande code voegt een sidebar toe bij thema's waarvan de code begint met "consult". 
    249  
    250 Implementatie van de sidebar: 
    251 {{{ 
    252 def sidebar_consult( 
    253    scherm, 
    254    patient, 
    255    cursusentry, 
    256    sidebar, 
    257    thema 
    258 ) : 
    259    """ 
    260    Vul de sidebar met knoppen voor consults 
    261    """ 
    262    gebruikte_keys = s080_decursus.thema_standaardzinnen(thema) 
    263  
    264    vorig_kenmerk = "" 
    265    for fragmentcode in gebruikte_keys: 
    266       fragment = logica.datamodel.tabellen["brief_tekstfragment"].coderijen[fragmentcode] 
    267       label    = fragment.code 
    268       doelveld = fragment.doelveld 
    269       tekst    = fragment.tekst.replace("{patient}", patienttekst(patient)) 
    270  
    271       kenmerk_match = s080_decursus.exp_kenmerk.match(label) 
    272       if kenmerk_match: kenmerk = kenmerk_match.group(1) 
    273       else: kenmerk = None 
    274  
    275       if kenmerk and vorig_kenmerk and kenmerk != vorig_kenmerk: 
    276          sidebar.separator() 
    277  
    278       else: 
    279          sidebar.newline() 
    280  
    281       vorig_kenmerk = kenmerk 
    282  
    283       on_select = { 
    284          "actie":    "invoegen", 
    285          "entry":    cursusentry, 
    286          "doelveld": doelveld, 
    287          "tekst":    tekst} 
    288  
    289       if len(tekst) > 140: tekst = tekst[:138] + "..." 
    290  
    291       sidebar.label( 
    292          1, "<b>%s</b>" % label, 
    293          celhoogte_in_units = logica.opbouw.compacte_regelhoogte) 
    294       sidebar.label( 
    295          15, "<i>%s</i>" % tekst, 
    296          on_select = on_select, 
    297          celhoogte_in_units = logica.opbouw.compacte_regelhoogte) 
    298 }}} 
    299  
    300 Ook hier is code nodig die ervoor zorgt dat de opbouwfunctie wordt uitgevoerd door het systeem: 
    301 {{{ 
    302    (decursus.oude_dossierscherm_opbouw, decursus.oude_dossierscherm_dispatch) = \ 
    303       logica.opbouw.herdefinieer_scherm( 
    304          "tabelscherm_patient", 
    305          nieuwe_opbouwfunctie = decursus.dossierscherm_opbouw, 
    306          nieuwe_dispatchfunctie = decursus.dossierscherm_dispatch) 
    307 }}} 
    308  
    309 === FENAC ICT === 
    310131Dit hoofdstuk laat zien dat het mogelijk is de decursus functionaliteit volledig naar eigen wensen in te richten. Natuurlijk kan FENAC ICT helpen met advies of implementatie.