69 lines
2.0 KiB
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;
|
|
}
|
|
}
|
|
}
|