dmacan23
5/22/2017 - 9:29 AM

SesijaDAO.kt

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
)