Produktstamm.psm1

function New-Produkt {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "Zulässige Produkt-Typen: ProduktOhneLieferung, ProduktAuslieferbar, ProduktBuendel")]
        [string]$ProduktTyp,
        [Parameter(Mandatory)]
        [string]$Bezeichnung,
        [Parameter(Mandatory, HelpMessage = "Sicherheitseinstellung (erstellt z.B. mit New-Sicherheitseinstellung-Object)")]
        [PSCustomObject]$SicherheitsEinstellung,
        [string]$Beschreibung,
        [string]$Kurzbeschreibung,
        [string]$AdminHinweis,
        [boolean]$IstEinzelnBestellbar,
        [Parameter(HelpMessage = "Format: 2019-02-01T00:00")]
        $VerfuegbarAb,
        [Parameter(HelpMessage = "Format: 2019-02-01T00:00")]
        $VerfuegbarBis,
        [int]$BestellmengeMinimal,
        [int]$BestellmengeMaximal,
        [Parameter(HelpMessage = "Format: Komma-separierte Liste, z.B. 10, 20, 30")]
        [int[]]$ZulaessigeBestellmengen,
        [decimal]$MaximumKundenPreis,
        [decimal]$MinimumKundenPreis,
        [boolean]$IstKundenPreis,
        [boolean]$HatIndividuellenPreis,
        [decimal]$Preis,
        [decimal]$Referenzpreis,
        [string]$WaehrungsCode,
        [Parameter(HelpMessage = "Format: Komma-separierte Liste von Uids")]
        [array]$Bestandteile
    )
    process {
        $Body = [PSCustomObject]@{
            type                = $ProduktTyp;
            Bezeichnung            = $Bezeichnung;
            Sicherheitseinstellung = $SicherheitsEinstellung;
        };

        if ($PSBoundParameters.ContainsKey("Beschreibung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Beschreibung" -Value $Beschreibung;
        }

        if ($PSBoundParameters.ContainsKey("Kurzbeschreibung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Kurzbeschreibung" -Value $Kurzbeschreibung;
        }

        if ($PSBoundParameters.ContainsKey("AdminHinweis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "AdminHinweis" -Value $AdminHinweis;
        }

        if ($PSBoundParameters.ContainsKey("IstEinzelnBestellbar")) {
            $Body | Add-Member -MemberType NoteProperty -Name "IstEinzelnBestellbar" -Value $IstEinzelnBestellbar;
        }

        if ($PSBoundParameters.ContainsKey("VerfuegbarAb")) {
            $Body | Add-Member -MemberType NoteProperty -Name "VerfuegbarAb" -Value $VerfuegbarAb;
        }

        if ($PSBoundParameters.ContainsKey("VerfuegbarBis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "VerfuegbarBis" -Value $VerfuegbarBis;
        }

        if ($PSBoundParameters.ContainsKey("BestellmengeMinimal")) {
            $Body | Add-Member -MemberType NoteProperty -Name "BestellmengeMinimal" -Value $BestellmengeMinimal;
        }

        if ($PSBoundParameters.ContainsKey("BestellmengeMaximal")) {
            $Body | Add-Member -MemberType NoteProperty -Name "BestellmengeMaximal" -Value $BestellmengeMaximal;
        }

        if ($PSBoundParameters.ContainsKey("ZulaessigeBestellmengen")) {
            $Body | Add-Member -MemberType NoteProperty -Name "ZulaessigeBestellmengen" -Value $ZulaessigeBestellmengen;
        }

        if ($PSBoundParameters.ContainsKey("MaximumKundenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "MaximumKundenPreis" -Value $MaximumKundenPreis;
        }

        if ($PSBoundParameters.ContainsKey("MinimumKundenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "MinimumKundenPreis" -Value $MinimumKundenPreis;
        }

        if ($PSBoundParameters.ContainsKey("IstKundenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "IstKundenPreis" -Value $IstKundenPreis;
        }

        if ($PSBoundParameters.ContainsKey("HatIndividuellenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "HatIndividuellenPreis" -Value $HatIndividuellenPreis;
        }

        if ($PSBoundParameters.ContainsKey("Preis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Preis" -Value $Preis;
        }

        if ($PSBoundParameters.ContainsKey("Referenzpreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Referenzpreis" -Value $Referenzpreis;
        }

        if ($PSBoundParameters.ContainsKey("WaehrungsCode")) {
            $Body | Add-Member -MemberType NoteProperty -Name "WaehrungsCode" -Value $WaehrungsCode;
        }

        if ($PSBoundParameters.ContainsKey("Bestandteile")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Bestandteile" -Value $Bestandteile;
        }

        $res = Invoke-Weedu -Uri "rest/Produkte" -Method POST -Body $Body;

        return $res;
    }
}

function Set-Produkt {
    [CmdletBinding(DefaultParameterSetName = "Default")]
    param(
        [Parameter(Mandatory, HelpMessage = "Uid des Produkts")]
        $ProduktUid,
        [Parameter(Mandatory, HelpMessage = "Zulässige Produkt-Typen: ProduktOhneLieferung, ProduktAuslieferbar, ProduktBuendel")]
        [string]$ProduktTyp,
        [Parameter(ParameterSetName = "Uebersetzung", HelpMessage = "Zweistelliger Sprachcode (ISO 639-1), z.B. fr, en oder it")]
        [string]$Sprache,
        [string]$Bezeichnung,
        [string]$Beschreibung,
        [string]$Kurzbeschreibung,
        [Parameter(ParameterSetName = "Default")]
        [string]$AdminHinweis,
        [Parameter(ParameterSetName = "Default")]
        [boolean]$IstEinzelnBestellbar,
        [Parameter(ParameterSetName = "Default", HelpMessage = "Format: 2019-02-01T00:00")]
        $VerfuegbarAb,
        [Parameter(ParameterSetName = "Default", HelpMessage = "Format: 2019-02-01T00:00")]
        $VerfuegbarBis,
        [Parameter(ParameterSetName = "Default")]
        [int]$BestellmengeMinimal,
        [Parameter(ParameterSetName = "Default")]
        [int]$BestellmengeMaximal,
        [Parameter(ParameterSetName = "Default", HelpMessage = "Format: Komma-separierte Liste, z.B. 10, 20, 30")]
        [int[]]$ZulaessigeBestellmengen,
        [Parameter(ParameterSetName = "Default")]
        [decimal]$MaximumKundenPreis,
        [Parameter(ParameterSetName = "Default")]
        [decimal]$MinimumKundenPreis,
        [Parameter(ParameterSetName = "Default")]
        [boolean]$IstKundenPreis,
        [Parameter(ParameterSetName = "Default")]
        [boolean]$HatIndividuellenPreis,
        [Parameter(ParameterSetName = "Default")]
        [decimal]$Preis,
        [Parameter(ParameterSetName = "Default")]
        [decimal]$Referenzpreis,
        [Parameter(ParameterSetName = "Default")]
        [string]$WaehrungsCode,
        [Parameter(ParameterSetName = "Default", HelpMessage = "Format: Komma-separierte Liste von Uids")]
        [array]$Bestandteile
    )
    process {
        $Body = [PSCustomObject]@{
            type                = $ProduktTyp;
        };

        $Uid = ConvertTo-WeeduGuid $ProduktUid;

        if ($PSBoundParameters.ContainsKey("Bezeichnung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Bezeichnung" -Value $Bezeichnung;
        }

        if ($PSBoundParameters.ContainsKey("Beschreibung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Beschreibung" -Value $Beschreibung;
        }

        if ($PSBoundParameters.ContainsKey("Kurzbeschreibung")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Kurzbeschreibung" -Value $Kurzbeschreibung;
        }

        if ($PSBoundParameters.ContainsKey("AdminHinweis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "AdminHinweis" -Value $AdminHinweis;
        }

        if ($PSBoundParameters.ContainsKey("IstEinzelnBestellbar")) {
            $Body | Add-Member -MemberType NoteProperty -Name "IstEinzelnBestellbar" -Value $IstEinzelnBestellbar;
        }

        if ($PSBoundParameters.ContainsKey("VerfuegbarAb")) {
            $Body | Add-Member -MemberType NoteProperty -Name "VerfuegbarAb" -Value $VerfuegbarAb;
        }

        if ($PSBoundParameters.ContainsKey("VerfuegbarBis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "VerfuegbarBis" -Value $VerfuegbarBis;
        }

        if ($PSBoundParameters.ContainsKey("BestellmengeMinimal")) {
            $Body | Add-Member -MemberType NoteProperty -Name "BestellmengeMinimal" -Value $BestellmengeMinimal;
        }

        if ($PSBoundParameters.ContainsKey("BestellmengeMaximal")) {
            $Body | Add-Member -MemberType NoteProperty -Name "BestellmengeMaximal" -Value $BestellmengeMaximal;
        }

        if ($PSBoundParameters.ContainsKey("ZulaessigeBestellmengen")) {
            $Body | Add-Member -MemberType NoteProperty -Name "ZulaessigeBestellmengen" -Value $ZulaessigeBestellmengen;
        }

        if ($PSBoundParameters.ContainsKey("MaximumKundenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "MaximumKundenPreis" -Value $MaximumKundenPreis;
        }

        if ($PSBoundParameters.ContainsKey("MinimumKundenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "MinimumKundenPreis" -Value $MinimumKundenPreis;
        }

        if ($PSBoundParameters.ContainsKey("IstKundenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "IstKundenPreis" -Value $IstKundenPreis;
        }

        if ($PSBoundParameters.ContainsKey("HatIndividuellenPreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "HatIndividuellenPreis" -Value $HatIndividuellenPreis;
        }

        if ($PSBoundParameters.ContainsKey("Preis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Preis" -Value $Preis;
        }

        if ($PSBoundParameters.ContainsKey("Referenzpreis")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Referenzpreis" -Value $Referenzpreis;
        }

        if ($PSBoundParameters.ContainsKey("WaehrungsCode")) {
            $Body | Add-Member -MemberType NoteProperty -Name "WaehrungsCode" -Value $WaehrungsCode;
        }

        if ($PSBoundParameters.ContainsKey("Bestandteile")) {
            $Body | Add-Member -MemberType NoteProperty -Name "Bestandteile" -Value $Bestandteile;
        }

        if ($PSCmdlet.ParameterSetName  -eq "Default") {
            $res = Invoke-Weedu -Uri "/rest/Produkte/{0}" -UriParams $Uid -Method PUT -Body $Body;
        } else {
            $res = Invoke-Weedu -Uri "/rest/Produkte/{0}/{1}" -UriParams @($Uid, $Sprache) -Method PUT -Body $Body;
        }

        return $res;
    }
}

function Get-Produkt {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, ValueFromPipeline, HelpMessage = "Uid des Produkts")]
        $ProduktUid,
        [Parameter(HelpMessage = "Zweistelliger Sprachcode (ISO 639-1), z.B. fr, en oder it")]
        [string]$Sprache
    )
    process {
        $Uid = ConvertTo-WeeduGuid $ProduktUid;

        if ($PSBoundParameters.ContainsKey("Sprache")) {
            return Invoke-Weedu -Uri "/rest/Produkte/{0}/{1}" -UriParams @($Uid, $Sprache) -Method GET;
        } else {
            return Invoke-Weedu -Uri "/rest/Produkte/{0}" -UriParams $Uid -Method GET;
        }
    }
}

function Remove-Produkt {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "Uid des Produkts")]
        $ProduktUid,
        [Parameter(HelpMessage = "Zweistelliger Sprachcode (ISO 639-1), z.B. fr, en oder it")]
        [string]$Sprache
    )
    process {
        $Uid = ConvertTo-WeeduGuid $ProduktUid;

        if ($PSBoundParameters.ContainsKey("Sprache")) {
            return Invoke-Weedu -Uri "/rest/Produkte/{0}/{1}" -UriParams @($Uid, $Sprache) -Method DELETE;
        } else {
            return Invoke-Weedu -Uri "/rest/Produkte/{0}" -UriParams $Uid -Method DELETE;
        }
    }
}

Export-ModuleMember -function New-Produkt
Export-ModuleMember -function Set-Produkt
Export-ModuleMember -function Get-Produkt
Export-ModuleMember -function Remove-Produkt