fix: Fetch completo de negocios/shuttles e integracion de cupones en analisis
This commit is contained in:
@ -421,11 +421,15 @@ onMounted(async () => {
|
|||||||
try {
|
try {
|
||||||
const [
|
const [
|
||||||
{ count: userCount },
|
{ count: userCount },
|
||||||
{ data: events }
|
{ data: events },
|
||||||
|
{ data: allBusinesses },
|
||||||
|
{ data: allShuttles }
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
supabase.from('users').select('*', { count: 'exact', head: true }).eq('is_active', true),
|
supabase.from('users').select('*', { count: 'exact', head: true }).eq('is_active', true),
|
||||||
// In a production app with >1M rows we might use a group-by RPC
|
// In a production app with >1M rows we might use a group-by RPC
|
||||||
supabase.from('analytics_events').select('*')
|
supabase.from('analytics_events').select('*'),
|
||||||
|
supabase.from('businesses').select('name'),
|
||||||
|
supabase.from('shuttles').select('company_name, vehicle_type')
|
||||||
])
|
])
|
||||||
|
|
||||||
const shuttleStats: any = {}
|
const shuttleStats: any = {}
|
||||||
@ -434,6 +438,25 @@ onMounted(async () => {
|
|||||||
let total_shuttle_contacts = 0
|
let total_shuttle_contacts = 0
|
||||||
let total_biz_views = 0
|
let total_biz_views = 0
|
||||||
|
|
||||||
|
// PRE-FILL all businesses so they always show even with 0 clicks
|
||||||
|
if (allBusinesses) {
|
||||||
|
for (const b of allBusinesses) {
|
||||||
|
if (b.name) {
|
||||||
|
bizStats[b.name] = { views: 0, promos: 0, favs: 0, social: 0, location: 0, calls: 0 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE-FILL all shuttles so they always show even with 0 clicks
|
||||||
|
if (allShuttles) {
|
||||||
|
for (const s of allShuttles) {
|
||||||
|
const name = s.company_name || s.vehicle_type || 'shuttle'
|
||||||
|
if (!shuttleStats[name]) {
|
||||||
|
shuttleStats[name] = { views: 0, contacts: 0, calls: 0, whatsapp: 0 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const safeRows = events || []
|
const safeRows = events || []
|
||||||
|
|
||||||
for (const ev of safeRows) {
|
for (const ev of safeRows) {
|
||||||
@ -473,6 +496,19 @@ onMounted(async () => {
|
|||||||
bizStats[nameKey].promos++
|
bizStats[nameKey].promos++
|
||||||
total_promo_clicks++
|
total_promo_clicks++
|
||||||
}
|
}
|
||||||
|
} else if (ev.entity_type === 'coupon') {
|
||||||
|
// Los cupones se suman a la parte del negocio correspondiente
|
||||||
|
const bizName = ev.properties?.business || nameKey
|
||||||
|
if (!bizStats[bizName]) {
|
||||||
|
bizStats[bizName] = { views: 0, promos: 0, favs: 0, social: 0, location: 0, calls: 0 }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ev.event_name === 'promo_view') {
|
||||||
|
bizStats[bizName].promos++
|
||||||
|
total_promo_clicks++
|
||||||
|
} else if (ev.event_name === 'location_click') {
|
||||||
|
bizStats[bizName].location++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user