package com.zeromolecule.bootstrap.androidkotlin.data.database
import com.google.android.gms.maps.model.LatLng
import com.j256.ormlite.stmt.query.In
import com.zeromolecule.bootstrap.androidkotlin.commons.extensions.logi
import com.zeromolecule.bootstrap.androidkotlin.commons.extensions.stringify
import com.zeromolecule.bootstrap.androidkotlin.commons.extensions.subscribeSafe
import com.zeromolecule.zero_db.ZeroDatabase
import rx.Observable
import rx.Scheduler
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
import java.sql.ResultSet
import java.util.*
/**
* Created by David Macan, 2017
*/
class SesijaDAO(val database: ZeroDatabase = ZeroDatabase.instance) {
fun getAllFromAgent(agent: Agent) = database.queryRx("SELECT dbo.Sesija.*, dbo.Korisnik.ime, dbo.Korisnik.prezime FROM dbo.Korisnik, dbo.Sesija WHERE Sesija.OIB = Korisnik.OIB AND Sesija.agentID = ${agent.id}", {
toEntity(it)
})
fun toEntity(resultSet: ResultSet): Sesija = Sesija(
resultSet.getInt("id"),
resultSet.getString("OIB"),
resultSet.getString("agentID"),
resultSet.getDate("od"),
resultSet.getDate("do"),
resultSet.getFloat("potrosnjaHT"),
resultSet.getFloat("potrosnjaLT"),
resultSet.getFloat("potrosnjaOT"),
resultSet.getInt("pocetniProizvod"),
resultSet.getDate("ugovoreno"),
resultSet.getInt("ugovoreniProizvod"),
resultSet.getString("ime"),
resultSet.getString("prezime")
)
fun add(sesija: Sesija): Observable<Boolean> {
val statement = "INSERT INTO [dbo].[Sesija]" +
"([OIB],[agentID],[od],[do],[pocetniProizvod],[ugovoreno])" +
"VALUES(" +
"'${sesija.OIB}', '${sesija.agentId}', '${sesija.from?.stringify(true).orEmpty()}', '${sesija.to?.stringify(true).orEmpty()}'," +
"${sesija.product}, '${sesija.set.stringify(true).orEmpty()}'" +
")"
return database.executeRx(statement)
}
fun lastSessionID(): Observable<Int> = database.queryRx("select top 1 id from Sesija order by id desc", {
it.getInt("id")
}).map { it[0] }
fun updateLocation(id: Int, lat: Float, lng: Float) {
val statement = "UPDATE Agent SET lon = $lng,lat = $lat WHERE id=$id"
database.executeRx(statement)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeSafe {
logi("Executed statement")
}
}
}
data class Sesija(
var id: Int = -1,
var OIB: String? = null,
var agentId: String? = null,
var from: Date? = null,
var to: Date? = null,
var spendHT: Float? = null,
var spendLT: Float? = null,
var spendOT: Float? = null,
var product: Int? = null,
var set: Date = Date(),
var setProduct: Int? = null,
var firstName: String? = null,
var lastName: String? = null
)