Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SELC-4182] feat: mail stored in PDV workContract as UUID #156

Merged
merged 8 commits into from
Feb 9, 2024
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ public class User {
private PartyRole role;
private String productRole;

private String userMailUuid;

public String getId() {
return id;
}
Expand All @@ -32,4 +34,12 @@ public String getProductRole() {
public void setProductRole(String productRole) {
this.productRole = productRole;
}

public String getUserMailUuid() {
return userMailUuid;
}

public void setUserMailUuid(String userMailUuid) {
this.userMailUuid = userMailUuid;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@
import org.openapi.quarkus.party_registry_proxy_json.api.AooApi;
import org.openapi.quarkus.party_registry_proxy_json.api.UoApi;
import org.openapi.quarkus.user_registry_json.api.UserApi;
import org.openapi.quarkus.user_registry_json.model.CertifiableFieldResourceOfstring;
import org.openapi.quarkus.user_registry_json.model.UserResource;
import org.openapi.quarkus.user_registry_json.model.WorkContactResource;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -36,7 +34,6 @@
import static it.pagopa.selfcare.onboarding.common.PartyRole.MANAGER;
import static it.pagopa.selfcare.onboarding.service.OnboardingService.USERS_FIELD_LIST;
import static it.pagopa.selfcare.onboarding.service.OnboardingService.USERS_WORKS_FIELD_LIST;
import static it.pagopa.selfcare.onboarding.utils.PdfMapper.workContactsKey;

@ApplicationScoped
public class CompletionServiceDefault implements CompletionService {
Expand Down Expand Up @@ -86,7 +83,7 @@ public String createInstitutionAndPersistInstitutionId(Onboarding onboarding) {

InstitutionResponse institutionResponse =
Objects.isNull(institutionsResponse.getInstitutions()) || institutionsResponse.getInstitutions().isEmpty()
? createInstitution(institution, onboarding.getProductId())
? createInstitution(institution)
: institutionsResponse.getInstitutions().get(0);

onboardingRepository
Expand All @@ -101,7 +98,7 @@ public String createInstitutionAndPersistInstitutionId(Onboarding onboarding) {
* Origin indicates which is the indexes where data come from, for ex. IPA comes from index of Pubbliche Amministrazioni
* Look at https://pagopa.atlassian.net/wiki/spaces/SCP/pages/708804909/Glossario for more information about institution type and indexes
*/
private InstitutionResponse createInstitution(Institution institution, String productId) {
private InstitutionResponse createInstitution(Institution institution) {

if(InstitutionType.SA.equals(institution.getInstitutionType())
&& Origin.ANAC.equals(institution.getOrigin())) {
Expand Down Expand Up @@ -159,14 +156,15 @@ private boolean isInstitutionPresentOnIpa(Institution institution) {
@Override
public void sendCompletedEmail(Onboarding onboarding) {

String workContractId = workContactsKey.apply(onboarding.getOnboardingId());

List<String> destinationMails = onboarding.getUsers().stream()
.filter(user -> MANAGER.equals(user.getRole()))
.map(userToOnboard -> userRegistryApi.findByIdUsingGET(USERS_FIELD_LIST, userToOnboard.getId()))
.filter(user -> Objects.nonNull(user.getWorkContacts())
&& user.getWorkContacts().containsKey(workContractId))
.map(user -> user.getWorkContacts().get(workContractId))
.filter(userToOnboard -> MANAGER.equals(userToOnboard.getRole()))
.map(userToOnboard -> Optional.ofNullable(userRegistryApi.findByIdUsingGET(USERS_FIELD_LIST, userToOnboard.getId()))
.filter(userResource -> Objects.nonNull(userResource.getWorkContacts())
&& userResource.getWorkContacts().containsKey(userToOnboard.getUserMailUuid()))
.map(user -> user.getWorkContacts().get(userToOnboard.getUserMailUuid()))
)
.filter(Optional::isPresent)
.map(Optional::get)
.filter(workContract -> StringUtils.isNotBlank(workContract.getEmail().getValue()))
.map(workContract -> workContract.getEmail().getValue())
.collect(Collectors.toList());
Expand Down Expand Up @@ -198,9 +196,9 @@ public void persistOnboarding(Onboarding onboarding) {
.map(user -> {
UserResource userResource = userRegistryApi.findByIdUsingGET(USERS_WORKS_FIELD_LIST, user.getId());
String mailWork = Optional.ofNullable(userResource.getWorkContacts())
.map(worksContract -> worksContract.get(workContactsKey.apply(onboarding.getOnboardingId())))
.map(WorkContactResource::getEmail)
.map(CertifiableFieldResourceOfstring::getValue)
.map(worksContract -> worksContract.get(user.getUserMailUuid()))
.map(workContactResource -> workContactResource.getEmail())
.map(certifiable -> certifiable.getValue())
.orElseThrow(() -> new GenericOnboardingException("Work contract not found!"));
Person person = userMapper.toPerson(userResource);
person.setEmail(mailWork);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@
import it.pagopa.selfcare.onboarding.common.InstitutionType;
import it.pagopa.selfcare.onboarding.common.Origin;
import it.pagopa.selfcare.onboarding.common.PricingPlan;
import it.pagopa.selfcare.onboarding.entity.Billing;
import it.pagopa.selfcare.onboarding.entity.GeographicTaxonomy;
import it.pagopa.selfcare.onboarding.entity.Institution;
import it.pagopa.selfcare.onboarding.entity.Onboarding;
import it.pagopa.selfcare.onboarding.entity.*;
import it.pagopa.selfcare.onboarding.exception.GenericOnboardingException;
import org.openapi.quarkus.user_registry_json.model.CertifiableFieldResourceOfstring;
import org.openapi.quarkus.user_registry_json.model.UserResource;

import java.util.*;
import java.util.function.Function;

import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_IO;
import static it.pagopa.selfcare.onboarding.utils.GenericError.MANAGER_EMAIL_NOT_FOUND;
Expand All @@ -31,20 +27,23 @@ public class PdfMapper {
public static final String PRICING_PLAN_BASE_CHECKBOX = "pricingPlanBaseCheckbox";
public static final String PRICING_PLAN = "pricingPlan";
public static final String INSTITUTION_REGISTER_LABEL_VALUE = "institutionRegisterLabelValue";

public static final Function<String, String> workContactsKey = onboardingId -> String.format("obg_%s", onboardingId);
public static final String ORIGIN_ID_LABEL = "<li class=\"c19 c39 li-bullet-0\"><span class=\"c1\">codice di iscrizione all&rsquo;Indice delle Pubbliche Amministrazioni e dei gestori di pubblici servizi (I.P.A.) <span class=\"c3\">${originId}</span> </span><span class=\"c1\"></span></li>";


public static Map<String, Object> setUpCommonData(UserResource manager, List<UserResource> users, Onboarding onboarding) {

Institution institution = onboarding.getInstitution();
Billing billing = onboarding.getBilling();
User userManager = onboarding.getUsers().stream()
.filter(user -> user.getId().equals(manager.getId().toString()))
.findFirst()
.orElseThrow();

List<String> geographicTaxonomies = Optional.ofNullable(onboarding.getInstitution().getGeographicTaxonomies())
.map(geoTaxonomies -> geoTaxonomies.stream().map(GeographicTaxonomy::getDesc).toList())
.orElse(List.of());

String mailManager = getMailManager(manager, onboarding.getOnboardingId());
String mailManager = getMailManager(manager, userManager.getUserMailUuid());
if (Objects.isNull(mailManager)) {
throw new GenericOnboardingException(MANAGER_EMAIL_NOT_FOUND.getMessage(), MANAGER_EMAIL_NOT_FOUND.getCode());
}
Expand All @@ -60,7 +59,7 @@ public static Map<String, Object> setUpCommonData(UserResource manager, List<Use
map.put("institutionMail", institution.getDigitalAddress());
map.put("managerTaxCode", manager.getFiscalCode());
map.put("managerEmail", mailManager);
map.put("delegates", delegatesToText(users, workContactsKey.apply(onboarding.getOnboardingId())));
map.put("delegates", delegatesToText(users, onboarding.getUsers()));
map.put("institutionType", decodeInstitutionType(institution.getInstitutionType()));
map.put("institutionVatNumber", Optional.ofNullable(billing).map(Billing::getVatNumber).orElse(""));

Expand All @@ -72,14 +71,14 @@ public static Map<String, Object> setUpCommonData(UserResource manager, List<Use
return map;
}

private static String getMailManager(UserResource manager, String onboardingId){
private static String getMailManager(UserResource manager, String userMailUuid){
if(Objects.isNull(manager.getWorkContacts())
|| !manager.getWorkContacts().containsKey(workContactsKey.apply(onboardingId))) {
|| !manager.getWorkContacts().containsKey(userMailUuid)) {
return null;
}

return Optional.ofNullable(manager.getWorkContacts()
.get(workContactsKey.apply(onboardingId))
.get(userMailUuid)
.getEmail())
.map(CertifiableFieldResourceOfstring::getValue)
.orElse(null);
Expand All @@ -100,7 +99,12 @@ public static void setupPSPData(Map<String, Object> map, UserResource validManag
map.put("dataProtectionOfficerPec", institution.getDataProtectionOfficer().getPec());
}

Optional.ofNullable(getMailManager(validManager, onboarding.getOnboardingId()))
/* set manager PEC */
onboarding.getUsers().stream()
.filter(user -> validManager.getId().toString().equals(user.getId()))
.map(User::getUserMailUuid)
.findFirst()
.map(userMailUuid -> getMailManager(validManager, userMailUuid))
.ifPresent(mail -> map.put("managerPEC", mail));
}

Expand Down Expand Up @@ -218,25 +222,31 @@ private static String decodeInstitutionType(InstitutionType institutionType) {
}
}

private static String delegatesToText(List<UserResource> users, String workContractId) {
private static String delegatesToText(List<UserResource> userResources, List<User> users) {
StringBuilder builder = new StringBuilder();
users.forEach(user -> {
userResources.forEach(userResource -> {
builder
.append("</br>")
.append("<p class=\"c141\"><span class=\"c6\">Nome e Cognome: ")
.append(getStringValue(user.getName())).append(" ")
.append(getStringValue(user.getFamilyName()))
.append(getStringValue(userResource.getName())).append(" ")
.append(getStringValue(userResource.getFamilyName()))
.append("&nbsp;</span></p>\n")
.append("<p class=\"c141\"><span class=\"c6\">Codice Fiscale: ")
.append(user.getFiscalCode())
.append(userResource.getFiscalCode())
.append("</span></p>\n")
.append("<p class=\"c141\"><span class=\"c6\">Amm.ne/Ente/Societ&agrave;: </span></p>\n")
.append("<p class=\"c141\"><span class=\"c6\">Qualifica/Posizione: </span></p>\n")
.append("<p class=\"c141\"><span class=\"c6\">e-mail: ");

if (Objects.nonNull(user.getWorkContacts()) && user.getWorkContacts().containsKey(workContractId)) {
builder.append(getStringValue(user.getWorkContacts().get(workContractId).getEmail()));
}
users.stream()
.filter(user -> userResource.getId().toString().equals(user.getId()))
.map(User::getUserMailUuid)
.findFirst()
.filter(userMailUuid -> Objects.nonNull(userResource.getWorkContacts()) &&
userResource.getWorkContacts().containsKey(userMailUuid))
.ifPresent(userMailUuid ->
builder.append(getStringValue(userResource.getWorkContacts().get(userMailUuid).getEmail())));


builder.append("&nbsp;</span></p>\n")
.append("<p class=\"c141\"><span class=\"c6\">PEC: &nbsp;</span></p>\n")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
import java.util.*;

import static it.pagopa.selfcare.onboarding.service.OnboardingService.USERS_WORKS_FIELD_LIST;
import static it.pagopa.selfcare.onboarding.utils.PdfMapper.workContactsKey;
import static it.pagopa.selfcare.onboarding.service.OnboardingService.USERS_FIELD_LIST;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
Expand Down Expand Up @@ -333,9 +332,10 @@ void persistOnboarding() {
User manager = new User();
manager.setId("id");
manager.setRole(PartyRole.MANAGER);
manager.setUserMailUuid(UUID.randomUUID().toString());
onboarding.setUsers(List.of(manager));

UserResource userResource = dummyUserResource(onboarding.getOnboardingId());
UserResource userResource = dummyUserResource(manager.getUserMailUuid());

when(userRegistryApi.findByIdUsingGET(USERS_WORKS_FIELD_LIST, manager.getId()))
.thenReturn(userResource);
Expand Down Expand Up @@ -446,7 +446,7 @@ private Product createDummyProduct() {
return product;
}

private UserResource dummyUserResource(String onboardingId){
private UserResource dummyUserResource(String userMailUuid){
UserResource userResource = new UserResource();
userResource.setId(UUID.randomUUID());

Expand All @@ -468,7 +468,7 @@ private UserResource dummyUserResource(String onboardingId){
workContactResource.email(resourceOfMail);

Map<String, WorkContactResource> map = new HashMap<>();
map.put(workContactsKey.apply(onboardingId), workContactResource);
map.put(userMailUuid, workContactResource);
userResource.setWorkContacts(map);
return userResource;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import it.pagopa.selfcare.onboarding.crypto.PadesSignService;
import it.pagopa.selfcare.onboarding.entity.Institution;
import it.pagopa.selfcare.onboarding.entity.Onboarding;
import it.pagopa.selfcare.onboarding.entity.User;
import jakarta.inject.Inject;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -20,12 +21,8 @@
import org.openapi.quarkus.user_registry_json.model.WorkContactResource;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;

import static it.pagopa.selfcare.onboarding.utils.PdfMapper.workContactsKey;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
Expand Down Expand Up @@ -71,18 +68,23 @@ private Onboarding createOnboarding() {
institution.setBusinessRegisterPlace("place");
institution.setShareCapital("10000");
onboarding.setInstitution(institution);

User user = new User();
user.setId(UUID.randomUUID().toString());
user.setUserMailUuid("setUserMailUuid");
onboarding.setUsers(List.of(user));
return onboarding;
}

UserResource createDummyUserResource(String onboardingId) {
UserResource createDummyUserResource(String id, String userMailUuid) {
UserResource validManager = new UserResource();

validManager.setId(UUID.fromString(id));
CertifiableFieldResourceOfstring emailCert = new CertifiableFieldResourceOfstring();
emailCert.setValue("email");
WorkContactResource workContact = new WorkContactResource();
workContact.setEmail(emailCert);
Map<String, WorkContactResource> map = new HashMap<>();
map.put(workContactsKey.apply(onboardingId), workContact);
map.put(userMailUuid, workContact);

validManager.setWorkContacts(map);
return validManager;
Expand All @@ -95,7 +97,8 @@ void createContractPDF() {
final String productNameAccent = "Interoperabilità";

Onboarding onboarding = createOnboarding();
UserResource manager = createDummyUserResource(onboarding.getOnboardingId());
User userManager = onboarding.getUsers().get(0);
UserResource manager = createDummyUserResource(userManager.getId(), userManager.getUserMailUuid());

Mockito.when(azureBlobClient.getFileAsText(contractFilepath)).thenReturn(contractHtml);

Expand All @@ -117,7 +120,8 @@ void createContractPDFSA() {
final String contractHtml = "contract";

Onboarding onboarding = createOnboarding();
UserResource manager = createDummyUserResource(onboarding.getOnboardingId());
User userManager = onboarding.getUsers().get(0);
UserResource manager = createDummyUserResource(userManager.getId(), userManager.getUserMailUuid());
onboarding.getInstitution().setInstitutionType(InstitutionType.SA);

Mockito.when(azureBlobClient.getFileAsText(contractFilepath)).thenReturn(contractHtml);
Expand All @@ -133,7 +137,8 @@ void createContractPDFAndSigned() {
final String contractHtml = "contract";

Onboarding onboarding = createOnboarding();
UserResource manager = createDummyUserResource(onboarding.getOnboardingId());
User userManager = onboarding.getUsers().get(0);
UserResource manager = createDummyUserResource(userManager.getId(), userManager.getUserMailUuid());

PagoPaSignatureConfig pagoPaSignatureConfig = Mockito.spy(this.pagoPaSignatureConfig);
when(pagoPaSignatureConfig.source()).thenReturn("local");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ public class User {
private String id;
private PartyRole role;
private String productRole;
private String userMailUuid;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package it.pagopa.selfcare.onboarding.mapper;

import it.pagopa.selfcare.onboarding.controller.response.UserResponse;
import it.pagopa.selfcare.onboarding.entity.User;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
Expand All @@ -15,4 +16,6 @@ public interface UserMapper {
@Mapping(source = "fiscalCode", target = "taxCode")
void fillUserResponse(UserResource userResource, @MappingTarget UserResponse userResponse);

UserResponse toUserResponse(User user);

}
Loading
Loading