diklabu_kurswahl.psm1

<#
    VERBEN:
        *add ..... fügt einen Kurs (oder mehrere) zur Kurswahl hinzu
        *remove .. löscht einen (oder mehrere) Kurse aus der Kurswahl
        *enable .. schaltet die Kurswahl frei
        *disable . sperrt die Kurswahl
        *clear ... löscht die Kurswünsche nach Rückfrage (oder Schalter -force ist gesetzt)
        *reset ... Löscht den Kurswunsch für einen (oder mehrere) Schüler
        *new ..... Eine Kurswahl für einen (oder mehrere) Schüler durchführen
        *Stop .... Einen Wurswunsch als gebucht setzten
        get ...... Liste der Schüler, die einen Kurs gewählt haben
        list ..... Zeigt die Kurse an, die zur Wahl stehen
 
    *) nur als Admin möglich
 
    NOMEN:
        Coursevoting
#>


<#
.Synopsis
   Einen oder mehrere Kurse zur Wahl hinzufügen
.DESCRIPTION
   Fügt einen oder mehrere Kurs zur Kurswahl hinzu
.EXAMPLE
   Add-Coursevoting -id 612
.EXAMPLE
   Add-Coursevoting -kid 612 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   11234,5678,7654 | Add-Coursevoting
.EXAMPLE
   Find-Course -KNAME "WPK%lila" | Add-Coursevoting
   Fügt alle Kurse, die mit "WPK" beginnen und mit "lila" enden der Kurswahl hinzu
 
#>

function Add-Coursevoting
{
    [CmdletBinding()]
    Param
    (
        # id der Klasse
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [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 Post -Uri ($uri+"coursevoting/admin/"+$id) -Headers $headers 
          }
          Write-Verbose "Der Kurs mit der ID $ID wird zur Kurswahl hinzugefügt!"
          return $r;
        } catch {
            Write-Error "Add-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }   
}

<#
.Synopsis
   Kurs(e) von der Wahl entfernen
.DESCRIPTION
   Entfernt einen oder mehrere Kurs aus der Kurswahl. Dieses ist nur möglich, sofern der Kurs nicht schon gewählt wurde!
.EXAMPLE
   Remove-Coursevoting -id 612
.EXAMPLE
   Remove-Coursevoting -id 612 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   11234,5678,7654 | Remove-Coursevoting
.EXAMPLE
   Find-Course -KNAME "%WPK%lila" | Remove-Coursevoting
#>

function Remove-Coursevoting
{
    [CmdletBinding()]
    Param
    (
         # id der Klasse
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [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+"coursevoting/admin/"+$id) -Headers $headers 
           }
           Write-Verbose "Der Kurs mit der ID $id wird aus der Kurswahl entfernt!"
            return $r;
        } catch {
            Write-Error "Remove-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }

    }
}


<#
.Synopsis
   Kurswahl freigeben
.DESCRIPTION
   Gibt die Kurswahl frei
.EXAMPLE
   Enable-Coursevoting
.EXAMPLE
   Enable-Coursevoting -uri http://localhost:8080/Diklabu/api/v1/
#>

