Skip to main content

Übergabe jeder Bestellnummer Alternative als kommaseparierte Liste

Um jede Bestellnummer Alternative in einer kommaseparierten Liste als Rechnungskopffeld zu übergeben folgende Erweiterungen hinzufügen:

function allOrderNumbersInHeadField(xDoc $xDoc, Logger $logger, string $originHeadField): void
{
    $head = $xDoc->getDocumentFieldByName($originHeadField);
 
    $head->alternatives = getUniqueAlternatives($head, $logger);
    if (count($head->alternatives) > 1) {
        $head->getValue()->value = '';
        $head->getValue()->text = '';
        $strOrdernr = '';
        foreach ($head->alternatives as $alternative) {
            $strOrdernr .= ',' . $alternative->value;
        }
        $strOrdernr = ltrim($strOrdernr, ",");
        $head->getValue()->value = $strOrdernr;
        $head->getValue()->text = $strOrdernr;
    }
}

/**
* @param xDocumentField $field
* @param Logger $logger
* @return xDocumentField[]
*/
function getUniqueAlternatives(xDocumentField $field, Logger e$logger): array
{
    // ==========================================================
    // Only keep unique alternatives
    // ==========================================================
    $tmpStore = [];
    $uniqueAlternatives = [];
    $logger->debug('The field ' . $field->name . ' has ' . count($field->alternatives) . ' alternatives');
    foreach ($head->alternatives as $alternative) {
        $logger->debug('Alternative = ' . $alternative->value);
        if (!in_array($alternative->value, $tmpStore)) {
            $logger->debug('Alternative will be kept ' . $alternative->value);
            $tmpStore[] = $alternative->value;
            $uniqueAlternatives[] = $alternative;
        }
    }

    if (count($uniqueAlternatives) > 0) {
        $field->alternatives = $uniqueAlternatives;
    }

    return $field->alternatives;
}

Aufruf der Funktion per:

allOrderNumbersInHeadField($xDoc, $logger, "OrderNumber");