From 310f84a23965b0883cbb97bbb5a82ebab99cb53b Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Mon, 4 Mar 2024 10:36:50 +0200 Subject: [PATCH] fix statistics page --- pages/cart/publishers/contacts.tsx | 2 +- pages/cart/publishers/stats.tsx | 53 +++++++++++++++++++----------- prisma/schema.prisma | 20 +++++++++++ 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/pages/cart/publishers/contacts.tsx b/pages/cart/publishers/contacts.tsx index 3a18dd1..719fb24 100644 --- a/pages/cart/publishers/contacts.tsx +++ b/pages/cart/publishers/contacts.tsx @@ -19,7 +19,7 @@ function ContactsPage({ publishers }) {
-

Контакти

+

Участници

-

Контакти

+

Статистика

Име - Имейл - Телефон + Възможности + Участия - {filteredPublishers.map((publisher) => ( - - {publisher.firstName} {publisher.lastName} + {filteredPublishers.map((pub) => ( + + {pub.firstName} {pub.lastName} - {publisher.email} + + {pub.currentMonthAvailabilityDaysCount || 0} | {pub.currentMonthAvailabilityHoursCount || 0} +
- {publisher.phone}
- - - - - - - {publisher.phone ? ( - - - - ) : null} + {pub.currentWeekAssignments || 0} + {pub.currentMonthAssignments || 0} + {pub.previousMonthAssignments || 0} +
@@ -79,12 +73,31 @@ export default ContactsPage; export const getServerSideProps = async (context) => { const dateStr = new Date().toISOString().split('T')[0]; - let publishers = await filterPublishers('id,firstName,lastName,isactive,desiredShiftsPerMonth', "", new Date(), true, true); + let publishers = await filterPublishers('id,firstName,lastName,isactive,desiredShiftsPerMonth', "", new Date(), true, true, false); + // const axios = await axiosServer(context); // const { data: publishers } = await axios.get(`api/?action=filterPublishers&assignments=true&availabilities=true&date=${dateStr}&select=id,firstName,lastName,isactive,desiredShiftsPerMonth`); // api/index?action=filterPublishers&assignments=true&availabilities=true&date=2024-03-14&select=id%2CfirstName%2ClastName%2Cisactive%2CdesiredShiftsPerMonth + publishers.forEach(publisher => { + publisher.desiredShiftsPerMonth = publisher.desiredShiftsPerMonth || 0; + publisher.assignments = publisher.assignments || []; + publisher.availabilities = publisher.availabilities || []; + //serialize dates in publisher.assignments and publisher.availabilities + publisher.assignments.forEach(assignment => { + if (assignment.shift && assignment.shift.startTime) { + assignment.shift.startTime = assignment.shift.startTime.toISOString(); + assignment.shift.endTime = assignment.shift.endTime.toISOString(); + } + }); + publisher.availabilities.forEach(availability => { + if (availability.startTime) { + availability.startTime = availability.startTime.toISOString(); + availability.endTime = availability.endTime.toISOString(); + } + }); + }); return { props: { diff --git a/prisma/schema.prisma b/prisma/schema.prisma index a7668d3..33be971 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -111,6 +111,7 @@ model Publisher { town String? comments String? reports Report[] + Message Message[] } model Availability { @@ -223,6 +224,25 @@ model Report { @@map("Report") } +//message types +enum MessageType { + Email + SMS + Push + InApp +} + +model Message { + id Int @id @default(autoincrement()) + publisher Publisher @relation(fields: [publisherId], references: [id]) + publisherId String + date DateTime + content String + isRead Boolean @default(false) + isPublic Boolean @default(false) + type MessageType @default(Email) +} + //user auth and session management model User { id String @id @default(cuid())