# GetClasses, GetClassesFilteredByDate en GetClassesFilteredByTraining

Met deze methods kan informatie over lichtingen worden opgehaald. Het format van het resultaat is voor alledrie de methods hetzelfde. De methods verschillen in de manier waarop gefilterd kan worden:

- `GetClasses` geeft de volledige lijst van lichtingen terug;
- `GetClassesFilteredByDate` geeft de mogelijkheid om lichtingen met een startdatum binnen een bepaald datumbereik op te halen;
- `GetClassesFilteredByTraining` geeft de mogelijkheid om de lichtingen van een bepaalde opleiding of opleidingsblok op te halen.

<p class="callout warning">****Let op:**** Gebruik geen GET-requests. Deze worden in plaintext verstuurd, en zijn dus niet veilig.</p>

##### GetClasses

```
POST /service/apiservice.asmx/GetClasses HTTP/1.1
Host: domein.pynter.nl
Content-Type: application/x-www-form-urlencoded
Content-Length: length

username=string&password=string&includeArchived=boolean
```

De `includeArchived` parameter geeft aan of gearchiveerde lichtingen ook opgehaald moeten worden.

##### GetClassesFilteredByDate

```
POST /service/apiservice.asmx/GetClassesFilteredByDate HTTP/1.1
Host: domein.pynter.nl
Content-Type: application/x-www-form-urlencoded
Content-Length: length

username=string&password=string&fromDate=datetime&toDate=datetime&includeArchived=boolean
```

De `fromDate` en `toDate` parameters geven een datumbereik aan. Het filteren gebeurt aan de hand van de startdatum van de lichting, en is inclusief. Een request met `fromDate = 2025-04-28` en `toDate = 2025-05-07` bevat dus alle lichtingen die op 28 april 2025 of later en vóór of op 7 mei 2025 beginnen.

##### GetClassesFilteredByTraining

```
POST /service/apiservice.asmx/GetClassesFilteredByTraining HTTP/1.1
Host: domein.pynter.nl
Content-Type: application/x-www-form-urlencoded
Content-Length: length

username=string&password=string&trainingId=number&trainingType=trainingtype&includeArchived=boolean
```

De `trainingId` en `trainingType` parameters kunnen samen gebruikt worden om te filteren op opleidingen. De `trainingType` parameter kan de volgende waarden hebben:

- `0` of `Learning`: Reguliere opleidingen
- `1` of `Longterm`: Opleidingsblokken

Let op: als je de tekstversie van de `trainingType` gebruikt is deze hoofdlettergevoelig!

Bij het succesvol aanroepen ziet een response er als volgt uit:

```xml
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<ApiResponseOfListOfTrainingClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
    <Success>true</Success>
    <Contents>
      // Meerdere TrainingClass objecten
    </Contents>
</ApiResponseOfListOfTrainingClass>
```

Het TrainingClass object is als volgt gestructureerd:

```xml
<TrainingClass>
  <!-- De unieke ID van de lichting. -->
  <Id>number</Id>
  
  <!-- De naam van de lichting. -->
  <Name>string</Name>
  
  <!-- Het maximale aantal inschrijvingen voor de lichting. Als er geen maximum is, wordt hier null teruggegeven. -->
  <MaximumEnrollments>number</MaximumEnrollments>
  
  <!-- Het minimum aantal inschrijvingen voor de lichting. Als er geen minimum is, wordt hier null teruggegeven. -->
  <MinimumEnrollments>number</MinimumEnrollments>
  
  <!-- Of de lichting geannuleerd is. -->
  <IsCancelled>boolean</IsCancelled>
  
  <!-- Of de lichting gearchiveerd is. -->
  <IsArchived>boolean</IsArchived>
  
  <!-- Of de lichting zichtbaar is in de opleidingscatalogus. -->
  <IsVisibleInCatalog>true</IsVisibleInCatalog>
  
  <!-- Of de lichting zichtbaar is in de opleidingskalender. -->
  <IsVisibleInCalendar>true</IsVisibleInCalendar>
  
  <!-- Of de opleiding getoond moet worden op externe websites. -->
  <VisibleExternally>true</VisibleExternally>
  
  <!-- Of medewerkers zich kunnen inschrijven voor een wachtlijst wanneer het maximum aantal deelnemers is bereikt. -->
  <HasWaitingList>false</HasWaitingList>
  
  <!-- Het maximale aantal inschrijvignen voor de wachtlijst. Als er geen maximum is, wordt hier null teruggegeven. -->
  <MaximumWaitingListEnrollments>number</MaximumWaitingListEnrollments>
  
  <!-- De trainingsdata die bij deze lichting horen. -->
  <Dates>
    <TrainingClassDate>
      
      <!-- De unieke ID van deze trainingsdag. -->
      <Id>number</Id>
      
      <!-- De datum van deze trainingsdag in ISO 8601 format (YYYY-MM-DD). -->
      <Date>date</Date>
      
      <!-- De starttijd van deze trainingsdag in ISO8601 format (HH:MM:SS). -->
      <StartsAt>time</StartsAt>
      
      <!-- De eindtijd van deze trainingsdag in ISO8601 format (HH:MM:SS). -->
      <EndsAt>time</EndsAt>
      
      <!-- De locatie van deze trainingsdag. -->
      <Location>
        
        <!-- De naam van deze trainigsdag. -->
        <Name>string</Name>
        
        <!-- Het adres van deze trainingsdag. -->
        <Address>string</Address>
      </Location>
      
      <!-- De IDs van de trainers voor deze opleiding. -->
      <TrainerIds/>
    </TrainingClassDate>
  </Dates>

  <!-- De ids van de gebruikers die voor deze lichting zijn ingeschreven. -->
  <Enrollments/>

  <!-- De IDs van de gebruikers die voor de wachtlijst van deze training zijn ingeschreven. -->
  <WaitingListEnrollments/>

  <!-- Informatie over de opleiding waar deze lichting onderdeel van is -->
  <Training>
    <!-- De unieke ID van de opleiding -->
    <Id>number</Id>
    
    <!-- Het opleidingstype van de opleiding. "Learning" voor reguliere opleidingen, "Longterm" voor opleidingsblokken. -->
    <Type>trainingType</Type>
    
    <!-- De naam van de opleiding -->
    <Name>string</Name>
  </Training>
</TrainingClass>
```