Rekenen en Vergelijkingen: verschil tussen versies

Uit ZaaksysteemWiki
Ga naar: navigatie, zoeken
(EN/OF)
(zttscript: Vergelijkingen vergelijken (EN, EN/OF))
Regel 534: Regel 534:
 
</pre>
 
</pre>
  
=== zttscript: Vergelijkingen vergelijken (EN, EN/OF) ===
+
=== zttscript: Vergelijkingen vergelijken (EN, EN/OF, OF) ===
 
<i>*Let op: De functionaliteit wordt nog doorontwikkeld om dit op een logischere manier te kunnen bewerkstelligen. Deze inrichting zal ondersteund blijven, maar deze kan beter vervangen worden met de toekomstige methode wanneer deze gereleased wordt omdat deze gemakkelijker te beheren zal zijn.</i>
 
<i>*Let op: De functionaliteit wordt nog doorontwikkeld om dit op een logischere manier te kunnen bewerkstelligen. Deze inrichting zal ondersteund blijven, maar deze kan beter vervangen worden met de toekomstige methode wanneer deze gereleased wordt omdat deze gemakkelijker te beheren zal zijn.</i>
  

Versie van 7 dec 2015 om 18:50

Algemeen

Rekenen en vergelijkingen met waarden van Kenmerken kunnen op meerdere plekken in het systeem gebruikt worden, namelijk:

Constanten

De volgende constanten kunnen gebruikt worden bij het rekenen of vergelijken:

Simpele notatie Complexe notatie Waarde
:pi constant("pi") 3.141592653...

Rekenen

Met formules kan de output aangepast worden door te rekenen met de kenmerkwaarde(n):

  • Met elk type kenmerk kan gerekend worden, zolang de waarde een correct getal is
  • Waardes die geen getal zijn worden als 0 geïnterpreteerd
  • Delen door 0 geeft geen output

Rekentekens

De rekentekens die gebruikt kunnen worden zijn:

Naam Teken Voorbeeld Output Volgorde
haakjes () 6 * ( 2 + 2 ) 24 Als eerste
keer/maal * 6 * 2 12 Na haakjes
Van links naar rechts
gedeeld door / 6 / 2 3
plus + 6 + 2 8 Na keer/gedeeld door
Van links naar rechts
min - 6 - 2 4

Voorbeelden

Onderstaand drie voorbeelden voor rekenen; één voor elke locatie waarin het toegepast kan worden. De voorbeelden worden stap voor stap uitgewerkt, waarbij telkens het onderstreepte gedeelte aangeeft welk gedeelte van de formule in de bijbehorende stap verwerkt wordt.

Stap Magicstrings Vul waarde in met formule zttscript

Stap 1
Stap 2
Stap 3
Stap 4
Stap 5
Resultaat

[[ voorbeeld_kenmerk + 6 / 3 * example_kenmerk ]]
[[ 4 + 6 / 3 * 2 ]]
[[ 4 + 2 * 2]]
[[ 4 + 4 ]]
[[ 8 ]]
8

5 + 4 / (3 - attribute.voorbeeld_kenmerk) * attribute.example_kenmerk
5 + 4 / (3 - 1) * 7
5 + 4 / 2 * 7
5 + 2 * 7
5 + 14
19

show_when { voorbeeld_kenmerk == 6 * (5 - example_kenmerk) }
show_when { 3 == 6 * (5 - 2) }
show_when { 3 == 6 * 3 }
show_when { 3 == 18 }
show_when { niet waar }
don't show

Afronding

De output wordt alsvolgt afgerond:

Formule Magicstring Vul waarde in met formule zttscript
Valutakenmerk Overige kenmerken
6 / 3 2 2,00 2.00 2
5 / 3 1.6666666667 1,67 1.67 1.6666666667

Tip: Gebruik eventueel Kenmerkformatting om de getallen af te ronden op gehele waarden.

Vergelijken

Met vergelijkingen kan gecontroleerd wordt of een waarde aan een bepaalde conditie voldoet. De output is dan "1" als de conditie waar is en "" als de conditie niet waar is. In deze vergelijkingen kunnen ook berekeningen opgenomen worden.

Operators

De operators die gebruikt kunnen worden zijn:

