From a6dbb27f7f5ea6cac30eb4e722d92d0aa38fb1e2 Mon Sep 17 00:00:00 2001 From: francescods Date: Wed, 11 Jun 2025 13:55:08 +0200 Subject: [PATCH] endpoint /prezziScontiMagazzino --- .../maiora/model/ViewEcommercePrezSconDisp.kt | 20 +++++ .../ViewEcommercePrezSconDispRepository.kt | 5 ++ ...ViewEcommercePrezSconDispRepositoryImpl.kt | 64 ++++++++++++++++ .../maiora/model/ViewEcommerceValoreUsato.kt | 11 +++ .../ViewEcommerceValoreUsatoRepository.kt | 5 ++ .../ViewEcommerceValoreUsatoRepositoryImpl.kt | 32 ++++++++ src/main/kotlin/eu/maiora/plugins/Routing.kt | 5 ++ .../eu/maiora/routes/PrezziScontiMagazzino.kt | 74 +++++++++++++++++++ 8 files changed, 216 insertions(+) create mode 100644 src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDisp.kt create mode 100644 src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepository.kt create mode 100644 src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepositoryImpl.kt create mode 100644 src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsato.kt create mode 100644 src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepository.kt create mode 100644 src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepositoryImpl.kt create mode 100644 src/main/kotlin/eu/maiora/routes/PrezziScontiMagazzino.kt diff --git a/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDisp.kt b/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDisp.kt new file mode 100644 index 0000000..f61ff3e --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDisp.kt @@ -0,0 +1,20 @@ +package eu.maiora.model + +import kotlinx.serialization.Serializable + +@Serializable +data class ViewEcommercePrezSconDisp( + val id : Long, + val idCliente : Long, + val idArticolo : Long, + val idMagazzino : Long, + val magazzino : String, + val valoreCarcassa : Double, + val prezzo : Double, + val sconto : Double, + val sconto1 : Double, + val sconto2 : Double, + val sconto3 : Double, + val netto : Double, + val numeroPezzi : Int +) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepository.kt b/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepository.kt new file mode 100644 index 0000000..3fa1977 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepository.kt @@ -0,0 +1,5 @@ +package eu.maiora.model + +interface ViewEcommercePrezSconDispRepository { + suspend fun disponibilitaByIdArtIdClie(idCliente: Long, idArticolo : Long ): List? +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepositoryImpl.kt new file mode 100644 index 0000000..c8ea0f4 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ViewEcommercePrezSconDispRepositoryImpl.kt @@ -0,0 +1,64 @@ +package eu.maiora.model + +import eu.maiora.db.* +import eu.maiora.loadConfig +import org.jetbrains.exposed.sql.LongColumnType + +class ViewEcommercePrezSconDispRepositoryImpl : ViewEcommercePrezSconDispRepository { + override suspend fun disponibilitaByIdArtIdClie(idCliente: Long, idArticolo : Long): List? = suspendTransaction { + // Cerca le disponibilità e i prezzi dato articolo e cliente dalla table function ViewEcommercePrezSconDispTable + val properties = loadConfig() + + val result = exec("SELECT * FROM dbo.Get_Prez_Scon_Disp(?, ?)", listOf( + LongColumnType() to idCliente, + LongColumnType() to idArticolo + )) { rs -> + val list = mutableListOf() + while (rs.next()) { + val element : ViewEcommercePrezSconDisp + if(idCliente == properties.getProperty("qricambi.id").toLong()){ + element = ViewEcommercePrezSconDisp( + id = rs.getLong("id"), + idCliente = rs.getLong("id_cliente"), + idArticolo = rs.getLong("id_articolo"), + idMagazzino = -1, + magazzino = "", + valoreCarcassa = rs.getDouble("valore_carcassa"), + prezzo = 0.0, + sconto = 0.0, + sconto1 = 0.0, + sconto2 = 0.0, + sconto3 = 0.0, + netto = 0.0, + numeroPezzi = rs.getInt("numero_pezzi") + ) + } + else { + element = ViewEcommercePrezSconDisp( + id = rs.getLong("id"), + idCliente = rs.getLong("id_cliente"), + idArticolo = rs.getLong("id_articolo"), + idMagazzino = rs.getLong("id_magazzino"), + magazzino = rs.getString("magazzino"), + valoreCarcassa = rs.getDouble("valore_carcassa"), + prezzo = rs.getDouble("prezzo"), + sconto = rs.getDouble("sconto"), + sconto1 = rs.getDouble("sconto_1"), + sconto2 = rs.getDouble("sconto_2"), + sconto3 = rs.getDouble("sconto_3"), + netto = rs.getDouble("netto"), + numeroPezzi = rs.getInt("numero_pezzi") + ) + } + + + list.add(element) + + } + list + } + + result?.ifEmpty { emptyList() } + + } +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsato.kt b/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsato.kt new file mode 100644 index 0000000..c35f967 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsato.kt @@ -0,0 +1,11 @@ +package eu.maiora.model + +import kotlinx.serialization.Serializable + +@Serializable +data class ViewEcommerceValoreUsato( + val id : Long, + val idCliente : Long, + val idArticolo : Long, + val valoreUsato : Double +) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepository.kt b/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepository.kt new file mode 100644 index 0000000..246bcb1 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepository.kt @@ -0,0 +1,5 @@ +package eu.maiora.model + +interface ViewEcommerceValoreUsatoRepository { + suspend fun getValoreByIdArtIdClie(idCliente: Long, idArticolo : Long ): List? +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepositoryImpl.kt new file mode 100644 index 0000000..25efbaa --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ViewEcommerceValoreUsatoRepositoryImpl.kt @@ -0,0 +1,32 @@ +package eu.maiora.model + +import eu.maiora.db.* +import org.jetbrains.exposed.sql.LongColumnType + +class ViewEcommerceValoreUsatoRepositoryImpl : ViewEcommerceValoreUsatoRepository { + override suspend fun getValoreByIdArtIdClie(idCliente: Long, idArticolo : Long): List? = suspendTransaction { + // Cerca il valore della carcassa dalla table function ViewEcommerceValoreUsatoTable + + val result = exec("SELECT * FROM dbo.Get_Valore_usato(?, ?)", listOf( + LongColumnType() to idCliente, + LongColumnType() to idArticolo + )) { rs -> + val list = mutableListOf() + while (rs.next()) { + val element : ViewEcommerceValoreUsato + element = ViewEcommerceValoreUsato( + id = rs.getLong("id"), + idCliente = rs.getLong("id_cliente"), + idArticolo = rs.getLong("id_articolo"), + valoreUsato = rs.getDouble("valore_usato") + ) + list.add(element) + + } + list + } + + result?.ifEmpty { emptyList() } + + } +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/plugins/Routing.kt b/src/main/kotlin/eu/maiora/plugins/Routing.kt index 7194be6..e5e6260 100644 --- a/src/main/kotlin/eu/maiora/plugins/Routing.kt +++ b/src/main/kotlin/eu/maiora/plugins/Routing.kt @@ -1,7 +1,11 @@ package eu.maiora.plugins import eu.maiora.model.AccountsRepositoryImpl +import eu.maiora.model.ViewEcommercePrezSconDispRepositoryImpl +import eu.maiora.model.ViewEcommerceValoreUsatoRepository +import eu.maiora.model.ViewEcommerceValoreUsatoRepositoryImpl import eu.maiora.routes.auth +import eu.maiora.routes.prezziScontiMagazzino import io.ktor.server.application.* import io.ktor.server.response.* import io.ktor.server.routing.* @@ -13,5 +17,6 @@ fun Application.configureRouting() { } auth(AccountsRepositoryImpl()) + prezziScontiMagazzino(ViewEcommerceValoreUsatoRepositoryImpl(), ViewEcommercePrezSconDispRepositoryImpl()) } } diff --git a/src/main/kotlin/eu/maiora/routes/PrezziScontiMagazzino.kt b/src/main/kotlin/eu/maiora/routes/PrezziScontiMagazzino.kt new file mode 100644 index 0000000..9101233 --- /dev/null +++ b/src/main/kotlin/eu/maiora/routes/PrezziScontiMagazzino.kt @@ -0,0 +1,74 @@ +package eu.maiora.routes + +import eu.maiora.model.ViewEcommercePrezSconDisp +import eu.maiora.model.ViewEcommercePrezSconDispRepository +import eu.maiora.model.ViewEcommerceValoreUsatoRepository +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.auth.* +import io.ktor.server.response.* +import io.ktor.server.routing.* + +fun Route.prezziScontiMagazzino(viewEcommerceValoreUsatoRepository: ViewEcommerceValoreUsatoRepository, + viewEcommercePrezSconDispRepository: ViewEcommercePrezSconDispRepository){ + route("/api/prezziScontiMagazzino"){ + authenticate("auth-jwt") { + get(){ + // Ottieni l'id articolo dal percorso + val idArticolo = call.parameters["idArticolo"] + // Ottieni l'id cliente dal percorso + val idCliente = call.parameters["idCliente"] + + if (idArticolo.isNullOrEmpty()) { + call.respondText("ID articolo non valido", status = HttpStatusCode.BadRequest) + return@get + } + + if (idCliente.isNullOrEmpty()) { + call.respondText("ID cliente non valido", status = HttpStatusCode.BadRequest) + return@get + } + + + val dataValoreUsato = viewEcommerceValoreUsatoRepository.getValoreByIdArtIdClie(idCliente.toLong(), idArticolo.toLong()) + if(!dataValoreUsato.isNullOrEmpty() && dataValoreUsato.size == 1){ + val data = viewEcommercePrezSconDispRepository.disponibilitaByIdArtIdClie(idCliente.toLong(), idArticolo.toLong()) + if(!data.isNullOrEmpty()){ + var listaElementiConValoreUsato = ArrayList() + data.forEach { e -> + val nuovoElemento = e.copy(valoreCarcassa = dataValoreUsato[0].valoreUsato) + listaElementiConValoreUsato.add(nuovoElemento) + } + call.respond(listaElementiConValoreUsato) + } + else { + call.respondText("Articolo ecommerce non trovato (prezzi sconti e disponibilita)", status = HttpStatusCode.NotFound) + } + } + else { + if(dataValoreUsato.isNullOrEmpty()){ + call.respondText( + "Errore nel recupero del valore usato. Nessun record trovato. idArticolo:$idArticolo - idCliente:$idCliente", + status = HttpStatusCode.NotFound) + } + else if(dataValoreUsato.size > 1){ + call.respondText( + "Errore nel recupero del valore usato. Trovati record multipli. idArticolo:$idArticolo - idCliente:$idCliente", + status = HttpStatusCode.NotFound) + } + + } + + + + + + + + + + call.respond("OK") + } + } + } +} \ No newline at end of file