function Enable-Coursevoting
{
    [CmdletBinding()]
    Param
    (
        # 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;
        try {
          if (-not $whatif) {
            $r=Invoke-RestMethod -Method post -Uri ($uri+"coursevoting/admin/voting/1") -Headers $headers 
          }
          Write-Verbose "Kurswahl freigeschaltet!"
          return $r;
        } catch {
            Write-Error "Enable-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }
}

<#
.Synopsis
   Kurswahl sperren
.DESCRIPTION
   Sperrt die Kurswahl
.EXAMPLE
   Disable-Coursevoting
.EXAMPLE
   Disable-Coursevoting -uri http://localhost:8080/Diklabu/api/v1/
#>

function Disable-Coursevoting
{
    [CmdletBinding()]
    Param
    (
        # 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;
        try {
          if (-not $whatif) {
            $r=Invoke-RestMethod -Method post -Uri ($uri+"coursevoting/admin/voting/0") -Headers $headers 
          }
          Write-Verbose "Kurswahl gesperrt!"
          return $r;
        } catch {
            Write-Error "Disable-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }
}

<#
.Synopsis
   Löscht die Kurswahl von einem oder mehreren Schülern
.DESCRIPTION
   Löscht die Kurswahl von einem oder mehreren Schülern
.EXAMPLE
   Reset-Coursevoting -id 612
.EXAMPLE
   Reset-Coursevoting -id 612 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   11234,5678,7654 | Reset-Coursevoting
.EXAMPLE
   Find-Coursemember -KNAME FISI13A | Reset-Coursevoting
   Löscht die Kurswahl der Schüler aus der Klasse Fisi13A
.EXAMPLE
   import-Csv schueler.csv | Find-Pupil | Reset-Coursevoting
   Löscht die Kurswahl der in der CSV Datei enthaltenen Schüler
.EXAMPLE
   Find-Pupil -VNAME Jörg -NNAME Tuttas -GEBDAT 1968-04-11 | Reset-Coursevoting
   Löscht die Kurswahl des angegebenen Schülers Schüler
 
#>

function Reset-Coursevoting
{
    [CmdletBinding()]
    Param
    (
          # ID des Schülers
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [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+"coursevoting/admin/schueler/"+$id) -Headers $headers 
            }
            Write-Verbose "Die Kurswahl für den Schülker mit der ID $id wurde zurückgesetzt: Ergebnis $r"
            return $r;
         } catch {
            Write-Error "Reset-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }

    }
}

<#
.Synopsis
   Löscht alle Kurswahlen
.DESCRIPTION
   Löscht alle getätigten Kurswahlen. Löscht die Tabelle Kurswunsch
.EXAMPLE
   Reset-Coursevoting
.EXAMPLE
   Reset-Coursevoting -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   Reset-Coursevoting -force
#>

function Clear-Coursevoting
{
    [CmdletBinding()]
    Param
    (
        # force
        [switch]$force,
        

        # 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;
        }
        if (!$force) {
          $s=Read-Host "Wollen Sie alle Kurswünsche zurück setzten? (J/N)"
          if ($s -eq "J") {
              $force=$true
          }
        }
        if ($force) {
          $headers=@{}
          $headers["content-Type"]="application/json;charset=iso-8859-1"
          $headers["auth_token"]=$global:auth_token;
          try {
            if (-not $whatif) {
                $r=Invoke-RestMethod -Method Delete -Uri ($uri+"coursevoting/admin/") -Headers $headers 
            }
            Write-Verbose "Alle Kurswahlen wurden zurückgesetzt (gelöscht!)";
            return $r;
          } catch {
              Write-Error "Clear-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
          }
        }
    }
}
 
<#
.Synopsis
   Abfrage der Kurswahl
.DESCRIPTION
   Zeigt die Schüler an, die einen (oder mehrere) Kurs gewählt haben. Dabei werden nur nicht gebuchte Kurse gelistet (siehe Option gebucht)
.EXAMPLE
   Get-Coursevoting -id 123 -priotity 2
.EXAMPLE
   Get-Coursevoting -id 123 -gebucht
   Zeigt die Schüler an, die einen (oder mehrere) Kurs gewählt haben. Dabei werden nur gebuchte Kurse gelistet!
.EXAMPLE
   Get-Coursevoting -id 123 -uri http://localhost:8080/Diklabu/api/v1/
.EXAMPLE
   1234,5678 | get-Coursevoting -priority 1
.EXAMPLE
   Find-Course -KNAME "WPK%lila"| get-Coursevoting -priority 1
   Zeigt die alle Schüler an, die einen WPK Kurs mit der Priorität 1 gewählt haben, dessen Namen mit WPK beginnt und mit lila endet!
 
#>

function Get-Coursevoting
{
    [CmdletBinding()]
    Param
    (
         # ID der Klasse
        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,ValueFromPipeline=$true,Position=0)]
        [int]$id,


        # Priorität des Kurswunsches
        [String]$priority=1,

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

        # Schalter (nur gebuchte Kurse anzeigen)
        [switch]$gebucht=$false


    )

    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+"coursevoting/"+$id+"/"+$priority+"/"+$gebucht) -Headers $headers 
            Write-Verbose "Abfrage der Kurswahl für den Kurs mit der ID $id und der priorität $priority (gebucht = $gebucht)"
            return $r;
        } catch {
            Write-Error "Get-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }

    }
}

<#
.Synopsis
   Setzten einer Kurswahl
.DESCRIPTION
   Ein Schüler wählt Drei Kurse aus
.EXAMPLE
   New-Coursevoting -id 123 -course1 1234 -course2 4567 -course3 891
