Reservation (Reservering)
De Reservation-entiteit beheert alle soorten reserveringen in Ultimo, van zaalreserveringen en poolauto's tot catering en bezoekersregistratie. Reserveringen werken samen met reserveerbare objecten (ReservableObject) en worden uitgesplitst in occurrences (herhalingen) en regels.
Entiteitsnaam: Reservation
Databasetabel: Reservation
Primaire sleutel: RESID (nvarchar 6)
Contextsbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| 0 | ReservationContext.None | (leeg) |
| 1 | ReservationContext.SpaceReservation | Zaalreservering |
| 2 | ReservationContext.Event | Evenement |
| 4 | ReservationContext.Catering | Catering-/Middelreservering |
| 8 | ReservationContext.Visit | Bezoek |
| 16 | ReservationContext.PoolCar | Poolautoreservering |
| 256 | ReservationContext.Exchange | Outlook-reservering |
Statussenbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| -1 | ReservationStatus.Trash | Trash |
| 0 | ReservationStatus.None | None |
| 1 | ReservationStatus.Created | Open |
| 2 | ReservationStatus.Requested | Aangevraagd |
Belangrijkste propertiesbewerken
| Property | Type | Kolom | Nullable | Omschrijving |
|---|---|---|---|---|
| Id | UltimoString(6) | RESID | Nee | Reservering-ID |
| Description | UltimoString(200) | RESDESCR | Ja | Omschrijving |
| Status | Status | RESRECSTATUS | Nee | Status (default: 1) |
| Context | Context | RESCONTEXT | Nee | Context |
| ReservationType | ReservationType | RESRESTID | Ja | Reserveringstype |
| Pattern | TimeslotPattern | RESPATTERN | Ja | Herhalingspatroon |
| ApplicantEmailAddress | UltimoString(80) | RESAPPLICANTEMAILADDRESS | Ja | E-mail aanvrager |
| ApplicantPhone | UltimoString(25) | RESAPPLICANTPHONE | Ja | Telefoon aanvrager |
| ApplicantToExchange | Boolean | RESAPPLICANTTOEXCHANGE | Nee | Synchroniseren naar Exchange |
| RejectText | UltimoString | RESREJECTTEXT | Ja | Afwijzingsreden |
Functionaliteit & property-gedragbewerken
Veel Reservation-properties worden niet handmatig ingevuld maar door workflows ingesteld of gecascadeerd over occurrences en regels. Onderstaande paragrafen beschrijven het gedrag van de kernproperties; gebruik lookup_property_usage("Reservation", "<property>") of lookup_property_usage("ReservationLine", "<property>") voor de volledige, actuele lijst per property en lookup_workflow("<naam>") voor de XML.
Pattern(TimeslotPattern) — herhalingspatroon en occurrence-aanmaak — Het herhalingspatroon op de Reservation bepaalt hoeveel ReservationOccurrences worden aangemaakt en op welke datums.Reservation_EditTimePatternvalideert eerst of de statusCreatedis of dat er al een patroon bestaat, haalt viaReservation_GetOrCreateReservationOccurrencede eerste occurrence op (of maakt die aan), en toont daarna de patroon-dialoog. Als het patroon uitzonderingen bevat (Pattern.HasExceptions) vraagt het systeem om bevestiging.Reservation_ExtendTimePatternverlengt een bestaand patroon zonder de bestaande occurrences te raken.Reservation_RemoveTimePatternverwijdert het patroon en leegt tevens de occurrences. Consultanttip: een patroon mag pas worden bewerkt als de reservering statusCreatedheeft; bij statusRequestedblokkeert de validatie.Status(recordstatus) — levenscyclus en cascade — De statusflow van een Reservation loopt viaReservation_Request(zet status opRequested) enReservation_Cancel(annulering). Bij annulering leestReservation_Cancelalle actieve occurrences op en biedt de gebruiker een keuze: alleen de huidige occurrence of alle toekomstige occurrences annuleren (ReservationCancelMethod). Per occurrence wordt danStatusCanceledDategezet en de bijbehorende ReservationLines worden gecanceld.Standard_Reservation_DeleteUnfinishedReservationsfiltert op statusCreateden een te oudeStatusCreatedDateom onafgemaakte reserveringen op te ruimen.Reservation_PreTrashleest deContextom te bepalen of verwijdering mag.Applicant→ automatische vulling van contactgegevens en kostenplaats —Reservation_OnApplicantChangedtriggert bij elke aanvragerwijziging. De workflow kopieert de aanvrager naar alle gekoppelde occurrences (ForEachoverReservation.Occurrences), vultDepartment,ApplicantPhoneenApplicantEmailAddressvanuit de medewerker-stamgegevens, en leidt daarna deCostCenteraf uit de afdeling. Bij een nieuw record wordtCostCenteralleen gezet als het nog leeg is (AssignWhenEmpty); bij een bestaand record wordt de kostenplaats altijd overschreven. Tot slot herberekentReservation_DetermineTariffGroupde tariefgroep op basis van de nieuwe aanvrager. Hetzelfde mechanisme geldt bijReservation_OnDepartmentChangedenReservation_OnCustomerChanged.StartDate/EndDateop ReservationOccurrence — tijdvak en conflictvalidatie — De tijden van een occurrence worden beheerd doorReservationOccurrence_CheckTime: alsStartDateofEndDatenog leeg is, of als het aantal personen nog niet is opgegeven terwijlAskForNumberOfPersonsactief is, opent het een tijdsdialoog. Via de applicatie-instelling#{UltimoSettings.ReservationSnapTime}wordt de minuten-snap bepaald (bijv. kwartieren). Wanneer een tijdvak wordt verplaatst, werktReservationOccurrence_MovedeStartDate,EndDateen alle bijbehorendeReservationLine.StartTime/EndTimein één transactie bij. Exchange-reserveringen (ReservationContext.Exchange) mogen niet worden verplaatst via deze workflow; daarvoor geldt een aparte validatie.ReservableObjectop ReservationLine — beschikbaarheidscheck en conflict-status — Het toewijzen of wijzigen van een reserveerbaar object verloopt viaReservationLine_Request: de workflow controleert of het object beschikbaar is (viaReservationLine_DetermineTimes+ een optioneleCheckForAvailabilityOfReservableObject-setting), en zet de status opReservedofConflict.ReservationLine_AlterTimeFindReservableObjectAndUpdateValidationsbevat de extra validaties: Exchange-reserveringen mogen niet worden herroosterd, de context van het article (catering/menu) wordt bepaald via de settingReservation.CateringContext, en de vestiging van het nieuwe object moet overeenkomen met die van de reservering.PartOfReservationLinekoppelt een sub-regel (bijv. een catering-artikel) aan de bovenliggende ruimteregel; dit veld stuurt cascade-annulering (ReservationLine_CancelCascade) en cascade-kopiëren (ReservationLine_CopyCascade).InvoiceCost/InvoiceQuantityop ReservationLine — doorbelasting — Factuurkosten worden gezet doorReservationLine_ResetInvoiceCosten deActionField1130-workflow; dePreInvoice*-reeks (ReservationLine_PreInvoiceNextRunToInvoiceProposal,ReservationLine_PreInvoiceProposalToInvoiceZero, etc.) valideert en beheert de interne doorbelaststransities.ReservableObjectCommittedwordt door vier Pre-workflows bijgehouden om te signaleren dat het object definitief geboekt is en niet meer vrijgegeven mag worden zonder expliciete annulering.NumberOfPersons— bezettingsbeheer — Dit veld bestaat zowel op ReservationOccurrence (RESOCNUMBEROFPERSONS) als op ReservationLine (RESLNUMBEROFPERSONS).ReservationOccurrence_AddReservableObjectInternalschrijft het aantal personen naar de occurrence bij het toevoegen van een object, enReservationOccurrence_AddDefaultArticleleest het veld om automatisch standaard catering-artikelen aan te maken per ruimteregel. Dit maakt het mogelijk om per ruimteregel automatisch koffie/water toe te voegen op basis van de verwachte bezetting.
Het volledige overzicht van álle Reservation-properties met hun schrijvende/lezende/filterende workflows staat in reference/properties/Reservation en reference/properties/ReservationLine.
Relaties met andere entiteitenbewerken
| Property | Verwijst naar | Omschrijving |
|---|---|---|
| Applicant | employee | Aanvrager |
| CostCenter | CostCenter | Kostenplaats |
| CostType | CostType | Kostensoort |
| Customer | Customer | Klant |
| Department | Department | Afdeling |
| Site | Site | Vestiging |
| Project | project | Project |
| WorkOrder | WorkOrder | Werkorder |
| NextReservation | Reservation | Volgende reservering (serie) |
| TariffGroup | TariffGroup | Tariefgroep |
| Occurrences | List[ReservationOccurrence] | Herhalingen |
Subentiteitenbewerken
ReservationOccurrencebewerken
Elke herhaling van een reservering wordt vastgelegd als een ReservationOccurrence met eigen start-/einddatum en status.
ReservationLinebewerken
De daadwerkelijke reservering van een specifiek object (ruimte, auto, catering-item) met tijden, kosten en status.
Tips voor consultantsbewerken
- Zaalreservering: Context
SpaceReservation(1) is de meest gebruikte context. Hierbij worden ruimtes (Space) gereserveerd via ReservableObject. - Poolauto's: Context
PoolCar(16) wordt gebruikt voor het reserveren van deelauto's/bedrijfsvoertuigen. - Exchange-integratie: Context
Exchange(256) synchroniseert reserveringen met Microsoft Outlook/Exchange. - Herhalingen: Via het
Pattern(TimeslotPattern) kunnen terugkerende reserveringen worden aangemaakt. - Catering: Context
Catering(4) wordt gebruikt voor het bestellen van catering bij een zaalreservering. - Bezoekersregistratie: Context
Visit(8) wordt gebruikt voor het registreren van bezoekers. - Doorbelasting: Via
CostCenter,CostTypeen de kosten op ReservationLine kan doorbelasting worden ingericht. - Conflictdetectie: Ultimo detecteert automatisch conflicten bij overlappende reserveringen.
Database Detailsbewerken
De tabel dba.Reservation bevat 35 kolommen. Reservation heeft geen computed columns en geen trigger-gestuurde kolommen.
Belangrijke defaultsbewerken
| Kolom | Default | Toelichting |
|---|---|---|
ResContext |
0 (Geen) |
Geen standaard context -- moet expliciet worden ingesteld |
ResRecStatus |
0 (None) |
Standaard status |
ResApplicantToExchange |
1 (true) |
Standaard synchroniseren naar Exchange |
ResRecCreateDate |
sysdatetimeoffset() |
Aanmaakdatum automatisch |
Triggersbewerken
Reservation heeft geen eigen triggers en geen externe triggers.
Consultanttip: Let op dat
ResApplicantToExchangestandaard optruestaat. Dit betekent dat nieuwe reserveringen automatisch naar Outlook/Exchange worden gesynchroniseerd als de Exchange-integratie is geconfigureerd. Zet dit opfalseals Exchange-synchronisatie niet gewenst is. De eenvoudige database-structuur (geen triggers) betekent dat alle complexe logica (conflictdetectie, herhalingen, etc.) via workflows en applicatielogica wordt afgehandeld.
Brondatabewerken
Let op: De wiki-samenvatting hierboven toont een curated subset van properties en praktische consultant-tips. Voor ground truth (exacte kolomnamen, alle properties, defaults, triggers) gebruik de onderstaande tools.
- Entity-definitie —
lookup_entity("Reservation")· reference/entities/Reservation Alle properties, contexts en statussen. Bron:Entities.xml. - DB-schema —
lookup_table_schema("Reservation")· reference/tables/Reservation Alle DB-kolommen, triggers, computed columns en defaults. Bron:database-schema.json. - Gerelateerde workflows —
find_workflows("", entity="Reservation")Alle Before/After Save events en andere workflow-ActionFields voor Reservation. Bron:workflows.xml. - Property-gebruik —
lookup_property_usage("Reservation", "Pattern")· reference/properties/Reservation Welke workflowsPattern,Status,Applicanten andere Reservation-properties lezen/schrijven/filteren. Zie ook reference/properties/ReservationLine voor het gedrag vanStartTime,EndTime,ReservableObject,PartOfReservationLineenInvoiceCostop regelniveau. Bron:workflows.xml. - Workflow-XML van een vuller —
lookup_workflow("ReservationLine_Request")De volledige beschikbaarheidscheck-logica: hoeReservableObjectwordt gevalideerd en de status opReservedofConflictwordt gezet. Bron:workflows.xml.