This commit is contained in:
Ксении 2025-02-20 16:50:59 +03:00
parent 6bac297408
commit ae9b93a13e
9 changed files with 81 additions and 24 deletions

View File

@ -21,7 +21,7 @@ data class UserDto(
@SerialName("lastEnter") @SerialName("lastEnter")
val lastEntry : String? = null, val lastEntry : String? = null,
@SerialName("access") @SerialName("access")
val access : String, val access : Boolean,
@SerialName("authorities") @SerialName("authorities")
val authorities : String val authorities : String
) { ) {

View File

@ -19,6 +19,7 @@ class UserRepoImpl (
login = login, login = login,
position = dto.position, position = dto.position,
lastEntry = dto.lastEntry ?: "", lastEntry = dto.lastEntry ?: "",
access = dto.access
) )
} }

View File

@ -4,11 +4,12 @@ import kotlinx.serialization.Serializable
@Serializable @Serializable
data class UserEntity( data class UserEntity(
val id : Long, val id : Long,
var login: String, val login: String,
var name: String, val name: String,
var avatarUrl: String?, val avatarUrl: String?,
val position : String, val position : String,
var lastEntry : String?, val lastEntry : String?,
val access : Boolean,
val authorities : String val authorities : String
) )

View File

@ -3,11 +3,14 @@ package ru.myitschool.work.ui.admin
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import kotlinx.coroutines.launch
import ru.myitschool.work.R import ru.myitschool.work.R
import ru.myitschool.work.databinding.FragmentAdminBinding import ru.myitschool.work.databinding.FragmentAdminBinding
import ru.myitschool.work.databinding.FragmentProfileBinding import ru.myitschool.work.databinding.FragmentProfileBinding
@ -33,17 +36,34 @@ class AdminFragment : Fragment(R.layout.fragment_admin) {
viewModel.search(login) viewModel.search(login)
} }
viewBinding.switchMaterial.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
viewModel.viewModelScope.launch {
viewModel.unblockUser()
viewBinding.switchMaterial.text = "Доступ запрещен"
}
} else {
viewModel.viewModelScope.launch {
viewModel.blockUser()
viewBinding.switchMaterial.text = "Доступ разрешен"
}
}
}
viewModel.state.collectWithLifecycle(this) { state -> viewModel.state.collectWithLifecycle(this) { state ->
viewBinding.error.visibility = if (state is AdminViewModel.State.Error) View.VISIBLE else View.GONE viewBinding.error.visibility = if (state is AdminViewModel.State.Error) View.VISIBLE else View.GONE
viewBinding.switchMaterial.visibility = if (state is AdminViewModel.State.Show) View.VISIBLE else View.GONE
when(state) { when(state) {
is AdminViewModel.State.Loading -> Unit is AdminViewModel.State.Loading -> Unit
is AdminViewModel.State.Show -> { is AdminViewModel.State.Show -> {
viewBinding.noData.visibility = View.GONE viewBinding.noData.visibility = View.GONE
viewBinding.name.text = "Должность: ${state.profileInfo.position}" viewBinding.name.text = "${state.profileInfo.name}"
viewBinding.position.text = "Должность: ${state.profileInfo.position}"
if (state.profileInfo.lastEntry == null) viewBinding.lastEntry.text = "Время последнего входа: Нет данных" if (state.profileInfo.lastEntry == null) viewBinding.lastEntry.text = "Время последнего входа: Нет данных"
else viewBinding.lastEntry.text = "Время последнего входа: ${state.profileInfo.lastEntry}" else viewBinding.lastEntry.text = "Время последнего входа: ${state.profileInfo.lastEntry}"
Picasso.get().load(state.profileInfo.avatarUrl).resize(100, 100).centerCrop().into(viewBinding.imageView) Picasso.get().load(state.profileInfo.avatarUrl).resize(100, 100).centerCrop().into(viewBinding.imageView)

View File

@ -42,8 +42,9 @@ class AdminViewModel(
getUserUseCase.invoke(login).fold( getUserUseCase.invoke(login).fold(
onSuccess = { data -> onSuccess = { data ->
Log.d("uraa", "успех успех ${data.toString()}") Log.d("uraa", "успех успех ${data.toString()}")
if (data.access == true) State.Show(data, entranceList, true)
else State.Show(data, entranceList, false)
State.Show(data, entranceList)
}, },
onFailure = { error -> onFailure = { error ->
Log.d("kaput", error.message.toString()) Log.d("kaput", error.message.toString())
@ -115,7 +116,8 @@ class AdminViewModel(
data object Loading: State data object Loading: State
data class Show( data class Show(
val profileInfo : UserEntity, val profileInfo : UserEntity,
val entrancesList : List<EntranceEntity> val entrancesList : List<EntranceEntity>,
val flag : Boolean
) : State ) : State
data class Error( data class Error(
val text: String val text: String

View File

@ -1,6 +1,7 @@
package ru.sicampus.bootcamp2025.ui.centerList package ru.sicampus.bootcamp2025.ui.centerList
import android.content.Context import android.content.Context
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
@ -34,7 +35,7 @@ class EntranceAdapter(
) : RecyclerView.ViewHolder(binding.root) { ) : RecyclerView.ViewHolder(binding.root) {
fun bind(item : EntranceEntity) { fun bind(item : EntranceEntity) {
binding.time.text = item.enteredAt binding.time.text = item.enteredAt
binding.time.text = item.enterType binding.type.text = item.enterType
binding.entry.text = item.name binding.entry.text = item.name
} }
} }

View File

@ -134,13 +134,6 @@
android:gravity="center" android:gravity="center"
tools:text="Ошибка помогите" /> tools:text="Ошибка помогите" />
<Button
android:id="@+id/refresh"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_gravity="center"
android:background="@drawable/ic_refresh"
android:gravity="center" />
</LinearLayout> </LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
@ -242,6 +235,7 @@
app:layout_constraintVertical_bias="1.0" /> app:layout_constraintVertical_bias="1.0" />
<TextView <TextView
android:id="@+id/textView4"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="20dp" android:layout_height="20dp"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
@ -314,11 +308,24 @@
app:layout_constraintTop_toBottomOf="@+id/view2" /> app:layout_constraintTop_toBottomOf="@+id/view2" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/switchMaterial"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/access_right"
android:textColor="@color/black"
android:textOff="@string/access_wrong"
android:textOn="@string/access_right"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/textView4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lastEntry"
app:layout_constraintVertical_bias="0.634"
app:thumbTint="@color/white"
app:trackTint="@color/orange" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">NTO Pass</string>
<string name="authorization">Authorization</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="password_hint">Password must contain at least 8 characters</string>
<string name="sign_in">Sign in</string>
<string name="error_valid">Validation Error</string>
<string name="error_invalid_credentials">Wrong login or password</string>
<string name="error_unknown">Unknown error</string>
<string name="entry_history">Entry history</string>
<string name="entry_time">Entry time</string>
<string name="entry">Entry</string>
<string name="type_of_entrance">Type of pass</string>
<string name="no_data">No data</string>
<string name="qr_success_result">Success</string>
<string name="qr_wrong_result">Something wrong</string>
<string name="qr_null_result">Operation was cancelled</string>
<string name="profile">Profile</string>
<string name="find">Find</string>
<string name="close_button">Close</string>
</resources>

View File

@ -17,8 +17,10 @@
<string name="qr_wrong_result">Что-то пошло не так</string> <string name="qr_wrong_result">Что-то пошло не так</string>
<string name="qr_null_result">Вход был отменён</string> <string name="qr_null_result">Вход был отменён</string>
<string name="profile">Профиль</string> <string name="profile">Профиль</string>
<string name="user_view">Просмотр пользователя</string> <string name="user_view" translatable="false">Просмотр пользователя</string>
<string name="found_user">Найти информацию о сотруднике</string> <string name="found_user" translatable="false">Найти информацию о сотруднике</string>
<string name="find">Найти</string> <string name="find">Найти</string>
<string name="access">Доступ\n</string> <string name="access" translatable="false">Доступ\n</string>
<string name="access_right" translatable="false">Доступ разрешен</string>
<string name="access_wrong" translatable="false">Доступ запрещен</string>
</resources> </resources>