Sha256: e1f58c6881a6cb3cc5605c2b8da69020c9e7957764b635526b1423ee33287ff5

Contents?: true

Size: 1.42 KB

Versions: 30

Compression:

Stored size: 1.42 KB

Contents

class Report < ActiveRecord::Base
  include Stateflow

  #
  # STATEFLOW
  #
  stateflow do
    initial :new

    state :new, :queue, :done, :error

    event :enqueue do
      transitions :from => [:error, :new, :done], :to => :queue
    end

    event :build do
      transitions :from => :queue, :to => [:done, :error], :decide => :build?
    end
  end

  def enqueue!
    enqueue
    save!
    ReportWorker.perform_async(id)
  end

  #
  # RELATIONS
  #
  belongs_to :report_template
  belongs_to :user
  has_many :report_results, :order => 'id DESC'

  #
  # VALIDATIONS
  #
  validates :report_template, :presence => true
  validates :user, :presence => true
  validates :start, :presence => true, :if => lambda{|x| x.report_builder.try(:requires_dates?)}
  validates :finish, :presence => true, :if => lambda{|x| x.report_builder.try(:requires_dates?)}

  #
  # MODIFICATIONS
  #
  after_create :enqueue!

  #
  # METHODS
  #
  def title
    "##{id} (#{report_template.title})"
  end

  def report_builder
    return nil if report_template.blank?
    @report_builder ||= report_template.report_builder(self)
  end

  def build?
    query  = report_builder.query

    begin
      data = ActiveRecord::Base.connection.exec_query(query).to_hash
      ReportResult.create! :report_id => id, :rows => data.length, :data => data
      return :done
    rescue Exception => e
      update_attribute :error, e.to_s
      return :error
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
smartkiosk-server-0.11.6 app/models/report.rb
smartkiosk-server-0.11.5 app/models/report.rb
smartkiosk-server-0.11.4 app/models/report.rb
smartkiosk-server-0.11.3 app/models/report.rb
smartkiosk-server-0.11.2 app/models/report.rb
smartkiosk-server-0.11.1 app/models/report.rb
smartkiosk-server-0.11 app/models/report.rb
smartkiosk-server-0.10.19 app/models/report.rb
smartkiosk-server-0.10.18 app/models/report.rb
smartkiosk-server-0.10.17 app/models/report.rb
smartkiosk-server-0.10.16 app/models/report.rb
smartkiosk-server-0.10.15 app/models/report.rb
smartkiosk-server-0.10.14 app/models/report.rb
smartkiosk-server-0.10.13 app/models/report.rb
smartkiosk-server-0.10.12 app/models/report.rb
smartkiosk-server-0.10.11 app/models/report.rb
smartkiosk-server-0.10.10 app/models/report.rb
smartkiosk-server-0.10.9 app/models/report.rb
smartkiosk-server-0.10.8 app/models/report.rb
smartkiosk-server-0.10.7 app/models/report.rb