Abrechnungsgrüne nun immer erforderlich

This commit is contained in:
2026-09-04 02:11:43 +02:00
parent 15690b1da9
commit d23e6c3914
10 changed files with 959 additions and 33 deletions
@@ -0,0 +1,53 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
/**
* Das Beispiel, das im Feld „Was wurde eingekauft" steht, solange es leer ist.
*
* Die Angabe ist seit der EüR Pflicht zu jeder Abrechnung, und von ihr lebt dort die Zweck-Spalte. Ein
* allgemeines „z. B. Material" hilft beim Ausfüllen nicht weiter -- was ein brauchbarer Zweck ist, hängt
* an der Ausgabenart. Der Text gehört deshalb an den Typ und nicht in den Quelltext des Formulars: So
* lässt er sich ohne Deployment nachschärfen, und ein später ergänzter Typ bringt sein Beispiel mit.
*
* Bleibt die Spalte leer, zeigt das Formular seinen eigenen allgemeinen Text -- ein Typ ohne Beispiel
* soll das Feld nicht ohne Hilfestellung lassen.
*/
return new class extends Migration {
/**
* Die Ausgangstexte. Bewusst konkret: Sie sollen zeigen, wie genau eine Angabe gemeint ist.
*/
private const array EXAMPLES = [
'travelling' => 'z. B. Bahnfahrt HalleLeipzig',
'program' => 'z. B. Bastelmaterial für den Workshop',
'accommodation' => 'z. B. zwei Nächte Jugendherberge',
'catering' => 'z. B. Wocheneinkauf für das Frühstück',
'logistic' => 'z. B. Miete für den Transporter',
'technical' => 'z. B. Verlängerungskabel und Mehrfachstecker',
'management' => 'z. B. Porto und Kopien',
'other' => 'z. B. Erste-Hilfe-Set',
];
public function up(): void
{
Schema::table('invoice_types', function (Blueprint $table) {
$table->string('purchase_example')->nullable()->after('name');
});
foreach (self::EXAMPLES as $slug => $example) {
DB::table('invoice_types')
->where('slug', $slug)
->update(['purchase_example' => $example]);
}
}
public function down(): void
{
Schema::table('invoice_types', function (Blueprint $table) {
$table->dropColumn('purchase_example');
});
}
};