Added csv dump matching format of existing observations database.

This commit is contained in:
neviyn 2018-10-30 15:54:45 +00:00
parent 51fbb9a3db
commit 42ce7bd8df
2 changed files with 52 additions and 1 deletions

View File

@ -189,6 +189,18 @@ class Controller {
) )
) )
} }
@PostMapping("/observations/csv")
fun getObservationsCsvDump(@Valid @RequestBody observationsRequest: ObservationsRequest): String? {
val data = getObservations(observationsRequest)
if(data.isEmpty()) return null
val builder = StringBuilder(data[0].csvHeaderString())
data.forEach {
builder.append('\n')
builder.append(it.toCsvFormat())
}
return builder.toString()
}
} }
data class AverageData( data class AverageData(

View File

@ -18,6 +18,7 @@ import javax.persistence.ManyToMany
import javax.persistence.ManyToOne import javax.persistence.ManyToOne
import javax.persistence.OneToMany import javax.persistence.OneToMany
import javax.persistence.Table import javax.persistence.Table
import kotlin.math.round
/** /**
* Defines a location at which observations occur. * Defines a location at which observations occur.
@ -95,7 +96,45 @@ data class Observation(
val tutors: Set<Tutor>, val tutors: Set<Tutor>,
@ManyToMany @ManyToMany
val persons: Set<Person> val persons: Set<Person>
) ) {
fun csvHeaderString(): String {
return "Ob ID,Observerfull,Observer,obDate,Title,Type,Department,Station,Station Focus,Scores-Monitoring,Scores-Control Procedural," +
"Scores-Control,Scores-Conservatism,Scores-Teamwork Comms,Scores-Teamwork Leadership,Scores-Teamwork Workload,\"Scores-Knowledge, Skills and Attitudes\"," +
"Strengths-Monitoring,Strengths-Control Procedural,Strengths-Control,Strengths-Conservatism,Strengths-Teamwork Comms," +
"Strengths-Teamwork Leadership,Strengths-Teamwork Workload,\"Strengths-Knowledge, Skills and Attitudes\"," +
"Develop-Monitoring,Develop-Control Procedural,Develop-Control,Develop-Conservatism,Develop-Teamwork Comms," +
"Develop-Teamwork Leadership,Develop-Teamwork Workload,\"Develop-Knowledge, Skills and Attitudes\""
}
fun toCsvFormat(): String {
return ",,${tutors.elementAt(0).name},$date,\"$observed\",\"Training\",\"Performance Improvement - Training\",\"${site.name}\",\"N/A\"," +
"${roundScore(monitoring)},${roundScore(controlProcedural)},${roundScore(control)}," +
"${roundScore(conservatism)},${roundScore(teamworkCommunications)},${roundScore(teamworkLeadership)}," +
"${roundScore(teamworkWorkload)},${roundScore(knowledge)},\"${getStrengths(RatingCategory.MONITORING)}\"," +
"\"${getStrengths(RatingCategory.CONTROL_PROCEDURAL)}\",\"${getStrengths(RatingCategory.CONTROL)}\",\"${getStrengths(RatingCategory.CONSERVATISM)}\"," +
"\"${getStrengths(RatingCategory.TEAMWORK_COMMUNICATIONS)}\",\"${getStrengths(RatingCategory.TEAMWORK_LEADERSHIP)}\"," +
"\"${getStrengths(RatingCategory.TEAMWORK_WORKLOAD)}\",\"${getStrengths(RatingCategory.KNOWLEDGE)}\"," +
"\"${getImprovements(RatingCategory.MONITORING)}\",\"${getImprovements(RatingCategory.CONTROL_PROCEDURAL)}\"," +
"\"${getImprovements(RatingCategory.CONTROL)}\",\"${getImprovements(RatingCategory.CONSERVATISM)}\"," +
"\"${getImprovements(RatingCategory.TEAMWORK_COMMUNICATIONS)}\",\"${getImprovements(RatingCategory.TEAMWORK_LEADERSHIP)}\"," +
"\"${getImprovements(RatingCategory.TEAMWORK_WORKLOAD)}\",\"${getImprovements(RatingCategory.KNOWLEDGE)}\""
}
private fun getStrengths(category: RatingCategory): String{
return entries.asSequence().filter { it.type == category }.map{ it.strengths }.joinToString()
}
private fun getImprovements(category: RatingCategory): String{
return entries.asSequence().filter { it.type == category }.map{ it.improvements }.joinToString()
}
private fun roundScore(input: Double?): String {
if (input != null) {
return round(input).toString()
}
return ""
}
}
/** /**
* Entry giving specific details on observation performance for a tutor defined constraint. * Entry giving specific details on observation performance for a tutor defined constraint.