/*
         * 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
                          );
        }
Example #2
0
        /*
         * When the page appears, the state of the controls are reset
         */
        protected override async void OnAppearing()
        {
            List <DonatableOrgan> donatableOrgans = await GetOrgans();

            foreach (Organ item in UserController.Instance.LoggedInUser.organs)
            {
                Console.WriteLine(item);
                switch (item)
                {
                case Organ.LIVER:
                    LiverCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            LiverCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.KIDNEY:
                    KidneyCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            KidneyCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.PANCREAS:
                    PancreasCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            PancreasCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.HEART:
                    HeartCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            HeartCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.LUNG:
                    LungCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            LungCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.INTESTINE:
                    IntestineCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            IntestineCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.CORNEA:
                    CorneaCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            CorneaCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.EAR:
                    MiddleEarCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            MiddleEarCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.SKIN:
                    SkinCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            SkinCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.BONE:
                    BoneMarrowCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            BoneMarrowCell.IsEnabled = false;
                        }
                    }
                    break;

                case Organ.TISSUE:
                    ConnectiveTissueCell.On = true;
                    foreach (DonatableOrgan organ in donatableOrgans)
                    {
                        if (OrganExtensions.ToOrgan(organ.organType) == item && (organ.inTransfer != 0 || organ.expired))
                        {
                            ConnectiveTissueCell.IsEnabled = false;
                        }
                    }
                    break;
                }
            }
        }