|
|
|
|
@ -2,10 +2,8 @@ package com.cyb3rko.techniklogger.fragments
|
|
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint
|
|
|
|
|
import android.content.Context
|
|
|
|
|
import android.content.SharedPreferences
|
|
|
|
|
import android.os.Bundle
|
|
|
|
|
import android.text.Html
|
|
|
|
|
import android.util.Log
|
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
|
import android.view.View
|
|
|
|
|
import android.view.ViewGroup
|
|
|
|
|
@ -27,12 +25,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
|
|
|
import com.google.android.material.timepicker.MaterialTimePicker
|
|
|
|
|
import com.google.android.material.timepicker.TimeFormat
|
|
|
|
|
import com.parse.ParseObject
|
|
|
|
|
import es.dmoral.toasty.Toasty
|
|
|
|
|
import java.sql.Time
|
|
|
|
|
import java.text.SimpleDateFormat
|
|
|
|
|
import java.util.*
|
|
|
|
|
|
|
|
|
|
@SuppressLint("SetTextI18n")
|
|
|
|
|
class MissionFragment : Fragment() {
|
|
|
|
|
private var _binding: FragmentMissionBinding? = null
|
|
|
|
|
private lateinit var myContext: Context
|
|
|
|
|
@ -45,7 +41,6 @@ class MissionFragment : Fragment() {
|
|
|
|
|
private var time = ""
|
|
|
|
|
private lateinit var participationAdapter: ParticipationAdapter
|
|
|
|
|
private var adminMode = false
|
|
|
|
|
private lateinit var sharedPref: SharedPreferences
|
|
|
|
|
|
|
|
|
|
private val binding get() = _binding!!
|
|
|
|
|
|
|
|
|
|
@ -58,26 +53,25 @@ class MissionFragment : Fragment() {
|
|
|
|
|
val root = binding.root
|
|
|
|
|
myContext = requireContext()
|
|
|
|
|
|
|
|
|
|
sharedPref = myContext.getSharedPreferences(SHARED_PREFERENCE, 0)
|
|
|
|
|
adminMode = sharedPref.getBoolean(COLUMN_TECHNIKER_ADMIN, false)
|
|
|
|
|
adminMode = Safe.getBoolean(myContext, ADMIN)
|
|
|
|
|
|
|
|
|
|
objectId = args.objectId
|
|
|
|
|
|
|
|
|
|
loadData()
|
|
|
|
|
|
|
|
|
|
binding.addButton.setOnClickListener {
|
|
|
|
|
val name = sharedPref.getString(NAME, "invalid")!!
|
|
|
|
|
val name = Safe.getKey(myContext, NAME, "invalid")
|
|
|
|
|
if (!adminMode) selfAdd(name) else bothAdd(name)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
emptyCheck()
|
|
|
|
|
|
|
|
|
|
if (adminMode || sharedPref.getString(TECHNIKER_ID, "")!!.isNotBlank()) {
|
|
|
|
|
binding.addButton.visibility = View.VISIBLE
|
|
|
|
|
if (adminMode || Safe.getKey(myContext, TECHNIKER_ID).isNotBlank()) {
|
|
|
|
|
binding.addButton.show()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (adminMode) {
|
|
|
|
|
binding.resetButton.visibility = View.VISIBLE
|
|
|
|
|
binding.resetButton.show()
|
|
|
|
|
binding.resetButton.setOnClickListener {
|
|
|
|
|
MaterialAlertDialogBuilder(myContext)
|
|
|
|
|
.setTitle("Techniker entfernen")
|
|
|
|
|
@ -91,8 +85,9 @@ class MissionFragment : Fragment() {
|
|
|
|
|
showDivider(false)
|
|
|
|
|
updateTechnikerCount(0)
|
|
|
|
|
} else {
|
|
|
|
|
Toasty.error(myContext, "Fehler bei Techniker-Abfrage", Toasty.LENGTH_SHORT).show()
|
|
|
|
|
Log.e("TechnikLogger.TechSuche", e.message.toString())
|
|
|
|
|
showErrorToast("Abfrage der Techniker fehlgeschlagen")
|
|
|
|
|
logE("Abfrage der Techniker fehlgeschlagen")
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -139,10 +134,11 @@ class MissionFragment : Fragment() {
|
|
|
|
|
} else {
|
|
|
|
|
if (e.message != null) {
|
|
|
|
|
if (e.message != "results not cached") {
|
|
|
|
|
Toasty.error(myContext, "Fehler bei Einsatz-Suche").show()
|
|
|
|
|
Log.e("TechnikLogger.EinsSuche", e.message.toString())
|
|
|
|
|
showErrorToast("Abfrage fehlgeschlagen")
|
|
|
|
|
logE("Abfrage der Einsatz-Informationen fehlgeschlagen")
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
} else {
|
|
|
|
|
Log.d("TechnikLogger.EinsSuche", "Empty cache, fetching data immediately.")
|
|
|
|
|
logD("Leerer Cache, rufe Daten direkt ab.")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -151,8 +147,8 @@ class MissionFragment : Fragment() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun loadParticipations() {
|
|
|
|
|
ParseController.fetchParticipations(objectId, true) { participations, e2 ->
|
|
|
|
|
if (e2 == null) {
|
|
|
|
|
ParseController.fetchParticipations(objectId, true) { participations, e ->
|
|
|
|
|
if (e == null) {
|
|
|
|
|
if (participations.isNotEmpty()) {
|
|
|
|
|
participations.forEach {
|
|
|
|
|
if (it.duration == 0f) it.setDuration(duration)
|
|
|
|
|
@ -165,8 +161,9 @@ class MissionFragment : Fragment() {
|
|
|
|
|
showDivider()
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
Toasty.error(myContext, "Fehler bei Teilnehmer-Abfrage").show()
|
|
|
|
|
Log.e("TechnikLogger.TechSuche", e2.message.toString())
|
|
|
|
|
showErrorToast("Abfrage der Techniker fehlgeschlagen")
|
|
|
|
|
logE("Abfrage der Techniker fehlgeschlagen")
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -178,7 +175,7 @@ class MissionFragment : Fragment() {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
participationAdapter = ParticipationAdapter(duration) {
|
|
|
|
|
if (adminMode || it.name == sharedPref.getString(NAME, "")) {
|
|
|
|
|
if (adminMode || it.name == Safe.getKey(myContext, NAME)) {
|
|
|
|
|
val uhrzeit = if (it.time == "0") {
|
|
|
|
|
time
|
|
|
|
|
} else {
|
|
|
|
|
@ -223,9 +220,9 @@ class MissionFragment : Fragment() {
|
|
|
|
|
val testHour = testTime.split(":")[0]
|
|
|
|
|
val testMinutes = testTime.split(":")[1]
|
|
|
|
|
if (testHour > hour) {
|
|
|
|
|
Toasty.warning(myContext, "Zeitpunkt nicht im Zeitraum des Einsatzes", Toasty.LENGTH_LONG).show()
|
|
|
|
|
showWarningToast("Zeitpunkt nicht im Zeitraum des Einsatzes")
|
|
|
|
|
} else if (testHour == hour && testMinutes > minute) {
|
|
|
|
|
Toasty.warning(myContext, "Zeitpunkt nicht im Zeitraum des Einsatzes", Toasty.LENGTH_LONG).show()
|
|
|
|
|
showWarningToast("Zeitpunkt nicht im Zeitraum des Einsatzes")
|
|
|
|
|
} else {
|
|
|
|
|
tempTime += "${hour}:${minute} - "
|
|
|
|
|
activity?.let { it1 -> picker2.show(it1.supportFragmentManager, picker2.tag) }
|
|
|
|
|
@ -243,10 +240,10 @@ class MissionFragment : Fragment() {
|
|
|
|
|
val testHour = testTime.split(":")[0]
|
|
|
|
|
val testMinutes = testTime.split(":")[1]
|
|
|
|
|
if (testHour < hour) {
|
|
|
|
|
Toasty.warning(myContext, "Zeitpunkt nicht im Zeitraum des Einsatzes", Toasty.LENGTH_LONG).show()
|
|
|
|
|
showWarningToast("Zeitpunkt nicht im Zeitraum des Einsatzes")
|
|
|
|
|
return@addOnPositiveButtonClickListener
|
|
|
|
|
} else if (testHour == hour && testMinutes < minute) {
|
|
|
|
|
Toasty.warning(myContext, "Zeitpunkt nicht im Zeitraum des Einsatzes", Toasty.LENGTH_LONG).show()
|
|
|
|
|
showWarningToast("Zeitpunkt nicht im Zeitraum des Einsatzes")
|
|
|
|
|
return@addOnPositiveButtonClickListener
|
|
|
|
|
}
|
|
|
|
|
tempTime += "${hour}:${minute}"
|
|
|
|
|
@ -259,11 +256,12 @@ class MissionFragment : Fragment() {
|
|
|
|
|
setTime(it.time)
|
|
|
|
|
saveInBackground {
|
|
|
|
|
if (it == null) {
|
|
|
|
|
Toasty.success(myContext, "Arbeitszeit geändert").show()
|
|
|
|
|
showSuccessToast("Arbeitszeit geändert")
|
|
|
|
|
loadParticipations()
|
|
|
|
|
} else {
|
|
|
|
|
Toasty.error(myContext, "Fehler bei Speicherung").show()
|
|
|
|
|
Log.e("TechnikLogger.TechEdit", it.message.toString())
|
|
|
|
|
showErrorToast("Ändern der Arbeitszeit fehlgeschlagen")
|
|
|
|
|
logE("Ändern der Arbeitszeit fehlgeschlagen")
|
|
|
|
|
it.printStackTrace()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -315,16 +313,17 @@ class MissionFragment : Fragment() {
|
|
|
|
|
|
|
|
|
|
private fun selfAdd(name: String, skip: Boolean = false) {
|
|
|
|
|
if (!memberExists(name)) {
|
|
|
|
|
val ownMemberId = Safe.getKey(myContext, TECHNIKER_ID)
|
|
|
|
|
if (!skip) {
|
|
|
|
|
MaterialAlertDialogBuilder(myContext)
|
|
|
|
|
.setMessage("Möchtest du dich als involvierter Techniker eintragen?")
|
|
|
|
|
.setPositiveButton("Ja") { _, _ ->
|
|
|
|
|
addTechniker(listOf(sharedPref.getString(TECHNIKER_ID, "")!!))
|
|
|
|
|
addTechniker(listOf(ownMemberId))
|
|
|
|
|
}
|
|
|
|
|
.setNegativeButton("Abbrechen", null)
|
|
|
|
|
.show()
|
|
|
|
|
} else {
|
|
|
|
|
addTechniker(listOf(sharedPref.getString(TECHNIKER_ID, "")!!))
|
|
|
|
|
addTechniker(listOf(ownMemberId))
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
MaterialAlertDialogBuilder(myContext)
|
|
|
|
|
@ -383,8 +382,9 @@ class MissionFragment : Fragment() {
|
|
|
|
|
}
|
|
|
|
|
.show()
|
|
|
|
|
} else {
|
|
|
|
|
Toasty.error(myContext, "Fehler bei Techniker-Suche").show()
|
|
|
|
|
Log.e("TechnikLogger.TechSuche", e.message.toString())
|
|
|
|
|
showErrorToast("Abfrage der Techniker fehlgeschlagen")
|
|
|
|
|
logE("Abfrage der Techniker fehlgeschlagen")
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -405,12 +405,14 @@ class MissionFragment : Fragment() {
|
|
|
|
|
if (it == null) {
|
|
|
|
|
loadData()
|
|
|
|
|
} else {
|
|
|
|
|
Toasty.error(myContext, "Fehler bei Techniker-Suche").show()
|
|
|
|
|
Log.e("TechnikLogger.TechSuche", it.message.toString())
|
|
|
|
|
showErrorToast("Speichern fehlgeschlagen")
|
|
|
|
|
logE("Speichern des Technikers fehlgeschlagen")
|
|
|
|
|
it.printStackTrace()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SuppressLint("SetTextI18n")
|
|
|
|
|
private fun updateTechnikerCount(counter: Int) {
|
|
|
|
|
binding.technikerView.text = "Techniker: $counter"
|
|
|
|
|
}
|
|
|
|
|
@ -421,7 +423,7 @@ class MissionFragment : Fragment() {
|
|
|
|
|
|
|
|
|
|
private fun emptyCheck() {
|
|
|
|
|
if (isRecyclerViewInitialized() && participationAdapter.currentList.isEmpty()) {
|
|
|
|
|
binding.divider.visibility = View.GONE
|
|
|
|
|
binding.divider.hide()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|