public void Delete(Flyer flyer)
 {
     using (var manager = new OperationManager())
     {
         try
         {
             manager.BeginOperation();
             base.delete<Flyer>(flyer);
             manager.CommitOperation();
             logger.Info("Flyer {0} eliminato con successo", flyer.Id);
         }
         catch (Exception ex)
         {
             string message = "Errore nella cancellazione del flyer";
             logger.ErrorException(message, ex);
             throw new Exception(message, ex);
         }
     }
 }
 public IList<Viaggio> GetApproved()
 {
     using (var om = new OperationManager())
     {
         try
         {
             var session = om.BeginOperation();
             var result = GetViaggiApprovati().ToList();
             om.CommitOperation();
             return result;
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = String.Format("Errore durante il recupero dei viaggi approvati");
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
 public IList<Viaggio> GetListaViaggiByAgenzia(Agenzia agenzia)
 {
     using (var om = new OperationManager())
     {
         try
         {
             var session = om.BeginOperation();
             var result = GetViaggiVisibili(agenzia).ToList();
             om.CommitOperation();
             return result;
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = String.Format("Errore durante il recupero dei viaggi dell'agenzia {0}", agenzia.ToString());
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
 public IList<Flyer> GetFlyersPerAgenzia(int idAgenzia)
 {
     using (var om = new OperationManager())
     {
         try
         {
             var session = om.BeginOperation();
             var flyers = session.Query<Flyer>().Where(p => p.Agenzia.Id == idAgenzia).OrderByDescending(p => p.Id).ToList();
             om.CommitOperation();
             logger.Debug("Per l'agenzia {0} sono state trovate {1} flyers", idAgenzia, flyers.Count);
             return flyers;
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = String.Format("Impossibile recuperare i flyers per l'agenzia {0}", idAgenzia);
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
 public IList<Flyer> GetFlyers(bool isPubblicato)
 {
     using (var om = new OperationManager())
     {
         try
         {
             var session = om.BeginOperation();
             var flyers = session.Query<Flyer>().Where(p => p.IsPubblicato == isPubblicato).OrderByDescending(p => p.Id).ToList();
             om.CommitOperation();
             logger.Debug("Sono stati trovati {0} flyers", flyers.Count);
             return flyers;
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = String.Format("Impossibile recuperare i flyers");
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
 /// <summary>
 /// Gets all Agenzia where isTourOperator is true.
 /// </summary>
 /// <param name="maximumRows">The maximum rows.</param>
 /// <param name="startRowIndex">Start index of the row.</param>
 /// <returns></returns>
 public IList<Agenzia> GetAllTO(int maximumRows, int startRowIndex)
 {
     using (var manager = new OperationManager())
     {
         try
         {
             var session = manager.BeginOperation();
             var res = session.Query<Agenzia>()
                             .Where(c => c.IsTourOperator).ToList();
             manager.CommitOperation();
             return res;
         }
         catch (Exception ex)
         {
             manager.RollbackOperation();
             string message = String.Format("Impossibile recuperare la lista dei TO");
             logger.ErrorException(message, ex);
             throw new Exception(message, ex);
         }
     }
 }
 public Gestore GetByEmail(string email)
 {
     using (var manager = new OperationManager())
     {
         try
         {
             var session = manager.BeginOperation();
             var res = session.Query<Gestore>()
                             .Where(u => u.Email.ToLower().Equals(email)).SingleOrDefault();
             manager.CommitOperation();
             return res;
         }
         catch (Exception ex)
         {
             manager.RollbackOperation();
             string message = String.Format("Impossibile recuperare il gestore con email = {0}", email);
             logger.ErrorException(message, ex);
             throw new Exception(message, ex);
         }
     }
 }
 public void Save(Flyer flyer)
 {
     using (var om = new OperationManager())
     {
         try
         {
             om.BeginOperation();
             base.update<Flyer>(flyer);
             om.CommitOperation();
             logger.Info("Dati del flyer {0} salvati con successo", flyer.Id);
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = "Errore nel salvataggio del flyer";
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
 /// <summary>
 /// Prende tutti i viaggi pubblicati o proposti dall'agenzia dell'utente loggato
 /// </summary>
 /// <returns></returns>
 internal IQueryable<Viaggio> GetViaggiVisibili(Agenzia agenzia)
 {
     using (var om = new OperationManager())
     {
         try
         {
             var session = om.BeginOperation();
             var result = GetViaggi()
                          .Where(v => v.Agenzia.Id == agenzia.Id);
             om.CommitOperation();
             return result;
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = String.Format("Errore durante il recupero dei viaggi pubblicati o proposti dall'agenzia {0}", agenzia);
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
 internal IQueryable<Viaggio> GetViaggiNonApprovati()
 {
     using (var om = new OperationManager())
     {
         try
         {
             var session = om.BeginOperation();
             var result = GetViaggi()
                          .Where(c => !c.Approvato);
             om.CommitOperation();
             return result;
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = String.Format("Errore durante il recupero dei viaggi non approvati");
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
        public List<Viaggio> Search(ViaggioSearch searchParams)
        {
            using (var om = new OperationManager())
            {
                try
                {
                    var session = om.BeginOperation();
                    var viaggiFound = getAll<Viaggio>();

                    if (searchParams != null)
                    {
                        if ( !(searchParams.searchApproved && searchParams.searchUnapproved)   )
                        {
                            if (searchParams.searchApproved)
                                viaggiFound = viaggiFound.Where(v => v.Approvato == true);
                            if (searchParams.searchUnapproved)
                                viaggiFound = viaggiFound.Where(v => v.Approvato == false);
                        }
                        if (!(searchParams.searchMine && searchParams.searchTheirs))
                        {
                            if (searchParams.searchMine)
                                viaggiFound = viaggiFound.Where(v => v.Agenzia.Id == searchParams.idAgenzia);
                            if (searchParams.searchTheirs)
                                viaggiFound = viaggiFound.Where(v => v.Agenzia.Id != searchParams.idAgenzia);
                        }

                        if (!String.IsNullOrEmpty(searchParams.SearchString))
                            viaggiFound = viaggiFound.Where(v => v.Nome.ToUpper().StartsWith(searchParams.SearchString.ToUpper()));
                        if (searchParams.DataPartenzaMin != null)
                            viaggiFound = viaggiFound.Where(v => v.DataPartenza >= searchParams.DataPartenzaMin);
                        if (searchParams.DataPartenzaMax != null)
                            viaggiFound = viaggiFound.Where(v => v.DataPartenza <= searchParams.DataPartenzaMax);
                        if (searchParams.PrezzoMin != null)
                            viaggiFound = viaggiFound.Where(v => v.PrezzoStandard >= searchParams.PrezzoMin);
                        if (searchParams.PrezzoMax != null)
                            viaggiFound = viaggiFound.Where(v => v.PrezzoStandard <= searchParams.PrezzoMax);
                        if (searchParams.PassaDa != null)
                            viaggiFound = AddTappaSearchFilter(viaggiFound, searchParams.PassaDa, searchParams.PassaDaTipoSearch, TipoTappa.PICK_UP_POINT);
                        if (searchParams.ArrivaA != null)
                            viaggiFound = AddTappaSearchFilter(viaggiFound, searchParams.ArrivaA, searchParams.ArrivaATipoSearch, TipoTappa.DESTINAZIONE);
                    }
                    var result = viaggiFound.ToList();
                    om.CommitOperation();
                    return result;
                }
                catch (Exception ex)
                {
                    om.RollbackOperation();
                    string msg = String.Format("Errore nella ricerca viaggio");
                    logger.ErrorException(msg, ex);
                    throw new Exception(msg, ex);
                }
            }
        }
 public void Save(Tappa tappa)
 {
     using (var om = new OperationManager())
     {
         try
         {
             om.BeginOperation();
             var destinazione = tappa.Viaggio.Tappe.Where(t => t.Tipo == TipoTappa.DESTINAZIONE).SingleOrDefault();
             if (destinazione != null)
             {
                 logger.Debug("L'ordinamento della destinazione verrà incrementato di 1 per fare posto alla nuova tappa");
                 destinazione.Ordinamento = tappa.Ordinamento + 1;
                 base.update<Tappa>(destinazione);
             }
             base.update<Tappa>(tappa);
             om.CommitOperation();
             logger.Info("Dati della tappa {0} salvati con successo", tappa);
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = "Errore nel salvataggio della tappa";
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
 public Agenzia GetByName(string name)
 {
     using (var manager = new OperationManager())
     {
         try
         {
             var session = manager.BeginOperation();
             var res = session.Query<Agenzia>()
                             .Where(u => u.Nome.ToLower().Equals(name)).SingleOrDefault();
             manager.CommitOperation();
             return res;
         }
         catch (Exception ex)
         {
             manager.RollbackOperation();
             string message = String.Format("Impossibile recuperare l'agenzia con nome = {0}", name);
             logger.ErrorException(message, ex);
             throw new Exception(message, ex);
         }
     }
 }
 public IList<Viaggio> GetProposteAgenzia(Agenzia agenzia)
 {
     var ar = new AgenziaRepository();
     using (var om = new OperationManager())
     {
         try
         {
             var session = om.BeginOperation();
             logger.Info("Recupero dei viaggi proposti dall'agenzia {0}", agenzia);
             var viaggi = session.Query<Viaggio>()
                             .Where(v => v.Agenzia.Id == agenzia.Id)
                             .ToList();
             logger.Debug("Viaggi proposti: {0}", viaggi.Count);
             om.CommitOperation();
             return viaggi;
         }
         catch (Exception ex)
         {
             om.RollbackOperation();
             string msg = String.Format("Impossibile recuperare i viaggi proposti dall'agenzia {0}", agenzia);
             logger.ErrorException(msg, ex);
             throw new Exception(msg, ex);
         }
     }
 }
        /*
        public void DeleteDepliant(int idDepliant)
        {
            logger.Debug("Richiesta di eliminazione del depliant {0}", idDepliant);
            using (var om = new OperationManager())
            {
                try
                {
                    var session = om.BeginOperation();
                    var viaggio = GetViaggioByDepliant(idDepliant);
                    logger.Debug("Il viaggio da cui il depliant {0} sarà rimosso è {1}", idDepliant, viaggio);
                    var depliant = viaggio.Depliant;
                    viaggio.Depliant = null;
                    DeleteAllegato(viaggio, depliant);
                    om.CommitOperation();
                    logger.Info("Il depliant {0} relativo al viaggio {1} è stato eliminato", idDepliant, viaggio);
                }
                catch (Exception ex)
                {
                    om.RollbackOperation();
                    string msg = String.Format("Impossibile eliminare il depliant {0}", idDepliant);
                    logger.ErrorException(msg, ex);
                    throw new Exception(msg, ex);
                }
            }

        }

        private void DeleteAllegato(Viaggio viaggio, AllegatoViaggio targetAllegato)
        {
            using (var om = new OperationManager())
            {
                try
                {
                    var session = om.BeginOperation();
                    var fullImgPath = targetAllegato.FullName;
                    System.IO.File.Delete(fullImgPath);
                    vr.Save(viaggio);
                    vr.deleteAllegato(targetAllegato);
                    om.CommitOperation();
                }
                catch (Exception ex)
                {
                    om.RollbackOperation();
                    string msg = String.Format("Impossibile eliminare l'allegato {0}", targetAllegato.Id);
                    logger.ErrorException(msg, ex);
                    throw new Exception(msg, ex);
                }
            }
        }

        public void DeletePromoImage(int idPromoImage)
        {
            logger.Debug("Richiesta di eliminazione dell'immagine promozionale {0}", idPromoImage);
            using (var om = new OperationManager())
            {
                try
                {
                    var session = om.BeginOperation();
                    var viaggio = GetViaggioByPromoImage(idPromoImage);
                    logger.Debug("Il viaggio da cui l'immagine promozionale {0} sarà rimossa è {1}", idPromoImage, viaggio);
                    var promoImg = viaggio.PromoImage;
                    viaggio.PromoImage = null;
                    DeleteAllegato(viaggio, promoImg);
                    om.CommitOperation();
                    logger.Info("L'immagine promozionale {0} relativa al viaggio {1} è stata eliminato", idPromoImage, viaggio);
                }
                catch (Exception ex)
                {
                    om.RollbackOperation();
                    string msg = String.Format("Impossibile eliminare l'immagine promozionale {0}", idPromoImage);
                    logger.ErrorException(msg, ex);
                    throw new Exception(msg, ex);
                }
            }

        }

        public Boolean isValidDepliantMimeType(string fileName)
        {
            var result = false;
            result = (fileName.ToLower().EndsWith(".pdf")) || (fileName.ToLower().EndsWith(".doc"));
            logger.Debug("Il file {0} non è stato ritenuto valido come depliant", fileName);
            return result;
        }

        public bool isValidImageMimeType(string fileName)
        {
            var result = false;
            result = (fileName.ToLower().EndsWith(".gif"))
                    || (fileName.ToLower().EndsWith(".jpg"))
                    || (fileName.ToLower().EndsWith(".png"));
            logger.Debug("Il file {0} non è stato ritenuto valido come immagine", fileName);
            return result;
        }
        */
        public void DeleteTappa(int idTappa)
        {
            using (var om = new OperationManager())
            {
                try
                {
                    var session = om.BeginOperation();
                    var tappa = vr.GetTappaById(idTappa);
                    var viaggio = tappa.Viaggio;
                    viaggio.Tappe.Remove(tappa);
                    vr.deleteTappa(tappa);
                    Reorder(viaggio.Tappe);
                    vr.Save(viaggio);
                    om.CommitOperation();
                }
                catch (Exception ex)
                {
                    om.RollbackOperation();
                    string msg = String.Format("Errore durante l'eliminazione della tappa {0}", idTappa);
                    logger.ErrorException(msg, ex);
                    throw new Exception(msg, ex);
                }
            }
        }