diff --git a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/PetDetailFragment.java b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/PetDetailFragment.java index 22e9f0cc..6b116fdb 100644 --- a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/PetDetailFragment.java +++ b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/PetDetailFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.fragment.NavHostFragment; @@ -163,6 +164,20 @@ public class PetDetailFragment extends Fragment { petDTO.setCustomerId(customerId); petDTO.setStoreId(storeId); + boolean ownerChanged = !java.util.Objects.equals(viewModel.getOriginalCustomerId(), customerId); + if (!isStaff() && viewModel.isEditing() && viewModel.isOriginallyOwnedOrAdopted() && ownerChanged) { + new AlertDialog.Builder(requireContext()) + .setTitle("Change Owner") + .setMessage("Are you sure you want to change the owner of this pet?") + .setPositiveButton("Yes", (d, w) -> performSave(petDTO, name)) + .setNegativeButton("Cancel", null) + .show(); + } else { + performSave(petDTO, name); + } + } + + private void performSave(PetDTO petDTO, String name) { viewModel.savePet(petDTO).observe(getViewLifecycleOwner(), resource -> { if (resource == null) return; setLoading(resource.status == Resource.Status.LOADING); @@ -344,6 +359,10 @@ public class PetDetailFragment extends Fragment { binding.spinnerStore.setEnabled(false); } + if (isStaff() && state.isEditing && viewModel.isOriginallyOwnedOrAdopted()) { + binding.spinnerCustomer.setEnabled(false); + } + isUpdatingUI = false; } diff --git a/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetDetailViewModel.java b/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetDetailViewModel.java index ace8fa2b..2f302b42 100644 --- a/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetDetailViewModel.java +++ b/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetDetailViewModel.java @@ -40,6 +40,8 @@ public class PetDetailViewModel extends ViewModel { private Long selectedCustomerId = null; private Long selectedStoreId = null; private String selectedSpecies = null; + private boolean isOriginallyOwnedOrAdopted = false; + private Long originalCustomerId = null; @Inject public PetDetailViewModel(PetRepository petRepository, CustomerRepository customerRepository, StoreRepository storeRepository) { @@ -82,6 +84,14 @@ public class PetDetailViewModel extends ViewModel { return current != null && current.isEditing; } + public boolean isOriginallyOwnedOrAdopted() { + return isOriginallyOwnedOrAdopted; + } + + public Long getOriginalCustomerId() { + return originalCustomerId; + } + public LiveData getViewState() { return viewState; } @@ -162,6 +172,9 @@ public class PetDetailViewModel extends ViewModel { selectedCustomerId = pet.getCustomerId(); selectedStoreId = pet.getStoreId(); selectedSpecies = pet.getPetSpecies(); + isOriginallyOwnedOrAdopted = STATUS_OWNED.equalsIgnoreCase(pet.getPetStatus()) + || STATUS_ADOPTED.equalsIgnoreCase(pet.getPetStatus()); + originalCustomerId = pet.getCustomerId(); updateViewState(state -> { state.selectedCustomerId = selectedCustomerId;