Update model for a sampling point's qouta target
        /// <summary>
        /// See <see cref="INfieldSurveysService.SamplingPointQuotaTargetUpdateAsync"/>
        /// </summary>
        public Task <SamplingPointQuotaTarget> SamplingPointQuotaTargetUpdateAsync(string surveyId, string samplingPointId, SamplingPointQuotaTarget samplingPointQuotaTarget)
        {
            Ensure.ArgumentNotNullOrEmptyString(surveyId, nameof(surveyId));
            Ensure.ArgumentNotNullOrEmptyString(samplingPointId, nameof(samplingPointId));
            Ensure.ArgumentNotNull(samplingPointQuotaTarget, nameof(samplingPointQuotaTarget));
            Ensure.ArgumentNotNullOrEmptyString(samplingPointQuotaTarget.LevelId, nameof(samplingPointQuotaTarget.LevelId));

            var updatedSamplingPointQuotaTarget = new UpdateSamplingPointQuotaTarget
            {
                Target = samplingPointQuotaTarget.Target
            };

            var uri = new Uri(SurveysApi, $"{surveyId}/{SamplingPointsControllerName}/{samplingPointId}/{SamplingPointsQuotaControllerName}/{samplingPointQuotaTarget.LevelId}");

            return(Client.PatchAsJsonAsync(uri, updatedSamplingPointQuotaTarget)
                   .ContinueWith(
                       responseMessageTask => responseMessageTask.Result.Content.ReadAsStringAsync().Result)
                   .ContinueWith(
                       stringTask => JsonConvert.DeserializeObject <SamplingPointQuotaTarget>(stringTask.Result))
                   .FlattenExceptions());
        }
        /// <summary>
        /// See <see cref="INfieldSurveysService.SamplingPointQuotaTargetUpdateAsync"/>
        /// </summary>
        public Task <SamplingPointQuotaTarget> SamplingPointQuotaTargetUpdateAsync(string surveyId, string samplingPointId, SamplingPointQuotaTarget samplingPointQuotaTarget)
        {
            if (samplingPointQuotaTarget == null)
            {
                throw new ArgumentNullException("samplingPointQuotaTarget");
            }

            var updatedSamplingPointQuotaTarget = new UpdateSamplingPointQuotaTarget
            {
                Target = samplingPointQuotaTarget.Target
            };

            string uri = string.Format(@"{0}{1}/{2}/{3}/{4}/{5}", SurveysApi.AbsoluteUri, surveyId,
                                       SamplingPointsControllerName, samplingPointId, SamplingPointsQuotaControllerName,
                                       samplingPointQuotaTarget.LevelId);

            return(Client.PatchAsJsonAsync(uri, updatedSamplingPointQuotaTarget)
                   .ContinueWith(
                       responseMessageTask => responseMessageTask.Result.Content.ReadAsStringAsync().Result)
                   .ContinueWith(
                       stringTask => JsonConvert.DeserializeObjectAsync <SamplingPointQuotaTarget>(stringTask.Result).Result)
                   .FlattenExceptions());
        }
        /// <summary>
        /// See <see cref="INfieldSurveysService.SamplingPointQuotaTargetUpdateAsync"/>
        /// </summary>
        public Task<SamplingPointQuotaTarget> SamplingPointQuotaTargetUpdateAsync(string surveyId, string samplingPointId, SamplingPointQuotaTarget samplingPointQuotaTarget)
        {
            if (samplingPointQuotaTarget == null)
            {
                throw new ArgumentNullException("samplingPointQuotaTarget");
            }

            var updatedSamplingPointQuotaTarget = new UpdateSamplingPointQuotaTarget
            {
                Target = samplingPointQuotaTarget.Target
            };

            string uri = string.Format(@"{0}{1}/{2}/{3}/{4}/{5}", SurveysApi.AbsoluteUri, surveyId,
                SamplingPointsControllerName, samplingPointId, SamplingPointsQuotaControllerName,
                samplingPointQuotaTarget.LevelId);

            return Client.PatchAsJsonAsync(uri, updatedSamplingPointQuotaTarget)
             .ContinueWith(
                 responseMessageTask => responseMessageTask.Result.Content.ReadAsStringAsync().Result)
             .ContinueWith(
                 stringTask => JsonConvert.DeserializeObject<SamplingPointQuotaTarget>(stringTask.Result))
             .FlattenExceptions();
        }