From acc2969dbea2f11b509bec72e97c2e10296429d3 Mon Sep 17 00:00:00 2001 From: NAS-Admin Date: Sat, 14 Mar 2026 21:51:23 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api.php | 32 ++++++++++++- dda/assets.db | Bin 196608 -> 196608 bytes index.php | 121 +++++++++++++++++++++++++++++++++++++++++++++++++- models.php | 30 ++++++++++--- nav.php | 21 +++++---- 5 files changed, 186 insertions(+), 18 deletions(-) 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 752be65435615c4788699c9d081f25808793c247..2d977de7fabff7a04f9ad6c0cee1fa9db93d81c2 100644 GIT binary patch delta 79 zcmZo@;Av>!*}(aM`33)_?Sd1Sj`2%~@G!*}(aM`4az&?Sd1Sj`2%~ururO=ceYB#^ -
+ '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
+
관리 대상 자산이 없습니다.
+
+
+
+