Naam Teken Voorbeeld Antwoord Kenmerktype
is gelijk aan == 2 + 2 == 4 Waar Alle
is niet gelijk aan != 2 + 2 != 5 Waar Alle
groter dan > 5 > 5 Niet waar Alle
kleiner dan < 1 < 1.1 Waar Alle
groter of gelijk aan >= 5 >= 5 Waar Alle
kleiner of gelijk aan <= 1 <= 1.1 Waar Alle
bevat tekst ~= "eks" in "tekst" Waar Alle
komt voor in in 5 in [ 1, 2, 3, 4 ]

5 in array( 1, 2, 3, 4 )

Niet waar Enkelvoudige keuze

Keuzelijst
Meervoudige keuze

Keuze kenmerken

De output van kenmerken van het type 'Enkelvoudige keuze', 'Meervoudige keuze' en 'Keuzelijst' zijn oorspronkelijk van het type Array. De 'in'-operator kan gebruikt worden om te zien of een specifieke waarde overeenkomt met één van de waarden die deze kenmerken bevatten. Omdat dit vrij omslachtig is voor de typen 'Enkelvoudige keuze' en 'Keuzelijst' die maar één waarde kunnen bevatten worden deze waarde omgezet naar het type String. Voor consistentie gebeurt dit ook met het kenmerktype 'Meervoudige keuze' waarbij waarden gescheiden worden door komma+spatie.

Samenvattend:

  • Gebruik de 'in'-operator enkel voor 'meervoudige keuze'-kenmerken
  • Gebruik alle andere operators voor alle andere kenmerktypen

Onderstaand is de exacte werking van de kenmerktypen en operators beschreven. Hier staan voor de volledigheid ook voorbeelden tussen die niet gebruikt zouden moeten worden, zodat aan de hand van dit gehele plaatje het beter te begrijpen is hoe en waarom de aanbevolen inrichtingen werken.

Voorbeelden tekstveld (en overige kenmerken)
Kenmerktype Waarde (array) Waarde (string) Vergelijking Uitkomst Toelichting
Aanbevolen Tekstveld "Appel" show_when { tekstveld == "Appel" } Waar Controleer of de waarde gelijk is aan X
Aanbevolen Tekstveld "Appel" show_when { tekstveld ~= "ppe" } Waar Controleer of de waarde een stuk tekst bevat dat gelijk is aan X
Tekstveld "Appel" show_when { "Appel" in tekstveld } Niet waar De 'in'-operator kan niet gebruikt worden voor dit kenmerktype
Voorbeelden enkelvoudige keuze en keuzelijst
Kenmerktype Waarde (array) Waarde (string) Vergelijking Uitkomst Toelichting
Aanbevolen Enkelvoudige keuze [ "Appel" ] "Appel" show_when { enkelvoudige_keuze == "Appel" } Waar Controleer of de waarde gelijk is aan X
Aanbevolen Enkelvoudige keuze [ "Appel" ] "Appel" show_when { enkelvoudige_keuze ~= "ppe" } Waar Controleer of de waarde een stuk tekst bevat dat gelijk is aan X
Enkelvoudige keuze [ "Appel" ] "Appel" show_when { "Appel" in enkelvoudige_keuze } Waar Hier kan beter de == operator voor gebruikt worden.
Voorbeelden meervoudige keuze
Kenmerktype Waarde (array) Waarde (string) Vergelijking Uitkomst Toelichting
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" show_when { meervoudige_keuze == "Appel" } Niet waar "Appel" is niet gelijk aan "Appel, Banaan, Citroen"
Aanbevolen Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" show_when { meervoudige_keuze == "Appel, Banaan, Citroen" } Waar Controleer of het kenmerk exact de juiste invulling heeft.
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" show_when { meervoudige_keuze ~= "Banaan, Citroen" } Waar Niet praktisch, omdat het enkel ingezet kan worden voor bepaalde combinaties.
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" show_when { meervoudige_keuze ~= "el, Banaan, Ci" } Waar Niet nuttig.
Aanbevolen Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" show_when { "Appel" in meervoudige_keuze } Waar "Appel" is gelijk aan één van de waarden.
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" show_when { "Appel, Banaan, Citroen" in meervoudige_keuze } Niet waar "Appel, Banaan, Citroen" is niet gelijk aan één van de waarden.

Voorbeelden

Enkele voorbeelden ter inspiratie en om de werking toe te lichten.

Magicstring: Rekenen

Een zaaktype parkeervergunning, waarin vastgelegd wordt wat de prijs van het type vergunning is en het aantal bezoekersvergunningen dat additioneel aangeschaft wordt. In het sjabloon moet de prijs per onderdeel (parkeervergunning en bezoekersvergunning) uitgesplitst weergegeven worden, plus de totaalprijs.

Voor deze implementatie kan het rekenen in magicstrings gebruikt worden, door de prijzentabel alsvolgt op te stellen:

Kenmerken in zaaktype Inrichting in sjabloon Uitkomst sjabloon
  • Prijs parkeervergunning
  • Aantal bezoekersvergunningen
Onderdeel Bedrag
Parkeervergunning [[ prijs_parkeervergunning | currency]]]
Bezoekersvergunning [[ aantal_bezoekersvergunningen * 8 | currency]]]
Totaalprijs [[ prijs_parkeervergunning + aantal_bezoekersvergunningen * 8 | currency]]]
Onderdeel Bedrag
Parkeervergunning 60,00
Bezoekersvergunning 40,00
Totaalprijs 100,00
Voorbeeld rekenen in magicstring

Vul waarde in met formule: Rekenen

Bovenstaande is niet geheel realistisch, want het is uiteraard veel wenselijker om de prijzen van de onderdelen in de zaak zelf vast te leggen, alsmede de totaalprijs.

Voor deze implementatie zijn kenmerken nodig om de prijs in op te slaan, en regels van het type 'Vul waarde in met formule' die de waarde er in plaatsen.

Kenmerken Regels Waarden
Parkeergebied Als 'Centrum', dan Vul waarde "60,00" in 'Prijs parkeervergunning' (geen formule nodig)

Als 'Schil', dan Vul waarde in "12,00" in 'Prijs parkeervergunning' (geen formule nodig)

Als <gevuld>, dan Vul waarde in met formule (kenmerk:Totaalprijs, waarde: "attribute.prijs_parkeervergunning + attribute.prijs_bezoekersvergunningen")

Centrum
Prijs parkeervergunning 60,00
Bezoekersvergunningen Als 'Bezoekersvergunningen' = 'Ja', dan Vul waarde in met formule (kenmerk:Prijs bezoekersvergunningen, waarde: "attribute.aantal_bezoekersvergunningen * 8") Ja
Aantal bezoekersvergunningen 5
Prijs bezoekersvergunningen 40.00
Totaalprijs 100.00
Voorbeeld rekenen met regels 1/3
Voorbeeld rekenen met regels 2/3
Voorbeeld rekenen met regels 3/3

zttscript: Rekenen

Een zaaktype 'Omgevingsvergunning' waarbij er geen administratiekosten gerekend worden wanneer de totale legeskosten boven de € 50,00 uitkomen.
show_when { prijs_bouwvergunning + prijs kapvergunning + prijs_printen > 50 }

"Toon wanneer alle prijs_kenmerken samen een waarde van groter dan vijftig hebben."

Let op: De auteur is zich bewust van het feit dat dit geen praktijkvoorbeeld is.

Voorbeeld rekeken in zttscript

zttscript: Vergelijken

Een zaaktype parkeervergunning voor de volgende parkeergebieden: 'Centrum', 'Schil noord', 'Schil west', 'Schil zuid', 'Schil oost'. Voor de schilgebieden moet op het sjabloon een paragraaf voor waarden opgenomen worden.

Voor deze implementatie kan het beste een "niet gelijk aan"-vergelijking gebruikt worden:

show_when { parkeergebied != "Centrum" }

"Toon wanneer het kenmerk 'Parkeergebied' niet gelijk aan 'Centrum' is."

Let op: Voor dit voorbeeld geldt dat het veld ook getoond wordt wanneer het kenmerk 'Parkeergebied' geen waarde heeft (leeg is).

Voorbeeld vergelijken met zttscript

zttscript: Vergelijken met de in-operator

Een zaaktype 'Melding openbare ruimte' waarbij er afhankelijk van de categorie verschillende 'meervoudige keuze'-kenmerken met acties getoond wordt.
Kenmerk Opties
mor categorie Groen, Verlichting, Overlast
mor acties groen Opgeruimd, Teruggekoppeld, Schade verhaald
mor acties verlichting Gerepareerd, Teruggekoppeld, Schade verhaald
mor acties overlast Verholpen, Teruggekoppeld, Schade verhaald

Op het sjabloon moet dan een tekstveld getoond worden als in één van de actiekenmerken de waarde 'Schade verhaald' aangevinkt is.

show_when { "Schade verhaald" in [ mor_acties_groen, mor_acties_verlichting, mor_acties_overlast ] }

