Zusatzattribute.psm1

# REST-Dokumentation siehe https://wiki.kalaidos.ch/x/zpi5Aw und https://wiki.kalaidos.ch/x/dZm5Aw

function New-ZusatzattributDefinitionWert-Object {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, Position = 0, HelpMessage = "Technischer Wert, der gespeichert wird")]
        [string]$Key,
        [Parameter(Mandatory, Position = 1, HelpMessage = "F�r den Benutzer sichtbarer Text")]
        [string]$Value,
        [Parameter()]
        [switch]$Default
    )
    process {
        return [PSCustomObject]@{
            Key = $Key;
            Value = $Value;
            IsDefault = [bool]$Default;
        }
    }
}

function New-ZusatzattributDefinition {
    [CmdletBinding()]
    param(
        [Parameter(HelpMessage = "WeeduUid der neuen Zusatzattribut-Definition (synthetische oder echte)")]
        $ZusatzattributDefinitionUid,
        [Parameter(Mandatory, HelpMessage = "Typ der Zusatzattribut-Definition")]
        [ValidateSet('DropdownZusatzattributDefinition','TextZusatzattributDefinition')]
        $Type,
        [Parameter(Mandatory, HelpMessage = "Bezeichnung der Zusatzattribut-Definition")]
        [string]$Bezeichnung,
        [Parameter(Mandatory, HelpMessage = "Name des Eingabefeldes in weedu")]
        [string]$Label,
        [Parameter(Mandatory, HelpMessage = "WQL-Ausdruck, der die Datens�tze angibt, auf welche das Zusatzattribut angewendet werden kann")]
        [string]$AnwendbarAuf,
        [Parameter(HelpMessage = "Wenn angegeben, so kann eine Person diesen Wert in einer Registrierungsaufforderung f�r sich selber erfassen")]
        [switch]$WertAufEigenerPersonSetzbar,

        # DropdownZusatzattributDefinition
        [Parameter(HelpMessage = "Liste von ausw�hlbaren Werten (k�nnen erstellt werden mit New-ZusatzattributDefinitionWert-Object)")]
        [array]$WerteListe,

        # TextZusatzattributDefinition
        [Parameter(HelpMessage = "Regul�rer Ausdruck, der g�ltige Eingabewerte beschreibt")]
        [string]$ValidierungsRegex,
        [Parameter(HelpMessage = "Beschreibung der g�ltigen Werte (wird dem Benutzer angezeigt)")]
        [string]$ValidierungsRegexBeschreibung,

        # Gemeinsame Parameter
        [Parameter]
        [int]$Sortierung,
        [Parameter(Mandatory, HelpMessage = "Sicherheitseinstellung (erstellt z.B. mit New-Sicherheitseinstellung-Object)")]
        [PSCustomObject]$SicherheitsEinstellung
    )
    process{
        $Body = [PSCustomObject]@{
            type = $Type;
            Bezeichnung = $Bezeichnung;
            Label = $Label;
            AnwendbarAuf = $AnwendbarAuf;
            SicherheitsEinstellung = $SicherheitsEinstellung;
        };
        if ($PSBoundParameters.ContainsKey("ZusatzattributDefinitionUid")) {
            $Body | Add-Member -MemberType NoteProperty -Name "uid" -Value (ConvertTo-WeeduGuid $ZusatzattributDefinitionUid);
        }
        if ($PSBoundParameters.ContainsKey("WertAufEigenerPersonSetzbar")) {
            $Body | Add-Member -MemberType NoteProperty -Name "WertAufEigenerPersonSetzbar" -Value $true;
        }
        if ($PSBoundParameters.ContainsKey("WerteListe")) {
            $Body | Add-Member -MemberType NoteProperty -Name "WerteListe" -Value $WerteListe;
        }
        if ($PSBoundParameters.ContainsKey("ValidierungsRegex")) {
            $Body | Add-Member -MemberType NoteProperty -Name "ValidierungsRegex" -Value $ValidierungsRegex;
        }
        if ($PSBoundParameters.ContainsKey("ValidierungsRegexBeschreibung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "ValidierungsRegexBeschreibung" -Value $ValidierungsRegexBeschreibung;
        }
        if ($PSBoundParameters.ContainsKey("Sortierung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Sortierung" -Value $Sortierung;
        }

        return Invoke-Weedu -Uri "rest/ZusatzattributDefinitionen" -Method POST -Body $Body;
    }
}

function Set-ZusatzattributDefinition {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "Uid der Zusatzattribut-Definition (synthetische oder echte)")]
        $ZusatzattributDefinitionUid,
        [Parameter(Mandatory, HelpMessage = "Typ der Zusatzattribut-Definition")]
        [ValidateSet('DropdownZusatzattributDefinition','TextZusatzattributDefinition')]
        $Type,
        [Parameter(HelpMessage = "Bezeichnung der Zusatzattribut-Definition")]
        [string]$Bezeichnung,
        [Parameter(HelpMessage = "Name des Eingabefeldes in weedu")]
        [string]$Label,
        [Parameter(HelpMessage = "WQL-Ausdruck, der die Datens�tze angibt, auf welche das Zusatzattribut angewendet werden kann")]
        [string]$AnwendbarAuf,
        [Parameter(HelpMessage = "Wenn angegeben, so kann eine Person diesen Wert in einer Registrierungsaufforderung f�r sich selber erfassen")]
        [bool]$WertAufEigenerPersonSetzbar,

        # DropdownZusatzattributDefinition
        [Parameter(HelpMessage = "Liste von ausw�hlbaren Werten (k�nnen erstellt werden mit New-ZusatzattributDefinitionWert-Object)")]
        [array]$WerteListe,

        # TextZusatzattributDefinition
        [Parameter(HelpMessage = "Regul�rer Ausdruck, der g�ltige Eingabewerte beschreibt")]
        [string]$ValidierungsRegex,
        [Parameter(HelpMessage = "Beschreibung der g�ltigen Werte (wird dem Benutzer angezeigt)")]
        [string]$ValidierungsRegexBeschreibung,

        # Gemeinsame Parameter
        [Parameter]
        [int]$Sortierung
    )
    process{
        $Body = [PSCustomObject]@{
            type = $Type;
        };
        if ($PSBoundParameters.ContainsKey("Bezeichnung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Bezeichnung" -Value $Bezeichnung;
        }
        if ($PSBoundParameters.ContainsKey("Label")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Label" -Value $Label;
        }
        if ($PSBoundParameters.ContainsKey("AnwendbarAuf")) {
            $Body | Add-Member -MemberType NoteProperty -Name "AnwendbarAuf" -Value $AnwendbarAuf;
        }
        if ($PSBoundParameters.ContainsKey("WertAufEigenerPersonSetzbar")) {
            $Body | Add-Member -MemberType NoteProperty -Name "WertAufEigenerPersonSetzbar" -Value $WertAufEigenerPersonSetzbar;
        }
        if ($PSBoundParameters.ContainsKey("WerteListe")) {
            $Body | Add-Member -MemberType NoteProperty -Name "WerteListe" -Value $WerteListe;
        }
        if ($PSBoundParameters.ContainsKey("ValidierungsRegex")) {
            $Body | Add-Member -MemberType NoteProperty -Name "ValidierungsRegex" -Value $ValidierungsRegex;
        }
        if ($PSBoundParameters.ContainsKey("ValidierungsRegexBeschreibung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "ValidierungsRegexBeschreibung" -Value $ValidierungsRegexBeschreibung;
        }
        if ($PSBoundParameters.ContainsKey("Sortierung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Sortierung" -Value $Sortierung;
        }

        return Invoke-Weedu -Uri "rest/ZusatzattributDefinitionen/{0}" -UriParams @(ConvertTo-WeeduGuid $ZusatzattributDefinitionUid) -Method PUT -Body $Body;
    }
}

function Get-ZusatzattributWert {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "Uid des Datensatzes, f�r den ein Zusatzattribut gesetzt werden soll")]
        $Uid,
        [Parameter(Mandatory, HelpMessage = "Uid der Zusatzattribut-Definition")]
        $ZusatzattributDefinitionUid
    )
    process{
        return Invoke-Weedu -Uri "rest/Generic/{0}/Zusatzattribute" -UriParams @(ConvertTo-WeeduGuid $Uid) -Method GET | Where-Object { $_.ZusatzattributDefinition -eq (ConvertTo-WeeduGuid $ZusatzattributDefinitionUid) } | ForEach-Object { $_.WertString };
    }
}

