Add piece_weight calibration: enter Stück + Gramm per delivery, average auto-calculated
Deploy / deploy (push) Successful in 17s
Deploy / deploy (push) Successful in 17s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
38bcf60778
commit
d87383672c
5 files changed
+73
-1
No files matched your search
@@ -7,6 +7,7 @@ use App\Filament\User\Resources\SpiceResource\RelationManagers;
|
||||
use App\Models\Spice;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Forms\Get;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
@@ -35,12 +36,19 @@ class SpiceResource extends Resource
|
||||
->label('Mengeneinheit')
|
||||
->native(false)
|
||||
->searchable()
|
||||
->live()
|
||||
->options([
|
||||
'grams' => '(Kilo-)Gramm',
|
||||
'pieces' => 'Stück',
|
||||
'liter' => 'Liter',
|
||||
])
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('piece_weight')
|
||||
->label('Ø Stückgewicht (g)')
|
||||
->numeric()
|
||||
->suffix('g')
|
||||
->helperText('Wird automatisch aus Lieferungen errechnet, kann aber auch manuell gesetzt werden.')
|
||||
->visible(fn (Get $get) => $get('unit') === 'pieces'),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,10 @@ class SpiceSupplierResource extends Resource
|
||||
->required()
|
||||
->rules(['min:0.001'])
|
||||
->disabled(fn($record) => !is_null($record))
|
||||
->label(function (Get $get) {
|
||||
$unit = \App\Models\Spice::find($get('spice_id'))?->unit;
|
||||
return $unit === 'pieces' ? 'Anzahl Stück' : 'Liefermenge';
|
||||
})
|
||||
->suffix(function (Get $get) {
|
||||
$unit = \App\Models\Spice::find($get('spice_id'))?->unit;
|
||||
return match($unit) {
|
||||
@@ -90,6 +94,16 @@ class SpiceSupplierResource extends Resource
|
||||
$unit = \App\Models\Spice::find($get('spice_id'))?->unit;
|
||||
return $unit === 'grams' ? (float) $state * 1000 : $state;
|
||||
}),
|
||||
|
||||
TextInput::make('weight_g')
|
||||
->label('Gesamtgewicht dieser Lieferung (g)')
|
||||
->numeric()
|
||||
->suffix('g')
|
||||
->helperText('Optional — aktualisiert das Ø Stückgewicht automatisch')
|
||||
->disabled(fn($record) => !is_null($record))
|
||||
->visible(function (Get $get) {
|
||||
return \App\Models\Spice::find($get('spice_id'))?->unit === 'pieces';
|
||||
}),
|
||||
|
||||
DatePicker::make('supplied_at')
|
||||
->label('Lieferdatum')
|
||||
|
||||
+14
-1
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Spice extends Model
|
||||
{
|
||||
protected $fillable = ['name', 'quantity', 'unit'];
|
||||
protected $fillable = ['name', 'quantity', 'unit', 'piece_weight'];
|
||||
|
||||
public function recipes()
|
||||
{
|
||||
@@ -24,4 +24,17 @@ class Spice extends Model
|
||||
{
|
||||
$this->update(['quantity' => $this->stockMovements()->sum('amount')]);
|
||||
}
|
||||
|
||||
public function recalculatePieceWeight(): void
|
||||
{
|
||||
$result = SpiceSupplier::where('spice_id', $this->id)
|
||||
->whereNotNull('weight_g')
|
||||
->where('weight_g', '>', 0)
|
||||
->selectRaw('SUM(weight_g) as total_grams, SUM(amount) as total_pieces')
|
||||
->first();
|
||||
|
||||
if ($result && $result->total_pieces > 0) {
|
||||
$this->update(['piece_weight' => round($result->total_grams / $result->total_pieces, 3)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ class SpiceSupplier extends Model
|
||||
'spice_id',
|
||||
'supplier_id',
|
||||
'amount',
|
||||
'weight_g',
|
||||
'supplied_at',
|
||||
];
|
||||
|
||||
@@ -39,6 +40,9 @@ class SpiceSupplier extends Model
|
||||
'description' => 'Lieferung' . ($ss->supplier ? ' von ' . $ss->supplier->name : ''),
|
||||
]);
|
||||
$ss->spice->recalculateQuantity();
|
||||
if ($ss->weight_g && $ss->amount) {
|
||||
$ss->spice->recalculatePieceWeight();
|
||||
}
|
||||
});
|
||||
|
||||
static::deleted(function (SpiceSupplier $ss) {
|
||||
@@ -46,6 +50,9 @@ class SpiceSupplier extends Model
|
||||
->where('source_id', $ss->id)
|
||||
->delete();
|
||||
$ss->spice->recalculateQuantity();
|
||||
if ($ss->weight_g) {
|
||||
$ss->spice->recalculatePieceWeight();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user