import { uuid, sparqlEscapeUri, sparqlEscapeString } from "mu"; import { querySudo as query, updateSudo as update } from '@lblod/mu-auth-sudo'; export async function getIdentifiers(kboStructuredIdUuid) { const queryStr = ` SELECT DISTINCT ?kbo ?ovo ?kboStructuredId ?ovoStructuredId ?bestuurseenheid ?kboOrganisation WHERE { VALUES ?g { } GRAPH ?g { ?kboStructuredId a ; ${sparqlEscapeString(kboStructuredIdUuid)} ; ?kbo . ?kboId ?kboStructuredId ; ?kboNotation . ?bestuurseenheid ?kboId . FILTER (?kboNotation IN ("KBO nummer"@nl, "KBO nummer")) OPTIONAL { ?bestuurseeheid ?ovoId . ?ovoId ?ovoStructuredId ; ?ovoNotation . OPTIONAL { ?ovoStructuredId ?ovo . } ?bestuurseenheid owl:sameAs ?kboOrganisation . FILTER (?ovoNotation IN ("OVO-nummer"@nl, "OVO-nummer")) } } } `; const result = await query(queryStr); if (result.results.bindings.length) { const binding = result.results.bindings[0]; // We should only have one KBO/OVO couple return { kbo: binding.kbo.value, kboStructuredId: binding.kboStructuredId.value, ovo: binding.ovo?.value, ovoStructuredId: binding.ovoStructuredId?.value, adminUnit: binding.bestuurseenheid.value, kboUnit: binding.kboOrganisation?.value } } return null; } export async function constructOvoStructure(kboStructuredId) { const idUuid = uuid(); const idUri = `http://data.lblod.info/id/identificatoren/${idUuid}` const structuredIdUuid = uuid(); const structuredIdUri = `http://data.lblod.info/id/gestructureerdeIdentificatoren/${structuredIdUuid}` const updateStr = ` INSERT { GRAPH ?g { ?bestuurseenheid ${sparqlEscapeUri(idUri)} . ${sparqlEscapeUri(idUri)} a ; ${sparqlEscapeString(idUuid)} ; "OVO-nummer" ; ${sparqlEscapeUri(structuredIdUri)} . ${sparqlEscapeUri(structuredIdUri)} a ; ${sparqlEscapeString(structuredIdUuid)} . } } WHERE { VALUES ?g { } GRAPH ?g { ${sparqlEscapeUri(kboStructuredId)} a ; ?kbo . ?kboId ${sparqlEscapeUri(kboStructuredId)} ; ?notation . ?bestuurseenheid ?kboId . FILTER (?notation IN ("KBO nummer"@nl, "KBO nummer")) } } `; await update(updateStr); return structuredIdUri; } export async function updateOvoNumberAndUri(ovoStructuredIdUri, wegwijsOvo) { let updateStr = ` DELETE { GRAPH ?g { ?bestuureseenheid ?ovoUri . ${sparqlEscapeUri(ovoStructuredIdUri)} ?ovo . } } `; if (wegwijsOvo) { updateStr += ` INSERT { GRAPH ?g { ?bestuureseenheid ${sparqlEscapeUri(`http://data.vlaanderen.be/id/organisatie/${wegwijsOvo}`)} . ${sparqlEscapeUri(ovoStructuredIdUri)} ${sparqlEscapeString(wegwijsOvo)} . } } `; } updateStr += ` WHERE { VALUES ?g { } GRAPH ?g { ${sparqlEscapeUri(ovoStructuredIdUri)} a . OPTIONAL { ?bestuureseenheid / ${sparqlEscapeUri(ovoStructuredIdUri)} ; ?ovoUri . } OPTIONAL { ${sparqlEscapeUri(ovoStructuredIdUri)} ?ovo . } } } `; await update(updateStr); } export async function getAllOvoAndKboCouples() { const queryStr = ` SELECT DISTINCT ?kbo ?ovo ?kboStructuredId ?ovoStructuredId WHERE { VALUES ?g { } GRAPH ?g { ?kboId ?kboStructuredId ; ?kboNotation . ?kboStructuredId a ; ?kbo . ?bestuurseeheid ?kboId . FILTER (?kboNotation IN ("KBO nummer"@nl, "KBO nummer")) OPTIONAL { ?bestuurseeheid ?ovoId . ?ovoId ?ovoStructuredId ; ?ovoNotation . OPTIONAL { ?ovoStructuredId ?ovo . } FILTER (?ovoNotation IN ("OVO-nummer"@nl, "OVO-nummer")) } } } `; const result = await query(queryStr); if (result.results.bindings.length) { const bindings = result.results.bindings; return bindings.map(binding => { return { kbo: binding.kbo.value, kboStructuredId: binding.kboStructuredId.value, ovo: binding.ovo?.value, ovoStructuredId: binding.ovoStructuredId?.value, } }); } return null; } export async function createRechtsVormStructure(){ } export async function createNewKboOrg(kboOrg ,kboNummer){ const newKboOrgIdUuId = uuid(); const newKboIdUri = `http://data.lblod.info/id/kboBestuurseenheden/${newKboOrgIdUuId}`; const contactPointUuidId = uuid(); const contactPointUri = `http://data.lblod.info/id/contact-punten/${contactPointUuidId}`; let updateStr = ` INSERT { GRAPH ?g { ${sparqlEscapeUri(contactPointUri)} a ; ${sparqlEscapeString(contactPointUuidId)} ; ${sparqlEscapeString(kboOrg.email)} ; ${sparqlEscapeString(kboOrg.phone)} ; ${sparqlEscapeString(kboOrg.website)}. ${sparqlEscapeUri(newKboIdUri)} a ; ${sparqlEscapeString(newKboOrgIdUuId)} ; ${sparqlEscapeString(kboOrg.rechtsvorm)} ; ${sparqlEscapeString(kboOrg.organisationName)} ; ${sparqlEscapeString(kboOrg.formalName)} ; ${sparqlEscapeString(kboOrg.changeTime)} ; ${sparqlEscapeUri(contactPointUri)} . } }WHERE{ VALUES ?g { } } ` await update(updateStr); return newKboIdUri; } export async function linkAbbOrgToKboOrg(abbOrgUri ,kboOrgUri){ let updateStr = ` INSERT { GRAPH ?g { ${sparqlEscapeUri(kboOrgUri)} ${sparqlEscapeUri(abbOrgUri)} . } }WHERE { VALUES ?g { } } ` await update(updateStr); } // Update queries: via mu-auth if it comes from the frontend ?