From e627ff650d8bb760963d02b04bb3706f96e16b87 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Mon, 11 Aug 2025 21:56:18 +0000 Subject: [PATCH] Show relevant advertisements on the calendar based on store participation Update client-side filtering logic to correctly display advertisements based on selected store or user group affiliations, and adjust backend query to fetch participation data. Replit-Commit-Author: Agent Replit-Commit-Session-Id: b163d4c0-de5e-4f4e-a9c0-aed4c7049718 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/b163d4c0-de5e-4f4e-a9c0-aed4c7049718/ByygiiM --- client/src/components/CalendarGrid.tsx | 25 ++++++++++++++++++++++--- server/storage.ts | 22 +++++++++++++++++++--- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/client/src/components/CalendarGrid.tsx b/client/src/components/CalendarGrid.tsx index d705b8c..61b7836 100644 --- a/client/src/components/CalendarGrid.tsx +++ b/client/src/components/CalendarGrid.tsx @@ -178,6 +178,17 @@ export default function CalendarGrid({ const getPublicitiesForDate = (date: Date) => { const dateStr = format(date, 'yyyy-MM-dd'); + console.log('🔍 CalendarGrid getPublicitiesForDate:', { + date: dateStr, + totalPublicities: publicities.length, + selectedStoreId, + userGroups: userGroups.length + }); + + if (publicities.length > 0) { + console.log('📄 Sample publicity structure:', publicities[0]); + } + return publicities.filter(pub => { // Check if the date is within the publicity period const pubStart = pub.startDate; @@ -194,14 +205,22 @@ export default function CalendarGrid({ // If a specific store is selected, check if that store participates if (selectedStoreId) { - return pub.participatingGroups?.some((pg: any) => pg.groupId === selectedStoreId); + const matches = pub.participations?.some((pg: any) => pg.groupId === selectedStoreId); + if (matches) { + console.log('🎯 Publicity matches selected store:', { pubNumber: pub.pubNumber, selectedStoreId }); + } + return matches; } // If no specific store selected but user has assigned stores, // show publicities where any of user's stores participate if (userGroups && userGroups.length > 0) { const userGroupIds = userGroups.map((ug: any) => ug.groupId); - return pub.participatingGroups?.some((pg: any) => userGroupIds.includes(pg.groupId)); + const matches = pub.participations?.some((pg: any) => userGroupIds.includes(pg.groupId)); + if (matches) { + console.log('👥 Publicity matches user groups:', { pubNumber: pub.pubNumber, userGroupIds }); + } + return matches; } return true; @@ -358,7 +377,7 @@ export default function CalendarGrid({
pg.group?.name).join(', ')}` : ''}`} + title={`Pub ${pub.pubNumber}: ${pub.designation}${pub.participations ? ` - Magasins: ${pub.participations.map((pg: any) => pg.group?.name).join(', ')}` : ''}`} > {pub.pubNumber}
diff --git a/server/storage.ts b/server/storage.ts index c47807c..6af2a79 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -875,6 +875,8 @@ export class DatabaseStorage implements IStorage { // Publicity operations async getPublicities(year?: number, groupIds?: number[]): Promise { + console.log('🔍 getPublicities called with:', { year, groupIds }); + const query = db.select({ id: publicities.id, pubNumber: publicities.pubNumber, @@ -903,6 +905,7 @@ export class DatabaseStorage implements IStorage { } const results = await query; + console.log('📢 Raw publicities found:', results.length); // Récupérer les participations séparément const publicityIds = results.map((pub: any) => pub.id); @@ -918,9 +921,11 @@ export class DatabaseStorage implements IStorage { .from(publicityParticipations) .innerJoin(groups, eq(publicityParticipations.groupId, groups.id)) .where(inArray(publicityParticipations.publicityId, publicityIds)) : []; + + console.log('🏪 Participations found:', participations.length); // Associer les participations aux publicités - return results.map((pub: any) => ({ + const finalResult = results.map((pub: any) => ({ ...pub, participations: participations .filter((p: any) => p.publicityId === pub.id) @@ -930,7 +935,18 @@ export class DatabaseStorage implements IStorage { group: p.group, createdAt: new Date() })) - })) as PublicityWithRelations[]; + })); + + console.log('✅ Final publicities with participations:', finalResult.length); + if (finalResult.length > 0) { + console.log('📄 Sample publicity:', { + id: finalResult[0].id, + pubNumber: finalResult[0].pubNumber, + participations: finalResult[0].participations.map((p: any) => ({ groupId: p.groupId, groupName: p.group?.name })) + }); + } + + return finalResult as PublicityWithRelations[]; } async getPublicity(id: number): Promise { @@ -2108,7 +2124,7 @@ class MemStorage implements IStorage { async createSavTicketHistory(): Promise { return {}; } async updateSavTicketHistory(): Promise { return {}; } async deleteSavTicketHistory(): Promise {} - async getPublicities(): Promise { return []; } + async getPublicity(): Promise { return undefined; } async createPublicity(): Promise { return {}; } async updatePublicity(): Promise { return {}; }