/// <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); } } }
/* * 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); }
/* * 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); }
/* * 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); }
/* * 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 ); }