/// <summary>
        /// Get list of time off requested for employees.
        /// </summary>
        /// <param name="tenantId">Tenant Id.</param>
        /// <param name="jSession">jSessionID.</param>
        /// <param name="startDate">Start date.</param>
        /// <param name="endDate">End date.</param>
        /// <param name="employees">List of employees.</param>
        /// <returns>Task.</returns>
        public async Task <TimeOffResponse.Response> GetTimeOffRequest(string tenantId, string jSession, string startDate, string endDate, List <HyperfindResponse.ResponseHyperFindResult> employees)
        {
            string          xmlTimeOffRequest = this.CreateRequest(employees, startDate, endDate);
            TenantMapEntity tenantMapEntity   = await this.azureTableStorageHelper.ExecuteQueryUsingPointQueryAsync <TenantMapEntity>(Constants.ActivityChannelId, tenantId);

            var tupleResponse = await ApiHelper.Instance.SendSoapPostRequest(tenantMapEntity.EndpointUrl, ApiConstants.SoapEnvOpen, xmlTimeOffRequest, ApiConstants.SoapEnvClose, jSession);

            TimeOffResponse.Response timeOffResponse = this.ProcessResponse(tupleResponse.Item1);

            return(timeOffResponse);
        }
        /// <summary>
        /// Fecth time off request details for displaying history.
        /// </summary>
        /// <param name="tenantId">Tenant Id.</param>
        /// <param name="jSession">JSession.</param>
        /// <param name="queryDateSpan">QueryDateSpan string.</param>
        /// <param name="personNumber">Person number who created request.</param>
        /// <returns>Request details response object.</returns>
        public async Task <TimeOffResponse.Response> GetTimeOffRequestDetails(string tenantId, string jSession, string queryDateSpan, string personNumber)
        {
            string          xmlTimeOffRequest = this.CreateTORRequest(personNumber, queryDateSpan);
            TenantMapEntity tenantMapEntity   = await this.azureTableStorageHelper.ExecuteQueryUsingPointQueryAsync <TenantMapEntity>(Constants.ActivityChannelId, tenantId);

            var tupleResponse = await ApiHelper.Instance.SendSoapPostRequest(tenantMapEntity.EndpointUrl, ApiConstants.SoapEnvOpen, xmlTimeOffRequest, ApiConstants.SoapEnvClose, jSession);

            TimeOffResponse.Response timeOffResponse = this.ProcessTORResponse(tupleResponse.Item1);

            return(timeOffResponse);
        }
        /// <summary>
        /// Fecth time off request details for displaying history.
        /// </summary>
        /// <param name="endPointUrl">The Kronos WFC endpoint URL.</param>
        /// <param name="jSession">JSession.</param>
        /// <param name="queryDateSpan">QueryDateSpan string.</param>
        /// <param name="employees">Employees who created request.</param>
        /// <returns>Request details response object.</returns>
        public async Task <TimeOffResponse.Response> GetTimeOffRequestDetailsByBatchAsync(
            Uri endPointUrl,
            string jSession,
            string queryDateSpan,
            List <Models.ResponseEntities.HyperFind.ResponseHyperFindResult> employees)
        {
            if (employees is null)
            {
                throw new ArgumentNullException(nameof(employees));
            }

            var xmlTimeOffRequest = this.FetchTimeOffRequestsByBatch(employees, queryDateSpan);
            var tupleResponse     = await this.apiHelper.SendSoapPostRequestAsync(
                endPointUrl,
                ApiConstants.SoapEnvOpen,
                xmlTimeOffRequest,
                ApiConstants.SoapEnvClose,
                jSession).ConfigureAwait(false);

            TimeOffResponse.Response timeOffResponse = this.ProcessTimeOffResponse(tupleResponse.Item1);

            return(timeOffResponse);
        }