Warenwirtschaft: Einheit (g/ml) als Pflichtfeld über der bestellten Menge
Die Einheit hing bisher als Anhang rechts am Mengenfeld — auf breiten Monitoren außer Sicht, und „g" war stiller Default. Jetzt: - Eigenes Pflichtfeld „Einheit der bestellten Menge" direkt VOR der Menge mit „Bitte wählen"; beim Neuanlegen muss bewusst Gramm oder Milliliter gewählt werden, beim Bearbeiten ist die gespeicherte Einheit vorbelegt. - Hinweis unter der Einheit sagt, ob ml möglich ist (Dichte hinterlegt, Wert wird genannt) oder erst gepflegt werden muss; ml bleibt ohne Dichte gesperrt. Mengen-Hinweis und ml→g-Live-Vorschau folgen der Auswahl. - Server: Store-/UpdateStockEntryRequest weisen Rohstoff-Einkäufe ohne Einheit ab (Verpackung bleibt ohne Einheit). Bestehende Tests ergänzt, neuer Test für die Pflicht. - In-App-Doku (Hinweise, Testleitfaden) nachgezogen. Suite: 390 grün. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
23381a37f5
commit
be1d8fdc39
9 changed files with 94 additions and 22 deletions
|
|
@ -112,20 +112,31 @@
|
|||
? formatWawiQuantity($orderedIsMl ? $model->ordered_quantity / $model->density_used : $model->ordered_quantity)
|
||||
: '';
|
||||
@endphp
|
||||
@php
|
||||
// Einheit steht als eigenes Pflichtfeld VOR der Menge (nicht mehr als Anhang
|
||||
// rechts am Feld — auf breiten Monitoren lag es außer Sicht). Neu: bewusst
|
||||
// wählen („Bitte wählen"); beim Bearbeiten ist die gespeicherte Einheit vorbelegt.
|
||||
$orderedUnitValue = old('ordered_unit', $isEdit ? ($orderedIsMl ? 'ml' : 'gram') : '');
|
||||
@endphp
|
||||
<div class="form-group" id="ordered-unit-wrap" style="display:none;">
|
||||
<label for="ordered_unit">{{ __('Einheit der bestellten Menge') }} <span class="text-danger">*</span></label>
|
||||
<select name="ordered_unit" id="ordered_unit" class="form-control @error('ordered_unit') is-invalid @enderror">
|
||||
<option value="" @selected($orderedUnitValue === '')>{{ __('Bitte wählen') }}</option>
|
||||
<option value="gram" @selected($orderedUnitValue === 'gram')>{{ __('Gramm (g)') }}</option>
|
||||
<option value="ml" @selected($orderedUnitValue === 'ml')>{{ __('Milliliter (ml) – wird über die Dichte in Gramm umgerechnet') }}</option>
|
||||
</select>
|
||||
<small class="text-muted d-block" id="ordered-unit-hint"></small>
|
||||
@error('ordered_unit')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="ordered_quantity">{{ __('Bestellte Menge') }} <span class="text-danger">*</span></label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="ordered_quantity" id="ordered_quantity"
|
||||
class="form-control @error('ordered_quantity') is-invalid @enderror"
|
||||
value="{{ old('ordered_quantity', $orderedDisplay) }}"
|
||||
required>
|
||||
<div class="input-group-append" id="ordered-unit-wrap" style="display:none;">
|
||||
<select name="ordered_unit" id="ordered_unit" class="form-control">
|
||||
<option value="gram" @selected(old('ordered_unit', $orderedIsMl ? 'ml' : 'gram') === 'gram')>g</option>
|
||||
<option value="ml" @selected(old('ordered_unit', $orderedIsMl ? 'ml' : 'gram') === 'ml')>ml</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" name="ordered_quantity" id="ordered_quantity"
|
||||
class="form-control @error('ordered_quantity') is-invalid @enderror"
|
||||
value="{{ old('ordered_quantity', $orderedDisplay) }}"
|
||||
required>
|
||||
<small class="text-muted d-block" id="ordered-quantity-hint">{{ __('Bei Rohstoff in Gramm, bei Verpackung in Stück.') }}</small>
|
||||
<small class="d-block font-weight-bold text-body mt-1" id="ordered-quantity-preview" style="display:none;"></small>
|
||||
@error('ordered_quantity')
|
||||
|
|
|
|||
|
|
@ -78,15 +78,20 @@
|
|||
|
||||
function applyOrderedUnit() {
|
||||
var isIng = $('#entry_type').val() === 'ingredient';
|
||||
var $unit = $('#ordered_unit');
|
||||
// Einheit ist eigenes Pflichtfeld vor der Menge — nur bei Rohstoffen sichtbar
|
||||
// und nur dann required (ein verstecktes required-Feld blockiert das Absenden).
|
||||
$('#ordered-unit-wrap').toggle(isIng);
|
||||
$unit.prop('required', isIng);
|
||||
|
||||
var density = isIng ? currentDensity() : null;
|
||||
var hasDensity = density != null && density > 0;
|
||||
$('#ordered_unit option[value="ml"]').prop('disabled', !hasDensity);
|
||||
if (!hasDensity && $('#ordered_unit').val() === 'ml') {
|
||||
$('#ordered_unit').val('gram');
|
||||
$unit.find('option[value="ml"]').prop('disabled', !hasDensity);
|
||||
if (!hasDensity && $unit.val() === 'ml') {
|
||||
$unit.val('');
|
||||
}
|
||||
|
||||
var $unitHint = $('#ordered-unit-hint');
|
||||
var $hint = $('#ordered-quantity-hint');
|
||||
var $preview = $('#ordered-quantity-preview');
|
||||
$preview.hide().text('');
|
||||
|
|
@ -94,17 +99,27 @@
|
|||
$hint.text('{{ __('Bei Verpackung in Stück.') }}');
|
||||
return;
|
||||
}
|
||||
if ($('#ordered_unit').val() === 'ml' && hasDensity) {
|
||||
|
||||
if (!$('#ingredient_id').val()) {
|
||||
$unitHint.text('{{ __('Zuerst den Inhaltsstoff wählen — davon hängt ab, ob ml möglich ist.') }}');
|
||||
} else if (hasDensity) {
|
||||
$unitHint.text('{{ __('Dichte hinterlegt') }} (' + formatDensity(density) + ' g/ml) — {{ __('Erfassung in Gramm oder Milliliter möglich.') }}');
|
||||
} else {
|
||||
$unitHint.text('{{ __('Keine Dichte am Rohstoff hinterlegt — nur Gramm möglich. Für ml zuerst die Dichte pflegen.') }}');
|
||||
}
|
||||
|
||||
var unit = $unit.val();
|
||||
if (unit === 'ml' && hasDensity) {
|
||||
$hint.text('{{ __('Erfassung in ml — der Bestand wird über die Dichte in Gramm gebucht.') }}');
|
||||
var ml = parseNumber($('#ordered_quantity').val());
|
||||
if (ml != null && ml > 0) {
|
||||
// AP-42: Live-Vorschau der ml→g-Umrechnung direkt am Mengenfeld.
|
||||
$preview.text(formatQuantity(ml) + ' ml × ' + formatDensity(density) + ' g/ml = ' + formatQuantity(ml * density) + ' g').show();
|
||||
}
|
||||
} else if (hasDensity) {
|
||||
$hint.text('{{ __('In Gramm — oder Einheit auf ml stellen (Dichte hinterlegt).') }}');
|
||||
} else if (unit === 'gram') {
|
||||
$hint.text('{{ __('Erfassung in Gramm.') }}');
|
||||
} else {
|
||||
$hint.text('{{ __('In Gramm. Für ml-Erfassung zuerst die Dichte am Rohstoff pflegen.') }}');
|
||||
$hint.text('{{ __('Bitte zuerst oben die Einheit wählen.') }}');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue