@@ -462,39 +462,81 @@ public GroupSettingsWithRestrictions GetGroupSettings(int locationId, int groupI
462462 }
463463
464464 var url = $ "/MobileAPI/DeskBookingService.svc/Book?accessToken={ userIdLong } &userID={ userIdToBookFor } &locationID={ room . LocationId } &groupID={ room . GroupId } &floorID={ room . FloorId } &deskID={ room . RoomId } &startDate={ date : dd/MM/yyyy} |3";
465- var responseStr = client . GetStringAsync ( url ) . Result ;
466465
467- var response = responseStr . ToObject < BookingResponse > ( ) ;
468- if ( response == null )
466+ string ? bookingResponseStr ;
467+ try
468+ {
469+ bookingResponseStr = client . GetStringAsync ( url ) . Result ;
470+ }
471+ catch ( Exception ex )
472+ {
473+ //Catch things such as timeouts
474+ bookingResponseStr = $ "Error while booking: { ex . Message } ";
475+ }
476+
477+ var successful = false ;
478+ try
479+ {
480+ successful = BookingSuccessful ( room . RoomId , date , bookForUser ) ;
481+ }
482+ catch ( Exception ex )
483+ {
484+ //Catch things such as timeouts
485+ bookingResponseStr ??= $ "Error while confirming booking: { ex . Message } ";
486+ }
487+
488+ if ( successful )
469489 {
470- return ( false , new BookingResponse ( )
490+ try
491+ {
492+ //Sometimes this contains "You have already reserved this workspace type for this time slot", instead of BookingResponse object
493+ if ( ! string . IsNullOrEmpty ( bookingResponseStr ) )
494+ {
495+ var bookingResponseObj = bookingResponseStr . ToObject < BookingResponse > ( ) ;
496+ return ( true , bookingResponseObj ) ;
497+ }
498+ }
499+ catch
500+ {
501+
502+ }
503+
504+ var condecoBookingResponse = new BookingResponse ( )
471505 {
472506 CallResponse = new Callresponse ( )
473507 {
474- ResponseCode = 0 ,
475- ResponseMessage = "Unsuccessful "
508+ ResponseCode = 100 ,
509+ ResponseMessage = $ "Booking confirmed "
476510 } ,
477511 CreatedBookings = [ ]
478- } ) ;
512+ } ;
513+
514+ return ( true , condecoBookingResponse ) ;
479515 }
480516 else
481517 {
482- if ( response . CallResponse . ResponseCode == 100 )
518+ var condecoBookingResponse = new BookingResponse ( )
483519 {
484- return ( true , response ) ;
485- }
486- else
487- {
488- return ( false , response ) ;
489- }
520+ CallResponse = new Callresponse ( )
521+ {
522+ ResponseCode = 0 ,
523+ ResponseMessage = $ "{ bookingResponseStr } "
524+ } ,
525+ CreatedBookings = [ ]
526+ } ;
527+
528+ return ( false , condecoBookingResponse ) ;
490529 }
491530 }
492531
493- public List < UpcomingBooking > GetUpcomingBookings ( )
532+ public List < UpcomingBooking > GetUpcomingBookings ( DateOnly ? fromDate = null , DateOnly ? toDate = null )
494533 {
495534 var ianaTimezoneStr = TimeZoneConverter . TZConvert . WindowsToIana ( TimeZoneInfo . Local . Id ) ;
496535
497- var url = $ "/MobileAPI/MobileService.svc/MyBookings/ListV2?sessionGuid={ userIdLong } &languageId=1&deskStartDate={ DateTime . Now : dd/MM/yyyy} &deskEndDate={ DateTime . Now . AddDays ( 7 ) : dd/MM/yyyy} &roomStartDate={ DateTime . Now : dd/MM/yyyy} &timeZoneID={ ianaTimezoneStr } &pageSize=100&pageIndex=0";
536+ fromDate ??= DateOnly . FromDateTime ( DateTime . Now . Date ) ;
537+ toDate ??= fromDate ;
538+
539+ var url = $ "/MobileAPI/MobileService.svc/MyBookings/ListV2?sessionGuid={ userIdLong } &languageId=1&deskStartDate={ fromDate : dd/MM/yyyy} &deskEndDate={ toDate : dd/MM/yyyy} &roomStartDate={ DateTime . Now : dd/MM/yyyy} &timeZoneID={ ianaTimezoneStr } &pageSize=100&pageIndex=0";
498540
499541 var listResultsStr = client . GetStringAsync ( url ) . Result ;
500542
@@ -524,6 +566,49 @@ public List<UpcomingBooking> GetUpcomingBookings()
524566 return result ;
525567 }
526568
569+ public bool BookingSuccessful ( int deskId , DateOnly bookedForDate , BookFor ? bookingFor )
570+ {
571+ var bookings = GetUpcomingBookings ( bookedForDate , bookedForDate ) ;
572+ var userId = GetUserId ( ) ;
573+
574+ var successful = bookings
575+ . Where ( booking =>
576+ {
577+ var startDate = DateOnly . FromDateTime ( booking . BookingStartDate ) ;
578+ var endDateTime = DateOnly . FromDateTime ( booking . BookingEndDate ) ;
579+
580+ var matchesDate = bookedForDate >= startDate && bookedForDate <= endDateTime ;
581+ return matchesDate ;
582+
583+ } )
584+ . Where ( booking => booking . DeskId == deskId )
585+ . Where ( booking =>
586+ {
587+ var matchesUser = true ;
588+
589+ if ( bookingFor ? . IsExternal == "1" )
590+ {
591+ matchesUser &= booking . BookedForFullName == $ "{ bookingFor . FirstName } { bookingFor . LastName } ";
592+ }
593+ else
594+ {
595+ if ( string . IsNullOrEmpty ( bookingFor ? . UserId ) )
596+ {
597+ matchesUser &= true ;
598+ }
599+ else
600+ {
601+ matchesUser &= "" + booking . BookedForUserId == bookingFor . UserId ;
602+ }
603+ }
604+
605+ return matchesUser ;
606+ } )
607+ . Any ( ) ;
608+
609+ return successful ;
610+ }
611+
527612 public ( bool Success , string BookingStatusStr ) CheckIn ( UpcomingBooking bookingDetails )
528613 {
529614 var url = $ "/MobileAPI/DeskBookingService.svc/CheckIn?accessToken={ userIdLong } &locationID={ bookingDetails . LocationId } &deskID={ bookingDetails . DeskId } &qrCode=";
0 commit comments