---
# System prepended metadata

title: Direct Link - modifiche per mail in lingua ENG da backoffice

---

# Direct Link - modifiche per mail in lingua ENG da backoffice

## Credenziali backoffice

merchant: 001111111
username: TestUser
password: password


## TODO

- [x] salvare la lingua della mail scelta da utente nel db (tabella `direct_link_init`)
  - [x] creare nuovo script sql che aggiunga colonna `mailLanguage` in tabella `direct_link_init`
  - [x] verificare che il nuovo script `282` di phoenix sia corretto: deve aggiungere la colonna, assegnare un default a TUTTI i record (compresi quelli esistenti)
  - [x] i valori possibili per la colonna `MailLanguage` saranno `ITA_ENG` (default) e `ENG`
  
- [x] Rinominare nel codice i punti in cui la mail language è valorizzata IT oppure EN in ITA_ENG oppure ENG

- [x] testare `DirectLinkMailTemplateFactoryTest` per i casi di language `IT` e `EN`

- [x] creare template per mail direct link in inglese (test in classe `DirectLinkMailMessageTest`)

- [x] in `DirectLinkInit` il `mailLanguage` è assegnato a `ITA_ENG` nel costruttore. Quel valore dovrà invece essergli passato dal mate, che lo recupererà a sua volta dalla UI.

- [x] Modificare classe `DirectLinkInitFactory` per fargli creare `DirectLinkInit` col `mailLanguage` letto dal blueprint
- [x] modificare UI di pagina insert direct link, aggiungere una checkBox per selezionare la lingua della mail

- [x] la classe `CsvDirectLinkInitUploadParser` deve leggere il valore di `MailLanguage` dal csv (quando si lavorerà la storia sull'import da CSV?)

- [x]  riscrivere test `RealDirectLinkMailManTest.throwExceptionDuringSendingEmail` con mockito

- [x] rifattorizzare `RealDirectLinkMailMan`, fare in modo che non occorra creare `DirectLinkMailMessage` e `DispatchedDirectLinkInit` dentro il metodo `sendEmailToCardHolder`
    - [x] dopo il refactoring di `RealDirectLinkMailMan` eliminare classe test jmock `RealDirectLinkMailManTest`

- [x] scrivere test unitari per la view di Direct Link Search?

## Analisi flusso


### Collaboratori

`DirectLinkInitController`: controller invocato nella submit del pulsante "send link": /backoffice/directlink/init

e nel resend 
`FactoryForResubmit` <-- /backoffice/directlink/resubmit_action

`DirectLinkInitController` usa `DirectLinkInitObserver` per persistere i dati del form che compone la mail.

`RealDirectLinkMailMan` : contiene il template del body


Tabella: `direct_link_init` dove esiste un campo token utilizzato per individiare il singolo invio e poterlo reinviare.


MailTemplate: classe di static che restituiscono i template delle e-mail 


`DirectLinkInitController `

## Domande

* dove salvare l'informazione della lingua scelta per il direct link? Nella tabella `direct_link_init`? (più flessibile)

* come creare un template per le mail piuttosto che un altro?

* dove ho l'opzione per re-inviare la mail?
  * nella pagina di ricerca di direct link

* nella pagina di ricerca direct link sono mostrati i directlink inviati via mail. Per ogni record dove vengono letti i dati? Dalla tabella `direct_link_init`?
  * sì, la query per ecuperare i dati è in `DbDirectLinkInitFinder` 

* perchè viene usato un token (salvato nella colonna `Token` su `direct_link_init`)?


## Steps di realizzazione

* invio via form (EN / default (IT/EN ))
* resend
* Upload


## Possibili scenari

* attuale: ITA_ENG

* con DirectLink in Inglese: ITA_ENG, ENG

* futuro1: ITA_ENG, ENG, ITA

* futuro2: ENG, ITA



##  Problemi

https://discourse.xpeppers.com/t/eseguire-gli-at-di-phoenix-da-intellij/7602


## journal 9-03-2020


Oggi con @Edo abbiamo terminato la prima carta relativa alla possibilità di inviare una mail in sola lingua inglese.

gli ultimi passi per concludere la carta sono stati:

* definita la colonna `MailLanguage` in tabella `direct_link_init`
* ridefinito i valori del enum MailLanguage in 
    * `ITA_ENG` (default)
    * `ENG` 
* Rinominato tutti i riferimenti a IT e EN rispettivamente in ITA_ENG e ENG. 
* Modificato i nomi degli ftl in:
    * direct_link_init_eng.ftl
    * direct_link_init_ita_eng.ftl

* Implementato nella classe DbDirectLinkInitRepository il nuovo campo MailLanguage
* Modificato la DirectLinkView in modo che visualizzasse il nuovo option con i valori possibili di lingua.


### Problemi

Vari test erano stati "corretti" (con valori hard-coded) temporaneamente per farli diventare verdi ma a distanza di un weekend ci hanno nascosto la mancanza dell'implementazione della parte del repository.

---

['Tutto è bene ciò che finisce bene e l'ultimo chiude la porta'](https://www.youtube.com/watch?v=C8__3Q85_lk)


## journal 10-03-2020

Terminata la carta del resubmit della mail. L'invio era già pronto con l'implementazione della carta precedente. Abbiamo dovuto aggiungere nella tabella degli invii il nuovo campo Mail Language.

Terminta la carta dell'invio massivo. Abbiamo garantito la retrocompatibilità del formato CSV (in assenza di colonna o di valore del campo Mail Language viene considerato il valore di default ITA_ENG) e aggiornato il file CSV di esempio con anche i valori validi per il campo mail Language (ITA_ENG e ENG).

Fortunamente la libreria CommonsCSV offriva la possibilità configurare il formato CSV permettendo l'assenza di colonne e anche di verificare sia se un colonna è presente e sia se posside un valore. 


Questi i metodi della libreria utilizzati:
```
CSVFormat.DEFAULT.withAllowMissingColumnNames()

next.isSet("MailLanguage")
```