class Osm::Event::Attendance

Constants

SORT_BY

Public Instance Methods

get_audit_trail(api, options={}) click to toggle source

Get audit trail @param [Osm::Api] api The api to use to make the request @!macro options_get @return [Array<Hash>]

# File lib/osm/event.rb, line 859
def get_audit_trail(api, options={})
  require_ability_to(api, :read, :events, event.section_id, options)
  cache_key = ['event\_attendance\_audit', event.id, member_id]

  if !options[:no_cache] && cache_exist?(api, cache_key)
    return cache_read(api, cache_key)
  end

  data = api.perform_query("events.php?action=getEventAudit&sectionid=#{event.section_id}&scoutid=#{member_id}&eventid=#{event.id}")
  data ||= []

  attending_values = {
    'Yes' => :yes,
    'No' => :no,
    'Invited' => :invited,
    'Show in My.SCOUT' => :shown,
    'Reserved' => :reserved,
  }

  trail = []
  data.each do |item|
    this_item = {
      :at => DateTime.strptime(item['date'], '%d/%m/%Y %H:%M'),
      :by => item['updatedby'].strip,
      :type => item['type'].to_sym,
      :description => item['desc'],
      :event_id => event.id,
      :member_id => member_id,
      :event_attendance => self,
    }
    if this_item[:type].eql?(:detail)
      results = this_item[:description].match(/\ASet '(?<label>.+)' to '(?<value>.+)'\Z/)
      this_item[:label] = results[:label]
      this_item[:value] = results[:value]
    end
    if this_item[:type].eql?(:attendance)
      results = this_item[:description].match(/\AAttendance: (?<attending>.+)\Z/)
      this_item[:attendance] = attending_values[results[:attending]]
    end
    trail.push this_item
  end

  cache_write(api, cache_key, trail)
  return trail
end
inspect() click to toggle source
# File lib/osm/event.rb, line 937
def inspect
  Osm.inspect_instance(self, options={:replace_with => {'event' => :id}})
end
update(api) click to toggle source

Update event attendance @param [Osm::Api] api The api to use to make the request @return [Boolean] if the operation suceeded or not

# File lib/osm/event.rb, line 795
def update(api)
  require_ability_to(api, :write, :events, event.section_id)

  payment_values = {
    :manual => 'Manual',
    :automatic => 'Automatic',
  }
  attending_values = {
    :yes => 'Yes',
    :no => 'No',
    :invited => 'Invited',
    :shown => 'Show in My.SCOUT',
    :reserved => 'Reserved',
  }

  updated = true
  fields.changes.each do |field, (was,now)|
    data = api.perform_query("events.php?action=updateScout", {
      'scoutid' => member_id,
      'column' => "f_#{field}",
      'value' => now,
      'sectionid' => event.section_id,
      'row' => row,
      'eventid' => event.id,
    })
    updated = false unless data.is_a?(Hash)
  end

  if changed_attributes.include?('payment_control')
    data = api.perform_query("events.php?action=updateScout", {
      'scoutid' => member_id,
      'column' => 'payment',
      'value' => payment_values[payment_control],
      'sectionid' => event.section_id,
      'row' => row,
      'eventid' => event.id,
    })
    updated = false unless data.is_a?(Hash)
  end
  if changed_attributes.include?('attending')
    data = api.perform_query("events.php?action=updateScout", {
      'scoutid' => member_id,
      'column' => 'attending',
      'value' => attending_values[attending],
      'sectionid' => event.section_id,
      'row' => row,
      'eventid' => event.id,
    })
    updated = false unless data.is_a?(Hash)
  end

  if updated
    reset_changed_attributes
    fields.clean_up!
    # The cached event attedance will be out of date
    cache_delete(api, ['event_attendance', event.id])
  end
  return updated
end