MIF_E31232435/lib/utils/stock_status.dart

69 lines
2.0 KiB
Dart

import 'package:finalproject/theme/colors.dart';
import 'package:flutter/material.dart';
class StockStatusUtils {
StockStatusUtils._();
static const double criticalStockLimitKg = 5;
static const double warningStockLimitKg = 20;
static const String statusTersedia = 'tersedia';
static const String statusSedang = 'sedang';
static const String statusKritis = 'kritis';
static double parseStock(dynamic value) {
if (value is num) return value.toDouble();
return double.tryParse(value?.toString() ?? '') ?? 0.0;
}
static String statusFromStock(num stockKg, {num? minStock}) {
final stock = stockKg.toDouble();
final minimum = minStock?.toDouble() ?? 0;
if (minimum > 0) {
if (stock <= minimum) return statusKritis;
if (stock <= minimum * 2) return statusSedang;
return statusTersedia;
}
if (stock < criticalStockLimitKg) return statusKritis;
if (stock < warningStockLimitKg) return statusSedang;
return statusTersedia;
}
static String normalizeStatus(String status) {
final normalized = status.trim().toLowerCase();
if (normalized == 'rendah') return statusSedang;
if (normalized == 'habis') return statusKritis;
if (normalized == statusTersedia ||
normalized == statusSedang ||
normalized == statusKritis) {
return normalized;
}
return statusKritis;
}
static String label(String status, {bool withIcon = false}) {
switch (normalizeStatus(status)) {
case statusTersedia:
return withIcon ? '✅ Tersedia' : 'Tersedia';
case statusSedang:
return withIcon ? '⚠️ Sedang' : 'Sedang';
case statusKritis:
default:
return withIcon ? '🔴 Kritis' : 'Kritis';
}
}
static Color color(String status) {
switch (normalizeStatus(status)) {
case statusTersedia:
return AppColors.statusSuccess;
case statusSedang:
return AppColors.statusWarning;
case statusKritis:
default:
return AppColors.statusError;
}
}
}