Skip to content

Commit

Permalink
[335] Bug Importation d'utilisateurs sans groupe ni territoires (#395)
Browse files Browse the repository at this point in the history
* [335] Bug Importation d'utilisateurs sans groupe ni territoires

* Fix test
  • Loading branch information
jdauphant authored and Lucien Pereira committed Jan 2, 2020
1 parent c412820 commit 2378acb
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 13 deletions.
21 changes: 16 additions & 5 deletions app/controllers/CSVImportController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package controllers
import java.util.UUID

import actions.LoginAction
import extentions.UUIDHelper
import extentions.Operators.{GroupOperators, UserOperators}
import forms.Models.{CSVImportData, UserFormData, UserGroupFormData}
import javax.inject.Inject
Expand Down Expand Up @@ -166,6 +165,17 @@ case class CSVImportController @Inject()(loginAction: LoginAction,
}
}

def associateGroupToUsers(groupFormData: UserGroupFormData): UserGroupFormData = {
val groupId = groupFormData.group.id
val areasId = groupFormData.group.areaIds
val newUsers = groupFormData.users.map({ userFormData =>
val newUser = userFormData.user.copy(groupIds = (groupId :: userFormData.user.groupIds).distinct,
areas = (areasId ++ userFormData.user.areas).distinct)
userFormData.copy(user = newUser)
})
groupFormData.copy(users = newUsers)
}

def importUsersReviewPost: Action[AnyContent] = loginAction { implicit request =>
asAdmin { () =>
"IMPORT_USERS_UNAUTHORIZED" -> "Accès non autorisé pour importer les utilisateurs"
Expand All @@ -190,12 +200,13 @@ case class CSVImportController @Inject()(loginAction: LoginAction,
.withGlobalError(description)
InternalServerError(views.html.reviewUsersImport(request.currentUser)(formWithError))
}, { Unit =>
groupsToInsert.foreach({ userGroup =>
eventService.info("ADD_USER_GROUP_DONE", s"Groupe ${userGroup.id} ajouté par l'utilisateur d'id ${request.currentUser.id}")
})
val usersToInsert = augmentedUserGroupInformation.flatMap(_.users)
groupsToInsert.foreach { userGroup =>
eventService.info("ADD_USER_GROUP_DONE", s"Groupe ${userGroup.id} ajouté")
}
val usersToInsert = augmentedUserGroupInformation.map(associateGroupToUsers).flatMap(_.users)
.filter(_.alreadyExistingUser.isEmpty)
.map(_.user)

userService.add(usersToInsert).fold({ error: String =>
val description = s"Impossible d'importer les utilisateurs : $error"
eventService.error("IMPORT_USER_ERROR", description)
Expand Down
8 changes: 1 addition & 7 deletions app/helper/CsvHelper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,7 @@ object CsvHelper {
.groupBy(_.group.name)
.mapValues({ case sameGroupNameList: List[UserGroupFormData] =>
val group = sameGroupNameList.head
val groupId = group.group.id
val areasId = group.group.areaIds
val usersFormData = sameGroupNameList.flatMap(_.users).map({ userFormData =>
val newUser = userFormData.user.copy(groupIds = (groupId :: userFormData.user.groupIds).distinct,
areas = (areasId ++ userFormData.user.areas).distinct)
userFormData.copy(user = newUser)
})
val usersFormData = sameGroupNameList.flatMap(_.users)
group.copy(users = usersFormData)
}).values.toList
}
Expand Down
1 change: 1 addition & 0 deletions app/services/UserService.scala
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ class UserService @Inject()(configuration: play.api.Configuration, db: Database)
def add(users: List[User]): Either[String, Unit] = try {
val result = db.withTransaction { implicit connection =>
users.foldRight(true) { (user, success) =>
assert(user.areas.nonEmpty)
success && SQL"""
INSERT INTO "user" (id, key, name, qualite, email, helper, instructor, admin, areas, delegations, creation_date,
commune_code, group_admin, group_ids, expert, phone_number) VALUES (
Expand Down
2 changes: 1 addition & 1 deletion test/csv/CSVSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ class CSVSpec extends Specification {
dgfip.get.users.head.user.name must equalTo(expectedUserName)
dgfip.get.users.head.user.email must equalTo(expectedEmail)
dgfip.get.users.head.user.helper must beTrue
dgfip.get.users.head.user.areas must equalTo(expectedUserGroup.areaIds)
dgfip.get.users.head.user.areas must equalTo(List[String]())
dgfip.get.users.head.user.phoneNumber must beSome(expectedPhoneNumber)
}

Expand Down

0 comments on commit 2378acb

Please sign in to comment.