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); }
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)); }