Project

General

Profile

Project activity #29406

open

Project activity #28068: Rollen maken voor Tezza | O.b.v. de huidige 4 Alfresco-rollen, omwille dat klanten het beter kunnen beheren

Project activity #28339: Nieuwe autorisatieprofielen maken voor Tezza

Migratie script

Added by Tahir Malik 8 months ago. Updated about 2 months ago.

Status:
Ready in Acc
Priority:
P4 Normal
Assignee:
Category:
-
Target version:
Start date:
30/01/2025
Due date:
% Done:

100%

Estimated time:
(Total: 0.00 h)

Description

Onderdeel van dit mini-project is ook de migratie-script om alle Zaken uit de Zaken site te migreren naar de eigen sites voor bestaande klanten

Objecten Script in JavaScript-Console
Ik wil graag een migratiescript ook voor Objecten zoals ik dat ook voor de Zaaktypes heb.

Groepen Script in JavaScript-Console
  • Alle members van de ZT Groepen moeten site_<Zaaktype>_contributor
    • Contributor rechten zijn nodig voor de claimen functionaliteit + Groepswerkvoorraad
  • Alle members van de objecten site_<ObjectType>_contributor
  • We gaan allen de directe members, dus geen custom groepen migreren
Cleanup Script in JavaScript-Console
  • Verwijderen van de ZT Groepen
    • Rekening houden met UUID of ZT Identificatie
  • Verwijderen van de TEZZA groepen

Graag dit stukje opnemen in de Documentatie van Tezza:
https://git.contezza.nl/develop/products/tezza-services/-/blob/release/2.28/docs/src/docs/asciidoc/includes/_migration_authorization_structure.adoc?ref_type=heads


Files

clipboard-202501081405-244qg.png (215 KB) clipboard-202501081405-244qg.png Tjerk Vaags, 08/01/2025 02:05 PM

Subtasks 2 (0 open2 closed)

Project activity #30785: Toevoegen noVersionBasePath instructie aan migratie documentatieResolvedErik Hoogland30/01/2025

Actions
Project activity #31346: Toevoegen van api.serviceAccount.username aan site_tezza_SiteManager groep binnen migratiescriptResolvedRick de Rooij24/03/2025

Actions
Actions #2

Updated by Bram Geerlings 7 months ago

  • Assignee changed from Roel Vestering to Tjerk Vaags
Actions #3

Updated by Tjerk Vaags 7 months ago

Test aanpak:

  • opstarten main tezza services + workspace
  • aanmaken zaken via tezza app of script
  • opstarten tezza services branch gerelateerd aan #29270
  • testen onderstaand migratiescript
Aanpassing:
  • batchExecuter toevoegen
  • groepen functie bij create site
Actions #4

Updated by Tjerk Vaags 7 months ago · Edited

Script om dummy zaken aan te maken op site 'zaken'

// Catalogus VR
var catalogusUrl = "http://openzaak.local:8000/catalogi/api/v1/catalogussen/3a87bb4c-6876-43a0-bfbf-1c5c960ecf28";
var siteNode = getZakenSite();

if (siteNode == null) {
    throw "Site 'zaken' does not exists." 
}

//createZaken(catalogusUrl, siteNode);

function createZaken(catalogusUrl, siteNode) {
    var zaakTypen = ztc.zaaktypeList(catalogusUrl, null, null, null);

    for each(zaaktype in zaakTypen){
        var randomTimes = Math.floor(Math.random() * 10) + 1;
        for (var i = 0; i < randomTimes; i++) {
            zaakBody = createZaakBody(zaaktype);
            createZaak(zaakBody, siteNode);
        }
    }
}

function createZaak(data, siteNode) {
    var action = actions.create("zaakCreate");

    for (var i in data) {
        var value = data[i];
        action.parameters[i] = value;
    }

    action.execute(siteNode.getNodeRef());

    result = apiUtils.getActionResult(action);
    print(result);
}

