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
        *disbale . 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
        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
.DESCRIPTION
   Fügt alle Kurse, die mit "WPK" beginnen und mit "lila" enden der Kurswahl hinzu
 
#>

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

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

    )

    Begin
    {
          $headers=@{}
          $headers["content-Type"]="application/json;charset=iso-8859-1"
          $headers["auth_token"]=$global:auth_token;
    }
    Process
    {
        try {
          $r=Invoke-RestMethod -Method Post -Uri ($uri+"coursevoting/admin/"+$id) -Headers $headers 
          return $r;
        } catch {
            Write-Host "Add-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }
    }   
}

<#
.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
{
    Param
    (
         # id der Klasse
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
        [int]$id,

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

    )

    Begin
    {
            $headers=@{}
            $headers["content-Type"]="application/json;charset=iso-8859-1"
            $headers["auth_token"]=$global:auth_token;
    }
    Process
    {
        try {           
            $r=Invoke-RestMethod -Method Delete -Uri ($uri+"coursevoting/admin/"+$id) -Headers $headers 
            return $r;
        } catch {
            Write-Host "Remove-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }

    }
}


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

function Enable-Coursevoting
{
    Param
    (
        # Adresse des Diklabu Servers
        [String]$uri=$global:server
    )

    Begin
    {
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
        try {
          $r=Invoke-RestMethod -Method post -Uri ($uri+"coursevoting/admin/voting/1") -Headers $headers 
          return $r;
        } catch {
            Write-Host "Enable-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }
    }
}

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

function Disable-Coursevoting
{
    Param
    (
        # Adresse des Diklabu Servers
        [String]$uri=$global:server

    )

    Begin
    {
        $headers=@{}
        $headers["content-Type"]="application/json;charset=iso-8859-1"
        $headers["auth_token"]=$global:auth_token;
        try {
          $r=Invoke-RestMethod -Method post -Uri ($uri+"coursevoting/admin/voting/0") -Headers $headers 
          return $r;
        } catch {
            Write-Host "Enable-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }
    }
}

<#
.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
.DESCRIPTION
   Löscht die Kurswahl der Schüler aus der Klasse Fisi13A
.EXAMPLE
   import-Csv schueler.csv | Find-Pupil | Reset-Coursevoting
.DESCRIPTION
   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
.DESCRIPTION
   Löscht die Kurswahl des angegebenen Schülers Schüler
 
#>

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

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

    )

    Begin
    {
          $headers=@{}
          $headers["content-Type"]="application/json;charset=iso-8859-1"
          $headers["auth_token"]=$global:auth_token;
    }
    Process
    {      
         try {
            $r=Invoke-RestMethod -Method Delete -Uri ($uri+"coursevoting/admin/schueler/"+$id) -Headers $headers 
            return $r;
         } catch {
            Write-Host "Reset-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }

    }
}

<#
.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
{
    Param
    (
        # force
        [switch]$force,
        

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

    )

    Begin
    {
        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 {
            $r=Invoke-RestMethod -Method Delete -Uri ($uri+"coursevoting/admin/") -Headers $headers 
            return $r;
          } catch {
              Write-Host "Clear-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
          }
        }
    }
}

<#
.Synopsis
   Abfrage der Kurswahl
.DESCRIPTION
   Zeigt die Schüler an, die einen (oder mehrere) Kurs gewählt haben
.EXAMPLE
   Get-Coursevoting -id 123 -priotity 2
.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
.DESCRIPTION
   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
{
    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

    )

    Begin
    {
        $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) -Headers $headers 
            return $r;
        } catch {
            Write-Host "Get-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }

    }
}

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

function Set-Coursevoting
{
    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

    )

    Begin
    {
        $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";
            $r=Invoke-RestMethod -Method POST -Uri ($uri+"coursevoting/admin/schueler/") -Headers $headers  -Body (ConvertTo-Json $wunsch)     
            Write-Host $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";
            $r=Invoke-RestMethod -Method POST -Uri ($uri+"coursevoting/admin/schueler/") -Headers $headers  -Body (ConvertTo-Json $wunsch)     
            Write-Host $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";
            $r=Invoke-RestMethod -Method POST -Uri ($uri+"coursevoting/admin/schueler/") -Headers $headers  -Body (ConvertTo-Json $wunsch)     
            Write-Host $r
        } catch {
            Write-Host "Set-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }

    }
}

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

function List-Coursevoting
{
    Param
    (
        # Adresse des Diklabu Servers
        [String]$uri=$global:server

    )

    Begin
    {
          $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 
              return $r;
          } catch {
            Write-Host "List-Coursevoting: Status-Code"$_.Exception.Response.StatusCode.value__ " "$_.Exception.Response.StatusDescription -ForegroundColor red
        }
    }   
}