Compare commits

...

19 Commits

Author SHA1 Message Date
Damon
de3bc6b0cd release v1.38.2 2026-02-20 10:03:39 +01:00
cecemel
dcb053b036 Merge pull request #586 from lblod/chore/add-related-organizations-report.js
Chore/add related organizations report.js
2026-02-19 16:31:27 +01:00
felix
d325d1b60d Update CHANGELOG.md 2026-02-19 16:30:54 +01:00
felix
d8ded9809a remove comments 2026-02-19 16:16:19 +01:00
felix
f9c5c74c00 added related organizations report 2026-02-19 16:12:11 +01:00
Damon
419c322e5e edit changelog 2026-02-11 09:29:32 +01:00
Damon
2c28259da4 bump frontend 2026-02-11 09:22:29 +01:00
Damon
4e145e67ff edit changelog 2026-02-11 09:21:47 +01:00
Damon
07d4dde49c edit changelog 2026-02-10 16:01:35 +01:00
Damon Kennes
8bf3549cce Merge pull request #585 from lblod/OP-3724-Aalter-can-be-selected-twice-in-editing-werkingsgebied-when-making-a-new-Politiezone
OP-3724: added (voor fusie) to the location labels for the old locati…
2026-02-06 13:35:59 +01:00
Damon
aa1272cf0d OP-3724: added (voor fusie) to the location labels for the old location for Deinze and Aalter 2026-02-06 09:59:15 +01:00
felix
fce61a1a2c Update CHANGELOG.md 2026-02-04 18:35:46 +01:00
felix
54067e925e bump addresseregister 2026-02-04 18:34:54 +01:00
Damon
d55ac1ae5a DL-7142: bump loket-error-alert-service 2026-02-04 09:43:52 +01:00
Boris De Vloed
bb1044f539 Merge pull request #576 from lblod/internal/remove-organizations-public-info-producer
Remove organizations public info producer - consumers have been removed in downstream applications
2026-02-03 09:58:46 +01:00
Boris De Vloed
f982e63a7e remove duplicate line form merge 2026-02-03 09:56:49 +01:00
Boris De Vloed
b41b7ee81e Merge branch 'development' into internal/remove-organizations-public-info-producer 2026-02-03 09:49:56 +01:00
Claire Lovisa
bd62954cae Merge branch 'development' into internal/remove-organizations-public-info-producer 2025-10-24 15:43:48 +02:00
Claire Lovisa
11817eac09 Remove organizations-public-info producer 2025-10-24 15:41:18 +02:00
12 changed files with 224 additions and 94 deletions

View File

@@ -1,4 +1,26 @@
# Changelog
## 1.38.2 (2026-02-20)
### Backend
- Remove deprecated organizations-public-info producer [OP-3581]
- bump loket-error-alert-service [DL-7142]
- bump adressenregister [OP-3721]
- Aalter can be selected twice in editing "werkingsgebied" when making a new Politiezone [OP-3724]
- bump frontend [OP-3726]
- Add related organizations report to report generation service [OP-3739]
### Deploy instructions
```
# removing producer
drc restart dispatcher delta-producer-dump-file-publisher delta-producer-background-jobs-initiator delta-producer-publication-graph-maintainer jobs-controller migrations cache
drc up -d publication-triplestore-migrations error-alert adressenregister frontend
rm -r data/files/deltas/organizations-public-info
rm -r data/files/delta-producer-dumps/dump-organizations-public-info
# new related organizations report
drc pull report-generation; drc up -d report-generation
```
### Deploy instructions
## 1.38.1 (2026-01-30)
### General
- Bump frontend to v1.36.3 [OP-3428]
@@ -91,6 +113,7 @@ drc pull frontend && drc up -d frontend
### Deploy notes
```
# cleanup job
drc restart migrations
drc exec db-cleanup curl -X GET "http://localhost/runCronJob?cronJobID=8ffd9f11-db25-430d-a66a-31fc8b393d5f"
```

View File

@@ -19,16 +19,6 @@
"cronPatternHealingJob": "0 0 4 * * *",
"startInitialSync": true
},
{
"name": "organizations-public-info",
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
"dumpFileCreationJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/organizations-public-info",
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info",
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations-public-info",
"cronPatternDumpJob": "27 */4 * * *",
"cronPatternHealingJob": "0 0 4 * * *",
"startInitialSync": true
},
{
"name": "worship-posts",
"jobsGraph": "http://mu.semte.ch/graphs/jobs",

View File

@@ -17,24 +17,6 @@
"targetFilesGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-deltas",
"cleanupOldDumps": true
},
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/organizations-public-info": {
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/OrganizationsPublicInfoCacheGraphDump",
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-public-info",
"fileBaseName": "dump-organizations-public-info",
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
"cleanupOldDumps": true
},
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info": {
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/OrganizationsPublicInfoCacheGraphDump",
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-public-info",
"fileBaseName": "dump-organizations-public-info",
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
"cleanupOldDumps": true
},
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/public": {
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/PublicCacheGraphDump",
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/public",

