doctor 1
parent
819a66dcad
commit
7cf154daa0
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="deploymentTargetDropDown">
|
||||||
|
<targetSelectedWithDropDown>
|
||||||
|
<Target>
|
||||||
|
<type value="QUICK_BOOT_TARGET" />
|
||||||
|
<deviceKey>
|
||||||
|
<Key>
|
||||||
|
<type value="VIRTUAL_DEVICE_PATH" />
|
||||||
|
<value value="C:\Users\maksi\.android\avd\Pixel_5_API_29_2.avd" />
|
||||||
|
</Key>
|
||||||
|
</deviceKey>
|
||||||
|
</Target>
|
||||||
|
</targetSelectedWithDropDown>
|
||||||
|
<timeTargetWasSelectedWithDropDown value="2023-11-30T18:27:18.890685800Z" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="SameParameterValue" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
|
@ -90,7 +90,13 @@ dependencies {
|
||||||
//Свайп
|
//Свайп
|
||||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
||||||
|
|
||||||
|
implementation "androidx.work:work-runtime-ktx:2.8.1"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// // Kotlin
|
||||||
|
// implementation "androidx.navigation:navigation-fragment-ktx:2.5.2"
|
||||||
|
// implementation "androidx.navigation:navigation-ui-ktx:2.5.2"
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,19 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
xmlns:tools="http://schemas.android.com/tools" >
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.CALL_PHONE"
|
||||||
|
tools:ignore="PermissionImpliesUnsupportedChromeOsHardware" />
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:usesCleartextTraffic="true"
|
|
||||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||||
android:fullBackupContent="@xml/backup_rules"
|
android:fullBackupContent="@xml/backup_rules"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
@ -16,14 +22,34 @@
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/Theme.Doctor"
|
android:theme="@style/Theme.Doctor"
|
||||||
tools:targetApi="31">
|
android:usesCleartextTraffic="true"
|
||||||
|
tools:targetApi="31" >
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".CodeError.Code500Activity"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name=".CodeError.Code429Activity"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name=".Enternet.EnternetActivity"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name=".Setting.Courses.CoursesActivity"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name=".Appeals.AppealsCreateMessageActivity"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name=".Patients.PatientActivity"
|
||||||
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".Auth.AuthActivity"
|
android:name=".Auth.AuthActivity"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name="MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:windowSoftInputMode="adjustPan|stateAlwaysHidden">
|
android:windowSoftInputMode="adjustPan|stateAlwaysHidden" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.example.doctor.Adapter
|
||||||
|
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
|
|
||||||
|
class VpAdapterPatientList(fr_act:FragmentActivity, private val list:List<Fragment>):FragmentStateAdapter(fr_act) {//private val list:List<Fragment> - список с фрагментами сюда передастся, тоесть с двумя фрагментами
|
||||||
|
//Возврощаем для createFragment количество элементов(фрагментов) в листе(List)
|
||||||
|
override fun getItemCount(): Int {
|
||||||
|
return list.size//возврощаем количество фрагметов
|
||||||
|
}
|
||||||
|
|
||||||
|
//Позиция фрагмента или 1 или 2, то есть 0 или 1. И по позиции будут выводится фрагмент.
|
||||||
|
override fun createFragment(position: Int): Fragment {
|
||||||
|
return list[position]//Возврощаем фрагмент из листа по позиции
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.example.doctor
|
||||||
|
|
||||||
|
data class AddSportPatientModel(
|
||||||
|
val id: Int,
|
||||||
|
val status: String,
|
||||||
|
val one: Int,
|
||||||
|
val two: Int,
|
||||||
|
val three: Int,
|
||||||
|
val four: Int,
|
||||||
|
val five: Int,
|
||||||
|
val six: Int,
|
||||||
|
val seven: Int,
|
||||||
|
val eight: Int,
|
||||||
|
val nine: Int,
|
||||||
|
val ten: Int,
|
||||||
|
val eleven: Int,
|
||||||
|
val twelve: Int,
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.example.doctor.Appeals
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import android.os.Bundle
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.databinding.ActivityAppealsBinding
|
||||||
|
|
||||||
|
class AppealsCreateMessageActivity : AppCompatActivity() {
|
||||||
|
private lateinit var binding: ActivityAppealsBinding
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityAppealsBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
supportFragmentManager.beginTransaction().replace(R.id.CLAppealsActivity, CreateMessageFragment.newInstance()).commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,21 +1,58 @@
|
||||||
package com.example.doctor.Appeals
|
package com.example.doctor.Appeals
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
import com.example.doctor.Adapter.VpAdapter
|
import com.example.doctor.Adapter.VpAdapter
|
||||||
import com.example.doctor.R
|
import com.example.doctor.R
|
||||||
import com.example.doctor.Appeals.TabLayout.OldAppealsFragment
|
import com.example.doctor.Appeals.TabLayout.OldAppealsFragment
|
||||||
import com.example.doctor.Appeals.TabLayout.NewAppealsFragment
|
import com.example.doctor.Appeals.TabLayout.NewAppealsFragment
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
import com.example.doctor.databinding.FragmentAppealsBinding
|
import com.example.doctor.databinding.FragmentAppealsBinding
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.Timer
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
|
||||||
class AppealsFragment : Fragment() {
|
class AppealsFragment : Fragment() {
|
||||||
private lateinit var binding:FragmentAppealsBinding
|
private lateinit var binding: FragmentAppealsBinding
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private lateinit var timer: Timer
|
||||||
|
|
||||||
|
|
||||||
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
private val tList = listOf(
|
private val tList = listOf(
|
||||||
"новые",
|
"новые",
|
||||||
|
@ -40,6 +77,138 @@ class AppealsFragment : Fragment() {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
init()
|
init()
|
||||||
|
binding.btnAddMessage.setOnClickListener {
|
||||||
|
val intetn = Intent(requireContext(), AppealsCreateMessageActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
// activity?.supportFragmentManager?.beginTransaction()
|
||||||
|
// ?.replace(R.id.CLAppeals, CreateMessageFragment.newInstance())?.commit()
|
||||||
|
// binding.ConstrainLayoutProductEdit.visibility = View.GONE
|
||||||
|
// binding.CLAppeals.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
|
// dataModel.patientAppeal.observe(viewLifecycleOwner, Observer {
|
||||||
|
// requireActivity().runOnUiThread {
|
||||||
|
// val viewPatient = prefDoctorConclusion.conclusionViewPatient(requireContext())
|
||||||
|
// val idPatient = prefDoctorConclusion.conclusionIdPatient(requireContext())
|
||||||
|
// if (viewPatient == 1 && idPatient != 0) {
|
||||||
|
//
|
||||||
|
// prefDoctorClear.clearIdPatient(requireContext())
|
||||||
|
// prefDoctorClear.clearViewPatient(requireContext())
|
||||||
|
// GetPatientID(it)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
|
||||||
|
// dataModel.patientAppeal.observe(viewLifecycleOwner, Observer {
|
||||||
|
// binding.btnExit.visibility = View.GONE
|
||||||
|
// binding.CLMainPatientAppeals.visibility = View.GONE
|
||||||
|
//
|
||||||
|
// })
|
||||||
|
|
||||||
|
// fixedRateTimer("timer", false, 0, 10000) {
|
||||||
|
// activity?.runOnUiThread {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun getOldAppeals() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.GetAppealsDoctorOld("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listAppeals.body()
|
||||||
|
val Nice = listAppeals.isSuccessful
|
||||||
|
val Code = listAppeals.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
if (List?.appeals_old != null) {
|
||||||
|
model.appealsOldList.value = List.appeals_old
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получение необработанных сообщений
|
||||||
|
private fun getNewAppeals() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.GetAppealsDoctorNew("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listAppeals.body()
|
||||||
|
val Nice = listAppeals.isSuccessful
|
||||||
|
val Code = listAppeals.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
if(List.appeals_new != null){
|
||||||
|
model.appealsNewList.value = List.appeals_new
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Функция подключения переключения
|
//Функция подключения переключения
|
||||||
|
@ -54,12 +223,121 @@ class AppealsFragment : Fragment() {
|
||||||
}.attach()// attach() - чтобы все переключалось, а не вывадило постоянно один экран
|
}.attach()// attach() - чтобы все переключалось, а не вывадило постоянно один экран
|
||||||
|
|
||||||
//Изменения цвета в зависомости на каком из tabLayout вы находитесь
|
//Изменения цвета в зависомости на каком из tabLayout вы находитесь
|
||||||
binding.tabLayoutProduct.setTabTextColors(getResources().getColor(R.color.black),
|
binding.tabLayoutProduct.setTabTextColors(
|
||||||
getResources().getColor(R.color.white));
|
getResources().getColor(R.color.black),
|
||||||
|
getResources().getColor(R.color.white)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// //Получение необработанных сообщений
|
||||||
|
// private fun addCheckAppeals(id: Int, id_patient: Int) {
|
||||||
|
// if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
// initRetrofit()
|
||||||
|
// val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
// CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
// val listAppeals = doctorApi.UpdateMessageDoctor("Bearer $Tokens", id, id_patient)
|
||||||
|
// requireActivity().runOnUiThread {
|
||||||
|
//
|
||||||
|
// //Фиксируем полученные данные
|
||||||
|
// val AppealsMes = listAppeals.body()
|
||||||
|
//
|
||||||
|
// //Если нету ошибок
|
||||||
|
// if (AppealsMes != null) {
|
||||||
|
// Toast(requireContext()).showCustomInfoToast(
|
||||||
|
// AppealsMes.message,
|
||||||
|
// requireActivity()
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
// activity?.finish()
|
||||||
|
// startActivity(intetn)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// private fun GetPatientID(idPatient: Int) {
|
||||||
|
// if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
// initRetrofit()
|
||||||
|
// val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
// CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
// val listPatient = doctorApi.GetPatientID("Bearer $Tokens", idPatient)
|
||||||
|
// requireActivity().runOnUiThread {
|
||||||
|
//
|
||||||
|
// //Фиксируем полученные данные
|
||||||
|
// val patientId = listPatient.body()
|
||||||
|
//
|
||||||
|
// //Если нету ошибок
|
||||||
|
// if (patientId != null) {
|
||||||
|
// //Вывод фрагмента на активити при первоначальной загрузке
|
||||||
|
//// activity?.supportFragmentManager?.beginTransaction()
|
||||||
|
//// ?.replace(R.id.CLMainPatientAppeals, PatientFragment.newInstance())
|
||||||
|
//// ?.commit()
|
||||||
|
// model.patientCurrent.value = patientId
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
// activity?.finish()
|
||||||
|
// startActivity(intetn)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
fun newInstance() = AppealsFragment()
|
fun newInstance() = AppealsFragment()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
checkForUpdates(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
timer.cancel()
|
||||||
|
timer.purge()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkForUpdates(daemonIsTrue: Boolean) {
|
||||||
|
|
||||||
|
timer = fixedRateTimer("default", daemonIsTrue, 0, 10000) {
|
||||||
|
activity?.runOnUiThread {
|
||||||
|
getOldAppeals()
|
||||||
|
getNewAppeals()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,26 +1,26 @@
|
||||||
package com.example.doctor.Appeals
|
package com.example.doctor.Appeals
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.os.Handler
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsNewModel
|
||||||
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsOldModel
|
||||||
import com.example.doctor.R
|
import com.example.doctor.R
|
||||||
import com.example.doctor.databinding.ItemAppealsBinding
|
|
||||||
import com.example.doctor.databinding.ItemAppealsNewBinding
|
import com.example.doctor.databinding.ItemAppealsNewBinding
|
||||||
|
|
||||||
|
|
||||||
class AppealsNewAdapter(val listener_zakaz: Listener) :
|
class AppealsNewAdapter(val listener_check_apeals: Listener, val listener_patient_apeals: Listener2) :
|
||||||
ListAdapter<AppealsNewModel, AppealsNewAdapter.Holder>(
|
ListAdapter<AppealsNewModel, AppealsNewAdapter.Holder>(
|
||||||
Comparator()
|
Comparator()
|
||||||
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
class Holder(view: View, val listener_zakaz: Listener) :
|
class Holder(view: View, val listener_check_apeals: Listener, val listener_patient_apeals: Listener2) :
|
||||||
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
//Для передачи данных
|
//Для передачи данных
|
||||||
|
|
||||||
|
@ -32,23 +32,26 @@ class AppealsNewAdapter(val listener_zakaz: Listener) :
|
||||||
|
|
||||||
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
init {
|
init {
|
||||||
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
binding.btnAdd.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
itemView.setEnabled(false)
|
//itemView.setEnabled(false)
|
||||||
itemTemp?.let { it1 -> listener_zakaz.onClickAppeals(it1) }
|
itemTemp?.let { it1 -> listener_check_apeals.onClickAppeals(it1) }
|
||||||
|
}
|
||||||
|
binding.btnPatient.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
//itemView.setEnabled(false)
|
||||||
|
itemTemp?.let { it2 -> listener_patient_apeals.onClickAppealsPatient(it2) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SuspiciousIndentation")
|
@SuppressLint("SuspiciousIndentation")
|
||||||
fun bind(item: AppealsNewModel) = with(binding) {//Productitem - перпедаем данные
|
fun bind(item: AppealsNewModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
itemTemp = item
|
itemTemp = item
|
||||||
txtNumber.text = item.id.toString()+"."
|
txtNumber.text = item.number.toString()+"."
|
||||||
txtAppeals.text = item.text
|
txtAppeals.text = item.text
|
||||||
txtLoginPatient.text = item.login
|
txtLoginPatient.text = item.login
|
||||||
|
|
||||||
|
|
||||||
if (item.expand) {
|
if (item.expand) {
|
||||||
txtAppeals.maxLines = 100
|
txtAppeals.maxLines = 30
|
||||||
} else {
|
} else {
|
||||||
txtAppeals.maxLines = 1
|
txtAppeals.maxLines = 1
|
||||||
}
|
}
|
||||||
|
@ -64,9 +67,7 @@ class AppealsNewAdapter(val listener_zakaz: Listener) :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
btnAdd.setOnClickListener{
|
|
||||||
CardViewNew.visibility = View.GONE
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ class AppealsNewAdapter(val listener_zakaz: Listener) :
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
val view = LayoutInflater.from(parent.context)
|
val view = LayoutInflater.from(parent.context)
|
||||||
.inflate(R.layout.item_appeals_new, parent, false)//Создаем(надуваем) list_item
|
.inflate(R.layout.item_appeals_new, parent, false)//Создаем(надуваем) list_item
|
||||||
return Holder(view, listener_zakaz)//Через Holder возврощаем view
|
return Holder(view, listener_check_apeals,listener_patient_apeals)//Через Holder возврощаем view
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: Holder, position: Int) {
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
@ -99,12 +100,17 @@ class AppealsNewAdapter(val listener_zakaz: Listener) :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Интерфейс нажатия на кнопку удалить товар из корзины
|
|
||||||
interface Listener {
|
interface Listener {
|
||||||
fun onClickAppeals(item: AppealsNewModel)
|
fun onClickAppeals(item: AppealsNewModel)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interface Listener2 {
|
||||||
|
fun onClickAppealsPatient(item: AppealsNewModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
package com.example.doctor.Appeals
|
|
||||||
|
|
||||||
data class AppealsNewModel(
|
|
||||||
val id: Int,
|
|
||||||
val login: String,
|
|
||||||
val text: String,
|
|
||||||
val id_user:Int,
|
|
||||||
var expand : Boolean = false
|
|
||||||
)
|
|
||||||
|
|
|
@ -1,25 +1,26 @@
|
||||||
package com.example.doctor.Appeals
|
package com.example.doctor.Appeals
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.opengl.Visibility
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsOldModel
|
||||||
|
import com.example.doctor.Appeals.TabLayout.OldAppealsFragment
|
||||||
import com.example.doctor.R
|
import com.example.doctor.R
|
||||||
import com.example.doctor.databinding.ItemAppealsOldBinding
|
import com.example.doctor.databinding.ItemAppealsOldBinding
|
||||||
|
|
||||||
|
|
||||||
class AppealsOldAdapter(val listener_zakaz: Listener) :
|
class AppealsOldAdapter(val listener_appeal: Listener, val listener_patient_apeals: OldAppealsFragment) :
|
||||||
ListAdapter<AppealsOldModel, AppealsOldAdapter.Holder>(
|
ListAdapter<AppealsOldModel, AppealsOldAdapter.Holder>(
|
||||||
Comparator()
|
Comparator()
|
||||||
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
class Holder(view: View, val listener_zakaz: Listener) :
|
class Holder(view: View, val listener_appeal: Listener, val listener_patient_apeals: OldAppealsFragment) :
|
||||||
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
//Для передачи данных
|
//Для передачи данных
|
||||||
|
|
||||||
|
@ -32,15 +33,18 @@ class AppealsOldAdapter(val listener_zakaz: Listener) :
|
||||||
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
init {
|
init {
|
||||||
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
itemView.setEnabled(false)
|
itemTemp?.let { it1 -> listener_appeal.onClickAppeals(it1) }
|
||||||
itemTemp?.let { it1 -> listener_zakaz.onClickAppeals(it1) }
|
}
|
||||||
|
binding.btnPatient.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
//itemView.setEnabled(false)
|
||||||
|
itemTemp?.let { it2 -> listener_patient_apeals.onClickAppealsPatient(it2) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SuspiciousIndentation")
|
@SuppressLint("SuspiciousIndentation")
|
||||||
fun bind(item: AppealsOldModel) = with(binding) {//Productitem - перпедаем данные
|
fun bind(item: AppealsOldModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
itemTemp = item
|
itemTemp = item
|
||||||
txtNumber.text = item.id.toString()+"."
|
txtNumber.text = item.number.toString()+"."
|
||||||
txtAppeals.text = item.text
|
txtAppeals.text = item.text
|
||||||
txtLoginPatient.text = item.login
|
txtLoginPatient.text = item.login
|
||||||
|
|
||||||
|
@ -71,7 +75,7 @@ class AppealsOldAdapter(val listener_zakaz: Listener) :
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
val view = LayoutInflater.from(parent.context)
|
val view = LayoutInflater.from(parent.context)
|
||||||
.inflate(R.layout.item_appeals_old, parent, false)//Создаем(надуваем) list_item
|
.inflate(R.layout.item_appeals_old, parent, false)//Создаем(надуваем) list_item
|
||||||
return Holder(view, listener_zakaz)//Через Holder возврощаем view
|
return Holder(view, listener_appeal,listener_patient_apeals)//Через Holder возврощаем view
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: Holder, position: Int) {
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
@ -100,6 +104,9 @@ class AppealsOldAdapter(val listener_zakaz: Listener) :
|
||||||
interface Listener {
|
interface Listener {
|
||||||
fun onClickAppeals(item: AppealsOldModel)
|
fun onClickAppeals(item: AppealsOldModel)
|
||||||
}
|
}
|
||||||
|
interface Listener2 {
|
||||||
|
fun onClickAppealsPatient(item: AppealsOldModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
package com.example.doctor.Appeals
|
|
||||||
|
|
||||||
data class AppealsOldModel(
|
|
||||||
val id: Int,
|
|
||||||
val login: String,
|
|
||||||
val text: String,
|
|
||||||
val id_user:Int,
|
|
||||||
var expand : Boolean = false
|
|
||||||
)
|
|
||||||
|
|
|
@ -0,0 +1,275 @@
|
||||||
|
package com.example.doctor.Appeals
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.transition.TransitionInflater
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ArrayAdapter
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Model.PatientAllModel
|
||||||
|
import com.example.doctor.Patients.Reports.PatientFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.databinding.FragmentCreateMessageBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.Timer
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
|
||||||
|
class CreateMessageFragment : Fragment() {
|
||||||
|
private lateinit var binding: FragmentCreateMessageBinding
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
|
private val modelDoctor: DoctorViewModel by activityViewModels()
|
||||||
|
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private lateinit var timer: Timer
|
||||||
|
|
||||||
|
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
|
||||||
|
var patientList:List<PatientAllModel>?=null
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentCreateMessageBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
val inflater = TransitionInflater.from(requireContext())
|
||||||
|
enterTransition = inflater.inflateTransition(R.transition.slide_right)
|
||||||
|
exitTransition = inflater.inflateTransition(R.transition.slide_right)
|
||||||
|
|
||||||
|
GetPatientList()
|
||||||
|
|
||||||
|
binding.btnAddMessagePatient.setOnClickListener{
|
||||||
|
val login = binding.searchPatient.text.toString()
|
||||||
|
val text = binding.edTextMessagePatient.text.toString()
|
||||||
|
if(login!="" && text!=""){
|
||||||
|
AddMessageDoctor()
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Toast(requireContext()).showCustomInfoToast("Не все данные заполнены", requireActivity())
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// binding.btnExit.setOnClickListener{
|
||||||
|
// dataModel.patientAppeal.value = 1
|
||||||
|
// }
|
||||||
|
|
||||||
|
binding.btnExit.setOnClickListener{
|
||||||
|
activity?.finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
modelDoctor.patientListSearch.observe(viewLifecycleOwner){
|
||||||
|
if(patientList!=it){
|
||||||
|
patientList =it
|
||||||
|
addPatientLogin(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fixedRateTimer("timer", false, 0, 10000) {
|
||||||
|
// activity?.runOnUiThread {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addPatientLogin(patient: List<PatientAllModel>) {
|
||||||
|
val listPatient = arrayListOf("")
|
||||||
|
for(i in 0 .. patient.count()-1){
|
||||||
|
listPatient.add(patient[i].login.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, listPatient)
|
||||||
|
|
||||||
|
binding.searchPatient.threshold = 1
|
||||||
|
binding.searchPatient.setAdapter(adapter)
|
||||||
|
|
||||||
|
binding.searchPatient.setOnItemClickListener { parent, arg1, pos, id ->
|
||||||
|
//val list = ArrayList<PatientModel>()
|
||||||
|
val serpat = binding.searchPatient.text.toString()
|
||||||
|
binding.searchPatient.setText(serpat)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun GetPatientList() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetPatientAll("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.patientListSearch.value = List.patient
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Отправка сообщения
|
||||||
|
fun AddMessageDoctor() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.AddMessageDoctor("Bearer $Tokens",binding.searchPatient.text.toString(),binding.edTextMessagePatient.text.toString())
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
binding.edTextMessagePatient.setText("")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun newInstance() = CreateMessageFragment()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
checkForUpdates(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
timer.cancel()
|
||||||
|
timer.purge()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkForUpdates(daemonIsTrue: Boolean) {
|
||||||
|
|
||||||
|
timer = fixedRateTimer("default", daemonIsTrue, 0, 10000) {
|
||||||
|
activity?.runOnUiThread {
|
||||||
|
GetPatientList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.example.doctor.Appeals.TabLayout.Model
|
||||||
|
|
||||||
|
data class AppealsNewListModel(
|
||||||
|
val appeals_new: List<AppealsNewModel>
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.example.doctor.Appeals.TabLayout.Model
|
||||||
|
|
||||||
|
data class AppealsNewModel(
|
||||||
|
val id: Int,
|
||||||
|
val number: Int,
|
||||||
|
val text: String,
|
||||||
|
val id_patient: Int,
|
||||||
|
val id_doctor: Int,
|
||||||
|
val check: Int,
|
||||||
|
val login: String,
|
||||||
|
val created_at: String,
|
||||||
|
val updated_at: String,
|
||||||
|
var expand : Boolean = false,
|
||||||
|
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.example.doctor.Appeals.TabLayout.Model
|
||||||
|
|
||||||
|
data class AppealsOldListModel(
|
||||||
|
val appeals_old: List<AppealsOldModel>
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.example.doctor.Appeals.TabLayout.Model
|
||||||
|
|
||||||
|
data class AppealsOldModel(
|
||||||
|
val id: Int,
|
||||||
|
val number: Int,
|
||||||
|
val text: String,
|
||||||
|
val id_patient: Int,
|
||||||
|
val id_doctor: Int,
|
||||||
|
val check: Int,
|
||||||
|
val login: String,
|
||||||
|
val created_at: String,
|
||||||
|
val updated_at: String,
|
||||||
|
var expand : Boolean = false,
|
||||||
|
|
||||||
|
)
|
||||||
|
|
|
@ -1,25 +1,56 @@
|
||||||
package com.example.doctor.Appeals.TabLayout
|
package com.example.doctor.Appeals.TabLayout
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import com.example.doctor.Appeals.AppealsNewAdapter
|
import com.example.doctor.Appeals.AppealsNewAdapter
|
||||||
import com.example.doctor.Appeals.AppealsNewModel
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsNewModel
|
||||||
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsOldModel
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
import com.example.doctor.DoctorViewModel
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Model.PatientIdModel
|
||||||
|
import com.example.doctor.Patients.PatientActivity
|
||||||
|
import com.example.doctor.Patients.PatientsListFragment
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
import com.example.doctor.databinding.FragmentNewAppealsBinding
|
import com.example.doctor.databinding.FragmentNewAppealsBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
|
||||||
class NewAppealsFragment : Fragment(), AppealsNewAdapter.Listener {
|
class NewAppealsFragment : Fragment(), AppealsNewAdapter.Listener,AppealsNewAdapter.Listener2 {
|
||||||
private lateinit var binding:FragmentNewAppealsBinding
|
private lateinit var binding:FragmentNewAppealsBinding
|
||||||
private val model: DoctorViewModel by activityViewModels()
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
lateinit var adapter: AppealsNewAdapter
|
lateinit var adapter: AppealsNewAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
//Список новых соощений
|
||||||
|
var newAppeals: List<AppealsNewModel>? = null
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
@ -30,29 +61,200 @@ class NewAppealsFragment : Fragment(), AppealsNewAdapter.Listener {
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
//binding.CLNull.visibility = View.VISIBLE
|
||||||
initRcViewAppeals()
|
initRcViewAppeals()
|
||||||
patientListCurrent()
|
patientListCurrent()
|
||||||
model.appealsNewList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
model.appealsNewList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
||||||
|
if(newAppeals != it){
|
||||||
|
newAppeals = it
|
||||||
adapter.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
adapter.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
||||||
|
if(newAppeals !=null){
|
||||||
|
binding.CLNull.visibility = View.GONE
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
addNewAppeals()
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addNewAppeals() {
|
getNewAppeals()
|
||||||
val list = ArrayList<AppealsNewModel>()
|
|
||||||
|
|
||||||
for (i in 1..5){
|
|
||||||
val itemPatient = AppealsNewModel(
|
|
||||||
i,
|
|
||||||
"Patient_$i",
|
|
||||||
"asdasds adnas kjhdkl ashdlkashdkjalks hdjlkasjdlk ajldkhas j djask hsfldksjfksdf",
|
|
||||||
i,
|
|
||||||
)
|
|
||||||
list.add(itemPatient)//Передали заполненый список
|
|
||||||
}
|
}
|
||||||
model.appealsNewList.value = list
|
|
||||||
|
//Получение необработанных сообщений
|
||||||
|
private fun getNewAppeals() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.GetAppealsDoctorNew("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listAppeals.body()
|
||||||
|
val Nice = listAppeals.isSuccessful
|
||||||
|
val Code = listAppeals.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if(List?.appeals_new != null){
|
||||||
|
|
||||||
|
// binding.CLNull.visibility = View.GONE
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
model.appealsNewList.value = List.appeals_new
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// binding.CLNull.visibility = View.VISIBLE
|
||||||
|
binding.txtNull.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getOldAppeals() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.GetAppealsDoctorOld("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listAppeals.body()
|
||||||
|
val Nice = listAppeals.isSuccessful
|
||||||
|
val Code = listAppeals.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if(List?.appeals_old != null){
|
||||||
|
// binding.txtNull.visibility = View.GONE
|
||||||
|
model.appealsOldList.value = List.appeals_old
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получение необработанных сообщений
|
||||||
|
private fun addCheckAppeals(id:Int,id_patient:Int) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.UpdateMessageDoctor("Bearer $Tokens",id,id_patient)
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listAppeals.body()
|
||||||
|
val Nice = listAppeals.isSuccessful
|
||||||
|
val Code = listAppeals.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getNewAppeals()
|
||||||
|
getOldAppeals()
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Вывод прогресса на один день
|
//Вывод прогресса на один день
|
||||||
|
@ -66,7 +268,7 @@ class NewAppealsFragment : Fragment(), AppealsNewAdapter.Listener {
|
||||||
//Инициализация списка
|
//Инициализация списка
|
||||||
private fun initRcViewAppeals() = with(binding) {
|
private fun initRcViewAppeals() = with(binding) {
|
||||||
rcView.layoutManager = GridLayoutManager(requireContext(),1)//По вертикали будет выводить по умолчанию
|
rcView.layoutManager = GridLayoutManager(requireContext(),1)//По вертикали будет выводить по умолчанию
|
||||||
adapter = AppealsNewAdapter(this@NewAppealsFragment)
|
adapter = AppealsNewAdapter(this@NewAppealsFragment,this@NewAppealsFragment)
|
||||||
rcView.adapter = adapter
|
rcView.adapter = adapter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,6 +278,15 @@ class NewAppealsFragment : Fragment(), AppealsNewAdapter.Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClickAppeals(item: AppealsNewModel) {
|
override fun onClickAppeals(item: AppealsNewModel) {
|
||||||
|
addCheckAppeals(item.id,item.id_patient)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClickAppealsPatient(item: AppealsNewModel) {
|
||||||
|
prefDoctorSave.saveIdPatient(requireContext(),item.id_patient)
|
||||||
|
prefDoctorSave.saveViewPatient(requireContext(),1)
|
||||||
|
model.patientId.value = PatientIdModel(item.id)
|
||||||
|
//dataModel.patientAppeal.value = item.id_patient
|
||||||
|
val intetn = Intent(requireContext(), PatientActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package com.example.doctor.Appeals.TabLayout
|
package com.example.doctor.Appeals.TabLayout
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -8,15 +9,48 @@ import android.view.ViewGroup
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import com.example.doctor.Appeals.AppealsOldAdapter
|
import com.example.doctor.Appeals.AppealsOldAdapter
|
||||||
import com.example.doctor.Appeals.AppealsOldModel
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsNewModel
|
||||||
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsOldModel
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
import com.example.doctor.DoctorViewModel
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Model.PatientIdModel
|
||||||
|
import com.example.doctor.Patients.PatientActivity
|
||||||
|
import com.example.doctor.Patients.PatientsListFragment
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
import com.example.doctor.databinding.FragmentOldAppealsBinding
|
import com.example.doctor.databinding.FragmentOldAppealsBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
|
||||||
class OldAppealsFragment : Fragment(), AppealsOldAdapter.Listener {
|
class OldAppealsFragment : Fragment(), AppealsOldAdapter.Listener,AppealsOldAdapter.Listener2 {
|
||||||
private lateinit var binding:FragmentOldAppealsBinding
|
private lateinit var binding:FragmentOldAppealsBinding
|
||||||
private val model: DoctorViewModel by activityViewModels()
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
|
|
||||||
lateinit var adapter: AppealsOldAdapter
|
lateinit var adapter: AppealsOldAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
//Список прочитанных соощений
|
||||||
|
var oldAppeals: List<AppealsOldModel>? = null
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
@ -28,29 +62,105 @@ class OldAppealsFragment : Fragment(), AppealsOldAdapter.Listener {
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
//binding.CLNull.visibility = View.VISIBLE
|
||||||
|
|
||||||
initRcViewAppeals()
|
initRcViewAppeals()
|
||||||
appealsAllCurrent()
|
appealsAllCurrent()
|
||||||
model.appealsAllList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
model.appealsOldList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
||||||
|
if(oldAppeals != it){
|
||||||
|
|
||||||
|
oldAppeals = it
|
||||||
adapter.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
adapter.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
||||||
|
if(oldAppeals !=null){
|
||||||
|
binding.CLNull.visibility = View.GONE
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addAllAppeals()
|
getOldAppeals()
|
||||||
|
|
||||||
|
// fixedRateTimer("timer", false, 0, 10000) {
|
||||||
|
// activity?.runOnUiThread {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addAllAppeals() {
|
private fun getOldAppeals() {
|
||||||
val list = ArrayList<AppealsOldModel>()
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.GetAppealsDoctorOld("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
for (i in 1..7){
|
//Фиксируем полученные данные
|
||||||
val itemPatient = AppealsOldModel(
|
val List = listAppeals.body()
|
||||||
i,
|
val Nice = listAppeals.isSuccessful
|
||||||
"Patient_$i",
|
val Code = listAppeals.code()
|
||||||
" 81 23891 23812 37817411 sdasds adnas kjhdkl ashdlk ashdkjalks ashdlkashdkjalks hdjlkasjdlk ajldkhas hdjlkasjdlk ajldkhasas hdlkashdkjalks hdjlkasjdlk ajldkhasashdlkashdkjalks hdjlkasjdlk ajldkhas j djask hsfldksjfksdf",
|
if(Code==429){
|
||||||
i,
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
)
|
startActivity(intetn)
|
||||||
list.add(itemPatient)//Передали заполненый список
|
|
||||||
}
|
}
|
||||||
model.appealsAllList.value = list
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (List != null) {
|
||||||
|
if(List.appeals_old != null){
|
||||||
|
//binding.CLNull.visibility = View.GONE
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
model.appealsOldList.value = List.appeals_old
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//binding.CLNull.visibility = View.VISIBLE
|
||||||
|
binding.txtNull.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
// binding.CLNull.visibility = View.VISIBLE
|
||||||
|
binding.txtNull.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Вывод прогресса на один день
|
//Вывод прогресса на один день
|
||||||
|
@ -64,7 +174,7 @@ class OldAppealsFragment : Fragment(), AppealsOldAdapter.Listener {
|
||||||
//Инициализация списка
|
//Инициализация списка
|
||||||
private fun initRcViewAppeals() = with(binding) {
|
private fun initRcViewAppeals() = with(binding) {
|
||||||
rcView.layoutManager = GridLayoutManager(requireContext(),1)//По вертикали будет выводить по умолчанию
|
rcView.layoutManager = GridLayoutManager(requireContext(),1)//По вертикали будет выводить по умолчанию
|
||||||
adapter = AppealsOldAdapter(this@OldAppealsFragment)
|
adapter = AppealsOldAdapter(this@OldAppealsFragment,this@OldAppealsFragment)
|
||||||
rcView.adapter = adapter
|
rcView.adapter = adapter
|
||||||
}
|
}
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -75,4 +185,13 @@ class OldAppealsFragment : Fragment(), AppealsOldAdapter.Listener {
|
||||||
override fun onClickAppeals(item: AppealsOldModel) {
|
override fun onClickAppeals(item: AppealsOldModel) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onClickAppealsPatient(item: AppealsOldModel) {
|
||||||
|
// prefDoctorSave.saveIdPatient(requireContext(),item.id_patient)
|
||||||
|
// prefDoctorSave.saveViewPatient(requireContext(),1)
|
||||||
|
model.patientId.value = PatientIdModel(item.id)
|
||||||
|
// dataModel.patientAppeal.value = item.id_patient
|
||||||
|
val intetn = Intent(requireContext(), PatientActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -12,8 +12,13 @@ import android.widget.Toast
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import com.example.doctor.Auth.Model.AuthModel
|
import com.example.doctor.Auth.Model.AuthModel
|
||||||
import com.example.doctor.Auth.Model.UserModel
|
import com.example.doctor.Auth.Model.UserModel
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
import com.example.doctor.DoctorViewModel
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
import com.example.doctor.MainActivity
|
import com.example.doctor.MainActivity
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
import com.example.doctor.Pref.ConclusionPref
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
import com.example.doctor.R
|
import com.example.doctor.R
|
||||||
import com.example.doctor.Retrofit.DoctorApi
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
@ -43,6 +48,10 @@ class AuthFragment : Fragment() {
|
||||||
private var Token = ""
|
private var Token = ""
|
||||||
val prefDoctorSave = SavePref()
|
val prefDoctorSave = SavePref()
|
||||||
val prefDoctorConclusion = ConclusionPref()
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
@ -56,6 +65,7 @@ class AuthFragment : Fragment() {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
|
|
||||||
|
prefDoctorClear.clearToken(requireContext())
|
||||||
Token = prefDoctorConclusion.conclusionToken(requireContext())
|
Token = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
|
||||||
binding.apply {
|
binding.apply {
|
||||||
|
@ -81,54 +91,32 @@ class AuthFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// private fun Auth(authModel: AuthModel) {
|
|
||||||
// CoroutineScope(Dispatchers.IO).launch {
|
|
||||||
// val response = doctorApi.Auth(authModel)
|
|
||||||
// val errorMessage = response.errorBody()?.string()
|
|
||||||
// ?.let { JSONObject(it).getString("message") }//JSONObject(response.errorBody()?.string())
|
|
||||||
// requireActivity().runOnUiThread {
|
|
||||||
// binding.textError.text = errorMessage
|
|
||||||
// val user = response.body()
|
|
||||||
//
|
|
||||||
// //Если есть такой пользователь
|
|
||||||
// if (user != null) {
|
|
||||||
// DoctorviewModel.token.value = user.token
|
|
||||||
// prefDoctor.saveToken(user.token)
|
|
||||||
// val intetn = Intent(requireContext(), MainActivity::class.java)
|
|
||||||
// startActivity(intetn)
|
|
||||||
// activity?.finish()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// private fun Auth(authModel: AuthModel) {
|
|
||||||
// //Если есть такой пользователь
|
|
||||||
// if (authModel.login == "asd" && authModel.password == "asd" ) {
|
|
||||||
// DoctorviewModel.token.value = "sdadssdasdaasdad434fk3ioj9"
|
|
||||||
// prefDoctorSave.saveToken(requireContext(),"sdadssdasdaasdad434fk3ioj9")
|
|
||||||
// val intetn = Intent(requireContext(), MainActivity::class.java)
|
|
||||||
// startActivity(intetn)
|
|
||||||
// activity?.finish()
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
private fun Auth(authModel: AuthModel) {
|
private fun Auth(authModel: AuthModel) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val response = doctorApi.LoginDoctor(authModel)
|
val response = doctorApi.LoginDoctor(authModel)
|
||||||
val errorMessage = response.errorBody()?.string()
|
val errorMessage = response.errorBody()?.string()
|
||||||
?.let { JSONObject(it).getString("error") }//JSONObject(response.errorBody()?.string())
|
?.let { JSONObject(it).getString("error") }//JSONObject(response.errorBody()?.string())
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
Log.i("errorMessage",errorMessage.toString())
|
|
||||||
val user = response.body()
|
|
||||||
|
|
||||||
//Если есть такой пользователь
|
//Фиксируем полученные данные
|
||||||
if (user != null) {
|
val List = response.body()
|
||||||
DoctorviewModel.token.value = user.token
|
val Nice = response.isSuccessful
|
||||||
prefDoctorSave.saveToken(requireContext(), user.token)
|
val Code = response.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
DoctorviewModel.token.value = List.token
|
||||||
|
prefDoctorSave.saveToken(requireContext(), List.token)
|
||||||
|
|
||||||
val intetn = Intent(requireContext(), MainActivity::class.java)
|
val intetn = Intent(requireContext(), MainActivity::class.java)
|
||||||
startActivity(intetn)
|
startActivity(intetn)
|
||||||
|
@ -142,6 +130,26 @@ class AuthFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,7 +164,7 @@ class AuthFragment : Fragment() {
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val retrofit = Retrofit.Builder()
|
val retrofit = Retrofit.Builder()
|
||||||
.baseUrl("http://mobileapp.vmeda.org/api/")
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
.client(client)
|
.client(client)
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build()
|
.build()
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
package com.example.doctor.CodeError
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Intent
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.os.CountDownTimer
|
||||||
|
import android.util.Log
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.MainActivity
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.databinding.ActivityCode429Binding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.Timer
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
class Code429Activity : AppCompatActivity() {
|
||||||
|
private lateinit var binding:ActivityCode429Binding
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private lateinit var timer: Timer
|
||||||
|
|
||||||
|
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityCode429Binding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun CheckToken(){
|
||||||
|
if (enternetCheck.isOnline(this@Code429Activity)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this@Code429Activity)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val list = doctorApi.CheckToken("Bearer $Tokens")
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = list.body()
|
||||||
|
val Nice = list.isSuccessful
|
||||||
|
val Code = list.code()
|
||||||
|
if(Code==500){
|
||||||
|
val intetn = Intent(this@Code429Activity, Code500Activity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (List != null) {
|
||||||
|
|
||||||
|
Log.i("clogon1231111","clogon1231111")
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@Code429Activity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
checkForUpdates(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
timer.cancel()
|
||||||
|
timer.purge()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkForUpdates(daemonIsTrue: Boolean) {
|
||||||
|
|
||||||
|
timer = fixedRateTimer("default", daemonIsTrue, 0, 15000) {
|
||||||
|
this@Code429Activity.runOnUiThread {
|
||||||
|
CheckToken()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,178 @@
|
||||||
|
package com.example.doctor.CodeError
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Intent
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.os.CountDownTimer
|
||||||
|
import android.util.Log
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.core.content.ContentProviderCompat.requireContext
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.MainActivity
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.databinding.ActivityCode500Binding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.Timer
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
class Code500Activity : AppCompatActivity() {
|
||||||
|
private lateinit var binding: ActivityCode500Binding
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private lateinit var timer: Timer
|
||||||
|
|
||||||
|
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
var checkClose = false
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityCode500Binding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
|
||||||
|
|
||||||
|
// val fixedRateTimer = fixedRateTimer("hello-timer",
|
||||||
|
// false,0,5000) {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// try {
|
||||||
|
// this@Code500Activity.runOnUiThread {
|
||||||
|
// CheckToken()
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// finally {
|
||||||
|
// fixedRateTimer.cancel();
|
||||||
|
// }
|
||||||
|
//ПОСТОЯННО ВЫЗЫВАЕТСЯ НУЖНО КАК-ТО ОТКЛЮЧАТЬ
|
||||||
|
// fixedRateTimer("timer", false, 0, 10000) {
|
||||||
|
// this@Code500Activity?.runOnUiThread {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
binding.apply {
|
||||||
|
|
||||||
|
val timer = object: CountDownTimer(30000, 1000) {
|
||||||
|
override fun onTick(millisUntilFinished: Long) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFinish() {
|
||||||
|
val intetn = Intent(this@Code500Activity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
timer.start()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun CheckToken(){
|
||||||
|
if (enternetCheck.isOnline(this@Code500Activity)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this@Code500Activity)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val list = doctorApi.CheckToken("Bearer $Tokens")
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = list.body()
|
||||||
|
val Nice = list.isSuccessful
|
||||||
|
val Code = list.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@Code500Activity, Code429Activity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (List != null) {
|
||||||
|
|
||||||
|
Log.i("clogon1231111","clogon1231111")
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@Code500Activity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
checkForUpdates(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
timer.cancel()
|
||||||
|
timer.purge()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkForUpdates(daemonIsTrue: Boolean) {
|
||||||
|
|
||||||
|
timer = fixedRateTimer("default", daemonIsTrue, 0, 15000) {
|
||||||
|
this@Code500Activity.runOnUiThread {
|
||||||
|
CheckToken()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.example.doctor
|
||||||
|
|
||||||
|
import androidx.lifecycle.MutableLiveData
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
|
||||||
|
//Ослеживание за обновлением подробной продуктовой карточкой
|
||||||
|
open class DataModel: ViewModel() {
|
||||||
|
/*//Для отлеживания обновлений активити
|
||||||
|
val messageForActivity: MutableLiveData<String> by lazy{//by lazy - чтобы каждый раз не создавался MutableLiveData(MutableLiveData<String>()), а он один раз при загрузке создаться и дальше будет пользоваться уже созданным
|
||||||
|
MutableLiveData<String>()//LiveData - означает что будет обновляться в нужынй момент, не постоянна, а в зависимоти от жизни активити
|
||||||
|
}*/
|
||||||
|
//Для отлеживания обновлений фрагммента 1
|
||||||
|
val messageForFrag1: MutableLiveData<Int> by lazy{//by lazy - чтобы каждый раз не создавался MutableLiveData(MutableLiveData<String>()), а он один раз при загрузке создаться и дальше будет пользоваться уже созданным
|
||||||
|
MutableLiveData<Int>()//LiveData - означает что будет обновляться в нужынй момент, не постоянна, а в зависимоти от жизни активити
|
||||||
|
}
|
||||||
|
|
||||||
|
val fragmentMenu: MutableLiveData<Int> by lazy{//by lazy - чтобы каждый раз не создавался MutableLiveData(MutableLiveData<String>()), а он один раз при загрузке создаться и дальше будет пользоваться уже созданным
|
||||||
|
MutableLiveData<Int>()//LiveData - означает что будет обновляться в нужынй момент, не постоянна, а в зависимоти от жизни активити
|
||||||
|
}
|
||||||
|
val patientList: MutableLiveData<Int> by lazy{//by lazy - чтобы каждый раз не создавался MutableLiveData(MutableLiveData<String>()), а он один раз при загрузке создаться и дальше будет пользоваться уже созданным
|
||||||
|
MutableLiveData<Int>()//LiveData - означает что будет обновляться в нужынй момент, не постоянна, а в зависимоти от жизни активити
|
||||||
|
}
|
||||||
|
val patientAppeal: MutableLiveData<Int> by lazy{//by lazy - чтобы каждый раз не создавался MutableLiveData(MutableLiveData<String>()), а он один раз при загрузке создаться и дальше будет пользоваться уже созданным
|
||||||
|
MutableLiveData<Int>()//LiveData - означает что будет обновляться в нужынй момент, не постоянна, а в зависимоти от жизни активити
|
||||||
|
}
|
||||||
|
/*//Для отлеживания обновлений фрагммента 2
|
||||||
|
val messageForFrag2: MutableLiveData<String> by lazy{//by lazy - чтобы каждый раз не создавался MutableLiveData(MutableLiveData<String>()), а он один раз при загрузке создаться и дальше будет пользоваться уже созданным
|
||||||
|
MutableLiveData<String>()//LiveData - означает что будет обновляться в нужынй момент, не постоянна, а в зависимоти от жизни активити
|
||||||
|
}*/
|
||||||
|
}
|
|
@ -2,15 +2,17 @@ package com.example.doctor
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import com.example.doctor.Appeals.AppealsOldModel
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsNewModel
|
||||||
import com.example.doctor.Appeals.AppealsNewModel
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsOldModel
|
||||||
import com.example.doctor.Patients.Model.PatientAllModel
|
import com.example.doctor.Patients.Model.PatientAllModel
|
||||||
|
import com.example.doctor.Patients.Model.PatientIdModel
|
||||||
import com.example.doctor.Patients.Model.PatientModel
|
import com.example.doctor.Patients.Model.PatientModel
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportListNoModel
|
import com.example.doctor.Patients.Reports.Courses.SportCoursModel
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportListYesModel
|
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportModel
|
import com.example.doctor.Patients.Reports.Edit.EditSportModel
|
||||||
import com.example.doctor.Patients.Reports.QBAModel
|
import com.example.doctor.Patients.Reports.QBAModel
|
||||||
import com.example.doctor.Patients.Reports.SportCoursModel
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorModel
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.CoursesDoctorCA
|
||||||
|
import com.example.doctor.Setting.Courses.Model.CoursesDoctorModel
|
||||||
|
|
||||||
//import com.example.retrofit.model.Product
|
//import com.example.retrofit.model.Product
|
||||||
|
|
||||||
|
@ -20,16 +22,17 @@ class DoctorViewModel: ViewModel() {
|
||||||
val token = MutableLiveData<String>()
|
val token = MutableLiveData<String>()
|
||||||
|
|
||||||
//Пациенты
|
//Пациенты
|
||||||
|
val patientId = MutableLiveData<PatientIdModel>()
|
||||||
val patientCurrent = MutableLiveData<PatientAllModel>()
|
val patientCurrent = MutableLiveData<PatientAllModel>()
|
||||||
val patientListList= MutableLiveData<PatientAllModel>()
|
val patientListList= MutableLiveData<PatientAllModel>()
|
||||||
|
|
||||||
//Обращения новые
|
//Обращения необработанные
|
||||||
val appealsNewCurrent = MutableLiveData<AppealsNewModel>()
|
val appealsNewCurrent = MutableLiveData<AppealsNewModel>()
|
||||||
val appealsNewList= MutableLiveData<List<AppealsNewModel>>()
|
val appealsNewList= MutableLiveData<List<AppealsNewModel>>()
|
||||||
|
|
||||||
//Обращения все
|
//Обращения обработанные
|
||||||
val appealsAllCurrent = MutableLiveData<AppealsOldModel>()
|
val appealsOldCurrent = MutableLiveData<AppealsOldModel>()
|
||||||
val appealsAllList= MutableLiveData<List<AppealsOldModel>>()
|
val appealsOldList= MutableLiveData<List<AppealsOldModel>>()
|
||||||
|
|
||||||
//val productList = MutableLiveData<List<Product>>()
|
//val productList = MutableLiveData<List<Product>>()
|
||||||
val patientOneCurrent = MutableLiveData<PatientModel>()
|
val patientOneCurrent = MutableLiveData<PatientModel>()
|
||||||
|
@ -41,6 +44,9 @@ class DoctorViewModel: ViewModel() {
|
||||||
//КУрсы
|
//КУрсы
|
||||||
val SportCoursCurrent = MutableLiveData<SportCoursModel>()
|
val SportCoursCurrent = MutableLiveData<SportCoursModel>()
|
||||||
val SportCoursList= MutableLiveData<List<SportCoursModel>>()
|
val SportCoursList= MutableLiveData<List<SportCoursModel>>()
|
||||||
|
val SportCoursDoctorList= MutableLiveData<List<SportCoursModel>>()
|
||||||
|
|
||||||
|
val BtnSportCoursDoctorCurrent = MutableLiveData<Int>()
|
||||||
|
|
||||||
//Редактирование занятий
|
//Редактирование занятий
|
||||||
val EditSportCurrentYes = MutableLiveData<EditSportModel>()
|
val EditSportCurrentYes = MutableLiveData<EditSportModel>()
|
||||||
|
@ -50,7 +56,38 @@ class DoctorViewModel: ViewModel() {
|
||||||
val EditSportCurrentNO = MutableLiveData<EditSportModel>()
|
val EditSportCurrentNO = MutableLiveData<EditSportModel>()
|
||||||
val EditSportListNo= MutableLiveData<List<EditSportModel>>()
|
val EditSportListNo= MutableLiveData<List<EditSportModel>>()
|
||||||
|
|
||||||
|
//Список пациентов
|
||||||
|
val PatientActiveCurrent = MutableLiveData<PatientAllModel>()
|
||||||
|
val PatientActiveList= MutableLiveData<List<PatientAllModel>>()
|
||||||
|
val PatientNotCurrent = MutableLiveData<PatientAllModel>()
|
||||||
|
val PatientNotList= MutableLiveData<List<PatientAllModel>>()
|
||||||
|
|
||||||
|
//Список со всеми пациентами
|
||||||
|
val PatientAllModel= MutableLiveData<List<PatientAllModel>>()
|
||||||
|
|
||||||
//id пациента
|
//id пациента
|
||||||
val id_patient = MutableLiveData<Int>()
|
val id_patient = MutableLiveData<Int>()
|
||||||
|
|
||||||
|
//Курсы созданный доктором
|
||||||
|
val CoursesDoctorCurrent = MutableLiveData<CoursesDoctorModel>()
|
||||||
|
val CoursesDoctorList= MutableLiveData<List<CoursesDoctorModel>>()
|
||||||
|
|
||||||
|
|
||||||
|
//Упражнения не входяшие в курс доктора
|
||||||
|
val EditCoursesDoctorAllCurrent = MutableLiveData<EditCoursesDoctorModel>()
|
||||||
|
val EditCoursesDoctorAllList= MutableLiveData<List<EditCoursesDoctorModel>>()
|
||||||
|
|
||||||
|
//Упражнения входяшие в курс доктора
|
||||||
|
val EditCoursesDoctorYourCurrent = MutableLiveData<EditCoursesDoctorModel>()
|
||||||
|
val EditCoursesDoctorYourList= MutableLiveData<List<EditCoursesDoctorModel>>()
|
||||||
|
|
||||||
|
val CoursesDoctorCA = MutableLiveData<CoursesDoctorCA>()
|
||||||
|
|
||||||
|
|
||||||
|
//Список пациентов для поисковой строки
|
||||||
|
val patientListSearch= MutableLiveData<List<PatientAllModel>>()
|
||||||
|
|
||||||
|
//Для передачи данных редактируемого курса
|
||||||
|
val CoursesCustomDoctor = MutableLiveData<CoursesDoctorModel>()
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.example.doctor.Enternet
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import android.os.Bundle
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.databinding.ActivityEnternetBinding
|
||||||
|
import com.example.doctor.databinding.FragmentEnternetBinding
|
||||||
|
|
||||||
|
class EnternetActivity : AppCompatActivity() {
|
||||||
|
private lateinit var binding: ActivityEnternetBinding
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityEnternetBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
|
||||||
|
supportFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.CLEnternet, EnternetFragment.newInstance())
|
||||||
|
.commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.example.doctor.Enternet
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
|
||||||
|
class EnternetCheck() {
|
||||||
|
|
||||||
|
//Проверка интернета
|
||||||
|
fun isOnline(context: Context): Boolean {
|
||||||
|
if (context == null) return false
|
||||||
|
val connectivityManager =
|
||||||
|
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
val capabilities =
|
||||||
|
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
|
||||||
|
if (capabilities != null) {
|
||||||
|
when {
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val activeNetworkInfo = connectivityManager.activeNetworkInfo
|
||||||
|
if (activeNetworkInfo != null && activeNetworkInfo.isConnected) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.example.doctor.Enternet
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.example.doctor.MainActivity
|
||||||
|
import com.example.doctor.databinding.FragmentEnternetBinding
|
||||||
|
|
||||||
|
|
||||||
|
class EnternetFragment : Fragment() {
|
||||||
|
private lateinit var binding: FragmentEnternetBinding
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentEnternetBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
binding.btnEnternet.setOnClickListener{
|
||||||
|
val intetn = Intent(requireContext(), MainActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun newInstance() = EnternetFragment()
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,15 +1,45 @@
|
||||||
package com.example.doctor.Home
|
package com.example.doctor.Home
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
import com.example.doctor.databinding.FragmentHomeBinding
|
import com.example.doctor.databinding.FragmentHomeBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
|
||||||
class HomeFragment : Fragment() {
|
class HomeFragment : Fragment() {
|
||||||
private lateinit var binding: FragmentHomeBinding
|
private lateinit var binding: FragmentHomeBinding
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
|
|
||||||
|
private var Token = ""
|
||||||
|
val prefDoctorClear= ClearPref()
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
private val modelDoctor: DoctorViewModel by activityViewModels()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
@ -22,6 +52,87 @@ class HomeFragment : Fragment() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
binding.CVPatinet.setOnClickListener {
|
||||||
|
dataModel.fragmentMenu.value = R.id.patient
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.CVAppeals.setOnClickListener {
|
||||||
|
dataModel.fragmentMenu.value = R.id.list_check
|
||||||
|
}
|
||||||
|
|
||||||
|
CountPatientAndAppeals()
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получение данных для главной страницы
|
||||||
|
fun CountPatientAndAppeals() = with(binding) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listHomeView = doctorApi.CountPatientAndAppeals("Bearer $Tokens")
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listHomeView.body()
|
||||||
|
val Nice = listHomeView.isSuccessful
|
||||||
|
val Code = listHomeView.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
txtCountPatient.text = List?.patient.toString()
|
||||||
|
txtCountAppealsNew.text = List?.appeals_check.toString()
|
||||||
|
txtCountAppealsAll.text = List?.appeals_all.toString()
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.example.doctor.Home
|
||||||
|
|
||||||
|
data class HomeInfoModel(
|
||||||
|
val patient: Int,
|
||||||
|
val appeals_check: Int,
|
||||||
|
val appeals_all: Int,
|
||||||
|
)
|
||||||
|
|
|
@ -1,15 +1,31 @@
|
||||||
package com.example.doctor
|
package com.example.doctor
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.app.Notification
|
||||||
|
import android.app.NotificationChannel
|
||||||
|
import android.app.NotificationManager
|
||||||
|
import android.app.PendingIntent
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.os.Build
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
|
import android.widget.RemoteViews
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
|
import androidx.constraintlayout.widget.ConstraintSet.Constraint
|
||||||
|
import androidx.work.Constraints
|
||||||
|
import androidx.work.ExistingPeriodicWorkPolicy
|
||||||
|
import androidx.work.NetworkType
|
||||||
|
import androidx.work.OneTimeWorkRequest
|
||||||
|
import androidx.work.PeriodicWorkRequest
|
||||||
|
import androidx.work.WorkManager
|
||||||
|
import androidx.work.WorkRequest
|
||||||
import com.example.doctor.Auth.AuthActivity
|
import com.example.doctor.Auth.AuthActivity
|
||||||
import com.example.doctor.Auth.AuthFragment
|
import com.example.doctor.Auth.AuthFragment
|
||||||
import com.example.doctor.Auth.Model.AuthModel
|
import com.example.doctor.Auth.Model.AuthModel
|
||||||
|
@ -17,6 +33,7 @@ import com.example.doctor.Pref.ConclusionPref
|
||||||
import com.example.doctor.Pref.SavePref
|
import com.example.doctor.Pref.SavePref
|
||||||
import com.example.doctor.Retrofit.DoctorApi
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
import com.example.doctor.Toast.showCustomInfoToast
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.Worker.MyWorker
|
||||||
import com.example.doctor.databinding.ActivityMainBinding
|
import com.example.doctor.databinding.ActivityMainBinding
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -26,32 +43,258 @@ import okhttp3.logging.HttpLoggingInterceptor
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
import android.app.TaskStackBuilder
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.view.View
|
||||||
|
import androidx.activity.viewModels
|
||||||
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.app.NotificationManagerCompat
|
||||||
|
import androidx.core.content.ContentProviderCompat.requireContext
|
||||||
|
import androidx.test.core.app.ActivityScenario.launch
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Enternet.EnternetFragment
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import java.util.Timer
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: ActivityMainBinding
|
private lateinit var binding: ActivityMainBinding
|
||||||
private lateinit var doctorApi: DoctorApi
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private lateinit var timer: Timer
|
||||||
//Токен
|
//Токен
|
||||||
private var Token = ""
|
private var Token = ""
|
||||||
val prefDoctorSave = SavePref()
|
val prefDoctorSave = SavePref()
|
||||||
val prefDoctorConclusion = ConclusionPref()
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
var backPressedTime: Long = 0
|
var backPressedTime: Long = 0
|
||||||
|
|
||||||
|
|
||||||
|
lateinit var notificationManager: NotificationManager
|
||||||
|
lateinit var notificationChannel: NotificationChannel
|
||||||
|
lateinit var builder: Notification.Builder
|
||||||
|
private val channelId = "i.apps.notifications"
|
||||||
|
private val description = "Test notification"
|
||||||
|
|
||||||
|
|
||||||
|
val CHANNEL_ID = "channelID"
|
||||||
|
val CHANNEL_NAME = "channelName"
|
||||||
|
val NOTIF_ID = 0
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
private val modelDoctor: DoctorViewModel by viewModels()//Инициализировали класс
|
||||||
|
|
||||||
|
@SuppressLint("RemoteViewLayout", "MissingPermission")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = ActivityMainBinding.inflate(layoutInflater)
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
initRetrofit()
|
|
||||||
|
|
||||||
MainAndAuth()
|
MainAndAuth()
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Получение необработанных сообщений
|
||||||
|
private fun getNewAppeals() {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.GetAppealsDoctorNew("Bearer $Tokens")
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val AppealsMes = listAppeals.body()
|
||||||
|
|
||||||
|
//Если нету ошибок
|
||||||
|
if (AppealsMes != null) {
|
||||||
|
if (AppealsMes.appeals_new != null) {
|
||||||
|
modelDoctor.appealsNewList.value = AppealsMes.appeals_new
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// finish()
|
||||||
|
// val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
// startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получение обработанных сообщений
|
||||||
|
private fun getOldAppeals() {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listAppeals = doctorApi.GetAppealsDoctorOld("Bearer $Tokens")
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val AppealsMes = listAppeals.body()
|
||||||
|
|
||||||
|
//Если нету ошибок
|
||||||
|
if (AppealsMes != null) {
|
||||||
|
if (AppealsMes.appeals_old != null) {
|
||||||
|
modelDoctor.appealsOldList.value = AppealsMes.appeals_old
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// finish()
|
||||||
|
// val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
// startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка пациентов для поиска
|
||||||
|
fun GetPatientListSearch() {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listPatientList = doctorApi.GetPatientAll("Bearer $Tokens")
|
||||||
|
|
||||||
|
runOnUiThread {
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val patientList = listPatientList.body()
|
||||||
|
//Если нету ошибок
|
||||||
|
if (patientList != null) {
|
||||||
|
modelDoctor.patientListSearch.value = patientList.patient
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// finish()
|
||||||
|
// val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
// startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun GetPatientListYes() {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetPatientAllActive("Bearer $Tokens")
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val patientList = listProduct.body()
|
||||||
|
|
||||||
|
//Если нету ошибок
|
||||||
|
if (patientList != null) {
|
||||||
|
modelDoctor.PatientActiveList.value = patientList.patient
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// finish()
|
||||||
|
// val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
// startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun GetPatientListNo() {
|
||||||
|
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetPatientAllNotActive("Bearer $Tokens")
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val patientList = listProduct.body()
|
||||||
|
|
||||||
|
//Если нету ошибок
|
||||||
|
if (patientList != null) {
|
||||||
|
modelDoctor.PatientNotList.value = patientList.patient
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// finish()
|
||||||
|
// val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
// startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// private fun createNotifChannel() {
|
||||||
|
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
// val channel = NotificationChannel(
|
||||||
|
// CHANNEL_ID,
|
||||||
|
// CHANNEL_NAME,
|
||||||
|
// NotificationManager.IMPORTANCE_DEFAULT
|
||||||
|
// ).apply {
|
||||||
|
// lightColor = Color.BLUE
|
||||||
|
// enableLights(true)
|
||||||
|
// }
|
||||||
|
// val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
// manager.createNotificationChannel(channel)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //Одинарный
|
||||||
|
// fun myOneTimeWork() {
|
||||||
|
// val constraints = Constraints.Builder()
|
||||||
|
// .setRequiredNetworkType(NetworkType.NOT_REQUIRED)//Тут мы указыаем что сработает при наличие интернета
|
||||||
|
// .setRequiresCharging(true)
|
||||||
|
// .build()
|
||||||
|
//
|
||||||
|
// //Ограничение
|
||||||
|
// val myWorkRequest: WorkRequest =
|
||||||
|
// OneTimeWorkRequest.Builder(MyWorker::class.java)//OneTimeWorkRequest - разовая
|
||||||
|
// .setConstraints(constraints)
|
||||||
|
// .build()
|
||||||
|
//
|
||||||
|
// WorkManager.getInstance(this@MainActivity).enqueue(myWorkRequest)//Отправка запроса
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //Повторяющийся
|
||||||
|
// fun myPriodicTimeWork() {
|
||||||
|
// val constraints = Constraints.Builder()
|
||||||
|
// .setRequiredNetworkType(NetworkType.NOT_REQUIRED)//Тут мы указыаем что сработает при наличие интернета
|
||||||
|
// .setRequiresCharging(true)
|
||||||
|
// .build()
|
||||||
|
//
|
||||||
|
// //Ограничение
|
||||||
|
// val myWorkRequest = PeriodicWorkRequest.Builder(
|
||||||
|
// MyWorker::class.java,
|
||||||
|
// 15,
|
||||||
|
// TimeUnit.MINUTES
|
||||||
|
// )//PeriodicWorkRequest - переодически, 15 - время интервала(минимальное 15 минут)
|
||||||
|
// .setConstraints(constraints)
|
||||||
|
// .addTag("my_id")//Уникальный индификатор для уведомления, для того чтобы можно было кпримеру обратиться и остановать данный менеджер
|
||||||
|
// .build()
|
||||||
|
//
|
||||||
|
// WorkManager.getInstance(this@MainActivity).enqueueUniquePeriodicWork(
|
||||||
|
// "my_id",
|
||||||
|
// ExistingPeriodicWorkPolicy.KEEP,
|
||||||
|
// myWorkRequest
|
||||||
|
// )//Отправка запроса
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
fun MainAndAuth() {
|
fun MainAndAuth() {
|
||||||
Token = prefDoctorConclusion.conclusionToken(this)
|
Token = prefDoctorConclusion.conclusionToken(this@MainActivity)
|
||||||
//CheckTokenAuth(Token)
|
//CheckTokenAuth(Token)
|
||||||
if (Token == "") {
|
if (Token == "") {
|
||||||
Auth()
|
Auth()
|
||||||
|
@ -61,31 +304,107 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Auth() {
|
fun Auth() {
|
||||||
|
binding.CLLoad.visibility = View.GONE
|
||||||
supportFragmentManager.beginTransaction()
|
supportFragmentManager.beginTransaction()
|
||||||
.replace(R.id.CLMain, AuthFragment.newInstance())
|
.replace(R.id.CLMain, AuthFragment.newInstance())
|
||||||
.commit()
|
.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Main() {
|
fun Main() {
|
||||||
|
binding.CLLoad.visibility = View.GONE
|
||||||
fragment_inicializ()
|
fragment_inicializ()
|
||||||
|
|
||||||
|
// fixedRateTimer("timer", false, 0, 10000) {
|
||||||
|
// this@MainActivity.runOnUiThread {
|
||||||
|
// getNewAppeals()
|
||||||
|
// getOldAppeals()
|
||||||
|
// GetPatientListSearch()
|
||||||
|
// GetPatientListYes()
|
||||||
|
// GetPatientListNo()
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SuspiciousIndentation")
|
@SuppressLint("MissingPermission")
|
||||||
|
private fun main() = with(binding) {
|
||||||
|
|
||||||
|
// btn11.setOnClickListener {
|
||||||
|
// myOneTimeWork()
|
||||||
|
// }
|
||||||
|
// btn22.setOnClickListener {
|
||||||
|
// myPriodicTimeWork()
|
||||||
|
// }
|
||||||
|
// createNotifChannel()
|
||||||
|
// notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
// val intent = Intent(this@MainActivity, MainActivity::class.java)
|
||||||
|
// val pendingIntent = TaskStackBuilder.create(this@MainActivity).run {
|
||||||
|
// addNextIntentWithParentStack(intent)
|
||||||
|
// getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// val notif = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
|
||||||
|
// .setContentTitle("Sample Title")
|
||||||
|
// .setContentText("This is sample body notif")
|
||||||
|
// .setSmallIcon(R.drawable.door)
|
||||||
|
// .setPriority(NotificationCompat.PRIORITY_HIGH)
|
||||||
|
// .setContentIntent(pendingIntent)
|
||||||
|
// .build()
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// val notifManger = NotificationManagerCompat.from(this@MainActivity)
|
||||||
|
// button3.setOnClickListener {
|
||||||
|
//
|
||||||
|
// notifManger.notify(NOTIF_ID, notif)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun CheckTokenAuth(token: String) {
|
private fun CheckTokenAuth(token: String) {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val response = doctorApi.CheckToken("Bearer $token")
|
val response = doctorApi.CheckToken("Bearer $token")
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
val checkToken = response.body()
|
|
||||||
val user1 = response.code()
|
|
||||||
Log.i("12213213213", user1.toString())
|
|
||||||
|
|
||||||
if (user1.toString() == "200") {
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = response.body()
|
||||||
|
val Nice = response.isSuccessful
|
||||||
|
val Code = response.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@MainActivity, Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (Code.toString() == "200") {
|
||||||
Main()
|
Main()
|
||||||
} else {
|
} else {
|
||||||
Auth()
|
Auth()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(this@MainActivity, Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@MainActivity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -93,6 +412,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
//Инициализируем Retrofit
|
//Инициализируем Retrofit
|
||||||
private fun initRetrofit() {
|
private fun initRetrofit() {
|
||||||
|
|
||||||
val interceptor = HttpLoggingInterceptor()
|
val interceptor = HttpLoggingInterceptor()
|
||||||
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
@ -102,7 +422,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val retrofit = Retrofit.Builder()
|
val retrofit = Retrofit.Builder()
|
||||||
.baseUrl("http://mobileapp.vmeda.org/api/")
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
.client(client)
|
.client(client)
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build()
|
.build()
|
||||||
|
@ -137,10 +457,28 @@ class MainActivity : AppCompatActivity() {
|
||||||
// backPressedTime = System.currentTimeMillis()
|
// backPressedTime = System.currentTimeMillis()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
override fun onResume() {
|
// override fun onResume() {
|
||||||
super.onResume()
|
// super.onResume()
|
||||||
|
// checkForUpdates(true)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// override fun onStop() {
|
||||||
|
// super.onStop()
|
||||||
|
// timer.cancel()
|
||||||
|
// timer.purge()
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private fun checkForUpdates(daemonIsTrue: Boolean) {
|
||||||
|
// Token = prefDoctorConclusion.conclusionToken(this@MainActivity)
|
||||||
|
// timer = fixedRateTimer("default", daemonIsTrue, 0, 5000) {
|
||||||
|
// this@MainActivity?.runOnUiThread {
|
||||||
|
//
|
||||||
|
// CheckTokenAuth(Token)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -2,11 +2,17 @@ package com.example.doctor
|
||||||
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.icu.text.SimpleDateFormat
|
||||||
|
import android.icu.util.Calendar
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.SystemClock
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.Observer
|
||||||
|
//import androidx.navigation.fragment.findNavController
|
||||||
import com.example.doctor.Appeals.AppealsFragment
|
import com.example.doctor.Appeals.AppealsFragment
|
||||||
import com.example.doctor.Home.HomeFragment
|
import com.example.doctor.Home.HomeFragment
|
||||||
import com.example.doctor.Patients.PatientsListFragment
|
import com.example.doctor.Patients.PatientsListFragment
|
||||||
|
@ -14,20 +20,24 @@ import com.example.doctor.Pref.ConclusionPref
|
||||||
import com.example.doctor.Pref.SavePref
|
import com.example.doctor.Pref.SavePref
|
||||||
import com.example.doctor.Setting.SettingFragment
|
import com.example.doctor.Setting.SettingFragment
|
||||||
import com.example.doctor.databinding.FragmentMainBinding
|
import com.example.doctor.databinding.FragmentMainBinding
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
|
|
||||||
class MainFragment : Fragment() {
|
class MainFragment : Fragment() {
|
||||||
private lateinit var binding: FragmentMainBinding
|
private lateinit var binding: FragmentMainBinding
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
val prefDoctorSave = SavePref()
|
val prefDoctorSave = SavePref()
|
||||||
val prefDoctorConclusion = ConclusionPref()
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
|
||||||
private var Token = ""
|
private var Token = ""
|
||||||
|
var sdf: SimpleDateFormat = SimpleDateFormat("EEEE")
|
||||||
|
var d: Date = Date()
|
||||||
|
var dayOfTheWeek: String = sdf.format(d)
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
binding = FragmentMainBinding.inflate(layoutInflater,container,false)
|
binding = FragmentMainBinding.inflate(layoutInflater, container, false)
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +46,68 @@ class MainFragment : Fragment() {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
//MainAndAuth()
|
//MainAndAuth()
|
||||||
|
dataModel.fragmentMenu.observe(viewLifecycleOwner, Observer {
|
||||||
|
binding.buttonNavigation.selectedItemId = it
|
||||||
|
})
|
||||||
|
|
||||||
|
addDate()
|
||||||
|
|
||||||
fragment_inicializ()
|
fragment_inicializ()
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addDate() {
|
||||||
|
val calendar: Calendar = Calendar.getInstance()
|
||||||
|
val sdf: SimpleDateFormat = SimpleDateFormat("EEEE")
|
||||||
|
val d: Date = Date()
|
||||||
|
val DayOfTheWeek: String = sdf.format(d)
|
||||||
|
val Day = calendar.get(Calendar.DATE)
|
||||||
|
val Month = calendar.get(Calendar.MONTH).plus(1)
|
||||||
|
var day = Day.toString()
|
||||||
|
var month = ""
|
||||||
|
var date_of_the_week = ""
|
||||||
|
|
||||||
|
when (Month) {
|
||||||
|
1 -> month = "Январь"
|
||||||
|
2 -> month = "Февраль"
|
||||||
|
3 -> month = "Март"
|
||||||
|
4 -> month = "Апрель"
|
||||||
|
5 -> month = "Май"
|
||||||
|
6 -> month = "Июнь"
|
||||||
|
7 -> month = "Июль"
|
||||||
|
8 -> month = "Август"
|
||||||
|
9 -> month = "Сентябрь"
|
||||||
|
10 -> month = "Октябрь"
|
||||||
|
11 -> month = "Ноябрь"
|
||||||
|
12 -> month = "Декабрь"
|
||||||
|
else -> { // обратите внимание на блок
|
||||||
|
month = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
when (dayOfTheWeek) {
|
||||||
|
"Monday" -> date_of_the_week = "Пн"
|
||||||
|
"Tuesday" -> date_of_the_week = "Вт"
|
||||||
|
"Wednesday" -> date_of_the_week = "Ср"
|
||||||
|
"Thursday" -> date_of_the_week = "Чт"
|
||||||
|
"Friday" -> date_of_the_week = "Пт"
|
||||||
|
"Saturday" -> date_of_the_week = "Сб"
|
||||||
|
"Sunday" -> date_of_the_week = "Вс"
|
||||||
|
"Понедельник" -> date_of_the_week = "Пн"
|
||||||
|
"Вторник" -> date_of_the_week = "Вт"
|
||||||
|
"Стреда" -> date_of_the_week = "Ср"
|
||||||
|
"Четверг" -> date_of_the_week = "Чт"
|
||||||
|
"Пятница" -> date_of_the_week = "Пт"
|
||||||
|
"Суббота" -> date_of_the_week = "Сб"
|
||||||
|
"Воскресенье" -> date_of_the_week = "Вс"
|
||||||
|
else -> {
|
||||||
|
date_of_the_week = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println(calendar.get(Calendar.DATE))
|
||||||
|
binding.txtDate.setText("${day}" + " " + "${month}")
|
||||||
}
|
}
|
||||||
|
|
||||||
// fun MainAndAuth(){
|
// fun MainAndAuth(){
|
||||||
|
@ -60,9 +131,9 @@ class MainFragment : Fragment() {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Инициализация фрагментов
|
//Инициализация фрагментов
|
||||||
fun fragment_inicializ() {
|
fun fragment_inicializ() {
|
||||||
|
|
||||||
Token = prefDoctorConclusion.conclusionToken(requireContext())
|
Token = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
//Вывод фрагмента на активити при первоначальной загрузке
|
//Вывод фрагмента на активити при первоначальной загрузке
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
|
@ -71,29 +142,43 @@ class MainFragment : Fragment() {
|
||||||
|
|
||||||
|
|
||||||
//Эран который будет выбран по умолчанию(кнопка которая будет прожата по умолчанию)
|
//Эран который будет выбран по умолчанию(кнопка которая будет прожата по умолчанию)
|
||||||
binding.buttonNavigation.selectedItemId = R.id.home//По умолчанию и так первая, но на всякий случай выберу еще програмным путем первую ячейку
|
binding.buttonNavigation.selectedItemId =
|
||||||
|
R.id.home//По умолчанию и так первая, но на всякий случай выберу еще програмным путем первую ячейку
|
||||||
|
|
||||||
//Нажатие на bottom navigation
|
//Нажатие на bottom navigation
|
||||||
binding.buttonNavigation.setOnItemSelectedListener {
|
binding.buttonNavigation.setOnItemSelectedListener {
|
||||||
|
|
||||||
when (it.itemId) {//it.itemId - это id нажатого элемента
|
when (it.itemId) {//it.itemId - это id нажатого элемента
|
||||||
R.id.home -> {
|
R.id.home -> {
|
||||||
|
if (!isClickRecently()) {
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.replace(R.id.CLMainFragment, HomeFragment.newInstance())?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
?.replace(R.id.CLMainFragment, HomeFragment.newInstance())
|
||||||
|
?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
}
|
}
|
||||||
R.id.patient -> {
|
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
|
||||||
?.replace(R.id.CLMainFragment, PatientsListFragment.newInstance())?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
R.id.patient -> {
|
||||||
|
if (!isClickRecently()) {
|
||||||
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
|
?.replace(R.id.CLMainFragment, PatientsListFragment.newInstance())
|
||||||
|
?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
R.id.list_check -> {//Если вы не авторизованный пользваотель то вам не будет доступен доступ к данном фрагменту
|
R.id.list_check -> {//Если вы не авторизованный пользваотель то вам не будет доступен доступ к данном фрагменту
|
||||||
|
if (!isClickRecently()) {
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.replace(R.id.CLMainFragment, AppealsFragment.newInstance())?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
?.replace(R.id.CLMainFragment, AppealsFragment.newInstance())
|
||||||
|
?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
R.id.setting -> {//Если вы не авторизованный пользваотель то вам не будет доступен доступ к данном фрагменту
|
R.id.setting -> {//Если вы не авторизованный пользваотель то вам не будет доступен доступ к данном фрагменту
|
||||||
|
if (!isClickRecently()) {
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.replace(R.id.CLMainFragment, SettingFragment.newInstance())?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
?.replace(R.id.CLMainFragment, SettingFragment.newInstance())
|
||||||
|
?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -101,6 +186,19 @@ class MainFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var mLastClickTime = 0L
|
||||||
|
fun isClickRecently(): Boolean {
|
||||||
|
if (SystemClock.elapsedRealtime() - mLastClickTime < 500) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
mLastClickTime = SystemClock.elapsedRealtime()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
fun newInstance() = MainFragment()
|
fun newInstance() = MainFragment()
|
||||||
|
|
|
@ -43,7 +43,7 @@ class PatientListAdapter(val listener_patient: Listener) :
|
||||||
@SuppressLint("SuspiciousIndentation", "SetTextI18n")
|
@SuppressLint("SuspiciousIndentation", "SetTextI18n")
|
||||||
fun bind(item: PatientAllModel) = with(binding) {//Productitem - перпедаем данные
|
fun bind(item: PatientAllModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
itemTemp = item
|
itemTemp = item
|
||||||
txtNumberCurds.text = item.id.toString() + "."
|
txtNumberCurds.text = item.number.toString() + "."
|
||||||
txtLoginPatient.text = item.login
|
txtLoginPatient.text = item.login
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.example.doctor.Patients.Model
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
data class PatientAllModel(
|
data class PatientAllModel(
|
||||||
|
val number: Int? = null,
|
||||||
val id: Int? = null,
|
val id: Int? = null,
|
||||||
val login: String? = null,
|
val login: String? = null,
|
||||||
val email: String? = null,
|
val email: String? = null,
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
package com.example.doctor.Patients.Model
|
||||||
|
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
|
data class PatientIdModel(
|
||||||
|
val id: Int
|
||||||
|
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,421 @@
|
||||||
|
package com.example.doctor.Patients
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
|
import android.view.View
|
||||||
|
import androidx.activity.viewModels
|
||||||
|
import androidx.core.content.ContentProviderCompat.requireContext
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Reports.PatientFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.databinding.ActivityPatientBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.Timer
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
class PatientActivity : AppCompatActivity() {
|
||||||
|
private lateinit var binding: ActivityPatientBinding
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private lateinit var timer: Timer
|
||||||
|
|
||||||
|
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
private val modelDoctor: DoctorViewModel by viewModels()//Инициализировали класс
|
||||||
|
var idPatient = 0
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityPatientBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
supportFragmentManager.beginTransaction().replace(R.id.CLPatientActivity, PatientFragment.newInstance()).commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
|
idPatient = prefDoctorConclusion.conclusionIdPatient(this)
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Получения списка анкет ДО и ПОСЛЕ для пациента
|
||||||
|
fun QBAPatientList(id:Int){
|
||||||
|
if (enternetCheck.isOnline(this@PatientActivity)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this@PatientActivity)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val list = doctorApi.GetPatientBAQiestionar("Bearer $Tokens",id)
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = list.body()
|
||||||
|
val Nice = list.isSuccessful
|
||||||
|
val Code = list.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@PatientActivity, Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
if(List?.questionnaire !=null){
|
||||||
|
modelDoctor.qbaList.value = List.questionnaire
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//2
|
||||||
|
GetPatientID(idPatient)
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(this@PatientActivity, Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@PatientActivity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
finish()
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun GetPatientID(idPatient: Int) {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listPatient = doctorApi.GetPatientID("Bearer $Tokens", idPatient)
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listPatient.body()
|
||||||
|
val Nice = listPatient.isSuccessful
|
||||||
|
val Code = listPatient.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@PatientActivity, Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.patientCurrent.value = List
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//3
|
||||||
|
GetCoursesAllSport(idPatient)
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(this@PatientActivity,Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@PatientActivity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Вывод всех курсов
|
||||||
|
fun GetCoursesAllSport(idPatient: Int){
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetCoursAllPatient("Bearer $Tokens",idPatient)
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@PatientActivity, Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.SportCoursList.value = List.courses
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//4
|
||||||
|
GetCoursesYouSport(idPatient)
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(this@PatientActivity, Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@PatientActivity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(this@PatientActivity, EnternetActivity::class.java)
|
||||||
|
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetCoursesYouSport(idPatient:Int) {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetCoursesDoctorPatient("Bearer $Tokens",idPatient)
|
||||||
|
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctor.body()
|
||||||
|
val Nice = listCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@PatientActivity, Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.SportCoursDoctorList.value = List.courses_doctor
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//5
|
||||||
|
GetCoursesSportYes(idPatient)
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(this@PatientActivity, Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@PatientActivity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun GetCoursesSportYes(id_patient:Int) {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val sportEdit = doctorApi.GetCoursesSportYes("Bearer $Tokens", id_patient)
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = sportEdit.body()
|
||||||
|
val Nice = sportEdit.isSuccessful
|
||||||
|
val Code = sportEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@PatientActivity, Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.EditSportListYes.value = List.set_of_sports_exercises_yes
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//6
|
||||||
|
GetCoursesSportNo(idPatient)
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(this@PatientActivity, Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@PatientActivity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun GetCoursesSportNo(id_patient:Int) {
|
||||||
|
if (enternetCheck.isOnline(this)) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(this)
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val sportEdit = doctorApi.GetCoursesSportNo("Bearer $Tokens",id_patient)
|
||||||
|
runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = sportEdit.body()
|
||||||
|
val Nice = sportEdit.isSuccessful
|
||||||
|
val Code = sportEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(this@PatientActivity, Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.EditSportListNo.value = List.set_of_sports_exercises_no
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(this@PatientActivity, Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(this@PatientActivity, AuthActivity::class.java)
|
||||||
|
finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(this, EnternetActivity::class.java)
|
||||||
|
finish()
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
checkForUpdates(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
timer.cancel()
|
||||||
|
timer.purge()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkForUpdates(daemonIsTrue: Boolean) {
|
||||||
|
|
||||||
|
timer = fixedRateTimer("default", daemonIsTrue, 0, 10000) {
|
||||||
|
this@PatientActivity?.runOnUiThread {
|
||||||
|
QBAPatientList(idPatient)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package com.example.doctor.Patients
|
package com.example.doctor.Patients
|
||||||
|
|
||||||
//noinspection SuspiciousImport
|
|
||||||
import android.R
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -9,16 +7,38 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
|
||||||
import com.example.doctor.DoctorViewModel
|
import com.example.doctor.DoctorViewModel
|
||||||
import com.example.doctor.Patients.Adapter.PatientListAdapter
|
|
||||||
import com.example.doctor.Patients.Model.PatientAllModel
|
import com.example.doctor.Patients.Model.PatientAllModel
|
||||||
import com.example.doctor.Patients.Model.PatientModel
|
|
||||||
import com.example.doctor.Patients.Reports.PatientFragment
|
import com.example.doctor.Patients.Reports.PatientFragment
|
||||||
import com.example.doctor.Pref.ConclusionPref
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import android.R
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Handler
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import androidx.lifecycle.Observer
|
||||||
|
//import androidx.navigation.fragment.findNavController
|
||||||
|
|
||||||
|
import com.example.doctor.Adapter.VpAdapterPatientList
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.MainActivity
|
||||||
|
import com.example.doctor.Patients.TabLayoutPatient.ActiveCoursesPatientFragment
|
||||||
|
import com.example.doctor.Patients.TabLayoutPatient.NotActiveCoursesPatientFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
import com.example.doctor.Retrofit.DoctorApi
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
import com.example.doctor.databinding.FragmentPatientsListBinding
|
import com.example.doctor.databinding.FragmentPatientsListBinding
|
||||||
import com.example.user.BottomSheetMenu.NoteBottomSheetMenu
|
import com.example.user.BottomSheetMenu.NoteBottomSheetMenu
|
||||||
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
@ -26,17 +46,37 @@ import okhttp3.OkHttpClient
|
||||||
import okhttp3.logging.HttpLoggingInterceptor
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.Timer
|
||||||
|
import kotlin.concurrent.fixedRateTimer
|
||||||
|
|
||||||
|
|
||||||
class PatientsListFragment : Fragment(), PatientListAdapter.Listener {
|
class PatientsListFragment : Fragment(){
|
||||||
private lateinit var binding: FragmentPatientsListBinding
|
private lateinit var binding: FragmentPatientsListBinding
|
||||||
private val model: DoctorViewModel by activityViewModels()
|
private val modelDoctor: DoctorViewModel by activityViewModels()
|
||||||
lateinit var adapterPatient: PatientListAdapter
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
private lateinit var doctorApi: DoctorApi
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private lateinit var timer: Timer
|
||||||
|
|
||||||
|
|
||||||
val prefDoctorConclusion = ConclusionPref()
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
var viewListPAtient = true
|
||||||
|
|
||||||
|
var patientListSearch:List<PatientAllModel>?=null
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
private val tList = listOf(
|
||||||
|
"Активные",
|
||||||
|
"Без курса",
|
||||||
|
)
|
||||||
|
//Список с фрагментами для переключения
|
||||||
|
private val flist = listOf(
|
||||||
|
ActiveCoursesPatientFragment.newInstance(),
|
||||||
|
NotActiveCoursesPatientFragment.newInstance(),
|
||||||
|
)
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
@ -47,21 +87,12 @@ class PatientsListFragment : Fragment(), PatientListAdapter.Listener {
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
initRcViewDay()
|
//Чтобы срабатывала команда 1 раз
|
||||||
patientListCurrent()
|
if(viewListPAtient){
|
||||||
GetPatientList()
|
GetPatientList()
|
||||||
|
init()
|
||||||
|
|
||||||
|
//Нажатие на кнопку для добавления пациента
|
||||||
|
|
||||||
|
|
||||||
// //Swipe down
|
|
||||||
// binding.refreshLayout.setOnRefreshListener{
|
|
||||||
// GetPatientList()
|
|
||||||
// binding.refreshLayout.isRefreshing = false
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
//Нажатие на кнопку заказать заказ
|
|
||||||
binding.btnAddPatient.setOnClickListener {
|
binding.btnAddPatient.setOnClickListener {
|
||||||
val noteBottomSheetMenu = NoteBottomSheetMenu.newInstance()
|
val noteBottomSheetMenu = NoteBottomSheetMenu.newInstance()
|
||||||
noteBottomSheetMenu.show(
|
noteBottomSheetMenu.show(
|
||||||
|
@ -69,30 +100,101 @@ class PatientsListFragment : Fragment(), PatientListAdapter.Listener {
|
||||||
"Note Bottom Sheet Fragment"
|
"Note Bottom Sheet Fragment"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
modelDoctor.patientListSearch.observe(viewLifecycleOwner){
|
||||||
|
if(patientListSearch!=it){
|
||||||
|
patientListSearch = it
|
||||||
|
addListSerchPatient(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Функция подключения переключения
|
||||||
|
private fun init() = with(binding) {
|
||||||
|
val adapter = VpAdapterPatientList(activity as FragmentActivity, flist as List<Fragment>)
|
||||||
|
vpPatient.adapter = adapter
|
||||||
|
|
||||||
|
//Переключения (связываем таблаяут(переключатель) с viewpager, чтобы переключать фрагменты)
|
||||||
|
TabLayoutMediator(tabLayoutPatient, vpPatient) { tab, pos ->
|
||||||
|
tab.text =
|
||||||
|
tList[pos]//tab - нажатая кнопка, pos - позиция кнопки, tList[pos] - передаем название по полученной позиции
|
||||||
|
}.attach()// attach() - чтобы все переключалось, а не вывадило постоянно один экран
|
||||||
|
|
||||||
|
//Изменения цвета в зависомости на каком из tabLayout вы находитесь
|
||||||
|
binding.tabLayoutPatient.setTabTextColors(getResources().getColor(com.example.doctor.R.color.black),
|
||||||
|
getResources().getColor(com.example.doctor.R.color.white));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// private fun viewPatient() {
|
||||||
|
// val viewPatient = prefDoctorConclusion.conclusionViewPatient(requireContext())
|
||||||
|
// val idPatient = prefDoctorConclusion.conclusionIdPatient(requireContext())
|
||||||
|
// Log.i("viewPatient1",viewPatient.toString())
|
||||||
|
// Log.i("idPatient1",viewPatient.toString())
|
||||||
|
// if(viewPatient ==1 && idPatient !=0){
|
||||||
|
// GetPatientID(idPatient)
|
||||||
|
// prefDoctorClear.clearIdPatient(requireContext())
|
||||||
|
// prefDoctorClear.clearViewPatient(requireContext())
|
||||||
|
// Log.i("viewPatient2",viewPatient.toString())
|
||||||
|
// Log.i("idPatient2",viewPatient.toString())
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
//Получения списка пациентов
|
//Получения списка пациентов
|
||||||
fun GetPatientList() {
|
fun GetPatientList() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val listProduct = doctorApi.GetPatientAll("Bearer $Tokens")
|
val listPatientList = doctorApi.GetPatientAll("Bearer $Tokens")
|
||||||
|
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val patientList = listProduct.body()
|
val List = listPatientList.body()
|
||||||
|
val Nice = listPatientList.isSuccessful
|
||||||
|
val Code = listPatientList.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (patientList != null) {
|
if (Nice) {
|
||||||
adapterPatient.submitList(patientList.patient)
|
if (List != null) {
|
||||||
//model.patientListList.value = patientList.PatientList
|
modelDoctor.patientListSearch.value = List?.patient
|
||||||
addListSerchPatient(patientList.patient)
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private fun addListSerchPatient(patient: List<PatientAllModel>) {
|
private fun addListSerchPatient(patient: List<PatientAllModel>) {
|
||||||
|
@ -110,31 +212,31 @@ class PatientsListFragment : Fragment(), PatientListAdapter.Listener {
|
||||||
val serpat = binding.searchPatient.text.toString()
|
val serpat = binding.searchPatient.text.toString()
|
||||||
|
|
||||||
//Вывод фрагмента на активити при первоначальной загрузке
|
//Вывод фрагмента на активити при первоначальной загрузке
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
|
||||||
?.replace(com.example.doctor.R.id.CLMainListPatient, PatientFragment.newInstance())
|
// ///////// activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.commit()
|
// ///////// ?.replace(com.example.doctor.R.id.CLMainPatient, PatientFragment.newInstance())
|
||||||
|
// ///////////// ?.addToBackStack(null)
|
||||||
|
// /////////// ?.commit()
|
||||||
|
|
||||||
|
|
||||||
binding.CLMainListPatient2.visibility = View.GONE
|
|
||||||
|
//binding.CLMainListPatient2.visibility = View.GONE
|
||||||
//Ищем пациента по логину
|
//Ищем пациента по логину
|
||||||
for(i in 0 ..patient.count()-1) {
|
for(i in 0 ..patient.count()-1) {
|
||||||
if(patient[i].login == serpat){
|
if(patient[i].login == serpat){
|
||||||
model.patientCurrent.value = patient[i]
|
modelDoctor.patientCurrent.value = patient[i]
|
||||||
|
prefDoctorSave.saveIdPatient(requireContext(),patient[i].id!!)
|
||||||
|
prefDoctorSave.saveViewPatient(requireContext(),1)
|
||||||
|
val intetn = Intent(requireContext(), PatientActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Вывод прогресса на один день
|
|
||||||
private fun patientListCurrent() = with(binding) {
|
|
||||||
// model.patientListCurrent.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//Инициализируем Retrofit
|
//Инициализируем Retrofit
|
||||||
private fun initRetrofit() {
|
private fun initRetrofit() {
|
||||||
|
@ -147,7 +249,7 @@ class PatientsListFragment : Fragment(), PatientListAdapter.Listener {
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val retrofit = Retrofit.Builder()
|
val retrofit = Retrofit.Builder()
|
||||||
.baseUrl("http://mobileapp.vmeda.org/api/")
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
.client(client)
|
.client(client)
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build()
|
.build()
|
||||||
|
@ -156,27 +258,33 @@ class PatientsListFragment : Fragment(), PatientListAdapter.Listener {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Инициализация списка
|
|
||||||
private fun initRcViewDay() = with(binding) {
|
|
||||||
rcView.layoutManager =
|
|
||||||
GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
|
||||||
adapterPatient = PatientListAdapter(this@PatientsListFragment)
|
|
||||||
rcView.adapter = adapterPatient
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun newInstance() = PatientsListFragment()
|
fun newInstance() = PatientsListFragment()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onClickPatient(item: PatientAllModel) {
|
override fun onResume() {
|
||||||
//Вывод фрагмента на активити при первоначальной загрузке
|
super.onResume()
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
checkForUpdates(true)
|
||||||
?.replace(com.example.doctor.R.id.CLMainListPatient, PatientFragment.newInstance())
|
}
|
||||||
?.commit()
|
|
||||||
//binding.rcView.visibility = View.GONE
|
override fun onStop() {
|
||||||
binding.CLMainListPatient2.visibility = View.GONE
|
super.onStop()
|
||||||
model.patientCurrent.value = item
|
timer.cancel()
|
||||||
|
timer.purge()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkForUpdates(daemonIsTrue: Boolean) {
|
||||||
|
|
||||||
|
timer = fixedRateTimer("default", daemonIsTrue, 0, 10000) {
|
||||||
|
activity?.runOnUiThread {
|
||||||
|
GetPatientList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
package com.example.doctor.Patients.Reports.Courses
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.util.Log
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.databinding.ItemCardCoursesDoctorBinding
|
||||||
|
import com.example.doctor.databinding.ItemSportCourseBinding
|
||||||
|
|
||||||
|
|
||||||
|
class CoursesAllAdapter(val listener_courses: Listener) : ListAdapter<SportCoursModel, CoursesAllAdapter.Holder>(
|
||||||
|
Comparator()
|
||||||
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
|
class Holder(view: View, val listener_courses: Listener): RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
|
//Для передачи данных
|
||||||
|
|
||||||
|
val binding = ItemCardCoursesDoctorBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки
|
||||||
|
|
||||||
|
var itemTemp: SportCoursModel? =
|
||||||
|
null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия
|
||||||
|
|
||||||
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
|
init {
|
||||||
|
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
//itemView.setEnabled(false)
|
||||||
|
//timerButtonDoubleButton(itemView)
|
||||||
|
itemTemp?.let { it1 -> listener_courses.onClickSportCourses(it1) }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressLint("SuspiciousIndentation")
|
||||||
|
fun bind(item: SportCoursModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
|
itemTemp = item
|
||||||
|
txtNumberCurds.text = item.number.toString() + "."
|
||||||
|
txtNameCoursesDoctor.text = item.name
|
||||||
|
if (item.visibility == 100000) {
|
||||||
|
CVCours.setCardBackgroundColor(Color.parseColor("#83da83"))
|
||||||
|
Log.i("11111111111","sasdasdasdasdasadsdasda")
|
||||||
|
} else {
|
||||||
|
CVCours.setCardBackgroundColor(Color.parseColor("#b6b6b6"))
|
||||||
|
Log.i("2222222222222","sasdasdasdasdasadsdasda")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
|
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_card_courses_doctor, parent, false)//Создаем(надуваем) list_item
|
||||||
|
return Holder(view, listener_courses)//Через Holder возврощаем view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
val view = holder.bind(getItem(position))//Заполняем по позиции карточку
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Comparator - сравнивает старый список и новый и если что-то изменилось, то работает с конкретным изменением списке, а не весь список переписывает
|
||||||
|
class Comparator : DiffUtil.ItemCallback<SportCoursModel>() {
|
||||||
|
override fun areItemsTheSame(oldItem: SportCoursModel, newItem: SportCoursModel): Boolean {//Тут лучше всего сравнивать по id//oldItem - элементы старого списка, newItem - элементы нового списка//Возврощает Boolean, тоесть есть изменения или нет
|
||||||
|
return oldItem.id == newItem.id//Сравниваем полностью весь список новы и старый, по очередно по одной карточке и по элементно, то есть нулевой элемент, первый, второй и т.д.. Но лучше сравнивать по id списки, а не просто весь список, так как это эфективнее, так как id уникальный(oldItem.id == newItem.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areContentsTheSame(oldItem: SportCoursModel, newItem: SportCoursModel): Boolean {//Утут нужно сравнивать весь спсок старых элементов и новых
|
||||||
|
return oldItem == newItem//Сравниваем полностью весь список новы и старый
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Интерфейс нажатия на кнопку удалить товар из корзины
|
||||||
|
interface Listener {
|
||||||
|
fun onClickSportCourses(item: SportCoursModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
package com.example.doctor.Patients.Reports.Courses
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.util.Log
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Setting.Courses.Model.CoursesDoctorModel
|
||||||
|
import com.example.doctor.databinding.ItemCardCoursesDoctorBinding
|
||||||
|
|
||||||
|
|
||||||
|
class CoursesYouAdapter(val listener: Listener) :
|
||||||
|
ListAdapter<SportCoursModel, CoursesYouAdapter.Holder>(
|
||||||
|
Comparator()
|
||||||
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
|
class Holder(view: View, val listener: Listener) :
|
||||||
|
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
|
//Для передачи данных
|
||||||
|
|
||||||
|
val binding = ItemCardCoursesDoctorBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки
|
||||||
|
|
||||||
|
var itemTemp: SportCoursModel? =
|
||||||
|
null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия
|
||||||
|
|
||||||
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
|
init {
|
||||||
|
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
//itemView.setEnabled(false)
|
||||||
|
itemTemp?.let { it1 -> listener.onClickCourses(it1) }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SuspiciousIndentation", "SetTextI18n")
|
||||||
|
fun bind(item: SportCoursModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
|
itemTemp = item
|
||||||
|
txtNumberCurds.text = item.number.toString() + "."
|
||||||
|
txtNameCoursesDoctor.text = item.name
|
||||||
|
if (item.visibility == 100000) {
|
||||||
|
CVCours.setCardBackgroundColor(Color.parseColor("#83da83"))
|
||||||
|
Log.i("11111111111","sasdasdasdasdasadsdasda")
|
||||||
|
} else {
|
||||||
|
CVCours.setCardBackgroundColor(Color.parseColor("#b6b6b6"))
|
||||||
|
Log.i("2222222222222","sasdasdasdasdasadsdasda")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
|
val view = LayoutInflater.from(parent.context)
|
||||||
|
.inflate(R.layout.item_card_courses_doctor, parent, false)//Создаем(надуваем) list_item
|
||||||
|
return Holder(view, listener)//Через Holder возврощаем view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
val view = holder.bind(getItem(position))//Заполняем по позиции карточку
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Comparator - сравнивает старый список и новый и если что-то изменилось, то работает с конкретным изменением списке, а не весь список переписывает
|
||||||
|
class Comparator : DiffUtil.ItemCallback<SportCoursModel>() {
|
||||||
|
override fun areItemsTheSame(
|
||||||
|
oldItem: SportCoursModel,
|
||||||
|
newItem: SportCoursModel
|
||||||
|
): Boolean {//Тут лучше всего сравнивать по id//oldItem - элементы старого списка, newItem - элементы нового списка//Возврощает Boolean, тоесть есть изменения или нет
|
||||||
|
return oldItem.id == newItem.id//Сравниваем полностью весь список новы и старый, по очередно по одной карточке и по элементно, то есть нулевой элемент, первый, второй и т.д.. Но лучше сравнивать по id списки, а не просто весь список, так как это эфективнее, так как id уникальный(oldItem.id == newItem.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areContentsTheSame(
|
||||||
|
oldItem: SportCoursModel,
|
||||||
|
newItem: SportCoursModel
|
||||||
|
): Boolean {//Утут нужно сравнивать весь спсок старых элементов и новых
|
||||||
|
return oldItem == newItem//Сравниваем полностью весь список новы и старый
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Интерфейс нажатия на кнопку удалить товар из корзины
|
||||||
|
interface Listener {
|
||||||
|
fun onClickCourses(item: SportCoursModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.example.doctor.Patients.Reports.Courses
|
||||||
|
|
||||||
|
data class SportCoursDoctorListModel(
|
||||||
|
val courses_doctor: List<SportCoursModel>
|
||||||
|
)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.example.doctor.Patients.Reports
|
package com.example.doctor.Patients.Reports.Courses
|
||||||
|
|
||||||
data class SportCoursListModel(
|
data class SportCoursListModel(
|
||||||
val courses: List<SportCoursModel>
|
val courses: List<SportCoursModel>
|
|
@ -1,11 +1,11 @@
|
||||||
package com.example.doctor.Patients.Reports
|
package com.example.doctor.Patients.Reports.Courses
|
||||||
|
|
||||||
data class SportCoursModel(
|
data class SportCoursModel(
|
||||||
|
val number: Int,
|
||||||
val id: Int,
|
val id: Int,
|
||||||
val name: String,
|
val name: String,
|
||||||
val description: String,
|
val description: String,
|
||||||
val visibility: Int,
|
val visibility: Int,
|
||||||
val created_at: String,
|
val created_at: String,
|
||||||
val updated_at: String,
|
val updated_at: String,
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,204 @@
|
||||||
|
package com.example.doctor.Patients.Reports.Courses.TabLayout
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.CoursesAllAdapter
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.SportCoursModel
|
||||||
|
import com.example.doctor.Patients.Reports.CoursesListAdapter
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.databinding.FragmentCoursesAllBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
class CoursesAllFragment : Fragment(),CoursesAllAdapter.Listener {
|
||||||
|
private lateinit var binding: FragmentCoursesAllBinding
|
||||||
|
private val modelDoctor: DoctorViewModel by activityViewModels()
|
||||||
|
lateinit var adapterCours: CoursesAllAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
var sportCourses:List<SportCoursModel>?=null
|
||||||
|
var id: Int? = null
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentCoursesAllBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
initRcViewCours()
|
||||||
|
modelDoctor.id_patient.observe(viewLifecycleOwner){
|
||||||
|
id = it
|
||||||
|
GetAllCoursesSport()
|
||||||
|
}
|
||||||
|
|
||||||
|
modelDoctor.SportCoursList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
||||||
|
if(sportCourses != it){
|
||||||
|
sportCourses = it
|
||||||
|
adapterCours.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Вывод всех курсов
|
||||||
|
fun GetAllCoursesSport(){
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
binding.txtNull.visibility = View.VISIBLE
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetCoursAllPatient("Bearer $Tokens",id!!)
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.SportCoursList.value = List.courses
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализация списка
|
||||||
|
private fun initRcViewCours() = with(binding) {
|
||||||
|
rcView.layoutManager = GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
|
adapterCours = CoursesAllAdapter(this@CoursesAllFragment)
|
||||||
|
rcView.adapter = adapterCours
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun newInstance() = CoursesAllFragment()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClickSportCourses(item: SportCoursModel) {
|
||||||
|
AddSportPatient(id!!,item.id,14)
|
||||||
|
GetAllCoursesSport()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun AddSportPatient(id_patient:Int,id_course:Int,all_day:Int){
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val updatePassword= doctorApi.AddSportPatient("Bearer $Tokens",id_patient,id_course,all_day)
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = updatePassword.body()
|
||||||
|
val Nice = updatePassword.isSuccessful
|
||||||
|
val Code = updatePassword.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
GetAllCoursesSport()
|
||||||
|
modelDoctor.BtnSportCoursDoctorCurrent.value = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,208 @@
|
||||||
|
package com.example.doctor.Patients.Reports.Courses.TabLayout
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.CoursesYouAdapter
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.SportCoursModel
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Setting.Courses.Model.CoursesDoctorModel
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.databinding.FragmentCoursesYouBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
class CoursesYouFragment : Fragment(),CoursesYouAdapter.Listener {
|
||||||
|
private lateinit var binding:FragmentCoursesYouBinding
|
||||||
|
private val modelDoctor: DoctorViewModel by activityViewModels()
|
||||||
|
lateinit var adapterCours: CoursesYouAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
var sportCoursesDoctor:List<SportCoursModel>?=null
|
||||||
|
var id: Int? = null
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentCoursesYouBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
initRcViewCours()
|
||||||
|
|
||||||
|
modelDoctor.id_patient.observe(viewLifecycleOwner){
|
||||||
|
id = it
|
||||||
|
GetCoursesDoctor()
|
||||||
|
}
|
||||||
|
|
||||||
|
modelDoctor.SportCoursDoctorList.observe(viewLifecycleOwner){
|
||||||
|
if(sportCoursesDoctor!=it){
|
||||||
|
sportCoursesDoctor = it
|
||||||
|
adapterCours.submitList(it)
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetCoursesDoctor() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
binding.txtNull.visibility = View.VISIBLE
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetCoursesDoctorPatient("Bearer $Tokens",id!!)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctor.body()
|
||||||
|
val Nice = listCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.SportCoursDoctorList.value = List.courses_doctor
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
//Инициализация списка
|
||||||
|
private fun initRcViewCours() = with(binding) {
|
||||||
|
rcView.layoutManager = GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
|
adapterCours = CoursesYouAdapter(this@CoursesYouFragment)
|
||||||
|
rcView.adapter = adapterCours
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun newInstance() = CoursesYouFragment()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override fun onClickCourses(item: SportCoursModel) {
|
||||||
|
AddSportPatient(id!!,item.id,14)
|
||||||
|
GetCoursesDoctor()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun AddSportPatient(id_patient:Int,id_course:Int,all_day:Int){
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val updatePassword= doctorApi.AddSportPatient("Bearer $Tokens",id_patient,id_course,all_day)
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = updatePassword.body()
|
||||||
|
val Nice = updatePassword.isSuccessful
|
||||||
|
val Code = updatePassword.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
GetCoursesDoctor()
|
||||||
|
modelDoctor.BtnSportCoursDoctorCurrent.value = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,76 +0,0 @@
|
||||||
package com.example.doctor.Patients.Reports
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportModel
|
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportNoAdapter
|
|
||||||
import com.example.doctor.R
|
|
||||||
import com.example.doctor.databinding.ItemQbaBinding
|
|
||||||
import com.example.doctor.databinding.ItemSportCourseBinding
|
|
||||||
|
|
||||||
|
|
||||||
class CoursesAdapter(val listener_cours: CoursesAdapter.Listener) : ListAdapter<SportCoursModel, CoursesAdapter.Holder>(Comparator()) {
|
|
||||||
class Holder(view: View,val listener_cours: CoursesAdapter.Listener) :
|
|
||||||
RecyclerView.ViewHolder(view) {
|
|
||||||
|
|
||||||
val binding = ItemSportCourseBinding.bind(view)
|
|
||||||
|
|
||||||
var itemTemp: SportCoursModel? =
|
|
||||||
null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия
|
|
||||||
|
|
||||||
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
|
||||||
init {
|
|
||||||
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
|
||||||
itemTemp?.let { it1 -> listener_cours.onClickCoursAdd(it1) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("SuspiciousIndentation")
|
|
||||||
fun bind(item: SportCoursModel) = with(binding) {
|
|
||||||
txtCoursesSport.text = item.name
|
|
||||||
if(item.visibility == 1){
|
|
||||||
CVCours.setCardBackgroundColor(Color.parseColor("#83da83"))
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
CVCours.setCardBackgroundColor(Color.parseColor("#b6b6b6"))
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
|
||||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sport_course, parent, false)
|
|
||||||
return Holder(view,listener_cours)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: Holder, position: Int) {
|
|
||||||
val view = holder.bind(getItem(position))
|
|
||||||
}
|
|
||||||
|
|
||||||
class Comparator : DiffUtil.ItemCallback<SportCoursModel>() {
|
|
||||||
override fun areItemsTheSame(oldItem: SportCoursModel, newItem: SportCoursModel): Boolean {
|
|
||||||
return oldItem.id == newItem.id
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: SportCoursModel, newItem: SportCoursModel): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Интерфейс нажатия на кнопку удалить товар из корзины
|
|
||||||
interface Listener {
|
|
||||||
fun onClickCoursAdd(item: SportCoursModel)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
package com.example.doctor.Patients.Reports
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.util.Log
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.SportCoursModel
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.databinding.ItemSportCourseBinding
|
||||||
|
|
||||||
|
|
||||||
|
class CoursesListAdapter(val listener_courses: Listener) : ListAdapter<SportCoursModel, CoursesListAdapter.Holder>(
|
||||||
|
Comparator()
|
||||||
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
|
class Holder(view: View, val listener_courses: Listener): RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
|
//Для передачи данных
|
||||||
|
|
||||||
|
val binding = ItemSportCourseBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки
|
||||||
|
|
||||||
|
var itemTemp: SportCoursModel? =
|
||||||
|
null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия
|
||||||
|
|
||||||
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
|
init {
|
||||||
|
binding.CardViewCourses.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
//itemView.setEnabled(false)
|
||||||
|
//timerButtonDoubleButton(itemView)
|
||||||
|
itemTemp?.let { it1 -> listener_courses.onClickSportCourses(it1) }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressLint("SuspiciousIndentation")
|
||||||
|
fun bind(item: SportCoursModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
|
itemTemp = item
|
||||||
|
txtCoursesSport.text = item.name
|
||||||
|
if (item.visibility == 1) {
|
||||||
|
CVCours.setCardBackgroundColor(Color.parseColor("#83da83"))
|
||||||
|
Log.i("11111111111","sasdasdasdasdasadsdasda")
|
||||||
|
} else {
|
||||||
|
CVCours.setCardBackgroundColor(Color.parseColor("#b6b6b6"))
|
||||||
|
Log.i("2222222222222","sasdasdasdasdasadsdasda")
|
||||||
|
}
|
||||||
|
Log.i("ssadsdasda","sasdasdasdasdasadsdasda")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
|
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sport_course, parent, false)//Создаем(надуваем) list_item
|
||||||
|
return Holder(view, listener_courses)//Через Holder возврощаем view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
val view = holder.bind(getItem(position))//Заполняем по позиции карточку
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Comparator - сравнивает старый список и новый и если что-то изменилось, то работает с конкретным изменением списке, а не весь список переписывает
|
||||||
|
class Comparator : DiffUtil.ItemCallback<SportCoursModel>() {
|
||||||
|
override fun areItemsTheSame(oldItem: SportCoursModel, newItem: SportCoursModel): Boolean {//Тут лучше всего сравнивать по id//oldItem - элементы старого списка, newItem - элементы нового списка//Возврощает Boolean, тоесть есть изменения или нет
|
||||||
|
return oldItem.id == newItem.id//Сравниваем полностью весь список новы и старый, по очередно по одной карточке и по элементно, то есть нулевой элемент, первый, второй и т.д.. Но лучше сравнивать по id списки, а не просто весь список, так как это эфективнее, так как id уникальный(oldItem.id == newItem.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areContentsTheSame(oldItem: SportCoursModel, newItem: SportCoursModel): Boolean {//Утут нужно сравнивать весь спсок старых элементов и новых
|
||||||
|
return oldItem == newItem//Сравниваем полностью весь список новы и старый
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Интерфейс нажатия на кнопку удалить товар из корзины
|
||||||
|
interface Listener {
|
||||||
|
fun onClickSportCourses(item: SportCoursModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ class EditSportNoAdapter(val listener_sport: Listener) :
|
||||||
|
|
||||||
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
init {
|
init {
|
||||||
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
binding.btnYeyNo.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
itemTemp?.let { it1 -> listener_sport.onClickAppeals(it1) }
|
itemTemp?.let { it1 -> listener_sport.onClickAppeals(it1) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.example.doctor.Patients.Reports.Edit.TabLayout
|
package com.example.doctor.Patients.Reports.Edit.TabLayout
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -8,7 +9,12 @@ import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
import com.example.doctor.DoctorViewModel
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportYesAdapter
|
import com.example.doctor.Patients.Reports.Edit.EditSportYesAdapter
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportModel
|
import com.example.doctor.Patients.Reports.Edit.EditSportModel
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportNoAdapter
|
import com.example.doctor.Patients.Reports.Edit.EditSportNoAdapter
|
||||||
|
@ -33,8 +39,11 @@ class EditSportNoFragment : Fragment(),EditSportNoAdapter.Listener {
|
||||||
private val model: DoctorViewModel by activityViewModels()
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
var id_patient = 0;
|
var id_patient = 0;
|
||||||
|
|
||||||
|
var editNo:List<EditSportModel>?=null
|
||||||
|
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
@ -47,12 +56,29 @@ class EditSportNoFragment : Fragment(),EditSportNoAdapter.Listener {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
initRcViewDay()
|
initRcViewDay()
|
||||||
model.EditSportListNo.observe(viewLifecycleOwner){
|
model.EditSportListNo.observe(viewLifecycleOwner){
|
||||||
|
if(it!=null){
|
||||||
|
if(editNo!=it){
|
||||||
|
editNo = it
|
||||||
adapterNo.submitList(it)
|
adapterNo.submitList(it)
|
||||||
|
binding.txtNo.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
binding.txtNo.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
model.id_patient.observe(viewLifecycleOwner) {id->
|
model.id_patient.observe(viewLifecycleOwner) {id->
|
||||||
id_patient = id.toInt()
|
id_patient = id.toInt()
|
||||||
GetCoursesSportNo(id_patient)
|
GetCoursesSportNo(id_patient)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
btnClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun btnClick()=with(binding) {
|
||||||
|
CLLoad.setOnClickListener { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,7 +101,7 @@ class EditSportNoFragment : Fragment(),EditSportNoAdapter.Listener {
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val retrofit = Retrofit.Builder()
|
val retrofit = Retrofit.Builder()
|
||||||
.baseUrl("http://mobileapp.vmeda.org/api/")
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
.client(client)
|
.client(client)
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build()
|
.build()
|
||||||
|
@ -86,7 +112,8 @@ class EditSportNoFragment : Fragment(),EditSportNoAdapter.Listener {
|
||||||
|
|
||||||
|
|
||||||
//Получения списка пациентов
|
//Получения списка пациентов
|
||||||
fun GetCoursesSportYes(id_patient:Int) {
|
fun GetCoursesSportYes(id_patient:Int)= with(binding) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
@ -94,46 +121,124 @@ class EditSportNoFragment : Fragment(),EditSportNoAdapter.Listener {
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val sportEditList = sportEdit.body()
|
val List = sportEdit.body()
|
||||||
|
val Nice = sportEdit.isSuccessful
|
||||||
|
val Code = sportEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200){
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (sportEditList != null) {
|
if(Nice){
|
||||||
model.EditSportListYes.value = sportEditList.set_of_sports_exercises_yes
|
if (List != null) {
|
||||||
//adapterYes.submitList(sportEditList.set_of_sports_exercises_yes)
|
model.EditSportListYes.value = List.set_of_sports_exercises_yes
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(Code==500){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//Получения списка пациентов
|
//Получения списка пациентов
|
||||||
fun GetCoursesSportNo(id_patient:Int) {
|
fun GetCoursesSportNo(id_patient:Int)= with(binding) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val sportEdit = doctorApi.GetCoursesSportNo("Bearer $Tokens", id_patient)
|
val sportEdit = doctorApi.GetCoursesSportNo("Bearer $Tokens", id_patient)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
|
||||||
val sportEditList = sportEdit.body()
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = sportEdit.body()
|
||||||
|
val Nice = sportEdit.isSuccessful
|
||||||
|
val Code = sportEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200){
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (sportEditList != null) {
|
if(Nice){
|
||||||
model.EditSportListNo.value = sportEditList.set_of_sports_exercises_no
|
if (List != null) {
|
||||||
//adapterNo.submitList(sportEditList.set_of_sports_exercises_no)
|
model.EditSportListNo.value = List.set_of_sports_exercises_no
|
||||||
binding.txtNo.visibility = View.GONE
|
binding.txtNo.visibility = View.GONE
|
||||||
|
binding.CLLoad.visibility = View.GONE
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
binding.txtNo.visibility = View.VISIBLE
|
binding.txtNo.visibility = View.VISIBLE
|
||||||
|
binding.CLLoad.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(Code==500){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Получения списка пациентов
|
//Удаление упражнения из блока
|
||||||
fun UpdateBlockSportTasksNo(id:Int) {
|
fun UpdateBlockSportTasksNo(id:Int)= with(binding) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
@ -141,22 +246,62 @@ class EditSportNoFragment : Fragment(),EditSportNoAdapter.Listener {
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val sportNoList= NoEdit.body()
|
val List = NoEdit.body()
|
||||||
|
val Nice = NoEdit.isSuccessful
|
||||||
|
val Code = NoEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200){
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (sportNoList != null) {
|
if(Nice){
|
||||||
Toast(requireContext()).showCustomInfoToast(sportNoList.message, requireActivity())
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
GetCoursesSportYes(id_patient)
|
GetCoursesSportYes(id_patient)
|
||||||
GetCoursesSportNo(id_patient)
|
GetCoursesSportNo(id_patient)
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if (sportNoList != null) {
|
if (List != null) {
|
||||||
Toast(requireContext()).showCustomInfoToast(sportNoList.message, requireActivity())
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(Code==500){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -165,7 +310,7 @@ class EditSportNoFragment : Fragment(),EditSportNoAdapter.Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClickAppeals(item: EditSportModel) {
|
override fun onClickAppeals(item: EditSportModel) {
|
||||||
|
binding.CLLoad.visibility = View.VISIBLE
|
||||||
UpdateBlockSportTasksNo(item.id)
|
UpdateBlockSportTasksNo(item.id)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.example.doctor.Patients.Reports.Edit.TabLayout
|
package com.example.doctor.Patients.Reports.Edit.TabLayout
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
@ -9,7 +10,12 @@ import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
import com.example.doctor.DoctorViewModel
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportYesAdapter
|
import com.example.doctor.Patients.Reports.Edit.EditSportYesAdapter
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportModel
|
import com.example.doctor.Patients.Reports.Edit.EditSportModel
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportNoAdapter
|
import com.example.doctor.Patients.Reports.Edit.EditSportNoAdapter
|
||||||
|
@ -33,7 +39,10 @@ class EditSportYesFragment : Fragment(), EditSportYesAdapter.Listener {
|
||||||
val prefDoctorConclusion = ConclusionPref()
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
private val model: DoctorViewModel by activityViewModels()
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
var id_patient = 0;
|
var id_patient = 0;
|
||||||
|
var editYes:List<EditSportModel>?=null
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
@ -56,9 +65,25 @@ class EditSportYesFragment : Fragment(), EditSportYesAdapter.Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
model.EditSportListYes.observe(viewLifecycleOwner){
|
model.EditSportListYes.observe(viewLifecycleOwner){
|
||||||
|
if(it!=null){
|
||||||
|
if(editYes!=it){
|
||||||
|
editYes=it
|
||||||
adapterYes.submitList(it)
|
adapterYes.submitList(it)
|
||||||
|
binding.txtYes.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
binding.txtYes.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
btnClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun btnClick()=with(binding) {
|
||||||
|
CLLoad.setOnClickListener { }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Инициализация списка
|
//Инициализация списка
|
||||||
|
@ -82,7 +107,7 @@ class EditSportYesFragment : Fragment(), EditSportYesAdapter.Listener {
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val retrofit = Retrofit.Builder()
|
val retrofit = Retrofit.Builder()
|
||||||
.baseUrl("http://mobileapp.vmeda.org/api/")
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
.client(client)
|
.client(client)
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build()
|
.build()
|
||||||
|
@ -92,52 +117,138 @@ class EditSportYesFragment : Fragment(), EditSportYesAdapter.Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Получения списка пациентов
|
//Получения списка пациентов
|
||||||
fun GetCoursesSportYes(id_patient:Int) {
|
fun GetCoursesSportYes(id_patient:Int)=with(binding) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val sportEdit = doctorApi.GetCoursesSportYes("Bearer $Tokens", id_patient)
|
val sportEdit = doctorApi.GetCoursesSportYes("Bearer $Tokens", id_patient)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = sportEdit.body()
|
||||||
|
val Nice = sportEdit.isSuccessful
|
||||||
|
val Code = sportEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200){
|
||||||
|
//Если нету ошибок
|
||||||
|
if(Nice){
|
||||||
|
if (List != null) {
|
||||||
|
model.EditSportListYes.value = List.set_of_sports_exercises_yes
|
||||||
|
binding.txtYes.visibility = View.GONE
|
||||||
|
binding.CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
model.EditSportListYes.value = null
|
||||||
|
|
||||||
|
binding.txtYes.visibility = View.VISIBLE
|
||||||
|
binding.rcViewEditSportYes.visibility = View.GONE
|
||||||
|
binding.CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(Code==500){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val sportEditList = sportEdit.body()
|
val sportEditList = sportEdit.body()
|
||||||
|
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (sportEditList != null) {
|
|
||||||
model.EditSportListYes.value = sportEditList.set_of_sports_exercises_yes
|
|
||||||
binding.txtYes.visibility = View.GONE
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
binding.txtYes.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//Получения списка пациентов
|
//Получения списка пациентов
|
||||||
fun GetCoursesSportNo(id_patient:Int) {
|
fun GetCoursesSportNo(id_patient:Int)=with(binding) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val sportEdit = doctorApi.GetCoursesSportNo("Bearer $Tokens",id_patient)
|
val sportEdit = doctorApi.GetCoursesSportNo("Bearer $Tokens",id_patient)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val sportEditList = sportEdit.body()
|
val List = sportEdit.body()
|
||||||
|
val Nice = sportEdit.isSuccessful
|
||||||
|
val Code = sportEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200){
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (sportEditList != null) {
|
if(Nice){
|
||||||
model.EditSportListNo.value = sportEditList.set_of_sports_exercises_no
|
if (List != null) {
|
||||||
//adapterNo.submitList(sportEditList.set_of_sports_exercises_no)
|
model.EditSportListNo.value = List.set_of_sports_exercises_no
|
||||||
}
|
}
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(Code==500){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Получения списка пациентов
|
//Отключение упражнения
|
||||||
fun UpdateBlockSportTasksYes(id_pateint:Int,id_sports_tasks:Int) {
|
fun UpdateBlockSportTasksYes(id_pateint:Int,id_sports_tasks:Int)=with(binding) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
@ -145,21 +256,60 @@ class EditSportYesFragment : Fragment(), EditSportYesAdapter.Listener {
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val sportEditList = sportEdit.body()
|
val List = sportEdit.body()
|
||||||
|
val Nice = sportEdit.isSuccessful
|
||||||
|
val Code = sportEdit.code()
|
||||||
|
if(Code==429){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200){
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (sportEditList != null) {
|
if(Nice){
|
||||||
Toast(requireContext()).showCustomInfoToast(sportEditList.message, requireActivity())
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
GetCoursesSportYes(id_patient)
|
GetCoursesSportYes(id_patient)
|
||||||
GetCoursesSportNo(id_patient)
|
GetCoursesSportNo(id_patient)
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if (sportEditList != null) {
|
if (List != null) {
|
||||||
Toast(requireContext()).showCustomInfoToast(sportEditList.message, requireActivity())
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(Code==500){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,6 +318,7 @@ class EditSportYesFragment : Fragment(), EditSportYesAdapter.Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClickAppeals(item: EditSportModel) {
|
override fun onClickAppeals(item: EditSportModel) {
|
||||||
|
binding.CLLoad.visibility = View.VISIBLE
|
||||||
UpdateBlockSportTasksYes(id_patient, item.id)
|
UpdateBlockSportTasksYes(id_patient, item.id)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.example.doctor.Patients.Reports
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.transition.TransitionInflater
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -16,10 +17,29 @@ import com.example.doctor.DoctorViewModel
|
||||||
import com.example.doctor.Patients.PatientsListFragment
|
import com.example.doctor.Patients.PatientsListFragment
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportFragment
|
import com.example.doctor.Patients.Reports.Edit.EditSportFragment
|
||||||
import com.example.doctor.Pref.ConclusionPref
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.R as R_D
|
||||||
|
import android.R
|
||||||
|
import android.content.Intent
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import com.example.doctor.Adapter.VpAdapter
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Model.PatientAllModel
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.TabLayout.CoursesAllFragment
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.TabLayout.CoursesYouFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
import com.example.doctor.Retrofit.DoctorApi
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.AllSportCoursesDoctorFragment
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.YourSportCoursesDoctorFragment
|
||||||
import com.example.doctor.Toast.showCustomInfoToast
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.Toast.showCustomNiceToast
|
||||||
import com.example.doctor.databinding.FragmentPatientsBinding
|
import com.example.doctor.databinding.FragmentPatientsBinding
|
||||||
import com.example.doctor.databinding.ItemQuestionnaireAfterBinding
|
import com.example.doctor.databinding.ItemQuestionnaireAfterBinding
|
||||||
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
@ -30,18 +50,42 @@ import retrofit2.converter.gson.GsonConverterFactory
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
|
|
||||||
|
|
||||||
class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
class PatientFragment : Fragment() {
|
||||||
private lateinit var binding: FragmentPatientsBinding
|
private lateinit var binding: FragmentPatientsBinding
|
||||||
private val model: DoctorViewModel by activityViewModels()
|
private val modelDoctor: DoctorViewModel by activityViewModels()
|
||||||
lateinit var adapter: QBBAdapter
|
lateinit var adapter: QBBAdapter
|
||||||
lateinit var adapterCours: CoursesAdapter
|
lateinit var adapterCours: CoursesListAdapter
|
||||||
private lateinit var doctorApi: DoctorApi
|
private lateinit var doctorApi: DoctorApi
|
||||||
val prefDoctorConclusion = ConclusionPref()
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
var id: Int? = null
|
var id: Int? = null
|
||||||
var block = ""
|
var block = ""
|
||||||
var pause = ""
|
var pause = ""
|
||||||
var id_sport = ""
|
var id_sport = ""
|
||||||
|
|
||||||
|
var btnSC = 0;
|
||||||
|
|
||||||
|
var idPatient = 0;
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
//Для 10 сек обновления
|
||||||
|
var qba:List<QBAModel>?=null
|
||||||
|
var patientAll:PatientAllModel?=null
|
||||||
|
|
||||||
|
private val tList = listOf(
|
||||||
|
"Все",
|
||||||
|
"Ваши",
|
||||||
|
)
|
||||||
|
|
||||||
|
//Список с фрагментами для переключения
|
||||||
|
private val flist = listOf(
|
||||||
|
CoursesAllFragment.newInstance(),
|
||||||
|
CoursesYouFragment.newInstance(),
|
||||||
|
)
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
@ -54,32 +98,56 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
initRcViewDay()
|
initRcViewDay()
|
||||||
initRcViewCours()
|
init()
|
||||||
|
modelDoctor.qbaList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
||||||
model.qbaList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
if(qba != it){
|
||||||
|
qba = it
|
||||||
adapter.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
adapter.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
||||||
|
// binding.txtNullQBA.visibility = View.GONE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
model.SportCoursList.observe(viewLifecycleOwner) {//viewLifecycleOwner - следит за циклом жизни fragment
|
idPatient = prefDoctorConclusion.conclusionIdPatient(requireContext())
|
||||||
adapterCours.submitList(it)//Напрямую переадем созданный список в adapter(ProductAdapter)
|
|
||||||
|
modelDoctor.BtnSportCoursDoctorCurrent.observe(viewLifecycleOwner){
|
||||||
|
if(it == 1){
|
||||||
|
binding.btnClearSportPatient.setCardBackgroundColor(Color.parseColor("#D86767"))
|
||||||
}
|
}
|
||||||
|
else if(it == 2){
|
||||||
|
binding.btnClearSportPatient.setCardBackgroundColor(Color.parseColor("#A9D867"))
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
binding.btnClearSportPatient.setCardBackgroundColor(Color.parseColor("#D86767"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val inflater = TransitionInflater.from(requireContext())
|
||||||
|
enterTransition = inflater.inflateTransition(R_D.transition.slide_right)
|
||||||
|
|
||||||
binding.btnExit.setOnClickListener {
|
binding.btnExit.setOnClickListener {
|
||||||
//Вывод фрагмента на активити при первоначальной загрузке
|
exitTransition = inflater.inflateTransition(R_D.transition.slide_right)
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
|
||||||
?.replace(
|
activity?.finish()
|
||||||
com.example.doctor.R.id.CLMainFragment,
|
|
||||||
PatientsListFragment.newInstance()
|
|
||||||
)
|
|
||||||
?.commit()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
popMenu()
|
popMenu()
|
||||||
|
|
||||||
model.patientCurrent.observe(viewLifecycleOwner) {
|
//Вывод экрана
|
||||||
|
viewPatient()
|
||||||
|
|
||||||
|
//Получаем id
|
||||||
|
modelDoctor.patientId.observe(viewLifecycleOwner){
|
||||||
|
Log.i("adsa","as111111111111dsadasd")
|
||||||
|
}
|
||||||
|
|
||||||
|
//Вывод данных
|
||||||
|
modelDoctor.patientCurrent.observe(viewLifecycleOwner) {
|
||||||
|
if(patientAll !=it){
|
||||||
|
patientAll = it
|
||||||
binding.txtLogin.text = it.login
|
binding.txtLogin.text = it.login
|
||||||
id = it.id
|
id = it.id
|
||||||
model.id_patient.value = id
|
modelDoctor.id_patient.value = id
|
||||||
block = it.block.toString()
|
block = it.block.toString()
|
||||||
pause = it.pause.toString()
|
pause = it.pause.toString()
|
||||||
id_sport = it.id_sport_patient.toString()
|
id_sport = it.id_sport_patient.toString()
|
||||||
|
@ -111,41 +179,122 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
Log.i("id_sport","$id_sport")
|
Log.i("id_sport","$id_sport")
|
||||||
Log.i("id_sport123","$it")
|
Log.i("id_sport123","$it")
|
||||||
//Проверка есть ли курс
|
//Проверка есть ли курс
|
||||||
clearSportPatient(id_sport)
|
btnClearSportPatient(id_sport)
|
||||||
|
|
||||||
|
|
||||||
sport()
|
|
||||||
report()
|
report()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
btnCreate()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun btnCreate() = with(binding) {
|
||||||
|
CVEditCard.setOnClickListener { }
|
||||||
|
CVSportCourses.setOnClickListener { }
|
||||||
|
CVReportCard.setOnClickListener { }
|
||||||
|
CVEditSportCard.setOnClickListener { }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Функция подключения переключения
|
||||||
|
private fun init() = with(binding) {
|
||||||
|
val adapter = VpAdapter(activity as FragmentActivity, flist)
|
||||||
|
vpCourses.adapter = adapter
|
||||||
|
|
||||||
// //Swipe down
|
//Переключения (связываем таблаяут(переключатель) с viewpager, чтобы переключать фрагменты)
|
||||||
// binding.refreshLayout.setOnRefreshListener{
|
TabLayoutMediator(tabLayoutCourses, vpCourses) { tab, pos ->
|
||||||
// GetPatientID()
|
tab.text =
|
||||||
// binding.refreshLayout.isRefreshing = false
|
tList[pos]//tab - нажатая кнопка, pos - позиция кнопки, tList[pos] - передаем название по полученной позиции
|
||||||
// }
|
}.attach()// attach() - чтобы все переключалось, а не вывадило постоянно один экран
|
||||||
|
|
||||||
|
//Изменения цвета в зависомости на каком из tabLayout вы находитесь
|
||||||
|
binding.tabLayoutCourses.setTabTextColors(
|
||||||
|
getResources().getColor(com.example.doctor.R.color.black),
|
||||||
|
getResources().getColor(com.example.doctor.R.color.white)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
private fun GetPatientID() {
|
|
||||||
CreatRetrofit()
|
private fun viewPatient() {
|
||||||
|
val viewPatient = prefDoctorConclusion.conclusionViewPatient(requireContext())
|
||||||
|
val idPatient = 23412
|
||||||
|
Log.i("viewPatient1",viewPatient.toString())
|
||||||
|
Log.i("idPatient1",viewPatient.toString())
|
||||||
|
if(viewPatient ==1 && idPatient !=0 && idPatient !=null){
|
||||||
|
GetPatientID(idPatient)
|
||||||
|
prefDoctorClear.clearIdPatient(requireContext())
|
||||||
|
prefDoctorClear.clearViewPatient(requireContext())
|
||||||
|
Log.i("viewPatient2",viewPatient.toString())
|
||||||
|
Log.i("idPatient2",viewPatient.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
private fun GetPatientID(idPatient: Int) {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val listPatient = doctorApi.GetPatientID("Bearer $Tokens")
|
val listPatient = doctorApi.GetPatientID("Bearer $Tokens", idPatient)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val patientId = listPatient.body()
|
val List = listPatient.body()
|
||||||
|
val Nice = listPatient.isSuccessful
|
||||||
|
val Code = listPatient.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (patientId != null) {
|
if (Nice) {
|
||||||
model.patientCurrent.value = patientId
|
if (List != null) {
|
||||||
|
modelDoctor.patientCurrent.value = List
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun popMenu() {
|
private fun popMenu() {
|
||||||
|
@ -182,35 +331,161 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
|
|
||||||
//Получения списка анкет ДО и ПОСЛЕ для пациента
|
//Получения списка анкет ДО и ПОСЛЕ для пациента
|
||||||
fun ClearSportPaient(){
|
fun ClearSportPaient(){
|
||||||
CreatRetrofit()
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val listcsp = doctorApi.ClearPatientSport("Bearer $Tokens",id!!)
|
val listcsp = doctorApi.ClearPatientSport("Bearer $Tokens",id!!)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
|
||||||
val csp = listcsp.body()
|
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listcsp.body()
|
||||||
|
val Nice = listcsp.isSuccessful
|
||||||
|
val Code = listcsp.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (csp != null) {
|
if (Nice) {
|
||||||
id_sport = "null"
|
if (List != null) {
|
||||||
binding.btnClearSportPatient.setCardBackgroundColor(Color.parseColor("#D86767"))
|
GetAllCoursesSport()
|
||||||
Toast(requireContext()).showCustomInfoToast(csp.message, requireActivity())
|
GetCoursesDoctor()
|
||||||
|
modelDoctor.BtnSportCoursDoctorCurrent.value = 1
|
||||||
|
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Toast(requireContext()).showCustomInfoToast("${csp?.message}", requireActivity())
|
Toast(requireContext()).showCustomInfoToast("${List?.message}", requireActivity())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun clearSportPatient(id_sport:String) {
|
|
||||||
if (id_sport == "null") {
|
|
||||||
binding.btnClearSportPatient.setCardBackgroundColor(Color.parseColor("#D86767"))
|
|
||||||
} else {
|
} else {
|
||||||
binding.btnClearSportPatient.setCardBackgroundColor(Color.parseColor("#A9D867"))
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetCoursesDoctor() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetCoursesDoctorPatient("Bearer $Tokens",id!!)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctor.body()
|
||||||
|
val Nice = listCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.SportCoursDoctorList.value = List.courses_doctor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Вывод всех курсов
|
||||||
|
fun GetAllCoursesSport(){
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetCoursAllPatient("Bearer $Tokens",id!!)
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.SportCoursList.value = List.courses
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun btnClearSportPatient(id_sport:String) {
|
||||||
|
if (id_sport == "null") {
|
||||||
|
modelDoctor.BtnSportCoursDoctorCurrent.value = 1
|
||||||
|
} else {
|
||||||
|
modelDoctor.BtnSportCoursDoctorCurrent.value = 2
|
||||||
}
|
}
|
||||||
binding.btnClearSportPatient.setOnClickListener {
|
binding.btnClearSportPatient.setOnClickListener {
|
||||||
|
|
||||||
|
@ -220,25 +495,53 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
|
|
||||||
//Получения списка анкет ДО и ПОСЛЕ для пациента
|
//Получения списка анкет ДО и ПОСЛЕ для пациента
|
||||||
fun QBAPatientList()=with(binding){
|
fun QBAPatientList()=with(binding){
|
||||||
CreatRetrofit()
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val listProduct = doctorApi.GetPatientBAQiestionar("Bearer $Tokens",id!!)
|
val listProduct = doctorApi.GetPatientBAQiestionar("Bearer $Tokens",id!!)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val qbapatientList = listProduct.body()
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (qbapatientList != null) {
|
if (Nice) {
|
||||||
if(qbapatientList.questionnaire !=null){
|
if (List != null) {
|
||||||
|
if(List.questionnaire !=null){
|
||||||
txtNullQBA.visibility = View.GONE
|
txtNullQBA.visibility = View.GONE
|
||||||
model.qbaList.value = qbapatientList.questionnaire
|
modelDoctor.qbaList.value = List.questionnaire
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -267,17 +570,27 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
|
|
||||||
//Блокировка пациента
|
//Блокировка пациента
|
||||||
fun UpdateBlockPatient(){
|
fun UpdateBlockPatient(){
|
||||||
CreatRetrofit()
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val listProduct = doctorApi.UpdateBlockAccountPatient("Bearer $Tokens", id!!)
|
val listProduct = doctorApi.UpdateBlockAccountPatient("Bearer $Tokens", id!!)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
|
||||||
val patientList = listProduct.body()
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (patientList != null) {
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
if (block == "null") {
|
if (block == "null") {
|
||||||
block = "true"
|
block = "true"
|
||||||
binding.CVBlock.setCardBackgroundColor(Color.parseColor("#D86767"))
|
binding.CVBlock.setCardBackgroundColor(Color.parseColor("#D86767"))
|
||||||
|
@ -289,23 +602,51 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Блокировка пациента
|
//Блокировка пациента
|
||||||
fun UpdatePausePatient(){
|
fun UpdatePausePatient(){
|
||||||
CreatRetrofit()
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val listProduct = doctorApi.UpdatePauseAccountPatient("Bearer $Tokens", id!!)
|
val listProduct = doctorApi.UpdatePauseAccountPatient("Bearer $Tokens", id!!)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
|
||||||
val patientList = listProduct.body()
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (patientList != null) {
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
if (pause == "null") {
|
if (pause == "null") {
|
||||||
pause = "true"
|
pause = "true"
|
||||||
binding.CVPause.setCardBackgroundColor(Color.parseColor("#D86767"))
|
binding.CVPause.setCardBackgroundColor(Color.parseColor("#D86767"))
|
||||||
|
@ -318,105 +659,215 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Вывод всех курсов
|
}
|
||||||
fun GetAllCoursesSport(){
|
|
||||||
CreatRetrofit()
|
|
||||||
|
|
||||||
|
//Обновленеи логина
|
||||||
|
fun UpdatePatientLogin(id:Int,login:String){
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val listProduct = doctorApi.GetCoursAllPatient("Bearer $Tokens",id!!)
|
val updateLogin = doctorApi.UpdatePatientLogin("Bearer $Tokens",id,login)
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val sportCourses = listProduct.body()
|
val List = updateLogin.body()
|
||||||
|
val Nice = updateLogin.isSuccessful
|
||||||
|
val Code = updateLogin.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (sportCourses != null) {
|
if (Nice) {
|
||||||
model.SportCoursList.value = sportCourses.courses
|
if (List != null) {
|
||||||
binding.CVSport.visibility = View.VISIBLE
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
//Инициализируем Retrofit
|
startActivity(intetn)
|
||||||
private fun CreatRetrofit() {
|
}
|
||||||
val interceptor = HttpLoggingInterceptor()
|
else if (Code == 401) {
|
||||||
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
val client = OkHttpClient
|
startActivity(intetn)
|
||||||
.Builder()
|
}
|
||||||
.addInterceptor(interceptor)
|
}
|
||||||
.build()
|
}
|
||||||
|
} else {
|
||||||
val retrofit = Retrofit.Builder()
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
.baseUrl("http://mobileapp.vmeda.org/api/")
|
activity?.finish()
|
||||||
.client(client)
|
startActivity(intetn)
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
}
|
||||||
.build()
|
|
||||||
|
|
||||||
doctorApi = retrofit.create(DoctorApi::class.java)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Обновленеи пароля
|
||||||
|
fun UpdatePatientPassword(id:Int,password:String){
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val updatePassword= doctorApi.UpdatePatientPassword("Bearer $Tokens",id,password)
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = updatePassword.body()
|
||||||
|
val Nice = updatePassword.isSuccessful
|
||||||
|
val Code = updatePassword.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private fun sport() {
|
private fun sport() {
|
||||||
binding.btnSport.setOnClickListener {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun report() = with(binding) {
|
private fun report() = with(binding) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
btnExitPatientFragment.setOnClickListener {
|
btnExitPatientFragment.setOnClickListener {
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.replace(com.example.doctor.R.id.CLMainListPatient, PatientsListFragment.newInstance())
|
?.replace(com.example.doctor.R.id.CLMainListPatient, PatientsListFragment.newInstance())
|
||||||
?.commit()
|
?.commit()
|
||||||
|
//this@PatientFragment.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnReport.setOnClickListener {
|
btnReport.setOnClickListener {
|
||||||
binding.CVReport.visibility = View.VISIBLE
|
CVReport.visibility = View.VISIBLE
|
||||||
QBAPatientList()
|
QBAPatientList()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnSport.setOnClickListener {
|
btnSport.setOnClickListener {
|
||||||
GetAllCoursesSport()
|
binding.CVSport.visibility = View.VISIBLE
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnCloseReport.setOnClickListener {
|
btnCloseReport.setOnClickListener {
|
||||||
binding.CVReport.visibility = View.GONE
|
CVReport.visibility = View.GONE
|
||||||
initRcViewDay()
|
initRcViewDay()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnCloseReport2.setOnClickListener {
|
btnClouseEditSport.setOnClickListener {
|
||||||
binding.CVSport.visibility = View.GONE
|
CVEditSport.visibility = View.GONE
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
binding.btnCloseBefore.setOnClickListener {
|
|
||||||
binding.CVQB.visibility = View.GONE
|
|
||||||
}
|
|
||||||
binding.btnCloseAfter.setOnClickListener {
|
|
||||||
binding.CVQA.visibility = View.GONE
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
binding.CVReport.setOnClickListener {
|
|
||||||
binding.CVReport.visibility = View.GONE
|
|
||||||
initRcViewDay()
|
initRcViewDay()
|
||||||
}
|
}
|
||||||
binding.CVSport.setOnClickListener {
|
CVEditSport.setOnClickListener {
|
||||||
binding.CVSport.visibility = View.GONE
|
CVEditSport.visibility = View.GONE
|
||||||
|
initRcViewDay()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.CVReportList.setOnClickListener {
|
CVEditPatient.setOnClickListener{
|
||||||
|
CVEditPatient.visibility = View.GONE
|
||||||
|
initRcViewDay()
|
||||||
|
}
|
||||||
|
btnClouseEditPatient.setOnClickListener{
|
||||||
|
CVEditPatient.visibility = View.GONE
|
||||||
|
initRcViewDay()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
btnCloseReport2.setOnClickListener {
|
||||||
|
CVSport.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
btnCloseBefore.setOnClickListener {
|
||||||
|
CVQB.visibility = View.GONE
|
||||||
|
}
|
||||||
|
btnCloseAfter.setOnClickListener {
|
||||||
|
CVQA.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CVReport.setOnClickListener {
|
||||||
|
CVReport.visibility = View.GONE
|
||||||
|
initRcViewDay()
|
||||||
|
}
|
||||||
|
CVSport.setOnClickListener {
|
||||||
|
CVSport.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
CVReportList.setOnClickListener {
|
||||||
|
}
|
||||||
|
|
||||||
|
btnEditPatient.setOnClickListener {
|
||||||
|
CVEditPatient.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
//Переход на страницу редактирования курса
|
//Переход на страницу редактирования курса
|
||||||
binding.btnEditSport.setOnClickListener{
|
binding.btnEditSport.setOnClickListener{
|
||||||
binding.CVEditSport.visibility = View.VISIBLE
|
binding.CVEditSport.visibility = View.VISIBLE
|
||||||
|
@ -424,26 +875,49 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.replace(com.example.doctor.R.id.CLEditSport, EditSportFragment.newInstance())
|
?.replace(com.example.doctor.R.id.CLEditSport, EditSportFragment.newInstance())
|
||||||
?.commit()
|
?.commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Нажатие на кнопку для обновления логина
|
||||||
|
btnUpdateLogin.setOnClickListener{
|
||||||
|
val login = edLogin.text.toString()
|
||||||
|
if(login.count() != 0){
|
||||||
|
if(login.count() > 3){
|
||||||
|
UpdatePatientLogin(id!!,login)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Toast(requireContext()).showCustomInfoToast("Логин слишком короткий", requireActivity())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Toast(requireContext()).showCustomInfoToast("Поле пустое", requireActivity())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Нажатие на кнопку для обновления пароля
|
||||||
|
btnUpdatePassword.setOnClickListener{
|
||||||
|
val password = edPassword.text.toString()
|
||||||
|
if(password.count() != 0){
|
||||||
|
if(password.count() > 10){
|
||||||
|
UpdatePatientPassword(id!!,password)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Toast(requireContext()).showCustomInfoToast("Пароль слишком короткий", requireActivity())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Toast(requireContext()).showCustomInfoToast("Поле пустое", requireActivity())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Инициализация списка
|
//Инициализация списка
|
||||||
private fun initRcViewDay() = with(binding) {
|
private fun initRcViewDay() = with(binding) {
|
||||||
RCView.layoutManager =
|
RCView.layoutManager = GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
|
||||||
adapter = QBBAdapter()
|
adapter = QBBAdapter()
|
||||||
RCView.adapter = adapter
|
RCView.adapter = adapter
|
||||||
}
|
}
|
||||||
|
|
||||||
//Инициализация списка
|
|
||||||
private fun initRcViewCours() = with(binding) {
|
|
||||||
rcVieeSportCourses.layoutManager = GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
|
||||||
adapterCours = CoursesAdapter(this@PatientFragment)
|
|
||||||
rcVieeSportCourses.adapter = adapterCours
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fun closeViewCard() {
|
fun closeViewCard() {
|
||||||
binding.txtLogin.text = ""
|
binding.txtLogin.text = ""
|
||||||
|
@ -461,13 +935,11 @@ class PatientFragment : Fragment(),CoursesAdapter.Listener {
|
||||||
fun newInstance() = PatientFragment()
|
fun newInstance() = PatientFragment()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClickCoursAdd(item: SportCoursModel) {
|
|
||||||
if(id_sport == "" || id_sport == null){
|
|
||||||
Toast(requireContext()).showCustomInfoToast("Сначалоа очистите курс", requireActivity())
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
Toast(requireContext()).showCustomInfoToast("Курс добавлен", requireActivity())
|
|
||||||
//ТУТ ДОЛЖНА БЫТЬ ФУНКЦИЯ ДЛЯ ДОБАВЛЕНИЯ КУРСА ПАЦИЕНТУ
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -17,8 +17,8 @@ data class QBAModel(
|
||||||
val eightb: Int,
|
val eightb: Int,
|
||||||
val nineb: Int,
|
val nineb: Int,
|
||||||
|
|
||||||
|
val statusa: Int,
|
||||||
val ida: Int,
|
val ida: Int,
|
||||||
//val statusa: Int,
|
|
||||||
val onea: Int,
|
val onea: Int,
|
||||||
val twoa: Int,
|
val twoa: Int,
|
||||||
val threea: Int,
|
val threea: Int,
|
||||||
|
|
|
@ -16,7 +16,8 @@ class QBBAdapter() : ListAdapter<QBAModel, QBBAdapter.Holder>(Comparator()) {
|
||||||
class Holder(view: View) :
|
class Holder(view: View) :
|
||||||
RecyclerView.ViewHolder(view) {
|
RecyclerView.ViewHolder(view) {
|
||||||
|
|
||||||
val binding = ItemQbaBinding.bind(view)
|
val binding = ItemQbaBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressLint("SuspiciousIndentation")
|
@SuppressLint("SuspiciousIndentation")
|
||||||
|
@ -42,18 +43,6 @@ class QBBAdapter() : ListAdapter<QBAModel, QBBAdapter.Holder>(Comparator()) {
|
||||||
CVB.setCardBackgroundColor(Color.parseColor("#ABDA83"))
|
CVB.setCardBackgroundColor(Color.parseColor("#ABDA83"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if(item.ninea == 1){
|
|
||||||
txtStatusA.text = "Плохо"
|
|
||||||
CVA.setCardBackgroundColor(Color.parseColor("#DA8383"))
|
|
||||||
}
|
|
||||||
else if(item.onea >= 6 || item.threea == 1 ||item.sixa == 1 ||item.eighta == 1 ||item.elevena == 1){
|
|
||||||
txtStatusA.text = "Средне"
|
|
||||||
CVA.setCardBackgroundColor(Color.parseColor("#DABA83"))
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
txtStatusA.text= "Хорошо"
|
|
||||||
CVA.setCardBackgroundColor(Color.parseColor("#ABDA83"))
|
|
||||||
}
|
|
||||||
|
|
||||||
txtB1.text = item.oneb.toString()
|
txtB1.text = item.oneb.toString()
|
||||||
if(item.oneb==0){
|
if(item.oneb==0){
|
||||||
|
@ -119,10 +108,10 @@ class QBBAdapter() : ListAdapter<QBAModel, QBBAdapter.Holder>(Comparator()) {
|
||||||
|
|
||||||
if (item.eightb == 1) {
|
if (item.eightb == 1) {
|
||||||
txtB8.text = "Да"
|
txtB8.text = "Да"
|
||||||
CLQB8.setBackgroundColor(Color.parseColor("#C6DF8686"))
|
CLQB8.setBackgroundColor(Color.parseColor("#C686DF8F"))
|
||||||
} else {
|
} else {
|
||||||
txtB8.text = "Нет"
|
txtB8.text = "Нет"
|
||||||
CLQB8.setBackgroundColor(Color.parseColor("#C686DF8F"))
|
CLQB8.setBackgroundColor(Color.parseColor("#C6DF8686"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.nineb == 1) {
|
if (item.nineb == 1) {
|
||||||
|
@ -133,6 +122,20 @@ class QBBAdapter() : ListAdapter<QBAModel, QBBAdapter.Holder>(Comparator()) {
|
||||||
CLQB9.setBackgroundColor(Color.parseColor("#C686DF8F"))
|
CLQB9.setBackgroundColor(Color.parseColor("#C686DF8F"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Если анкета после была заполнена
|
||||||
|
if(item.statusa == 1){
|
||||||
|
if(item.ninea == 1){
|
||||||
|
txtStatusA.text = "Плохо"
|
||||||
|
CVA.setCardBackgroundColor(Color.parseColor("#DA8383"))
|
||||||
|
}
|
||||||
|
else if(item.onea >= 6 || item.threea == 1 ||item.sixa == 1 ||item.eighta == 1 ||item.elevena == 1){
|
||||||
|
txtStatusA.text = "Средне"
|
||||||
|
CVA.setCardBackgroundColor(Color.parseColor("#DABA83"))
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
txtStatusA.text= "Хорошо"
|
||||||
|
CVA.setCardBackgroundColor(Color.parseColor("#ABDA83"))
|
||||||
|
}
|
||||||
|
|
||||||
txtA1.text = item.onea.toString()
|
txtA1.text = item.onea.toString()
|
||||||
if(item.onea==0){
|
if(item.onea==0){
|
||||||
|
@ -229,12 +232,35 @@ class QBBAdapter() : ListAdapter<QBAModel, QBBAdapter.Holder>(Comparator()) {
|
||||||
|
|
||||||
if (item.twelvea == 1) {
|
if (item.twelvea == 1) {
|
||||||
txtA12.text = "Да"
|
txtA12.text = "Да"
|
||||||
CLQA12.setBackgroundColor(Color.parseColor("#C6DF8686"))
|
CLQA12.setBackgroundColor(Color.parseColor("#C686DF8F"))
|
||||||
} else {
|
} else {
|
||||||
txtA12.text = "Нет"
|
txtA12.text = "Нет"
|
||||||
CLQA12.setBackgroundColor(Color.parseColor("#C686DF8F"))
|
CLQA12.setBackgroundColor(Color.parseColor("#C6DF8686"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
//Если анкета ПОСЛЕ небыла заполнена
|
||||||
|
txtStatusA.text = "ПУСТО"
|
||||||
|
txtStatusA.setTextColor(Color.parseColor("#FFFFFF"))
|
||||||
|
CVA.setCardBackgroundColor(Color.parseColor("#000000"))
|
||||||
|
CVColorAfter.setCardBackgroundColor(Color.parseColor("#FF8E8E8E"))
|
||||||
|
|
||||||
|
txtA1.text = ""
|
||||||
|
txtA2.text = ""
|
||||||
|
txtA3.text = ""
|
||||||
|
txtA4.text = ""
|
||||||
|
txtA5.text = ""
|
||||||
|
txtA6.text = ""
|
||||||
|
txtA7.text = ""
|
||||||
|
txtA8.text = ""
|
||||||
|
txtA9.text = ""
|
||||||
|
txtA10.text = ""
|
||||||
|
txtA11.text = ""
|
||||||
|
txtA12.text = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -259,6 +285,7 @@ class QBBAdapter() : ListAdapter<QBAModel, QBBAdapter.Holder>(Comparator()) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,173 @@
|
||||||
|
package com.example.doctor.Patients.TabLayoutPatient
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ArrayAdapter
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Adapter.PatientListAdapter
|
||||||
|
import com.example.doctor.Patients.Model.PatientAllModel
|
||||||
|
import com.example.doctor.Patients.Model.PatientIdModel
|
||||||
|
import com.example.doctor.Patients.PatientActivity
|
||||||
|
import com.example.doctor.Patients.Reports.PatientFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.databinding.FragmentActiveCoursesPatientBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
|
||||||
|
class ActiveCoursesPatientFragment : Fragment(),PatientListAdapter.Listener {
|
||||||
|
private lateinit var binding:FragmentActiveCoursesPatientBinding
|
||||||
|
private val modelDoctor: DoctorViewModel by activityViewModels()
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
|
lateinit var adapterPatient: PatientListAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
var patientYesList:List<PatientAllModel>?=null
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentActiveCoursesPatientBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
initRcViewDay()
|
||||||
|
GetPatientList()
|
||||||
|
|
||||||
|
modelDoctor.PatientActiveList.observe(viewLifecycleOwner){
|
||||||
|
if(patientYesList!=it){
|
||||||
|
patientYesList=it
|
||||||
|
adapterPatient.submitList(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализация списка
|
||||||
|
private fun initRcViewDay() = with(binding) {
|
||||||
|
rcView.layoutManager =
|
||||||
|
GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
|
adapterPatient = PatientListAdapter(this@ActiveCoursesPatientFragment)
|
||||||
|
rcView.adapter = adapterPatient
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun GetPatientList() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetPatientAllActive("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
modelDoctor.PatientActiveList.value = List.patient
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun newInstance() = ActiveCoursesPatientFragment()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClickPatient(item: PatientAllModel) {
|
||||||
|
|
||||||
|
//Вывод фрагмента на активити при первоначальной загрузке
|
||||||
|
// activity?.supportFragmentManager?.beginTransaction()
|
||||||
|
// ?.replace(com.example.doctor.R.id.CLMainPatient, PatientFragment.newInstance())
|
||||||
|
// ?.commit()
|
||||||
|
// prefDoctorSave.saveIdPatient(requireContext(),item.id!!)
|
||||||
|
// prefDoctorSave.saveViewPatient(requireContext(),1)
|
||||||
|
//modelDoctor.patientId.value = PatientIdModel(item.id!!)
|
||||||
|
|
||||||
|
prefDoctorSave.saveIdPatient(requireContext(),item.id!!)
|
||||||
|
prefDoctorSave.saveViewPatient(requireContext(),1)
|
||||||
|
val intetn = Intent(requireContext(), PatientActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
|
||||||
|
|
||||||
|
// dataModel.patientList.value = 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,173 @@
|
||||||
|
package com.example.doctor.Patients.TabLayoutPatient
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DataModel
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Patients.Adapter.PatientListAdapter
|
||||||
|
import com.example.doctor.Patients.Model.PatientAllModel
|
||||||
|
import com.example.doctor.Patients.Model.PatientIdModel
|
||||||
|
import com.example.doctor.Patients.PatientActivity
|
||||||
|
import com.example.doctor.Patients.Reports.PatientFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.databinding.FragmentNotActiveCoursesPatientBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
|
||||||
|
class NotActiveCoursesPatientFragment : Fragment(),PatientListAdapter.Listener {
|
||||||
|
private lateinit var binding:FragmentNotActiveCoursesPatientBinding
|
||||||
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
private val dataModel: DataModel by activityViewModels()//Для передачи данных
|
||||||
|
lateinit var adapterPatient: PatientListAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
|
|
||||||
|
//Список не активных пациентов
|
||||||
|
var patientNoList: List<PatientAllModel>? = null
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentNotActiveCoursesPatientBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
initRcViewDay()
|
||||||
|
GetPatientList()
|
||||||
|
|
||||||
|
model.PatientNotList.observe(viewLifecycleOwner){
|
||||||
|
if(patientNoList != it){
|
||||||
|
patientNoList = it
|
||||||
|
adapterPatient.submitList(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализация списка
|
||||||
|
private fun initRcViewDay() = with(binding) {
|
||||||
|
rcView.layoutManager =
|
||||||
|
GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
|
adapterPatient = PatientListAdapter(this@NotActiveCoursesPatientFragment)
|
||||||
|
rcView.adapter = adapterPatient
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun GetPatientList() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listProduct = doctorApi.GetPatientAllNotActive("Bearer $Tokens")
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listProduct.body()
|
||||||
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
model.PatientNotList.value = List.patient
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
override fun onClickPatient(item: PatientAllModel) {
|
||||||
|
|
||||||
|
//Вывод фрагмента на активити при первоначальной загрузке
|
||||||
|
// activity?.supportFragmentManager?.beginTransaction()
|
||||||
|
// ?.replace(com.example.doctor.R.id.CLMainPatient, PatientFragment.newInstance())
|
||||||
|
// ?.commit()
|
||||||
|
prefDoctorSave.saveIdPatient(requireContext(),item.id!!)
|
||||||
|
prefDoctorSave.saveViewPatient(requireContext(),1)
|
||||||
|
//model.patientId.value = PatientIdModel(item.id!!)
|
||||||
|
|
||||||
|
val intetn = Intent(requireContext(), PatientActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
|
||||||
|
|
||||||
|
// dataModel.patientList.value = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun newInstance() = NotActiveCoursesPatientFragment()
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,35 @@ import android.content.SharedPreferences
|
||||||
class ClearPref() {
|
class ClearPref() {
|
||||||
|
|
||||||
fun clearToken(context: Context) {
|
fun clearToken(context: Context) {
|
||||||
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTOR", Context.MODE_PRIVATE)
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORtoken", Context.MODE_PRIVATE)
|
||||||
|
val edit = prefDoctor.edit()
|
||||||
|
edit?.clear()
|
||||||
|
edit?.apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearViewPatient(context: Context) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORviewPatient", Context.MODE_PRIVATE)
|
||||||
|
val edit = prefDoctor.edit()
|
||||||
|
edit?.clear()
|
||||||
|
edit?.apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearIdPatient(context: Context) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORIdPatient", Context.MODE_PRIVATE)
|
||||||
|
val edit = prefDoctor.edit()
|
||||||
|
edit?.clear()
|
||||||
|
edit?.apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearIdCourses(context: Context) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORIdCourses", Context.MODE_PRIVATE)
|
||||||
|
val edit = prefDoctor.edit()
|
||||||
|
edit?.clear()
|
||||||
|
edit?.apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearIdActivitis(context: Context) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORIdActivitis", Context.MODE_PRIVATE)
|
||||||
val edit = prefDoctor.edit()
|
val edit = prefDoctor.edit()
|
||||||
edit?.clear()
|
edit?.clear()
|
||||||
edit?.apply()
|
edit?.apply()
|
||||||
|
|
|
@ -6,8 +6,32 @@ import android.content.SharedPreferences
|
||||||
class ConclusionPref() {
|
class ConclusionPref() {
|
||||||
|
|
||||||
fun conclusionToken(context: Context):String {
|
fun conclusionToken(context: Context):String {
|
||||||
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTOR", Context.MODE_PRIVATE)
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORtoken", Context.MODE_PRIVATE)
|
||||||
val token = prefDoctor.getString("token", "")
|
val token = prefDoctor.getString("token", "")
|
||||||
return token.toString()
|
return token.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun conclusionViewPatient(context: Context):Int {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORviewPatient", Context.MODE_PRIVATE)
|
||||||
|
val viewPatient = prefDoctor.getInt("viewPatient", 0)
|
||||||
|
return viewPatient.toInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun conclusionIdPatient(context: Context):Int {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORidPatient", Context.MODE_PRIVATE)
|
||||||
|
val idPatient = prefDoctor.getInt("idPatient", 0)
|
||||||
|
return idPatient.toInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun conclusionIdCourses(context: Context):Int {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORidCourses", Context.MODE_PRIVATE)
|
||||||
|
val idPatient = prefDoctor.getInt("idCourses", 0)
|
||||||
|
return idPatient.toInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun conclusionIdActivitis(context: Context):Int {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORIdActivitis", Context.MODE_PRIVATE)
|
||||||
|
val idPatient = prefDoctor.getInt("idActivitis", 0)
|
||||||
|
return idPatient.toInt()
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,15 +1,39 @@
|
||||||
package com.example.doctor.Pref
|
package com.example.doctor.Pref
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
|
||||||
class SavePref (){
|
class SavePref (){
|
||||||
|
|
||||||
|
|
||||||
fun saveToken(context: Context,token: String) {
|
@SuppressLint("CommitPrefEdits")
|
||||||
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTOR", Context.MODE_PRIVATE)
|
fun saveToken(context: Context, token: String) {
|
||||||
val edit = prefDoctor.edit()
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORtoken", Context.MODE_PRIVATE)
|
||||||
prefDoctor.edit().putString("token", token).apply()
|
prefDoctor.edit().putString("token", token).apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressLint("CommitPrefEdits")
|
||||||
|
fun saveViewPatient(context: Context, view_patient: Int) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORviewPatient", Context.MODE_PRIVATE)
|
||||||
|
prefDoctor.edit().putInt("viewPatient", view_patient).apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("CommitPrefEdits")
|
||||||
|
fun saveIdPatient(context: Context, view_patient: Int) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORidPatient", Context.MODE_PRIVATE)
|
||||||
|
prefDoctor.edit().putInt("idPatient", view_patient).apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("CommitPrefEdits")
|
||||||
|
fun saveIdCourses(context: Context, view_patient: Int) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORidCourses", Context.MODE_PRIVATE)
|
||||||
|
prefDoctor.edit().putInt("idCourses", view_patient).apply()
|
||||||
|
}
|
||||||
|
@SuppressLint("CommitPrefEdits")
|
||||||
|
fun saveIdActivitis(context: Context, view_patient: Int) {
|
||||||
|
val prefDoctor: SharedPreferences = context.getSharedPreferences("DOCTORIdActivitis", Context.MODE_PRIVATE)
|
||||||
|
prefDoctor.edit().putInt("idActivitis", view_patient).apply()
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,24 +1,30 @@
|
||||||
package com.example.doctor.Retrofit
|
package com.example.doctor.Retrofit
|
||||||
|
|
||||||
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsNewListModel
|
||||||
|
import com.example.doctor.Appeals.TabLayout.Model.AppealsOldListModel
|
||||||
import com.example.doctor.Auth.Model.AuthModel
|
import com.example.doctor.Auth.Model.AuthModel
|
||||||
import com.example.doctor.Auth.Model.CheckTokenModel
|
import com.example.doctor.Auth.Model.CheckTokenModel
|
||||||
import com.example.doctor.Auth.Model.UserModel
|
import com.example.doctor.Auth.Model.UserModel
|
||||||
|
import com.example.doctor.Home.HomeInfoModel
|
||||||
import com.example.doctor.Patients.Model.MessageModel
|
import com.example.doctor.Patients.Model.MessageModel
|
||||||
import com.example.doctor.Patients.Model.CreatePatientModel
|
import com.example.doctor.Patients.Model.CreatePatientModel
|
||||||
import com.example.doctor.Patients.Model.PatientAllListModel
|
import com.example.doctor.Patients.Model.PatientAllListModel
|
||||||
import com.example.doctor.Patients.Model.PatientAllModel
|
import com.example.doctor.Patients.Model.PatientAllModel
|
||||||
import com.example.doctor.Patients.Model.PatientModel
|
import com.example.doctor.Patients.Model.PatientModel
|
||||||
import com.example.doctor.Patients.Model.PauseModel
|
import com.example.doctor.Patients.Model.PauseModel
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.SportCoursDoctorListModel
|
||||||
|
import com.example.doctor.Patients.Reports.Courses.SportCoursListModel
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportListNoModel
|
import com.example.doctor.Patients.Reports.Edit.EditSportListNoModel
|
||||||
import com.example.doctor.Patients.Reports.Edit.EditSportListYesModel
|
import com.example.doctor.Patients.Reports.Edit.EditSportListYesModel
|
||||||
import com.example.doctor.Patients.Reports.Edit.UpdateSportTaskNoModel
|
|
||||||
import com.example.doctor.Patients.Reports.Edit.UpdateSportTaskYesModel
|
|
||||||
import com.example.doctor.Patients.Reports.QBAListModel
|
import com.example.doctor.Patients.Reports.QBAListModel
|
||||||
import com.example.doctor.Patients.Reports.Requests.ClearSportPatientModel
|
import com.example.doctor.Patients.Reports.Requests.ClearSportPatientModel
|
||||||
import com.example.doctor.Patients.Reports.SportCoursListModel
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorListAllModel
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorListYourModel
|
||||||
|
import com.example.doctor.Setting.Courses.Model.CoursesDoctorListModel
|
||||||
import com.example.doctor.Sport.AddSportPatientModel
|
import com.example.doctor.Sport.AddSportPatientModel
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
|
import retrofit2.http.DELETE
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.Header
|
import retrofit2.http.Header
|
||||||
import retrofit2.http.Headers
|
import retrofit2.http.Headers
|
||||||
|
@ -49,10 +55,20 @@ interface DoctorApi {
|
||||||
@GET("GetPatientAll")
|
@GET("GetPatientAll")
|
||||||
suspend fun GetPatientAll(@Header("Authorization") token:String):Response<PatientAllListModel>
|
suspend fun GetPatientAll(@Header("Authorization") token:String):Response<PatientAllListModel>
|
||||||
|
|
||||||
|
//Вывод пациентов конкретного врача с активным курсом
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetPatientAllActive")
|
||||||
|
suspend fun GetPatientAllActive(@Header("Authorization") token:String):Response<PatientAllListModel>
|
||||||
|
|
||||||
|
//Вывод пациентов конкретного врача с не активным курсом
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetPatientAllNotActive")
|
||||||
|
suspend fun GetPatientAllNotActive(@Header("Authorization") token:String):Response<PatientAllListModel>
|
||||||
|
|
||||||
//Вывод всех пациентов
|
//Вывод всех пациентов
|
||||||
@Headers("Content-Type: application/json")
|
@Headers("Content-Type: application/json")
|
||||||
@GET("GetPatientID")
|
@GET("GetPatientID")
|
||||||
suspend fun GetPatientID(@Header("Authorization") token:String):Response<PatientAllModel>
|
suspend fun GetPatientID(@Header("Authorization") token:String,@Query("id") id:Int):Response<PatientAllModel>
|
||||||
|
|
||||||
//Поиск пациентов
|
//Поиск пациентов
|
||||||
@Headers("Content-Type: application/json")
|
@Headers("Content-Type: application/json")
|
||||||
|
@ -68,6 +84,12 @@ interface DoctorApi {
|
||||||
@GET("GetCoursAllPatient")
|
@GET("GetCoursAllPatient")
|
||||||
suspend fun GetCoursAllPatient(@Header("Authorization") token:String,@Query("id") id:Int):Response<SportCoursListModel>
|
suspend fun GetCoursAllPatient(@Header("Authorization") token:String,@Query("id") id:Int):Response<SportCoursListModel>
|
||||||
|
|
||||||
|
//Вывод курсов созданных врачем
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetCoursesDoctorPatient")
|
||||||
|
suspend fun GetCoursesDoctorPatient(@Header("Authorization") token:String,@Query("id") id:Int):Response<SportCoursDoctorListModel>
|
||||||
|
|
||||||
|
|
||||||
//Вывод анкеты пациентов которые сейчас действуют
|
//Вывод анкеты пациентов которые сейчас действуют
|
||||||
@Headers("Content-Type: application/json")
|
@Headers("Content-Type: application/json")
|
||||||
@GET("GetPatientBAQiestionar")
|
@GET("GetPatientBAQiestionar")
|
||||||
|
@ -131,6 +153,82 @@ interface DoctorApi {
|
||||||
//Отключенных упражнений
|
//Отключенных упражнений
|
||||||
@Headers("Content-Type: application/json")
|
@Headers("Content-Type: application/json")
|
||||||
@PUT("UpdateBlockSportTasksNo")
|
@PUT("UpdateBlockSportTasksNo")
|
||||||
suspend fun UpdateBlockSportTasksNo(@Header("Authorization") token:String,@Query("id") id:Int,):Response<MessageModel>
|
suspend fun UpdateBlockSportTasksNo(@Header("Authorization") token:String,@Query("id") id:Int):Response<MessageModel>
|
||||||
|
|
||||||
|
|
||||||
|
//Отключенных упражнений
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@PUT("UpdatePatientLogin")
|
||||||
|
suspend fun UpdatePatientLogin(@Header("Authorization") token:String,@Query("id") id:Int,@Query("login") login:String):Response<MessageModel>
|
||||||
|
//Отключенных упражнений
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@PUT("UpdatePatientPassword")
|
||||||
|
suspend fun UpdatePatientPassword(@Header("Authorization") token:String,@Query("id") id:Int,@Query("password") password:String):Response<MessageModel>
|
||||||
|
|
||||||
|
//Добавление курса пациенту
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("AddSportPatient")
|
||||||
|
suspend fun AddSportPatient(@Header("Authorization") token:String,@Query("id_patient") id:Int,@Query("id_course") id_course:Int,@Query("all_day") all_day:Int):Response<MessageModel>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Вывод необработанных сообщений
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetAppealsDoctorNew")
|
||||||
|
suspend fun GetAppealsDoctorNew(@Header("Authorization") token:String) :Response<AppealsNewListModel>
|
||||||
|
|
||||||
|
//Вывод необработанных сообщений
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetAppealsDoctorOld")
|
||||||
|
suspend fun GetAppealsDoctorOld(@Header("Authorization") token:String) :Response<AppealsOldListModel>
|
||||||
|
|
||||||
|
|
||||||
|
//Подтверждение необработанных сообщений
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@PUT("UpdateMessageDoctor")
|
||||||
|
suspend fun UpdateMessageDoctor(@Header("Authorization") token:String,@Query("id") id:Int,@Query("id_patient") id_patient:Int) :Response<MessageModel>
|
||||||
|
|
||||||
|
//Отправка сообщения пациенту
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("AddMessageDoctor")
|
||||||
|
suspend fun AddMessageDoctor(@Header("Authorization") token:String,@Query("login") login:String,@Query("text") text:String) :Response<MessageModel>
|
||||||
|
|
||||||
|
//Создание курса врачем
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("AddCoursesName")
|
||||||
|
suspend fun AddCoursesName(@Header("Authorization") token:String,@Query("name") name:String,@Query("description") description:String) :Response<MessageModel>
|
||||||
|
|
||||||
|
//Вывод курсов созданных врачем
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetCoursesDoctor")
|
||||||
|
suspend fun GetCoursesDoctor(@Header("Authorization") token:String) :Response<CoursesDoctorListModel>
|
||||||
|
|
||||||
|
//Вывод упражнений которые не входят в курс
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetEditCourseDoctorAll")
|
||||||
|
suspend fun GetEditCourseDoctorAll(@Header("Authorization") token:String,@Query("id_doctor_courses") id_doctor_courses:Int) :Response<EditCoursesDoctorListAllModel>
|
||||||
|
|
||||||
|
|
||||||
|
//Вывод упражнений которые входят в курс
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("GetEditCourseDoctorYour")
|
||||||
|
suspend fun GetEditCourseDoctorYour(@Header("Authorization") token:String,@Query("id_doctor_courses") id_doctor_courses:Int) :Response<EditCoursesDoctorListYourModel>
|
||||||
|
|
||||||
|
|
||||||
|
//Добавление упражнений в курс
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("AddCoursesCreatingDoctor")
|
||||||
|
suspend fun AddCoursesCreatingDoctor(@Header("Authorization") token:String,@Query("id_sports_tasks") id_sports_tasks:Int,@Query("id_sets_of_sports_activities") id_sets_of_sports_activities:Int) :Response<MessageModel>
|
||||||
|
|
||||||
|
//Удаление упражнений из курса
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@DELETE("ClearCoursesCreatingDoctor")
|
||||||
|
suspend fun ClearCoursesCreatingDoctor(@Header("Authorization") token:String,@Query("id_sets_of_sports_exercises") id_sets_of_sports_exercises:Int) :Response<MessageModel>
|
||||||
|
|
||||||
|
//Вывод данных для первой страницы врача
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@GET("CountPatientAndAppeals")
|
||||||
|
suspend fun CountPatientAndAppeals(@Header("Authorization") token:String) :Response<HomeInfoModel>
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
package com.example.doctor.Setting.Courses.Adapter
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Setting.Courses.Model.CoursesDoctorModel
|
||||||
|
import com.example.doctor.databinding.ItemCardCoursesDoctorBinding
|
||||||
|
|
||||||
|
|
||||||
|
class CoursesDoctorAdapter(val listener: Listener) :
|
||||||
|
ListAdapter<CoursesDoctorModel, CoursesDoctorAdapter.Holder>(
|
||||||
|
Comparator()
|
||||||
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
|
class Holder(view: View, val listener: Listener) :
|
||||||
|
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
|
//Для передачи данных
|
||||||
|
|
||||||
|
val binding = ItemCardCoursesDoctorBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки
|
||||||
|
|
||||||
|
var itemTemp: CoursesDoctorModel? =
|
||||||
|
null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия
|
||||||
|
|
||||||
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
|
init {
|
||||||
|
itemView.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
//itemView.setEnabled(false)
|
||||||
|
itemTemp?.let { it1 -> listener.onClickCourses(it1) }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SuspiciousIndentation", "SetTextI18n")
|
||||||
|
fun bind(item: CoursesDoctorModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
|
itemTemp = item
|
||||||
|
txtNumberCurds.text = item.number.toString() + "."
|
||||||
|
txtNameCoursesDoctor.text = item.name
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
|
val view = LayoutInflater.from(parent.context)
|
||||||
|
.inflate(R.layout.item_card_courses_doctor, parent, false)//Создаем(надуваем) list_item
|
||||||
|
return Holder(view, listener)//Через Holder возврощаем view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
val view = holder.bind(getItem(position))//Заполняем по позиции карточку
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Comparator - сравнивает старый список и новый и если что-то изменилось, то работает с конкретным изменением списке, а не весь список переписывает
|
||||||
|
class Comparator : DiffUtil.ItemCallback<CoursesDoctorModel>() {
|
||||||
|
override fun areItemsTheSame(
|
||||||
|
oldItem: CoursesDoctorModel,
|
||||||
|
newItem: CoursesDoctorModel
|
||||||
|
): Boolean {//Тут лучше всего сравнивать по id//oldItem - элементы старого списка, newItem - элементы нового списка//Возврощает Boolean, тоесть есть изменения или нет
|
||||||
|
return oldItem.id == newItem.id//Сравниваем полностью весь список новы и старый, по очередно по одной карточке и по элементно, то есть нулевой элемент, первый, второй и т.д.. Но лучше сравнивать по id списки, а не просто весь список, так как это эфективнее, так как id уникальный(oldItem.id == newItem.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areContentsTheSame(
|
||||||
|
oldItem: CoursesDoctorModel,
|
||||||
|
newItem: CoursesDoctorModel
|
||||||
|
): Boolean {//Утут нужно сравнивать весь спсок старых элементов и новых
|
||||||
|
return oldItem == newItem//Сравниваем полностью весь список новы и старый
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Интерфейс нажатия на кнопку удалить товар из корзины
|
||||||
|
interface Listener {
|
||||||
|
fun onClickCourses(item: CoursesDoctorModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.example.doctor.Setting.Courses
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import android.os.Bundle
|
||||||
|
import com.example.doctor.Patients.Reports.PatientFragment
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.CreateCoursesFragment
|
||||||
|
import com.example.doctor.databinding.ActivityCoursesBinding
|
||||||
|
|
||||||
|
class CoursesActivity : AppCompatActivity() {
|
||||||
|
private lateinit var binding: ActivityCoursesBinding
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityCoursesBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
|
||||||
|
binding.apply {
|
||||||
|
supportFragmentManager.beginTransaction().replace(R.id.CLCoursesActivity, CreateCoursesFragment.newInstance()).commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,407 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Adapter.VpAdapter
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Setting.Courses.Adapter.CoursesDoctorAdapter
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.AllSportCoursesDoctorFragment
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.YourSportCoursesDoctorFragment
|
||||||
|
import com.example.doctor.Setting.Courses.Model.CoursesDoctorModel
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.databinding.FragmentCreateCoursesBinding
|
||||||
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
|
||||||
|
class CreateCoursesFragment : Fragment(),CoursesDoctorAdapter.Listener {
|
||||||
|
private lateinit var binding: FragmentCreateCoursesBinding
|
||||||
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
lateinit var adapter: CoursesDoctorAdapter
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentCreateCoursesBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
binding.apply {
|
||||||
|
initRcView()
|
||||||
|
|
||||||
|
GetCoursesDoctor()
|
||||||
|
button()
|
||||||
|
|
||||||
|
CLCreate.visibility = View.GONE
|
||||||
|
|
||||||
|
btnCreateCourses.setOnClickListener{
|
||||||
|
CLCreate.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
|
//Закрытие экоана создания названия
|
||||||
|
CLCreate.setOnClickListener{
|
||||||
|
CLCreate.visibility = View.GONE
|
||||||
|
}
|
||||||
|
btnExitCreat.setOnClickListener{
|
||||||
|
CLCreate.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
// CLEditCourses.setOnClickListener {
|
||||||
|
// CLEditCourses.visibility = View.GONE
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
btnExit.setOnClickListener{
|
||||||
|
activity?.finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
model.CoursesDoctorList.observe(viewLifecycleOwner) {
|
||||||
|
adapter.submitList(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
btnCreateCoursrsDoctor.setOnClickListener{
|
||||||
|
CreateCoursesDoctor()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private fun CreateCoursesDoctor() {
|
||||||
|
val name = binding.edCoursesDoctorName.text.toString()
|
||||||
|
val description = binding.edCoursesDoctorDescription.text.toString()
|
||||||
|
if(name!="" && description !=""){
|
||||||
|
AddCoursesName(name,description)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Toast(requireContext()).showCustomInfoToast("Не все поля заполнены", requireActivity())
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun button() = with(binding){
|
||||||
|
CVCardCreateCourses.setOnClickListener {
|
||||||
|
|
||||||
|
}
|
||||||
|
// CVEditCourses.setOnClickListener {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка пациентов
|
||||||
|
fun AddCoursesName(name:String,description:String) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
visibleLoadYes()
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCreateCoursesDoctor = doctorApi.AddCoursesName("Bearer $Tokens",name,description)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCreateCoursesDoctor.body()
|
||||||
|
val Nice = listCreateCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCreateCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
GetCoursesDoctor()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
visibleLoadNo()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetCoursesDoctor() {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
visibleLoadYes()
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetCoursesDoctor("Bearer $Tokens")
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctor.body()
|
||||||
|
val Nice = listCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
model.CoursesDoctorList.value = List.sport_courses_doctor
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
visibleLoadNo()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализация списка
|
||||||
|
private fun initRcView() = with(binding) {
|
||||||
|
rcView.layoutManager = GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
|
adapter = CoursesDoctorAdapter(this@CreateCoursesFragment)
|
||||||
|
rcView.adapter = adapter
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun visible1()=with(binding){
|
||||||
|
constraintLayout2.visibility = View.VISIBLE
|
||||||
|
CLCreate.visibility = View.GONE
|
||||||
|
// CLEditCourses.visibility = View.GONE
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
fun visible2()=with(binding){
|
||||||
|
constraintLayout2.visibility = View.GONE
|
||||||
|
CLCreate.visibility = View.VISIBLE
|
||||||
|
//CLEditCourses.visibility = View.GONE
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
fun visible3()=with(binding){
|
||||||
|
constraintLayout2.visibility = View.GONE
|
||||||
|
CLCreate.visibility = View.GONE
|
||||||
|
// CLEditCourses.visibility = View.VISIBLE
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
fun visibleLoadYes()=with(binding){
|
||||||
|
CLLoad.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
fun visibleLoadNo()=with(binding){
|
||||||
|
CLLoad.visibility = View.GONE
|
||||||
|
}
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun newInstance() = CreateCoursesFragment()
|
||||||
|
}
|
||||||
|
// //Получения списка курсов созданных доктором
|
||||||
|
// fun GetEditCourseDoctorAll(id:Int) {
|
||||||
|
// if (isOnline(requireContext())) {
|
||||||
|
// initRetrofit()
|
||||||
|
// val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
// CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
// val listCoursesDoctor = doctorApi.GetEditCourseDoctorAll("Bearer $Tokens",id)
|
||||||
|
//
|
||||||
|
// requireActivity().runOnUiThread {
|
||||||
|
//
|
||||||
|
// //Фиксируем полученные данные
|
||||||
|
// val CoursesDoctorList = listCoursesDoctor.body()
|
||||||
|
//
|
||||||
|
// //Если нету ошибок
|
||||||
|
// if (CoursesDoctorList != null) {
|
||||||
|
// model.EditCoursesDoctorAllList.value = CoursesDoctorList.set_of_sports_exercises_all
|
||||||
|
// binding.txtNull.visibility = View.GONE
|
||||||
|
// }
|
||||||
|
// else{
|
||||||
|
// binding.txtNull.visibility = View.VISIBLE
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
// activity?.finish()
|
||||||
|
// startActivity(intetn)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// //Получения списка курсов созданных доктором
|
||||||
|
// fun GetEditCourseDoctorYour(id:Int) {
|
||||||
|
// if (isOnline(requireContext())) {
|
||||||
|
// initRetrofit()
|
||||||
|
// val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
// CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
// val listCoursesDoctor = doctorApi.GetEditCourseDoctorYour("Bearer $Tokens",id)
|
||||||
|
//
|
||||||
|
// requireActivity().runOnUiThread {
|
||||||
|
//
|
||||||
|
// //Фиксируем полученные данные
|
||||||
|
// val CoursesDoctorList = listCoursesDoctor.body()
|
||||||
|
//
|
||||||
|
// //Если нету ошибок
|
||||||
|
// if (CoursesDoctorList != null) {
|
||||||
|
// model.EditCoursesDoctorYourList.value = CoursesDoctorList.set_of_sports_exercises_your
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
// activity?.finish()
|
||||||
|
// startActivity(intetn)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Проверка интернета
|
||||||
|
fun isOnline(context: Context): Boolean {
|
||||||
|
if (context == null) return false
|
||||||
|
val connectivityManager =
|
||||||
|
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
val capabilities =
|
||||||
|
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
|
||||||
|
if (capabilities != null) {
|
||||||
|
when {
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val activeNetworkInfo = connectivityManager.activeNetworkInfo
|
||||||
|
if (activeNetworkInfo != null && activeNetworkInfo.isConnected) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
override fun onClickCourses(item: CoursesDoctorModel){
|
||||||
|
// // CLEditCourses.visibility = View.VISIBLE
|
||||||
|
// prefDoctorSave.saveIdCourses(requireContext(),item.id)
|
||||||
|
// prefDoctorSave.saveIdActivitis(requireContext(),item.id_activity)
|
||||||
|
// // model.CoursesDoctorCA.value= CoursesDoctorCA(item.id,item.id_activity)
|
||||||
|
// GetEditCourseDoctorAll(item.id)
|
||||||
|
// GetEditCourseDoctorYour(item.id)
|
||||||
|
|
||||||
|
model.CoursesCustomDoctor.value = item
|
||||||
|
activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.CLCoursesActivity, EditCoursesFragment.newInstance())?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,242 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import com.example.doctor.Adapter.VpAdapter
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Setting.Courses.Adapter.CoursesDoctorAdapter
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.AllSportCoursesDoctorFragment
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.YourSportCoursesDoctorFragment
|
||||||
|
import com.example.doctor.databinding.FragmentEditCoursesBinding
|
||||||
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
|
||||||
|
class EditCoursesFragment : Fragment() {
|
||||||
|
private lateinit var binding:FragmentEditCoursesBinding
|
||||||
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
lateinit var adapter: CoursesDoctorAdapter
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
|
||||||
|
private val tList = listOf(
|
||||||
|
"добавленные",
|
||||||
|
"Все",
|
||||||
|
)
|
||||||
|
|
||||||
|
//Список с фрагментами для переключения
|
||||||
|
private val flist = listOf(
|
||||||
|
YourSportCoursesDoctorFragment.newInstance(),
|
||||||
|
AllSportCoursesDoctorFragment.newInstance(),
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentEditCoursesBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
binding.apply {
|
||||||
|
init()
|
||||||
|
|
||||||
|
binding.btnBack.setOnClickListener{
|
||||||
|
activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.CLCoursesActivity, CreateCoursesFragment.newInstance())?.commit()//Заменяем наш экран на фрагмент (используем наш экран как основу)//R.id.placeHolder - куда всталяем //MainFragment.newInstance() - это то что мы вставляем
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
model.CoursesCustomDoctor.observe(viewLifecycleOwner){
|
||||||
|
txtNameCourses.text = it.name
|
||||||
|
GetEditCourseDoctorYour(it.id)
|
||||||
|
GetEditCourseDoctorAll(it.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка упражнений созданных врачем
|
||||||
|
fun GetEditCourseDoctorYour(id:Int) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetEditCourseDoctorYour("Bearer $Tokens",id)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctor.body()
|
||||||
|
val Nice = listCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
model.EditCoursesDoctorYourList.value = List.set_of_sports_exercises_your
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetEditCourseDoctorAll(id:Int) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetEditCourseDoctorAll("Bearer $Tokens",id)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val CoursesDoctorList = listCoursesDoctor.body()
|
||||||
|
|
||||||
|
//Если нету ошибок
|
||||||
|
if (CoursesDoctorList != null) {
|
||||||
|
model.EditCoursesDoctorAllList.value = CoursesDoctorList.set_of_sports_exercises_all
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Функция подключения переключения
|
||||||
|
private fun init() = with(binding) {
|
||||||
|
val adapter = VpAdapter(activity as FragmentActivity, flist)
|
||||||
|
vpCourses.adapter = adapter
|
||||||
|
|
||||||
|
//Переключения (связываем таблаяут(переключатель) с viewpager, чтобы переключать фрагменты)
|
||||||
|
TabLayoutMediator(tabLayoutCourses, vpCourses) { tab, pos ->
|
||||||
|
tab.text =
|
||||||
|
tList[pos]//tab - нажатая кнопка, pos - позиция кнопки, tList[pos] - передаем название по полученной позиции
|
||||||
|
}.attach()// attach() - чтобы все переключалось, а не вывадило постоянно один экран
|
||||||
|
|
||||||
|
//Изменения цвета в зависомости на каком из tabLayout вы находитесь
|
||||||
|
binding.tabLayoutCourses.setTabTextColors(
|
||||||
|
getResources().getColor(R.color.black),
|
||||||
|
getResources().getColor(R.color.white)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Проверка интернета
|
||||||
|
fun isOnline(context: Context): Boolean {
|
||||||
|
if (context == null) return false
|
||||||
|
val connectivityManager =
|
||||||
|
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
val capabilities =
|
||||||
|
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
|
||||||
|
if (capabilities != null) {
|
||||||
|
when {
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val activeNetworkInfo = connectivityManager.activeNetworkInfo
|
||||||
|
if (activeNetworkInfo != null && activeNetworkInfo.isConnected) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun newInstance() = EditCoursesFragment()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,107 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Adapter
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorModel
|
||||||
|
import com.example.doctor.databinding.ItemEditSportYesBinding
|
||||||
|
|
||||||
|
|
||||||
|
class EditCoursesDoctorAllAdapter(val listener_sport: Listener) :
|
||||||
|
ListAdapter<EditCoursesDoctorModel, EditCoursesDoctorAllAdapter.Holder>(
|
||||||
|
Comparator()
|
||||||
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
|
class Holder(view: View, val listener_sport: Listener) :
|
||||||
|
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
|
//Для передачи данных
|
||||||
|
|
||||||
|
val binding = ItemEditSportYesBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки
|
||||||
|
|
||||||
|
var itemTemp: EditCoursesDoctorModel? =
|
||||||
|
null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия
|
||||||
|
|
||||||
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
|
init {
|
||||||
|
binding.btnYeyYes.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
itemTemp?.let { it1 -> listener_sport.onClickCoursesAll(it1) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SuspiciousIndentation")
|
||||||
|
fun bind(item: EditCoursesDoctorModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
|
itemTemp = item
|
||||||
|
txtNumber.text = item.number.toString()+"."
|
||||||
|
txtNameSport.text = item.name
|
||||||
|
txtDescriptionSport.text = item.description
|
||||||
|
|
||||||
|
if (item.expand) {
|
||||||
|
binding.txtDescriptionSport.maxLines = 100
|
||||||
|
|
||||||
|
} else {
|
||||||
|
binding.txtDescriptionSport.maxLines = 1
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.CardViewOld.setOnClickListener {
|
||||||
|
if (item.expand == false) {
|
||||||
|
binding.txtDescriptionSport.maxLines = 100
|
||||||
|
item.expand = true
|
||||||
|
} else {
|
||||||
|
binding.txtDescriptionSport.maxLines = 1
|
||||||
|
item.expand = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
|
val view = LayoutInflater.from(parent.context)
|
||||||
|
.inflate(R.layout.item_edit_sport_yes, parent, false)//Создаем(надуваем) list_item
|
||||||
|
return Holder(view, listener_sport)//Через Holder возврощаем view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
val view = holder.bind(getItem(position))//Заполняем по позиции карточку
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Comparator - сравнивает старый список и новый и если что-то изменилось, то работает с конкретным изменением списке, а не весь список переписывает
|
||||||
|
class Comparator : DiffUtil.ItemCallback<EditCoursesDoctorModel>() {
|
||||||
|
override fun areItemsTheSame(
|
||||||
|
oldItem: EditCoursesDoctorModel,
|
||||||
|
newItem: EditCoursesDoctorModel
|
||||||
|
): Boolean {//Тут лучше всего сравнивать по id//oldItem - элементы старого списка, newItem - элементы нового списка//Возврощает Boolean, тоесть есть изменения или нет
|
||||||
|
return oldItem.id == newItem.id//Сравниваем полностью весь список новы и старый, по очередно по одной карточке и по элементно, то есть нулевой элемент, первый, второй и т.д.. Но лучше сравнивать по id списки, а не просто весь список, так как это эфективнее, так как id уникальный(oldItem.id == newItem.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areContentsTheSame(
|
||||||
|
oldItem: EditCoursesDoctorModel,
|
||||||
|
newItem: EditCoursesDoctorModel
|
||||||
|
): Boolean {//Утут нужно сравнивать весь спсок старых элементов и новых
|
||||||
|
return oldItem == newItem//Сравниваем полностью весь список новы и старый
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Интерфейс нажатия на кнопку удалить товар из корзины
|
||||||
|
interface Listener {
|
||||||
|
fun onClickCoursesAll(item: EditCoursesDoctorModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Adapter
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorModel
|
||||||
|
import com.example.doctor.databinding.ItemEditSportNoBinding
|
||||||
|
|
||||||
|
|
||||||
|
class EditCoursesDoctorYourAdapter(val listener_sport: Listener) :
|
||||||
|
ListAdapter<EditCoursesDoctorModel, EditCoursesDoctorYourAdapter.Holder>(
|
||||||
|
Comparator()
|
||||||
|
) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку
|
||||||
|
|
||||||
|
|
||||||
|
//В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
|
||||||
|
class Holder(view: View, val listener_sport: Listener) :
|
||||||
|
RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
|
||||||
|
//Для передачи данных
|
||||||
|
|
||||||
|
val binding = ItemEditSportNoBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки
|
||||||
|
|
||||||
|
var itemTemp: EditCoursesDoctorModel? =
|
||||||
|
null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия
|
||||||
|
|
||||||
|
//init - дает возможность внутри адаптера обращаться к элементам экрана
|
||||||
|
init {
|
||||||
|
binding.btnYeyNo.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
|
||||||
|
itemTemp?.let { it1 -> listener_sport.onClickCoursesYour(it1) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SuspiciousIndentation")
|
||||||
|
fun bind(item: EditCoursesDoctorModel) = with(binding) {//Productitem - перпедаем данные
|
||||||
|
itemTemp = item
|
||||||
|
txtNumber.text = item.number.toString()+"."
|
||||||
|
txtNameSport.text = item.name
|
||||||
|
txtDescriptionSport.text = item.description
|
||||||
|
|
||||||
|
if (item.expand) {
|
||||||
|
binding.txtDescriptionSport.maxLines = 100
|
||||||
|
|
||||||
|
} else {
|
||||||
|
binding.txtDescriptionSport.maxLines = 1
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.CardViewOld.setOnClickListener {
|
||||||
|
if (item.expand == false) {
|
||||||
|
binding.txtDescriptionSport.maxLines = 100
|
||||||
|
item.expand = true
|
||||||
|
} else {
|
||||||
|
binding.txtDescriptionSport.maxLines = 1
|
||||||
|
item.expand = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||||
|
val view = LayoutInflater.from(parent.context)
|
||||||
|
.inflate(R.layout.item_edit_sport_no, parent, false)//Создаем(надуваем) list_item
|
||||||
|
return Holder(view, listener_sport)//Через Holder возврощаем view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||||
|
val view = holder.bind(getItem(position))//Заполняем по позиции карточку
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Comparator - сравнивает старый список и новый и если что-то изменилось, то работает с конкретным изменением списке, а не весь список переписывает
|
||||||
|
class Comparator : DiffUtil.ItemCallback<EditCoursesDoctorModel>() {
|
||||||
|
override fun areItemsTheSame(
|
||||||
|
oldItem: EditCoursesDoctorModel,
|
||||||
|
newItem: EditCoursesDoctorModel
|
||||||
|
): Boolean {//Тут лучше всего сравнивать по id//oldItem - элементы старого списка, newItem - элементы нового списка//Возврощает Boolean, тоесть есть изменения или нет
|
||||||
|
return oldItem.id == newItem.id//Сравниваем полностью весь список новы и старый, по очередно по одной карточке и по элементно, то есть нулевой элемент, первый, второй и т.д.. Но лучше сравнивать по id списки, а не просто весь список, так как это эфективнее, так как id уникальный(oldItem.id == newItem.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areContentsTheSame(
|
||||||
|
oldItem: EditCoursesDoctorModel,
|
||||||
|
newItem: EditCoursesDoctorModel
|
||||||
|
): Boolean {//Утут нужно сравнивать весь спсок старых элементов и новых
|
||||||
|
return oldItem == newItem//Сравниваем полностью весь список новы и старый
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Интерфейс нажатия на кнопку удалить товар из корзины
|
||||||
|
interface Listener {
|
||||||
|
fun onClickCoursesYour(item: EditCoursesDoctorModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,292 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetFragment
|
||||||
|
import com.example.doctor.Pref.ClearPref
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.Pref.SavePref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Adapter.EditCoursesDoctorAllAdapter
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorModel
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.databinding.FragmentAllSportCoursesDoctorBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
class AllSportCoursesDoctorFragment : Fragment(), EditCoursesDoctorAllAdapter.Listener{
|
||||||
|
private lateinit var binding:FragmentAllSportCoursesDoctorBinding
|
||||||
|
lateinit var adapterAll: EditCoursesDoctorAllAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
val prefDoctorClear = ClearPref()
|
||||||
|
val prefDoctorSave = SavePref()
|
||||||
|
var id_patient = 0;
|
||||||
|
var id_courses = 0;
|
||||||
|
var id_activitis = 0;
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentAllSportCoursesDoctorBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
initRcView()
|
||||||
|
// id_courses = prefDoctorConclusion.conclusionIdCourses(requireContext())
|
||||||
|
// id_activitis = prefDoctorConclusion.conclusionIdActivitis(requireContext())
|
||||||
|
|
||||||
|
model.CoursesCustomDoctor.observe(viewLifecycleOwner){
|
||||||
|
id_courses = it.id
|
||||||
|
id_activitis = it.id_activity
|
||||||
|
GetEditCourseDoctorAll(id_courses)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
model.EditCoursesDoctorAllList.observe(viewLifecycleOwner){
|
||||||
|
adapterAll.submitList(it)
|
||||||
|
}
|
||||||
|
// model.CoursesDoctorCA.observe(viewLifecycleOwner){
|
||||||
|
// requireActivity().runOnUiThread {
|
||||||
|
// id_courses = it.id_courses
|
||||||
|
// id_activitis = it.id_activitis
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
Log.i("2sadas","2sadasd")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
Log.i("2sadas","22sadasd")
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetEditCourseDoctorAll(id:Int) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetEditCourseDoctorAll("Bearer $Tokens",id)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctor.body()
|
||||||
|
val Nice = listCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (List != null) {
|
||||||
|
model.EditCoursesDoctorAllList.value = List.set_of_sports_exercises_all
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
binding.txtNull.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetEditCourseDoctorYour(id:Int) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetEditCourseDoctorYour("Bearer $Tokens",id)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val CoursesDoctorList = listCoursesDoctor.body()
|
||||||
|
|
||||||
|
//Если нету ошибок
|
||||||
|
if (CoursesDoctorList != null) {
|
||||||
|
model.EditCoursesDoctorYourList.value = CoursesDoctorList.set_of_sports_exercises_your
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Добавление упражнения в курс
|
||||||
|
fun AddCoursesCreatingDoctor(id:Int,id_activitis:Int) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctorAllAdd = doctorApi.AddCoursesCreatingDoctor("Bearer $Tokens",id,id_activitis)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctorAllAdd.body()
|
||||||
|
val Nice = listCoursesDoctorAllAdd.isSuccessful
|
||||||
|
val Code = listCoursesDoctorAllAdd.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
GetEditCourseDoctorAll(id_courses)
|
||||||
|
GetEditCourseDoctorYour(id_courses)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
|
?.replace(R.id.CLMain, EnternetFragment.newInstance())
|
||||||
|
?.commit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Проверка интернета
|
||||||
|
fun isOnline(context: Context): Boolean {
|
||||||
|
if (context == null) return false
|
||||||
|
val connectivityManager =
|
||||||
|
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
val capabilities =
|
||||||
|
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
|
||||||
|
if (capabilities != null) {
|
||||||
|
when {
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val activeNetworkInfo = connectivityManager.activeNetworkInfo
|
||||||
|
if (activeNetworkInfo != null && activeNetworkInfo.isConnected) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Инициализация списка
|
||||||
|
private fun initRcView() = with(binding) {
|
||||||
|
rcView.layoutManager = GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
|
adapterAll = EditCoursesDoctorAllAdapter(this@AllSportCoursesDoctorFragment)
|
||||||
|
rcView.adapter = adapterAll
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun newInstance() = AllSportCoursesDoctorFragment()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onClickCoursesAll(item: EditCoursesDoctorModel) {
|
||||||
|
AddCoursesCreatingDoctor(item.id,id_activitis)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model
|
||||||
|
|
||||||
|
data class CoursesDoctorCA(
|
||||||
|
val id_courses: Int,
|
||||||
|
val id_activitis: Int,
|
||||||
|
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model
|
||||||
|
|
||||||
|
data class EditCoursesDoctorListAllModel(
|
||||||
|
val set_of_sports_exercises_all: List<EditCoursesDoctorModel>
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model
|
||||||
|
|
||||||
|
data class EditCoursesDoctorListYourModel(
|
||||||
|
val set_of_sports_exercises_your: List<EditCoursesDoctorModel>
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model
|
||||||
|
|
||||||
|
data class EditCoursesDoctorModel(
|
||||||
|
val number: Int,
|
||||||
|
val id: Int,
|
||||||
|
val id_exercises: Int,
|
||||||
|
val name:String,
|
||||||
|
val description:String,
|
||||||
|
val url_image:String,
|
||||||
|
var expand : Boolean = false,
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,290 @@
|
||||||
|
package com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.example.doctor.Auth.AuthActivity
|
||||||
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.DoctorViewModel
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetFragment
|
||||||
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
|
import com.example.doctor.R
|
||||||
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Adapter.EditCoursesDoctorYourAdapter
|
||||||
|
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorModel
|
||||||
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
|
import com.example.doctor.databinding.FragmentYourSportCoursesDoctorBinding
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
|
||||||
|
class YourSportCoursesDoctorFragment : Fragment(), EditCoursesDoctorYourAdapter.Listener {
|
||||||
|
private lateinit var binding: FragmentYourSportCoursesDoctorBinding
|
||||||
|
lateinit var adapterYour: EditCoursesDoctorYourAdapter
|
||||||
|
private lateinit var doctorApi: DoctorApi
|
||||||
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
private val model: DoctorViewModel by activityViewModels()
|
||||||
|
var id_patient = 0;
|
||||||
|
var id_courses = 0;
|
||||||
|
var id_activitis = 0;
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
binding = FragmentYourSportCoursesDoctorBinding.inflate(layoutInflater,container,false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
initRcView()
|
||||||
|
|
||||||
|
model.CoursesCustomDoctor.observe(viewLifecycleOwner){
|
||||||
|
id_courses = it.id
|
||||||
|
id_activitis = it.id_activity
|
||||||
|
GetEditCourseDoctorYour(id_courses)
|
||||||
|
}
|
||||||
|
// id_courses = prefDoctorConclusion.conclusionIdCourses(requireContext())
|
||||||
|
// id_activitis = prefDoctorConclusion.conclusionIdActivitis(requireContext())
|
||||||
|
|
||||||
|
|
||||||
|
model.EditCoursesDoctorYourList.observe(viewLifecycleOwner){
|
||||||
|
adapterYour.submitList(it)
|
||||||
|
}
|
||||||
|
// model.CoursesDoctorCA.observe(viewLifecycleOwner){
|
||||||
|
// id_courses = it.id_courses
|
||||||
|
// id_activitis = it.id_activitis
|
||||||
|
// }
|
||||||
|
Log.i("1sadas","1sadasd")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
Log.i("1sadas","11sadasd")
|
||||||
|
|
||||||
|
}
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetEditCourseDoctorYour(id:Int) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetEditCourseDoctorYour("Bearer $Tokens",id)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctor.body()
|
||||||
|
val Nice = listCoursesDoctor.isSuccessful
|
||||||
|
val Code = listCoursesDoctor.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (List != null) {
|
||||||
|
model.EditCoursesDoctorYourList.value = List.set_of_sports_exercises_your
|
||||||
|
binding.txtNull.visibility = View.GONE
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
binding.txtNull.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun GetEditCourseDoctorAll(id:Int) {
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctor = doctorApi.GetEditCourseDoctorAll("Bearer $Tokens",id)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val CoursesDoctorList = listCoursesDoctor.body()
|
||||||
|
|
||||||
|
//Если нету ошибок
|
||||||
|
if (CoursesDoctorList != null) {
|
||||||
|
model.EditCoursesDoctorAllList.value = CoursesDoctorList.set_of_sports_exercises_all
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Получения списка курсов созданных доктором
|
||||||
|
fun ClearCoursesCreatingDoctor(id:Int) {
|
||||||
|
|
||||||
|
if (isOnline(requireContext())) {
|
||||||
|
initRetrofit()
|
||||||
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
val listCoursesDoctorYourClear = doctorApi.ClearCoursesCreatingDoctor("Bearer $Tokens",id)
|
||||||
|
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
|
//Фиксируем полученные данные
|
||||||
|
val List = listCoursesDoctorYourClear.body()
|
||||||
|
val Nice = listCoursesDoctorYourClear.isSuccessful
|
||||||
|
val Code = listCoursesDoctorYourClear.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
|
//Если нету ошибок
|
||||||
|
if (Nice) {
|
||||||
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List.message, requireActivity())
|
||||||
|
GetEditCourseDoctorYour(id_courses)
|
||||||
|
GetEditCourseDoctorAll(id_courses)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Проверка интернета
|
||||||
|
fun isOnline(context: Context): Boolean {
|
||||||
|
if (context == null) return false
|
||||||
|
val connectivityManager =
|
||||||
|
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
val capabilities =
|
||||||
|
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
|
||||||
|
if (capabilities != null) {
|
||||||
|
when {
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val activeNetworkInfo = connectivityManager.activeNetworkInfo
|
||||||
|
if (activeNetworkInfo != null && activeNetworkInfo.isConnected) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Инициализируем Retrofit
|
||||||
|
private fun initRetrofit() {
|
||||||
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
||||||
|
|
||||||
|
val client = OkHttpClient
|
||||||
|
.Builder()
|
||||||
|
.addInterceptor(interceptor)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
|
.client(client)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
doctorApi = retrofit.create(DoctorApi::class.java)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Инициализация списка
|
||||||
|
private fun initRcView() = with(binding) {
|
||||||
|
rcView.layoutManager = GridLayoutManager(requireContext(), 1)//По вертикали будет выводить по умолчанию
|
||||||
|
adapterYour = EditCoursesDoctorYourAdapter(this@YourSportCoursesDoctorFragment)
|
||||||
|
rcView.adapter = adapterYour
|
||||||
|
}
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun newInstance() = YourSportCoursesDoctorFragment()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClickCoursesYour(item: EditCoursesDoctorModel) {
|
||||||
|
Log.i("sadsadsadasd",item.toString())
|
||||||
|
|
||||||
|
ClearCoursesCreatingDoctor(item.id_exercises)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.example.doctor.Setting.Courses.Model
|
||||||
|
|
||||||
|
data class CoursesDoctorListModel(
|
||||||
|
val sport_courses_doctor: List<CoursesDoctorModel>
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.example.doctor.Setting.Courses.Model
|
||||||
|
|
||||||
|
data class CoursesDoctorModel(
|
||||||
|
val number: Int,
|
||||||
|
val id: Int,
|
||||||
|
val name: String,
|
||||||
|
val description: String,
|
||||||
|
val visibility: Int,
|
||||||
|
val user_id: Int,
|
||||||
|
val id_activity:Int,
|
||||||
|
val created_at: String,
|
||||||
|
val updated_at: String,
|
||||||
|
)
|
||||||
|
|
|
@ -2,7 +2,9 @@ package com.example.doctor.Setting
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -12,12 +14,17 @@ import android.widget.Toast
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.example.doctor.Auth.AuthActivity
|
import com.example.doctor.Auth.AuthActivity
|
||||||
import com.example.doctor.Auth.AuthFragment
|
import com.example.doctor.Auth.AuthFragment
|
||||||
import com.example.doctor.Patients.Reports.PatientFragment
|
import com.example.doctor.CodeError.Code429Activity
|
||||||
|
import com.example.doctor.CodeError.Code500Activity
|
||||||
|
import com.example.doctor.Enternet.EnternetActivity
|
||||||
|
import com.example.doctor.Enternet.EnternetCheck
|
||||||
|
import com.example.doctor.Enternet.EnternetFragment
|
||||||
|
import com.example.doctor.MainActivity
|
||||||
import com.example.doctor.Pref.ClearPref
|
import com.example.doctor.Pref.ClearPref
|
||||||
import com.example.doctor.Pref.ConclusionPref
|
import com.example.doctor.Pref.ConclusionPref
|
||||||
import com.example.doctor.Pref.SavePref
|
|
||||||
import com.example.doctor.R
|
import com.example.doctor.R
|
||||||
import com.example.doctor.Retrofit.DoctorApi
|
import com.example.doctor.Retrofit.DoctorApi
|
||||||
|
import com.example.doctor.Setting.Courses.CoursesActivity
|
||||||
import com.example.doctor.Toast.showCustomInfoToast
|
import com.example.doctor.Toast.showCustomInfoToast
|
||||||
import com.example.doctor.databinding.FragmentSettingBinding
|
import com.example.doctor.databinding.FragmentSettingBinding
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
@ -36,6 +43,8 @@ class SettingFragment : Fragment() {
|
||||||
private lateinit var doctorApi: DoctorApi
|
private lateinit var doctorApi: DoctorApi
|
||||||
val prefDoctorConclusion = ConclusionPref()
|
val prefDoctorConclusion = ConclusionPref()
|
||||||
|
|
||||||
|
//Класс проверки интеренета
|
||||||
|
val enternetCheck = EnternetCheck()
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
@ -59,10 +68,15 @@ class SettingFragment : Fragment() {
|
||||||
|
|
||||||
btnYourData.setOnClickListener{
|
btnYourData.setOnClickListener{
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.replace(com.example.doctor.R.id.CLMainFragment, YourDataFragment.newInstance())
|
?.replace(R.id.CLMainFragment, YourDataFragment.newInstance())
|
||||||
?.commit()
|
?.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.btnAddCourses.setOnClickListener{
|
||||||
|
val intetn = Intent(requireContext(), CoursesActivity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -86,6 +100,7 @@ class SettingFragment : Fragment() {
|
||||||
|
|
||||||
//Получения списка пациентов
|
//Получения списка пациентов
|
||||||
fun Logout() {
|
fun Logout() {
|
||||||
|
if (enternetCheck.isOnline(requireContext())) {
|
||||||
initRetrofit()
|
initRetrofit()
|
||||||
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
val Tokens = prefDoctorConclusion.conclusionToken(requireContext())
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
@ -93,22 +108,45 @@ class SettingFragment : Fragment() {
|
||||||
|
|
||||||
activity?.runOnUiThread {
|
activity?.runOnUiThread {
|
||||||
|
|
||||||
|
|
||||||
//Фиксируем полученные данные
|
//Фиксируем полученные данные
|
||||||
val visibleviewList = listProduct.body()
|
val List = listProduct.body()
|
||||||
val visibleviewListCode = listProduct.isSuccessful()
|
val Nice = listProduct.isSuccessful
|
||||||
|
val Code = listProduct.code()
|
||||||
|
if(Code==429){
|
||||||
|
val intetn = Intent(requireContext(), Code429Activity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if(Code==200) {
|
||||||
//Если нету ошибок
|
//Если нету ошибок
|
||||||
if (visibleviewListCode) {
|
if (Nice) {
|
||||||
Toast(requireContext()).showCustomInfoToast(visibleviewList?.message.toString(), requireActivity())
|
if (List != null) {
|
||||||
|
Toast(requireContext()).showCustomInfoToast(List?.message.toString(), requireActivity())
|
||||||
prefDoctorClear.clearToken(requireContext())
|
prefDoctorClear.clearToken(requireContext())
|
||||||
activity?.supportFragmentManager?.beginTransaction()
|
activity?.supportFragmentManager?.beginTransaction()
|
||||||
?.replace(R.id.CLMain, AuthFragment.newInstance())
|
?.replace(R.id.CLMain, AuthFragment.newInstance())
|
||||||
?.commit()
|
?.commit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Code == 500) {
|
||||||
|
val intetn = Intent(requireContext(), Code500Activity::class.java)
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
else if (Code == 401) {
|
||||||
|
val intetn = Intent(requireContext(), AuthActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val intetn = Intent(requireContext(), EnternetActivity::class.java)
|
||||||
|
activity?.finish()
|
||||||
|
startActivity(intetn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Инициализируем Retrofit
|
//Инициализируем Retrofit
|
||||||
private fun initRetrofit() {
|
private fun initRetrofit() {
|
||||||
val interceptor = HttpLoggingInterceptor()
|
val interceptor = HttpLoggingInterceptor()
|
||||||
|
@ -120,7 +158,7 @@ class SettingFragment : Fragment() {
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val retrofit = Retrofit.Builder()
|
val retrofit = Retrofit.Builder()
|
||||||
.baseUrl("http://mobileapp.vmeda.org/api/")
|
.baseUrl("https://rehabilitation.vmeda.org/api/")
|
||||||
.client(client)
|
.client(client)
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build()
|
.build()
|
||||||
|
@ -129,6 +167,8 @@ class SettingFragment : Fragment() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun newInstance() = SettingFragment()
|
fun newInstance() = SettingFragment()
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
package com.example.doctor.Worker
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.app.Notification
|
||||||
|
import android.app.NotificationChannel
|
||||||
|
import android.app.NotificationManager
|
||||||
|
import android.app.PendingIntent
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Build
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.core.app.NotificationManagerCompat
|
||||||
|
import androidx.work.Worker
|
||||||
|
import androidx.work.WorkerParameters
|
||||||
|
import com.example.doctor.MainActivity
|
||||||
|
import com.example.doctor.R
|
||||||
|
import java.nio.file.attribute.AclEntry.Builder
|
||||||
|
|
||||||
|
class MyWorker(context: Context, workerParameters: WorkerParameters): Worker(context,workerParameters) {
|
||||||
|
companion object{
|
||||||
|
const val CHANNEL_ID="channel_id"
|
||||||
|
const val NOTIFICATION=1
|
||||||
|
}
|
||||||
|
override fun doWork(): Result {
|
||||||
|
Log.d("doWork","doWork - error")
|
||||||
|
showNotification()
|
||||||
|
return Result.success()//Возврощаем результат
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("UnspecifiedImmutableFlag", "MissingPermission", "ObsoleteSdkInt")
|
||||||
|
private fun showNotification(){
|
||||||
|
val intent = Intent(applicationContext,MainActivity::class.java).apply{
|
||||||
|
flags=Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||||
|
}
|
||||||
|
|
||||||
|
val pendingIntetn= PendingIntent.getActivity(applicationContext,0,intent,0)
|
||||||
|
|
||||||
|
val notification = Notification.Builder(applicationContext, CHANNEL_ID)
|
||||||
|
.setSmallIcon(R.drawable.door)
|
||||||
|
.setContentTitle("new task")
|
||||||
|
.setContentText("Сообщение 1")//Сообщение
|
||||||
|
.setPriority(Notification.PRIORITY_MAX)//Приоритет
|
||||||
|
.setAutoCancel(true)//Время отмены
|
||||||
|
.setContentIntent(pendingIntetn)//Ожидание завершения
|
||||||
|
|
||||||
|
|
||||||
|
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
|
||||||
|
val channelName = "channel name"
|
||||||
|
val channelDescription = "channel Description"
|
||||||
|
val channelImportance=NotificationManager.IMPORTANCE_HIGH
|
||||||
|
|
||||||
|
//Канал
|
||||||
|
val channel = NotificationChannel(CHANNEL_ID,channelName,channelImportance).apply {
|
||||||
|
description = channelDescription
|
||||||
|
}
|
||||||
|
|
||||||
|
//Менеджер уведомлений
|
||||||
|
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
notificationManager.createNotificationChannel(channel)//Создаем канал с помошью менеджера уведомлений
|
||||||
|
|
||||||
|
with(NotificationManagerCompat.from(applicationContext)){
|
||||||
|
notify(NOTIFICATION,notification.build())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:duration="@android:integer/config_shortAnimTime"
|
||||||
|
android:interpolator="@android:anim/decelerate_interpolator"
|
||||||
|
android:fromAlpha="0"
|
||||||
|
android:toAlpha="1" />
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:duration="@android:integer/config_shortAnimTime"
|
||||||
|
android:interpolator="@android:anim/decelerate_interpolator"
|
||||||
|
android:fromAlpha="1"
|
||||||
|
android:toAlpha="0" />
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:duration="@android:integer/config_shortAnimTime"
|
||||||
|
android:interpolator="@android:anim/decelerate_interpolator"
|
||||||
|
android:fromXDelta="100%"
|
||||||
|
android:toXDelta="0%" />
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:duration="@android:integer/config_shortAnimTime"
|
||||||
|
android:interpolator="@android:anim/decelerate_interpolator"
|
||||||
|
android:fromXDelta="0%"
|
||||||
|
android:toXDelta="100%" />
|
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<solid android:color="#004F7B"/>
|
<solid android:color="#4BA5D8"/>
|
||||||
<corners android:radius="100dp" />
|
<corners android:radius="100dp" />
|
||||||
</shape>
|
</shape>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/CLAppealsActivity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Appeals.AppealsCreateMessageActivity">
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".CodeError.Code429Activity">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
app:cardBackgroundColor="#000000"
|
||||||
|
app:cardCornerRadius="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="1dp"
|
||||||
|
app:cardCornerRadius="15dp">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView80"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Подключение"
|
||||||
|
android:textColor="#121111"
|
||||||
|
android:textSize="16sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/textView7"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/textView7"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView7" />
|
||||||
|
|
||||||
|
<pl.droidsonroids.gif.GifImageView
|
||||||
|
android:id="@+id/gifImageView3"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="100dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:src="@drawable/loading"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/textView80"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/textView80"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView80" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView7"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Ранее вы отправляли слишеом много запросов !!!"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,89 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".CodeError.Code500Activity">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
app:cardBackgroundColor="#000000"
|
||||||
|
app:cardCornerRadius="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="1dp"
|
||||||
|
app:cardCornerRadius="15dp">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<pl.droidsonroids.gif.GifImageView
|
||||||
|
android:id="@+id/gifImageView"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="100dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:src="@drawable/loading"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/textView49"
|
||||||
|
app:layout_constraintHorizontal_bias="0.497"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/textView49"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView49" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView7"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Потеря соединения с сервером"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView49"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Подключение"
|
||||||
|
android:textColor="#121111"
|
||||||
|
android:textSize="16sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/textView7"
|
||||||
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/textView7"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView7" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView42"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Если в ближайшее время вы не подключитесь, то вас отправит на страницу авторизации. Это может означать что в ваш аккаунт кто-то вошел с другого устройства"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/gifImageView" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/CLCoursesActivity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Setting.Courses.CoursesActivity">
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/CLEnternet"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Enternet.EnternetActivity">
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -6,4 +6,98 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@drawable/gradientv1"
|
android:background="@drawable/gradientv1"
|
||||||
tools:context=".MainActivity" />
|
tools:context=".MainActivity" >
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <fragment-->
|
||||||
|
<!-- android:id="@+id/fragmentContainerView"-->
|
||||||
|
<!-- android:name="androidx.navigation.fragment.NavHostFragment"-->
|
||||||
|
<!-- android:layout_width="match_parent"-->
|
||||||
|
<!-- android:layout_height="match_parent"-->
|
||||||
|
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
|
||||||
|
<!-- app:layout_constraintEnd_toEndOf="parent"-->
|
||||||
|
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||||
|
<!-- app:layout_constraintTop_toTopOf="parent"-->
|
||||||
|
<!-- app:defaultNavHost="true"-->
|
||||||
|
<!-- app:navGraph="@navigation/main_nav"-->
|
||||||
|
<!-- tools:layout="@layout/fragment_main" />-->
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLLoad"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="visible"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/CardViewLoad"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:visibility="visible"
|
||||||
|
app:cardBackgroundColor="#FFFFFF"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<pl.droidsonroids.gif.GifImageView
|
||||||
|
android:layout_width="200dp"
|
||||||
|
android:layout_height="200dp"
|
||||||
|
android:src="@drawable/loading"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.497"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/imageView3"
|
||||||
|
app:layout_constraintVertical_bias="0.0" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageView3"
|
||||||
|
android:layout_width="300dp"
|
||||||
|
android:layout_height="300dp"
|
||||||
|
android:layout_marginTop="100dp"
|
||||||
|
android:src="@drawable/logovmediv2"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn11"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Button"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn22"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Button"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Button"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/btn22"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/btn11"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/CLPatientActivity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Patients.PatientActivity">
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Patients.TabLayoutPatient.ActiveCoursesPatientFragment">
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/rcView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:overScrollMode="never"
|
||||||
|
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,35 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Setting.Courses.EditCourses.TabLayoutEditCourses.AllSportCoursesDoctorFragment">
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/rcView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtNull"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:text="Пусто.."
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="24sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -15,6 +15,35 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/btnAddMessage"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
app:cardBackgroundColor="#ECECEC"
|
||||||
|
app:cardCornerRadius="50dp"
|
||||||
|
app:cardElevation="10dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageView11"
|
||||||
|
android:layout_width="60dp"
|
||||||
|
android:layout_height="60dp"
|
||||||
|
android:src="@drawable/add1"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:ignore="MissingConstraints" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabLayout
|
<com.google.android.material.tabs.TabLayout
|
||||||
android:id="@+id/tabLayoutProduct"
|
android:id="@+id/tabLayoutProduct"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
@ -32,10 +61,10 @@
|
||||||
app:tabIndicatorAnimationMode="elastic"
|
app:tabIndicatorAnimationMode="elastic"
|
||||||
app:tabIndicatorColor="@null"
|
app:tabIndicatorColor="@null"
|
||||||
app:tabIndicatorGravity="stretch"
|
app:tabIndicatorGravity="stretch"
|
||||||
|
app:tabMaxWidth="0dp"
|
||||||
app:tabRippleColor="#00515151"
|
app:tabRippleColor="#00515151"
|
||||||
app:tabSelectedTextColor="#FFFFFF"
|
app:tabSelectedTextColor="#FFFFFF"
|
||||||
app:tabTextColor="#6A6A6A"
|
app:tabTextColor="#6A6A6A">
|
||||||
app:tabMaxWidth="0dp">
|
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabItem
|
<com.google.android.material.tabs.TabItem
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -50,7 +79,6 @@
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</com.google.android.material.tabs.TabLayout>
|
</com.google.android.material.tabs.TabLayout>
|
||||||
|
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
|
@ -64,4 +92,42 @@
|
||||||
app:layout_constraintTop_toBottomOf="@+id/tabLayoutProduct" />
|
app:layout_constraintTop_toBottomOf="@+id/tabLayoutProduct" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLAppeals"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@drawable/gradientv1"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLMainPatientAppeals"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="#FFFFFF"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/btnExit"
|
||||||
|
android:layout_width="50dp"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:src="@drawable/arrow_24"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Patients.Reports.Courses.TabLayout.CoursesAllFragment">
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtNull"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:text="Пусто..."
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/rcView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Patients.Reports.Courses.TabLayout.CoursesYouFragment">
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtNull"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:text="Пусто..."
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/rcView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,324 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/CLCreateCourses"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Setting.Courses.EditCourses.CreateCoursesFragment">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/constraintLayout2"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="1.0"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="1.0">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/btnCreateCourses"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
app:cardBackgroundColor="#000000"
|
||||||
|
app:cardCornerRadius="15dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/btnExit">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="2dp"
|
||||||
|
app:cardBackgroundColor="#71C3EF"
|
||||||
|
app:cardCornerRadius="15dp">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView55"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:text="Создать"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/btnExit"
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:src="@drawable/arrow_24"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:ignore="MissingConstraints" />
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/cardView7"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
app:cardBackgroundColor="#000000"
|
||||||
|
app:cardCornerRadius="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/btnCreateCourses">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_margin="2dp"
|
||||||
|
app:cardCornerRadius="15dp">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView56"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Созданные вами курсы"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/rcView"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:background="#CDCDCD"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView56">
|
||||||
|
|
||||||
|
</androidx.recyclerview.widget.RecyclerView>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtNull"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Пусто..."
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="24sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/rcView"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/rcView" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView54"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
android:text="Создание курса"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="24sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLCreate"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/CVCreateCourses"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:cardBackgroundColor="#94B5B5B5"
|
||||||
|
app:cardCornerRadius="0dp"
|
||||||
|
app:cardElevation="0dp"
|
||||||
|
app:cardMaxElevation="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/CVCardCreateCourses"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="32dp"
|
||||||
|
app:cardCornerRadius="20dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/btnExitCreat"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:src="@drawable/close"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView57"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:text="Создание"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="24sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/edCoursesDoctorName"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
android:ems="10"
|
||||||
|
android:hint="Введите навзание"
|
||||||
|
android:inputType="text"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView57" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/edCoursesDoctorDescription"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginBottom="32dp"
|
||||||
|
android:ems="10"
|
||||||
|
android:hint="Описание"
|
||||||
|
android:inputType="text"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/btnCreateCoursrsDoctor"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/edCoursesDoctorName"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/edCoursesDoctorName"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/edCoursesDoctorName" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btnCreateCoursrsDoctor"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:text="Создать"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/edCoursesDoctorDescription"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/edCoursesDoctorDescription" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLLoad"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/CardViewLoad"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:visibility="visible"
|
||||||
|
app:cardBackgroundColor="#FFFFFF"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<pl.droidsonroids.gif.GifImageView
|
||||||
|
android:layout_width="200dp"
|
||||||
|
android:layout_height="200dp"
|
||||||
|
android:src="@drawable/loading"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.497"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/imageView3"
|
||||||
|
app:layout_constraintVertical_bias="0.0" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageView3"
|
||||||
|
android:layout_width="300dp"
|
||||||
|
android:layout_height="300dp"
|
||||||
|
android:layout_marginTop="100dp"
|
||||||
|
android:src="@drawable/logovmediv2"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,154 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Appeals.CreateMessageFragment">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/cardView6"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:cardBackgroundColor="#000000"
|
||||||
|
app:cardCornerRadius="10dp"
|
||||||
|
app:cardElevation="0dp"
|
||||||
|
app:cardMaxElevation="0dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView50"
|
||||||
|
tools:ignore="MissingConstraints">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/cardView5"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="2dp"
|
||||||
|
app:cardBackgroundColor="#FFFFFF"
|
||||||
|
app:cardCornerRadius="10dp"
|
||||||
|
app:cardElevation="0dp"
|
||||||
|
app:cardMaxElevation="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<AutoCompleteTextView
|
||||||
|
android:id="@+id/searchPatient"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_marginBottom="2dp"
|
||||||
|
android:background="@null"
|
||||||
|
android:ems="10"
|
||||||
|
android:gravity="center"
|
||||||
|
android:hint="Введите логин"
|
||||||
|
android:iconifiedByDefault="false"
|
||||||
|
android:inputType="text"
|
||||||
|
android:searchHintIcon="@null"
|
||||||
|
android:searchIcon="@null"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView50"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:text="Отправка сообщения пациенту"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/btnExit" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/btnExit"
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:src="@drawable/arrow_24"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/cardView12"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:maxHeight="300dp"
|
||||||
|
app:cardBackgroundColor="#000000"
|
||||||
|
app:cardCornerRadius="10dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/cardView6">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="2dp"
|
||||||
|
app:cardCornerRadius="10dp">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="300dp">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/edTextMessagePatient"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:background="@null"
|
||||||
|
android:ems="10"
|
||||||
|
android:gravity="top|left"
|
||||||
|
android:hint="Введите ваше сообщение"
|
||||||
|
android:inputType="textMultiLine|textPersonName"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btnAddMessagePatient"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="Отправить"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/cardView12"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/cardView12"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/cardView12" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,113 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Setting.Courses.EditCourses.EditCoursesFragment">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLEditCourses"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="#94B5B5B5"
|
||||||
|
android:visibility="visible"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/CVEditCourses"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:cardCornerRadius="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/btnBack"
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:src="@drawable/arrow_24"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:ignore="MissingConstraints" />
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabLayout
|
||||||
|
android:id="@+id/tabLayoutCourses"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:background="#003E3E3E"
|
||||||
|
android:backgroundTint="#00AEAEAE"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/btnBack"
|
||||||
|
app:tabIconTint="#009E9E9E"
|
||||||
|
app:tabIndicator="@drawable/tab_indicator"
|
||||||
|
app:tabIndicatorAnimationMode="elastic"
|
||||||
|
app:tabIndicatorColor="@null"
|
||||||
|
app:tabIndicatorGravity="stretch"
|
||||||
|
app:tabMaxWidth="0dp"
|
||||||
|
app:tabRippleColor="#00515151"
|
||||||
|
app:tabSelectedTextColor="#FFFFFF"
|
||||||
|
app:tabTextColor="#6A6A6A">
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Все"
|
||||||
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Добавленные"
|
||||||
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
|
||||||
|
</com.google.android.material.tabs.TabLayout>
|
||||||
|
|
||||||
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
|
android:id="@+id/vpCourses"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:overScrollMode="never"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tabLayoutCourses" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtNameCourses"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="TextView"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/btnBack"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/btnBack" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -5,11 +5,12 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".Patients.Reports.Edit.EditSportFragment">
|
tools:context=".Patients.Reports.Edit.EditSportFragment">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/ConstrainLayoutSportEdit"
|
android:id="@+id/ConstrainLayoutSportEdit"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
>
|
android:background="#D5D5D5">
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabLayout
|
<com.google.android.material.tabs.TabLayout
|
||||||
android:id="@+id/tabLayoutSport"
|
android:id="@+id/tabLayoutSport"
|
||||||
|
@ -18,8 +19,10 @@
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:background="#003E3E3E"
|
android:layout_marginBottom="8dp"
|
||||||
|
android:background="#00AEAEAE"
|
||||||
android:backgroundTint="#00AEAEAE"
|
android:backgroundTint="#00AEAEAE"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/vpEditSport"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
@ -52,6 +55,7 @@
|
||||||
android:id="@+id/vpEditSport"
|
android:id="@+id/vpEditSport"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
|
android:background="#FFFFFF"
|
||||||
android:overScrollMode="never"
|
android:overScrollMode="never"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|
|
@ -33,4 +33,29 @@
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLLoad"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="#60BCBCBC"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtLoad"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Отправка..."
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.25" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -31,4 +31,30 @@
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLLoad"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="#60BCBCBC"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtLoad"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Отправка..."
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.25" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Enternet.EnternetFragment">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView28"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="32dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Ошибка подключения к интернету"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/btnEnternet"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/btnEnternet"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/btnEnternet" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btnEnternet"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Переподключиться"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -6,8 +6,12 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".Home.HomeFragment">
|
tools:context=".Home.HomeFragment">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:id="@+id/cardView7"
|
android:id="@+id/CVPatinet"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="20dp"
|
android:layout_marginStart="20dp"
|
||||||
|
@ -15,7 +19,7 @@
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
app:cardBackgroundColor="#004F7B"
|
app:cardBackgroundColor="#004F7B"
|
||||||
app:cardCornerRadius="5dp"
|
app:cardCornerRadius="5dp"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/CVCenter"
|
app:layout_constraintEnd_toStartOf="@+id/space"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
@ -45,7 +49,7 @@
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="7"
|
android:text="0"
|
||||||
android:textColor="#FFFFFF"
|
android:textColor="#FFFFFF"
|
||||||
android:textSize="20sp"
|
android:textSize="20sp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
@ -56,6 +60,7 @@
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/CVAppeals"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
|
@ -64,7 +69,7 @@
|
||||||
app:cardBackgroundColor="#004F7B"
|
app:cardBackgroundColor="#004F7B"
|
||||||
app:cardCornerRadius="5dp"
|
app:cardCornerRadius="5dp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/CVCenter"
|
app:layout_constraintStart_toEndOf="@+id/space"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
@ -105,7 +110,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:text="6"
|
android:text="0"
|
||||||
android:textColor="#FFFFFF"
|
android:textColor="#FFFFFF"
|
||||||
android:textSize="20sp"
|
android:textSize="20sp"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/textView13"
|
app:layout_constraintBottom_toBottomOf="@+id/textView13"
|
||||||
|
@ -117,7 +122,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:text="13"
|
android:text="0"
|
||||||
android:textColor="#FFFFFF"
|
android:textColor="#FFFFFF"
|
||||||
android:textSize="20sp"
|
android:textSize="20sp"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/textView13"
|
app:layout_constraintBottom_toBottomOf="@+id/textView13"
|
||||||
|
@ -127,15 +132,64 @@
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<Space
|
||||||
android:id="@+id/CVCenter"
|
android:id="@+id/space"
|
||||||
android:layout_width="1dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="0dp"
|
android:layout_height="wrap_content"
|
||||||
app:cardBackgroundColor="#00FFFFFF"
|
|
||||||
app:cardCornerRadius="0dp"
|
|
||||||
app:cardElevation="0dp"
|
|
||||||
app:cardMaxElevation="0dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
tools:layout_editor_absoluteY="63dp" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/CLLoad"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/CardViewLoad"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:visibility="visible"
|
||||||
|
app:cardBackgroundColor="#FFFFFF"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<pl.droidsonroids.gif.GifImageView
|
||||||
|
android:layout_width="200dp"
|
||||||
|
android:layout_height="200dp"
|
||||||
|
android:src="@drawable/loading"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.497"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/imageView3"
|
||||||
|
app:layout_constraintVertical_bias="0.0" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageView3"
|
||||||
|
android:layout_width="300dp"
|
||||||
|
android:layout_height="300dp"
|
||||||
|
android:layout_marginTop="100dp"
|
||||||
|
android:src="@drawable/logovmediv2"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue