diklabu_schueler.psm1

<#
    VERBEN:
        find ... findet einen oder mehrere Schüler nach Namen und Geburtsdatum. '%' ist WildCard
        search . sucht einen oder mehrere Schüler
        get .... findet einen Schüler durch Angabe des PK (Schueler ID)
        set .... ändert Attribute eines Schülers durch angabe des PK
        new .... erzeugt ein neuen Schüler Eintrag
        delete . löscht einen Schüler
 
    NOMEN:
        pupil
#>

<#
.Synopsis
   Informationen zu einem Schüler abfragen
.DESCRIPTION
   Informationen zu einem Schüler abfragen. Die Schülerdaten können dabei aus einer CSV Datei kommen mit folgenden Einträge
        "GEBDAT","NNAME","VNAME"
        "1968-04-11","Tuttas","Jörg"
.EXAMPLE
   Find-Pupil -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11
.EXAMPLE
   Find-Pupil -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   Find-Pupil -VNAME % -NNAME % -GEBDAT 1968-04-11
   Findet alle Schüler, die an dem Tag Geburtstag haben
.EXAMPLE
   Import-Csv schueler.csv | Find-Pupil
 
#>

function Find-Pupil
{
    [CmdletBinding()]
    Param
    (    
        # Vorname des Schülers
        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [String]$VNAME,

        # Nachname des Schülers
        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=1)]
        [String]$NNAME,

        # Geburtsdatum im SQL Format yyyy-mm-dd
        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=2)]
        [String]$GEBDAT,

        # Adresse des Diklabu Servers
        [String]$uri=$global:server

    )

    Begin
    {
        if (-not $global:auth_token) {
            Write-Error "Sie sind nicht am diklabu angemeldet, versuchen Sie login-diklabu"
            return;
        }
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
    }
    Process
    {
        $schueler=echo "" | Select-Object -Property "GEBDAT","NNAME","VNAME"
        $schueler.GEBDAT=$GEBDAT
        $schueler.NNAME=$NNAME
        $schueler.VNAME=$VNAME
        try {
            $r=Invoke-RestMethod -Method Post -Uri ($uri+"schueler/info") -Headers $headers -Body (ConvertTo-Json $schueler)  -ContentType "application/json; charset=iso-8859-1"             
            Write-Verbose "Find Schüler $schueler ! Ergebnis: $r"
            return $r;
        } catch {
            Write-Error "Find-Pupil: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }
}

<#
.Synopsis
   Einen Schüler anhand von Vorname, Nachname und Geb. Datum suchen (unter Angabe der Levensthein Distanz)
.DESCRIPTION
   Einen Schüler anhand von Vorname, Nachname und Geb. Datum suchen (unter Angabe der Levensthein Distanz)
.EXAMPLE
   Search-Pupil -VNAMENNAMEGEBDAT JörgTuttas1968-04-11 -LDist=4
.EXAMPLE
   Search-Pupil -VNAMENNAMEGEBDAT JörgTuttas1968-04-11 -LDist=4 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   "JörgTuttas1968-04-11" | Search-Pupil -LDist=4
.EXAMPLE
   Import-Csv schueler.csv | Search-Pupil -LDist=4
#>

function Search-Pupil
{
    [CmdletBinding()]
    Param
    (    
        # Suchstring gebildet aus VornameNachNameGebDatum des Schülers
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [String]$VNAMENNAMEGEBDAT,

        # Levensthein Distanz
        [Parameter(Mandatory=$true,Position=1)]
        [String]$LDist,

        # Adresse des Diklabu Servers
        [String]$uri=$global:server
    )

    Begin
    {
        if (-not $global:auth_token) {
            Write-Error "Sie sind nicht am diklabu angemeldet, versuchen Sie login-diklabu"
            return;
        }
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
    }
    Process
    {
        $Encode = [uri]::EscapeDataString($VNAMENNAMEGEBDAT)
        try {
            $r=Invoke-RestMethod -Method Get -Uri ($uri+"schueler/"+$Encode+"/"+$LDist) -Headers $headers -ContentType "application/json; charset=iso-8859-1"             
            Write-Verbose "Suche Schüler (Suchmuster: $VNAMENNAMEGEBDAT ) mit Levensheindistanz $LDist : Ergebnis: $r"
            return $r;
        } catch {
            Write-Warning "Search-Pupil: Fehler beim Suchen des Schülers"
        }
    }
}

<#
.Synopsis
   Einen oder mehrere Schüler abfragen und dateilierte Informationen ausgeben
.DESCRIPTION
   Fragt einen oder mehrere Schüler ab und gibt detailierte Informationen, wie Klassenzugehörigkeit Ausbilder und Ausbildungsbetrieb aus.
.EXAMPLE
   Get-Pupil -id 1234
.EXAMPLE
   Get-Pupil -id 1234 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   1234,5678 | Get-Pupil
.EXAMPLE
   Find-Pupil -VNAME % -NNAME % -GEBDAT 1993-12-30 | Get-Pupil
   Zeit Schülerdaten an der Schüler, die an dem Tag geburtstag habenb
.EXAMPLE
   Find-Coursemember -KNAME FISI13A | Get-Pupil
   Zeit Schülerdaten der Klasse Fisi13A an
#>

function Get-Pupil
{
    [CmdletBinding()]
    Param
    (       
        # ID des Schülers
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName = "Set 1")]
        [int]$id,

        # BBS-PLan ID des Schülers
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName = "Set 2")]
         [alias("ID_MMBBS")]
        [int]$bbsplanid,

        # Adresse des Diklabu Servers
        [String]$uri=$global:server
    )
    Begin
    {
        if (-not $global:auth_token) {
            Write-Error "Sie sind nicht am diklabu angemeldet, versuchen Sie login-diklabu"
            return;
        }
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    }
    Process
    {
        try {
            if ($id) {
                $r=Invoke-RestMethod -Method Get -Uri ($uri+"schueler/"+$id) -Headers $headers -ContentType "application/json; charset=iso-8859-1"     
                Write-Verbose "Suche Schüler mit der ID $id"
            }
            else {
                $r=Invoke-RestMethod -Method Get -Uri ($uri+"schueler/bbsplan/"+$bbsplanid) -Headers $headers -ContentType "application/json; charset=iso-8859-1"     
                Write-Verbose "Suche Schüler mit der BBS PLan ID $bbsplanid"
            }
            return $r;
        } catch {
            Write-Host ($_ | Format-List | Out-String)
            Write-Warning "Get-Pupil: FEHLER beim Suchen des Schülers"
            $log=Login-Diklabu
            if ($id) {
                $r=Invoke-RestMethod -Method Get -Uri ($uri+"schueler/"+$id) -Headers $headers -ContentType "application/json; charset=iso-8859-1"     
                Write-Verbose "Suche Schüler mit der ID $id"
            }
            else {
                $r=Invoke-RestMethod -Method Get -Uri ($uri+"schueler/bbsplan/"+$bbsplanid) -Headers $headers -ContentType "application/json; charset=iso-8859-1"     
                Write-Verbose "Suche Schüler mit der BBS PLan ID $bbsplanid"
            }
            Write-Host ($r | Format-List | Out-String)
            return $r;
        }
    }
}

