Untitled diff
881 lines
// ==UserScript==
// ==UserScript==
// @name * Gebäude- & Fuhrparkverwalter
// @name * Gebäude- & Fuhrparkverwalter
// @namespace bos-ernie.leitstellenspiel.de
// @namespace bos-ernie.leitstellenspiel.de
// @version 1.24.0
// @version 1.25.0
// @license BSD-3-Clause
// @license BSD-3-Clause
// @author BOS-Ernie
// @author BOS-Ernie
// @description Bereitet diverse Informationen zu Wachen und Fahrzeugen auf, welche dem Spieler Hinweise über noch fehlende Einstellungen, Ausbauten, Fahrzeugen etc. gibt
// @description Bereitet diverse Informationen zu Wachen und Fahrzeugen auf, welche dem Spieler Hinweise über noch fehlende Einstellungen, Ausbauten, Fahrzeugen etc. gibt
// @match https://www.leitstellenspiel.de/
// @match https://www.leitstellenspiel.de/
// @match https://polizei.leitstellenspiel.de/
// @match https://polizei.leitstellenspiel.de/
// @icon https://www.google.com/s2/favicons?sz=64&domain=leitstellenspiel.de
// @icon https://www.google.com/s2/favicons?sz=64&domain=leitstellenspiel.de
// @run-at document-idle
// @run-at document-idle
// @grant none
// @grant none
// @resource https://forum.leitstellenspiel.de/index.php?thread/23925-script-geb%C3%A4ude-fuhrparkverwalter-by-bos-ernie/
// @resource https://forum.leitstellenspiel.de/index.php?thread/23925-script-geb%C3%A4ude-fuhrparkverwalter-by-bos-ernie/
// @require https://update.greasyfork.org/scripts/491642/1354160/%2A%20Common%3A%20IndexedDB.js
// @require https://update.greasyfork.org/scripts/491642/1354160/%2A%20Common%3A%20IndexedDB.js
// @downloadURL https://update.greasyfork.org/scripts/463536/%2A%20Geb%C3%A4ude-%20%20Fuhrparkverwalter.user.js
// @updateURL https://update.greasyfork.org/scripts/463536/%2A%20Geb%C3%A4ude-%20%20Fuhrparkverwalter.meta.js
// ==/UserScript==
// ==/UserScript==
/* global $, user_premium */
/* global $, user_premium */
/**
/**
*
*
* 📝 Aufgaben
* 📝 Aufgaben
* - [ ] Soll-Personal
* - [ ] Soll-Personal
* - [ ] Grosswachen separat konfigurieren
* - [ ] Grosswachen separat konfigurieren
* - [x] Das Soll-Personal für Kleinwachen wird statt dem konfigurierten Wert mit dem der Normalwachen gesetzt (Feuerwehr, Polizei und Rettung)
* - [x] Das Soll-Personal für Kleinwachen wird statt dem konfigurierten Wert mit dem der Normalwachen gesetzt (Feuerwehr, Polizei und Rettung)
* - [x] Soll-Personal: Gebäudetypen Rettungshubschrauber-Station, Rettungshundestaffel und Wasserrettung ergänzen
* - [x] Soll-Personal: Gebäudetypen Rettungshubschrauber-Station, Rettungshundestaffel und Wasserrettung ergänzen
* - [ ] Tab-Inhalte (Informationen, Tabellen etc.) grundsätzlich anzeigen
* - [ ] Tab-Inhalte (Informationen, Tabellen etc.) grundsätzlich anzeigen
* - [ ] Nur 2 Tabs anzeigen: Gebäude und Fahrzeuge. Pro Tab entsprechende Filtermöglichkeiten hinzufügen
* - [ ] Nur 2 Tabs anzeigen: Gebäude und Fahrzeuge. Pro Tab entsprechende Filtermöglichkeiten hinzufügen
* - [ ] Wachen auf Fahrzeuge überprüfen (richtige Fahrzeuge pro Wache)
* - [ ] Wachen auf Fahrzeuge überprüfen (richtige Fahrzeuge pro Wache)
* - [ ] Wachen auf nächstgelegene Leitstelle überprüfen
* - [ ] Wachen auf nächstgelegene Leitstelle überprüfen
* - [ ] Pol-Wachen mit mehr als 1 DGL-Fahrzeug auflisten
* - [ ] Pol-Wachen mit mehr als 1 DGL-Fahrzeug auflisten
* - [ ] Zugfahrzeug
* - [ ] Zugfahrzeug
* - [x] Richtiges Zugfahrzeug überprüfen
* - [x] Richtiges Zugfahrzeug überprüfen
* - [ ] Überprüfen, ob einem Zugfahrzeug mehrere Anhänger zugewiesen sind
* - [ ] Überprüfen, ob einem Zugfahrzeug mehrere Anhänger zugewiesen sind
* - [ ] Statistik (Fahrzeug- und Gebäudestatistik)
* - [ ] Statistik (Fahrzeug- und Gebäudestatistik)
* - [ ] Fahrzeuge in Status 6 auflisten
* - [ ] Fahrzeuge in Status 6 auflisten
* - [ ] Informationen und Tabellen immer anzeigen. Wenn keine Daten vorhanden sind, dann entsprechende Hinweise anzeigen.
* - [ ] Informationen und Tabellen immer anzeigen. Wenn keine Daten vorhanden sind, dann entsprechende Hinweise anzeigen.
* - [ ] Ansicht Ausbauten erweitern: Auflistung der inaktiven Wachen bzw. Wachen mit entsprechend inaktivem Ausbau
* - [ ] Ansicht Ausbauten erweitern: Auflistung der inaktiven Wachen bzw. Wachen mit entsprechend inaktivem Ausbau
*
*
* ✅ Erledigt
* ✅ Erledigt
* - [x] Wachen auf Soll-Personal überprüfen
* - [x] Wachen auf Soll-Personal überprüfen
* - [x] Wachen auf Soll-Personal korrigieren
* - [x] Wachen auf Soll-Personal korrigieren
* - [x] Wachen auf automatisches Werben überprüfen
* - [x] Wachen auf automatisches Werben überprüfen
* - [x] Wachen auf Ausbauten überprüfen
* - [x] Wachen auf Ausbauten überprüfen
* - [x] Überprüfen, ob Ausbauten enabled sind
* - [x] Überprüfen, ob Ausbauten enabled sind
* - [x] Resultat der Überprüfung auf Tab anzeigen
* - [x] Resultat der Überprüfung auf Tab anzeigen
* - [x] Funktion zum Aktivieren/Deaktivieren von Ausbauten nach Ausbautyp
* - [x] Funktion zum Aktivieren/Deaktivieren von Ausbauten nach Ausbautyp
* - [x] Fahrzeuge auf Anzahl zugewiesenes Personal überprüfen
* - [x] Fahrzeuge auf Anzahl zugewiesenes Personal überprüfen
* - [x] Verwendung von sessionStorage durch IndexedDB ersetzen
* - [x] Verwendung von sessionStorage durch IndexedDB ersetzen
* - [x] Präfix [Gebäude- & Fuhrparkverwalter] in der Konsole verwenden
* - [x] Präfix [Gebäude- & Fuhrparkverwalter] in der Konsole verwenden
- [x] Nach der initialen Ladung kein automatisches Neuladen nach Zeit, sondern nur bei Bedarf per Button
- [x] Nach der initialen Ladung kein automatisches Neuladen nach Zeit, sondern nur bei Bedarf per Button
* - [x] operationalReadinessConfiguration automatisch über https://api.lss-manager.de/de_DE/buildings erstellen
* - [x] operationalReadinessConfiguration automatisch über https://api.lss-manager.de/de_DE/buildings erstellen
*/
*/
(async function () {
(async function () {
let buildings = [];
let buildings = [];
let buildingsWithIncorrectPersonalCountTarget = [];
let buildingsWithIncorrectPersonalCountTarget = [];
let buildingsWithoutAutomaticHiring = [];
let buildingsWithoutAutomaticHiring = [];
let buildingsWithMissingExtensions = [];
let buildingsWithMissingExtensions = [];
let buildingTypes = [];
let buildingTypes = [];
let vehicles = [];
let vehicles = [];
let settings = null;
let settings = null;
const keyBuildings = "Buildings";
const keyBuildings = "Buildings";
const keyVehicles = "Vehicles";
const keyVehicles = "Vehicles";
const keySettings = "Settings";
const keySettings = "Settings";
const defaultSettings = {
const defaultSettings = {
personnelSetPoint: {
personnelSetPoint: {
"building-type-0": 250, // Feuerwache
"building-type-0": 400, // Feuerwache
"building-type-2": 80, // Rettungswache
"building-type-2": 400, // Rettungswache
"building-type-5": 80, // Rettungshubschrauber-Station
"building-type-5": 400, // Rettungshubschrauber-Station
"building-type-6": 300, // Polizeiwache
"building-type-6": 400, // Polizeiwache
"building-type-9": 140, // THW
"building-type-9": 400, // THW
"building-type-11": 233, // Bereitschaftspolizei
"building-type-11": 400, // Bereitschaftspolizei
"building-type-12": 100, // Schnelleinsatzgruppe (SEG)
"building-type-12": 400, // Schnelleinsatzgruppe (SEG)
"building-type-13": 150, // Polizeihubschrauberstation
"building-type-13": 400, // Polizeihubschrauberstation
"building-type-15": 16, // Wasserrettung
"building-type-15": 400, // Wasserrettung
"building-type-17": 80, // Polizei-Sondereinheiten
"building-type-17": 400, // Polizei-Sondereinheiten
"building-type-18": 250, // Feuerwache (Kleinwache)
"building-type-18": 400, // Feuerwache (Kleinwache)
"building-type-19": 300, // Polizeiwache (Kleinwache)
"building-type-19": 400, // Polizeiwache (Kleinwache)
"building-type-20": 80, // Rettungswache (Kleinwache)
"building-type-20": 400, // Rettungswache (Kleinwache)
"building-type-21": 30, // Rettungshundestaffel
"building-type-21": 400, // Rettungshundestaffel
"building-type-25": 400, // Bergrettungswache
},
},
};
};
const pseudoBuildingTypeIdMapping = [
const pseudoBuildingTypeIdMapping = [
{
{
id: "0",
id: "0",
caption: "Feuerwache",
caption: "Feuerwache",
buildingTypeId: 0,
buildingTypeId: 0,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "1",
id: "1",
caption: "Feuerwehrschule",
caption: "Feuerwehrschule",
buildingTypeId: 1,
buildingTypeId: 1,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "2",
id: "2",
caption: "Rettungswache",
caption: "Rettungswache",
buildingTypeId: 2,
buildingTypeId: 2,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "3",
id: "3",
caption: "Rettungsschule",
caption: "Rettungsschule",
buildingTypeId: 3,
buildingTypeId: 3,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "4",
id: "4",
caption: "Krankenhaus",
caption: "Krankenhaus",
buildingTypeId: 4,
buildingTypeId: 4,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "5",
id: "5",
caption: "Rettungshubschrauber-Station",
caption: "Rettungshubschrauber-Station",
buildingTypeId: 5,
buildingTypeId: 5,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "6",
id: "6",
caption: "Polizeiwache",
caption: "Polizeiwache",
buildingTypeId: 6,
buildingTypeId: 6,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "7",
id: "7",
caption: "Leitstelle",
caption: "Leitstelle",
buildingTypeId: 7,
buildingTypeId: 7,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "8",
id: "8",
caption: "Polizeischule",
caption: "Polizeischule",
buildingTypeId: 8,
buildingTypeId: 8,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "9",
id: "9",
caption: "THW",
caption: "THW",
buildingTypeId: 9,
buildingTypeId: 9,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "10",
id: "10",
caption: "THW Bundesschule",
caption: "THW Bundesschule",
buildingTypeId: 10,
buildingTypeId: 10,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "11",
id: "11",
caption: "Bereitschaftspolizei",
caption: "Bereitschaftspolizei",
buildingTypeId: 11,
buildingTypeId: 11,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "12",
id: "12",
caption: "Schnelleinsatzgruppe (SEG)",
caption: "Schnelleinsatzgruppe (SEG)",
buildingTypeId: 12,
buildingTypeId: 12,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "13",
id: "13",
caption: "Polizeihubschrauberstation",
caption: "Polizeihubschrauberstation",
buildingTypeId: 13,
buildingTypeId: 13,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "14",
id: "14",
caption: "Bereitstellungsraum",
caption: "Bereitstellungsraum",
buildingTypeId: 14,
buildingTypeId: 14,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "15",
id: "15",
caption: "Wasserrettung",
caption: "Wasserrettung",
buildingTypeId: 15,
buildingTypeId: 15,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "16",
id: "16",
caption: "Verbandszellen",
caption: "Verbandszellen",
buildingTypeId: 16,
buildingTypeId: 16,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "17",
id: "17",
caption: "Polizei-Sondereinheiten",
caption: "Polizei-Sondereinheiten",
buildingTypeId: 17,
buildingTypeId: 17,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "18",
id: "18",
caption: "Feuerwache (Kleinwache)",
caption: "Feuerwache (Kleinwache)",
buildingTypeId: 0,
buildingTypeId: 0,
smallBuilding: true,
smallBuilding: true,
},
},
{
{
id: "19",
id: "19",
caption: "Polizeiwache (Kleinwache)",
caption: "Polizeiwache (Kleinwache)",
buildingTypeId: 6,
buildingTypeId: 6,
smallBuilding: true,
smallBuilding: true,
},
},
{
{
id: "20",
id: "20",
caption: "Rettungswache (Kleinwache)",
caption: "Rettungswache (Kleinwache)",
buildingTypeId: 2,
buildingTypeId: 2,
smallBuilding: true,
smallBuilding: true,
},
},
{
{
id: "21",
id: "21",
caption: "Rettungshundestaffel",
caption: "Rettungshundestaffel",
buildingTypeId: 21,
buildingTypeId: 21,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "22",
id: "22",
caption: "Großer Komplex",
caption: "Großer Komplex",
buildingTypeId: 22,
buildingTypeId: 22,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "23",
id: "23",
caption: "Kleiner Komplex",
caption: "Kleiner Komplex",
buildingTypeId: 23,
buildingTypeId: 23,
smallBuilding: false,
smallBuilding: false,
},
},
{
{
id: "24",
id: "24",
caption: "Reiterstaffel",
caption: "Reiterstaffel",
buildingTypeId: 24,
buildingTypeId: 24,
smallBuilding: false,
smallBuilding: false,
},
},
{
id: "25",
caption: "Bergrettungswache",
buildingTypeId: 25,
smallBuilding: false,
},
];
];
const requiredExtensionsPerBuildingType = [
const requiredExtensionsPerBuildingType = [
{
{
pseudoBuildingTypeId: "0",
pseudoBuildingTypeId: "0",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "1",
pseudoBuildingTypeId: "1",
extensions: [0, 1, 2],
extensions: [0, 1, 2],
},
},
{
{
pseudoBuildingTypeId: "2",
pseudoBuildingTypeId: "2",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "3",
pseudoBuildingTypeId: "3",
extensions: [0, 1, 2],
extensions: [0, 1, 2],
},
},
{
{
pseudoBuildingTypeId: "4",
pseudoBuildingTypeId: "4",
extensions: [0, 1, 2, 3, 4, 5, 6, 7, 8],
extensions: [0, 1, 2, 3, 4, 5, 6, 7, 8],
},
},
{
{
pseudoBuildingTypeId: "5",
pseudoBuildingTypeId: "5",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "6",
pseudoBuildingTypeId: "6",
extensions: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
extensions: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
},
},
{
{
pseudoBuildingTypeId: "7",
pseudoBuildingTypeId: "7",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "8",
pseudoBuildingTypeId: "8",
extensions: [0, 1, 2],
extensions: [0, 1, 2],
},
},
{
{
pseudoBuildingTypeId: "9",
pseudoBuildingTypeId: "9",
extensions: [0, 1, 2, 4, 5, 6, 8],
extensions: [0, 1, 2, 4, 5, 6, 8, 9, 10, 13],
},
},
{
{
pseudoBuildingTypeId: "10",
pseudoBuildingTypeId: "10",
extensions: [0, 1, 2],
extensions: [0, 1, 2],
},
},
{
{
pseudoBuildingTypeId: "11",
pseudoBuildingTypeId: "11",
extensions: [0, 1, 2, 3, 8],
extensions: [0, 1, 2, 3, 8],
},
},
{
{
pseudoBuildingTypeId: "12",
pseudoBuildingTypeId: "12",
extensions: [0, 1],
extensions: [0, 1],
},
},
{
{
pseudoBuildingTypeId: "13",
pseudoBuildingTypeId: "13",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "14",
pseudoBuildingTypeId: "14",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "15",
pseudoBuildingTypeId: "15",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "16",
pseudoBuildingTypeId: "16",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "17",
pseudoBuildingTypeId: "17",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "18",
pseudoBuildingTypeId: "18",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "19",
pseudoBuildingTypeId: "19",
extensions: [0, 1, 12],
extensions: [0, 1, 12],
},
},
{
{
pseudoBuildingTypeId: "20",
pseudoBuildingTypeId: "20",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "21",
pseudoBuildingTypeId: "21",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "22",
pseudoBuildingTypeId: "22",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "23",
pseudoBuildingTypeId: "23",
extensions: [],
extensions: [],
},
},
{
{
pseudoBuildingTypeId: "24",
pseudoBuildingTypeId: "24",
extensions: [],
extensions: [0,1,2,3,4,5],
},
{
pseudoBuildingTypeId: "25",
extensions: [0, 1, 2, 3],
},
},
];
];
const buildingsWithPersonal = [0, 2, 5, 6, 9, 11, 12, 13, 15, 17, 18, 19, 20, 21];
const buildingsWithPersonal = [0, 2, 5, 6, 9, 11, 12, 13, 15, 17, 18, 19, 20, 21, 24, 25];
const vehiclePersonnelAllocations = [
const vehiclePersonnelAllocations = [
{
{
vehicleTypeId: 2,
vehicleTypeId: 2,
vehicleTypeCaption: "DLK 23",
vehicleTypeCaption: "DLK 23",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 5,
vehicleTypeId: 5,
vehicleTypeCaption: "GW-A",
vehicleTypeCaption: "GW-A",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 10,
vehicleTypeId: 10,
vehicleTypeCaption: "GW-Öl",
vehicleTypeCaption: "GW-Öl",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 11,
vehicleTypeId: 11,
vehicleTypeCaption: "GW-L2-Wasser",
vehicleTypeCaption: "GW-L2-Wasser",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 12,
vehicleTypeId: 12,
vehicleTypeCaption: "GW-Messtechnik",
vehicleTypeCaption: "GW-Messtechnik",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 27,
vehicleTypeId: 27,
vehicleTypeCaption: "GW-Gefahrgut",
vehicleTypeCaption: "GW-Gefahrgut",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 28,
vehicleTypeId: 28,
vehicleTypeCaption: "RTW",
vehicleTypeCaption: "RTW",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 29,
vehicleTypeId: 29,
vehicleTypeCaption: "NEF",
vehicleTypeCaption: "NEF",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 30,
vehicleTypeId: 30,
vehicleTypeCaption: "HLF 20",
vehicleTypeCaption: "HLF 20",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 31,
vehicleTypeId: 31,
vehicleTypeCaption: "RTH",
vehicleTypeCaption: "RTH",
personnelCount: 1,
personnelCount: 1,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 32,
vehicleTypeId: 32,
vehicleTypeCaption: "FuStW",
vehicleTypeCaption: "FuStW",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 33,
vehicleTypeId: 33,
vehicleTypeCaption: "GW-Höhenrettung",
vehicleTypeCaption: "GW-Höhenrettung",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 34,
vehicleTypeId: 34,
vehicleTypeCaption: "ELW 2",
vehicleTypeCaption: "ELW 2",
personnelCount: 6,
personnelCount: 6,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 35,
vehicleTypeId: 35,
vehicleTypeCaption: "leBefKw",
vehicleTypeCaption: "leBefKw",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 40,
vehicleTypeId: 40,
vehicleTypeCaption: "MTW-TZ",
vehicleTypeCaption: "MTW-TZ",
personnelCount: 4,
personnelCount: 4,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 39,
vehicleTypeId: 39,
vehicleTypeCaption: "GKW",
vehicleTypeCaption: "GKW",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 40,
vehicleTypeId: 40,
vehicleTypeCaption: "MTW-TZ",
vehicleTypeCaption: "MTW-TZ",
personnelCount: 4,
personnelCount: 4,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 41,
vehicleTypeId: 41,
vehicleTypeCaption: "MzGW (FGr N)",
vehicleTypeCaption: "MzGW (FGr N)",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 42,
vehicleTypeId: 42,
vehicleTypeCaption: "LKW K 9",
vehicleTypeCaption: "LKW K 9",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 45,
vehicleTypeId: 45,
vehicleTypeCaption: "MLW 5",
vehicleTypeCaption: "MLW 5",
personnelCount: 6,
personnelCount: 6,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 46,
vehicleTypeId: 46,
vehicleTypeCaption: "WLF",
vehicleTypeCaption: "WLF",
personnelCount: 6,
personnelCount: 6,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 50,
vehicleTypeId: 50,
vehicleTypeCaption: "GruKw",
vehicleTypeCaption: "GruKw",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 52,
vehicleTypeId: 52,
vehicleTypeCaption: "GefKw",
vehicleTypeCaption: "GefKw",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 51,
vehicleTypeId: 51,
vehicleTypeCaption: "FüKW (Polizei)",
vehicleTypeCaption: "FüKW (Polizei)",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 53,
vehicleTypeId: 53,
vehicleTypeCaption: "Dekon-P",
vehicleTypeCaption: "Dekon-P",
personnelCount: 6,
personnelCount: 6,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 55,
vehicleTypeId: 55,
vehicleTypeCaption: "KdoW-LNA",
vehicleTypeCaption: "KdoW-LNA",
personnelCount: 1,
personnelCount: 1,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 56,
vehicleTypeId: 56,
vehicleTypeCaption: "KdoW-OrgL",
vehicleTypeCaption: "KdoW-OrgL",
personnelCount: 1,
personnelCount: 1,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 57,
vehicleTypeId: 57,
vehicleTypeCaption: "FwK",
vehicleTypeCaption: "FwK",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 58,
vehicleTypeId: 58,
vehicleTypeCaption: "KTW Typ B",
vehicleTypeCaption: "KTW Typ B",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 59,
vehicleTypeId: 59,
vehicleTypeCaption: "ELW 1 (SEG)",
vehicleTypeCaption: "ELW 1 (SEG)",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 60,
vehicleTypeId: 60,
vehicleTypeCaption: "GW-San",
vehicleTypeCaption: "GW-San",
personnelCount: 6,
personnelCount: 6,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 61,
vehicleTypeId: 61,
vehicleTypeCaption: "Polizeihubschrauber",
vehicleTypeCaption: "Polizeihubschrauber",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Polizeihubschrauberstation",
buildingCategory: "Polizeihubschrauberstation",
},
},
{
{
vehicleTypeId: 63,
vehicleTypeId: 63,
vehicleTypeCaption: "GW-Taucher",
vehicleTypeCaption: "GW-Taucher",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Wasserrettung",
buildingCategory: "Wasserrettung",
},
},
{
{
vehicleTypeId: 64,
vehicleTypeId: 64,
vehicleTypeCaption: "GW-Wasserrettung",
vehicleTypeCaption: "GW-Wasserrettung",
personnelCount: 6,
personnelCount: 6,
buildingCategory: "Wasserrettung",
buildingCategory: "Wasserrettung",
},
},
{
{
vehicleTypeId: 69,
vehicleTypeId: 69,
vehicleTypeCaption: "Tauchkraftwagen",
vehicleTypeCaption: "Tauchkraftwagen",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Wasserrettung",
buildingCategory: "Wasserrettung",
},
},
{
{
vehicleTypeId: 72,
vehicleTypeId: 72,
vehicleTypeCaption: "WaWe 10",
vehicleTypeCaption: "WaWe 10",
personnelCount: 5,
personnelCount: 5,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 73,
vehicleTypeId: 73,
vehicleTypeCaption: "GRTW",
vehicleTypeCaption: "GRTW",
personnelCount: 6,
personnelCount: 6,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 74,
vehicleTypeId: 74,
vehicleTypeCaption: "NAW",
vehicleTypeCaption: "NAW",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 75,
vehicleTypeId: 75,
vehicleTypeCaption: "FLF",
vehicleTypeCaption: "FLF",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 76,
vehicleTypeId: 76,
vehicleTypeCaption: "Rettungstreppe",
vehicleTypeCaption: "Rettungstreppe",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 79,
vehicleTypeId: 79,
vehicleTypeCaption: "SEK - ZF",
vehicleTypeCaption: "SEK - ZF",
personnelCount: 4,
personnelCount: 4,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 80,
vehicleTypeId: 80,
vehicleTypeCaption: "SEK - MTF",
vehicleTypeCaption: "SEK - MTF",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 81,
vehicleTypeId: 81,
vehicleTypeCaption: "MEK - ZF",
vehicleTypeCaption: "MEK - ZF",
personnelCount: 4,
personnelCount: 4,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 82,
vehicleTypeId: 82,
vehicleTypeCaption: "MEK - MTF",
vehicleTypeCaption: "MEK - MTF",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 83,
vehicleTypeId: 83,
vehicleTypeCaption: "GW-Werkfeuerwehr",
vehicleTypeCaption: "GW-Werkfeuerwehr",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 84,
vehicleTypeId: 84,
vehicleTypeCaption: "ULF mit Löscharm",
vehicleTypeCaption: "ULF mit Löscharm",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 85,
vehicleTypeId: 85,
vehicleTypeCaption: "TM 50",
vehicleTypeCaption: "TM 50",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 86,
vehicleTypeId: 86,
vehicleTypeCaption: "Turbolöscher",
vehicleTypeCaption: "Turbolöscher",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 87,
vehicleTypeId: 87,
vehicleTypeCaption: "TLF 4000",
vehicleTypeCaption: "TLF 4000",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "Feuerwehr",
buildingCategory: "Feuerwehr",
},
},
{
{
vehicleTypeId: 91,
vehicleTypeId: 91,
vehicleTypeCaption: "Rettungshundefahrzeug",
vehicleTypeCaption: "Rettungshundefahrzeug",
personnelCount: 5,
personnelCount: 5,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 93,
vehicleTypeId: 93,
vehicleTypeCaption: "MTW-OV",
vehicleTypeCaption: "MTW-OV",
personnelCount: 5,
personnelCount: 5,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 94,
vehicleTypeId: 94,
vehicleTypeCaption: "DHuFüKw",
vehicleTypeCaption: "DHuFüKw",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 95,
vehicleTypeId: 95,
vehicleTypeCaption: "Polizeimotorrad",
vehicleTypeCaption: "Polizeimotorrad",
personnelCount: 1,
personnelCount: 1,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 97,
vehicleTypeId: 97,
vehicleTypeCaption: "ITW",
vehicleTypeCaption: "ITW",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Rettungsdienst",
buildingCategory: "Rettungsdienst",
},
},
{
{
vehicleTypeId: 98,
vehicleTypeId: 98,
vehicleTypeCaption: "Zivilstreifenwagen",
vehicleTypeCaption: "Zivilstreifenwagen",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 99,
vehicleTypeId: 99,
vehicleTypeCaption: "LKW 7 Lbw",
vehicleTypeCaption: "LKW 7 Lbw",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 100,
vehicleTypeId: 100,
vehicleTypeCaption: "MLW 4",
vehicleTypeCaption: "MLW 4",
personnelCount: 7,
personnelCount: 7,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 103,
vehicleTypeId: 103,
vehicleTypeCaption: "FuStW (DGL)",
vehicleTypeCaption: "FuStW (DGL)",
personnelCount: 2,
personnelCount: 2,
buildingCategory: "Polizei",
buildingCategory: "Polizei",
},
},
{
{
vehicleTypeId: 109,
vehicleTypeId: 109,
vehicleTypeCaption: "MzGW SB",
vehicleTypeCaption: "MzGW SB",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 123,
vehicleTypeId: 123,
vehicleTypeCaption: "LKW 7 Lbw (FGr WP)",
vehicleTypeCaption: "LKW 7 Lbw (FGr WP)",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "THW",
buildingCategory: "THW",
},
},
{
{
vehicleTypeId: 130,
vehicleTypeId: 130,
vehicleTypeCaption: "GW-Bt",
vehicleTypeCaption: "GW-Bt",
personnelCount: 3,
personnelCount: 3,
buildingCategory: "SEG",
buildingCategory: "SEG",
},
},
{
{
vehicleTypeId: 131,
vehicleTypeId: 131,
vehicleTypeCaption: "Bt-Kombi",
vehicleTypeCaption: "Bt-Kombi",
personnelCount: 9,
personnelCount: 9,
buildingCategory: "SEG",
buildingCategory: "SEG",
},
},
{
vehicleTypeId: 134,
vehicleTypeCaption: "Pferdetransporter klein",
personnelCount: 4,
buildingCategory: "Polizei",
},
{
vehicleTypeId: 135,
vehicleTypeCaption: "Pferdetransporter groß",
personnelCount: 2,
buildingCategory: "Polizei",
},
{
vehicleTypeId: 137,
vehicleTypeCaption: "Zugfahrzeug Pferdetransport",
personnelCount: 6,
buildingCategory: "Polizei",
},
{
vehicleTypeId: 138,
vehicleTypeCaption: "GW-Verpflegung",
personnelCount: 6,
buildingCategory: "Feuerwehr",
},
{
vehicleTypeId: 139,
vehicleTypeCaption: "GW-Küche",
personnelCount: 3,
buildingCategory: "Feuerwehr",
},
{
vehicleTypeId: 140,
vehicleTypeCaption: "MTW-Verpflegung",
personnelCount: 6,
buildingCategory: "Feuerwehr",
},
{
vehicleTypeId: 144,
vehicleTypeCaption: "FüKW (THW)",
personnelCount: 4,
buildingCategory: "THW",
},
{
vehicleTypeId: 145,
vehicleTypeCaption: "FüKomKW",
personnelCount: 7,
buildingCategory: "THW",
},
{
vehicleTypeId: 147,
vehicleTypeCaption: "FmKW",
personnelCount: 7,
buildingCategory: "THW",
},
{
vehicleTypeId: 148,
vehicleTypeCaption: "MTW-FGr K",
personnelCount: 4,
buildingCategory: "THW",
},
{
vehicleTypeId: 149,
vehicleTypeCaption: "GW-Bergrettung (NEF)",
personnelCount: 6,
buildingCategory: "SEG",
},
{
vehicleTypeId: 150,
vehicleTypeCaption: "GW-Bergrettung",
personnelCount: 6,
buildingCategory: "SEG",
},
{
vehicleTypeId: 151,
vehicleTypeCaption: "ELW Bergrettung",
personnelCount: 3,
buildingCategory: "SEG",
},
{
vehicleTypeId: 152,
vehicleTypeCaption: "ATV",
personnelCount: 1,
buildingCategory: "SEG",
},
{
vehicleTypeId: 153,
vehicleTypeCaption: "Hundestaffel (Bergrettung)",
personnelCount: 5,
buildingCategory: "SEG",
},
{
vehicleTypeId: 154,
vehicleTypeCaption: "Schneefahrzeug",
personnelCount: 1,
buildingCategory: "SEG",
},
{
vehicleTypeId: 156,
vehicleTypeCaption: "Polizeihubschrauber mit verbauter Winde",
personnelCount: 3,
buildingCategory: "Polizei",
},
{
vehicleTypeId: 157,
vehicleTypeCaption: "RTH Winde",
personnelCount: 2,
buildingCategory: "Rettungsdienst",
},
{
vehicleTypeId: 158,
vehicleTypeCaption: "GW-Höhenrettung (Bergrettung)",
personnelCount: 4,
buildingCategory: "SEG",
},
];
];
function addModal() {
function addModal() {
const modal = document.createElement("div");
const modal = document.createElement("div");
modal.className = "modal fade";
modal.className = "modal fade";
modal.id = "building-and-fleet-manager-modal";
modal.id = "building-and-fleet-manager-modal";
modal.setAttribute("tabindex", "-1");
modal.setAttribute("tabindex", "-1");
modal.setAttribute("role", "dialog");
modal.setAttribute("role", "dialog");
modal.setAttribute("aria-labelledby", "building-and-fleet-manager-modal-label");
modal.setAttribute("aria-labelledby", "building-and-fleet-manager-modal-label");
modal.setAttribute("aria-hidden", "true");
modal.setAttribute("aria-hidden", "true");
modal.style.display = "none";
modal.style.display = "none";
modal.style.zIndex = "5000";
modal.style.zIndex = "5000";
modal.innerHTML = `<div class="modal-dialog modal-lg" role="document" style="width: 95%; margin: 40px auto;">
modal.innerHTML = `<div class="modal-dialog modal-lg" role="document" style="width: 95%; margin: 40px auto;">
<div class="modal-content">
<div class="modal-content">
<div class="modal-header">
<div class="modal-header">
<h1 class="modal-title" id="building-and-fleet-manager-modal-label">Gebäude- und Fahrzeugverwalter</h1>
<h1 class="modal-title" id="building-and-fleet-manager-modal-label">Gebäude- und Fahrzeugverwalter</h1>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
<span aria-hidden="true">×</span>
</button>
</button>
</div>
</div>
<div class="modal-body" style="height: calc(100vh - 350px); overflow-y: auto;">
<div class="modal-body" style="height: calc(100vh - 350px); overflow-y: auto;">
<div>
<div>
<ul class="nav nav-tabs" role="tablist" style="margin-bottom: 10px">
<ul class="nav nav-tabs" role="tablist" style="margin-bottom: 10px">
<li role="presentation" class="active">
<li role="presentation" class="active">
<a href="#gfm-buildings-panel" aria-controls="gfm-buildings-panel" role="tab" data-toggle="tab">
<a href="#gfm-buildings-panel" aria-controls="gfm-buildings-panel" role="tab" data-toggle="tab">
Gebäude
Gebäude
</a>
</a>
</li>
</li>
<li role="presentation">
<li role="presentation">
<a href="#operational-readiness-panel" aria-controls="operational-readiness-panel" role="tab" data-toggle="tab">
<a href="#operational-readiness-panel" aria-controls="operational-readiness-panel" role="tab" data-toggle="tab">
Einsatzbereitschaft
Einsatzbereitschaft
</a>
</a>
</li>
</li>
<li role="presentation">
<li role="presentation">
<a href="#tractive-vehicles-panel" aria-controls="tractive-vehicles-panel" role="tab" data-toggle="tab">
<a href="#tractive-vehicles-panel" aria-controls="tractive-vehicles-panel" role="tab" data-toggle="tab">
Zugfahrzeuge
Zugfahrzeuge
</a>
</a>
</li>
</li>
<li role="presentation">
<li role="presentation">
<a
<a
href="#personnel-allocation-panel"
href="#personnel-allocation-panel"
aria-controls="personnel-allocation-panel"
aria-controls="personnel-allocation-panel"
role="tab"
role="tab"
data-toggle="tab"
data-toggle="tab"
>
>
Personalzuweisung
Personalzuweisung
</a>
</a>
</li>
</li>
<li role="presentation">
<li role="presentation">
<a href="#settings-panel" aria-controls="settings-panel" role="tab" data-toggle="tab">
<a href="#settings-panel" aria-controls="settings-panel" role="tab" data-toggle="tab">
Einstellungen
Einstellungen
</a>
</a>
</li>
</li>
</ul>
</ul>
<div class="tab-content">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="gfm-buildings-panel">
<div role="tabpanel" class="tab-pane active" id="gfm-buildings-panel">
<!-- Filter und Aktionen -->
<!-- Filter und Aktionen -->
<div class="panel panel-default">
<div class="panel panel-default">
<div class="panel-body">
<div class="panel-body">
<p class="text-uppercase small text-muted">Filter und Aktionen</p>
<p class="text-uppercase small text-muted">Filter und Aktionen</p>
<div class="row">
<div class="row">
<!-- <div class="col-md-3 col-sm-12">-->
<!-- <div class="col-md-3 col-sm-12">-->
<!-- <div class="form-group">-->
<!-- <div class="form-group">-->
<!-- <label for="filter-control-center">Leitstelle</label>-->
<!-- <label for="filter-control-center">Leitstelle</label>-->
<!-- <select id="filter-control-center" class="form-control" disabled>-->
<!-- <select id="filter-control-center" class="form-control" disabled>-->
<!-- <option value="-1">Demnächst verfügbar</option>-->
<!-- <option value="-1">Demnächst verfügbar</option>-->
<!-- </select>-->
<!-- </select>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="col-md-3 col-sm-12">-->
<!-- <div class="col-md-3 col-sm-12">-->
<!-- <div class="form-group">-->
<!-- <div class="form-group">-->
<!-- <label for="filter-building-type">Gebäudetyp</label>-->
<!-- <label for="filter-building-type">Gebäudetyp</label>-->
<!-- <select id="filter-building-type" class="form-control" disabled>-->
<!-- <select id="filter-building-type" class="form-control" disabled>-->
<!-- <option value="-1">Demnächst verfügbar</option>-->
<!-- <option value="-1">Demnächst verfügbar</option>-->
<!-- </select>-->
<!-- </select>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div class="col-md-6 col-sm-12">
<div class="col-md-6 col-sm-12">
<div class="form-group">
<div class="form-group">
<label for="filter-miscellaneous">Diverses</label>
<label for="filter-miscellaneous">Diverses</label>
<br />
<br />
<div id="filter-miscellaneous" class="btn-group btn-group-xs" role="group">
<div id="filter-miscellaneous" class="btn-group btn-group-xs" role="group">
<button type="button" id="filter-deviating-personnel-count-target" class="btn btn-default">
<button type="button" id="filter-deviating-personnel-count-target" class="btn btn-default">
Abweichendes Soll-Personal (<span id="number-of-deviating-personnel-count-target">-</span>)
Abweichendes Soll-Personal (<span id="number-of-deviating-personnel-count-target">-</span>)
</button>
</button>
<button id="fix-personnel-set-point" class="btn btn-default" type="submit" title="Berichtigen"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span> </button>
<button id="
<button type="button" id="filter-missing-automatic-hiring" class="btn btn-default">
Fehlendes automatisches Werben (<span id="number-of-missing-automatic-hiring">-</span>)
</button>
<button id="fix-automatic-hiring" class="btn btn-default" type="submit" title="Berichtigen"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span> </button>
<button type="button" id="filter-missing-extensions" class="btn btn-default">
Fehlende Erweiterungen (<span id="number-of-buildings-with-missing-extensions">-</span>)
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<table id="building-table" class="table table-striped table-hover table-condensed table-responsive">
<thead>
<tr>
<th>Gebäude</th>
<th>Soll-Personal</th>
<th>Automatisches Werben</th>
<th>Ausbauten</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="4">
<div class="loader">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div role="tabpanel" class="tab-pane" id="operational-readiness-panel">
<div class="row">
<div class="col-md-12 bg">
<div class="loader">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="tractive-vehicles-panel">
<div class="row">
<div class="col-md-12 bg">
<div class="loader">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="personnel-allocation-panel">
<div class="row">
<div class="col-md-12 bg">
<div class="loader">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="settings-panel">
<h2>Soll-Personal</h2>
<form id="settings" class="form-horizontal">
<div class="form-group">
<label for="building-type-0" class="col-sm-4 control-label">
Feuerwache