App erstellt

This commit is contained in:
2026-07-31 10:42:00 +00:00
parent a8158ed10b
commit d5467c3f1a
50 changed files with 3888 additions and 976 deletions
@@ -1,17 +1,24 @@
{
"gitSyncId": "6a61e887eeb7b478efb4d43d_fd6147fe-e2bf-4150-bd3f-3b2705b1865c",
"id": "Page1_JSObject1.TeilnehmerprimaryColumnscustomColumn1onClick",
"gitSyncId": "6a6869faa8b745bffc91aca9_a23dd8b9-ad48-4651-a61c-115904ae2a40",
"id": "Page1_CheckinData.quantity",
"pluginId": "js-plugin",
"pluginType": "JS",
"unpublishedAction": {
"actionConfiguration": {
"encodeParamsToggle": true,
"jsArguments": [],
"jsArguments": [
{
"name": "value"
},
{
"name": "fallback",
"value": "{{0}}"
}
],
"paginationType": "NONE",
"timeoutInMillisecond": 10000
},
"clientSideExecution": true,
"collectionId": "Page1_JSObject1",
"collectionId": "Page1_CheckinData",
"confirmBeforeExecute": false,
"datasource": {
"isAutoGenerated": false,
@@ -23,8 +30,8 @@
"key": "body"
}
],
"fullyQualifiedName": "JSObject1.TeilnehmerprimaryColumnscustomColumn1onClick",
"name": "TeilnehmerprimaryColumnscustomColumn1onClick",
"fullyQualifiedName": "CheckinData.quantity",
"name": "quantity",
"pageId": "Page1",
"runBehaviour": "MANUAL",
"userSetOnLoad": false
@@ -0,0 +1,41 @@
{
"gitSyncId": "6a6869faa8b745bffc91aca9_dbdaaa85-b218-4a6c-a2e1-30e6b7046b41",
"id": "Page1_CheckinData.saveAusgabe",
"pluginId": "js-plugin",
"pluginType": "JS",
"unpublishedAction": {
"actionConfiguration": {
"encodeParamsToggle": true,
"jsArguments": [
{
"name": "personId"
},
{
"name": "schluessel"
},
{
"name": "stirnlampe"
}
],
"paginationType": "NONE",
"timeoutInMillisecond": 10000
},
"collectionId": "Page1_CheckinData",
"confirmBeforeExecute": false,
"datasource": {
"isAutoGenerated": false,
"name": "UNUSED_DATASOURCE",
"pluginId": "js-plugin"
},
"dynamicBindingPathList": [
{
"key": "body"
}
],
"fullyQualifiedName": "CheckinData.saveAusgabe",
"name": "saveAusgabe",
"pageId": "Page1",
"runBehaviour": "MANUAL",
"userSetOnLoad": false
}
}
@@ -0,0 +1,41 @@
{
"gitSyncId": "6a6869faa8b745bffc91aca9_2e3e8c29-eae6-41ae-b866-42230123e371",
"id": "Page1_CheckinData.saveRueckgabe",
"pluginId": "js-plugin",
"pluginType": "JS",
"unpublishedAction": {
"actionConfiguration": {
"encodeParamsToggle": true,
"jsArguments": [
{
"name": "personId"
},
{
"name": "schluesselRetour"
},
{
"name": "stirnlampeRetour"
}
],
"paginationType": "NONE",
"timeoutInMillisecond": 10000
},
"collectionId": "Page1_CheckinData",
"confirmBeforeExecute": false,
"datasource": {
"isAutoGenerated": false,
"name": "UNUSED_DATASOURCE",
"pluginId": "js-plugin"
},
"dynamicBindingPathList": [
{
"key": "body"
}
],
"fullyQualifiedName": "CheckinData.saveRueckgabe",
"name": "saveRueckgabe",
"pageId": "Page1",
"runBehaviour": "MANUAL",
"userSetOnLoad": false
}
}
@@ -0,0 +1,35 @@
{
"gitSyncId": "6a6869faa8b745bffc91aca9_9e0a4cd5-348e-4d47-94e2-a5971d349175",
"id": "Page1_qryDiagnoseTermin",
"pluginId": "mssql-plugin",
"pluginType": "DB",
"unpublishedAction": {
"actionConfiguration": {
"body": "DECLARE @IDReise bigint =\n {{ Termin.selectedOptionValue }};\n\nSELECT\n @IDReise AS AusgewaehlteIDReise,\n\n R.Code AS Reisecode,\n R.Bezeichnung AS Reise,\n P.Bezeichnung AS Produkt,\n R.TerminVon,\n R.TerminBis,\n\n COUNT(DISTINCT B.IDBuchung)\n AS AnzahlBuchungen,\n\n COUNT(BT.IDBuchungTN)\n AS AnzahlTeilnehmende,\n\n SUM(\n CASE\n WHEN BT.Status = N'F'\n THEN 1\n ELSE 0\n END\n ) AS Status_F,\n\n SUM(\n CASE\n WHEN BT.Status = N'O'\n THEN 1\n ELSE 0\n END\n ) AS Status_O,\n\n SUM(\n CASE\n WHEN COALESCE(BT.Status, N'') = N''\n THEN 1\n ELSE 0\n END\n ) AS Status_Leer,\n\n SUM(\n CASE\n WHEN BT.Status NOT IN (N'F', N'O')\n AND COALESCE(BT.Status, N'') <> N''\n THEN 1\n ELSE 0\n END\n ) AS Andere_Status\n\nFROM dbo.Reise R\n\nINNER JOIN dbo.Produkt P\n ON P.IDProdukt = R.IDProdukt_FS\n\nLEFT JOIN dbo.Buchung B\n ON B.IDReise_FS = R.IDReise\n\nLEFT JOIN dbo.BuchungTN BT\n ON BT.IDBuchung_FS = B.IDBuchung\n\nWHERE\n R.IDReise = @IDReise\n\nGROUP BY\n R.Code,\n R.Bezeichnung,\n P.Bezeichnung,\n R.TerminVon,\n R.TerminBis;",
"encodeParamsToggle": true,
"paginationType": "NONE",
"pluginSpecifiedTemplates": [
{
"value": true
}
],
"timeoutInMillisecond": 10000
},
"confirmBeforeExecute": false,
"datasource": {
"id": "Buspro Datenbank",
"isAutoGenerated": false,
"name": "Buspro Datenbank",
"pluginId": "mssql-plugin"
},
"dynamicBindingPathList": [
{
"key": "body"
}
],
"name": "qryDiagnoseTermin",
"pageId": "Page1",
"runBehaviour": "MANUAL",
"userSetOnLoad": false
}
}
@@ -0,0 +1,71 @@
DECLARE @IDReise bigint =
{{ Termin.selectedOptionValue }};
SELECT
@IDReise AS AusgewaehlteIDReise,
R.Code AS Reisecode,
R.Bezeichnung AS Reise,
P.Bezeichnung AS Produkt,
R.TerminVon,
R.TerminBis,
COUNT(DISTINCT B.IDBuchung)
AS AnzahlBuchungen,
COUNT(BT.IDBuchungTN)
AS AnzahlTeilnehmende,
SUM(
CASE
WHEN BT.Status = N'F'
THEN 1
ELSE 0
END
) AS Status_F,
SUM(
CASE
WHEN BT.Status = N'O'
THEN 1
ELSE 0
END
) AS Status_O,
SUM(
CASE
WHEN COALESCE(BT.Status, N'') = N''
THEN 1
ELSE 0
END
) AS Status_Leer,
SUM(
CASE
WHEN BT.Status NOT IN (N'F', N'O')
AND COALESCE(BT.Status, N'') <> N''
THEN 1
ELSE 0
END
) AS Andere_Status
FROM dbo.Reise R
INNER JOIN dbo.Produkt P
ON P.IDProdukt = R.IDProdukt_FS
LEFT JOIN dbo.Buchung B
ON B.IDReise_FS = R.IDReise
LEFT JOIN dbo.BuchungTN BT
ON BT.IDBuchung_FS = B.IDBuchung
WHERE
R.IDReise = @IDReise
GROUP BY
R.Code,
R.Bezeichnung,
P.Bezeichnung,
R.TerminVon,
R.TerminBis;
@@ -0,0 +1,31 @@
{
"gitSyncId": "6a6869faa8b745bffc91aca9_fbfc060a-c297-4a06-8fd6-b0f16db3e35b",
"id": "Page1_qryHaeuser",
"pluginId": "mssql-plugin",
"pluginType": "DB",
"unpublishedAction": {
"actionConfiguration": {
"body": "WITH ProdukteMitTrennern AS\n(\n SELECT\n P.Bezeichnung,\n T1.Position1,\n T2.Position2\n\n FROM dbo.Produkt P\n\n CROSS APPLY\n (\n SELECT\n CHARINDEX(\n N' - ',\n P.Bezeichnung\n ) AS Position1\n ) T1\n\n CROSS APPLY\n (\n SELECT\n CHARINDEX(\n N' - ',\n P.Bezeichnung,\n T1.Position1 + 3\n ) AS Position2\n ) T2\n\n WHERE\n COALESCE(P.Status, N'') <> N'L'\n AND P.Bezeichnung LIKE N'%Sportclub%'\n),\n\nRoheHaeuser AS\n(\n SELECT\n LTRIM(RTRIM(\n SUBSTRING(\n Bezeichnung,\n Position1 + 3,\n Position2 - Position1 - 3\n )\n )) AS Haus\n\n FROM ProdukteMitTrennern\n\n WHERE\n Position1 > 0\n AND Position2 > Position1\n),\n\nBereinigteHaeuser AS\n(\n SELECT\n REPLACE(\n REPLACE(\n REPLACE(\n REPLACE(\n Haus,\n NCHAR(160),\n N' '\n ),\n NCHAR(8203),\n N''\n ),\n CHAR(13),\n N''\n ),\n CHAR(10),\n N''\n ) AS Haus\n\n FROM RoheHaeuser\n),\n\nKanonischeHaeuser AS\n(\n SELECT\n CASE\n WHEN Haus LIKE N'Sportclub Steinach%'\n THEN N'Sportclub Steinachhof'\n\n WHEN Haus LIKE N'Sportclub Wal%schlössli'\n THEN N'Sportclub Waldschlössli'\n\n ELSE Haus\n END AS Haus\n\n FROM BereinigteHaeuser\n)\n\nSELECT DISTINCT\n Haus AS label,\n Haus AS value\n\nFROM KanonischeHaeuser\n\nWHERE\n NULLIF(Haus, N'') IS NOT NULL\n\nORDER BY\n label;",
"encodeParamsToggle": true,
"paginationType": "NONE",
"pluginSpecifiedTemplates": [
{
"value": true
}
],
"timeoutInMillisecond": 10000
},
"confirmBeforeExecute": false,
"datasource": {
"id": "Buspro Datenbank",
"isAutoGenerated": false,
"name": "Buspro Datenbank",
"pluginId": "mssql-plugin"
},
"dynamicBindingPathList": [],
"name": "qryHaeuser",
"pageId": "Page1",
"runBehaviour": "ON_PAGE_LOAD",
"userSetOnLoad": true
}
}
@@ -0,0 +1,102 @@
WITH ProdukteMitTrennern AS
(
SELECT
P.Bezeichnung,
T1.Position1,
T2.Position2
FROM dbo.Produkt P
CROSS APPLY
(
SELECT
CHARINDEX(
N' - ',
P.Bezeichnung
) AS Position1
) T1
CROSS APPLY
(
SELECT
CHARINDEX(
N' - ',
P.Bezeichnung,
T1.Position1 + 3
) AS Position2
) T2
WHERE
COALESCE(P.Status, N'') <> N'L'
AND P.Bezeichnung LIKE N'%Sportclub%'
),
RoheHaeuser AS
(
SELECT
LTRIM(RTRIM(
SUBSTRING(
Bezeichnung,
Position1 + 3,
Position2 - Position1 - 3
)
)) AS Haus
FROM ProdukteMitTrennern
WHERE
Position1 > 0
AND Position2 > Position1
),
BereinigteHaeuser AS
(
SELECT
REPLACE(
REPLACE(
REPLACE(
REPLACE(
Haus,
NCHAR(160),
N' '
),
NCHAR(8203),
N''
),
CHAR(13),
N''
),
CHAR(10),
N''
) AS Haus
FROM RoheHaeuser
),
KanonischeHaeuser AS
(
SELECT
CASE
WHEN Haus LIKE N'Sportclub Steinach%'
THEN N'Sportclub Steinachhof'
WHEN Haus LIKE N'Sportclub Wal%schlössli'
THEN N'Sportclub Waldschlössli'
ELSE Haus
END AS Haus
FROM BereinigteHaeuser
)
SELECT DISTINCT
Haus AS label,
Haus AS value
FROM KanonischeHaeuser
WHERE
NULLIF(Haus, N'') IS NOT NULL
ORDER BY
label;
@@ -0,0 +1,35 @@
{
"gitSyncId": "6a6869faa8b745bffc91aca9_e28f767d-84ec-4b17-9922-6e732ebf2aac",
"id": "Page1_qryReisen",
"pluginId": "mssql-plugin",
"pluginType": "DB",
"unpublishedAction": {
"actionConfiguration": {
"body": "DECLARE @Haus nvarchar(200) =\n {{ Hausauswahl.selectedOptionValue }};\n\nDECLARE @Heute date =\n CAST(GETDATE() AS date);\n\nSELECT\n CONCAT(\n CONVERT(varchar(10), R.TerminVon, 104),\n N' ',\n CONVERT(varchar(10), R.TerminBis, 104),\n N' | ',\n P.Bezeichnung,\n CASE\n WHEN NULLIF(R.Code, N'') IS NOT NULL\n THEN CONCAT(N' | ', R.Code)\n ELSE N''\n END\n ) AS label,\n\n R.IDReise AS value,\n\n R.IDReise,\n R.Code AS Reisecode,\n R.Bezeichnung AS Reise,\n P.Bezeichnung AS Produkt,\n R.TerminVon,\n R.TerminBis\nFROM dbo.Reise R\nINNER JOIN dbo.Produkt P\n ON P.IDProdukt = R.IDProdukt_FS\nWHERE\n COALESCE(R.Status, N'') <> N'L'\n AND COALESCE(P.Status, N'') <> N'L'\n AND CHARINDEX(@Haus, P.Bezeichnung) > 0\n\n -- Reise überschneidet den Zeitraum heute -7 bis heute +20\n AND CAST(R.TerminBis AS date) >=\n DATEADD(DAY, -7, @Heute)\n\n AND CAST(R.TerminVon AS date) <=\n DATEADD(DAY, 20, @Heute)\nORDER BY\n R.TerminVon,\n P.Bezeichnung,\n R.Code;",
"encodeParamsToggle": true,
"paginationType": "NONE",
"pluginSpecifiedTemplates": [
{
"value": true
}
],
"timeoutInMillisecond": 10000
},
"confirmBeforeExecute": false,
"datasource": {
"id": "Buspro Datenbank",
"isAutoGenerated": false,
"name": "Buspro Datenbank",
"pluginId": "mssql-plugin"
},
"dynamicBindingPathList": [
{
"key": "body"
}
],
"name": "qryReisen",
"pageId": "Page1",
"runBehaviour": "AUTOMATIC",
"userSetOnLoad": false
}
}
@@ -0,0 +1,46 @@
DECLARE @Haus nvarchar(200) =
{{ Hausauswahl.selectedOptionValue }};
DECLARE @Heute date =
CAST(GETDATE() AS date);
SELECT
CONCAT(
CONVERT(varchar(10), R.TerminVon, 104),
N' ',
CONVERT(varchar(10), R.TerminBis, 104),
N' | ',
P.Bezeichnung,
CASE
WHEN NULLIF(R.Code, N'') IS NOT NULL
THEN CONCAT(N' | ', R.Code)
ELSE N''
END
) AS label,
R.IDReise AS value,
R.IDReise,
R.Code AS Reisecode,
R.Bezeichnung AS Reise,
P.Bezeichnung AS Produkt,
R.TerminVon,
R.TerminBis
FROM dbo.Reise R
INNER JOIN dbo.Produkt P
ON P.IDProdukt = R.IDProdukt_FS
WHERE
COALESCE(R.Status, N'') <> N'L'
AND COALESCE(P.Status, N'') <> N'L'
AND CHARINDEX(@Haus, P.Bezeichnung) > 0
-- Reise überschneidet den Zeitraum heute -7 bis heute +20
AND CAST(R.TerminBis AS date) >=
DATEADD(DAY, -7, @Heute)
AND CAST(R.TerminVon AS date) <=
DATEADD(DAY, 20, @Heute)
ORDER BY
R.TerminVon,
P.Bezeichnung,
R.Code;
@@ -0,0 +1,35 @@
{
"gitSyncId": "6a6869faa8b745bffc91aca9_90a268fa-09ba-4502-adc1-fa6a57538075",
"id": "Page1_qryTeilnehmer",
"pluginId": "mssql-plugin",
"pluginType": "DB",
"unpublishedAction": {
"actionConfiguration": {
"body": "DECLARE @IDReise bigint =\n {{ Termin.selectedOptionValue }};\n\nSELECT\n BT.IDBuchungTN AS TeilnehmerID,\n B.Vorgang,\n AP.Name,\n AP.Vorname,\n\n COALESCE(\n NULLIF(E.Mailadresse, N''),\n N''\n ) AS [E-Mail],\n\n CONVERT(\n varchar(10),\n AP.Geburtsdatum,\n 104\n ) AS [Geb.-Datum],\n\n COALESCE(\n W.Zus_Wunsch,\n N''\n ) AS Zus_Wunsch,\n\n COALESCE(\n LJSON.LeistungenJSON,\n N'[]'\n ) AS LeistungenJSON,\n\n COALESCE(\n SP.Skipassnummer,\n N''\n ) AS Skipassnummer\n\nFROM dbo.Buchung B\n\nINNER JOIN dbo.BuchungTN BT\n ON BT.IDBuchung_FS = B.IDBuchung\n\nINNER JOIN dbo.AdressePerson AP\n ON AP.IDAdressePerson =\n BT.IDAdressePerson_FS\n\nOUTER APPLY\n(\n SELECT TOP (1)\n AK.Wert AS Mailadresse\n FROM dbo.AdresseKommunikation AK\n WHERE\n AK.IDAdressePerson_FS =\n AP.IDAdressePerson\n\n AND AK.Wert LIKE N'%@%'\n\n ORDER BY\n AK.IDAdresseKommunikation\n) E\n\nOUTER APPLY\n(\n SELECT\n STRING_AGG(\n NULLIF(\n LTRIM(RTRIM(BTW.Text)),\n N''\n ),\n N' · '\n ) AS Zus_Wunsch\n\n FROM dbo.BuchungTNWunsch BTW\n\n WHERE\n BTW.IDBuchungTN_FS =\n BT.IDBuchungTN\n) W\n\nOUTER APPLY\n(\n SELECT\n (\n SELECT\n X.Bezeichnung AS [name],\n X.Wert AS [value]\n\n FROM\n (\n SELECT DISTINCT\n L.Bezeichnung,\n\n CASE\n WHEN NULLIF(\n LTRIM(RTRIM(BTL.Nummer)),\n N''\n ) IS NOT NULL\n THEN BTL.Nummer\n\n ELSE N'1'\n END AS Wert\n\n FROM dbo.BuchungTNLeistung BTL\n\n INNER JOIN dbo.Leistung L\n ON L.IDLeistung =\n BTL.IDLeistung_FS\n\n WHERE\n BTL.IDBuchungTN_FS =\n BT.IDBuchungTN\n\n AND COALESCE(\n L.Status,\n N''\n ) <> N'L'\n\n AND EXISTS\n (\n SELECT 1\n\n FROM dbo.BuchungTNLeistungPreis BTLP\n\n INNER JOIN dbo.BuchungTNPreis BTP\n ON BTP.IDBuchungTNPreis =\n BTLP.IDBuchungTNPreis_FS\n\n WHERE\n BTLP.IDBuchungTNLeistung_FS =\n BTL.IDBuchungTNLeistung\n\n AND BTP.Status IN\n (N'F', N'O')\n )\n ) X\n\n ORDER BY\n X.Bezeichnung\n\n FOR JSON PATH\n ) AS LeistungenJSON\n) LJSON\n\nOUTER APPLY\n(\n SELECT TOP (1)\n BTL.Nummer AS Skipassnummer\n\n FROM dbo.BuchungTNLeistung BTL\n\n INNER JOIN dbo.Leistung L\n ON L.IDLeistung =\n BTL.IDLeistung_FS\n\n WHERE\n BTL.IDBuchungTN_FS =\n BT.IDBuchungTN\n\n AND L.Bezeichnung LIKE N'%Skipass%'\n\n AND NULLIF(\n LTRIM(RTRIM(BTL.Nummer)),\n N''\n ) IS NOT NULL\n\n AND EXISTS\n (\n SELECT 1\n\n FROM dbo.BuchungTNLeistungPreis BTLP\n\n INNER JOIN dbo.BuchungTNPreis BTP\n ON BTP.IDBuchungTNPreis =\n BTLP.IDBuchungTNPreis_FS\n\n WHERE\n BTLP.IDBuchungTNLeistung_FS =\n BTL.IDBuchungTNLeistung\n\n AND BTP.Status IN\n (N'F', N'O')\n )\n\n ORDER BY\n BTL.IDBuchungTNLeistung\n) SP\n\nWHERE\n B.IDReise_FS = @IDReise\n AND BT.Status = N'F'\n\nORDER BY\n B.Vorgang,\n AP.Name,\n AP.Vorname,\n BT.Position;",
"encodeParamsToggle": true,
"paginationType": "NONE",
"pluginSpecifiedTemplates": [
{
"value": true
}
],
"timeoutInMillisecond": 10000
},
"confirmBeforeExecute": false,
"datasource": {
"id": "Buspro Datenbank",
"isAutoGenerated": false,
"name": "Buspro Datenbank",
"pluginId": "mssql-plugin"
},
"dynamicBindingPathList": [
{
"key": "body"
}
],
"name": "qryTeilnehmer",
"pageId": "Page1",
"runBehaviour": "AUTOMATIC",
"userSetOnLoad": false
}
}
@@ -0,0 +1,194 @@
DECLARE @IDReise bigint =
{{ Termin.selectedOptionValue }};
SELECT
BT.IDBuchungTN AS TeilnehmerID,
B.Vorgang,
AP.Name,
AP.Vorname,
COALESCE(
NULLIF(E.Mailadresse, N''),
N''
) AS [E-Mail],
CONVERT(
varchar(10),
AP.Geburtsdatum,
104
) AS [Geb.-Datum],
COALESCE(
W.Zus_Wunsch,
N''
) AS Zus_Wunsch,
COALESCE(
LJSON.LeistungenJSON,
N'[]'
) AS LeistungenJSON,
COALESCE(
SP.Skipassnummer,
N''
) AS Skipassnummer
FROM dbo.Buchung B
INNER JOIN dbo.BuchungTN BT
ON BT.IDBuchung_FS = B.IDBuchung
INNER JOIN dbo.AdressePerson AP
ON AP.IDAdressePerson =
BT.IDAdressePerson_FS
OUTER APPLY
(
SELECT TOP (1)
AK.Wert AS Mailadresse
FROM dbo.AdresseKommunikation AK
WHERE
AK.IDAdressePerson_FS =
AP.IDAdressePerson
AND AK.Wert LIKE N'%@%'
ORDER BY
AK.IDAdresseKommunikation
) E
OUTER APPLY
(
SELECT
STRING_AGG(
NULLIF(
LTRIM(RTRIM(BTW.Text)),
N''
),
N' · '
) AS Zus_Wunsch
FROM dbo.BuchungTNWunsch BTW
WHERE
BTW.IDBuchungTN_FS =
BT.IDBuchungTN
) W
OUTER APPLY
(
SELECT
(
SELECT
X.Bezeichnung AS [name],
X.Wert AS [value]
FROM
(
SELECT DISTINCT
L.Bezeichnung,
CASE
WHEN NULLIF(
LTRIM(RTRIM(BTL.Nummer)),
N''
) IS NOT NULL
THEN BTL.Nummer
ELSE N'1'
END AS Wert
FROM dbo.BuchungTNLeistung BTL
INNER JOIN dbo.Leistung L
ON L.IDLeistung =
BTL.IDLeistung_FS
WHERE
BTL.IDBuchungTN_FS =
BT.IDBuchungTN
AND COALESCE(
L.Status,
N''
) <> N'L'
AND EXISTS
(
SELECT 1
FROM dbo.BuchungTNLeistungPreis BTLP
INNER JOIN dbo.BuchungTNPreis BTP
ON BTP.IDBuchungTNPreis =
BTLP.IDBuchungTNPreis_FS
WHERE
BTLP.IDBuchungTNLeistung_FS =
BTL.IDBuchungTNLeistung
AND BTP.Status IN
(N'F', N'O')
)
) X
ORDER BY
X.Bezeichnung
FOR JSON PATH
) AS LeistungenJSON
) LJSON
OUTER APPLY
(
SELECT TOP (1)
BTL.Nummer AS Skipassnummer
FROM dbo.BuchungTNLeistung BTL
INNER JOIN dbo.Leistung L
ON L.IDLeistung =
BTL.IDLeistung_FS
WHERE
BTL.IDBuchungTN_FS =
BT.IDBuchungTN
AND L.Bezeichnung LIKE N'%Skipass%'
AND NULLIF(
LTRIM(RTRIM(BTL.Nummer)),
N''
) IS NOT NULL
AND EXISTS
(
SELECT 1
FROM dbo.BuchungTNLeistungPreis BTLP
INNER JOIN dbo.BuchungTNPreis BTP
ON BTP.IDBuchungTNPreis =
BTLP.IDBuchungTNPreis_FS
WHERE
BTLP.IDBuchungTNLeistung_FS =
BTL.IDBuchungTNLeistung
AND BTP.Status IN
(N'F', N'O')
)
ORDER BY
BTL.IDBuchungTNLeistung
) SP
WHERE
B.IDReise_FS = @IDReise
AND BT.Status = N'F'
ORDER BY
B.Vorgang,
AP.Name,
AP.Vorname,
BT.Position;