@@ -462,39 +462,81 @@ public GroupSettingsWithRestrictions GetGroupSettings(int locationId, int groupI
462
462
}
463
463
464
464
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 ;
466
465
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 )
469
489
{
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 ( )
471
505
{
472
506
CallResponse = new Callresponse ( )
473
507
{
474
- ResponseCode = 0 ,
475
- ResponseMessage = "Unsuccessful "
508
+ ResponseCode = 100 ,
509
+ ResponseMessage = $ "Booking confirmed "
476
510
} ,
477
511
CreatedBookings = [ ]
478
- } ) ;
512
+ } ;
513
+
514
+ return ( true , condecoBookingResponse ) ;
479
515
}
480
516
else
481
517
{
482
- if ( response . CallResponse . ResponseCode == 100 )
518
+ var condecoBookingResponse = new BookingResponse ( )
483
519
{
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 ) ;
490
529
}
491
530
}
492
531
493
- public List < UpcomingBooking > GetUpcomingBookings ( )
532
+ public List < UpcomingBooking > GetUpcomingBookings ( DateOnly ? fromDate = null , DateOnly ? toDate = null )
494
533
{
495
534
var ianaTimezoneStr = TimeZoneConverter . TZConvert . WindowsToIana ( TimeZoneInfo . Local . Id ) ;
496
535
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";
498
540
499
541
var listResultsStr = client . GetStringAsync ( url ) . Result ;
500
542
@@ -524,6 +566,49 @@ public List<UpcomingBooking> GetUpcomingBookings()
524
566
return result ;
525
567
}
526
568
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
+
527
612
public ( bool Success , string BookingStatusStr ) CheckIn ( UpcomingBooking bookingDetails )
528
613
{
529
614
var url = $ "/MobileAPI/DeskBookingService.svc/CheckIn?accessToken={ userIdLong } &locationID={ bookingDetails . LocationId } &deskID={ bookingDetails . DeskId } &qrCode=";
0 commit comments