private static void VerifyCompleteOrder(updateBooking updateBooking, WorkOrder workOrder, IList <ScheduleOfRatesModel> sorCodes, order drsOrder, string completionStatus)
        {
            var booking = drsOrder.theBookings.First();

            updateBooking.updateBooking1.completeOrder.Should().BeTrue();
            updateBooking.updateBooking1.resourceId.Should().Be(booking.theResources.First().resourceID);
            updateBooking.updateBooking1.transactionType.Should().Be(transactionTypeType.COMPLETED);

            ValidateBooking(updateBooking.updateBooking1.theBooking, booking, completionStatus);
            ValidateBookings(workOrder, sorCodes, updateBooking.updateBooking1.theBooking.theBookingCodes);

            updateBooking.updateBooking1.theBooking.theOrder.theBookings.Should().BeNull();
            ValidateBusinessData(updateBooking.updateBooking1.theBooking.theOrder.theBusinessData, DrsBusinessDataNames.Status, "COMPLETED");
            updateBooking.updateBooking1.theBooking.theOrder.Should().BeEquivalentTo(drsOrder, c => c
                                                                                     .Excluding(o => o.status)
                                                                                     .Excluding(o => o.theBookings)
                                                                                     .Excluding(o => o.theBusinessData)
                                                                                     );
            updateBooking.updateBooking1.theBooking.theOrder.status.Should().Be(orderStatus.COMPLETED);

            var expectedStart = workOrder.ClosedDate - (booking.assignedEnd - booking.assignedStart) ?? booking.assignedStart;
            var expectedEnd   = workOrder.ClosedDate ?? booking.assignedEnd;

            updateBooking.updateBooking1.startDateAndTime.Should().Be(expectedStart);
            updateBooking.updateBooking1.endDateAndTime.Should().Be(expectedEnd);
        }
        public Task <updateBooking> BuildCompleteOrderUpdateBookingRequest(string sessionId, WorkOrder workOrder, order drsOrder, string bookingStatus = DrsBookingStatusCodes.Completed)
        {
            _logger.LogInformation($"Started building update booking for workOrder {workOrder.Id}");

            var booking = drsOrder.theBookings.First();

            booking.theOrder = drsOrder;
            booking.theOrder.theBusinessData = SetBusinessData(booking.theOrder.theBusinessData, DrsBusinessDataNames.Status, DrsBookingStatusCodes.Completed);
            booking.theOrder.theBookings     = null;
            booking.theOrder.status          = orderStatus.COMPLETED;
            booking.bookingCompletionStatus  = bookingStatus;
            booking.bookingLifeCycleStatus   = transactionTypeType.COMPLETED;
            booking.theBusinessData          = SetBusinessData(booking.theBusinessData, DrsBusinessDataNames.TaskLifeCycleStatus, DrsTaskLifeCycleCodes.Completed);
            booking.theBookingCodes?.ToList().ForEach(bc => bc.itemValue = null);
            var resource = booking.theResources?.First();

            _logger.LogInformation($"Building update with data: [ClosedDate: {workOrder.ClosedDate}] [booking AssignedEnd: {booking.assignedEnd}] [booking assignedStart {booking.assignedStart}]");

            var updateBooking = new updateBooking
            {
                updateBooking1 = new xmbUpdateBooking
                {
                    completeOrder    = true,
                    startDateAndTime = workOrder.ClosedDate - (booking.assignedEnd - booking.assignedStart) ?? booking.assignedStart,
                    endDateAndTime   = workOrder.ClosedDate ?? booking.assignedEnd,
                    resourceId       = resource?.resourceID,
                    transactionType  = transactionTypeType.COMPLETED,
                    sessionId        = sessionId,
                    theBooking       = booking,
                }
            };

            _logger.LogInformation($"Finished building update booking for workOrder {workOrder.Id}: [StartDateAndTime: {updateBooking.updateBooking1.startDateAndTime}] [EndDateAndTime: {updateBooking.updateBooking1.endDateAndTime}] [resourceId: {updateBooking.updateBooking1.resourceId}]");

            return(Task.FromResult(updateBooking));
        }