function createZaakBody(zaaktype) {
    var body = {};
    body.betalingsindicatie = null;
    body.bronorganisatie = "002220647";
    body["create-initiator"] = false;
    body.omschrijving = "Testzaak " + Math.floor(Math.random() * 999999);
    body.resultType = "zaakInfo";
    body.startdatum = "";
    body.team = null; 
    body.toelichting = "Dit is zaak gebaseerd op zaaktype: " + zaaktype.getOmschrijving();
    body.verantwoordelijkeOrganisatie = "002220647";
    body.vertrouwelijkheidaanduiding = null;
    body.zaaktype = zaaktype.getUrl();

    return body;
}

function getZakenSite() {
  var query = {    
    query: "TYPE:'st:site' AND name:'zaken'",
    language: "fts-alfresco",
    page: {
      maxItems: 1,
      skipCount: 0,
    },
  };

  return search.query(query)[0];
}

Actions #5

Updated by Tjerk Vaags 7 months ago · Edited

@Bram Geerlings Script aangepast. Kwam erachter dat onderstaand stuk niet op elke omgeving hetzelfde is. Loop nog tegen het issue aan dat het aanmaken van de site niet wilt. Blijf een index error terugkrijgen. Oftewel, bij de getNodeRef geeft het '09233662 Site ZTMeldingOpenbareRuimte does not exist' terug.

Voor de rest zou je de test kunnen opbouwen door het volgende te doen

Niet op elke omgeving hetzelfde

var zaaktypenFolders = site.node.children[0].children[2].children;

