gruene-seele/app/Http/Controllers/Admin/Inventory/NoticeController.php
Kevin Adametz d34f0a77f4 Warenwirtschaft: Audit-Niedrigbefunde N-2/3/4/5/7/8/9/15
- N-2: Letzter Netto-Preis je Lieferant nur aus tatsächlichen
  Eingängen (status received).
- N-3: Verbrauchsfenster exakt (kein startOfDay-Off-by-one).
- N-4: Kritisch-Zählung vereinheitlicht — Controller liefert die
  Kachel-Zählweise (inkl. critical_ordered), tote View-Überschreibung
  entfernt; Sidenav-Badge bleibt bewusst ohne bestellte Kritische.
- N-5: Ausschuss-Liste zeigt das 500er-Limit an + "Alle anzeigen"
  (?all=1), analog OPT-3.
- N-7: parseQuantity parst Strings konsequent im deutschen Format —
  Server und UI-Ampel interpretieren "1.500" jetzt identisch.
- N-8: Produktions-Kopie übernimmt keine alten Chargen-Nummern mehr
  (Auto-Vorschlag Präfix+ttmmjj greift).
- N-9: recordProductionStock lädt Produkte withTrashed — Korrektur-
  Gegenbuchungen soft-gelöschter Output-Produkte werden nicht mehr
  übersprungen.
- N-15: Hinweise/Leitfaden-Markdown mit html_input=strip +
  allow_unsafe_links=false gerendert.

Bewusst offen (Kundenentscheid/Design): N-1 (Chargen-Gruppierung ohne
supplier_id), N-6 (reFormatNumber-Konvention app-weit), N-10 (manuelle
Bewegung darf ins Minus, Inventur-Korrekturen), N-13 (mfg_row_phase-
Fallback auf phasenlos).

Suite: 231 grün, 823 Assertions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 12:57:26 +00:00

44 lines
1.3 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\Inventory;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
use Illuminate\View\View;
class NoticeController extends Controller
{
public function index(): View
{
return $this->renderMarkdown(
'hinweise.md',
__('Hinweise'),
__('Allgemeine Hinweise zur Warenwirtschaft'),
__('Noch keine Hinweise hinterlegt.')
);
}
public function guide(): View
{
return $this->renderMarkdown(
'testleitfaden.md',
__('Leitfaden'),
__('Testleitfaden durch die neuen Funktionen der Warenwirtschaft'),
__('Noch kein Leitfaden hinterlegt.')
);
}
protected function renderMarkdown(string $file, string $title, string $subtitle, string $fallback): View
{
$path = resource_path('docs/'.$file);
$markdown = File::exists($path) ? File::get($path) : $fallback;
return view('admin.inventory.notices.index', [
'title' => $title,
'subtitle' => $subtitle,
// Audit N-15: Roh-HTML im Markdown strippen (Defense-in-Depth).
'content' => Str::markdown($markdown, ['html_input' => 'strip', 'allow_unsafe_links' => false]),
]);
}
}