Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
97 lines
5.3 KiB
Markdown
97 lines
5.3 KiB
Markdown
# bipp-budgetcode
|
|
|
|
Zet de budgetcode als dropdown in de rij van het winkelmandje zelf, net onder de
|
|
grootboekrekening. Geen omweg meer langs *Selectie analytische velden*, en je ziet ook gewoon
|
|
staan welke code een artikel heeft.
|
|
|
|
BIPP verbergt die code vandaag volledig: na *Creëer*, kiezen, *Opslaan* en *Terug* zegt de rij
|
|
alleen nog `Bekijk`, in het groen, en die kleur blijft ook staan als de code weer leeg is. De
|
|
gekozen waarde zit wel al in de pagina, maar alleen als tooltip op die link.
|
|
|
|
[**Installeren**](https://gitea.flw.uantwerpen.be/glenn/ua-userscripts/raw/branch/main/scripts/bipp-budgetcode/bipp-budgetcode.user.js)
|
|
· gebeurt er niets, zie de [installatie-uitleg](../../README.md).
|
|
|
|
## Gebruik
|
|
|
|
- Kies de budgetcode in de dropdown onder de grootboekrekening. De pagina blijft staan waar ze
|
|
staat.
|
|
- Zoeken in die lijst van ruim vijfduizend codes gaat via
|
|
[select-search](../select-search/README.md), dat op dezelfde pagina meeloopt.
|
|
- Bovenaan de lijst staan onder *recent* de vijf codes die je het laatst gebruikt hebt. Dat blok
|
|
komt van [select-search](../select-search/README.md#recent) en werkt intussen op elke grote
|
|
dropdown op BIPP, niet enkel op de budgetcode. Hier telt een code pas als de server ze
|
|
aanvaard heeft: mislukt het opslaan, dan blijft recent ongemoeid.
|
|
- De gekozen code komt ook in **Interne commentaar** te staan, wat er verder in de rij al dan
|
|
niet ingevuld is. Enkel de code zelf, dus `8947-2025` en niet de omschrijving die in de
|
|
dropdown achter het streepje staat. Stond er al tekst in het veld, dan komt ze op een nieuwe
|
|
regel eronder. Kies je daarna een andere code, dan wordt die regel vervangen in plaats van dat
|
|
er een bijkomt.
|
|
- Is er nog niets gekozen, dan staat er grijs `budgetcode` in het veld. Dat is een
|
|
placeholder, geen waarde, en hij staat niet als regel in de lijst.
|
|
- Wissen doe je met het kruisje rechts in het veld. Zodra er een code staat en je met de muis
|
|
over het veld gaat of erin staat, neemt dat kruisje de plek van het pijltje in. Backspace in
|
|
een leeg veld doet hetzelfde. Dat haalt ook de regel uit Interne commentaar weg.
|
|
- Een code uit *recent* halen: open de lijst, ga met de pijltjes of de muis op die regel staan
|
|
en druk `Delete`, zolang je nog niets getypt hebt. De code staat daarna weer gewoon onder *alle
|
|
budgetcodes*. Kies je hem later opnieuw, dan komt hij vanzelf terug bovenaan.
|
|
- De link *Creëer* / *Bekijk* blijft staan als uitweg.
|
|
|
|
De status staat als klein icoontje rechts op de regel van die link, zodat er nooit iets
|
|
verschuift:
|
|
|
|
- **Zandloper, tekst grijs**: bezig met opslaan. Een nieuwe keuze wordt zolang genegeerd.
|
|
- **Geen icoontje, tekst weer zwart**: opgeslagen. Er komt geen vinkje bij, de zandloper gaat
|
|
gewoon weg. Dat de tekst weer zwart is, is de bevestiging.
|
|
- **Uitroepteken, rode rand**: niet opgeslagen, de waarde is teruggedraaid.
|
|
|
|
De volledige melding staat in de tooltip van het icoontje en van de dropdown.
|
|
|
|
## Hoe het opslaat
|
|
|
|
Kiezen in de dropdown doet in de achtergrond precies wat je anders met de hand doet: de postback
|
|
naar de selectorpagina, *Opslaan*, en *Terug*. Het script controleert in het antwoord of de
|
|
server de waarde echt geselecteerd heeft en verwisselt daarna `__VIEWSTATE`, `__EVENTVALIDATION`
|
|
en `__VIEWSTATEGENERATOR` in de live pagina, zodat een gewone postback erna blijft werken.
|
|
|
|
Dezelfde keten haalt ook de optielijst op als de selectorpagina niet rechtstreeks opvraagbaar
|
|
is, dan zonder *Opslaan*: de postback, meteen de lijst uit het antwoord, en *Terug*.
|
|
|
|
Omdat het live formulier meegestuurd wordt, gaat niet-opgeslagen typwerk (aantal, commentaar)
|
|
niet verloren: dat wordt door de eerste stap zelfs meteen mee gecommit. Het verkeer per keuze is
|
|
hetzelfde als dat van de drie handmatige stappen.
|
|
|
|
## Beperkingen
|
|
|
|
- **De groene link blijft groen.** Dat komt van BIPP zelf en is niet betrouwbaar. De dropdown is
|
|
de bron van waarheid.
|
|
- **De optielijst wordt gecached** in `localStorage`, per participant, zeven dagen. De eerste
|
|
keer duurt het kiezen een moment langer omdat de lijst dan opgehaald wordt.
|
|
- **Na een mislukte poging** klopt de dropdown weer, maar de server kan de tussenliggende
|
|
commentaarregel nog vasthouden: de eerste stap van de keten commit het formulier, de latere
|
|
stap is degene die faalde. De eerstvolgende geslaagde keuze zet dat recht, want die stuurt het
|
|
formulier opnieuw mee.
|
|
- **In een verse sessie kost het eerste laden drie verzoeken.** `AnalyticalFieldSelector.aspx`
|
|
geeft HTTP 500 (`NullReferenceException` in `Page_Load`) zolang de sessie nog geen huidige
|
|
regel heeft. Het script vangt dat zelf op met de keten hieronder, dus je merkt er enkel een
|
|
moment grijze dropdowns van. Lukt ook dat niet, dan zegt de melding wat je met de hand moet
|
|
doen: één keer op *Creëer* klikken en daarna op *Terug*.
|
|
- **Meer dan één analytisch veld** wordt niet inline aangeboden. De selectorpagina is een
|
|
repeater; verschijnt er ooit een tweede veld, dan valt het script voor die rij terug op de
|
|
link.
|
|
|
|
## Ontwikkelen
|
|
|
|
Eén bestand, geen build, geen dependencies. Hoog `@version` op bij elke wijziging, anders krijgt
|
|
niemand de update binnen.
|
|
|
|
Tijdens het ontwikkelen laad je het script via een dev-stub in plaats van een geplakte kopie,
|
|
zie [Ontwikkelen](../../AGENTS.md#dev-stub-vs-gebruik).
|
|
|
|
```sh
|
|
node --check bipp-budgetcode.user.js
|
|
```
|
|
|
|
## Licentie
|
|
|
|
[GPL-3.0-or-later](../../LICENSE).
|