Warenwirtschaft: AP-00 bis AP-08 + aktualisierter Entwicklungsplan
Umsetzung der Warenwirtschafts-/Produktmanagement-Erweiterung gemaess Entwicklungsplan V4.0: - AP-00: Regressionsbasis fuer 5.1-Features (ProductPhase51Test) - AP-01: URL-Bugfixes B1/B2 (suppliers/packaging-items, breitere url-Spalten) - AP-04/04.1: iPad-taugliche, vereinheitlichte Tabellen-Aktionen - AP-05: Einstellungen "Allgemein" mit UST-Saetzen (tax_rates) und Lieferzeit-Vorlagen (delivery_times, inkl. Tage-Feld) - AP-06: Lieferanten um Bestellweg, Bestell-Mail/-URL und Lieferzeit erweitert - AP-07/07.1: INCI um Lieferanten-Mehrfachwahl, UST und Lieferzeit erweitert; Lieferanten-Detailansicht im Modal mit pflegbaren INCI-/Verpackungslisten - AP-08: Einkauf um UST-Snapshot, Netto/Brutto-Automatik und Duplizieren erweitert Entwicklungsplan aktualisiert: alle Klaerungspunkte (§5) vom Kunden beantwortet und in die jeweiligen APs eingearbeitet (AP-02/03/09/13/15), neues AP-18 (Hinweise-Doku unter Einstellungen) ergaenzt. Naechster Schritt eindeutig markiert: AP-09 (Produktion auf Hersteller-Rezeptur, kein Fallback, Warnung).
This commit is contained in:
parent
ca3eb663fe
commit
78679e0c55
67 changed files with 3523 additions and 101 deletions
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Repositories;
|
||||
|
||||
use App\Models\StockEntry;
|
||||
use App\Models\TaxRate;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
|
||||
class StockEntryRepository
|
||||
|
|
@ -13,6 +14,7 @@ class StockEntryRepository
|
|||
public function create(array $data): StockEntry
|
||||
{
|
||||
$data['unit'] = ($data['entry_type'] ?? '') === 'ingredient' ? 'gram' : 'piece';
|
||||
$data = $this->resolvePrices($data);
|
||||
|
||||
return StockEntry::query()->create($data);
|
||||
}
|
||||
|
|
@ -26,11 +28,62 @@ class StockEntryRepository
|
|||
$data['unit'] = ($data['entry_type'] ?? '') === 'ingredient' ? 'gram' : 'piece';
|
||||
}
|
||||
|
||||
$data = $this->resolvePrices($data);
|
||||
|
||||
$stockEntry->update($data);
|
||||
|
||||
return $stockEntry->fresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ergänzt Netto-/Brutto-Preis pro kg und den UST-Snapshot.
|
||||
* Es genügt, Netto oder Brutto anzugeben; der jeweils fehlende Wert wird
|
||||
* aus dem gewählten Steuersatz berechnet.
|
||||
*
|
||||
* @param array<string, mixed> $data
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
protected function resolvePrices(array $data): array
|
||||
{
|
||||
if (($data['entry_type'] ?? '') !== 'ingredient') {
|
||||
$data['price_per_kg'] = null;
|
||||
$data['price_per_kg_gross'] = null;
|
||||
$data['tax_rate_id'] = null;
|
||||
$data['tax_rate_percent'] = null;
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
$percent = null;
|
||||
if (! empty($data['tax_rate_id'])) {
|
||||
$percent = TaxRate::query()->whereKey($data['tax_rate_id'])->value('percent');
|
||||
}
|
||||
$data['tax_rate_percent'] = $percent;
|
||||
|
||||
$factor = 1 + ((float) ($percent ?? 0)) / 100;
|
||||
|
||||
$net = isset($data['price_per_kg']) && $data['price_per_kg'] !== null && $data['price_per_kg'] !== ''
|
||||
? (float) $data['price_per_kg']
|
||||
: null;
|
||||
$gross = isset($data['price_per_kg_gross']) && $data['price_per_kg_gross'] !== null && $data['price_per_kg_gross'] !== ''
|
||||
? (float) $data['price_per_kg_gross']
|
||||
: null;
|
||||
|
||||
if ($net !== null && $gross === null) {
|
||||
$gross = round($net * $factor, 4);
|
||||
} elseif ($gross !== null && $net === null) {
|
||||
$net = $factor > 0 ? round($gross / $factor, 4) : $gross;
|
||||
} elseif ($net !== null && $gross !== null) {
|
||||
$gross = round($net * $factor, 4);
|
||||
}
|
||||
|
||||
$data['price_per_kg'] = $net;
|
||||
$data['price_per_kg_gross'] = $gross;
|
||||
$data['price_total'] = null;
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -47,6 +47,11 @@ class SupplierRepository
|
|||
return collect($data)->only([
|
||||
'name',
|
||||
'url',
|
||||
'order_method',
|
||||
'order_email',
|
||||
'order_url',
|
||||
'delivery_time',
|
||||
'delivery_time_days',
|
||||
'contact_person',
|
||||
'email',
|
||||
'phone',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue