Initial commit

This commit is contained in:
2026-06-04 18:19:46 +03:00
commit 1d8dbe1a6b
64 changed files with 3577 additions and 0 deletions
@@ -0,0 +1,86 @@
package com.yaros.shiftmanager
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import androidx.room.*
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import android.content.Context
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
import java.util.*
import javax.inject.Inject
@Entity(tableName = "incomes")
data class Income(
@PrimaryKey val id: String = UUID.randomUUID().toString(),
val shiftId: String,
val amount: Double,
val type: IncomeType,
val date: Date
)
enum class IncomeType {
REGULAR, TIPS, BONUS
}
@Dao
interface IncomeDao {
@Query("SELECT * FROM incomes")
fun getAllIncomes(): Flow<List<Income>>
@Query("SELECT * FROM incomes WHERE date BETWEEN :startDate AND :endDate")
fun getIncomesForPeriod(startDate: Date, endDate: Date): Flow<List<Income>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertIncome(income: Income)
@Update
suspend fun updateIncome(income: Income)
@Delete
suspend fun deleteIncome(income: Income)
}
class IncomeRepository @Inject constructor(private val incomeDao: IncomeDao) {
val allIncomes: Flow<List<Income>> = incomeDao.getAllIncomes()
fun getIncomesForPeriod(startDate: Date, endDate: Date): Flow<List<Income>> {
return incomeDao.getIncomesForPeriod(startDate, endDate)
}
suspend fun insertIncome(income: Income) {
incomeDao.insertIncome(income)
}
suspend fun updateIncome(income: Income) {
incomeDao.updateIncome(income)
}
suspend fun deleteIncome(income: Income) {
incomeDao.deleteIncome(income)
}
}
@HiltViewModel
class IncomeViewModel @Inject constructor(private val repository: IncomeRepository) : ViewModel() {
val allIncomes: LiveData<List<Income>> = repository.allIncomes.asLiveData()
fun getIncomesForPeriod(startDate: Date, endDate: Date): LiveData<List<Income>> {
return repository.getIncomesForPeriod(startDate, endDate).asLiveData()
}
fun insertIncome(income: Income) = viewModelScope.launch {
repository.insertIncome(income)
}
fun updateIncome(income: Income) = viewModelScope.launch {
repository.updateIncome(income)
}
fun deleteIncome(income: Income) = viewModelScope.launch {
repository.deleteIncome(income)
}
}