@@ -313,35 +322,238 @@
// ═══ INVENTORY ═══
case "inventory":
- @if (!_inventory.Any())
+ @if (!_inventory.Any() && _invSubTab == "levels")
{
@RenderEmpty("warehouse", "#3B82F6", "Chưa có tồn kho", "Tồn kho sẽ hiển thị khi có sản phẩm", "package", "Thêm sản phẩm trước", $"/admin/shop/{ShopId}/menu")
}
else
{
+
-
-
- | Sản phẩm |
- Số lượng |
- Mức nhập lại |
-
- @foreach (var item in _inventory)
- {
-
- | @(item.ProductName ?? item.ProductId.ToString()[..8]) |
- @item.Quantity |
- @item.ReorderLevel |
-
- }
-
-
+
+
+
+ @foreach (var (label, val, icon) in new[] { ("Tồn kho", "levels", "package"), ("Nhập kho", "stock-in", "arrow-down-to-line"), ("Xuất kho", "stock-out", "arrow-up-from-line"), ("Điều chỉnh", "adjust", "settings-2"), ("Lịch sử", "transactions", "history"), ("Cảnh báo", "low-stock", "alert-triangle") })
+ {
+
+ }
+
+ @if (_invFormMessage != null)
+ {
+
+ @_invFormMessage
+
+ }
+
+ @switch (_invSubTab)
+ {
+ case "levels":
+
+
+
+ | Sản phẩm |
+ Số lượng |
+ Mức nhập lại |
+ Thao tác |
+
+ @foreach (var item in _inventory)
+ {
+ var qtyColor = item.Quantity <= 0 ? "#EF4444" : item.Quantity <= (item.ReorderLevel > 0 ? item.ReorderLevel : 10) ? "#F59E0B" : "#22C55E";
+ var bgColor = item.Quantity <= 0 ? "rgba(239,68,68,0.05)" : item.Quantity <= (item.ReorderLevel > 0 ? item.ReorderLevel : 10) ? "rgba(245,158,11,0.05)" : "transparent";
+
+ | @(item.ProductName ?? item.ProductId.ToString()[..8]) |
+ @item.Quantity |
+ @item.ReorderLevel |
+
+
+
+
+
+ |
+
+ }
+
+
+
+ break;
+
+ case "stock-in":
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ break;
+
+ case "stock-out":
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ break;
+
+ case "adjust":
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ break;
+
+ case "transactions":
+
+
+
+ @if (_invTxns.Any())
+ {
+
+ | Thời gian |
+ Loại |
+ Số lượng |
+ Lý do |
+
+ @foreach (var tx in _invTxns.OrderByDescending(t => t.CreatedAt).Take(50))
+ {
+ var txColor = tx.QuantityChange > 0 ? "#22C55E" : tx.QuantityChange < 0 ? "#EF4444" : "#6B7280";
+ var txLabel = tx.TransactionType switch { "StockIn" => "Nhập kho", "StockOut" => "Xuất kho", "Adjustment" => "Điều chỉnh", "OrderDeduction" => "Đơn hàng", _ => tx.TransactionType ?? "N/A" };
+
+ | @tx.CreatedAt.ToLocalTime().ToString("dd/MM HH:mm") |
+
+ @txLabel
+ |
+ @(tx.QuantityChange > 0 ? "+" : "")@tx.QuantityChange |
+ @(tx.Reason ?? "—") |
+
+ }
+
+ }
+ else
+ {
+
Chưa có giao dịch kho nào.
+ }
+
+
+ break;
+
+ case "low-stock":
+
+
+
+ @if (_lowStockItems.Any())
+ {
+
+ | Sản phẩm |
+ Tồn kho |
+ Ngưỡng |
+ Hành động |
+
+ @foreach (var item in _lowStockItems)
+ {
+
+ | @(item.ProductName ?? item.ProductId.ToString()[..8]) |
+ @item.Quantity |
+ @item.LowStockThreshold |
+
+
+ |
+
+ }
+
+ }
+ else
+ {
+
+
+ Tất cả sản phẩm đều đủ hàng!
+
+ }
+
+
+ break;
+ }
}
break;
@@ -463,7 +675,7 @@
case "staff":
@(_staff.Count) nhân viên
-
-
+
+ @if (!_editingStaffId.HasValue)
+ {
+