Add LaborCategory resource — manage labor categories from UI

- Creates labor_categories table (company-scoped) seeded with 11 defaults
- LaborCategory model with BelongsToTenant
- Full Filament CRUD resource with drag-to-reorder (sort_order)
- LaborResource category Select now reads from DB instead of hardcoded const
- Navigation: 'Categorii manopere' in Service group, sort 33

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-09-07 12:25:19 +00:00
parent 1cf1dc2f54
commit a2ddea2529
7 changed files with 209 additions and 2 deletions
@@ -0,0 +1,50 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('labor_categories', function (Blueprint $table) {
$table->id();
$table->foreignId('company_id')->constrained()->cascadeOnDelete();
$table->string('name');
$table->unsignedSmallInteger('sort_order')->default(0);
$table->timestamps();
$table->unique(['company_id', 'name']);
$table->index('company_id');
});
// Seed default categories for all existing companies
$defaults = [
'Motor', 'Frâne', 'Suspensie', 'Anvelope', 'ITP',
'Cutie viteze', 'Caroserie', 'Electrică', 'Climatizare',
'Eșapament', 'Altele',
];
$companies = DB::table('companies')->pluck('id');
$now = now();
foreach ($companies as $companyId) {
foreach ($defaults as $i => $name) {
DB::table('labor_categories')->insertOrIgnore([
'company_id' => $companyId,
'name' => $name,
'sort_order' => $i,
'created_at' => $now,
'updated_at' => $now,
]);
}
}
}
public function down(): void
{
Schema::dropIfExists('labor_categories');
}
};