fix
All checks were successful
Build And Deploy Main / build-and-deploy (push) Successful in 35s

This commit is contained in:
2026-03-17 14:58:11 -04:00
parent 9f23a3eb6e
commit d90f65f4b7
2 changed files with 104 additions and 72 deletions

View File

@@ -217,6 +217,46 @@ const EventsCalendar = () => {
return instances;
};
const buildDynamicBirthdayEvents = (customerList = [], rangeFrom, rangeTo) => {
if (!rangeFrom || !rangeTo) return [];
const from = new Date(rangeFrom);
const to = new Date(rangeTo);
const startYear = from.getFullYear();
const endYear = to.getFullYear();
const dynamicEvents = [];
customerList.forEach((customer) => {
const birthDate = `${customer?.birth_date || ''}`;
const [month, day] = birthDate.split('/').map(Number);
if (!month || !day) return;
for (let year = startYear; year <= endYear; year++) {
const birthday = new Date(year, month - 1, day);
if (Number.isNaN(birthday.getTime())) continue;
if (birthday < from || birthday > to) continue;
dynamicEvents.push({
id: `dynamic-birthday-${customer.id}-${year}`,
type: 'reminder',
status: 'active',
title: `${customer?.name}'s Birthday`,
description: `Happy Birthday to ${customer?.name}`,
start_time: birthday,
stop_time: new Date(birthday.getTime() + 10 * 60 * 1000),
color: 'member_related',
target_type: 'customer',
target_uuid: customer?.id,
target_name: customer?.name,
event_reminder_type: 'birthday',
rrule: 'FREQ=YEARLY',
create_by: 'system-dynamic',
edit_by: 'system-dynamic'
});
}
});
return dynamicEvents;
};
const eventTypeMap = {
medicalCalendar: 'medical',
activitiesCalendar: 'activity',
@@ -426,11 +466,21 @@ const EventsCalendar = () => {
}
} else {
// Expand recurring event rules into individual instances and merge with regular events
const recurInstances = allEventRecurrences
let recurInstances = allEventRecurrences
.filter(rule => rule.type === eventTypeMap[currentTab] && rule.status === 'active')
.flatMap(rule => expandRecurrence(rule, fromDate, toDate));
const originalEvents = [...allEvents, ...recurInstances];
let filteredEvents = originalEvents?.filter(item => item.type === eventTypeMap[currentTab])?.map(item => {
let baseEvents = [...allEvents];
if (currentTab === 'reminderDatesCalendar') {
// Birthday reminders are rendered dynamically from customer data.
baseEvents = baseEvents.filter((item) => item?.event_reminder_type !== 'birthday');
recurInstances = recurInstances.filter((item) => item?.event_reminder_type !== 'birthday');
}
const originalEvents = [...baseEvents, ...recurInstances];
const dynamicBirthdayEvents = currentTab === 'reminderDatesCalendar'
? buildDynamicBirthdayEvents(customers, fromDate, toDate)
: [];
const mergedEvents = [...originalEvents, ...dynamicBirthdayEvents];
let filteredEvents = mergedEvents?.filter(item => item.type === eventTypeMap[currentTab])?.map(item => {
// For Important Dates, remap old blue/orange colors to new member_related/vehicle_maintenance
let eventColor = item?.color;
if (currentTab === 'reminderDatesCalendar') {