public decimal? GetCreditoResiduo(string username, string password)
        {
            try
            {
                var service = new Users();

                var result = service.CheckCredit(username, password, null);
                if (!result.success)
                {
                    _log.ErrorFormat("Errore inaspettato durante la lettura del credito residuo - {0} - username:{1} - password:{2} - errore:{3}", Library.Utility.GetMethodDescription(), username, password, result.description);
                }
                else
                {
                    return Convert.ToDecimal(result.UserCredit);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la lettura del credito residuo per il servizio di messaggistica - {0} - username:{1} - password:{2}", ex, Library.Utility.GetMethodDescription(), username, password);
            }

            return 0m;
        }
        public RisultatoRegistrazione CreateUtente(int idAzienda, string username, string password)
        {
            var message = string.Empty;
            string codiceUtente = null;

            try
            {
                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);
                if(azienda.Amministratore?.PersonaRiferimento == null)
                    return new RisultatoRegistrazione("KO", "Non è possibile creare l'utente per le funzioni di messaggistica perchè non è stato definito l'amministratore dello studio.");

                if (azienda.IndirizzoSede?.Comune == null)
                    return new RisultatoRegistrazione("KO", "Non è possibile creare l'utente per le funzioni di messaggistica perchè non è l'indirizzo dello studio è incompleto.");

                if (string.IsNullOrEmpty(azienda.PartitaIva))
                    return new RisultatoRegistrazione("KO", "Non è possibile creare l'utente per le funzioni di messaggistica perchè non è presente la partita iva dello studio.");

                var contatti = new ContattoCollection(azienda.Amministratore.PersonaRiferimento.Contatti);
                var emailContatto = contatti.GetFirstContatto<Email>();
                var telefonoContatto = contatti.GetFirstContatto<Telefono>();
                string email;
                string telefono;
                if (emailContatto == null || telefonoContatto == null)
                    return new RisultatoRegistrazione(null, "Non è possibile creare l'utenza di messaggistica perchè non è presente la mail o il telefono dell'amministratore nell'anagrafica dello studio");
                else
                {
                    email = emailContatto.Valore;
                    telefono = telefonoContatto.Valore;
                }

                var service = new Users();
                var result = service.SignUp(username, password, azienda.Descrizione, azienda.Amministratore.PersonaRiferimento.Nome, azienda.Amministratore.PersonaRiferimento.Cognome, azienda.IndirizzoSede.Indirizzo, azienda.IndirizzoSede.Comune.Descrizione, "Italy", azienda.IndirizzoSede.Cap, "Italy", null, telefono, null, null, null, email, null, null, null);
                if (result.success)
                {
                    _log.InfoFormat("E' stato creato l'utente: {0} - {1} - azienda:{2} - email:{3} - password:{4}", email, Library.Utility.GetMethodDescription(), idAzienda, email, password);
                    codiceUtente = result.description;
                    
                    //message = service.AssociateUserWithAgent(email, password, 4);
                    //if (!message.StartsWith("OK"))
                    //{
                    //    _log.WarnFormat("Fallita l'associazione tra utente e agente per il servizio di messaggistica - {0} - result:{1} - azienda:{2} - email:{3} - password:{4}", Library.Utility.GetMethodDescription(), message, idAzienda, email, password);
                    //}
                }
                else
                {
                    _log.FatalFormat("Errore inaspettato durante la creazione dell'utente per il servizio di messaggistica - {0} - result:{1} - azienda:{2} - email:{3} - password:{4}", Library.Utility.GetMethodDescription(), message, idAzienda, email, password);
                    message = result.description;
                    //var errore = _daoFactory.GetMessaggioErroreMessaggisticaDao().Find(result.CodeError, false);
                    //if (errore != null)
                    //    message = errore.Descrizione;
                }
            }
            catch(Exception ex)
            {
                _log.FatalFormat("Errore inaspettato durante la creazione dell'utente per il servizio di messaggistica - {0} - azienda:{1} - email:{2} - password:{3}", ex, Library.Utility.GetMethodDescription(), idAzienda, username, password);
                message = "La registrazione non è andata a buon fine.";
            }

            return new RisultatoRegistrazione { Message = message, Codice = codiceUtente };
        }