feat(labors): trilingual name — add name_en column + Labor::label() helper

- Migration: add nullable `labors.name_en` alongside existing name_ro/
  name_ru.
- Labor model: label(?locale) accessor returns name_{locale} with
  name_ro fallback.
- LaborResource form: expose 3rd 'Nume (EN)' field.
- Table + Select displays now go through label() so options show the
  locale-appropriate name:
    /app/labors table column,
    WorkOrderResource works Select ('[category] name (Nh)'),
    ServiceTemplate items Select,
    ServiceComposer WorkOrderWork snapshot on create.
- Snapshot name saved on wo_works.name at creation reflects the
  current locale; existing rows keep their stored snapshot untouched.

All 306 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-26 10:54:00 +00:00
parent 64a170b7f9
commit 9609295a9e
8 changed files with 50 additions and 7 deletions
+9 -1
View File
@@ -22,10 +22,18 @@ class Labor extends Model
];
protected $fillable = [
'company_id', 'category', 'name_ro', 'name_ru', 'code',
'company_id', 'category', 'name_ro', 'name_ru', 'name_en', 'code',
'hours', 'pricing_mode', 'fixed_price', 'price', 'is_active', 'notes',
];
/** Localised name — prefers name_{locale}, falls back to name_ro. */
public function label(?string $locale = null): string
{
$locale = $locale ?: app()->getLocale();
$col = 'name_' . $locale;
return $this->{$col} ?: ($this->name_ro ?: '');
}
protected $casts = [
'hours' => 'decimal:2',
'fixed_price' => 'decimal:2',