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 ?kboId ?ovo ?kboStructuredId ?ovoStructuredId ?bestuurseenheid 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 . } 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, kboId: binding.kboId?.value, adminUnit: binding.bestuurseenheid.value, kboUnit: binding.kboOrganisation?.value, }; } return null; } export async function getKboIdentifiers(administrativeUnit) { const queryStr = ` SELECT DISTINCT ?kboUnit ?abbUnit ?changeTime ?contactPointUri ?addressUri WHERE { VALUES ?g { } GRAPH ?g { ?kboUnit a ; ?uuid ; ?contactPointUri ; ?changeTime . ?contactPointUri ?addressUri . ?kboUnit ?abbUnit FILTER(?abbUnit = ${sparqlEscapeUri(administrativeUnit)}) } } `; 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 { kboUnit: binding.kboUnit?.value, abbUnit: binding.abbUnit?.value, changeTime: binding.changeTime?.value, contactPointUri: binding.contactPointUri?.value, addressUri: binding.addressUri?.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 getAllAbbKboOrganizations(){ let queryStr = ` SELECT ?kbo ?abbOrg ?kboOrg ?changeTime ?kboId where { GRAPH ?g { ?kboId ?kboStructuredId ; ?kboNotation . ?kboStructuredId a ; ?kbo . ?abbOrg ?kboId . FILTER (?kboNotation IN ("KBO nummer"@nl, "KBO nummer")) OPTIONAL{ ?kboOrg owl:sameAs ?abbOrg . ?kboOrg ?changeTime . } } VALUES ?g { } } ` const result = await query(queryStr); if (result.results.bindings.length) { const bindings = result.results.bindings; return bindings.map((binding) => { return { kbo: binding.kbo.value, abbOrg: binding.abbOrg.value, kboOrg: binding.kboOrg?.value, kboId: binding.kboId?.value, changeTime: binding.changeTime?.value, }; }); } return null; } export async function createNewKboOrg(kboOrg, kboId) { 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}`; const adressUuidId = uuid(); const adressUri = `http://data.lblod.info/id/adressen/${adressUuidId}`; let updateStr = ` INSERT { GRAPH ?g { ${sparqlEscapeUri(adressUri)} a ; ${sparqlEscapeString( adressUuidId )} ; ${sparqlEscapeString( kboOrg.formattedAddress )} . ${sparqlEscapeUri(contactPointUri)} a ; ${sparqlEscapeString( contactPointUuidId )} ; ${sparqlEscapeString( kboOrg.email )} ; ${sparqlEscapeString( kboOrg.phone )} ; ${sparqlEscapeString( "Kbocontact" )} ; ${sparqlEscapeString( kboOrg.website )} ; ${sparqlEscapeUri( adressUri )}. ${sparqlEscapeUri( newKboIdUri )} a ; ${sparqlEscapeString( newKboOrgIdUuId )} ; ${sparqlEscapeString( kboOrg.rechtsvorm )} ; ${sparqlEscapeString( kboOrg.shortName )} ; ${sparqlEscapeString( kboOrg.startDate )} ; ${sparqlEscapeString( kboOrg.organisationName )} ; ${sparqlEscapeString( kboOrg.formalName )} ; ${sparqlEscapeString( kboOrg.changeTime )} ; ${sparqlEscapeUri( kboId )} ; ${sparqlEscapeUri( kboOrg.activeState )} ; ${sparqlEscapeUri( contactPointUri )} . } }WHERE{ VALUES ?g { } } `; await update(updateStr); return newKboIdUri; } export async function updateKboOrg(newKboInfo, identifiers) { //update Adress let updateStr = ` DELETE{ GRAPH ?g{ ?adressUri a ; ?fulladdress . } } INSERT{ graph ?g{ ?adressUri a ; ${sparqlEscapeString(newKboInfo.formattedAddress)} . } } WHERE{ VALUES ?g { } GRAPH ?g { ?adressUri a ; ?fulladdress . FILTER(?adressUri = ${sparqlEscapeUri(identifiers.addressUri)}) } } `; await update(updateStr); //update ContactPoint updateStr = ` DELETE{ GRAPH ?g{ ?contact a ; ?email ; ?phone ; ?website . } } INSERT{ graph ?g{ ?contact a ; ${sparqlEscapeString( newKboInfo.email )} ; ${sparqlEscapeString( newKboInfo.phone )} ; ${sparqlEscapeString( newKboInfo.website )} . } } WHERE{ VALUES ?g { } GRAPH ?g { ?contact a ; ?email ; ?phone ; ?website . FILTER(?contact = ${sparqlEscapeUri(identifiers.contactPointUri)}) } } `; await update(updateStr); //update kboUnit updateStr = ` DELETE{ GRAPH ?g{ ?kboUnit a ; ?rechtsVorm ; ?shortName ; ?startDate ; ?orgName ; ?commercialName ; ?changeTime ; ?activeState . } }INSERT{ graph ?g{ ?kboUnit a ; ${sparqlEscapeString( newKboInfo.rechtsvorm )} ; ${sparqlEscapeString( newKboInfo.shortName )} ; ${sparqlEscapeString( newKboInfo.startDate )} ; ${sparqlEscapeString( newKboInfo.organisationName )} ; ${sparqlEscapeString( newKboInfo.formalName )} ; ${sparqlEscapeString( newKboInfo.changeTime )} ; ${sparqlEscapeUri( newKboInfo.activeState )} . } } WHERE{ VALUES ?g { } GRAPH ?g { ?kboUnit a ; ?rechtsVorm ; ?shortName ; ?startDate ; ?orgName ; ?commercialName ; ?changeTime ; ?activeState . FILTER(?kboUnit = ${sparqlEscapeUri(identifiers.kboUnit)}) } } `; await update(updateStr); } export async function linkAbbOrgToKboOrg(abbOrgUri, kboOrgUri) { let updateStr = ` INSERT { GRAPH ?g { ${sparqlEscapeUri( kboOrgUri )} ${sparqlEscapeUri(abbOrgUri)} . } }WHERE { VALUES ?g { } ${sparqlEscapeUri( kboOrgUri )} a . } `; await update(updateStr); } // Update queries: via mu-auth if it comes from the frontend ?