diff --git a/src/lib/ui/AccountingView.svelte b/src/lib/ui/AccountingView.svelte
index 291b5c2e..07ad2e77 100644
--- a/src/lib/ui/AccountingView.svelte
+++ b/src/lib/ui/AccountingView.svelte
@@ -209,7 +209,7 @@
addSumRow: boolean
) => {
let data = [];
- data.push(cols.map((col) => col.text.trim()));
+ data.push(cols.map((col) => col.text.join(' ')));
for (let row of rows) {
data.push(cols.map((col) => col.toTableEntry(row)));
}
diff --git a/src/lib/ui/SortableTable.svelte b/src/lib/ui/SortableTable.svelte
index 4532eb9e..b4ab7c01 100644
--- a/src/lib/ui/SortableTable.svelte
+++ b/src/lib/ui/SortableTable.svelte
@@ -12,7 +12,7 @@
}: {
rows: T[];
cols: {
- text: string;
+ text: string[];
sort: undefined | ((r1: T, r2: T) => number);
toTableEntry: (r: T) => string | number;
}[];
@@ -36,25 +36,31 @@
};
+{#snippet tableHead(text: string[], i: number, sort: boolean)}
+ {#if sort}
+
+
+
+ {:else}
+
+ {#each text as line}
+ {line}
+ {/each}
+ {/if}
+{/snippet}
+
{#each cols as col, i}
- {#if col.sort != undefined}
-
-
-
- {:else}
- {col.text}
- {/if}
+ {@render tableHead(col.text, i, col.sort != undefined)}
{/each}
diff --git a/src/lib/ui/tableData.ts b/src/lib/ui/tableData.ts
index 163d01ef..773fa031 100644
--- a/src/lib/ui/tableData.ts
+++ b/src/lib/ui/tableData.ts
@@ -21,7 +21,7 @@ export type Subtractions = CompanyRow & {
};
export type Column = {
- text: string;
+ text: string[];
sort: undefined | ((r1: T, r2: T) => number);
toTableEntry: (r: T) => string | number;
};
@@ -64,7 +64,7 @@ const displayDuration = (duration: number) => {
};
const firstTourColAdmin: Column = {
- text: 'Unternehmen',
+ text: ['Unternehmen'],
sort: (a: TourWithRequests, b: TourWithRequests) => a.companyId - b.companyId,
toTableEntry: (r: TourWithRequests) => r.companyName ?? ''
};
@@ -72,39 +72,39 @@ const firstTourColAdmin: Column = {
const restTourCols = (isAdmin: boolean): Column[] => {
return [
{
- text: 'Fahrzeug',
+ text: ['Fahrzeug'],
sort: (a: TourWithRequests, b: TourWithRequests) => a.vehicleId - b.vehicleId,
toTableEntry: (r: TourWithRequests) => r.licensePlate ?? ''
},
{
- text: 'Abfahrt ',
+ text: ['Abfahrt'],
sort: (t1: TourWithRequests, t2: TourWithRequests) => t1.startTime - t2.startTime,
toTableEntry: (r: TourWithRequests) => displayUnixtimeMs(r.startTime, true)
},
{
- text: 'Ankunft',
+ text: ['Ankunft'],
sort: (t1: TourWithRequests, t2: TourWithRequests) => t1.endTime - t2.endTime,
toTableEntry: (r: TourWithRequests) => displayUnixtimeMs(r.endTime, true)
},
{
- text: 'Kunden',
+ text: ['Kunden'],
sort: (t1: TourWithRequests, t2: TourWithRequests) =>
getCustomerCount(t1, false) - getCustomerCount(t2, false),
toTableEntry: (r: TourWithRequests) => getCustomerCount(r, false)
},
{
- text: 'erschienene Kunden ',
+ text: ['erschienene', 'Kunden'],
sort: (t1: TourWithRequests, t2: TourWithRequests) =>
getCustomerCount(t1, true) - getCustomerCount(t2, true),
toTableEntry: (r: TourWithRequests) => getCustomerCount(r, true)
},
{
- text: 'Taxameterstand ',
+ text: ['Taxameterstand'],
sort: (t1: TourWithRequests, t2: TourWithRequests) => (t1.fare ?? 0) - (t2.fare ?? 0),
toTableEntry: (r: TourWithRequests) => getEuroString(r.fare)
},
{
- text: isAdmin ? 'Kosten ' : 'Einnahmen ',
+ text: isAdmin ? ['Kosten'] : ['Einnahmen'],
sort: (t1: TourWithRequests, t2: TourWithRequests) => getTourCost(t1) - getTourCost(t2),
toTableEntry: (r: TourWithRequests) => getEuroString(getTourCost(r))
}
@@ -116,52 +116,52 @@ export const tourColsCompany = restTourCols(false);
export const subtractionColsAdmin: Column[] = [
{
- text: 'Unternehmen',
+ text: ['Unternehmen'],
sort: (a: Subtractions, b: Subtractions) => a.companyId - b.companyId,
toTableEntry: (r: Subtractions) => r.companyName ?? ''
},
{
- text: 'Fahrzeug',
+ text: ['Fahrzeug'],
sort: (a: Subtractions, b: Subtractions) => a.vehicleId - b.vehicleId,
toTableEntry: (r: Subtractions) => r.licensePlate ?? ''
},
{
- text: 'Tag ',
+ text: ['Tag'],
sort: (a: Subtractions, b: Subtractions) => a.timestamp - b.timestamp,
toTableEntry: (r: Subtractions) => displayUnixtimeMs(r.timestamp)
},
{
- text: 'Kunden',
+ text: ['Kunden'],
sort: (a: Subtractions, b: Subtractions) => a.customerCount - b.customerCount,
toTableEntry: (r: Subtractions) => r.customerCount
},
{
- text: 'erschienene Kunden ',
+ text: ['erschienene', 'Kunden'],
sort: (a: Subtractions, b: Subtractions) => a.verifiedCustomerCount - b.verifiedCustomerCount,
toTableEntry: (r: Subtractions) => r.verifiedCustomerCount
},
{
- text: 'Taxameterstand kumuliert ',
+ text: ['Taxameterstand', 'kumuliert'],
sort: (a: Subtractions, b: Subtractions) => a.taxameter - b.taxameter,
toTableEntry: (r: Subtractions) => getEuroString(r.taxameter)
},
{
- text: 'Einnahmen ohne Obergrenze ',
+ text: ['Einnahmen', 'ohne Obergrenze'],
sort: (a: Subtractions, b: Subtractions) => a.uncapped - b.uncapped,
toTableEntry: (r: Subtractions) => getEuroString(r.uncapped)
},
{
- text: 'gesetzte Verfügbarkeit',
+ text: ['gesetzte', 'Verfügbarkeit'],
sort: (a: Subtractions, b: Subtractions) => a.availabilityDuration - b.availabilityDuration,
toTableEntry: (r: Subtractions) => displayDuration(r.availabilityDuration)
},
{
- text: 'Obergrenze',
+ text: ['Obergrenze'],
sort: (a: Subtractions, b: Subtractions) => a.availabilityDuration - b.availabilityDuration,
toTableEntry: (r: Subtractions) => getEuroString((r.availabilityDuration / HOUR) * CAP)
},
{
- text: 'über Obergrenze',
+ text: ['über', 'Obergrenze'],
sort: (a: Subtractions, b: Subtractions) =>
a.uncapped -
(a.availabilityDuration / HOUR) * CAP -
@@ -170,12 +170,12 @@ export const subtractionColsAdmin: Column[] = [
getEuroString(r.uncapped - (r.availabilityDuration / HOUR) * CAP)
},
{
- text: 'Einnahmen mit Obergrenze ',
+ text: ['Einnahmen', 'mit Obergrenze'],
sort: (a: Subtractions, b: Subtractions) => a.capped - b.capped,
toTableEntry: (r: Subtractions) => getEuroString(r.capped)
},
{
- text: 'Abzüge ',
+ text: ['Abzüge'],
sort: (a: Subtractions, b: Subtractions) => a.uncapped - a.capped - b.uncapped + b.capped,
toTableEntry: (r: Subtractions) => getEuroString(r.uncapped - r.capped)
}
@@ -185,33 +185,37 @@ export const subtractionColsCompany = subtractionColsAdmin.slice(1);
export const companyColsAdmin: Column[] = [
{
- text: 'Unternehmen',
+ text: ['Unternehmen'],
sort: (a: CompanyRow, b: CompanyRow) => a.companyId - b.companyId,
toTableEntry: (r: CompanyRow) => r.companyName ?? ''
},
- { text: 'Kunden', sort: undefined, toTableEntry: (r: CompanyRow) => r.customerCount },
{
- text: 'erschienene Kunden ',
- sort: undefined,
+ text: ['Kunden'],
+ sort: (a: CompanyRow, b: CompanyRow) => a.customerCount - b.customerCount,
+ toTableEntry: (r: CompanyRow) => r.customerCount
+ },
+ {
+ text: ['erschienene', 'Kunden'],
+ sort: (a: CompanyRow, b: CompanyRow) => a.verifiedCustomerCount - b.verifiedCustomerCount,
toTableEntry: (r: CompanyRow) => r.verifiedCustomerCount
},
{
- text: 'Taxameterstand kumuliert ',
+ text: ['Taxameterstand', 'kumuliert'],
sort: (a: CompanyRow, b: CompanyRow) => a.taxameter - b.taxameter,
toTableEntry: (r: CompanyRow) => getEuroString(r.taxameter)
},
{
- text: 'Kosten ohne Obergrenze ',
+ text: ['Kosten ohne', 'Obergrenze'],
sort: (a: CompanyRow, b: CompanyRow) => a.uncapped - b.uncapped,
toTableEntry: (r: CompanyRow) => getEuroString(r.uncapped)
},
{
- text: 'Kosten mit Obergrenze ',
+ text: ['Kosten mit Obergrenze'],
sort: (a: CompanyRow, b: CompanyRow) => a.capped - b.capped,
toTableEntry: (r: CompanyRow) => getEuroString(r.capped)
},
{
- text: 'Abzüge ',
+ text: ['Abzüge'],
sort: (a: CompanyRow, b: CompanyRow) => a.uncapped - a.capped - b.uncapped + b.capped,
toTableEntry: (r: CompanyRow) => getEuroString(r.uncapped - r.capped)
}