74 lines
4.8 KiB
PHP
Executable File
74 lines
4.8 KiB
PHP
Executable File
<?php
|
|
header("Content-Type: application/json");
|
|
header("Access-Control-Allow-Origin: *");
|
|
$db = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123');
|
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
$action = $_GET["action"] ?? $_POST["action"] ?? "status";
|
|
|
|
try {
|
|
switch($action) {
|
|
case "status":
|
|
$inv = $db->query("SELECT asset_type, count(*) as cnt, SUM(CASE WHEN status='active' THEN 1 ELSE 0 END) as active FROM admin.supply_inventory GROUP BY asset_type")->fetchAll(PDO::FETCH_ASSOC);
|
|
$rules = $db->query("SELECT * FROM admin.supply_rules ORDER BY id")->fetchAll(PDO::FETCH_ASSOC);
|
|
$alerts = [];
|
|
foreach($rules as $r) {
|
|
$current = $db->prepare("SELECT count(*) FROM admin.supply_inventory WHERE asset_type=? AND status='active'");
|
|
$current->execute([$r["asset_type"]]);
|
|
$cnt = $current->fetchColumn();
|
|
if($cnt < $r["min_stock"]) $alerts[] = ["type"=>$r["asset_type"],"current"=>$cnt,"min"=>$r["min_stock"],"severity"=>"critical"];
|
|
}
|
|
echo json_encode(["status"=>"success","service"=>"auto-supply","inventory"=>$inv,"rules"=>$rules,"alerts"=>$alerts,"actions"=>["status","inventory","add_asset","remove_asset","rules","update_rule","check_stock","domains","o365_stock"]]);
|
|
break;
|
|
case "inventory":
|
|
$type = $_GET["type"] ?? null;
|
|
if($type) { $stmt=$db->prepare("SELECT * FROM admin.supply_inventory WHERE asset_type=? ORDER BY created_at DESC"); $stmt->execute([$type]); }
|
|
else { $stmt=$db->query("SELECT * FROM admin.supply_inventory ORDER BY asset_type, created_at DESC LIMIT 200"); }
|
|
echo json_encode(["status"=>"success","data"=>$stmt->fetchAll(PDO::FETCH_ASSOC)]);
|
|
break;
|
|
case "add_asset":
|
|
$d = json_decode(file_get_contents("php://input"), true) ?: $_POST;
|
|
$stmt = $db->prepare("INSERT INTO admin.supply_inventory (asset_type,asset_name,provider,status,purchase_date,expiry_date,cost,auto_renew,config,notes) VALUES (?,?,?,?,?,?,?,?,?,?) RETURNING id");
|
|
$stmt->execute([$d["asset_type"]??"",$d["asset_name"]??"",$d["provider"]??"",$d["status"]??"active",$d["purchase_date"]??date("Y-m-d"),$d["expiry_date"]??null,$d["cost"]??0,$d["auto_renew"]??false,json_encode($d["config"]??[]),$d["notes"]??""]);
|
|
echo json_encode(["status"=>"success","id"=>$stmt->fetch(PDO::FETCH_ASSOC)["id"]]);
|
|
break;
|
|
case "remove_asset":
|
|
$id = $_GET["id"] ?? $_POST["id"] ?? 0;
|
|
$db->prepare("UPDATE admin.supply_inventory SET status='retired' WHERE id=?")->execute([$id]);
|
|
echo json_encode(["status"=>"success","retired"=>$id]);
|
|
break;
|
|
case "rules":
|
|
$rows = $db->query("SELECT * FROM admin.supply_rules ORDER BY id")->fetchAll(PDO::FETCH_ASSOC);
|
|
echo json_encode(["status"=>"success","data"=>$rows]);
|
|
break;
|
|
case "update_rule":
|
|
$d = json_decode(file_get_contents("php://input"), true) ?: $_POST;
|
|
$stmt = $db->prepare("UPDATE admin.supply_rules SET min_stock=?, max_stock=?, auto_buy=?, provider=? WHERE id=?");
|
|
$stmt->execute([$d["min_stock"]??5,$d["max_stock"]??50,$d["auto_buy"]??false,$d["provider"]??"",$d["id"]??0]);
|
|
echo json_encode(["status"=>"success"]);
|
|
break;
|
|
case "check_stock":
|
|
$results = [];
|
|
$rules = $db->query("SELECT * FROM admin.supply_rules WHERE status='active'")->fetchAll(PDO::FETCH_ASSOC);
|
|
foreach($rules as $r) {
|
|
$cnt = $db->prepare("SELECT count(*) FROM admin.supply_inventory WHERE asset_type=? AND status='active'");
|
|
$cnt->execute([$r["asset_type"]]); $current = $cnt->fetchColumn();
|
|
$status = $current >= $r["min_stock"] ? "ok" : ($current > 0 ? "low" : "critical");
|
|
$results[] = ["type"=>$r["asset_type"],"current"=>$current,"min"=>$r["min_stock"],"max"=>$r["max_stock"],"status"=>$status,"auto_buy"=>$r["auto_buy"],"provider"=>$r["provider"]];
|
|
}
|
|
echo json_encode(["status"=>"success","stock"=>$results]);
|
|
break;
|
|
case "domains":
|
|
$domains = $db->query("SELECT * FROM admin.supply_inventory WHERE asset_type='domain' ORDER BY status, created_at DESC")->fetchAll(PDO::FETCH_ASSOC);
|
|
echo json_encode(["status"=>"success","data"=>$domains]);
|
|
break;
|
|
case "o365_stock":
|
|
$total = $db->query("SELECT count(*) FROM admin.office_accounts")->fetchColumn();
|
|
$active = $db->query("SELECT count(*) FROM admin.office_accounts WHERE status='active'")->fetchColumn();
|
|
$tenants = $db->query("SELECT count(DISTINCT tenant_domain) FROM admin.office_accounts")->fetchColumn();
|
|
echo json_encode(["status"=>"success","total"=>$total,"active"=>$active,"tenants"=>$tenants]);
|
|
break;
|
|
default:
|
|
echo json_encode(["error"=>"Unknown action"]);
|
|
}
|
|
} catch(Exception $e) { echo json_encode(["error"=>$e->getMessage()]); }
|