module Tools::Calendar::ClassMethods

Public Instance Methods

day_events(day, month, year) click to toggle source
# File app/models/tools/calendar.rb, line 199
def day_events(day, month, year)
  all_events = month_events_by_day(month, year)
  all_events[day].present? ? all_events[day] : []
end
month_events(month, year) click to toggle source

Devuelve la lista de eventos del mes y año indicados.

# File app/models/tools/calendar.rb, line 111
def month_events(month, year)
  start_day = Time.parse("#{month}/01/#{year}")
  end_day = start_day.end_of_month
  # self.find(:all, :conditions => ['starts_at >= ? AND starts_at <= ?', start_day, end_day],
  #                 :order => "starts_at")
  self.find(:all, :conditions => ['starts_at <= :end_day AND (ends_at >= :start_day)', {:start_day => start_day, :end_day => end_day}],
                  :order => "starts_at")

end
month_events_by_day(month, year) click to toggle source

Devuelve una lista con los eventos para cada día del mes y año indicados. Para los eventos que abarcan más de un día hay una entrada para cada día del evento.

# File app/models/tools/calendar.rb, line 123
def month_events_by_day(month, year)
  events = self.month_events(month, year)
  events4day = events.group_by  {|e| e.first_day(month, year)}
  events.each do |evt|
    if !evt.one_day?
      evt.days(month, year).each do |day|
        events4day[day] = [] if events4day[day].blank?
        events4day[day].push(evt) unless events4day[day].include?(evt)
      end
    end
  end
  events4day
end
month_events_by_day4cal(month, year) click to toggle source

Prepara la lista de eventos del mes y año indicadas para usarla en el calendario del mes.

# File app/models/tools/calendar.rb, line 138
def month_events_by_day4cal(month, year)
  events = {}

  first_day = Date.civil(year, month, 1)
  last_day = Date.civil(year, month, -1)

  self.find(:all, :conditions => [ "(starts_at <= :end_of_day) and (ends_at >= :beginning_of_day)", 
                                   {:beginning_of_day => (first_day-6.days).beginning_of_day,
                                    :end_of_day => (last_day + 6.days).end_of_day}], 
                   :order => "starts_at").each do |evt|
     if evt.one_day?
       events[evt.month] = {} if events[evt.month].blank?
       events[evt.month][evt.day] = [] if events[evt.month][evt.day].blank?
       events[evt.month][evt.day].push(evt) unless events[evt.month][evt.day].include?(evt)
     else
       # logger.debug ".......................... more than one day event #{evt.pretty_dates}"
     
       if (evt.starts_at.month > evt.ends_at.month)
         if (month >= evt.starts_at.month) 
           prev_year = year 
           next_year= year + 1
         else
           prev_year = year - 1 
           next_year = year
         end
         (evt.starts_at.month .. 12).each do |m|
           events[m] = {} if events[m].blank?
           evt.days(m, prev_year).each do |day|
             events[m][day] = [] if events[m][day].blank?
             events[m][day].push(evt) unless events[m][day].include?(evt)
           end
         end
          start_month = 1
       else
         prev_year = year - 1
         next_year= year
         start_month = evt.starts_at.month
       end
     
       (start_month .. evt.ends_at.month).each do |m|
         events[m] = {} if events[m].blank?
         evt.days(m, next_year).each do |day|
           events[m][day] = [] if events[m][day].blank?
           events[m][day].push(evt) unless events[m][day].include?(evt)
         end
       end
     
     end
     # logger.debug ".............. events months: #{events.keys.join(",")}"
     # logger.debug "............. by now for month #{month}"
     # if events[month]
     #   events[month].each do |day, evts|
     #     logger.debug "day: #{day}"
     #     logger.debug "eventos: #{evts.map {|e| e.pretty_dates}.join('\n')}"
     #   end
     # end       
  end
    
  events
end