"Toon wanneer de waarde 'Schade verhaald' aanwezig is in mor_categorie_groen of mor_acties_verlichting of mor_acties_overlast."

Let op: Als de waarde in slechts één 'meervoudige keuze'-kenmerk opgezocht hoeft te worden dan zijn de [haakjes] niet nodig.

Voorbeeld rekeken in zttscript

zttscript: Vergelijken met meerdere voorwaarden (EN)

*Let op: De functionaliteit wordt nog doorontwikkeld om dit op een logischere manier te kunnen bewerkstelligen. Deze inrichting zal ondersteund blijven, maar deze kan beter vervangen worden met de toekomstige methode wanneer deze gereleased wordt omdat deze gemakkelijker te beheren zal zijn.

Een zaaktype 'Melding openbare ruimte' waarbij tekst enkel getoond moet worden wanneer de categorie 'Verlichting' is en de urgentie 'Spoed'.

show_when { [ mor_categorie, urgentie ] == "Verlichting, Spoed" }

"Toon wanneer 'mor categorie, urgentie' gelijk is aan "Verlichting, Spoed"}

Deze inrichting maakt gebruik van het feit dat 'arrays' platgeslagen worden tot 'strings'. Door de verschillende kenmerken handmatig in één array te plaatsen worden de waarden komma+spatie gescheiden in één string geplaatst voor de vergelijking.

show_when { [   mor_categorie  ,   urgentie  ] == "Verlichting, Spoed" }
show_when { [ [ "Verlichting" ], [ "Spoed" ] ] == "Verlichting, Spoed" }
show_when { [   "Verlichting"  ,   "Spoed"   ] == "Verlichting, Spoed" }
show_when {        "Verlichting, Spoed"        == "Verlichting, Spoed" }
show

zttscript: Vergelijkingen vergelijken (EN, EN/OF, OF)

*Let op: De functionaliteit wordt nog doorontwikkeld om dit op een logischere manier te kunnen bewerkstelligen. Deze inrichting zal ondersteund blijven, maar deze kan beter vervangen worden met de toekomstige methode wanneer deze gereleased wordt omdat deze gemakkelijker te beheren zal zijn.

Deze inrichting maakt gebruik van het feit dat 'arrays' platgeslagen worden tot 'strings'. Door de vergelijkingen handmatig in één array te plaatsen worden de waarden komma+spatie gescheiden in één string geplaatst voor de vergelijking. De uitkomsten van vergelijkingen zijn "1" voor vergelijkingen die waar zijn, en "" voor vergelijkingen die niet waar zijn.

EN

De sectie wordt getoond als alle voorwaarden waar zijn.

voorbeeld_kenmerk is "Appel" voorbeeld_kenmerk is "Citroen"
example_kenmerk is "Banaan"
show_when { [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] == "1, 1" }
show_when { [ "1", "1" ] == "1, 1" }
show_when {   "1, 1"     == "1, 1" }
show
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { [ "", "1" ] == "1, 1" }
show_when {   ", 1"     == "1, 1" }
don't show
example_kenmerk is "Druif"
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { [ "1", "" ] == "1, 1" }
show_when {   "1, "     == "1, 1" }
don't show
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { [ "", "" ] == "1, 1" }
show_when {   ", "     == "1, 1" }
don't show
EN/OF

De sectie wordt getoond als één of meer voorwaarden waar zijn.

voorbeeld_kenmerk is "Appel" voorbeeld_kenmerk is "Citroen"
example_kenmerk is "Banaan"
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "1", "1" ] }
show_when { "1" in   "1, 1"     }
show
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "", "1" ] }
show_when { "1" in   ", 1"     }
show
example_kenmerk is "Druif"
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "1", "" ] }
show_when { "1" in   "1, "     }
show
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "", "" ] }
show_when { "1" in   ", "     }
don't show
OF

De sectie wordt getoond als precies één van de voorwaarden waar is.

voorbeeld_kenmerk is "Appel" voorbeeld_kenmerk is "Citroen"
example_kenmerk is "Banaan"
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "1", "1" ] }
show_when { "1" in   "1, 1"     }
show
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "", "1" ] }
show_when { "1" in   ", 1"     }
show
example_kenmerk is "Druif"
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "1", "" ] }
show_when { "1" in   "1, "     }
show
show_when { "1" in [ voorbeeld_kenmerk == "Appel", example_kenmerk == "Banaan" ] }
show_when { "1" in [ "", "" ] }
show_when { "1" in   ", "     }
don't show