Jahresplätze
The Jahresplätze (annual pitches) page is where you manage long-term contracts for permanent campers — the Dauercamper who lease a pitch for a whole year, typically with their own caravan or chalet on it. This is the most common long-term arrangement at Swiss campsites and is administratively very different from a regular booking: one contract per pitch per year, billed once, often renewed automatically. Use this page to set up new contracts, mark them paid, renew for next year, see which annual bookings still need linking to a contract, and to keep your Jahresplatz pitch inventory in order. The page has a teal accent banner so you can tell at a glance you are not on the Pauschalgast page (purple).
How to find it
Section titled “How to find it”In the left sidebar, open the Gäste (Guests) section. The second entry — labelled Jahresplätze — opens this page. The entry is only visible if your tenant has the seasonal-contracts feature and the Jahresplätze module enabled.
What’s on the page
Section titled “What’s on the page”Banner
Section titled “Banner”A teal accent banner reads “Jahresplätze” with the subtitle “Dauerstellplätze mit Saisonvertrag — nicht dasselbe wie Pauschalgast” (Permanent pitches with a seasonal contract — not the same as Pauschalgast). The teal/purple distinction is intentional.
Top action
Section titled “Top action”A primary button on the right of the title bar:
- On the Verträge / Dauercamper tab: + Neuer Vertrag (New contract).
- On the Stellplätze tab: + Neuer Platz (New pitch).
- Verträge / Dauercamper (Contracts / Permanent campers) — the contract list. Selected by default.
- Stellplätze (Pitches) — the inventory of pitches that are configured as Jahresplatz type.
Verträge tab
Section titled “Verträge tab”Filter row
- Jahr (Year) — a dropdown to filter contracts by year. The default is “Alle” (All), so multi-year contracts (e.g. arrival 2025, departure 2033) stay visible. The dropdown lists last year, this year, and the next two years.
- Suchen (Search) — a text box that searches across pitch number, tenant first/last name, full name, email, phone, and street address. Search is local (no debounce) and updates the list as you type.
- Summary line (right side) — ”
Verträge · verknüpfte Buchungen · CHF ” tells you the count of contracts in the filtered view, the total number of bookings linked to those contracts, and the sum of the contract amounts.
Column legend
A small grey header strip lists the column meanings: Platz, Dauercamper, Jahr, Zeitraum, Betrag, Bezahlt, Buchungen.
Contract cards
Each contract is rendered as an expandable card. Click anywhere on a card header to expand or collapse it. The header row shows:
- Expand triangle.
- Platz — the pitch number in monospace.
- Dauercamper — the tenant’s full name in bold, with their email below in small grey text.
- Jahr — the contract year.
- Zeitraum — start date – end date.
- Betrag — total amount in CHF.
- Bezahlt — a checkbox plus a coloured badge: green “Bezahlt” (Paid) or orange “Offen” (Open). Tick or untick the checkbox to flip the paid status; the click does not expand the card.
- Buchungen — a coloured badge showing the count of regular bookings linked to this contract (blue if non-zero, grey if zero).
Expanded card body
Inside the expanded section there are three action buttons across the top:
- Bearbeiten (Edit) — opens the contract modal pre-filled with the existing data.
- Verlängern (Renew) — opens the contract modal as a new contract for the next year, copying every field except the year and the paid flag (which resets to false). You confirm and save it as a separate contract.
- Löschen (Delete) — asks “Vertrag löschen?” and deletes the contract on confirmation.
Below the buttons, the linked bookings are listed in a small table:
- Referenz — booking reference.
- Gast — full guest name.
- Anreise / Abreise — check-in / check-out.
- Status — the booking status badge (Ausstehend / Bestätigt / Storniert / Ausgecheckt / No-Show).
- Betrag — total amount in CHF.
If the contract has no linked bookings, the area shows a small grey italic note explaining that no booking has been recorded yet (or that the backfill process could not find a unique match).
Empty state
If no contracts match the filter, you see “Keine Verträge gefunden” (No contracts found).
Nicht zugeordnete Jahresplatz-Buchungen (Unassigned annual bookings)
A collapsible panel at the bottom of the contracts tab. It lists Jahresplatz-type bookings that exist in the system but are not linked to any contract — typically because the contract has not been entered yet, or because the names do not match closely enough for the automated backfill to link them. The panel header is highlighted in amber when the count is greater than zero. Inside, a small table shows pitch number, booking reference, guest name, dates, status, and amount. Use this panel as a worklist: every entry here represents a Jahresplatz-type booking that needs a contract created or linked.
Contract modal
Section titled “Contract modal”Opens from + Neuer Vertrag, Bearbeiten, or Verlängern. The header reads “Neuer Jahresplatz-Vertrag”, “Vertrag bearbeiten”, or “Verlängerung
- Stellplatz & Jahr (Pitch and year):
- Platz — required dropdown of all Jahresplatz pitches.
- Jahr — required year. Changing the year auto-fills start (1 January) and end (31 December) of that year.
- Von / Bis — the start and end dates, editable if you want a partial-year contract.
- Betrag (CHF) — the contract amount. If a pitch is selected and the dates are set, CampOne suggests a price (“Empfehlung: CHF X (Y Tage × per-night rate)”) with an Übernehmen (Apply) link that fills the suggestion into the input.
- Dauercamper (Permanent camper):
- Vorname / Nachname (Nachname is required).
- E-Mail / Telefon.
- Strasse / Adresse.
- PLZ / Ort.
- A short final block:
- Bezahlt checkbox.
- Notizen — a small free-text field.
Footer buttons: Speichern (Save), Abbrechen (Cancel).
Stellplätze tab
Section titled “Stellplätze tab”The Pitches tab is a Jahresplatz-only view of your pitch inventory. Columns:
- Nummer — pitch number in monospace.
- Name — the descriptive name.
- Status — coloured badge: active (green), maintenance (orange), inactive (grey).
- Kapazität — maximum occupants.
- Preis / Nacht — the per-night base price (used as the basis for the contract suggestion).
- Aktionen:
- Bearbeiten (Edit) — opens the Site form modal.
- Deaktivieren (Deactivate) — only shown for non-inactive pitches; sets the pitch to inactive after a confirm prompt.
The + Neuer Platz button (top right) opens a fresh Site form modal pre-set to the Jahresplatz site type.
If your tenant has no Jahresplatz pitches yet, the table reads “Keine Jahresplätze gefunden” (No annual pitches found) — start by creating one before opening any contracts.
Common workflows
Section titled “Common workflows”Set up a new annual contract
Section titled “Set up a new annual contract”- Confirm the pitch already exists. Switch to the Stellplätze tab to check; if missing, click + Neuer Platz, fill in the form, and save.
- Switch back to Verträge / Dauercamper.
- Click + Neuer Vertrag in the top right.
- In the modal, choose the pitch from the Platz dropdown.
- Enter the Jahr (year). The Von / Bis dates auto-fill to 1 January – 31 December. Adjust them if the contract is partial-year.
- Enter the Betrag (amount). If a price recommendation appears under the field, click Übernehmen to use it, or type a custom price.
- Fill in the Dauercamper (tenant) details. Surname is mandatory; first name, contact details, and address are recommended.
- Tick Bezahlt if the contract has already been paid. Otherwise leave it unticked.
- Add internal Notizen if needed.
- Click Speichern. The new contract appears in the list.
Mark a contract as paid
Section titled “Mark a contract as paid”- Find the contract row.
- Click the Bezahlt checkbox in the row header.
- The badge flips from “Offen” to “Bezahlt”.
- The change saves immediately; no confirmation needed.
Renew a contract for next year
Section titled “Renew a contract for next year”- Find the contract you want to renew.
- Click the row to expand it.
- Click Verlängern. The contract modal opens as “Verlängerung
”. - Every field is copied from the current contract except the year (incremented) and the Bezahlt flag (reset to false).
- Adjust the price if your rates have changed.
- Click Speichern. A new contract row for next year appears in the list. The original contract is unchanged.
- To see the next year’s contract immediately, change the Jahr filter to the new year (or leave it on “Alle”).
Edit a contract
Section titled “Edit a contract”- Find the contract.
- Click the row to expand.
- Click Bearbeiten. The modal opens pre-filled.
- Change the fields you need.
- Click Speichern.
Link an annual booking to a contract
Section titled “Link an annual booking to a contract”The system tries to link bookings to contracts automatically by matching guest name and dates. When it cannot, the booking shows up in the Nicht zugeordnete Jahresplatz-Buchungen panel.
- Open the unassigned-bookings panel at the bottom of the Verträge tab.
- Identify the booking you want to link.
- If a matching contract already exists for that pitch and year, edit the contract details so the tenant’s name on the contract matches the guest name on the booking — automatic linking will pick it up on the next refresh.
- If no contract exists yet, click + Neuer Vertrag and create one for that pitch and year. Once saved, the booking is matched and disappears from the unassigned panel.
- If the booking does not belong on a Jahresplatz pitch at all, your CampOne contact will help you reclassify the record.
Delete a contract
Section titled “Delete a contract”- Find the contract.
- Expand it.
- Click Löschen. Confirm “Vertrag löschen?” in the browser prompt.
- The contract is removed. Any bookings that were linked to it become unassigned and reappear in the Nicht zugeordnete Jahresplatz-Buchungen panel.
Add or remove a Jahresplatz pitch
Section titled “Add or remove a Jahresplatz pitch”- Switch to the Stellplätze tab.
- To add: click + Neuer Platz, fill in the Site form modal, save. The new pitch becomes available in the contract modal’s Platz dropdown.
- To deactivate an unused pitch: click Deaktivieren in its row and confirm the prompt. The pitch keeps its history but no longer accepts new contracts.
- To edit: click Bearbeiten and update the fields.
Find a contract by tenant or address
Section titled “Find a contract by tenant or address”- On the Verträge / Dauercamper tab, type a search term into the Suchen box.
- The list filters as you type.
- The summary line on the right updates to reflect the matching count and total amount.
- Clear the box to see all contracts again.
Billing cycle
Section titled “Billing cycle”CampOne treats Jahresplatz contracts as one fixed amount for the whole year, payable once. The Bezahlt flag on the contract is the simple paid/unpaid marker. Tenants who want individual invoices, partial payments, or instalment schedules tied to a Jahresplatz contract should talk to their CampOne contact — those flows are not exposed on this page today.
Renewal cadence
Section titled “Renewal cadence”Contracts do not auto-renew. The Verlängern action gives you a one-click way to copy a contract into the next year, but each renewal is a deliberate save. This keeps you in control if a tenant leaves, the price changes, or the pitch is being reorganised.
Tips and gotchas
Section titled “Tips and gotchas”- Jahresplatz and Pauschalgast are not the same thing. Jahresplätze are year-long contracts on permanent pitches; Pauschalgäste are package bookings for part of a season. The teal banner here vs. purple on Pauschalgast helps you tell them apart.
- Year filter defaults to “Alle”. This is intentional: multi-year leases (e.g. start 2025, end 2033) would otherwise be invisible if you defaulted to a single year.
- Search is local, so it filters the contracts already loaded for the current year filter. If you cannot find a tenant, widen the year filter.
- Renew is a copy, not a move. The original contract stays exactly as it was. If you renew by accident, just delete the new contract.
- The Bezahlt checkbox saves immediately. There is no confirmation. Be deliberate when ticking it on a busy table.
- The price suggestion in the modal multiplies the pitch’s per-night rate by the number of days — useful as a sanity check but not a binding rate. Override it freely.
- Deleting a contract orphans its bookings. Deleted contracts re-add their bookings to the unassigned panel. Recreate the contract or reclassify the bookings if this happens by mistake.
- The Stellplätze tab is restricted to Jahresplatz-type pitches. Your other pitches live on the main Sites page; do not duplicate them here.
- Capacity-related warnings that you see when creating regular bookings do not appear here. Contracts are an administrative record, not a calendar event — the calendar is unaffected by contract creation.
- The unassigned-bookings panel is highlighted in amber when there are entries to deal with. Treat that highlight as your action list at the start of the season.
- Walk-in tenants are unusual on a Jahresplatz contract but supported: the contract record stores the tenant’s name and address even if no registered guest profile exists. Linking a contract to a registered guest profile is handled automatically once the guest’s name matches across both records.
Related pages
Section titled “Related pages”- Pauschalgast — package bookings; the conceptually adjacent page.
- Sites — the master pitch inventory; non-Jahresplatz pitches live there.
- Bookings — Jahresplatz-type bookings are visible there as well.
- Guests — your annual tenants also appear in the guest directory.
- Invoices — invoices generated against Jahresplatz bookings live there.