diff --git a/msp/msp/doctype/ip_network/ip_network.js b/msp/msp/doctype/ip_network/ip_network.js
index cfa8bd8..60cd170 100644
--- a/msp/msp/doctype/ip_network/ip_network.js
+++ b/msp/msp/doctype/ip_network/ip_network.js
@@ -14,5 +14,46 @@ frappe.ui.form.on('IP Network', {
}
})
})
+ },
+ onload_post_render(frm) {
+ getUsedIpsInNetwork(frm);
+ },
+ after_save(frm) {
+ getUsedIpsInNetwork(frm);
}
});
+
+function getUsedIpsInNetwork(frm) {
+ frm.call('get_used_ips', {})
+ .then((response) => {
+ const container = document.getElementById("usage-overview-table");
+ let tableBody = ``;
+
+ response?.message?.forEach((element) => {
+ tableBody += `
+
+ ${element?.ip_address ?? "-"} |
+ ${element?.title ?? "-"} |
+ ${element?.type ?? "-"} |
+
+ `;
+ });
+
+ const table = tableBody ? `
+
+
+
+ IP |
+ Name |
+ Type |
+
+
+
+ ${tableBody}
+
+
+ ` : 'No IPs used for this network';
+
+ container.innerHTML = table;
+ })
+}
diff --git a/msp/msp/doctype/ip_network/ip_network.json b/msp/msp/doctype/ip_network/ip_network.json
index 0396496..2cf5750 100644
--- a/msp/msp/doctype/ip_network/ip_network.json
+++ b/msp/msp/doctype/ip_network/ip_network.json
@@ -27,7 +27,11 @@
"it_landscape",
"description",
"customer",
- "location"
+ "location",
+ "ip_network_reserved_ranges_section",
+ "ip_network_reserved_ranges_table",
+ "usage_overview_section",
+ "usage_overview_table"
],
"fields": [
{
@@ -146,10 +150,32 @@
"fieldname": "aditional_data_section",
"fieldtype": "Section Break",
"label": "Aditional Data"
+ },
+ {
+ "fieldname": "ip_network_reserved_ranges_section",
+ "fieldtype": "Section Break",
+ "label": "IP Network Reserved Ranges"
+ },
+ {
+ "fieldname": "ip_network_reserved_ranges_table",
+ "fieldtype": "Table",
+ "label": "IP Network Reserved Ranges Table",
+ "options": "IP Network Reserved Range"
+ },
+ {
+ "fieldname": "usage_overview_section",
+ "fieldtype": "Section Break",
+ "label": "Usage Overview "
+ },
+ {
+ "fieldname": "usage_overview_table",
+ "fieldtype": "HTML",
+ "label": "Usage Overview Table",
+ "options": "Used IPs expected
"
}
],
"links": [],
- "modified": "2022-06-17 11:20:37.093173",
+ "modified": "2022-08-18 10:28:34.233288",
"modified_by": "Administrator",
"module": "MSP",
"name": "IP Network",
diff --git a/msp/msp/doctype/ip_network/ip_network.py b/msp/msp/doctype/ip_network/ip_network.py
index dcf44fa..acbdb3d 100644
--- a/msp/msp/doctype/ip_network/ip_network.py
+++ b/msp/msp/doctype/ip_network/ip_network.py
@@ -8,7 +8,34 @@ from ipaddress import IPv4Address, IPv4Network
from frappe.model.document import Document
class IPNetwork(Document):
- pass
+ @frappe.whitelist()
+ def get_used_ips(self):
+ values = {'ip_network': self.name}
+ result = []
+ result = frappe.db.sql("""
+ SELECT
+ ipa.ip_address,
+ ito.title,
+ ito.type
+ FROM `tabIP Address` ipa
+ JOIN `tabIT Object` ito
+ ON ipa.it_object = ito.name
+ WHERE ipa.ip_network = %(ip_network)s
+ """, values=values, as_dict=1)
+
+ for ip_network_reserved_range in self.ip_network_reserved_ranges_table:
+ result.append({
+ 'ip_address': ip_network_reserved_range.start,
+ 'title': ip_network_reserved_range.type,
+ 'type': 'DHCP Range Start'
+ })
+ result.append({
+ 'ip_address': ip_network_reserved_range.end,
+ 'title': ip_network_reserved_range.type,
+ 'type': 'DHCP Range End'
+ })
+
+ return result
@frappe.whitelist()
def calculate_network_data(doc):
diff --git a/msp/msp/doctype/ip_network_reserved_range/__init__.py b/msp/msp/doctype/ip_network_reserved_range/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/msp/msp/doctype/ip_network_reserved_range/ip_network_reserved_range.json b/msp/msp/doctype/ip_network_reserved_range/ip_network_reserved_range.json
new file mode 100644
index 0000000..993669f
--- /dev/null
+++ b/msp/msp/doctype/ip_network_reserved_range/ip_network_reserved_range.json
@@ -0,0 +1,51 @@
+{
+ "actions": [],
+ "allow_rename": 1,
+ "creation": "2022-08-17 13:39:06.497802",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "start",
+ "end",
+ "type",
+ "description"
+ ],
+ "fields": [
+ {
+ "fieldname": "start",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "label": "Start"
+ },
+ {
+ "fieldname": "end",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "label": "End"
+ },
+ {
+ "fieldname": "type",
+ "fieldtype": "Select",
+ "in_list_view": 1,
+ "label": "Type",
+ "options": "DHCP range\nDHCP exclusion\nReservation"
+ },
+ {
+ "fieldname": "description",
+ "fieldtype": "Text Editor",
+ "label": "Description"
+ }
+ ],
+ "index_web_pages_for_search": 1,
+ "istable": 1,
+ "links": [],
+ "modified": "2022-08-17 13:44:07.476976",
+ "modified_by": "Administrator",
+ "module": "MSP",
+ "name": "IP Network Reserved Range",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/msp/msp/doctype/ip_network_reserved_range/ip_network_reserved_range.py b/msp/msp/doctype/ip_network_reserved_range/ip_network_reserved_range.py
new file mode 100644
index 0000000..565eb78
--- /dev/null
+++ b/msp/msp/doctype/ip_network_reserved_range/ip_network_reserved_range.py
@@ -0,0 +1,8 @@
+# Copyright (c) 2022, itsdave GmbH and contributors
+# For license information, please see license.txt
+
+# import frappe
+from frappe.model.document import Document
+
+class IPNetworkReservedRange(Document):
+ pass