Пример #1
0
        /// <summary>
        /// Fetches the transfers from the server and adds the helicopters to the map
        /// </summary>
        public async Task StartTransfers()
        {
            TransplantListAPI    transplantListAPI = new TransplantListAPI();
            List <OrganTransfer> transfers         = await transplantListAPI.GetAllTransfers();

            foreach (OrganTransfer transfer in transfers)
            {
                int waitingListId = await transplantListAPI.GetWaitingListId((int)transfer.receiverId, transfer.organType);

                if (transfer.arrivalTime.ToDateTimeWithSeconds() < DateTime.Now)
                {
                    await HelicopterFinished(waitingListId, transfer.id);
                }
                else
                {
                    AddHelicopter(
                        GetCurrentPoint(transfer),
                        new Position(transfer.endLat, transfer.endLon),
                        transfer.organType,
                        (int)transfer.arrivalTime.ToDateTimeWithSeconds().Subtract(DateTime.Now).TotalSeconds,
                        transfer.receiverId,
                        waitingListId,
                        transfer.id);
                }
            }
        }
Пример #2
0
        /*
         * Retrieves all organs for the user
         */
        private async Task <List <DonatableOrgan> > GetOrgans()
        {
            TransplantListAPI     transplantListAPI = new TransplantListAPI();
            List <DonatableOrgan> donatableOrgans   = await transplantListAPI.GetSingleUsersDonatableOrgans(UserController.Instance.LoggedInUser.id);

            return(donatableOrgans);
        }
Пример #3
0
        /*
         * Called when a transfer is complete.
         * The transfer and waiting list item are removed from the database.
         */
        private async Task HelicopterFinished(int waitingListItemId, int organId)
        {
            TransplantListAPI transplantListAPI = new TransplantListAPI();
            await transplantListAPI.DeleteTransfer(organId);

            await transplantListAPI.DeleteWaitingListItem(waitingListItemId);

            await transplantListAPI.SetInTransfer(organId, 2);
        }
Пример #4
0
        /*
         * Starts a new transfer to the hospital closest to the given selectedRecipient but does not add a helicopter to the map
         */
        public async Task NewTransferWithoutAddingHelicpoter(DonatableOrgan currentOrgan, User selectedRecipient, Position donorPosition)
        {
            await InitialiseHospitalsWithoutAddingToMap();

            OrganTransfer newOrganTransfer = new OrganTransfer();

            newOrganTransfer.id         = currentOrgan.id;
            newOrganTransfer.receiverId = selectedRecipient.id;

            //Find the position of the donor
            newOrganTransfer.startLat = donorPosition.Latitude;
            newOrganTransfer.startLon = donorPosition.Longitude;

            Hospital receiverHospital = null;

            //await InitialiseHospitalsWithoutAddingToMap();
            foreach (Hospital hospital in hospitals)
            {
                if (hospital.region.Equals(selectedRecipient.region))
                {
                    receiverHospital = hospital;
                }
            }

            //Find the nearest hospital
            newOrganTransfer.endLat = receiverHospital.latitude;
            newOrganTransfer.endLon = receiverHospital.longitude;

            newOrganTransfer.organType = OrganExtensions.ToOrgan(currentOrgan.organType);

            Position HospitalPosition = new Position(receiverHospital.latitude, receiverHospital.longitude);

            newOrganTransfer.arrivalTime = new CustomDateTime(DateTime.Now.AddSeconds(distance(donorPosition.Latitude, HospitalPosition.Latitude,
                                                                                               donorPosition.Longitude, HospitalPosition.Longitude, 0, 0) / 70));

            TransplantListAPI transplantListAPI = new TransplantListAPI();
            await transplantListAPI.InsertTransfer(newOrganTransfer);

            await transplantListAPI.SetInTransfer(currentOrgan.id, 1);
        }
Пример #5
0
        /*
         * Starts a transfer to the hospital closest to the given selectedRecipient and adds the helicopter to the map
         */
        public async Task NewTransfer(DonatableOrgan currentOrgan, User selectedRecipient, Position donorPosition)
        {
            OrganTransfer newOrganTransfer = new OrganTransfer();

            newOrganTransfer.id         = currentOrgan.id;
            newOrganTransfer.receiverId = selectedRecipient.id;

            //Find the position of the donor
            newOrganTransfer.startLat = donorPosition.Latitude;
            newOrganTransfer.startLon = donorPosition.Longitude;

            Hospital receiverHospital = null;

            //await InitialiseHospitalsWithoutAddingToMap();
            foreach (Hospital hospital in hospitals)
            {
                if (hospital.region.Equals(selectedRecipient.region))
                {
                    receiverHospital = hospital;
                }
            }

            //Find the nearest hospital
            newOrganTransfer.endLat = receiverHospital.latitude;
            newOrganTransfer.endLon = receiverHospital.longitude;

            newOrganTransfer.organType = OrganExtensions.ToOrgan(currentOrgan.organType);

            Position HospitalPosition = new Position(receiverHospital.latitude, receiverHospital.longitude);

            newOrganTransfer.arrivalTime = new CustomDateTime(DateTime.Now.AddSeconds(distance(donorPosition.Latitude, HospitalPosition.Latitude,
                                                                                               donorPosition.Longitude, HospitalPosition.Longitude, 0, 0) / 70));

            TransplantListAPI transplantListAPI = new TransplantListAPI();

            if (await transplantListAPI.InsertTransfer(newOrganTransfer) != HttpStatusCode.OK)
            {
                await DisplayAlert("", "Failed to start transfer (failed to insert transfer)", "OK");

                return;
            }

            if (await transplantListAPI.SetInTransfer(currentOrgan.id, 1) != true)
            {
                await DisplayAlert("", "Failed to start transfer (failed to set in transfer)", "OK");

                return;
            }

            int TTA = (int)newOrganTransfer.arrivalTime.ToDateTimeWithSeconds().Subtract(DateTime.Now).TotalSeconds;

            //int waitingListId = await transplantListAPI.GetWaitingListId((int)newOrganTransfer.receiverId, newOrganTransfer.organType);
            //if (waitingListId == 0) {
            //    await DisplayAlert("", "Failed to start transfer (failed to get waiting list id)", "OK");
            //    return;
            //}

            int waitingListId = 0;

            foreach (WaitingListItem item in selectedRecipient.waitingListItems)
            {
                if (item.organType == OrganExtensions.ToOrgan(currentOrgan.organType))
                {
                    waitingListId = item.id;
                }
            }

            AddHelicopter(donorPosition,
                          HospitalPosition,
                          newOrganTransfer.organType,
                          TTA,
                          newOrganTransfer.receiverId,
                          waitingListId,
                          newOrganTransfer.id
                          );
        }