<#
.Synopsis
   Alle Schüler abfragen
.DESCRIPTION
   Fragt alle Schüler ab
.EXAMPLE
   Get-Pupils
.EXAMPLE
   Get-Pupils -uri http://localhost:8080/Diklabu/api/v1/
#>

function Get-Pupils
{
    [CmdletBinding()]
    Param
    (       

        # Adresse des Diklabu Servers
        [String]$uri=$global:server
    )
    Begin
    {
        if (-not $global:auth_token) {
            Write-Error "Sie sind nicht am diklabu angemeldet, versuchen Sie login-diklabu"
            return;
        }
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
    }
    Process
    {
        try {
            $r=Invoke-RestMethod -Method Get -Uri ($uri+"schueler/") -Headers $headers -ContentType "application/json; charset=iso-8859-1"     
            Write-Verbose "Liste aller Schüler !"
            return $r;
        } catch {
            Write-Error "Get-Pupils: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }
}

<#
.Synopsis
   Einen oder mehrere Schüler hinzufügen
.DESCRIPTION
   Fügt einen Schüler zur Tabelle Schueler hinzu. Die Daten können dabei auch aus einer CSV Datei stammen, die folgendes Aussehen hat
       "GEBDAT","NNAME","VNAME"
       "1968-04-11","Tuttas","Jörg"
       "1968-04-11","Tuttas","Joerg"
       "1968-04-12","Tuttas","Frank"
.EXAMPLE
   New-Pupil -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11
.EXAMPLE
   New-Pupil -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   New-Pupil -VNAME Jörg -NNAME Tuttas -GEBDAT 1968-04-11 -EMAIL jtuttas@gmx.net -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   New-Pupil -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11 -uri http://localhost:8080/Diklabu/api/v1/ -ID_AUSBILDER=4711
.EXAMPLE
   Import-Csv schueler.csv | New-Pupil
#>

function New-Pupil
{
    [CmdletBinding()]
    Param
    (
        # Vorname des Schülers
        [Parameter(Mandatory=$true,Position=0,ValueFromPipelineByPropertyName=$true)]
        [String]$VNAME,

        # Nachname des Schülers
        [Parameter(Mandatory=$true,Position=1,ValueFromPipelineByPropertyName=$true)]
        [String]$NNAME,

        # Geburtsdatum im SQL Format yyyy-mm-dd
        [Parameter(Position=2,ValueFromPipelineByPropertyName=$true)]
        [String]$GEBDAT,

        # Adresse des Diklabu Servers
        [String]$uri=$global:server,

        [Parameter(ValueFromPipelineByPropertyName=$true)]
        # EMail Adresse des Schülers
        [String]$EMAIL,

        [Parameter(ValueFromPipelineByPropertyName=$true)]
        # ID Des Ausbilders
        [int]$ID_AUSBILDER,

        # Abgang
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$ABGANG="N",

        # Info
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$INFO,

        # BBS Plan ID
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [int]$bbsplanid,

        # Info
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [int]$id,

        [switch]$whatif


    )

    Begin
    {
        if (-not $global:auth_token) {
            Write-Error "Sie sind nicht am diklabu angemeldet, versuchen Sie login-diklabu"
            return;
        }
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
    }
    Process
    {
        $schueler=echo "" | Select-Object -Property "EMAIL","GEBDAT","VNAME","NNAME","ID_AUSBILDER","ABGANG","INFO","id","ID_MMBBS"
        if ($VNAME) {
          $schueler.VNAME=$VNAME
        }
        if ($NNAME) {
          $schueler.NNAME=$NNAME
        }
        if ($GEBDAT) {
          $schueler.GEBDAT=$GEBDAT
        }
        if ($EMAIL) {
          $schueler.EMAIL=$EMAIL
        }
        if ($id -ne 0) {
          $schueler.id=$id
        }
        if ($ID_AUSBILDER -ne 0) {
            $schueler.ID_AUSBILDER=$ID_AUSBILDER
         }
         if ($ABGANG) {
          $schueler.ABGANG=$ABGANG
        }
        if ($INFO) {
          $schueler.INFO=$INFO
        }
        if ($bbsplanid -ne 0) {
          $schueler.ID_MMBBS=$bbsplanid
        }
        
        try {
            if (-not $whatif) {
                $r=Invoke-RestMethod -Method Post -Uri ($uri+"schueler/admin") -Headers $headers -Body (ConvertTo-Json $schueler)
            }
            Write-Verbose "Neuer Schüler $schueler wird angelegt!"
            return $r;
        } catch {
            Write-Error "New-Pupil: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }
}

<#
.Synopsis
   Attribute eines oder mehrerer Schüler ändern
.DESCRIPTION
   Ändert Attribute eines oder mehrerer Schüler
.EXAMPLE
   Set-Pupil -id 1234 -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11
.EXAMPLE
   Set-Pupil -id 1234 -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   Set-Pupil -id 1234 -VNAME Jörg -NNAME Tuttas -GEBDAT 1968-04-11 -EMAIL jtuttas@gmx.net -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   Set-Pupil -id 1234 -VNAME Joerg -NNAME Tuttas -GEBDAT 1968-04-11 -uri http://localhost:8080/Diklabu/api/v1/ -ID_AUSBILDER=4711
.EXAMPLE
   1234,5678 | Set-Pupil -ABGANG "J"
.EXAMPLE
   Find-Pupil -VNAME % -NNAME % -GEBDAT 1993-12-30 | Set-Pupil -INFO "Im Dezember Geburtstag"
   Alle Schüler die am 30.12.1993 Geburtstag haben, wird die Bemerkung "Im Dezember Geburtstag" zugewiesen
.EXAMPLE
   Find-Coursemember FISI13B | Set-Pupil -ABGANG "J"
   Alle Schüler der Klasse FISI13B erhalten das Attribut ABGANG=J
#>

function Set-Pupil
{
    [CmdletBinding()]
    Param
    (
        # ID des Schülers
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [int]$id,

        # Vorname des Schülers
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$VNAME,

        # Nachname des Schülers
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$NNAME,

        # Geburtsdatum im SQL Format yyyy-mm-dd
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$GEBDAT,

        # Adresse des Diklabu Servers
        [String]$uri=$global:server,

        # EMail Adresse des Schülers
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$EMAIL,

        # ID Des Ausbilders
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [int]$ID_AUSBILDER=-1,

        # Abgang
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$ABGANG,

        # Info
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [String]$INFO,

        # BBS PLan ID
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [int]$bbsplanid,

        [switch]$whatif

    )

    Begin
    {
        if (-not $global:auth_token) {
            Write-Error "Sie sind nicht am diklabu angemeldet, versuchen Sie login-diklabu"
            return;
        }
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
        
    }
    Process
    {
        $schueler=echo "" | Select-Object -Property "EMAIL","GEBDAT","VNAME","NNAME","ID_AUSBILDER","ABGANG","INFO","ID_MMBBS"
        if ($VNAME) {
            $schueler.VNAME=$VNAME
        }
        if ($NNAME) {
            $schueler.NNAME=$NNAME
        }
        if ($GEBDAT) {
            $schueler.GEBDAT=$GEBDAT
            }
        if ($EMAIL) {
            $schueler.EMAIL=$EMAIL
        }
        if ($ID_AUSBILDER -ne -1) {
            $schueler.ID_AUSBILDER=$ID_AUSBILDER
        }
        if ($ABGANG) {
            $schueler.ABGANG=$ABGANG
        }
        if ($INFO) {
            $schueler.INFO=$INFO
        }
        if ($bbsplanid -ne 0) {
            $schueler.ID_MMBBS=$bbsplanid
        }

        try {
            $r=Invoke-RestMethod -Method Post -Uri ($uri+"schueler/verwaltung/"+$id) -Headers $headers -Body (ConvertTo-Json $schueler) -ContentType "application/json; charset=utf-8"
            Write-Verbose "Daten des Schülers mit der ID $id geändert auf $schueler"
            return $r;
        } catch {
            Write-Error "Set-Pupil: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }    
}


<#
.Synopsis
   Einen oder mehrere Schüler löschen
.DESCRIPTION
   Entfernt einen oder mehrere Schüler aus der Tabelle Schüler, sofern er/sie nocht nicht einer Klasse zugerodnet ist
.EXAMPLE
   Delete-Pupil -id 1234
.EXAMPLE
   Delete-Pupil -id 1234 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   1234,5678 | Delete-Pupil
.EXAMPLE
   Find-Pupil -VNAME % -NNAME % -GEBDAT 1968-04-11 | Delete-Pupil
   Löscht alle Schüler, die am 11.4.1968 geboren sind
.EXAMPLE
   Import-Csv schueler.csv | Find-Pupil | Delete-Pupil
   Löscht alle Schüler, die in der CSV Datei sich befinden, die CSV Datei hat dabei folgendes Format
    "GEBDAT","NNAME","VNAME"
    "1968-04-11","Tuttas","Jörg"
    "1968-04-11","Tuttas","Joerg"
    "1968-04-12","Tuttas","Frank"
#>

function Delete-Pupil
{
    [CmdletBinding()]
    Param
    (        
        # ID des Schülers
        [Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
        [int]$id,

        # Adresse des Diklabu Servers
        [String]$uri=$global:server,
        [switch]$whatif
    )

    Begin
    {
        if (-not $global:auth_token) {
            Write-Error "Sie sind nicht am diklabu angemeldet, versuchen Sie login-diklabu"
            return;
        }
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
        
    }
    Process
    {
        try {
            if (-not $whatif) {
                $r=Invoke-RestMethod -Method Delete -Uri ($uri+"schueler/admin/"+$id) -Headers $headers 
            }
            Write-Verbose "Lösche Schüler mit der ID $id"
            return $r;
        } catch {
            Write-Error "Delete-Pupil: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }
}