Example #1
0
        /// <summary>
        /// Send visitor registered in rychlejsie or downloaded from eHealth to eHealth system
        ///
        /// Returns true if successful, False or Exception if not successful
        /// </summary>
        /// <param name="visitor"></param>
        /// <param name="placeProviderId"></param>
        /// <param name="placeProviderRepository"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public async Task <bool> SendResultToEHealth(
            Visitor visitor,
            string placeProviderId,
            IPlaceProviderRepository placeProviderRepository,
            IConfiguration configuration
            )
        {
            await SendResultToEHealth(visitor);

            var data = await MakeSurePlaceProviderIsAuthenticated(placeProviderId, placeProviderRepository);

            if (visitor.PersonType == "foreign")
            {
                throw new Exception("Only residents supported right now");
            }
            // session is valid

            if (string.IsNullOrEmpty(visitor.RC))
            {
                throw new Exception("Error - invalid personal number");
            }

            var check = await this.CheckPerson(data.LoginPayload.Session.Token, visitor.RC);

            if (check?.CfdId > 0)
            {
                // ok
            }
            else
            {
                if (configuration["AllowEHealthRegistration"] != "1")
                {
                    return(false);
                }
                var personData = await RegisterPerson(data.LoginPayload.Session.Token, RegisterPersonRequest.FromVisitor(visitor, data.LoginPayload));

                check = await this.CheckPerson(data.LoginPayload.Session.Token, visitor.RC);

                if (check?.CfdId > 0)
                {
                    // ok
                }
                else
                {
                    throw new Exception("Unable to process visitor in ehealth - not found in search");
                }
            }

            var driveIn = await DriveInQueue(data.LoginPayload.Session.Token, DateTimeOffset.Now);

            var place = driveIn.Payload.OrderByDescending(p => p.DailyCapacity).FirstOrDefault();

            var t     = DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss");
            var input = new DriveInRequest()
            {
                DesignatedDriveinCity         = place.City,
                DesignatedDriveinId           = place.Id,
                DesignatedDriveinLatitude     = place.Latitude,
                DesignatedDriveinLongitude    = place.Longitude,
                DesignatedDriveinScheduledAt  = t,
                DesignatedDriveinStreetName   = place.StreetName,
                DesignatedDriveinStreetNumber = place.StreetNumber,
                DesignatedDriveinTitle        = place.Title,
                DesignatedDriveinZipCode      = place.ZipCode,
                MedicalAssessedAt             = t,
                State  = "SD",
                Triage = "2",
            };
            var addPersonToPlace = await AddPersonToTestingPlace(data.LoginPayload.Session.Token, check.CfdId, input);

            if (addPersonToPlace != "1")
            {
                throw new Exception("Unexpected error returned while adding person to place");
            }

            string result;

            switch (visitor.Result)
            {
            case TestResult.PositiveWaitingForCertificate:
            case TestResult.PositiveCertificateTaken:
                result = "POSITIVE";
                break;

            case TestResult.NegativeWaitingForCertificate:
            case TestResult.NegativeCertificateTaken:
            case TestResult.NegativeCertificateTakenTypo:
                result = "NEGATIVE";
                break;

            default:
                throw new Exception($"Unable to determine state: {visitor.Result}");
            }

            var setResultRequest = new CovidMassTesting.Model.EZdravie.Request.SetResultRequest()
            {
                Id                   = 0,
                UserId               = data.LoginPayload.User.Id,
                CovidFormDataId      = check.CfdId,
                FinalResult          = result,
                ScreeningFinalResult = result,
                SpecimenId           = visitor.TestingSet,
                SpecimenCollectedAt  = visitor.TestingTime.Value.ToString("yyyy-MM-dd HH:mm:ss"),
                ScreeningEndedAt     = visitor.TestResultTime?.ToString("yyyy-MM-dd HH:mm:ss") ?? visitor.TestingTime.Value.ToString("yyyy-MM-dd HH:mm:ss"),
            };
            var setResult = await SetTestResultToPerson(data.LoginPayload.Session.Token, setResultRequest);

            return(setResult[0][0].HttpStatusCode == 200);
        }
Example #2
0
 public abstract Task <string> AddPersonToTestingPlace(string token, int cfid, DriveInRequest request);
        public override async Task <string> AddPersonToTestingPlace(string token, int cfid, DriveInRequest driveInRequest)
        {
            var request = new RestSharp.RestRequest($"api/covid_form_data/{cfid}", RestSharp.Method.PUT, RestSharp.DataFormat.Json);

            request.AddHeader("Authorization", $"Bearer {token}");
            //request.AddJsonBody(driveInRequest);
            var body = Serialize(driveInRequest);

            request.AddParameter("application/json", body, ParameterType.RequestBody);
            await Task.Delay(500);

            logger.LogInformation($"eHealth: AddPersonToTestingPlace {cfid}");
            var response = await client.ExecuteAsync(request);

            if (!response.IsSuccessful)
            {
                throw new Exception(response.Content);
            }
            return(response.Content);
        }