View File

@@ -44,29 +44,6 @@
"loginPath": "/public/login",
"logOutgoingDelta": true
},
"organizations-public-info": {
"deltaInterval": 10000,
"errorCreatorUri": "http://lblod.data.gift/services/delta-producer-publication-graph-maintainer-organizations-public-info",
"exportConfigPath": "/config/organizations-public-info/export.json",
"filesPath": "/organizations-public-info/files",
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations-public-info",
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info",
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
"publicationGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-public-info",
"publisherUri": "http://data.lblod.info/services/delta-production-json-diff-file-manager/organizations-public-info",
"queuePollInterval": 3000,
"relativeFilePath": "/deltas/organizations-public-info",
"serveDeltaFiles": true,
"skipMuAuthInitialSync": true,
"skipMuAuthHealing": true,
"useFileDiff": true,
"healingInitialBatchSizeInsert": 1000,
"healingPatchPublicationGraphTaskOperation": 500,
"useVirtuosoForExpensiveSelects": true,
"errorGraph": "http://mu.semte.ch/graphs/jobs",
"loginPath": "/organizations-public-info/login",
"logOutgoingDelta": true
},
"worship-posts": {
"deltaInterval": 10000,
"errorCreatorUri": "http://lblod.data.gift/services/delta-producer-publication-graph-maintainer-worship-posts",

View File

@@ -441,14 +441,6 @@ defmodule Dispatcher do
Proxy.forward conn, path, "http://delta-producer-publication-graph-maintainer/organizations/files/"
end
#################################################################
# DELTA: organizations-public-info
#################################################################
get "/sync/organizations-public-info/files/*path" do
Proxy.forward(conn, path, "http://delta-producer-publication-graph-maintainer/organizations-public-info/files/")
end
#################################################################
# DELTA: public
#################################################################

View File

@@ -63,38 +63,6 @@
}
]
},
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info": {
"tasksConfiguration": [
{
"currentOperation": null,
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/initialPublicationGraphSyncing",
"nextIndex": "0"
},
{
"currentOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/initialPublicationGraphSyncing",
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/deltaDumpFileCreation",
"nextIndex": "1"
}
]
},
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations-public-info": {
"tasksConfiguration": [
{
"currentOperation": null,
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/healing/patchPublicationGraph",
"nextIndex": "0"
}
]
},
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/organizations-public-info": {
"tasksConfiguration": [
{
"currentOperation": null,
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/deltaDumpFileCreation",
"nextIndex": "0"
}
]
},
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/public": {
"tasksConfiguration": [
{

View File

@@ -0,0 +1,44 @@
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX prov: <http://www.w3.org/ns/prov#>
DELETE {
GRAPH ?g {
?aalter rdfs:label ?label .
}
} INSERT {
GRAPH ?g {
?aalter rdfs:label "Aalter (voor fusie)" .
}
} WHERE {
GRAPH ?g {
?aalter a prov:Location ;
rdfs:label ?label .
VALUES ?aalter {
<http://data.lblod.info/id/werkingsgebieden/7a7daa48e9e6449358cf96be6c7b30466648d31236e56b8958fae7d53e2308b8>
}
}
}
;
DELETE {
GRAPH ?g {
?deinze rdfs:label ?label .
}
} INSERT {
GRAPH ?g {
?deinze rdfs:label "Deinze (voor fusie)" .
}
} WHERE {
GRAPH ?g {
?deinze a prov:Location ;
rdfs:label ?label .
VALUES ?deinze {
<http://data.lblod.info/id/werkingsgebieden/a567b3fdb462a8513ffeeff0188317003c5bbb7debb8f1ea9245b83e1d43b437>
}
}
}

View File

@@ -0,0 +1 @@
CLEAR GRAPH <http://redpencil.data.gift/id/deltas/producer/organizations-public-info>

View File

@@ -1,5 +1,7 @@
import OrganizationsReport from './organizations-report'
import RelatedOrganizationsReport from './related-organizations-report'
export default [
OrganizationsReport,
RelatedOrganizationsReport,
];

View File

@@ -0,0 +1,137 @@
import { generateReportFromData, batchedQuery } from "../helpers.js";
import { PREFIXES } from "./utils";
export default {
cronPattern: "0 00 4 * * *",
name: "relatedOrganizations",
execute: async () => {
const reportData = {
title: "related organizations",
description: "List of related Organizations and their relationships",
filePrefix: "exports/related-organizations",
};
console.log("Generating related organizations report");
const queryString = `
${PREFIXES}
SELECT DISTINCT
?role_label_renamed
?organization
?organization_label
?organization_classification_label
?organization_status_label
?organization_kbo_number
?related_organization
?related_organization_label
?related_organization_classification_label
?related_organization_status_label
?related_organization_kbo_number
WHERE {
{
?membership org:member ?organization ;
org:role ?role ;
org:organization ?related_organization .
?role skos:prefLabel ?role_label .
BIND(
IF(?role_label = "participant", "Participeert in",
IF(?role_label = "stichtend lid", "Is oprichter van",
IF(?role_label = "gerelateerd", "Heeft een relatie met",
?role_label)))
AS ?role_label_renamed
)
}
UNION
{
?membership org:member ?related_organization ;
org:role ?role ;
org:organization ?organization .
?role skos:prefLabel ?role_label .
BIND(
IF(?role_label = "participant", "Heeft als participanten",
IF(?role_label = "stichtend lid", "Werd opgericht door",
IF(?role_label = "gerelateerd", "Heeft een relatie met",
?role_label)))
AS ?role_label_renamed
)
}
?organization a org:Organization ;
skos:prefLabel ?organization_label ;
regorg:orgStatus ?organization_status .
OPTIONAL { ?organization_status skos:prefLabel ?organization_status_label . }
?organization org:classification ?organization_classification .
?organization_classification skos:prefLabel ?organization_classification_label .
?related_organization skos:prefLabel ?related_organization_label ;
regorg:orgStatus ?related_organization_status .
OPTIONAL { ?related_organization_status skos:prefLabel ?related_organization_status_label . }
?related_organization org:classification ?related_organization_classification .
?related_organization_classification skos:prefLabel ?related_organization_classification_label .
OPTIONAL {
?organization adms:identifier ?identifier1 .
?identifier1 skos:notation "KBO nummer" ;
generiek:gestructureerdeIdentificator ?id1 .
?id1 generiek:lokaleIdentificator ?organization_kbo_number .
}
OPTIONAL {
?related_organization adms:identifier ?identifier2 .
?identifier2 skos:notation "KBO nummer" ;
generiek:gestructureerdeIdentificator ?id2 .
?id2 generiek:lokaleIdentificator ?related_organization_kbo_number .
}
}
ORDER BY ?organization
`;
const queryResponse = await batchedQuery(queryString);
const data = queryResponse.results.bindings.map((row) => ({
role_label_renamed: getSafeValue(row, "role_label_renamed"),
organization: getSafeValue(row, "organization"),
organization_label: getSafeValue(row, "organization_label"),
organization_classification_label: getSafeValue(row, "organization_classification_label"),
organization_status_label: getSafeValue(row, "organization_status_label"),
organization_kbo_number: getSafeValue(row, "organization_kbo_number"),
related_organization: getSafeValue(row, "related_organization"),
related_organization_label: getSafeValue(row, "related_organization_label"),
related_organization_classification_label: getSafeValue(row, "related_organization_classification_label"),
related_organization_status_label: getSafeValue(row, "related_organization_status_label"),
related_organization_kbo_number: getSafeValue(row, "related_organization_kbo_number"),
}));
await generateReportFromData(
data,
[
"role_label_renamed",
"organization",
"organization_label",
"organization_classification_label",
"organization_status_label",
"organization_kbo_number",
"related_organization",
"related_organization_label",
"related_organization_classification_label",
"related_organization_status_label",
"related_organization_kbo_number",
],
reportData,
);
},
};
function getSafeValue(entry, property) {
return entry[property] ? wrapInQuote(entry[property].value) : null;
}
// Some values might contain commas; wrapping them in escapes quotes doesn't disrupt the columns.
function wrapInQuote(value) {
return `\"${value}\"`;
}

View File

@@ -19,6 +19,8 @@ services:
restart: "no"
migrations-triggering-indexing:
restart: "no"
publication-triplestore-migrations:
restart: "no"
resource:
restart: "no"
cache:

View File

@@ -78,6 +78,16 @@ services:
- "logging=true"
restart: always
logging: *default-logging
publication-triplestore-migrations:
image: semtech/mu-migrations-service:0.9.0
links:
- publication-triplestore:database
volumes:
- ./config/publication-triplestore-migrations:/data/migrations
labels:
- "logging=true"
restart: always
logging: *default-logging
resource:
image: semtech/mu-cl-resources:1.24.0
environment:
@@ -196,13 +206,13 @@ services:
links:
- db:database
adressenregister:
image: lblod/adressenregister-fuzzy-search-service:0.8.0
image: lblod/adressenregister-fuzzy-search-service:0.8.2
labels:
- "logging=true"
restart: always
logging: *default-logging
frontend:
image: lblod/frontend-organization-portal:1.36.3
image: lblod/frontend-organization-portal:1.36.4
volumes:
- ./config/frontend/add-x-frame-options-header.conf:/config/add-x-frame-options.conf
environment:
@@ -627,7 +637,9 @@ services:
logging: *default-logging
error-alert:
image: lblod/loket-error-alert-service:1.0.0
image: lblod/loket-error-alert-service:1.0.1
environment:
APP_NAME: 'OP'
volumes:
- ./config/error-alert:/config/
links: