let base_domain = "streamlinedealer.com";let BuildRedirectUri = window.location.href; if(BuildRedirectUri.includes("#") ){ BuildRedirectUri = BuildRedirectUri.slice(0,BuildRedirectUri.indexOf('#')); } BuildRedirectUri = BuildRedirectUri + '#cachebuster'; var webAuth = new auth0.WebAuth({ domain: 'streamlinedealer.auth0.com', clientID: 'h1b0m9zKfB1WDSJ5inVns6ArHkXRU45P', responseType: 'token id_token', audience: 'https://streamlinedealer.auth0.com/userinfo', scope: 'openid profile', redirectUri: 'https://dashboard.' + base_domain + '/home/' }); function handleAuthentication() { webAuth.parseHash(function(err, authResult) { if (authResult && authResult.accessToken && authResult.idToken) { window.location.hash = ''; setSession(authResult); } else if (err) { console.log(err); alert( 'Error: ' + err.error + '. Check the console for further details.' ); } }); return true; } function setSession(authResult) { // Set the time that the Access Token will expire at var expiresAt = JSON.stringify( authResult.expiresIn * 1000 + new Date().getTime() ); localStorage.setItem('access_token', authResult.accessToken); localStorage.setItem('id_token', authResult.idToken); localStorage.setItem('expires_at', expiresAt); auth0_get_user(); } function logout() { // Remove tokens and expiry time from localStorage localStorage.removeItem('access_token'); localStorage.removeItem('id_token'); localStorage.removeItem('expires_at'); localStorage.removeItem('profile_id'); localStorage.removeItem('profile_email'); localStorage.removeItem('profile_fullname'); localStorage.removeItem('profile_picture'); localStorage.removeItem('user_settings'); } function isAuthenticated() { // Check whether the current time is past the // Access Token's expiry time var expiresAt = JSON.parse(localStorage.getItem('expires_at')); return new Date().getTime() < expiresAt; } function auth0_get_user(){ webAuth.client.userInfo(localStorage.getItem('access_token'), function(err, user) { let userId = user.sub.split('|')[1]; localStorage.setItem('profile_id', userId); localStorage.setItem('profile_email', user.email); localStorage.setItem('profile_fullname', user.name); localStorage.setItem('profile_picture', user.picture); auth0_checkin_user(); auth0_get_user_settings(); }); } function auth0_get_user_settings(){ let username = localStorage.getItem('profile_id'); let url = '//user.' + base_domain + '/profiles/'+username+'/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { console.log(data); localStorage.setItem('user_settings', JSON.stringify(data)); }) .catch(function(error) { console.log(error); }); } function auth0_checkin_user(){ let username = localStorage.getItem('profile_id'); let url = 'https://user.' + base_domain + '/functions/checkin-user/?user='+username; fetch(url) .then((resp) => resp.json()) .then(function(data) { console.log('User Checkin: '+data.result); }) .catch(function(error) { console.log(error); }); }let verbose = false; let head = document.getElementsByTagName('head')[0]; let current_template = 'default.css'; let TemplateFilterCSS = createNode('link'); TemplateFilterCSS.rel = "stylesheet"; TemplateFilterCSS.title = 'FilterCSS'; TemplateFilterCSS.href = '#'; append(head,TemplateFilterCSS); var cntrlIsPressed = false; window.addEventListener('keydown',function(){ if(event.which=="17"){ cntrlIsPressed = true; if(verbose) console.log('Cntrl Key Pressed'); } }); window.addEventListener('keyup',function(){ if(event.which=="17"){ cntrlIsPressed = false; if(verbose) console.log('Cntrl Key Unpressed'); } }); function createNode(element) { return document.createElement(element); // Create the type of element you pass in the parameters } function createNodeNamed(element,className){ let out = document.createElement(element); out.className = className; if(verbose) console.log("Create <" + className + "+"); return out; // Create the type of element you pass in the parameters } function append(parent, el) { return parent.appendChild(el); // Append the second parameter(element) to the first one } function AttachLoginButton(){ var loginBtn = document.getElementById('nav-login'); loginBtn.addEventListener('click', function(e) { e.preventDefault(); webAuth.authorize(); }); } function AttachLogoutButton(){ var loginBtn = document.getElementById("nav-login"); if(loginBtn){ var logoutBtn = createNode('li'); let logoutLink = createNode('a'); logoutLink.textContent = "Logout"; logoutLink.href = "#"; append(logoutBtn,logoutLink); logoutBtn.addEventListener('click', function(e) { e.preventDefault(); logout(); let LogoutRedirectUri = 'https://dashboard.' + base_domain + '/login/' window.location.href = LogoutRedirectUri; }); loginBtn.parentNode.replaceChild(logoutBtn, loginBtn); } } function insert_request_access(insertSelector,displaySelector){ let h2 = createNode('h2'); h2.textContent = "Request Access"; let select = createNode('select'); select.addEventListener('change', display_group_request); select.setAttribute('data-display-selector',displaySelector) let DefaultOption = createNode('option'); DefaultOption.value = 'null'; DefaultOption.textContent = '-- Select A Dealer Group --'; append(select, DefaultOption); let url = '//groups.' + base_domain + '/functions/list-active-groups/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { let profiles = data.groups; return profiles.map(function(profile) { let settings = profile.settings; let option = createNode('option'); option.value = profile.group; option.textContent = settings.name; append(select, option); }) }) .catch(function(error) { console.log(error); }); let el = document.querySelectorAll(insertSelector.trim()); for (i = 0; i < el.length; i++) { append(el[i],h2); append(el[i],select); } } function insert_grant_access(insertSelector){ let h2 = createNode('h2'); h2.textContent = "Grant Access"; let container = createNode('div'); let url = '//user.' + base_domain + '/functions/list-user-permissions/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { let profiles = data.profiles; for (var i in profiles) { let profile = profiles[i]; let row = createNode('div'); let name = createNode('div'); name.textContent = profile.name; let access = createNode('div'); access.textContent = profile.name; append(row, name); append(row, access); append(container, row); } }) .catch(function(error) { console.log(error); }); let el = document.querySelectorAll(insertSelector.trim()); for (i = 0; i < el.length; i++) { append(el[i],h2); append(el[i],container); } } function display_group_request(){ let displaySelector = this.getAttribute('data-display-selector'); let display_group_request = createNode('div'); display_group_request.className = displaySelector; let h2 = createNode('h2'); h2.textContent = this.options[this.selectedIndex].text; if(this.value == 'null'){h2.textContent = "Need access to a dealership on the platform?";} let p = createNode('p'); p.textContent = "Click to request access, and we'll email you if approved."; if(this.value == 'null'){p.textContent = "Select a store from our community of dealers and request access.";} let button = createNode('button'); button.setAttribute('data-group',this.value); button.textContent = 'Request Access'; if(this.value !== 'null')button.addEventListener('click',group_request_access_event); if(this.value == 'null')button.setAttribute('disabled',true); let el = document.querySelectorAll(displaySelector); for (i = 0; i < el.length; i++) { el[i].innerHTML = ''; append(el[i],h2); append(el[i],p); append(el[i],button); } } function group_request_access_event(){ let group = this.getAttribute("data-group"); let url = 'https://user.' + base_domain + '/functions/user-request-access/?group=' + group + '&id=' + localStorage.getItem('profile_id'); fetch(url) .then((resp) => resp.json()) .then(function(data) { alert(data); }) .catch(function(error) { console.log(error); }); } function insert_scripts_grid(selector){ let hr = createNode('hr'); let headerRow = createNode('div'); //headerRow.innerHTML = "
Group Name
"; let gridContainer = createNode('div'); gridContainer.className = "edit-scripts"; let user_settings = JSON.parse(localStorage.getItem('user_settings') ); if(user_settings.groups){ let user_groups = user_settings.groups; for (i = 0; i < user_groups.length; i++) { let thisGroup = user_groups[i]; append( gridContainer, insertScriptGridGroupContainer(thisGroup.code,thisGroup.name) ); } let el = document.querySelectorAll(selector); for (i = 0; i < el.length; i++) { append(el[i],gridContainer); } } else { let msg = document.createNode('div'); msg.className = "no-user-message"; msg.textContent = "You currently have no access to a group."; let el = document.querySelectorAll(selector); for (i = 0; i < el.length; i++) { append(el[i],msg); } } return true; } function insertScriptGridGroupContainer(group,groupTitle){ let groupContainer = createNode('div'); let random = Math.floor((Math.random() * 1000) + 1); groupContainer.className = 'groupContainer group-'+group; let groupNameContainer = createNode('div'); groupNameContainer.className = 'group-name-container'; let groupNameTitle = createNode('div'); groupNameTitle.className = 'group-name-title'; groupNameTitle.textContent = groupTitle; let groupNameMenu = createNode('div'); groupNameMenu.className = 'group-name-menu'; let groupNameBtnOverride = createNode('button'); groupNameBtnOverride.className = 'group-override'; groupNameBtnOverride.textContent = 'Customize Feed'; groupNameBtnOverride.setAttribute('data-group',group); let groupNameBtnUploadCSV = createNode('button'); groupNameBtnUploadCSV.className = 'group-csv-upload'; groupNameBtnUploadCSV.textContent = 'CSV Upload'; groupNameBtnUploadCSV.setAttribute('data-group',group); let groupNameBtnRefresh = createNode('button'); groupNameBtnRefresh.className = 'group-refresh'; groupNameBtnRefresh.textContent = 'Refresh Feed'; groupNameBtnRefresh.setAttribute('data-group',group); let groupNameBtnSettings = createNode('button'); groupNameBtnSettings.className = 'group-settings'; groupNameBtnSettings.textContent = 'Edit Dealer Settings'; groupNameBtnSettings.setAttribute('data-group',group); let groupNameAddTagFieldset = createNode('fieldset'); groupNameBtnSettings.className = 'group-add-tag-fieldset'; let groupNameAddTagInput = createNode('input'); groupNameAddTagInput.className = 'group-add-tag-input'; let groupNameAddTagSave = createNode('button'); groupNameAddTagSave.className = 'group-add-tag-save'; groupNameAddTagSave.textContent = 'Create Tag'; groupNameAddTagSave.setAttribute('data-group',group); groupNameAddTagSave.addEventListener('click',createScriptByTag); let hr = createNode('hr'); let ScriptSectionTitle = createNode('div'); ScriptSectionTitle.className = "script-section-title"; ScriptSectionTitle.textContent = "Scripts"; append(groupNameAddTagFieldset,groupNameAddTagInput); append(groupNameAddTagFieldset,groupNameAddTagSave); //append(groupNameAddTagFieldset,groupNameBtnSettings); append(groupNameAddTagFieldset,groupNameBtnOverride); append(groupNameAddTagFieldset,groupNameBtnUploadCSV); append(groupNameAddTagFieldset,groupNameBtnRefresh); append(groupNameContainer,groupNameTitle); append(groupNameMenu,groupNameAddTagFieldset); append(groupNameContainer,groupNameMenu); append(groupContainer,groupNameContainer); append(groupContainer,hr); append(groupContainer,ScriptSectionTitle); let GridsUrl = '//groups.' + base_domain + '/functions/list-active-scripts/?group=' + group; fetch(GridsUrl) .then((resp) => resp.json()) .then(function(data) { let groupSettings = data.settings; let scripts = data.scripts; return scripts.map(function(tag) { let row = createNode('div'); row.className = 'row'; let tagName = createNode('div'); tagName.className = 'tag-name'; let label = createNode('label'); label.textContent = tag; if(tag == 'default')label.className = "default"; let testButton = createNode('button'); testButton.textContent = "Test"; testButton.setAttribute('data-tag',tag); testButton.setAttribute('data-group',group); testButton.addEventListener('click',openTestWindow); let installButton = createNode('button'); installButton.textContent = "Install"; installButton.setAttribute('data-tag',tag); installButton.setAttribute('data-group',group); installButton.addEventListener('click',openInstallPage); let detailsButton = createNode('button'); detailsButton.textContent = "Details"; detailsButton.setAttribute('data-tag',tag); detailsButton.setAttribute('data-group',group); detailsButton.addEventListener('click',openDetailsWindow); let removeButton = createNode('button'); removeButton.textContent = "Remove"; removeButton.setAttribute('data-tag',tag); removeButton.setAttribute('data-group',group); removeButton.addEventListener('click',removeTagScript); let TemplateColorSelect = createNode('div'); TemplateColorSelect.className = 'template-color-select'; TemplateColorSelect.id = "template-color-select-" + random; TemplateColorSelect.setAttribute('data-tag',tag); TemplateColorSelect.setAttribute('data-group',group); let TemplateGridSelect = createNode('div'); TemplateGridSelect.className = 'template-grid-select'; TemplateGridSelect.id = "template-grid-select-" + random; TemplateGridSelect.setAttribute('data-tag',tag); TemplateGridSelect.setAttribute('data-group',group); append(tagName,label); append(row,tagName); append(row,TemplateColorSelect); append(row,TemplateGridSelect); append(row,installButton); append(row,detailsButton); append(row,testButton); if(tag !== 'default')append(row,removeButton); append(groupContainer, row); let template_colors = insert_template_color_select(group,tag,'#'+TemplateColorSelect.id); let template_grid = insert_template_grid_select(group,tag,'#'+TemplateGridSelect.id); }) }) .catch(function(error) { console.log(error); }); let GalleriesURL = '//groups.' + base_domain + '/functions/list-active-galleries/?group=' + group; fetch(GalleriesURL) .then((resp) => resp.json()) .then(function(data) { let groupSettings = data.settings; let galleries = data.galleries; //alert('Listing Active Galleries'); return galleries.map(function(tag) { }) }) .catch(function(error) { console.log(error); }); return groupContainer; } function createTagAction(action,pivot){ if(action == 'build') return buildScriptAction(pivot); } function openTestWindow(){ let tag = this.getAttribute('data-tag'); let group = this.getAttribute('data-group'); let url = '//scripts.' + base_domain + '/test/?group='+group+'&tag='+tag; window.open(url, '_blank'); } function openDetailsWindow(){ let tag = this.getAttribute('data-tag'); let group = this.getAttribute('data-group'); let url = '../details/?group='+group+'&tag='+tag; window.open(url, '_self'); } function feed_override(){ let group = this.getAttribute('data-group'); let url = '../override/?group='+group; window.open(url, '_self'); } function csv_upload(){ let group = this.getAttribute('data-group'); let url = '../csv/?group='+group; window.open(url, '_self'); } function openInstallPage(){ let tag = this.getAttribute('data-tag'); let group = this.getAttribute('data-group'); let url = '../install/?group='+group+'&tag='+tag; window.open(url, '_self'); } function createScriptByTag(){ let group = this.getAttribute('data-group'); let tag = this.parentNode.querySelector('.group-add-tag-input').value; if(tag !== ''){ let url = 'https://groups.' + base_domain + '/functions/check-tag-settings/?group=' + group + '&tag=' + tag; fetch(url) .then((resp) => resp.json()) .then(function(data) { alert(group + " tag created: " + tag); location.reload(); }) .catch(function(error) { console.log(error); }); } } function removeTagScript(){ let group = this.getAttribute('data-group'); let tag = this.getAttribute('data-tag'); let url = '//scripts.' + base_domain + '/remove/?group='+group+'&tag='+tag; fetch(url) .then((resp) => resp.json()) .then(function(data) { let results = data.results; alert(results); location.reload(); return true; }) .catch(function(error) { console.log(error); }); } function SetTagColor(){ let group = this.getAttribute('data-group'); let tag = this.getAttribute('data-tag'); let template = this.value; let url = '//scripts.' + base_domain + '/set-template-color/?group='+group+'&tag='+tag+'&template='+template; fetch(url) .then((resp) => resp.json()) .then(function(data) { let results = data.results; if(results == 'Success'){ return true; } }) .catch(function(error) { console.log(error); }); } function SetTagGrid(){ let group = this.getAttribute('data-group'); let tag = this.getAttribute('data-tag'); let template = this.value; let url = '//scripts.' + base_domain + '/set-template-grid/?group='+group+'&tag='+tag+'&template='+template; fetch(url) .then((resp) => resp.json()) .then(function(data) { let results = data.results; if(results == 'Success'){ return true; } }) .catch(function(error) { console.log(error); }); } function attachRemoveTagScript(selector){ let el = document.querySelectorAll(selector.trim()); for (i = 0; i < el.length; i++) { el[i].addEventListener('click',removeTagScript); } } function insert_groups_select(selector){ let select = createNode('select'); select.addEventListener('change', update_group_selection); let DefaultOption = createNode('option'); DefaultOption.value = 'null'; DefaultOption.textContent = '-- Select A Dealer Group --'; append(select, DefaultOption); let user_settings = JSON.parse(localStorage.getItem('user_settings')); let user_groups = user_settings.groups; for (i = 0; i < user_groups.length; i++) { let thisGroup = user_groups[i]; let option = createNode('option'); option.value = thisGroup.code; option.textContent = thisGroup.name; append(select, option); } let el = document.querySelectorAll(selector.trim()); for (i = 0; i < el.length; i++) { append(el[i],select); } } function update_group_selection(){ alert(this.value); this.parentNode.setAttribute('selected-group',this.value); } function updateTemplateValue(){ alert(this.value); } function insert_template_color_select(group,tag,selector){ let select = createNode('select'); select.addEventListener('change',SetTagColor); select.setAttribute('data-group',group); select.setAttribute('data-tag',tag); let DefaultOption = createNode('option'); DefaultOption.value = "null"; DefaultOption.textContent = "-- Set Color Template --"; append(select, DefaultOption); let url = '//css.' + base_domain + '/templates/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { let templates = data.colors; return templates.map(function(template) { let option = createNode('option'); option.value = template.name; option.textContent = template.title; append(select, option); }) }) .catch(function(error) { console.log(error); }); let el = document.querySelectorAll(selector); for (i = 0; i < el.length; i++) { append(el[i],select); } } function insert_template_grid_select(group,tag,selector){ let select = createNode('select'); select.addEventListener('change',SetTagGrid); select.setAttribute('data-group',group); select.setAttribute('data-tag',tag); let DefaultOption = createNode('option'); DefaultOption.value = "null"; DefaultOption.textContent = "-- Set Grid Template --"; append(select, DefaultOption); let url = '//css.' + base_domain + '/templates/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { let templates = data.grids; for(var key in templates) { if(templates.hasOwnProperty(key)) { let template = templates[key]; let option = createNode('option'); option.value = key; option.textContent = template.title; append(select, option); } } }) .catch(function(error) { console.log(error); }); let el = document.querySelectorAll(selector); for (i = 0; i < el.length; i++) { append(el[i],select); } } function insert_override_grid(selector){ let el = document.querySelectorAll(selector); for (i = 0; i < el.length; i++) { let group = el[i].getAttribute('data-group'); if(group && group !== ''){ generate_override_table(group).then(function(VehicleTable){append(el[i],VehicleTable);}); ; } } } function getStyleSheet(unique_title) { for(var i=0; i=0;i--) { sheet.removeRule(i); } } function applyFilterSearchBarRule(){ clearFilterSearchBarRule(); if(this.value !== ''){ let vars = this.value.split(' '); let classFilterStr = ''; for(var i=vars.length - 1; i>=0;i--) { classFilterStr += '[class*="'+vars[i]+'"]'; } let rule = '.vehicle-override-table div.row:not('+classFilterStr+'){display:none;}'; console.log("Adding rule:"+rule); getStyleSheet('FilterCSS').insertRule(rule); } } function ChangeVehicleMSRP(){ this.innerHTML = ''; this.removeEventListener("click", ChangeVehicleMSRP); let input = createNode('input'); input.value = this.getAttribute('data-feed-msrp'); input.addEventListener('keyup',SaveVehicleMSRP); append(this,input); } function ChangeVehicleListPrice(){ this.innerHTML = ''; this.removeEventListener("click", ChangeVehicleListPrice); let input = createNode('input'); input.value = this.getAttribute('data-feed-list-price'); input.addEventListener('keyup',SaveVehicleListPrice); append(this,input); } function ChangeVehicleLeasePrice(){ this.innerHTML = ''; this.removeEventListener("click", ChangeVehicleLeasePrice); let input = createNode('input'); input.value = this.getAttribute('data-feed-lease-price'); input.addEventListener('keyup',SaveVehicleLeasePrice); append(this,input); } function SaveVehicleMSRP(){ if(event.which=="13"){ let parent = this.parentNode.parentNode; let VehicleMSRP = this.parentNode.getAttribute('data-feed-msrp'); let OverrideMSRP = createNode('div'); OverrideMSRP.setAttribute('data-override-msrp',this.value); OverrideMSRP.innerHTML = 'Override MSRP: ' + this.value; parent.innerHTML = ''; let VehiclePriceFeedMSRP = createNode('div'); VehiclePriceFeedMSRP.setAttribute('data-feed-msrp',VehicleMSRP); VehiclePriceFeedMSRP.className = "VehiclePriceFeedMSRP"; VehiclePriceFeedMSRP.textContent = "MSRP: " + VehicleMSRP; VehiclePriceFeedMSRP.addEventListener('click',ChangeVehicleMSRP); append(parent,VehiclePriceFeedMSRP); append(parent,OverrideMSRP); } } function SaveVehicleListPrice(){ if(event.which=="13"){ let parent = this.parentNode.parentNode; let VehicleListPrice = this.parentNode.getAttribute('data-feed-list-price'); let OverrideListPrice = createNode('div'); OverrideListPrice.setAttribute('data-override-list-price',this.value); OverrideListPrice.innerHTML = 'Override List Price: ' + this.value; parent.innerHTML = ''; let VehiclePriceFeedList = createNode('div'); VehiclePriceFeedList.setAttribute('data-feed-list-price',VehicleListPrice); VehiclePriceFeedList.className = "VehiclePriceFeedList"; VehiclePriceFeedList.textContent = VehicleListPrice == '' ? "No Retail Price" : "Retail: " + VehicleListPrice; VehiclePriceFeedList.addEventListener('click',ChangeVehicleListPrice); append(parent,VehiclePriceFeedList); append(parent,OverrideListPrice); } } function SaveVehicleLeasePrice(){ if(event.which=="13"){ let parent = this.parentNode.parentNode; let VehicleLeasePrice = this.parentNode.getAttribute('data-feed-lease-price'); let OverrideLeasePrice = createNode('div'); OverrideLeasePrice.setAttribute('data-override-lease-price',this.value); OverrideLeasePrice.innerHTML = 'Override Lease Price: ' + this.value; parent.innerHTML = ''; let VehiclePriceFeedLease = createNode('div'); VehiclePriceFeedLease.setAttribute('data-feed-lease-price',VehicleLeasePrice); VehiclePriceFeedLease.className = "VehiclePriceFeedLease"; VehiclePriceFeedLease.textContent = VehicleLeasePrice == '' ? "No Lease Price" : "Retail: " + VehicleLeasePrice; VehiclePriceFeedLease.addEventListener('click',ChangeVehicleLeasePrice); append(parent,VehiclePriceFeedLease); append(parent,OverrideLeasePrice); } } function fetch_csv_json(group){ let url = '//profiles.'+base_domain+'/'+group+'/public/feed/csv/'; return fetch(url) .then((resp) => resp.json()) .then(function(data) { return data.vehicles; }) .catch(function(error) { console.log(error); }); } function generate_override_table(group){ let VehicleTableWrapper = createNodeNamed('div','vehicle-override-wrapper'); let VehicleTableFilters = createNodeNamed('div','vehicle-table-filters'); let VehicleTableFilterSearchBarWrapper = createNodeNamed('div','vehicle-table-filter-search-bar-wrapper'); let VehicleTableFilterSearchBar = createNodeNamed('input','vehicle-table-filter-search-bar'); VehicleTableFilterSearchBar.name = "filter-search-bar"; VehicleTableFilterSearchBar.type = "text"; VehicleTableFilterSearchBar.addEventListener('keypress',applyFilterSearchBarRule); let VehicleTableFilterTitle = createNodeNamed('div','vehicle-table-filter-title'); VehicleTableFilterTitle.textContent = "Filter Vehicles"; append(VehicleTableFilters,VehicleTableFilterTitle); append(VehicleTableFilterSearchBarWrapper,VehicleTableFilterSearchBar); append(VehicleTableFilters,VehicleTableFilterSearchBarWrapper); append(VehicleTableWrapper,VehicleTableFilters); console.log("Fetching csv.json"); return fetch_csv_json(group).then(function(csv_feed){ console.log("Fetching Inventory Feed"); return fetch_inventory_feed_json(group,csv_feed) .then(function(VehicleTable){ append(VehicleTableWrapper,VehicleTable);return VehicleTableWrapper; }); }); } function fetch_inventory_feed_json(group,csv_feed){ console.log(csv_feed); url = '//profiles.'+base_domain+'/'+group+'/public/feed/'; return fetch(url) .then((resp) => resp.json()) .then(function(data) { let vehicles = data.vehicles; let VehicleTable = createNodeNamed('div','vehicle-override-table'); console.log('vehicle-override-table created'); vehicles.map(function(vehicle) { let NoMSRP = vehicle.msrp == 0 ? ' no-msrp-price' : 'yes-msrp-price'; let NoListPrice = vehicle.list_price == 0 ? ' no-list-price' : 'yes-list-price'; let row = createNode('div'); row.className = 'row row-group-' + group + ' row-stock-' + vehicle.stock.toLowerCase() + ' row-vin-' + vehicle.VIN.toLowerCase() + NoMSRP + NoListPrice; let VehicleTitle = createNodeNamed('div','vehicle-title'); let VehicleTitleStock = createNodeNamed('div','vehicle-title-stock'); VehicleTitleStock.textContent = 'Stock #: ' + vehicle.stock; if(csv_feed[vehicle.stock]){ console.log('Vehicle stock in both csv and inventory file: '+ vehicle.stock); if(csv_feed[vehicle.stock]['msrp'] !== vehicle.msrp ){ //console.log('Vehicle CSV MRSP Does Not Match: '+ csv_feed[vehicle.stock]['msrp']); let msrp_mismatch = createNodeNamed('div','msrp-mismatch'); msrp_mismatch.textContent = 'MSRP Mismatch: ' + csv_feed[vehicle.stock]['msrp']; append(VehicleTitleStock,msrp_mismatch); } if(csv_feed[vehicle.stock]['list_price'] !== vehicle.list_price ){ //console.log('Vehicle CSV List Does Not Match: '+ csv_feed[vehicle.stock]['list_price']); let list_mismatch = createNodeNamed('div','list-mismatch'); list_mismatch.textContent = 'List Price Mismatch: ' + csv_feed[vehicle.stock]['list_price']; append(VehicleTitleStock,list_mismatch); } } let VehicleTitleVIN = createNodeNamed('div','vehicle-title-VIN'); VehicleTitleVIN.textContent = 'VIN: ' + vehicle.VIN; append(VehicleTitle,VehicleTitleStock); append(VehicleTitle,VehicleTitleVIN); append(row,VehicleTitle); let OverrideVehicleDetails = createNodeNamed('div','override-vehicle-details'); let VehiclePriceMSRP = createNodeNamed('div','VehiclePriceMSRP'); let VehiclePriceFeedMSRP = createNodeNamed('div','VehiclePriceFeedMSRP'); VehiclePriceFeedMSRP.setAttribute('data-feed-msrp',vehicle.msrp); VehiclePriceFeedMSRP.textContent = "MSRP: " + vehicle.msrp; VehiclePriceFeedMSRP.addEventListener('click',ChangeVehicleMSRP); let VehiclePriceOverrideMSRPText = ''; let VehiclePriceOverrideMSRP = createNodeNamed('div','VehiclePriceOverrideMSRP'); if(VehiclePriceOverrideMSRPText !== '')VehiclePriceOverrideMSRP.textContent = "Specials MSRP: "; append(VehiclePriceMSRP,VehiclePriceFeedMSRP); append(VehiclePriceMSRP,VehiclePriceOverrideMSRP); append(OverrideVehicleDetails,VehiclePriceMSRP); append(row,OverrideVehicleDetails); let VehiclePriceList = createNodeNamed('div','VehiclePriceList'); let VehiclePriceFeedList = createNodeNamed('div','VehiclePriceFeedList'); VehiclePriceFeedList.setAttribute('data-feed-list-price',vehicle.list_price); VehiclePriceFeedList.textContent = vehicle.list_price == '' ? "No Retail Price" : "Retail: " + vehicle.list_price; VehiclePriceFeedList.addEventListener('click',ChangeVehicleListPrice); let VehiclePriceOverrideListText = ''; let VehiclePriceOverrideList = createNodeNamed('div','VehiclePriceOverrideList'); if(VehiclePriceOverrideListText !== '')VehiclePriceOverrideList.textContent = "Specials Retail Price: "; append(VehiclePriceList,VehiclePriceFeedList); append(VehiclePriceList,VehiclePriceOverrideList); append(OverrideVehicleDetails,VehiclePriceList); append(row,OverrideVehicleDetails); ///Display Lease Override Fields let VehiclePriceLease = createNodeNamed('div','VehiclePriceLease'); let VehiclePriceFeedLease = createNodeNamed('div','VehiclePriceFeedLease'); VehiclePriceFeedLease.setAttribute('data-feed-lease-price',''); VehiclePriceFeedLease.textContent = '' == '' ? "No Lease Price" : "Retail: " + vehicle.list_price; VehiclePriceFeedLease.addEventListener('click',ChangeVehicleLeasePrice); let VehiclePriceOverrideLeaseText = ''; let VehiclePriceOverrideLease = createNodeNamed('div','VehiclePriceOverrideLease'); if(VehiclePriceOverrideLeaseText !== '')VehiclePriceOverrideLease.textContent = "Lease Price: "; append(VehiclePriceLease,VehiclePriceFeedLease); append(VehiclePriceLease,VehiclePriceOverrideLease); append(OverrideVehicleDetails,VehiclePriceLease); append(row,OverrideVehicleDetails); append(VehicleTable,row); }) return VehicleTable; }) .catch(function(error) { console.log(error); }); } function feed_refresh(){ let group = this.getAttribute('data-group'); if(cntrlIsPressed)group = 'all'; let url = '//groups.' + base_domain + '/functions/import-group-feed/?group='+group; console.log("Fetching URL: " + url); fetch(url) .then((resp) => resp.json()) .then(function(data) { alert('Feed Refreshed: ' + group); return true; }) .catch(function(error) { console.log(error); }); } function setting_variable_update(){ let setting = this.getAttribute('data-content'); let group = this.getAttribute('data-group'); let tag = this.getAttribute('data-tag'); let input = document.getElementById(setting); let valueAlert = ''; if(input.getAttribute('type') == "text"){ valueAlert = input.value; } if(input.getAttribute('type') == "checkbox"){ valueAlert = input.checked; if(valueAlert == true) valueAlert = "on"; if(valueAlert == false) valueAlert = "off"; } let valueUpload = encodeURIComponent(valueAlert); let url = '//scripts.' + base_domain + '/save-setting-variable/?group='+group+'&tag='+tag+'&setting='+setting+'&value='+valueUpload; fetch(url) .then((resp) => resp.json()) .then(function(data) { alert('Setting ('+setting+')['+input.getAttribute('type')+']: ' + valueAlert); location.reload(); return true; }) .catch(function(error) { console.log(error); }); } function populate_setting_variables(selector){ if(!document.querySelector(selector))return false; let el = document.querySelector(selector); let group = el.getAttribute('data-group'); let tag = el.getAttribute('data-tag'); console.log("Starting populate_setting_variables()"); if(tag == undefined || tag == 'undefined'){tag = "default";} let url = '//groups.' + base_domain + '/functions/check-tag-settings/?group='+group+'&tag='+tag; fetch(url) .then((resp) => resp.json()) .then(function(data) { console.log("populate_setting_variables() data retrieved."); for (var property1 in data) { console.log("Checking Property: " + property1); let id = property1; let input = document.getElementById(property1); if(input != null){ if(input.type == 'text')input.value = data[property1]; if(input.type == 'checkbox'){ if(data[property1] == 1 || data[property1] == 'on') input.checked = 'checked'; } } } }) .catch(function(error) { console.log(error); }); } function setting_variable_display(){ let setting = this.getAttribute('id'); } function attach_feed_refresh_event(selector){ attach_selector_action_function(selector,'click',feed_refresh); } function attach_feed_override_event(selector){ attach_selector_action_function(selector,'click',feed_override); } function attach_csv_upload_event(selector){ attach_selector_action_function(selector,'click',csv_upload); } function attach_setting_variable_update(selector){ attach_selector_action_function(selector,'click',setting_variable_update) } function attach_selector_action_function(selector,action,func){ let objs = document.querySelectorAll(selector); for (i = 0; i < objs.length; i++) { objs[i].addEventListener(action,func); } } function console_user(){ if( auth0_get_user() ){ console.log(localStorage.getItem('profile_id')); } } function init_session(){ AttachLogoutButton(); let promise = insert_scripts_grid('.scripts-widget'); let OverridePromise = insert_override_grid('.override-container'); insert_groups_select('.select-group'); insert_request_access('.request-access-select','.request-access-display'); //insert_grant_access('.grant-access-display'); attachRemoveTagScript('.remove-group-tag'); attach_feed_override_event('.group-override'); attach_csv_upload_event('.group-csv-upload'); attach_feed_refresh_event('.group-refresh'); attach_setting_variable_update('.settings-container button'); populate_setting_variables('.settings-container'); console.log( localStorage.getItem('profile_id') ); } window.addEventListener('DOMContentLoaded', function() { let AuthenticationRan = handleAuthentication(); if(AuthenticationRan && isAuthenticated()){ init_session() AttachLogoutButton(); } else { //let LogoutRedirectUri = 'https://dashboard.' + base_domain + '/login/' //if(window.location.href !== LogoutRedirectUri)window.location.href = LogoutRedirectUri; AttachLoginButton(); } }, true);