Skip to content

Commit d7b403f

Browse files
committed
Fix: Analytics errors and Firestore rules
- Fixed renderHealthScorecard to use allSales instead of undefined sales variable - Added cashSessions collection to Firestore rules - Added backward compatibility aliases (bills/sales) in getFilteredData - Added null safety for state arrays
1 parent ddc424c commit d7b403f

2 files changed

Lines changed: 20 additions & 6 deletions

File tree

firestore.rules

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ service cloud.firestore {
6161
allow read, write: if isSignedIn();
6262
}
6363

64+
// Cash sessions - all authenticated users can read/write
65+
match /cashSessions/{sessionId} {
66+
allow read, write: if isSignedIn();
67+
}
68+
6469
// Settings collection - all authenticated users can read/write
6570
match /settings/{settingId} {
6671
allow read, write: if isSignedIn();

www/js/modules/analytics.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,19 @@ export class AnalyticsManager {
133133
return itemDate >= cutoffDate;
134134
};
135135

136+
// Return with both new names and legacy aliases for backward compatibility
137+
const purchases = (AppState.purchaseHistory || []).filter(filterByDate);
138+
const wholesaleSales = (AppState.salesHistory || []).filter(filterByDate);
139+
const retailSales = (AppState.retailSalesHistory || []).filter(filterByDate);
140+
136141
return {
137-
purchases: AppState.purchaseHistory.filter(filterByDate),
138-
wholesaleSales: AppState.salesHistory.filter(filterByDate),
139-
retailSales: AppState.retailSalesHistory.filter(filterByDate),
142+
// New names
143+
purchases,
144+
wholesaleSales,
145+
retailSales,
146+
// Legacy aliases (bills = purchases, sales = wholesale + retail combined)
147+
bills: purchases,
148+
sales: [...wholesaleSales, ...retailSales],
140149
expenses: {
141150
business: (AppState.businessExpenses || []).filter(filterByDate),
142151
personal: (AppState.personalExpenses || []).filter(filterByDate)
@@ -291,10 +300,10 @@ export class AnalyticsManager {
291300
return sum + (stockItem.quantity || 0) * (stockItem.rate || 0);
292301
}, 0);
293302

294-
const salesWithExpenses = sales.filter(s => s.expenses && s.expenses > 0).length;
295-
const expenseTrackingRate = sales.length > 0 ? (salesWithExpenses / sales.length) * 100 : 0;
303+
const salesWithExpenses = allSales.filter(s => s.expenses && s.expenses > 0).length;
304+
const expenseTrackingRate = allSales.length > 0 ? (salesWithExpenses / allSales.length) * 100 : 0;
296305

297-
const avgProfitPerSale = sales.length > 0 ? sales.reduce((sum, s) => sum + (s.profit || 0), 0) / sales.length : 0;
306+
const avgProfitPerSale = allSales.length > 0 ? allSales.reduce((sum, s) => sum + (s.profit || 0), 0) / allSales.length : 0;
298307

299308
container.innerHTML = `
300309
<div class="stats-card" style="background: ${totalOutstanding > 50000 ? '#fee' : '#efe'}; border-left: 4px solid ${totalOutstanding > 50000 ? '#dc3545' : '#28a745'};">

0 commit comments

Comments
 (0)