diff --git a/src/database/Table_LogSemiAuto.kt b/src/database/Table_LogSemiAuto.kt index c1518f1..83c0ac6 100644 --- a/src/database/Table_LogSemiAuto.kt +++ b/src/database/Table_LogSemiAuto.kt @@ -3,6 +3,8 @@ package database import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.tinylog.Logger import java.sql.Connection +import java.time.LocalDate +import java.time.format.DateTimeFormatter import java.util.function.Consumer class Table_LogSemiAuto(connection: Connection) : dbFunctions("logsemiauto", connection, listOf("index", "date", "time", "source", "description")) { @@ -90,29 +92,28 @@ class Table_LogSemiAuto(connection: Connection) : dbFunctions("logs fun GetLogSemiAutoForHtml(date: String, filter: String?, cbOK: Consumer>?, cbFail: Consumer?){ try{ - val valid_date : String? = when{ - dateformat1.matches(date) -> date + val valid_date : java.sql.Date? = when{ + dateformat1.matches(date) -> { + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("dd/MM/yyyy"))) + } dateformat2.matches(date) -> { - val parts = date.split("-") - "${parts[0]}/${parts[1]}/${parts[2]}" + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("dd-MM-yyyy"))) } dateformat3.matches(date) -> { - val parts = date.split("/") - "${parts[2]}/${parts[1]}/${parts[0]}" + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy/MM/dd"))) } dateformat4.matches(date) -> { - val parts = date.split("-") - "${parts[2]}/${parts[1]}/${parts[0]}" + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"))) } else -> null } if (valid_date!=null){ val statement = if (filter.isNullOrEmpty()){ - connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE date = ?") + connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE COALESCE(STR_TO_DATE(date,'%d/%m/%Y'), STR_TO_DATE(date,'%d-%m-%Y'), STR_TO_DATE(date,'%Y/%m/%d'), STR_TO_DATE(date,'%Y-%m-%d')) = ?") } else { - connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE date = ? AND description LIKE ?") + connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE COALESCE(STR_TO_DATE(date,'%d/%m/%Y'), STR_TO_DATE(date,'%d-%m-%Y'), STR_TO_DATE(date,'%Y/%m/%d'), STR_TO_DATE(date,'%Y-%m-%d')) = ? AND description LIKE ?") } - statement?.setString(1, valid_date) + statement?.setDate(1, valid_date) if (!filter.isNullOrEmpty()){ statement?.setString(2, "%$filter%") } diff --git a/src/database/Table_Logs.kt b/src/database/Table_Logs.kt index 9121617..2267d7c 100644 --- a/src/database/Table_Logs.kt +++ b/src/database/Table_Logs.kt @@ -3,6 +3,8 @@ package database import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.tinylog.Logger import java.sql.Connection +import java.time.LocalDate +import java.time.format.DateTimeFormatter import java.util.function.Consumer class Table_Logs(connection: Connection) : dbFunctions ("logs", connection,listOf("index", "datenya", "timenya", "machine", "description")) { @@ -42,29 +44,29 @@ class Table_Logs(connection: Connection) : dbFunctions ("logs", connection, fun GetLogForHtml(date: String, filter: String?, cbOK: Consumer>?, cbFail: Consumer?){ try{ - val valid_date : String? = when{ - dateformat1.matches(date) -> date + val valid_date : java.sql.Date? = when{ + dateformat1.matches(date) -> { + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("dd/MM/yyyy"))) + } dateformat2.matches(date) -> { - val parts = date.split("-") - "${parts[0]}/${parts[1]}/${parts[2]}" + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("dd-MM-yyyy"))) } dateformat3.matches(date) -> { - val parts = date.split("/") - "${parts[2]}/${parts[1]}/${parts[0]}" + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy/MM/dd"))) } dateformat4.matches(date) -> { - val parts = date.split("-") - "${parts[2]}/${parts[1]}/${parts[0]}" + java.sql.Date.valueOf(LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"))) } else -> null } if (valid_date!=null){ + // use coalescing for different datenya formats val statement = if (filter.isNullOrEmpty()){ - connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE datenya = ?") + connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE COALESCE(STR_TO_DATE(datenya,'%d/%m/%Y'), STR_TO_DATE(datenya,'%d-%m-%Y'), STR_TO_DATE(datenya,'%Y/%m/%d'), STR_TO_DATE(datenya,'%Y-%m-%d')) = ?") } else { - connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE datenya = ? AND description LIKE ?") + connection.prepareStatement("SELECT * FROM ${super.dbName} WHERE COALESCE(STR_TO_DATE(datenya,'%d/%m/%Y'), STR_TO_DATE(datenya,'%d-%m-%Y'), STR_TO_DATE(datenya,'%Y/%m/%d'), STR_TO_DATE(datenya,'%Y-%m-%d')) = ? AND description LIKE ?") } - statement?.setString(1, valid_date) + statement?.setDate(1, valid_date) if (!filter.isNullOrEmpty()){ statement?.setString(2, "%$filter%") }