예제 #1
0
        private FreeRoomCheck ConstructObject(IList results, FreeRoomCheck cc, DateTime start, DateTime end, BookingResource room)
        {
            string message1 = string.Format("La camera {0} risulta occupata nel periodo dal {1} al {2}{3}", room.Descrizione, start.ToShortDateString(), end.ToShortDateString(), Environment.NewLine);

            DateTime[] listOfDays     = GetIntervalListOfDays(start, end);
            ArrayList  listOffreeDays = new ArrayList();


            foreach (DateTime item in listOfDays)
            {
                if (IsFreeDay(results, item))
                {
                    listOffreeDays.Add(item);
                }
            }

            if (listOffreeDays.Count == 0)
            {
                cc.Message = message1;
            }
            else
            {
                cc.Message = ConstructMessage(message1, listOffreeDays, room);
            }

            return(cc);
        }
예제 #2
0
        public FreeRoomCheck IsRoomFree(DateTime start, DateTime end, BookingResource room, int assignmentID)
        {
            if (end <= start)
            {
                throw new Exception("Intervallo date non corretto per la verifica di assegnazioni già presenti");
            }

            if (room == null)
            {
                throw new Exception("Stanza non specificata per la verifica di assegnazioni già presenti");
            }


            end   = end.Date;
            start = start.Date;

            //cerco tutte le assegnazioni per una data camera che intersecano strettamente il periodo considerato
            //cosi facendo ottengo tutte le assegnazioni che si sovrappongono ad una potenziale assegnazione nel periodo
            //considerato.

            //l'input assignmentId serve per il caso in cui sto aggiornando una assegnazione esistente e il check
            //va fatto non considerando la presenza dell'assegnazione in questione
            Query q = _ps.CreateNewQuery("MapperAssignment");

            CompositeCriteria c = new CompositeCriteria(AbstractBoolCriteria.Operatore.AndOp);

            //criterio per la verifica della sovrapposizioe delle assegnazioni
            c.AddCriteria(Criteria.DateRangeStrictlyIntersects("StartDate", "EndDate", start, end, DataAccessServices.Instance().PersistenceFacade.DBType));
            //criterio sulla camera
            c.AddCriteria(Criteria.Equal("Id_Resource", room.Id.ToString()));

            //in caso di modifica
            if (assignmentID > 0)
            {
                NotExp exp = new NotExp(Criteria.Equal("ID", assignmentID.ToString()));
                c.AddCriteria(exp);
            }

            q.AddWhereClause(c);


            string p       = q.CreateQuery(_ps);
            IList  results = q.Execute(_ps);

            FreeRoomCheck cc = new FreeRoomCheck();

            cc.IsFree = results.Count == 0;

            if (cc.IsFree)
            {
                return(cc);
            }

            return(ConstructObject(results, cc, start, end, room));
        }