forked from maiora/backend-api
Merge pull request '0002650-endpoint-annullaPrenotazioni-modifiche-richieste' (#25) from 0002650-endpoint-annullaPrenotazioni-modifiche-richieste into dev
Reviewed-on: #25
This commit is contained in:
commit
0c63926fff
@ -3,6 +3,8 @@ package eu.maiora.db
|
||||
|
||||
import eu.maiora.model.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.datetime.toKotlinLocalDate
|
||||
import kotlinx.datetime.toKotlinLocalDateTime
|
||||
import org.jetbrains.exposed.dao.*
|
||||
import org.jetbrains.exposed.dao.id.EntityID
|
||||
import org.jetbrains.exposed.dao.id.IdTable
|
||||
@ -13,7 +15,6 @@ import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransacti
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
|
||||
|
||||
object AccountsTable : IdTable<Int>("accounts") {
|
||||
override val id = integer("id").entityId()
|
||||
val username = varchar("username", 255)
|
||||
@ -30,7 +31,15 @@ object ParametriTable : IdTable<Int>("parametri"){
|
||||
override val primaryKey = PrimaryKey(id)
|
||||
}
|
||||
|
||||
object TessereTable : IdTable<Long>("view_tessere_api"){
|
||||
object TessereTable : IdTable<Long>("tessere") {
|
||||
override val id = long("id").entityId()
|
||||
val saldo = double("saldo")
|
||||
val tsUltimoUtilizzo = datetime("ts_ultimo_utilizzo")
|
||||
|
||||
override val primaryKey = PrimaryKey(id)
|
||||
}
|
||||
|
||||
object ViewTessereAPITable : IdTable<Long>("view_tessere_api") {
|
||||
override val id = long("id").entityId()
|
||||
val idUtente = long("id_utente")
|
||||
val codiceFiscale = varchar("codice_fiscale", 255)
|
||||
@ -59,6 +68,35 @@ object MovimentiTable : IdTable<Long>("view_movimenti_api"){
|
||||
val dettagli = varchar("dettagli", 255)
|
||||
}
|
||||
|
||||
object DwhMovimentiTable : IdTable<Long>("dwh.movimenti") {
|
||||
override val id = long("id").autoIncrement("dwh.seq_movimenti").entityId()
|
||||
val idTessera = long("id_tessera")
|
||||
val numero = varchar("numero", 255)
|
||||
val operazione = varchar("operazione", 255)
|
||||
val data = datetime("DATA")
|
||||
val transazione = long("transazione")
|
||||
val dispositivo = varchar("dispositivo", 255)
|
||||
val riferimento = varchar("riferimento", 255)
|
||||
val saldoPre = double("saldo_pre")
|
||||
val importo = double("importo")
|
||||
val saldoPost = double("saldo_post")
|
||||
val puntiPre = long("punti_pre")
|
||||
val punti = long("punti")
|
||||
val puntiPost = long("punti_post")
|
||||
val flagPassaggioTessera = integer("flag_passaggio_tessera")
|
||||
val oggetto = varchar("oggetto", 255)
|
||||
val cognome = varchar("cognome", 255)
|
||||
val nome = varchar("nome", 255)
|
||||
val codiceFiscale = varchar("codice_fiscale", 255)
|
||||
val azienda = varchar("azienda", 255)
|
||||
val categoriaUtenti = varchar("categoria_utenti", 255)
|
||||
val fascia = varchar("fascia", 255)
|
||||
val idTipoMovimentoConto = integer("id_tipo_movimento_conto")
|
||||
val giorno = date("giorno")
|
||||
val modalita = varchar("modalita", 255)
|
||||
val idModalita = long("id_modalita")
|
||||
}
|
||||
|
||||
object ComposizioniTable : IdTable<Long>("view_composizioni") {
|
||||
override val id = long("id").entityId()
|
||||
val idVassoio = long("id_vassoio")
|
||||
@ -148,6 +186,7 @@ object ViewPrenotazioniPastiTable : IdTable<Long>("view_prenotazioni_pasti"){
|
||||
val dataFine = datetime("data_fine")
|
||||
val dataLimiteCancellazione = datetime("data_limite_cancellazione")
|
||||
val idVassoio = long("id_vassoio").nullable()
|
||||
val vassoio = varchar("vassoio", 255)
|
||||
val codiceRistocloud = varchar("codice_ristocloud", 255).nullable()
|
||||
val importoPagato = double("importo_pagato")
|
||||
val puntoDistribuzione = varchar("punto_distribuzione", 255)
|
||||
@ -175,11 +214,18 @@ class ParametriDAO(id: EntityID<Int>) :IntEntity(id) {
|
||||
class TessereDao(id: EntityID<Long>) : LongEntity(id) {
|
||||
companion object : LongEntityClass<TessereDao>(TessereTable)
|
||||
|
||||
var idUtente by TessereTable.idUtente
|
||||
var codiceFiscale by TessereTable.codiceFiscale
|
||||
var numero by TessereTable.numero
|
||||
var saldo by TessereTable.saldo
|
||||
var punti by TessereTable.punti
|
||||
var tsUltimoUtilizzo by TessereTable.tsUltimoUtilizzo
|
||||
}
|
||||
|
||||
class ViewTessereAPIDao(id: EntityID<Long>) : LongEntity(id) {
|
||||
companion object : LongEntityClass<ViewTessereAPIDao>(ViewTessereAPITable)
|
||||
|
||||
var idUtente by ViewTessereAPITable.idUtente
|
||||
var codiceFiscale by ViewTessereAPITable.codiceFiscale
|
||||
var numero by ViewTessereAPITable.numero
|
||||
var saldo by ViewTessereAPITable.saldo
|
||||
var punti by ViewTessereAPITable.punti
|
||||
}
|
||||
|
||||
class MovimentiDao(id: EntityID<Long>) : LongEntity(id) {
|
||||
@ -201,6 +247,36 @@ class MovimentiDao(id: EntityID<Long>) :LongEntity(id) {
|
||||
var dettagli by MovimentiTable.dettagli
|
||||
}
|
||||
|
||||
class DwhMovimentiDao(id: EntityID<Long>) : LongEntity(id) {
|
||||
companion object : LongEntityClass<DwhMovimentiDao>(DwhMovimentiTable)
|
||||
|
||||
var idTessera by DwhMovimentiTable.idTessera
|
||||
var numero by DwhMovimentiTable.numero
|
||||
var operazione by DwhMovimentiTable.operazione
|
||||
var data by DwhMovimentiTable.data
|
||||
var transazione by DwhMovimentiTable.transazione
|
||||
var dispositivo by DwhMovimentiTable.dispositivo
|
||||
var riferimento by DwhMovimentiTable.riferimento
|
||||
var saldoPre by DwhMovimentiTable.saldoPre
|
||||
var importo by DwhMovimentiTable.importo
|
||||
var saldoPost by DwhMovimentiTable.saldoPost
|
||||
var puntiPre by DwhMovimentiTable.puntiPre
|
||||
var punti by DwhMovimentiTable.punti
|
||||
var puntiPost by DwhMovimentiTable.puntiPost
|
||||
var flagPassaggioTessera by DwhMovimentiTable.flagPassaggioTessera
|
||||
var oggetto by DwhMovimentiTable.oggetto
|
||||
var cognome by DwhMovimentiTable.cognome
|
||||
var nome by DwhMovimentiTable.nome
|
||||
var codiceFiscale by DwhMovimentiTable.codiceFiscale
|
||||
var azienda by DwhMovimentiTable.azienda
|
||||
var categoriaUtenti by DwhMovimentiTable.categoriaUtenti
|
||||
var fascia by DwhMovimentiTable.fascia
|
||||
var idTipoMovimentoConto by DwhMovimentiTable.idTipoMovimentoConto
|
||||
var giorno by DwhMovimentiTable.giorno
|
||||
var modalita by DwhMovimentiTable.modalita
|
||||
var idModalita by DwhMovimentiTable.idModalita
|
||||
}
|
||||
|
||||
class ComposizioniDao(id: EntityID<Long>) : LongEntity(id) {
|
||||
companion object : LongEntityClass<ComposizioniDao>(ComposizioniTable)
|
||||
|
||||
@ -297,6 +373,7 @@ class ViewPrenotazioniPastiDao(id: EntityID<Long>) :LongEntity(id){
|
||||
val dataFine by ViewPrenotazioniPastiTable.dataFine
|
||||
val dataLimiteCancellazione by ViewPrenotazioniPastiTable.dataLimiteCancellazione
|
||||
val idVassoio by ViewPrenotazioniPastiTable.idVassoio
|
||||
val vassoio by ViewPrenotazioniPastiTable.vassoio
|
||||
val codiceRistocloud by ViewPrenotazioniPastiTable.codiceRistocloud
|
||||
val importoPagato by ViewPrenotazioniPastiTable.importoPagato
|
||||
val puntoDistribuzione by ViewPrenotazioniPastiTable.puntoDistribuzione
|
||||
@ -320,6 +397,15 @@ fun parametriDaoToModel(dao: ParametriDAO) = Parametri(
|
||||
)
|
||||
|
||||
fun tessereDaoToModel(dao: TessereDao) = Tessere(
|
||||
dao.id.value,
|
||||
dao.saldo,
|
||||
dao.tsUltimoUtilizzo.toKotlinLocalDateTime()
|
||||
)
|
||||
|
||||
|
||||
fun viewTessereAPIDaoToModel(dao: ViewTessereAPIDao): ViewTessereAPI {
|
||||
|
||||
return ViewTessereAPI(
|
||||
dao.id.value,
|
||||
dao.idUtente,
|
||||
dao.codiceFiscale,
|
||||
@ -327,6 +413,8 @@ fun tessereDaoToModel(dao: TessereDao) = Tessere(
|
||||
dao.saldo,
|
||||
dao.punti
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
fun movimentiDaoToModel(dao: MovimentiDao): Movimenti {
|
||||
val formatter = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
||||
@ -351,6 +439,36 @@ fun movimentiDaoToModel(dao: MovimentiDao) :Movimenti{
|
||||
)
|
||||
}
|
||||
|
||||
fun dwhMovimentiDaoToModel(dao: DwhMovimentiDao) = DwhMovimenti(
|
||||
dao.id.value,
|
||||
dao.idTessera,
|
||||
dao.numero,
|
||||
dao.operazione,
|
||||
dao.data.toKotlinLocalDateTime(),
|
||||
dao.transazione,
|
||||
dao.dispositivo,
|
||||
dao.riferimento,
|
||||
dao.saldoPre,
|
||||
dao.importo,
|
||||
dao.saldoPost,
|
||||
dao.puntiPre,
|
||||
dao.punti,
|
||||
dao.puntiPost,
|
||||
dao.flagPassaggioTessera,
|
||||
dao.oggetto,
|
||||
dao.cognome,
|
||||
dao.nome,
|
||||
dao.codiceFiscale,
|
||||
dao.azienda,
|
||||
dao.categoriaUtenti,
|
||||
dao.fascia,
|
||||
dao.idTipoMovimentoConto,
|
||||
dao.giorno.toKotlinLocalDate(),
|
||||
dao.modalita,
|
||||
dao.idModalita
|
||||
)
|
||||
|
||||
|
||||
fun composizioniDaoToModel(dao: ComposizioniDao) = Composizioni(
|
||||
dao.id.value,
|
||||
dao.idVassoio,
|
||||
@ -450,39 +568,11 @@ fun prenotazioniPastiDettaglioDaoToModel(dao: PrenotazioniPastiDettaglioDao) : P
|
||||
)
|
||||
}
|
||||
|
||||
/*fun viewPrenotazioniPastiDaoToModel(dao: ViewPrenotazioniPastiDao) : ViewPrenotazioniPasti{
|
||||
val formatterGiorno = DateTimeFormatter.ofPattern("ddMMyyyy")
|
||||
val formatterDataInizio = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
||||
val formatterDataFine = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
||||
val formatterDataLimiteCancellazione = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
||||
val formattedGiorno = dao.giorno.format(formatterGiorno)
|
||||
val formattedDataInizio = dao.dataInizio.format(formatterDataInizio)
|
||||
val formattedDataFine = dao.dataFine.format(formatterDataFine)
|
||||
val formattedDataLimiteCanc = dao.dataLimiteCancellazione.format(formatterDataLimiteCancellazione)
|
||||
|
||||
|
||||
return ViewPrenotazioniPasti(
|
||||
dao.idPrenotazione,
|
||||
dao.idStato,
|
||||
dao.stato,
|
||||
dao.idTessera,
|
||||
dao.idSlotPuntoCassa,
|
||||
formattedGiorno,
|
||||
dao.turno,
|
||||
formattedDataInizio,
|
||||
formattedDataFine,
|
||||
formattedDataLimiteCanc,
|
||||
dao.idVassoio,
|
||||
dao.codiceRistocloud,
|
||||
dao.importoPagato,
|
||||
dao.puntoDistribuzione,
|
||||
dao.puntoCassa,
|
||||
dao.modalita,
|
||||
null
|
||||
)
|
||||
}*/
|
||||
|
||||
fun viewPrenotazioniPastiDaoToModel(dao: ViewPrenotazioniPastiDao, listaProdotti: List<ListaProdottiElement>? = null) : ViewPrenotazioniPasti{
|
||||
|
||||
fun viewPrenotazioniPastiDaoToModel(
|
||||
dao: ViewPrenotazioniPastiDao,
|
||||
listaProdotti: List<ListaProdottiElement>? = null
|
||||
): ViewPrenotazioniPasti {
|
||||
val formatterGiorno = DateTimeFormatter.ofPattern("ddMMyyyy")
|
||||
val formatterDataInizio = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
||||
val formatterDataFine = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
||||
@ -505,6 +595,7 @@ fun viewPrenotazioniPastiDaoToModel(dao: ViewPrenotazioniPastiDao, listaProdotti
|
||||
formattedDataFine,
|
||||
formattedDataLimiteCanc,
|
||||
dao.idVassoio,
|
||||
dao.vassoio,
|
||||
dao.codiceRistocloud,
|
||||
dao.importoPagato,
|
||||
dao.puntoDistribuzione,
|
||||
|
38
src/main/kotlin/eu/maiora/model/DwhMovimenti.kt
Normal file
38
src/main/kotlin/eu/maiora/model/DwhMovimenti.kt
Normal file
@ -0,0 +1,38 @@
|
||||
package eu.maiora.model
|
||||
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.datetime.LocalDateTime
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
||||
|
||||
@Serializable
|
||||
data class DwhMovimenti(
|
||||
val id: Long,
|
||||
val idTessera: Long,
|
||||
val numero: String,
|
||||
val operazione: String,
|
||||
val data: LocalDateTime,
|
||||
val transazione: Long,
|
||||
val dispositivo: String,
|
||||
val riferimento: String,
|
||||
val saldoPre: Double,
|
||||
val importo: Double,
|
||||
val saldoPost: Double,
|
||||
val puntiPre: Long,
|
||||
val punti: Long,
|
||||
val puntiPost: Long,
|
||||
val flagPassaggioTessera: Int,
|
||||
val oggetto: String,
|
||||
val cognome: String,
|
||||
val nome: String,
|
||||
val codiceFiscale: String,
|
||||
val azienda: String,
|
||||
val categoriaUtenti: String,
|
||||
val fascia: String,
|
||||
val idTipoMovimentoConto: Int,
|
||||
val giorno: LocalDate,
|
||||
val modalita: String,
|
||||
val idModalita: Long
|
||||
|
||||
)
|
@ -0,0 +1,5 @@
|
||||
package eu.maiora.model
|
||||
|
||||
interface DwhMovimentiRepository {
|
||||
suspend fun insert(movimento : DwhMovimenti): DwhMovimenti
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package eu.maiora.model
|
||||
|
||||
import eu.maiora.db.*
|
||||
import kotlinx.datetime.toJavaLocalDate
|
||||
import kotlinx.datetime.toJavaLocalDateTime
|
||||
import org.jetbrains.exposed.sql.insertAndGetId
|
||||
|
||||
|
||||
class DwhMovimentiRepositoryImpl : DwhMovimentiRepository {
|
||||
|
||||
override suspend fun insert(movimento : DwhMovimenti): DwhMovimenti = suspendTransaction {
|
||||
// Inserisci un nuovo movimento
|
||||
// ID non definito: viene gestito dalla sequence
|
||||
val idMovimentoInserted = DwhMovimentiTable.insertAndGetId {
|
||||
it[idTessera] = movimento.idTessera
|
||||
it[numero] = movimento.numero
|
||||
it[operazione] = movimento.operazione
|
||||
it[data] = movimento.data.toJavaLocalDateTime()
|
||||
it[transazione] = movimento.transazione
|
||||
it[dispositivo] = movimento.dispositivo
|
||||
it[riferimento] = movimento.riferimento
|
||||
it[saldoPre] = movimento.saldoPre
|
||||
it[importo] = movimento.importo
|
||||
it[saldoPost] = movimento.saldoPost
|
||||
it[puntiPre] = movimento.puntiPre
|
||||
it[punti] = movimento.punti
|
||||
it[puntiPost] = movimento.puntiPost
|
||||
it[flagPassaggioTessera] = movimento.flagPassaggioTessera
|
||||
it[oggetto] = movimento.oggetto
|
||||
it[cognome] = movimento.cognome
|
||||
it[nome] = movimento.nome
|
||||
it[codiceFiscale] = movimento.codiceFiscale
|
||||
it[azienda] = movimento.azienda
|
||||
it[categoriaUtenti] = movimento.categoriaUtenti
|
||||
it[fascia] = movimento.fascia
|
||||
it[idTipoMovimentoConto] = movimento.idTipoMovimentoConto
|
||||
it[giorno] = movimento.giorno.toJavaLocalDate()
|
||||
it[modalita] = movimento.modalita
|
||||
it[idModalita] = movimento.idModalita
|
||||
}.value
|
||||
|
||||
DwhMovimenti(
|
||||
idMovimentoInserted,
|
||||
movimento.idTessera,
|
||||
movimento.numero,
|
||||
movimento.operazione,
|
||||
movimento.data,
|
||||
movimento.transazione,
|
||||
movimento.dispositivo,
|
||||
movimento.riferimento,
|
||||
movimento.saldoPre,
|
||||
movimento.importo,
|
||||
movimento.saldoPost,
|
||||
movimento.puntiPre,
|
||||
movimento.punti,
|
||||
movimento.puntiPost,
|
||||
movimento.flagPassaggioTessera,
|
||||
movimento.oggetto,
|
||||
movimento.cognome,
|
||||
movimento.nome,
|
||||
movimento.codiceFiscale,
|
||||
movimento.azienda,
|
||||
movimento.categoriaUtenti,
|
||||
movimento.fascia,
|
||||
movimento.idTipoMovimentoConto,
|
||||
movimento.giorno,
|
||||
movimento.modalita,
|
||||
movimento.idModalita
|
||||
)
|
||||
}
|
||||
}
|
@ -1,13 +1,11 @@
|
||||
package eu.maiora.model
|
||||
|
||||
import kotlinx.datetime.LocalDateTime
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Tessere(
|
||||
val id: Long,
|
||||
val idUtente : Long,
|
||||
val codiceFiscale : String,
|
||||
val numero : String,
|
||||
val saldo : Double,
|
||||
val punti : Int
|
||||
val tsUltimoUtilizzo : LocalDateTime
|
||||
)
|
@ -1,5 +1,5 @@
|
||||
package eu.maiora.model
|
||||
|
||||
interface TessereRepository {
|
||||
suspend fun tesseraByCodiceFiscale(cf : String): Tessere?
|
||||
suspend fun update(tessera: Tessere): Tessere
|
||||
}
|
@ -1,13 +1,17 @@
|
||||
package eu.maiora.model
|
||||
|
||||
import eu.maiora.db.*
|
||||
import kotlinx.datetime.toJavaLocalDateTime
|
||||
import org.jetbrains.exposed.sql.update
|
||||
|
||||
class TessereRepositoryImpl : TessereRepository {
|
||||
override suspend fun tesseraByCodiceFiscale(cf: String): Tessere? = suspendTransaction {
|
||||
// Cerca tessere in base al codice fiscale
|
||||
TessereDao.find { TessereTable.codiceFiscale eq cf }
|
||||
.singleOrNull() // Restituisce un singolo risultato o null se non trovato
|
||||
?.let { tessereDaoToModel(it) } // Converte il DAO in un oggetto Tessere
|
||||
|
||||
override suspend fun update (tessera : Tessere): Tessere = suspendTransaction {
|
||||
TessereTable.update({TessereTable.id eq tessera.id}){
|
||||
it[saldo] = tessera.saldo
|
||||
it[tsUltimoUtilizzo] = tessera.tsUltimoUtilizzo.toJavaLocalDateTime()
|
||||
}
|
||||
|
||||
tessera
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package eu.maiora.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
|
||||
@Serializable
|
||||
data class ViewPrenotazioniPasti(
|
||||
@ -15,6 +16,8 @@ data class ViewPrenotazioniPasti(
|
||||
val dataFine: String,
|
||||
val dataLimiteCancellazione: String,
|
||||
val idVassoio: Long? = null,
|
||||
@Transient
|
||||
val vassoio: String = "",
|
||||
val codiceRistocloud: String? = null,
|
||||
val importoPagato: Double,
|
||||
val puntoDistribuzione: String,
|
||||
|
14
src/main/kotlin/eu/maiora/model/ViewTessereAPI.kt
Normal file
14
src/main/kotlin/eu/maiora/model/ViewTessereAPI.kt
Normal file
@ -0,0 +1,14 @@
|
||||
package eu.maiora.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import javax.management.monitor.StringMonitor
|
||||
|
||||
@Serializable
|
||||
data class ViewTessereAPI(
|
||||
val id: Long,
|
||||
val idUtente : Long,
|
||||
val codiceFiscale : String,
|
||||
val numero : String,
|
||||
val saldo : Double,
|
||||
val punti : Int
|
||||
)
|
@ -0,0 +1,6 @@
|
||||
package eu.maiora.model
|
||||
|
||||
interface ViewTessereAPIRepository {
|
||||
suspend fun tesseraByCodiceFiscale(cf : String): ViewTessereAPI?
|
||||
suspend fun tesseraById(id : Long): ViewTessereAPI?
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package eu.maiora.model
|
||||
|
||||
import eu.maiora.db.*
|
||||
import org.jetbrains.exposed.sql.update
|
||||
import java.time.LocalDateTime
|
||||
|
||||
class ViewTessereAPIRepositoryImpl : ViewTessereAPIRepository {
|
||||
override suspend fun tesseraByCodiceFiscale(cf: String): ViewTessereAPI? = suspendTransaction {
|
||||
// Cerca tessere in base al codice fiscale
|
||||
ViewTessereAPIDao.find { ViewTessereAPITable.codiceFiscale eq cf }
|
||||
.singleOrNull() // Restituisce un singolo risultato o null se non trovato
|
||||
?.let { viewTessereAPIDaoToModel(it) } // Converte il DAO in un oggetto ViewTessereAPI
|
||||
|
||||
}
|
||||
|
||||
override suspend fun tesseraById(id: Long): ViewTessereAPI? = suspendTransaction{
|
||||
//Cerca tessera in base all'id
|
||||
ViewTessereAPIDao.find{ViewTessereAPITable.id eq id}
|
||||
.singleOrNull()
|
||||
?.let{viewTessereAPIDaoToModel(it)}
|
||||
|
||||
}
|
||||
}
|
@ -13,7 +13,7 @@ fun Application.configureRouting() {
|
||||
}
|
||||
|
||||
auth(AccountsRepositoryImpl())
|
||||
tessere(TessereRepositoryImpl())
|
||||
tessere(ViewTessereAPIRepositoryImpl())
|
||||
movimenti(MovimentiRepositoryImpl())
|
||||
composizioni(ComposizioniRepositoryImpl())
|
||||
valorePasti(ValorePastiRepositoryImpl())
|
||||
@ -26,7 +26,11 @@ fun Application.configureRouting() {
|
||||
SlotOrariRepositoryImpl(),
|
||||
PrenotazioniPastiDettaglioRepositoryImpl(),
|
||||
ViewPrenotazioniPastiRepositoryImpl())
|
||||
annullaPrenotazioni(ViewPrenotazioniPastiRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
||||
annullaPrenotazioni(ViewPrenotazioniPastiRepositoryImpl(),
|
||||
PrenotazioniPastiDettaglioRepositoryImpl(),
|
||||
TessereRepositoryImpl(),
|
||||
ViewTessereAPIRepositoryImpl(),
|
||||
DwhMovimentiRepositoryImpl())
|
||||
verificaVassoio(SelezionaComposizioneRepositoryImpl())
|
||||
}
|
||||
}
|
||||
|
@ -6,14 +6,22 @@ import io.ktor.server.application.*
|
||||
import io.ktor.server.auth.*
|
||||
import io.ktor.server.response.*
|
||||
import io.ktor.server.routing.*
|
||||
import kotlinx.datetime.toJavaLocalDateTime
|
||||
import kotlinx.datetime.toKotlinLocalDate
|
||||
import kotlinx.datetime.toKotlinLocalDateTime
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.jetbrains.exposed.sql.transactions.TransactionManager
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalDateTime
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
|
||||
fun Route.annullaPrenotazioni(
|
||||
viewPrenotazioniPastiRepository: ViewPrenotazioniPastiRepositoryImpl,
|
||||
prenotazioniPastiDettaglioRepository: PrenotazioniPastiDettaglioRepositoryImpl
|
||||
prenotazioniPastiDettaglioRepository: PrenotazioniPastiDettaglioRepositoryImpl,
|
||||
tessereRepository: TessereRepositoryImpl,
|
||||
viewTessereAPIRepository: ViewTessereAPIRepositoryImpl,
|
||||
dwhMovimentiRepository: DwhMovimentiRepositoryImpl
|
||||
) {
|
||||
route("/api/annullaPrenotazioni") {
|
||||
authenticate("auth-jwt") {
|
||||
@ -54,7 +62,56 @@ fun Route.annullaPrenotazioni(
|
||||
val listaProdottiPrenotati =
|
||||
prenotazioniPastiDettaglioRepository.listaDettagliByIdPrenotazione(idPrenotazione.toLong())
|
||||
|
||||
|
||||
val tessera = viewTessereAPIRepository.tesseraById(prenotazione.idTessera)
|
||||
if (tessera == null) {
|
||||
call.respond(
|
||||
HttpStatusCode.BadRequest,
|
||||
"Prenotazione non annullata: tessera collegata alla prenotazione non trovata"
|
||||
)
|
||||
return@patch
|
||||
}
|
||||
|
||||
//recupero i dati di tessera e utente
|
||||
val datiUtenteTessera = transaction {
|
||||
val query = """
|
||||
SELECT u.cognome, u.nome, a.nome as azienda, cu.nome as categoria_utenti, f.nome as fascia
|
||||
FROM tessere t
|
||||
LEFT JOIN utenti u ON t.id_utente = u.id
|
||||
LEFT JOIN categorie_utenti cu ON u.id_categoria = cu.id
|
||||
LEFT JOIN aziende a ON cu.id_azienda = a.id
|
||||
LEFT JOIN categorie_utenti_fasce cuf ON cuf.id_categoria_utenti = cu.id
|
||||
LEFT JOIN fasce f ON cuf.id_fascia = f.id
|
||||
WHERE t.id = ?
|
||||
""".trimIndent()
|
||||
|
||||
val connection = TransactionManager.current().connection
|
||||
val preparedStatement = connection.prepareStatement(query, true)
|
||||
preparedStatement[1] = tessera.id
|
||||
|
||||
val rs = preparedStatement.executeQuery()
|
||||
if (rs.next()) {
|
||||
DatiUtenteTessera(
|
||||
cognome = rs.getString("cognome"),
|
||||
nome = rs.getString("nome"),
|
||||
azienda = rs.getString("azienda"),
|
||||
categoriaUtenti = rs.getString("categoria_utenti"),
|
||||
fascia = rs.getString("fascia")
|
||||
)
|
||||
} else null
|
||||
}
|
||||
|
||||
|
||||
if (datiUtenteTessera == null) {
|
||||
call.respond(
|
||||
HttpStatusCode.BadRequest,
|
||||
"Prenotazione non annullata: dati utente tessera non trovati"
|
||||
)
|
||||
return@patch
|
||||
}
|
||||
|
||||
//aggiorna lo stato di ogni prodotto per annullare la prenotazione
|
||||
try {
|
||||
listaProdottiPrenotati.forEach { el ->
|
||||
val prodottoDaAggiornare = PrenotazioniPastiDettaglio(
|
||||
el.id,
|
||||
@ -64,17 +121,84 @@ fun Route.annullaPrenotazioni(
|
||||
)
|
||||
prenotazioniPastiDettaglioRepository.update(prodottoDaAggiornare)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
println("Annulamento prenotazione non completato. Errore durante l'update dei dettagli: ${e.message}")
|
||||
call.respond(HttpStatusCode.InternalServerError, "Errore durante l'update dei dettagli: ${e.message}")
|
||||
}
|
||||
|
||||
//effettuare l'aggiornamento del saldo della tessera
|
||||
val nuovoSaldo = tessera.saldo.plus(prenotazione.importoPagato)
|
||||
|
||||
try {
|
||||
tessereRepository.update(
|
||||
Tessere(
|
||||
tessera.id,
|
||||
nuovoSaldo,
|
||||
LocalDateTime.now().toKotlinLocalDateTime()
|
||||
)
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
println("Annulamento prenotazione non completato. Errore durante l'update della tessera: ${e.message}")
|
||||
call.respond(HttpStatusCode.InternalServerError, "Errore durante l'update della tessera: ${e.message}")
|
||||
}
|
||||
|
||||
|
||||
//effettuare l'inserimento del movimento di storno
|
||||
try {
|
||||
dwhMovimentiRepository.insert(
|
||||
DwhMovimenti(
|
||||
-1L,
|
||||
tessera.id,
|
||||
tessera.numero,
|
||||
"Storno prenotazione pre pagata",
|
||||
LocalDateTime.now().toKotlinLocalDateTime(),
|
||||
prenotazione.id,
|
||||
"App",
|
||||
"0",
|
||||
tessera.saldo,
|
||||
prenotazione.importoPagato,
|
||||
tessera.saldo + prenotazione.importoPagato,
|
||||
tessera.punti.toLong(),
|
||||
0,
|
||||
tessera.punti.toLong() + 0,
|
||||
0,
|
||||
prenotazione.vassoio,
|
||||
datiUtenteTessera.cognome,
|
||||
datiUtenteTessera.nome,
|
||||
tessera.codiceFiscale,
|
||||
datiUtenteTessera.azienda,
|
||||
datiUtenteTessera.categoriaUtenti,
|
||||
datiUtenteTessera.fascia,
|
||||
3, //Storno
|
||||
LocalDate.now().toKotlinLocalDate(),
|
||||
"Standard",
|
||||
1
|
||||
)
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
println("Annulamento prenotazione non completato. Errore durante l'insert del movimento: ${e.message}")
|
||||
call.respond(HttpStatusCode.InternalServerError, "Errore durante l'insert del movimento: ${e.message}")
|
||||
}
|
||||
|
||||
call.respond(HttpStatusCode.OK, "Prenotazione $idPrenotazione annullata")
|
||||
}
|
||||
catch (e: IllegalArgumentException) {
|
||||
} catch (e: IllegalArgumentException) {
|
||||
call.respond(HttpStatusCode.NotFound, "Prenotazione non trovata: ${e.message}")
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
} catch(e: Exception){
|
||||
println("Annulamento prenotazione non completato. Errore generico: ${e.message}")
|
||||
call.respond(HttpStatusCode.InternalServerError, "Errore generico: ${e.message}")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class DatiUtenteTessera(
|
||||
val cognome: String,
|
||||
val nome: String,
|
||||
val azienda: String,
|
||||
val categoriaUtenti: String,
|
||||
val fascia: String
|
||||
)
|
@ -1,6 +1,6 @@
|
||||
package eu.maiora.routes
|
||||
|
||||
import eu.maiora.model.TessereRepositoryImpl
|
||||
import eu.maiora.model.ViewTessereAPIRepositoryImpl
|
||||
import io.ktor.http.*
|
||||
import io.ktor.server.application.*
|
||||
import io.ktor.server.auth.*
|
||||
@ -8,7 +8,7 @@ import io.ktor.server.response.*
|
||||
import io.ktor.server.routing.*
|
||||
|
||||
|
||||
fun Route.tessere(tessereRepository: TessereRepositoryImpl){
|
||||
fun Route.tessere(tessereRepository: ViewTessereAPIRepositoryImpl){
|
||||
route("/api/tessere"){
|
||||
authenticate("auth-jwt") {
|
||||
get("{cf}"){
|
||||
|
Loading…
Reference in New Issue
Block a user