feat: add is_disney column for reliable Disney/Non-Disney filtering
- Added is_disney INTEGER DEFAULT 0 column to assets table - Backfilled 996 Disney assets based on D- customer prefix - Server: is_disney in AssetCreate/AssetUpdate models, INSERT/UPDATE - Server: disney_filter query param now uses is_disney column (no JOIN needed) - import_cantaloupe.py: sets is_disney=1 when customer starts with D- - import_machines.py: sets is_disney=1 when customer starts with D- - disney_classify.py: sets is_disney=1 when classifying - Frontend: new Location Type dropdown with Disney/Non-Disney toggle (replaces the __disney__/__non_disney__ park dropdown pseudo-options)
This commit is contained in:
+19
-10
@@ -1129,13 +1129,22 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fp-row">
|
||||
<div style="flex:1">
|
||||
<div class="fp-label">Location Type</div>
|
||||
<select id="filterDisneyFilter" class="input-field" onchange="onFilterChange()">
|
||||
<option value="">All locations</option>
|
||||
<option value="disney">🏰 Disney</option>
|
||||
<option value="non_disney">🏢 Non-Disney</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="flex:1"></div>
|
||||
</div>
|
||||
<div class="fp-row">
|
||||
<div style="flex:1">
|
||||
<div class="fp-label">Disney Park</div>
|
||||
<select id="filterDisneyPark" class="input-field" onchange="onFilterChange()">
|
||||
<option value="">All parks</option>
|
||||
<option value="__disney__">🏰 Disney only</option>
|
||||
<option value="__non_disney__">🏢 Non-Disney</option>
|
||||
<option disabled>──────────</option>
|
||||
<option value="magic-kingdom">🏰 Magic Kingdom</option>
|
||||
<option value="epcot">🌍 Epcot</option>
|
||||
@@ -3203,6 +3212,7 @@
|
||||
function onFilterChange() {
|
||||
var catEl = document.getElementById('filterCategory');
|
||||
var makeEl = document.getElementById('filterMake');
|
||||
var disneyFilterEl = document.getElementById('filterDisneyFilter');
|
||||
var parkEl = document.getElementById('filterDisneyPark');
|
||||
var custEl = document.getElementById('filterCustomer');
|
||||
var locEl = document.getElementById('filterLocation');
|
||||
@@ -3211,15 +3221,13 @@
|
||||
|
||||
assetFilters.category = catEl.value || null;
|
||||
assetFilters.make = makeEl.value || null;
|
||||
// Handle Disney/Non-Disney special options
|
||||
var parkVal = parkEl.value;
|
||||
if (parkVal === '__disney__') {
|
||||
// Location Type (Disney/Non-Disney) and specific park are mutually exclusive
|
||||
var disneyFilterVal = disneyFilterEl.value;
|
||||
if (disneyFilterVal) {
|
||||
assetFilters.disney_filter = disneyFilterVal;
|
||||
assetFilters.disney_park = null;
|
||||
assetFilters.disney_filter = 'disney';
|
||||
} else if (parkVal === '__non_disney__') {
|
||||
assetFilters.disney_park = null;
|
||||
assetFilters.disney_filter = 'non_disney';
|
||||
} else {
|
||||
var parkVal = parkEl.value;
|
||||
assetFilters.disney_park = parkVal || null;
|
||||
assetFilters.disney_filter = null;
|
||||
}
|
||||
@@ -3329,7 +3337,7 @@
|
||||
document.getElementById('filterDisneyPark').value = '';
|
||||
assetFilters.disney_park = null;
|
||||
} else if (key === 'disney_filter') {
|
||||
document.getElementById('filterDisneyPark').value = '';
|
||||
document.getElementById('filterDisneyFilter').value = '';
|
||||
assetFilters.disney_filter = null;
|
||||
} else if (key === 'customer_id') {
|
||||
document.getElementById('filterCustomer').value = '';
|
||||
@@ -3357,6 +3365,7 @@
|
||||
document.getElementById('filterCategory').value = '';
|
||||
document.getElementById('filterMake').value = '';
|
||||
document.getElementById('filterDisneyPark').value = '';
|
||||
document.getElementById('filterDisneyFilter').value = '';
|
||||
document.getElementById('filterCustomer').value = '';
|
||||
document.getElementById('filterLocation').innerHTML = '<option value="">All locations</option>';
|
||||
document.getElementById('filterLocation').disabled = true;
|
||||
|
||||
Reference in New Issue
Block a user