Si direi che va quasi bene, io però non creerei la dipendenza tra Customer e CurrencyConverter, sono due cose che concettualmente non sono legate quindi meglio dividere i compiti, io farei così:

L'oggetto Customer restituisce le transazioni
L'oggetto CurrencyConverter prende una transazione e la converte

Questo rende il codice più modificabile ed espandibile.

Ti faccio un esempio, se io volessi in un secondo momento creare un report con due valute cosa dovrei fare?
Con il tuo codice dovrei creare un nuovo CurrencyConverter per la nuova valuta ma anche riscrivere la classe Customer per lavorare con due CurrencyConverter diversi, e rimodificarla di nuovo se un giorno ne volessi 3 o 4.

Togliendo la dipendenza volendo aggiungere un'altra conversione basterebbe soltanto creare un CurrencyConverter per la nuova valuta e aggiungerlo una volta nel foreach che genera il report.

E' sempre bene pensare a cosa potrebbe essere aggiunto o modificato, e strutturare il nostro codice in modo tale che questo richieda il minor numero possibile di modifiche agli oggetti già creati.

p.s. per essere più "moderno" potresti mettere tutto dentro un namespace e usare un autoloader, visto che è un esercizio credo che ti farebbe guadagnare qualche punto. Controlla anche che tutto il codice sia psr-2 perché al momento non è così.