Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ out/
tmp_rapport_patrouille_PAM.docx
tmp_AEM_PAM.xlsx

kotlin/
.kotlin
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package fr.gouv.dgampa.rapportnav.domain.entities.mission.nav.crew

import fr.gouv.dgampa.rapportnav.infrastructure.database.model.mission.crew.MissionCrewAbsenceModel
import fr.gouv.dgampa.rapportnav.infrastructure.database.model.mission.crew.MissionCrewModel
import java.time.Instant
import java.time.LocalDate


data class MissionCrewAbsenceEntity(
val id: Int? = null,
val startDate: LocalDate? = null,
val endDate: LocalDate? = null,
val isAbsentFullMission: Boolean? = null,
val reason: String? = null,
) {

fun toMissionCrewAbsenceModel(crew: MissionCrewModel): MissionCrewAbsenceModel {
return MissionCrewAbsenceModel(
id = id,
startDate = startDate,
endDate = endDate,
isAbsentFullMission = isAbsentFullMission,
reason = reason,
missionCrew = crew
)
}

companion object {
fun fromMissionCrewAbsenceModel(model: MissionCrewAbsenceModel): MissionCrewAbsenceEntity {
return MissionCrewAbsenceEntity(
id = model.id,
startDate = model.startDate,
endDate = model.endDate,
isAbsentFullMission = model.isAbsentFullMission,
reason = model.reason,
)
}
}
}

Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package fr.gouv.dgampa.rapportnav.domain.entities.mission.nav.crew

import fr.gouv.dgampa.rapportnav.infrastructure.database.model.mission.crew.MissionCrewModel
import java.time.Instant
import java.util.*

import fr.gouv.dgampa.rapportnav.infrastructure.database.model.mission.crew.MissionCrewModel

