mirror of https://github.com/itflow-org/itflow
177 lines
5.9 KiB
JavaScript
177 lines
5.9 KiB
JavaScript
// Used to populate dynamic content in recurring_ticket_add_modal and ticket_add_modal_v2 based on selected client
|
|
|
|
// Client selected listener
|
|
// We seem to have to use jQuery to listen for events, as the client input is a select2 component?
|
|
|
|
const clientSelectDropdown = document.getElementById("changeClientSelect"); // Define client selector
|
|
|
|
// // If the client selector is disabled, we must be on a client-specific page instead. Trigger the lists to update.
|
|
if (clientSelectDropdown.disabled) {
|
|
|
|
let client_id = $(clientSelectDropdown).find(':selected').val();
|
|
|
|
populateLists(client_id);
|
|
}
|
|
|
|
// Listener for client selection. Populate select lists when a client is selected
|
|
$(clientSelectDropdown).on('select2:select', function (e) {
|
|
let client_id = $(this).find(':selected').val();
|
|
|
|
// Update the contacts dropdown list
|
|
populateLists(client_id);
|
|
|
|
});
|
|
|
|
// Populates dropdowns with dynamic content based on the client ID
|
|
// Called the client select dropdown is used or if the client select is disabled
|
|
function populateLists(client_id) {
|
|
|
|
populateContactsDropdown(client_id);
|
|
|
|
populateAssetsDropdown(client_id);
|
|
|
|
populateLocationsDropdown(client_id);
|
|
|
|
populateVendorsDropdown(client_id);
|
|
}
|
|
|
|
// Populate client contacts
|
|
function populateContactsDropdown(client_id) {
|
|
// Send a GET request to ajax.php as ajax.php?get_client_contacts=true&client_id=NUM
|
|
jQuery.get(
|
|
"ajax.php",
|
|
{get_client_contacts: 'true', client_id: client_id},
|
|
function(data) {
|
|
|
|
// If we get a response from ajax.php, parse it as JSON
|
|
const response = JSON.parse(data);
|
|
|
|
// Access the data for contacts (multiple)
|
|
const contacts = response.contacts;
|
|
|
|
// Contacts dropdown
|
|
const contactSelectDropdown = document.getElementById("contactSelect");
|
|
|
|
// Clear dropdown
|
|
let i, L = contactSelectDropdown.options.length - 1;
|
|
for (i = L; i >= 0; i--) {
|
|
contactSelectDropdown.remove(i);
|
|
}
|
|
contactSelectDropdown[contactSelectDropdown.length] = new Option('- Contact -', '0');
|
|
|
|
// Populate dropdown
|
|
contacts.forEach(contact => {
|
|
var appendText = "";
|
|
if (contact.contact_primary == "1") {
|
|
appendText = " (Primary)";
|
|
} else if (contact.contact_technical == "1") {
|
|
appendText = " (Technical)";
|
|
}
|
|
contactSelectDropdown[contactSelectDropdown.length] = new Option(contact.contact_name + appendText, contact.contact_id);
|
|
});
|
|
|
|
}
|
|
);
|
|
}
|
|
|
|
// Populate client assets
|
|
function populateAssetsDropdown(client_id) {
|
|
jQuery.get(
|
|
"ajax.php",
|
|
{get_client_assets: 'true', client_id: client_id},
|
|
function(data) {
|
|
|
|
// If we get a response from ajax.php, parse it as JSON
|
|
const response = JSON.parse(data);
|
|
|
|
// Access the data for assets (multiple)
|
|
const assets = response.assets;
|
|
|
|
// Assets dropdown
|
|
const assetSelectDropdown = document.getElementById("assetSelect");
|
|
|
|
// Clear dropdown
|
|
let i, L = assetSelectDropdown.options.length - 1;
|
|
for (i = L; i >= 0; i--) {
|
|
assetSelectDropdown.remove(i);
|
|
}
|
|
assetSelectDropdown[assetSelectDropdown.length] = new Option('- Asset -', '0');
|
|
|
|
// Populate dropdown with asset name (and contact, if set)
|
|
assets.forEach(asset => {
|
|
let displayText = asset.asset_name;
|
|
if (asset.contact_name !== null) {
|
|
displayText = asset.asset_name + " - " + asset.contact_name;
|
|
}
|
|
|
|
assetSelectDropdown[assetSelectDropdown.length] = new Option(displayText, asset.asset_id);
|
|
});
|
|
|
|
}
|
|
);
|
|
}
|
|
|
|
// Populate client locations
|
|
function populateLocationsDropdown(client_id) {
|
|
jQuery.get(
|
|
"ajax.php",
|
|
{get_client_locations: 'true', client_id: client_id},
|
|
function(data) {
|
|
|
|
// If we get a response from ajax.php, parse it as JSON
|
|
const response = JSON.parse(data);
|
|
|
|
// Access the data for locations (multiple)
|
|
const locations = response.locations;
|
|
|
|
// Locations dropdown
|
|
const locationSelectDropdown = document.getElementById("locationSelect");
|
|
|
|
// Clear dropdown
|
|
let i, L = locationSelectDropdown.options.length - 1;
|
|
for (i = L; i >= 0; i--) {
|
|
locationSelectDropdown.remove(i);
|
|
}
|
|
locationSelectDropdown[locationSelectDropdown.length] = new Option('- Location -', '0');
|
|
|
|
// Populate dropdown
|
|
locations.forEach(location => {
|
|
locationSelectDropdown[locationSelectDropdown.length] = new Option(location.location_name, location.location_id);
|
|
});
|
|
|
|
}
|
|
);
|
|
}
|
|
|
|
// Populate client vendors
|
|
function populateVendorsDropdown(client_id) {
|
|
jQuery.get(
|
|
"ajax.php",
|
|
{get_client_vendors: 'true', client_id: client_id},
|
|
function(data) {
|
|
|
|
// If we get a response from ajax.php, parse it as JSON
|
|
const response = JSON.parse(data);
|
|
|
|
// Access the data for locations (multiple)
|
|
const vendors = response.vendors;
|
|
|
|
// Locations dropdown
|
|
const vendorSelectDropdown = document.getElementById("vendorSelect");
|
|
|
|
// Clear dropdown
|
|
let i, L = vendorSelectDropdown.options.length - 1;
|
|
for (i = L; i >= 0; i--) {
|
|
vendorSelectDropdown.remove(i);
|
|
}
|
|
vendorSelectDropdown[vendorSelectDropdown.length] = new Option('- Vendor -', '0');
|
|
|
|
// Populate dropdown
|
|
vendors.forEach(vendor => {
|
|
vendorSelectDropdown[vendorSelectDropdown.length] = new Option(vendor.vendor_name, vendor.vendor_id);
|
|
});
|
|
|
|
}
|
|
);
|
|
}
|