public NotaPredefinitaDTO[] GetAllByAzienda(int idAzienda)
        {
            try
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var lista = daoFactory.GetNotaPredefinitaDao().GetByAzienda(idAzienda);
                var listaDto = new NotaPredefinitaDTO[lista.Count];

                int index = 0;
                foreach (var item in lista)
                {
                    listaDto[index] = setDto(item);
                    index++;
                }

                return listaDto;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nel caricamento delle note predefinite - " + Library.Utility.GetMethodDescription() + " - idAzienda:" + idAzienda, ex);
                throw;
            }
        }
        private string manage(NotaPredefinitaDTO dto)
        {
            string message = string.Empty;
            NotaPredefinita item;
            bool result;

            // Controllo sullo stato U, D, I
            switch (dto.Stato.ToUpper())
            {
                case "U":
                    result = update(dto, out item);

                    if (!result)
                    {
                        //Il dato sul database è più recente di quello utilizzato
                        message = "Un altro utente ha aggiornato la stessa nota.";
                    }
                    break;
                case "I":
                    result = insert(dto, out item);

                    if (!result)
                        throw new Exception("Impossibile scrivere sul database");
                    break;
                case "D":
                    result = delete(dto.ID);

                    if (!result)
                        throw new Exception("Impossibile scrivere sul database");
                    break;
            }
            return message;
        }
        private bool insert(NotaPredefinitaDTO dto, out NotaPredefinita item)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = new NotaPredefinita(dto.Descrizione, (Gipasoft.Sfera.Enums.TipoNotaEnum)Enum.Parse(typeof (Gipasoft.Sfera.Enums.TipoNotaEnum), dto.Tipo), dto.TestoHtml, daoFactory.GetAziendaDao().GetById(_info.Azienda, false)) {Ordine = dto.Ordine};
                daoFactory.GetNotaPredefinitaDao().SaveOrUpdate(item);
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nell'inserimento delle note predefinite - " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
                throw;
            }
            return true;
        }
        private bool update(NotaPredefinitaDTO dto, out NotaPredefinita item)
        {
            bool result;
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = daoFactory.GetNotaPredefinitaDao().GetById(dto.ID, false);

                if (dto.Version == item.Version)
                {
                    item.Tipo = (Gipasoft.Sfera.Enums.TipoNotaEnum)Enum.Parse(typeof(Gipasoft.Sfera.Enums.TipoNotaEnum), dto.Tipo);
                    item.Ordine = dto.Ordine;
                    item.Descrizione = dto.Descrizione;
                    item.Testo = dto.TestoHtml;

                    result = true;
                }
                else
                {
                    // Eccezione: Sul db c'è qualche cosa di più nuovo.
                    
                    _log.Error("Errore nel salvataggio delle note predefinite: id:" + dto.ID + " - il dato sul db è più recente di quello che si vuole salvare");
                    result = false;
                }
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nel salvataggio delle note predefinite - " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
                throw;
            }

            return result;
        }
        private NotaPredefinitaDTO setDto(NotaPredefinita item)
        {
            var dto = new NotaPredefinitaDTO
            {
                Descrizione = item.Descrizione,
                Tipo = item.Tipo.ToString(),
                Testo = Library.Conversione.HtmlToString(item.Testo),
                TestoHtml = item.Testo,
                Ordine = item.Ordine,
                ID = item.ID,
                Version = item.Version
            };
            
            if (item.Azienda != null)
                dto.IdAzienda = item.Azienda.ID;

            dto.IsDeleteAllow = (dto.IdAzienda > 0);

            return dto;
        }
 public string ManageDomainEntity(NotaPredefinitaDTO dto)
 {
     try
     {
         return manage(dto);
     }
     catch (Exception ex)
     {
         
         _log.Error("Errore nella gestione delle note predefinite: " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
         throw;
     }
 }