# This file is auto-generated from the current state of the database. Instead of editing this file, 
# please use the migrations feature of ActiveRecord to incrementally modify your database, and
# then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your database schema. If you need
# to create the application database on another system, you should be using db:schema:load, not running
# all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended to check this file into your version control system.

ActiveRecord::Schema.define(:version => 14) do

  create_table "firms", :force => true do |t|
    t.string   "name",                   :limit => 100, :null => false
    t.string   "search_name",            :limit => 100, :null => false
    t.string   "full_name",              :limit => 100, :null => false
    t.integer  "password_lifetime_days"
    t.integer  "max_bad_logins"
    t.integer  "bad_login_dead_minutes"
    t.datetime "created_at",                            :null => false
    t.datetime "updated_at",                            :null => false
  end

  add_index "firms", ["full_name"], :name => "index_firms_on_full_name", :unique => true
  add_index "firms", ["search_name"], :name => "index_firms_on_search_name", :unique => true

  create_table "line_items", :force => true do |t|
    t.integer "order_id", :null => false
    t.integer "offer_id", :null => false
    t.integer "quantity", :null => false
  end

  create_table "offers", :force => true do |t|
    t.integer "product_id",    :null => false
    t.integer "store_id",      :null => false
    t.integer "discount_pct"
    t.integer "owner_id",      :null => false
    t.integer "owner_firm_id", :null => false
  end

  add_index "offers", ["owner_firm_id"], :name => "offers_by_firm"
  add_index "offers", ["owner_id"], :name => "offers_by_owner"

  create_table "orders", :force => true do |t|
    t.integer  "store_id",                                                 :null => false
    t.string   "shipping_address",      :limit => 1000
    t.string   "payment_authenticator", :limit => 50
    t.boolean  "paid",                                  :default => false, :null => false
    t.boolean  "shipped",                               :default => false, :null => false
    t.text     "notes"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "owner_id",                                                 :null => false
    t.integer  "owner_firm_id",                                            :null => false
  end

  add_index "orders", ["owner_firm_id"], :name => "orders_by_firm"
  add_index "orders", ["owner_id"], :name => "orders_by_owner"

  create_table "pcheck_log_entries", :force => true do |t|
    t.integer  "request_log_entry_id",                :null => false
    t.boolean  "success",                             :null => false
    t.string   "model_class",          :limit => 100, :null => false
    t.integer  "model_id"
    t.string   "privilege",            :limit => 40,  :null => false
    t.integer  "user_id",                             :null => false
    t.string   "user_name",            :limit => 100, :null => false
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "permissions", :force => true do |t|
    t.integer  "role_id"
    t.boolean  "is_grant",                            :null => false
    t.boolean  "has_grant_option",                    :null => false
    t.string   "class_name",           :limit => 40,  :null => false
    t.string   "privilege",            :limit => 40,  :null => false
    t.boolean  "target_owned_by_self",                :null => false
    t.integer  "target_owner_id"
    t.integer  "target_owner_firm_id"
    t.integer  "target_id"
    t.string   "target_name",          :limit => 100
    t.datetime "created_at",                          :null => false
    t.datetime "updated_at",                          :null => false
    t.boolean  "target_paid"
  end

  add_index "permissions", ["role_id"], :name => "index_permissions_on_role_id"

  create_table "products", :force => true do |t|
    t.string  "name",          :limit => 100,                               :null => false
    t.text    "description",                                                :null => false
    t.string  "image_url",     :limit => 400
    t.decimal "price",                        :precision => 8, :scale => 2, :null => false
    t.integer "owner_id",                                                   :null => false
    t.integer "owner_firm_id",                                              :null => false
  end

  add_index "products", ["owner_firm_id"], :name => "products_by_firm"
  add_index "products", ["owner_id"], :name => "products_by_owner"

  create_table "request_log_entries", :force => true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "acting_user_id"
    t.integer  "user_of_record_id"
    t.string   "acting_user_name"
    t.string   "user_of_record_name"
    t.string   "controller",          :limit => 100, :null => false
    t.string   "action",              :limit => 100, :null => false
    t.string   "http_method",         :limit => 50,  :null => false
    t.string   "status",              :limit => 100, :null => false
    t.string   "model_class",         :limit => 100
    t.integer  "model_id"
    t.string   "remote_ip",           :limit => 50
  end

  create_table "role_assignments", :force => true do |t|
    t.integer  "user_id",         :null => false
    t.integer  "role_id",         :null => false
    t.integer  "default_user_id"
    t.integer  "default_firm_id"
    t.datetime "invalid_after"
    t.datetime "created_at",      :null => false
    t.datetime "updated_at",      :null => false
  end

  create_table "roles", :force => true do |t|
    t.string   "name",          :limit => 100, :null => false
    t.string   "search_name",   :limit => 100, :null => false
    t.datetime "created_at",                   :null => false
    t.datetime "updated_at",                   :null => false
    t.integer  "owner_id",                     :null => false
    t.integer  "owner_firm_id",                :null => false
  end

  add_index "roles", ["search_name", "owner_firm_id"], :name => "ix_role_by_name_and_owner", :unique => true
  add_index "roles", ["owner_firm_id"], :name => "roles_by_firm"
  add_index "roles", ["owner_id"], :name => "roles_by_owner"

  create_table "sessions", :force => true do |t|
    t.string   "session_id", :null => false
    t.text     "data"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
  add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"

  create_table "stores", :force => true do |t|
    t.string  "name",          :limit => 100, :null => false
    t.text    "description",                  :null => false
    t.integer "owner_id",                     :null => false
    t.integer "owner_firm_id",                :null => false
  end

  add_index "stores", ["owner_firm_id"], :name => "stores_by_firm"
  add_index "stores", ["owner_id"], :name => "stores_by_owner"

  create_table "users", :force => true do |t|
    t.string   "name",                     :limit => 100, :null => false
    t.string   "search_name",              :limit => 100, :null => false
    t.string   "full_name",                :limit => 100, :null => false
    t.integer  "owner_firm_id",                           :null => false
    t.string   "password_hash",            :limit => 100
    t.string   "password_salt",            :limit => 10
    t.datetime "password_expires_at"
    t.integer  "bad_login_attempts"
    t.integer  "bad_logins_since_lockout"
    t.datetime "no_login_until"
    t.boolean  "locked_out"
    t.datetime "last_login_at"
    t.datetime "created_at",                              :null => false
    t.datetime "updated_at",                              :null => false
  end

  add_index "users", ["search_name", "owner_firm_id"], :name => "ix_user_by_firm_and_name", :unique => true

  add_foreign_key_constraint "line_items", "offer_id", "offers", "id", :name => "line_items_ibfk_offer_id", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "line_items", "order_id", "orders", "id", :name => "line_items_ibfk_order_id", :on_update => nil, :on_delete => nil

  add_foreign_key_constraint "offers", "owner_firm_id", "firms", "id", :name => "fk_offers_firm", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "offers", "owner_id", "users", "id", :name => "fk_offers_owner", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "offers", "store_id", "stores", "id", :name => "offers_ibfk_store_id", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "offers", "product_id", "products", "id", :name => "offers_ibfk_product_id", :on_update => nil, :on_delete => :cascade

  add_foreign_key_constraint "orders", "owner_firm_id", "firms", "id", :name => "fk_orders_firm", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "orders", "owner_id", "users", "id", :name => "fk_orders_owner", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "orders", "store_id", "stores", "id", :name => "orders_ibfk_store_id", :on_update => nil, :on_delete => nil

  add_foreign_key_constraint "pcheck_log_entries", "request_log_entry_id", "request_log_entries", "id", :name => "fk_pcheck_req_log", :on_update => nil, :on_delete => nil

  add_foreign_key_constraint "permissions", "target_owner_firm_id", "firms", "id", :name => "fk_perm_target_firm", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "permissions", "target_owner_id", "users", "id", :name => "fk_perm_target_owner", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "permissions", "role_id", "roles", "id", :name => "permissions_ibfk_role_id", :on_update => nil, :on_delete => :cascade

  add_foreign_key_constraint "products", "owner_firm_id", "firms", "id", :name => "fk_products_firm", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "products", "owner_id", "users", "id", :name => "fk_products_owner", :on_update => nil, :on_delete => nil

  add_foreign_key_constraint "role_assignments", "default_firm_id", "firms", "id", :name => "fk_role_assign_role", :on_update => nil, :on_delete => :cascade
  add_foreign_key_constraint "role_assignments", "default_user_id", "users", "id", :name => "fk_role_assign_user", :on_update => nil, :on_delete => :cascade
  add_foreign_key_constraint "role_assignments", "role_id", "roles", "id", :name => "role_assignments_ibfk_role_id", :on_update => nil, :on_delete => :cascade
  add_foreign_key_constraint "role_assignments", "user_id", "users", "id", :name => "role_assignments_ibfk_user_id", :on_update => nil, :on_delete => :cascade

  add_foreign_key_constraint "roles", "owner_firm_id", "firms", "id", :name => "fk_roles_firm", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "roles", "owner_id", "users", "id", :name => "fk_roles_owner", :on_update => nil, :on_delete => nil

  add_foreign_key_constraint "stores", "owner_firm_id", "firms", "id", :name => "fk_stores_firm", :on_update => nil, :on_delete => nil
  add_foreign_key_constraint "stores", "owner_id", "users", "id", :name => "fk_stores_owner", :on_update => nil, :on_delete => nil

  add_foreign_key_constraint "users", "owner_firm_id", "firms", "id", :name => "users_ibfk_owner_firm_id", :on_update => nil, :on_delete => nil

end

