diff --git a/backend/migrations/20251222001000-add-may-repair-vehicles-to-director.cjs b/backend/migrations/20251222001000-add-may-repair-vehicles-to-director.cjs new file mode 100644 index 0000000..5baec6e --- /dev/null +++ b/backend/migrations/20251222001000-add-may-repair-vehicles-to-director.cjs @@ -0,0 +1,32 @@ +/* eslint-disable */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.sequelize.query(` + ALTER TABLE falukant_data.director + ADD COLUMN IF NOT EXISTS may_repair_vehicles boolean; + `); + await queryInterface.sequelize.query(` + UPDATE falukant_data.director + SET may_repair_vehicles = true + WHERE may_repair_vehicles IS NULL; + `); + await queryInterface.sequelize.query(` + ALTER TABLE falukant_data.director + ALTER COLUMN may_repair_vehicles SET DEFAULT true; + `); + await queryInterface.sequelize.query(` + ALTER TABLE falukant_data.director + ALTER COLUMN may_repair_vehicles SET NOT NULL; + `); + }, + + async down(queryInterface, Sequelize) { + // optional rollback: drop column + await queryInterface.sequelize.query(` + ALTER TABLE falukant_data.director + DROP COLUMN IF EXISTS may_repair_vehicles; + `); + }, +}; + + diff --git a/backend/models/falukant/data/director.js b/backend/models/falukant/data/director.js index dcd3d6e..cf6276e 100644 --- a/backend/models/falukant/data/director.js +++ b/backend/models/falukant/data/director.js @@ -29,6 +29,10 @@ Director.init({ type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true}, + mayRepairVehicles: { + type: DataTypes.BOOLEAN, + allowNull: false, + defaultValue: true}, lastSalaryPayout: { type: DataTypes.DATE, allowNull: false, diff --git a/backend/services/falukantService.js b/backend/services/falukantService.js index 674d2d6..45e0fcb 100644 --- a/backend/services/falukantService.js +++ b/backend/services/falukantService.js @@ -2645,6 +2645,7 @@ class FalukantService extends BaseService { mayProduce: director.mayProduce, maySell: director.maySell, mayStartTransport: director.mayStartTransport, + mayRepairVehicles: director.mayRepairVehicles, region: director.character.region?.name || null, wishedIncome, }, diff --git a/frontend/src/components/falukant/DirectorInfo.vue b/frontend/src/components/falukant/DirectorInfo.vue index 446081c..6144579 100644 --- a/frontend/src/components/falukant/DirectorInfo.vue +++ b/frontend/src/components/falukant/DirectorInfo.vue @@ -104,6 +104,14 @@ /> {{ $t('falukant.branch.director.starttransport') }} +
diff --git a/frontend/src/i18n/locales/de/falukant.json b/frontend/src/i18n/locales/de/falukant.json index e2a643a..50b1f92 100644 --- a/frontend/src/i18n/locales/de/falukant.json +++ b/frontend/src/i18n/locales/de/falukant.json @@ -232,6 +232,7 @@ "produce": "Darf produzieren", "sell": "Darf verkaufen", "starttransport": "Darf Transporte veranlassen", + "repairVehicles": "Darf Fahrzeuge reparieren", "emptyTransport": { "title": "Transport ohne Produkte", "description": "Bewege Transportmittel von dieser Niederlassung zu einer anderen, um sie besser zu nutzen.", diff --git a/frontend/src/i18n/locales/en/falukant.json b/frontend/src/i18n/locales/en/falukant.json index 455c8e8..3bee28d 100644 --- a/frontend/src/i18n/locales/en/falukant.json +++ b/frontend/src/i18n/locales/en/falukant.json @@ -163,7 +163,8 @@ }, "director": { "income": "Income", - "incomeUpdated": "Salary has been successfully updated." + "incomeUpdated": "Salary has been successfully updated.", + "repairVehicles": "May repair vehicles" }, "vehicles": { "cargo_cart": "Cargo cart", diff --git a/frontend/src/views/falukant/BranchView.vue b/frontend/src/views/falukant/BranchView.vue index 5542cd8..303e670 100644 --- a/frontend/src/views/falukant/BranchView.vue +++ b/frontend/src/views/falukant/BranchView.vue @@ -692,7 +692,10 @@ export default { }, conditionLabel(value) { - const v = Number(value) || 0; + // 0 ist ein gültiger Zustand (z.B. komplett kaputt) und darf nicht als "Unbekannt" enden. + if (value === null || value === undefined) return 'Unbekannt'; + const v = Number(value); + if (!Number.isFinite(v)) return 'Unbekannt'; if (v >= 95) return 'Ausgezeichnet'; // 95–100 if (v >= 72) return 'Sehr gut'; // 72–94 if (v >= 54) return 'Gut'; // 54–71 @@ -700,7 +703,7 @@ export default { if (v >= 22) return 'Schlecht'; // 22–38 if (v >= 6) return 'Sehr schlecht'; // 6–21 if (v >= 1) return 'Katastrophal'; // 1–5 - return 'Unbekannt'; + return 'Katastrophal'; // 0 oder kleiner }, speedLabel(value) {