diff --git a/app/src/main/java/com/sio/gestionclients/ui/screens/ModifClientActivity.kt b/app/src/main/java/com/sio/gestionclients/ui/screens/ModifClientActivity.kt index 0c6051f..7e9f058 100644 --- a/app/src/main/java/com/sio/gestionclients/ui/screens/ModifClientActivity.kt +++ b/app/src/main/java/com/sio/gestionclients/ui/screens/ModifClientActivity.kt @@ -4,27 +4,166 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.lifecycle.ViewModelProvider +import com.sio.gestionclients.data.local.AppDatabase +import com.sio.gestionclients.data.local.entities.Client +import com.sio.gestionclients.data.repository.LocalClientRepository +import com.sio.gestionclients.viewmodel.LocalClientViewModel +import com.sio.gestionclients.viewmodel.LocalClientViewModelFactory class ModifClientActivity : ComponentActivity() { + private lateinit var viewModel: LocalClientViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContent { ModifClientScreen(onQuit = { finish() })} + val database = AppDatabase.getDatabase(this) + val clientDao = database.clientDao() + val repository = LocalClientRepository (clientDao) + val factory = LocalClientViewModelFactory (repository) + viewModel = ViewModelProvider(this, factory).get(LocalClientViewModel::class.java) + setContent { + ModifClientScreen({ finish() }, viewModel = viewModel) + } } } @Composable -fun ModifClientScreen(onQuit: () -> Unit) { - Column(Modifier.fillMaxSize().padding(26.dp)) { - Text("Modifier un client", fontSize = 26.sp) +fun ModifClientScreen(onQuit: () -> Unit, viewModel: LocalClientViewModel) { + val clients by viewModel.clients.collectAsState(initial = emptyList()) + val selectedClient by viewModel.selectedClient.collectAsState() - Button(onClick = onQuit) { Text("Quitter") } + var expanded by remember { mutableStateOf(false) } + var selectedId by remember { mutableStateOf(null) } + + Column(modifier = Modifier.padding(16.dp)) { + + // Bouton pour ouvrir le menu déroulant + TextButton(onClick = { expanded = true }) { + Text( + text = clients.find { it.id == selectedId }?.nom ?: "Choisir un client" + ) + } + + // Menu déroulant + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false } + ) { + clients.forEach { client -> + DropdownMenuItem( + text = { Text(client.nom) }, + onClick = { + selectedId = client.id + expanded = false + viewModel.selectClient(client.id) + } + ) + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + // Affichage des infos du client sélectionné + selectedClient?.let { client -> + var nom by remember { mutableStateOf("") } + var prenom by remember { mutableStateOf("") } + var telephone by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } + + OutlinedTextField( + value = nom, + onValueChange = { newValue -> nom = newValue }, + label = { Text(client.nom) }, + placeholder = { Text("Nom") }, + modifier = Modifier.fillMaxWidth() + ) + + OutlinedTextField( + value = prenom, + onValueChange = { newValue -> prenom = newValue }, + label = { Text(client.prenom) }, + placeholder = { Text("Prénom") }, + modifier = Modifier.fillMaxWidth() + ) + + OutlinedTextField( + value = telephone, + onValueChange = { newValue -> telephone = newValue }, + label = { Text(client.telephone) }, + placeholder = { Text("Téléphone") }, + modifier = Modifier.fillMaxWidth() + ) + + OutlinedTextField( + value = email, + onValueChange = { newValue -> email = newValue }, + label = { Text(client.email) }, + placeholder = { Text("Email") }, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(16.dp)) + + Button(onClick = { + if (nom.isBlank()) { + nom = client.nom + } + + if (prenom.isBlank()) { + prenom = client.prenom + } + + if (telephone.isBlank()) { + telephone = client.telephone + } + + if (email.isBlank()) { + email = client.email + } + + val newClient = Client( + nom = nom, + prenom = prenom, + email = email, + telephone = telephone + ) + + if (!newClient.equals(client)) { + viewModel.updateSelectedClient(newClient) + selectedId = null + } + + }) { + Text("Modifier le client") + } + } + + Button( + onClick = onQuit, + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp) + ) { + Text("Quitter") + } } } \ No newline at end of file diff --git a/app/src/main/java/com/sio/gestionclients/viewmodel/LocalClientViewModel.kt b/app/src/main/java/com/sio/gestionclients/viewmodel/LocalClientViewModel.kt index dd44b18..4ad1de5 100644 --- a/app/src/main/java/com/sio/gestionclients/viewmodel/LocalClientViewModel.kt +++ b/app/src/main/java/com/sio/gestionclients/viewmodel/LocalClientViewModel.kt @@ -29,9 +29,9 @@ class LocalClientViewModel( } } - fun updateSelectedClient() { + fun updateSelectedClient(client: Client) { viewModelScope.launch { - _selectedClient.value?.let { client -> + _selectedClient.value?.let { c -> repository.updateClient(client) _selectedClient.value = null }