data class MissionCrewEntity(
val id: Int? = null,
Expand All @@ -12,19 +10,22 @@ data class MissionCrewEntity(
val role: AgentRoleEntity? = null,
val missionId: Int? = null,
val missionIdUUID: UUID? = null,
val createdAt: Instant? = null,
val updatedAt: Instant? = null,
val fullName: String? = null,
val absences: List<MissionCrewAbsenceEntity>? = null
){

fun toMissionCrewModel(commentDefaultsToString: Boolean? = false): MissionCrewModel {
return MissionCrewModel(
var model = MissionCrewModel(
id = id,
missionId = missionId,
agent = agent?.toAgentModel(),
role = role?.toAgentRoleModel(),
comment = if (comment == null && commentDefaultsToString == true) "" else comment,
missionIdUUID = missionIdUUID,
fullName = fullName,
)
model.absences = absences?.map { it.toMissionCrewAbsenceModel(model) }?.toMutableList() ?: mutableListOf()
return model
}

companion object {
Expand All @@ -36,9 +37,12 @@ data class MissionCrewEntity(
missionIdUUID = crew.missionIdUUID,
agent = crew.agent?.let { AgentEntity.fromAgentModel(it) },
role = crew.role?.let { AgentRoleEntity.fromAgentRoleModel(it) },
createdAt = crew.createdAt,
updatedAt = crew.updatedAt
absences = crew.absences.map { MissionCrewAbsenceEntity.fromMissionCrewAbsenceModel(it) }.sortedBy { it.id },
fullName = crew.fullName,
)
}
}
}



Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import java.util.*

interface IMissionCrewRepository {

fun findByMissionId(missionId: Int): List<MissionCrewModel>
fun findByMissionId(missionId: Int): List<MissionCrewEntity>

fun findByMissionIdUUID(missionIdUUID: UUID): List<MissionCrewModel>
fun findByMissionIdUUID(missionIdUUID: UUID): List<MissionCrewEntity>

fun deleteById(id: Int): Boolean

fun save(crew: MissionCrewEntity): MissionCrewModel
fun save(crew: MissionCrewEntity): MissionCrewEntity
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ import fr.gouv.dgampa.rapportnav.domain.repositories.mission.crew.IMissionCrewRe
@UseCase
class AddOrUpdateMissionCrew(private val crewRepository: IMissionCrewRepository) {
fun addOrUpdateMissionCrew(crew: MissionCrewEntity): MissionCrewEntity {
return crewRepository.save(crew).let { MissionCrewEntity.fromMissionCrewModel(it) }
return crewRepository.save(crew)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,11 @@ class GetAgentsCrewByMissionId(private val agentCrewRepository: IMissionCrewRepo

fun execute(missionId: Int, commentDefaultsToString: Boolean? = false): List<MissionCrewEntity> {
return agentCrewRepository.findByMissionId(missionId = missionId)
.map { MissionCrewEntity.fromMissionCrewModel(it) }
.sortedBy { rolePriority.indexOf(it.role?.title) } //TODO replace by it.role.prority
}

fun execute(missionIdUUID: UUID, commentDefaultsToString: Boolean? = false): List<MissionCrewEntity> {
return agentCrewRepository.findByMissionIdUUID(missionIdUUID = missionIdUUID)
.map { MissionCrewEntity.fromMissionCrewModel(it) }
.sortedBy { rolePriority.indexOf(it.role?.title) } //TODO replace by it.role.prority
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,19 @@ class ExportMissionPatrolSingle(

val crew: List<List<String?>> = listOf(
listOf("Fonction", "Nom", "Observation (formation, repos, mission, stage...)")
) + missionCrew.orEmpty().map {
) + missionCrew.orEmpty().map { row ->
val displayName = row.agent?.let { "${it.firstName} ${it.lastName}" }
?: row.fullName // fallback when agent == null

listOf(
it.role?.title,
"${it.agent?.firstName} ${it.agent?.lastName}",
it.comment.takeIf { comment -> !comment.isNullOrEmpty() } ?: "Présent"
row.role?.title,
displayName,
row.comment.takeIf { !it.isNullOrEmpty() } ?: "Présent"
)
}



// Bilan opérationnel
val operationalSummary = patrolData?.operationalSummary
val proFishingSeaSummary = operationalSummary?.proFishingSeaSummary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class GetCrewByServiceId(
fun execute(serviceId: Int): List<AgentEntity> {
val agents = agentRepo
.findByServiceId(serviceId = serviceId)
.sortedBy { it.role?.priority }
.sortedWith(compareBy({ it.role?.priority }, { it.id }))
Comment thread
xtiannyeto marked this conversation as resolved.
.map { AgentEntity.fromAgentModel(it) }
return agents
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ package fr.gouv.dgampa.rapportnav.infrastructure.api.bff.model.crew

import fr.gouv.dgampa.rapportnav.domain.entities.mission.nav.crew.MissionCrewEntity
import java.util.UUID
import kotlin.collections.map
import kotlin.collections.orEmpty

data class MissionCrew(
val id: Int? = null,
val agent: Agent? = null,
val missionId: Int? = null,
val comment: String? = null,
val role: AgentRole? = null,
val missionIdUUID: UUID? = null
val missionIdUUID: UUID? = null,
val absences: List<MissionCrewAbsence>? = null,
var fullName: String? = null,
) {

companion object {
Expand All @@ -20,19 +24,23 @@ data class MissionCrew(
agent = crew.agent?.let { Agent.fromAgentEntity(it) },
role = crew.role?.let { AgentRole.fromAgentRoleEntity(it) },
comment = crew.comment,
missionIdUUID = crew.missionIdUUID
missionIdUUID = crew.missionIdUUID,
absences = crew.absences.orEmpty().map { MissionCrewAbsence.fromMissionCrewAbsenceEntity(it) },
fullName = crew.fullName,
)
}
}

fun toMissionCrewEntity(missionIdUUID: UUID?= null, missionId: Int? = null): MissionCrewEntity {
return MissionCrewEntity(
id = if (id == 0 || id == null) null else id,
comment = comment,
missionId = missionId,
missionIdUUID = missionIdUUID,
agent = agent?.toAgentEntity(),
missionId = missionId,
comment = comment,
role = role?.toAgentRoleEntity(),
missionIdUUID = missionIdUUID
absences = absences.orEmpty().map { it.toMissionCrewAbsenceEntity() },
fullName = fullName,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package fr.gouv.dgampa.rapportnav.infrastructure.api.bff.model.crew

import fr.gouv.dgampa.rapportnav.domain.entities.mission.nav.crew.MissionCrewAbsenceEntity
import java.time.LocalDate

data class MissionCrewAbsence(
val id: Int? = null,
val startDate: LocalDate? = null,
val endDate: LocalDate? = null,
val isAbsentFullMission: Boolean? = null,
val reason: String? = null,
) {

companion object {
fun fromMissionCrewAbsenceEntity(crew: MissionCrewAbsenceEntity): MissionCrewAbsence {
return MissionCrewAbsence(
id = crew.id,
startDate = crew.startDate,
endDate = crew.endDate,
isAbsentFullMission = crew.isAbsentFullMission,
reason = crew.reason,
)
}
}

fun toMissionCrewAbsenceEntity(): MissionCrewAbsenceEntity {
return MissionCrewAbsenceEntity(
id = if (id == 0 || id == null) null else id,
startDate = startDate,
endDate = endDate,
isAbsentFullMission = isAbsentFullMission,
reason = reason,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package fr.gouv.dgampa.rapportnav.infrastructure.database.model.mission.crew

import com.fasterxml.jackson.annotation.JsonIgnore
import jakarta.persistence.*
import org.springframework.data.annotation.CreatedBy
import org.springframework.data.annotation.CreatedDate
import org.springframework.data.annotation.LastModifiedBy
import org.springframework.data.annotation.LastModifiedDate
import org.springframework.data.jpa.domain.support.AuditingEntityListener
import java.time.Instant
import java.time.LocalDate

@Entity
@EntityListeners(AuditingEntityListener::class)
@Table(name = "mission_crew_absence")
class MissionCrewAbsenceModel(

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
var id: Int? = null,

@Column(name = "start_date", nullable = true)
var startDate: LocalDate? = null,

@Column(name = "end_date", nullable = true)
var endDate: LocalDate? = null,
Comment on lines +24 to +27
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

je me demande si je suis pas un peu trop souple sur les dates


@Column(name = "is_absent_full_mission", nullable = true)
var isAbsentFullMission: Boolean? = null,

@Column(name = "reason", nullable = true)
var reason: String? = null,

@CreatedDate
@Column(name = "created_at", updatable = false)
var createdAt: Instant? = null,

@LastModifiedDate
@Column(name = "updated_at")
var updatedAt: Instant? = null,

@CreatedBy
@Column(name = "created_by", updatable = false)
var createdBy: Int? = null,

@LastModifiedBy
@Column(name = "updated_by")
var updatedBy: Int? = null,
//
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "mission_crew_id", referencedColumnName = "id", nullable = true)
@JsonIgnore
var missionCrew: MissionCrewModel? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,22 @@ class MissionCrewModel(
@JoinColumn(name = "agent_id", nullable = true)
var agent: AgentModel? = null,

@Column(name = "full_name", nullable = true)
var fullName: String? = null,
Comment thread
xtiannyeto marked this conversation as resolved.

@Column(name = "mission_id", nullable = true)
var missionId: Int? = null,

@Column(name = "mission_id_uuid", nullable = true)
var missionIdUUID: UUID? = null,

@Column(name = "comment", nullable = true)
var comment: String? = null,

@ManyToOne
@JoinColumn(name = "agent_role_id", nullable = true)
var role: AgentRoleModel?,

@Column(name = "mission_id_uuid", nullable = true)
var missionIdUUID: UUID? = null,

@CreatedDate
@Column(name = "created_at", nullable = true, updatable = false)
var createdAt: Instant? = null,
Expand All @@ -49,5 +52,13 @@ class MissionCrewModel(

@LastModifiedBy
@Column(name = "updated_by")
var updatedBy: Int? = null
var updatedBy: Int? = null,

@OneToMany(
mappedBy = "missionCrew",
cascade = [CascadeType.ALL],
orphanRemoval = true
)
var absences: MutableList<MissionCrewAbsenceModel> = mutableListOf()

)
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fr.gouv.dgampa.rapportnav.infrastructure.database.repositories.interfaces.mission.crew

import fr.gouv.dgampa.rapportnav.domain.entities.mission.nav.crew.MissionCrewEntity
import fr.gouv.dgampa.rapportnav.infrastructure.database.model.mission.crew.MissionCrewModel
import org.springframework.data.jpa.repository.JpaRepository
import java.util.*
Expand Down
Loading
Loading