-- Update vw_network_devices view to include machines table network devices
-- Date: 2025-11-13
-- Purpose: Make network_devices.asp show devices from machines table with network device types

USE shopdb;

DROP VIEW IF EXISTS vw_network_devices;

CREATE VIEW vw_network_devices AS
-- IDFs from separate table
SELECT
    'IDF' AS device_type,
    i.idfid AS device_id,
    i.idfname AS device_name,
    NULL AS modelid,
    NULL AS modelnumber,
    NULL AS vendor,
    NULL AS serialnumber,
    NULL AS ipaddress,
    i.description AS description,
    i.maptop AS maptop,
    i.mapleft AS mapleft,
    i.isactive AS isactive,
    NULL AS idfid,
    NULL AS idfname,
    NULL AS macaddress
FROM idfs i

UNION ALL

-- Servers from separate table
SELECT
    'Server' AS device_type,
    s.serverid AS device_id,
    s.servername AS device_name,
    s.modelid,
    m.modelnumber,
    v.vendor,
    s.serialnumber,
    s.ipaddress,
    s.description,
    s.maptop,
    s.mapleft,
    s.isactive,
    NULL AS idfid,
    NULL AS idfname,
    NULL AS macaddress
FROM servers s
LEFT JOIN models m ON s.modelid = m.modelnumberid
LEFT JOIN vendors v ON m.vendorid = v.vendorid

UNION ALL

-- Switches from separate table
SELECT
    'Switch' AS device_type,
    sw.switchid AS device_id,
    sw.switchname AS device_name,
    sw.modelid,
    m.modelnumber,
    v.vendor,
    sw.serialnumber,
    sw.ipaddress,
    sw.description,
    sw.maptop,
    sw.mapleft,
    sw.isactive,
    NULL AS idfid,
    NULL AS idfname,
    NULL AS macaddress
FROM switches sw
LEFT JOIN models m ON sw.modelid = m.modelnumberid
LEFT JOIN vendors v ON m.vendorid = v.vendorid

UNION ALL

-- Cameras from separate table
SELECT
    'Camera' AS device_type,
    c.cameraid AS device_id,
    c.cameraname AS device_name,
    c.modelid,
    m.modelnumber,
    v.vendor,
    c.serialnumber,
    c.ipaddress,
    c.description,
    c.maptop,
    c.mapleft,
    c.isactive,
    c.idfid,
    i.idfname,
    c.macaddress
FROM cameras c
LEFT JOIN models m ON c.modelid = m.modelnumberid
LEFT JOIN vendors v ON m.vendorid = v.vendorid
LEFT JOIN idfs i ON c.idfid = i.idfid

UNION ALL

-- Access Points from separate table
SELECT
    'Access Point' AS device_type,
    a.apid AS device_id,
    a.apname AS device_name,
    a.modelid,
    m.modelnumber,
    v.vendor,
    a.serialnumber,
    a.ipaddress,
    a.description,
    a.maptop,
    a.mapleft,
    a.isactive,
    NULL AS idfid,
    NULL AS idfname,
    NULL AS macaddress
FROM accesspoints a
LEFT JOIN models m ON a.modelid = m.modelnumberid
LEFT JOIN vendors v ON m.vendorid = v.vendorid

UNION ALL

-- Printers from separate table
SELECT
    'Printer' AS device_type,
    p.printerid AS device_id,
    p.printerwindowsname AS device_name,
    p.modelid,
    m.modelnumber,
    v.vendor,
    p.serialnumber,
    p.ipaddress,
    NULL AS description,
    p.maptop,
    p.mapleft,
    p.isactive,
    NULL AS idfid,
    NULL AS idfname,
    NULL AS macaddress
FROM printers p
LEFT JOIN models m ON p.modelid = m.modelnumberid
LEFT JOIN vendors v ON m.vendorid = v.vendorid

UNION ALL

-- Network devices from machines table (machinetypeid 16-20)
SELECT
    mt.machinetype AS device_type,
    ma.machineid AS device_id,
    COALESCE(ma.alias, ma.machinenumber) AS device_name,
    ma.modelnumberid AS modelid,
    mo.modelnumber,
    ve.vendor,
    ma.serialnumber,
    c.address AS ipaddress,
    NULL AS description,
    ma.maptop,
    ma.mapleft,
    ma.isactive,
    NULL AS idfid,
    NULL AS idfname,
    NULL AS macaddress
FROM machines ma
INNER JOIN machinetypes mt ON ma.machinetypeid = mt.machinetypeid
LEFT JOIN models mo ON ma.modelnumberid = mo.modelnumberid
LEFT JOIN vendors ve ON mo.vendorid = ve.vendorid
LEFT JOIN communications c ON ma.machineid = c.machineid AND c.isprimary = 1 AND c.comstypeid = 1
WHERE mt.machinetypeid IN (16, 17, 18, 19, 20);

-- Show updated view
SELECT 'View updated successfully' AS status;

SELECT device_type, COUNT(*) AS total
FROM vw_network_devices
WHERE isactive = 1
GROUP BY device_type
ORDER BY device_type;
