@@ -15,7 +15,7 @@ import {
1515 Machinery ,
1616 ScheduleSlot ,
1717 notGuest ,
18- isSameDay ,
18+ isSameDayUTC ,
1919 EventInstance ,
2020 SlackMentionType
2121} from 'shared' ;
@@ -503,11 +503,7 @@ export default class CalendarService {
503503
504504 if ( foundEventType . sendSlackNotifications ) {
505505 const members = await prisma . user . findMany ( {
506- where : {
507- userId : {
508- in : optionalMemberIds . concat ( allRequiredMembers )
509- }
510- }
506+ where : { userId : { in : optionalMemberIds . concat ( allRequiredMembers ) } }
511507 } ) ;
512508
513509 // get the user settings for all the members invited, who are leaderingship
@@ -801,13 +797,12 @@ export default class CalendarService {
801797 const edittedEvent = eventTransformer ( updatedEvent ) ;
802798
803799 if ( status === Event_Status . SCHEDULED && foundEventType . sendSlackNotifications ) {
804- await sendEventScheduledSlackNotif ( updatedEvent . notificationSlackThreads , edittedEvent ) ;
800+ await sendEventScheduledSlackNotif ( updatedEvent . notificationSlackThreads , edittedEvent , true ) ;
805801 }
806802
807803 if ( status === Event_Status . CONFIRMED && foundEventType . sendSlackNotifications ) {
808804 await sendEventConfirmationToThread ( updatedEvent . notificationSlackThreads , updatedEvent . userCreated ) ;
809805 }
810-
811806 return edittedEvent ;
812807 }
813808
@@ -943,7 +938,11 @@ export default class CalendarService {
943938 userCreatedId : true ,
944939 location : true ,
945940 dateDeleted : true ,
946- approved : true
941+ approved : true ,
942+ status : true ,
943+ title : true ,
944+ workPackages : true ,
945+ scheduledTimes : true
947946 }
948947 } ) ;
949948
@@ -1424,10 +1423,48 @@ export default class CalendarService {
14241423
14251424 if ( ! event ) throw new NotFoundException ( 'Event' , eventId ) ;
14261425 if ( event . dateDeleted ) throw new DeletedException ( 'Event' , eventId ) ;
1427-
1428- // Cannot schedule an already scheduled event
14291426 if ( event . status === Event_Status . SCHEDULED ) {
1430- throw new HttpException ( 400 , 'Event is already scheduled' ) ;
1427+ const timeSlots = await prisma . schedule_Slot . findMany ( {
1428+ where : { eventId : event . eventId }
1429+ } ) ;
1430+
1431+ // Restore the old scheduled time from confirmed members' availabilities
1432+ // so they get their time back from the old scheduled event
1433+ for ( const slot of timeSlots ) {
1434+ if ( ! slot . startTime || ! slot . endTime ) continue ;
1435+ const startHour = new Date ( slot . startTime ) . getHours ( ) ;
1436+ const endHour = new Date ( slot . endTime ) . getHours ( ) ;
1437+
1438+ for ( const member of event . confirmedMembers ) {
1439+ if ( ! member . drScheduleSettings ) continue ;
1440+ const existingAvailability = member . drScheduleSettings . availabilities . find ( ( a ) =>
1441+ isSameDayUTC ( a . dateSet , slot . startTime )
1442+ ) ;
1443+ if ( ! existingAvailability ) continue ;
1444+ // Availability index i represents local hour (10 + i); remove indices that fall within [startHour, endHour)
1445+ const returnedAvailability = Array . from ( { length : endHour - startHour } , ( _ , i ) => startHour + i - 10 ) . filter (
1446+ ( i ) => i >= 0
1447+ ) ;
1448+
1449+ const updatedAvailability = [ ...new Set ( [ ...existingAvailability . availability , ...returnedAvailability ] ) ] . sort (
1450+ ( a , b ) => a - b
1451+ ) ;
1452+
1453+ await prisma . availability . update ( {
1454+ where : { availabilityId : existingAvailability . availabilityId } ,
1455+ data : { availability : updatedAvailability }
1456+ } ) ;
1457+ }
1458+ }
1459+
1460+ await prisma . event . update ( {
1461+ where : { eventId : event . eventId } ,
1462+ data : { status : Event_Status . SCHEDULED }
1463+ } ) ;
1464+
1465+ await prisma . schedule_Slot . deleteMany ( {
1466+ where : { eventId : event . eventId }
1467+ } ) ;
14311468 }
14321469
14331470 // Only the event creator can schedule the event
@@ -1464,9 +1501,12 @@ export default class CalendarService {
14641501 allDay : false
14651502 }
14661503 } ,
1504+
1505+ initialDateScheduled : event . initialDateScheduled ?? null ,
14671506 approved : hasConflict ? Conflict_Status . PENDING : event . approved ,
14681507 approvalRequiredFromUserId : hasConflict ? conflictingEvent ?. userCreated . userId : event . approvalRequiredFromUserId
14691508 } ,
1509+
14701510 ...getEventQueryArgs ( organization . organizationId )
14711511 } ) ;
14721512
@@ -1476,7 +1516,7 @@ export default class CalendarService {
14761516 const endHour = endTime . getHours ( ) ;
14771517 for ( const member of event . confirmedMembers ) {
14781518 if ( ! member . drScheduleSettings ) continue ;
1479- const existingAvailability = member . drScheduleSettings . availabilities . find ( ( a ) => isSameDay ( a . dateSet , startTime ) ) ;
1519+ const existingAvailability = member . drScheduleSettings . availabilities . find ( ( a ) => isSameDayUTC ( a . dateSet , startTime ) ) ;
14801520 if ( ! existingAvailability ) continue ;
14811521 // Availability index i represents local hour (10 + i); remove indices that fall within [startHour, endHour)
14821522 const updatedAvailability = existingAvailability . availability . filter (
@@ -1494,9 +1534,12 @@ export default class CalendarService {
14941534 } ) ;
14951535
14961536 if ( foundEventType ?. sendSlackNotifications ) {
1497- await sendEventScheduledSlackNotif ( updatedEvent . notificationSlackThreads , eventTransformer ( updatedEvent ) ) ;
1537+ await sendEventScheduledSlackNotif (
1538+ updatedEvent . notificationSlackThreads ,
1539+ eventTransformer ( updatedEvent ) ,
1540+ event . status === Event_Status . SCHEDULED
1541+ ) ;
14981542 }
1499-
15001543 return eventTransformer ( updatedEvent ) ;
15011544 }
15021545
0 commit comments