.EXAMPLE
   1234,5678 | New-Coursevoting -course1 1234 -course2 4567 -course3 891
.EXAMPLE
   Import-Csv schueler.csv | Find-Pupil | New-Coursevoting -course1 1234 -course2 4567 -course3 891
   Alle Schüler die in der CSV Datei enthalten sind, wählen die genannten Kurse
 
#>

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

        [Parameter(Mandatory=$true)]
        # Priorität 1 des Kurswunsches
        [String]$course1,
        [Parameter(Mandatory=$true)]
        # Priorität 2 des Kurswunsches
        [String]$course2,
        [Parameter(Mandatory=$true)]
        # Priorität 3 des Kurswunsches
        [String]$course3,

        # 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 {
            $wunsch=echo "" | Select-Object -Property "ID_SCHUELER","ID_KURS","PRIORITAET","GEBUCHT"
            $wunsch.ID_SCHUELER=$id
            $wunsch.ID_KURS=$course1
            $wunsch.PRIORITAET="1";
            $wunsch.GEBUCHT="0";
            if (-not $whatif) {
                $r=Invoke-RestMethod -Method POST -Uri ($uri+"coursevoting/admin/schueler/") -Headers $headers  -Body (ConvertTo-Json $wunsch)     
            }
            Write-Verbose "Buche einen Kurswunsch $wunsch . Ergebnis:$r"

            $wunsch=echo "" | Select-Object -Property "ID_SCHUELER","ID_KURS","PRIORITAET","GEBUCHT"
            $wunsch.ID_SCHUELER=$id
            $wunsch.ID_KURS=$course2
            $wunsch.PRIORITAET="2";
            $wunsch.GEBUCHT="0";
            if (-not $whatif) {
                $r=Invoke-RestMethod -Method POST -Uri ($uri+"coursevoting/admin/schueler/") -Headers $headers  -Body (ConvertTo-Json $wunsch)     
            }
            Write-Verbose "Buche einen Kurswunsch $wunsch . Ergebnis:$r"
            $wunsch=echo "" | Select-Object -Property "ID_SCHUELER","ID_KURS","PRIORITAET","GEBUCHT"
            $wunsch.ID_SCHUELER=$id
            $wunsch.ID_KURS=$course3
            $wunsch.PRIORITAET="3";
            $wunsch.GEBUCHT="0";
            if (-not $whatif) {
                $r=Invoke-RestMethod -Method POST -Uri ($uri+"coursevoting/admin/schueler/") -Headers $headers  -Body (ConvertTo-Json $wunsch)     
            }
            Write-Verbose "Buche einen Kurswunsch $wunsch . Ergebnis:$r"
        } catch {
            Write-Error "New-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }

    }
}

<#
.Synopsis
   Beendet die Kurswahl für einen oder mehrere Schüler
.DESCRIPTION
   Beendet die Kurswahl für einen oder mehrere Schüler, das Attribut GEBUCHT wird in der Tabelle Kurswunsch auf "1" gesetzte!
.EXAMPLE
   Stop-Coursevoting -id 123
.EXAMPLE
   1234,5678 | Stop-Coursevoting
.EXAMPLE
   Import-Csv schueler.csv | Find-Pupil | Stop-Coursevoting
   Alle Schüler die in der CSV Datei enthalten sind, werden in der Kurswahl auf gebucht gesetzt
 
#>

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

        # Adresse des Diklabu Servers
        [String]$uri=$global:server,
        [whatif]$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 Put -Uri ($uri+"coursevoting/admin/schueler/$id") -Headers $headers      
            }
            Write-Verbose "Beende die Kurswahl für Schüler mit der ID $id . Ergebnis: $r";
            return $r
        } catch {
            Write-Error "Stop-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }

    }
}

<#
.Synopsis
   Listet die Kurse die zur Wahl stehen
.DESCRIPTION
   Zeigt alle Kurse an, die zur Wahl stehen
.EXAMPLE
   Get-Coursevotings
.EXAMPLE
   Get-Coursevotings -uri http://localhost:8080/Diklabu/api/v1/
#>

function Get-Coursevotings
{
    [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;
          
          try {
              $r=Invoke-RestMethod -Method Get -Uri ($uri+"coursevoting/") -Headers $headers 
              Write-Verbose "Liste der Kurs die zur Wahl stehen!"
              return $r;
          } catch {
            Write-Error "Get-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription 
        }
    }   
}