for each(zaaktypeFolder in zaaktypenFolders){
    var zaaktypeId = null;
    var zaaktypeUrl = zaaktypeFolder.children[0].children[0].children[0].properties["tza:zaaktypeUrl"];
    var zaaktypeContainer = zaaktypeFolder.children[0];

Aangepast script

var dryRun = false;
var zaaktypeSiteCreate = false;
var moveZaken = true;
var zaaktypeIdentificaties = getZaaktypeIdentificaties();

for each(identificatie in zaaktypeIdentificaties){
    logger.log("Creating site for: "+  identificatie);
    var zaakType = ztc.zaaktypeList(null, identificatie, "definitief", null)[0];

    //var currentUserGroup = Huidige user(group)s bij zaaktype.identificatie ophalen.     
    if(!dryRun && !zaaktypeSiteCreate){
        siteHelper.createSite(zaaktype.getIdentificatie(), zaaktype.getOmschrijving(), zaaktype.getOmschrijving(), "ZAAK");
        //  currentCurrentUsergroup    toevoegen aan site_zaaktype_Collaborator group    
    }

    var results = getZakenOfZaaktype(identificatie);
    for each (var result in results) {
        var zaak = zrc.getZaak(result.getId());

        if(!dryRun && !moveZaken){
            var identificatieCleaned = identificatie.replace(/[\s\W_-]/g, "");
            var docLib = siteService.getSite(identificatieCleaned).getContainer("document-library");

            if (docLib == null) {
                throw "Site '" + identificatieCleaned + "' does not exists." 
            }

            logger.log("Moving: " + zaak.getIdentificatie());

            //create folderstructure
            var registratieDatum = zaak.getRegistratiedatum();
            var targetFolder = apiUtils.createFolderStructure(docLib, registratieDatum.getYear() + "/" + registratieDatum.getMonth())
            result.move(targetFolder);    
        }
    }
}

function getZakenOfZaaktype(identificatie) {
    var zaakTypen = ztc.zaaktypeList(null, identificatie, null, null);
    var zaken = [];

    for each(zaaktype in zaakTypen){
        var q = {
            language: "fts-alfresco",
            query: "TYPE:'cm:folder' AND =tza:zaaktypeUrl:'" + zaaktype.getUrl() + "' AND ASPECT:'tza:zaak' AND NOT ASPECT:'stuf:zkn' AND NOT TYPE:'rma:recordFolder'" 
        };

        results = search.query(q);

        for each (var result in results) {
            zaken.push(result);
        }
    }

    return zaken;
}

function getZaaktypeIdentificaties() {
    var zaakTypen = ztc.zaaktypeList(null, null, "definitief", null);
    var identificaties = [];

    for each(zaaktype in zaakTypen){
       identificaties.push(zaaktype.getIdentificatie()); 
    }

    return identificaties;
}

Actions #6

Updated by Tjerk Vaags 7 months ago

  • Assignee changed from Tjerk Vaags to Bram Geerlings
Actions #7

Updated by Bram Geerlings 6 months ago

  • Status changed from Backlog to In Progress
Actions #8

Updated by Bram Geerlings 6 months ago

var dryRun = false;
var moveZaken = true;
var zaaktypen = getZaaktypen();
var zakenSite = siteService.getSite("Zaken");

for each(zaaktype in zaaktypen){

    if(!dryRun) {
        logger.log("Attempting to get site for: " + zaaktype.getIdentificatie());
        var existingSite = siteService.getSite(siteHelper.getCleanSiteShortName(zaaktype.getIdentificatie()))
        if (existingSite) {
            logger.log("Site for identificatie: '" + zaaktype.getIdentificatie() + "' found");
            targetSite = existingSite.getNode();

        } else {
            logger.log("Creating site for: " + zaaktype.getIdentificatie());
            targetSite = siteHelper.createSite(zaaktype.getIdentificatie(), zaaktype.getOmschrijving(), zaaktype.getOmschrijving(), "ZAAK");

        }
    }    

    var zaaktypeFolderCurrent = zakenSite.getContainer("documentLibrary").childByNamePath("Zaken/" + zaaktype.getOmschrijving());

    if(zaaktypeFolderCurrent != null) {
    var zakenFolder = targetSite.childByNamePath("documentLibrary/Zaken");
        if (zakenFolder == null) {
            zakenFolder = targetSite.childByNamePath("documentLibrary").createNode("Zaken", "cm:folder");
        }

        if (!dryRun) {
            for each(var child in zaaktypeFolderCurrent.children) {
                traverse(child, zakenFolder, 0);
            }

        }
    }
}

function traverse(child, folder, depth) {

    var lookupName = child.getDisplayPath() + "/" + child.name;
    var parts = lookupName.split("/");
    var currentPart = parts.slice(parts.length - (depth + 1), parts.length).join("/");

    var existingFolder = folder.childByNamePath(currentPart);

    if (existingFolder != null) {
        for each(var childFolder in child.children) {
            traverse(childFolder, folder, depth + 1);
        }
    } else {
        var targetparts = child.getDisplayPath().split("/");
        var targetFolderPath = targetparts.slice(targetparts.length - depth, targetparts.length).join("/");
        var targetFolder = folder.childByNamePath(targetFolderPath);
        print(child.displayPath + "/" + child.name);
        print(targetFolder.displayPath + "/" + targetFolder.name);
        logger.log("Moving '" + child.name + "' from " + child.displayPath + "/" + " into " + targetFolder.displayPath + "/" + targetFolder.name);
        child.move(targetFolder);
    }
}

function getZaaktypen() {
    var zaakTypen = ztc.zaaktypeList(null, null, "definitief", null);
    var zaaktypenDefinitief = [];
    for each(zaaktype in zaakTypen){
        zaaktypenDefinitief.push(zaaktype);
    }
    return zaaktypenDefinitief;
}
Actions #9

Updated by Tahir Malik 5 months ago

  • Description updated (diff)
  • Priority changed from P4 Normal to P3 High
  • Target version changed from Contezza Development Backlog to Tezza 2024.12
Actions #10

Updated by Tahir Malik 5 months ago

  • Description updated (diff)
Actions #11

Updated by Tahir Malik 5 months ago

  • Description updated (diff)
Actions #12

Updated by Bram Geerlings 5 months ago

Merge request voor Objecttype sites migratie script zit in
https://git.contezza.nl/develop/products/tezza-services/-/merge_requests/72

Actions #13

Updated by Bram Geerlings 5 months ago

  • Assignee changed from Bram Geerlings to Rick de Rooij
Actions #14

Updated by Erik Hoogland 5 months ago

Nog een bevinding vanuit amsterdam-workspace: als er eerst een script wordt gedraaid wat de Objecttype sites aanmaakt, zal het migratie script de zaken uit Objecten site niet verplaatsen.

Actions #15

Updated by Erik Hoogland 4 months ago

  • Assignee changed from Rick de Rooij to Erik Hoogland
Actions #16

Updated by Erik Hoogland 4 months ago

  • Status changed from In Progress to Ready in Dev
  • Assignee changed from Erik Hoogland to Tjerk Vaags
Actions #17

Updated by Tahir Malik 4 months ago

  • Target version changed from Tezza 2024.12 to Tezza 2025.01
Actions #18

Updated by Tjerk Vaags 4 months ago

Twee tests gedaan.

Test 1:
  • Objecten aangemaakt op de oude manier obv van Main branch
  • Overstappen naar andere test branch voor tezza services
  • Setup-script gedraaid
  • Migratie-script gedraaid
  • Objecten zijn succesvol verplaats naar desbetreffende sites
Test 2:
  • Objecten aangemaakt op de oude manier obv van Main branch
  • Overstappen naar andere test branch voor tezza services
  • Setup-script niet gedraaid
  • Migratie-script gedraaid
  • Nieuwe objecten-sites worden aangemaakt als ze niet bestaan.
  • Objecten zijn succesvol verplaats naar desbetreffende sites

Bevinding:
Oude folderstructuur blijft bestaan als het leeg is. De vraag is of de site 'Objecten' überhaupt moet blijven bestaan.

Actions #19

Updated by Tjerk Vaags 4 months ago

  • Status changed from Ready in Dev to Feedback
  • Assignee changed from Tjerk Vaags to Erik Hoogland
Actions #20

Updated by Erik Hoogland 4 months ago

  • Assignee changed from Erik Hoogland to Bram Geerlings

@Bram Geerlings Kan jij mog even naar de cleanup kijken?

Actions #21

Updated by Erik Hoogland 4 months ago

  • Status changed from Feedback to Ready in Dev
  • Assignee changed from Bram Geerlings to Rick de Rooij

Heb het volledige migratie proces getest vanuit tezza-workspace, wisselend tussen tezza-services 2.27.1 (oude situatie) en 2.27.3-SNAPSHOT (Nieuwe situatie)

De volgende aanpassingen zijn nog gedaan, waarna het akkoord is:
  • Bij migratiescript zaken, zorgen dat er een Zaken folder wordt aangemaakt bij een albestaande zaaktype site
  • Verwijderen onnodig hoofdstuk 'Migratie zaaktypegroepen'
  • Hoofdstuk 'Migratie autorisatiestructuur' onder bijlage hernoemd naar 'Migratie autorisatiegroepen' om verwarring met ander hoofdstuk met zelfde naam te voorkomen
    • link naar dit hoofdstuk onder 'Migratie zaken en objecten' is ook aangepast
Actions #22

Updated by Rick de Rooij 4 months ago

  • Status changed from Ready in Dev to Ready in Acc
Actions #23

Updated by Erik Hoogland 3 months ago

  • Subtask #30785 added
Actions #24

Updated by Tahir Malik 3 months ago

  • Target version changed from Tezza 2025.01 to Tezza 2025.02
Actions #26

Updated by Rick de Rooij 2 months ago

  • Assignee changed from Rick de Rooij to Tahir Malik
  • Target version changed from Tezza 2025.02 to Tezza 2025.03
Actions #28

Updated by Tahir Malik about 2 months ago

  • Assignee changed from Tahir Malik to Juri Balradj
Actions #30

Updated by Juri Balradj about 2 months ago

  • Assignee changed from Juri Balradj to Tahir Malik
Actions #31

Updated by Tjerk Vaags about 2 months ago

  • Subtask #31346 added

Also available in: Atom PDF