made admin analyics able to select store

This commit is contained in:
Alex
2026-04-14 23:17:12 -06:00
parent 1b4a96c923
commit c5a59e8de3
5 changed files with 118 additions and 1 deletions

View File

@@ -101,6 +101,9 @@ public class AnalyticsController {
@FXML
private ComboBox<String> cbTopN;
@FXML
private ComboBox<String> cbStoreFilter;
@FXML
private HBox hbViewToggle;
@@ -138,6 +141,9 @@ public class AnalyticsController {
cbPaymentFilter.setItems(FXCollections.observableArrayList("All"));
cbPaymentFilter.getSelectionModel().selectFirst();
cbStoreFilter.setItems(FXCollections.observableArrayList("All Stores"));
cbStoreFilter.getSelectionModel().selectFirst();
lblFilterSummary.setText("All time");
ToggleGroup tgViewMode = new ToggleGroup();
@@ -151,6 +157,7 @@ public class AnalyticsController {
}
viewMode = (newVal == tbnMyAnalytics) ? "mine" : "store";
updateViewModeStyles();
updateStoreFilterVisibility();
applyCurrentFilter();
});
@@ -213,6 +220,8 @@ public class AnalyticsController {
Platform.runLater(() -> {
cachedSales = sales;
derivePaymentMethods();
deriveStores();
updateStoreFilterVisibility();
applyCurrentFilter();
btnRefresh.setDisable(false);
});
@@ -250,6 +259,12 @@ public class AnalyticsController {
} else {
salesForMode = cachedSales;
}
String storeFilter = currentFilter.storeFilter;
if (!storeFilter.equals("All Stores") && !storeFilter.isBlank()) {
salesForMode = salesForMode.stream()
.filter(s -> storeFilter.equalsIgnoreCase(s.getStoreName() != null ? s.getStoreName() : ""))
.collect(Collectors.toList());
}
List<SaleResponse> filtered = filterSales(salesForMode, currentFilter);
String start = currentFilter.startDate.isEmpty() ? LocalDate.now().minusDays(6).toString() : currentFilter.startDate;
String end = currentFilter.endDate.isEmpty() ? LocalDate.now().toString() : currentFilter.endDate;
@@ -308,6 +323,31 @@ public class AnalyticsController {
}
}
private void deriveStores() {
Set<String> stores = new TreeSet<>();
for (SaleResponse s : cachedSales) {
if (s.getStoreName() != null && !s.getStoreName().isBlank()) {
stores.add(s.getStoreName());
}
}
List<String> items = new ArrayList<>();
items.add("All Stores");
items.addAll(stores);
String current = cbStoreFilter.getValue();
cbStoreFilter.setItems(FXCollections.observableArrayList(items));
if (current != null && items.contains(current)) {
cbStoreFilter.setValue(current);
} else {
cbStoreFilter.getSelectionModel().selectFirst();
}
}
private void updateStoreFilterVisibility() {
boolean show = UserSession.getInstance().isAdmin() && viewMode.equals("store");
cbStoreFilter.setVisible(show);
cbStoreFilter.setManaged(show);
}
private void updateFilterSummary() {
String start = currentFilter.startDate;
String end = currentFilter.endDate;
@@ -665,6 +705,7 @@ public class AnalyticsController {
dpEndDate.setValue(null);
cbPaymentFilter.getSelectionModel().selectFirst();
cbTopN.getSelectionModel().selectFirst();
cbStoreFilter.getSelectionModel().selectFirst();
currentFilter = new FilterState();
applyCurrentFilter();
}
@@ -683,6 +724,8 @@ public class AnalyticsController {
currentFilter.paymentMethod = pm != null ? pm : "All";
int topNPos = cbTopN.getSelectionModel().getSelectedIndex();
currentFilter.topN = (topNPos >= 0 && topNPos < TOP_N_VALUES.length) ? TOP_N_VALUES[topNPos] : 5;
String sf = cbStoreFilter.getValue();
currentFilter.storeFilter = (sf != null && !sf.isBlank()) ? sf : "All Stores";
applyCurrentFilter();
}
@@ -691,5 +734,6 @@ public class AnalyticsController {
String endDate = "";
String paymentMethod = "All";
int topN = 5;
String storeFilter = "All Stores";
}
}

View File

@@ -102,6 +102,7 @@
</FlowPane>
<HBox alignment="CENTER_LEFT" spacing="8.0">
<children>
<ComboBox fx:id="cbStoreFilter" prefWidth="145.0" promptText="All Stores" visible="false" managed="false" />
<ComboBox fx:id="cbPaymentFilter" prefWidth="145.0" promptText="All Payments" />
<ComboBox fx:id="cbTopN" prefWidth="110.0" />
<Region HBox.hgrow="ALWAYS" />