diff --git a/api.php b/api.php index e2e792d..510edfa 100644 --- a/api.php +++ b/api.php @@ -94,13 +94,41 @@ try { $users_general = $db->query("SELECT COUNT(*) FROM users WHERE accounting_type = '일반회계'")->fetchColumn(); $users_special = $db->query("SELECT COUNT(*) FROM users WHERE accounting_type = '특별회계'")->fetchColumn(); + // Asset Replacement Analysis (4 years) + $current_year = (int)date('Y'); + + // 4년 이상 경과 (매각 대상) + $replacement_targets = $db->query("SELECT a.*, m.model_name, m.manufacturer + FROM laptop_assets a + LEFT JOIN laptop_models m ON a.model_id = m.id + WHERE a.status != 'disposed' + AND a.purchase_date IS NOT NULL + AND CAST(SUBSTR(a.purchase_date, 1, 4) AS INTEGER) <= " . ($current_year - 4)) + ->fetchAll(); + + // 4년차 도래 (올해 매각 예정 대상) + // 예: 2022년 구매 -> 2026년 매각대상 (만 4년이 되는 해) + $upcoming_replacements = $db->query("SELECT a.*, m.model_name, m.manufacturer + FROM laptop_assets a + LEFT JOIN laptop_models m ON a.model_id = m.id + WHERE a.status != 'disposed' + AND a.purchase_date IS NOT NULL + AND CAST(SUBSTR(a.purchase_date, 1, 4) AS INTEGER) = " . ($current_year - 3)) + ->fetchAll(); + echo json_encode([ 'laptops' => ['total' => (int) $laptop_total, 'assigned' => (int) $laptop_assigned, 'disposed' => (int) $laptop_disposed], 'cards' => ['total' => (int) $card_total, 'assigned' => (int) $card_assigned], 'mfp' => ['total' => (int) $mfp_total, 'active' => (int) $mfp_active], - 'users' => ['general' => (int) $users_general, 'special' => (int) $users_special] + 'users' => ['general' => (int) $users_general, 'special' => (int) $users_special], + 'replacements' => [ + 'targets' => $replacement_targets, + 'upcoming' => $upcoming_replacements, + 'current_year' => $current_year + ] ]); break; + break; case 'get_users': $query = "WITH RECURSIVE dept_path(id, path) AS ( @@ -226,7 +254,7 @@ LEFT JOIN users u ON a.current_user_id = u.id"; $query = "SELECT a.*, m.model_name, m.manufacturer, m.product_name FROM laptop_assets a LEFT JOIN laptop_models m ON a.model_id = m.id -WHERE (a.assigned_user_name LIKE '%업무용%' OR a.current_user_id IS NULL)"; +WHERE (a.assigned_user_name LIKE '%업무용%' OR a.current_user_id IS NULL) AND a.status != 'disposed'"; echo json_encode($db->query($query)->fetchAll()); break; diff --git a/dda/assets.db b/dda/assets.db index 752be65..2d977de 100644 Binary files a/dda/assets.db and b/dda/assets.db differ diff --git a/index.php b/index.php index 9bca5bd..06a6afd 100644 --- a/index.php +++ b/index.php @@ -38,7 +38,18 @@ -
+ 'xl:grid-cols-2 max-w-[800px]', + 3 => 'xl:grid-cols-3 max-w-[1200px]', + default => 'xl:grid-cols-4' + }; + ?> +
@@ -124,7 +135,7 @@ 퀵 네비게이션 -
+
+ + +
+
+
+

+
+ + + +
+ 자산 교체 및 매각 관리 +

+

취득 후 4년이 경과하거나 도래한 자산 리스트입니다. (정책: 4년 단위 교체)

+
+
+ +
+
+ +
+ +
+
+
+ 01 +

매각 대상 자산

+
+ Immediate Action +
+
+ + + + + + + + + + + +
Asset TAGModel & SpecPurchase Year
+
관리 대상 자산이 없습니다.
+
+
+ + +
+
+
+ 02 +

교체/매각 준비

+
+ +
+
+ + + + + + + + + + + +
Asset TAGModel & SpecTarget Year
+
관리 대상 자산이 없습니다.
+
+
+
+