Made it so only admins can change pet owners

This commit is contained in:
Alex
2026-04-12 00:37:15 -06:00
parent 57e5b06666
commit 16c832bd14
2 changed files with 32 additions and 0 deletions

View File

@@ -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;
}

View File

@@ -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<ViewState> 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;