function Set-ZusatzattributWert {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "Uid des Datensatzes, f�r den ein Zusatzattribut gesetzt werden soll")]
        $Uid,
        [Parameter(Mandatory, HelpMessage = "Uid der Zusatzattribut-Definition")]
        $ZusatzattributDefinitionUid,
        [Parameter(Mandatory, HelpMessage = "Typ der Zusatzattribut-Definition")]
        [ValidateSet('DropdownZusatzattributDefinition','TextZusatzattributDefinition')]
        $Type,
        [Parameter(Mandatory, HelpMessage = "Zu setzender Wert (technischer Wert)")]
        [string]$Wert
    )
    process{
        $Body = [Array]@([PSCustomObject]@{
            ZusatzattributDefinition = (ConvertTo-WeeduGuid $ZusatzattributDefinitionUid);
            type = $Type;
            Wert = $Wert;
        });

        return Invoke-Weedu -Uri "rest/Generic/{0}/Zusatzattribute" -UriParams @(ConvertTo-WeeduGuid $Uid) -Method PUT -Body $Body;
    }
}

function Remove-ZusatzattributWert {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "Uid des Datensatzes, f�r den ein Zusatzattribut gesetzt werden soll")]
        $Uid,
        [Parameter(Mandatory, HelpMessage = "Uid der Zusatzattribut-Definition")]
        $ZusatzattributDefinitionUid,
        [Parameter(Mandatory, HelpMessage = "Typ der Zusatzattribut-Definition")]
        [ValidateSet('DropdownZusatzattributDefinition','TextZusatzattributDefinition')]
        $Type
    )
    process{
        $Body = [Array]@([PSCustomObject]@{
            ZusatzattributDefinition = (ConvertTo-WeeduGuid $ZusatzattributDefinitionUid);
            type = $Type;
            Wert = $null;
        });

        return Invoke-Weedu -Uri "rest/Generic/{0}/Zusatzattribute" -UriParams @(ConvertTo-WeeduGuid $Uid) -Method PUT -Body $Body;
    }
}



Export-ModuleMember -function New-ZusatzattributDefinitionWert-Object
Export-ModuleMember -function New-ZusatzattributDefinition
Export-ModuleMember -function Set-ZusatzattributDefinition
Export-ModuleMember -function Get-ZusatzattributWert
Export-ModuleMember -function Set-ZusatzattributWert
Export-ModuleMember -function Remove-ZusatzattributWert