|
@@ -51,6 +51,8 @@ Google Play en één doorloop die alleen Bob kan doen.
|
|
|
| ~~117~~ | ~~Kalenderpermissie eruit~~ | ✅ **AF** (Bob 2026-09-20, export-geverifieerd): `READ_CALENDAR`/`WRITE_CALENDAR` én `NSCalendarsUsageDescription` zijn weg; `CAMERA` staat er nog (terecht) |
|
|
| ~~117~~ | ~~Kalenderpermissie eruit~~ | ✅ **AF** (Bob 2026-09-20, export-geverifieerd): `READ_CALENDAR`/`WRITE_CALENDAR` én `NSCalendarsUsageDescription` zijn weg; `CAMERA` staat er nog (terecht) |
|
|
|
| **118** | AdMob EU-consentbericht | ⚠️ Half: de FlutterFlow-toggle staat goed, maar het bericht moet in de **AdMob-console** gepubliceerd zijn. Eigen blok hieronder |
|
|
| **118** | AdMob EU-consentbericht | ⚠️ Half: de FlutterFlow-toggle staat goed, maar het bericht moet in de **AdMob-console** gepubliceerd zijn. Eigen blok hieronder |
|
|
|
| **122** | Teksten aanmaakpagina's doornemen | Labels, hints en Engelse vertalingen op de activiteiten- en evenementenpagina. Inventaris mét i18n-sleutels staat in een eigen blok hieronder; o.a. "Categorie **evenement**" als kop op de *activiteiten*pagina, "Selectee...", "WebsiteURL"/"TicketsURL" en een sterretje dat niet klopt met de introtekst |
|
|
| **122** | Teksten aanmaakpagina's doornemen | Labels, hints en Engelse vertalingen op de activiteiten- en evenementenpagina. Inventaris mét i18n-sleutels staat in een eigen blok hieronder; o.a. "Categorie **evenement**" als kop op de *activiteiten*pagina, "Selectee...", "WebsiteURL"/"TicketsURL" en een sterretje dat niet klopt met de introtekst |
|
|
|
|
|
+| **123** | `mijn_stadsrechten` uitbreiden met de keten | **Code staat klaar en is op productie getest.** Vervang regels 316-372 van `custom.evenementen_aanmaken.inc` + `cc all`. Blokkeert 124 |
|
|
|
|
|
+| **124-126** | Stadsrechten-cascade op `stadsactiviteitAanmaken` | Voorvullen van provincie/gemeente/plaats (124), een **crash** bij een lege plaatsenlijst (125) en een stille verkeerde plaats bij het wisselen van gemeente (126). Eigen blok hieronder |
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
#
|
|
#
|
|
@@ -429,6 +431,94 @@ waarde.
|
|
|
geneste dialogen. Zeg het even als Claude die mag oppakken; B t/m D zijn
|
|
geneste dialogen. Zeg het even als Claude die mag oppakken; B t/m D zijn
|
|
|
schrijfkeuzes en horen bij jou.
|
|
schrijfkeuzes en horen bij jou.
|
|
|
|
|
|
|
|
|
|
+### 123 · Stadsrechten-cascade op `stadsactiviteitAanmaken` — Drupal-deel · Eigenaar: Bob
|
|
|
|
|
+
|
|
|
|
|
+**Code staat klaar en is getest** (2026-09-20, Claude): vervang in
|
|
|
|
|
+`sites/all/modules/custom/custom.evenementen_aanmaken.inc` de **regels 316 t/m
|
|
|
|
|
+372** (docblock t/m sluitende accolade van `_custom_mijn_stadsrechten_service()`)
|
|
|
|
|
+door de aangeleverde versie. Daarna `drush @<alias> cc all`.
|
|
|
|
|
+
|
|
|
|
|
+**Waarom:** `field_town_access` mag een term op **elk** van de drie niveaus van
|
|
|
|
|
+de town-vocabulary bevatten — plaats (tot 2026-08-27), gemeente (huidige
|
|
|
|
|
+standaard) of provincie (de widget staat op Max depth 2 en laat dat toe; Bob
|
|
|
|
|
+geeft ze bewust op provincieniveau, dat scheelt veel werk). De app stopte die tid
|
|
|
|
|
+rechtstreeks in `plaatsen_bij_gemeente`, en dat geeft bij provincie én plaats een
|
|
|
|
|
+lege lijst → zie taak 125.
|
|
|
|
|
+
|
|
|
|
|
+De nieuwe versie geeft per recht de **volledig uitgeklapte keten** terug:
|
|
|
|
|
+`niveau` · `provincie_tid`/`_titel` · `gemeente_tid`/`_titel` ·
|
|
|
|
|
+`plaats_tid`/`_titel` · `keten` (`"provincie|gemeente|plaats"`, ontbrekende delen
|
|
|
|
|
+leeg) · `label` (bv. *"Noord-Brabant (hele provincie)"*). `tid`, `titel`,
|
|
|
|
|
+`parent_tid` en `parent_titel` blijven ongewijzigd staan, dus bestaande
|
|
|
|
|
+consumenten merken niets. Sortering is hiërarchisch i.p.v. alfabetisch op titel.
|
|
|
|
|
+
|
|
|
|
|
+Getest op productie onder een testnaam, alle drie de niveaus:
|
|
|
|
|
+
|
|
|
|
|
+| account | recht | `keten` |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| bobcity | 28694 Amsterdam (gemeente) | `28666\|28694\|` |
|
|
|
|
|
+| bobhoreca | 27409 Noord-Brabant (provincie) | `27409\|\|` |
|
|
|
|
|
+| Team Klein Frankrijk | 29912 Zuid-Holland (provincie) | `29912\|\|` |
|
|
|
|
|
+
|
|
|
|
|
+### 124 · Stadsrechten-cascade — app-deel · Eigenaar: nader te bepalen (na 123)
|
|
|
|
|
+
|
|
|
|
|
+De eerste dropdown in het *Waar*-blok van `stadsactiviteitAanmaken` moet de drie
|
|
|
|
|
+cascade-dropdowns voorvullen tot zover het recht reikt, in plaats van alleen
|
|
|
|
|
+`createGemeenteID` te zetten:
|
|
|
|
|
+
|
|
|
|
|
+| recht | voorvullen | gebruiker kiest nog |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| provincie | provincie | gemeente + plaats |
|
|
|
|
|
+| gemeente | provincie + gemeente | plaats |
|
|
|
|
|
+| plaats (oud) | alle drie | niets |
|
|
|
|
|
+
|
|
|
|
|
+**Stappen:** dropdown-waarde omzetten van `$[:].tid` naar **`$[:].keten`** (label
|
|
|
|
|
+op `$[:].label`), plus drie custom functions van **één** String-argument
|
|
|
|
|
+(`ketenProvincie` / `ketenGemeente` / `ketenPlaats` → `split('|')[n]`). Die ene
|
|
|
|
|
+parameter is bewust: een lookup op de hele respons vraagt een custom function met
|
|
|
|
|
+meerdere argumenten, en die binding loopt in de Action Flow Editor structureel
|
|
|
|
|
+vast (zie `CLAUDE.md`). On Selected → `Update Page State` voor
|
|
|
|
|
+`createProvincieID`/`createGemeenteID`/`createPlaatsID` + `Set Form Field` op de
|
|
|
|
|
+drie dropdowns.
|
|
|
|
|
+
|
|
|
|
|
+Een lege `Set Form Field`-waarde wordt geweigerd ("Value cannot be empty"), dus
|
|
|
|
|
+voor de lege delen van de keten is **Reset Form Fields** nodig — wat meteen de
|
|
|
|
|
+tweede helft van taak 126 afhandelt.
|
|
|
|
|
+
|
|
|
|
|
+**Voorvullen, niet verbergen** (besluit Bob 2026-09-20): met verbergen kun je
|
|
|
|
|
+achteraf niet meer wisselen zonder eerst de rechten-dropdown leeg te maken.
|
|
|
|
|
+
|
|
|
|
|
+### 125 · Crash: lege plaatsenlijst sloopt de Plaats-dropdown · Eigenaar: nader te bepalen
|
|
|
|
|
+
|
|
|
|
|
+`stadsactiviteit_aanmaken_widget.dart:1878` doet
|
|
|
|
|
+`(getJsonField(respons, r'$[:].plaatsid', true) as List?)!`. `getJsonField` geeft
|
|
|
|
|
+bij **0 matches `null`** — ook met `isForList: true`, want de `isEmpty`-check
|
|
|
|
|
+staat ervóór ([`flutter_flow_util.dart:356`]). Een lege respons `[]` geeft dus
|
|
|
|
|
+`Null check operator used on a null value`; in een release-build een grijs blok
|
|
|
|
|
+zonder melding.
|
|
|
|
|
+
|
|
|
|
|
+Treedt nu op bij elke provincie- of plaats-tid in `field_town_access`, maar staat
|
|
|
|
|
+**los van taak 123/124**: ook een gemeente zónder plaatsen in de taxonomie geeft
|
|
|
|
|
+dezelfde crash. Zelfde patroon staat op de **gemeente**- en **provincie**-dropdown
|
|
|
|
|
+van diezelfde pagina — alle drie langslopen.
|
|
|
|
|
+
|
|
|
|
|
+Fix: Generate-Dynamic-Children-achtige null-veiligheid via een **Predefined Path**
|
|
|
|
|
+op de API-call (`$[:]`, Is List) i.p.v. een JSON Path — dat genereert
|
|
|
|
|
+`(XCall.items(jsonBody)?.toList() ?? [])`. Recept staat in `CLAUDE.md`.
|
|
|
|
|
+
|
|
|
|
|
+### 126 · Stale `createPlaatsID` bij het wisselen van gemeente · Eigenaar: nader te bepalen
|
|
|
|
|
+
|
|
|
|
|
+Geen van de vier dropdowns in het *Waar*-blok reset de onderliggende. Scenario:
|
|
|
|
|
+kies gemeente A → plaats A₁ (`createPlaatsID` gezet) → wissel naar gemeente B.
|
|
|
|
|
+De Plaats-dropdown toont dan weer zijn hint (`FlutterFlowDropDown` filtert een
|
|
|
|
|
+waarde die niet in de opties zit weg, [`flutter_flow_drop_down.dart:101`]), maar
|
|
|
|
|
+`createPlaatsID` houdt **A₁** vast. De verzendknop blijft dus zichtbaar en je
|
|
|
|
|
+dient in voor de vorige plaats. Stil, geen foutmelding.
|
|
|
|
|
+
|
|
|
|
|
+Fix: `Reset Form Fields` + `Update Page State` (Reset Value) op de onderliggende
|
|
|
|
|
+velden in de On-Selected van provincie, gemeente én de rechten-dropdown. Overlapt
|
|
|
|
|
+met taak 124 — samen oppakken.
|
|
|
|
|
+
|
|
|
### 121 · 15 verweesde mappen in `lib/` · Eigenaar: Bob (Claude verwijdert niets)
|
|
### 121 · 15 verweesde mappen in `lib/` · Eigenaar: Bob (Claude verwijdert niets)
|
|
|
|
|
|
|
|
Gevonden 2026-09-20 bij het committen van de achterstallige working tree. Deze
|
|
Gevonden 2026-09-20 bij het committen van de achterstallige working tree. Deze
|