Chainwise Debiteurnummer Linker

Zoekt naar 'DebiteurNr' (robuust), extraheert de nummerieke waarde en verandert deze in een directe link naar Heldere Inzage.

// ==UserScript==
// @name         Chainwise Debiteurnummer Linker
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Zoekt naar 'DebiteurNr' (robuust), extraheert de nummerieke waarde en verandert deze in een directe link naar Heldere Inzage.
// @author       Gijs Hofman
// @match        https://heldertelecom.chainwisehosted.nl/modules/helpdesk/calls_vw.asp*
// @grant        none
// @run-at       document-idle
// ==/UserScript==
(function() {
    'use strict';

    // -----------------------------------------------------------
    // CONFIGURATIE
    // -----------------------------------------------------------
    // De gezochte tekst, opgeschoond (kleine letters, geen spaties)
    const DEBITEUR_LABEL_SCHOON = 'debiteurnr';
    const PORTAAL_BASE_URL = 'https://portal.helderinzage.nl/search/index_elastic';
    const SEARCH_PARAMS = '&inactive=0&search_subscriptions=0'; // Constante zoekparameters

    // -----------------------------------------------------------
    // HULPFUNCTIE
    // -----------------------------------------------------------

    /**
     * Maakt tekst schoon voor robuuste vergelijking:
     * Verwijdert whitespace, leestekens (:), en zet alles om naar kleine letters.
     */
    function cleanText(text) {
        if (!text) return '';
        // Verwijder alle whitespace, dubbele punten en zet om naar kleine letters
        return text.replace(/[\s\:]/g, '').toLowerCase();
    }

    /**
     * Zoekt in de DOM naar het debiteurnummer en maakt er een hyperlink van.
     */
    function linkDebiteurnummer() {
        console.log('Script "Chainwise Debiteurnummer Linker" start (v1.1)...');

        // Zoek naar alle cellen in het document
        const cells = document.querySelectorAll('td');

        for (const labelCell of cells) {
            // Stap 1: Controleer of de cel de debiteur label bevat (robuuste check)
            if (cleanText(labelCell.textContent) === DEBITEUR_LABEL_SCHOON) {

                // Stap 2: Zoek de direct volgende cel (waar de waarde staat)
                const valueCell = labelCell.nextElementSibling;

                if (valueCell && valueCell.tagName === 'TD') {
                    // Stap 3: Extract de nummerieke waarde (Debiteurnummer)
                    const rawValue = valueCell.textContent.trim();

                    // Gebruik RegEx om ALLEEN de eerste sequentie van cijfers te extraheren (robuust)
                    const match = rawValue.match(/\d+/);
                    const debiteurNummer = match ? match[0] : '';


                    if (debiteurNummer) {
                        // Stap 4: Creëer de volledige link
                        const fullUrl = `${PORTAAL_BASE_URL}?term=${debiteurNummer}${SEARCH_PARAMS}`;

                        console.log(`Gevonden DebiteurNr: ${debiteurNummer}. Nieuwe URL: ${fullUrl}`);

                        // Stap 5: Vervang de tekst door een hyperlink
                        const link = document.createElement('a');
                        link.href = fullUrl;
                        link.target = '_blank'; // Open in een nieuw tabblad
                        link.textContent = debiteurNummer;
                        link.style.fontWeight = 'bold'; // Optionele styling
                        link.style.color = '#007bff'; // Bootstrap/standaard blauwe link kleur

                        // Leeg de cel en voeg de link toe
                        valueCell.innerHTML = '';
                        valueCell.appendChild(link);
                        return; // We zijn klaar, de link is gemaakt, dus stoppen
                    }
                }
            }
        }
        console.log('Script voltooid: DebiteurNr niet gevonden of is niet numeriek.');
    }

    // Uitvoering
    linkDebiteurnummer();

})();