Initial commit of foodsoft 2
This commit is contained in:
commit
5b9a7e05df
657 changed files with 70444 additions and 0 deletions
36
db/migrate/001_create_users.rb
Normal file
36
db/migrate/001_create_users.rb
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
class CreateUsers < ActiveRecord::Migration
|
||||
USER_ADMIN = 'admin'
|
||||
USER_TEST = 'test'
|
||||
|
||||
def self.up
|
||||
create_table :users do |t|
|
||||
t.column :nick, :string, :null => false
|
||||
t.column :password_hash, :string, :null => false
|
||||
t.column :password_salt, :string, :null => false
|
||||
t.column :first_name, :string, :null => false
|
||||
t.column :last_name, :string, :null => false
|
||||
t.column :email, :string, :null => false
|
||||
t.column :phone, :string
|
||||
t.column :address, :string
|
||||
t.column :created_on, :timestamp, :null => false
|
||||
end
|
||||
add_index(:users, :nick, :unique => true)
|
||||
add_index(:users, :email, :unique => true)
|
||||
|
||||
# Create the default admin user...
|
||||
puts "Creating user #{USER_ADMIN} with password 'secret'..."
|
||||
user = User.new(:nick => USER_ADMIN, :first_name => "Anton", :last_name => "Administrator", :email => "admin@foo.test")
|
||||
user.password = "secret"
|
||||
raise "Failed!" unless user.save && User.find_by_nick(USER_ADMIN).has_password("secret")
|
||||
|
||||
# Create a normal user...
|
||||
puts "Creating user #{USER_TEST} with password 'foobar'..."
|
||||
user = User.new(:nick => USER_TEST, :first_name => "Tim", :last_name => "Tester", :email => "test@foo.test")
|
||||
user.password = "foobar"
|
||||
raise "Failed!" unless user.save && User.find_by_nick(USER_TEST).has_password("foobar")
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :users
|
||||
end
|
||||
end
|
||||
53
db/migrate/002_create_groups.rb
Normal file
53
db/migrate/002_create_groups.rb
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
class CreateGroups < ActiveRecord::Migration
|
||||
GROUP_ADMIN = 'Administrators'
|
||||
GROUP_ORDER = 'Sample Order Group'
|
||||
|
||||
def self.up
|
||||
create_table :groups do |t|
|
||||
t.column :type, :string, :null => false # inheritance, types: Group, OrderGroup
|
||||
t.column :name, :string, :null => false
|
||||
t.column :description, :string
|
||||
t.column :actual_size, :integer # OrderGroup column
|
||||
t.column :account_balance, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0 # OrderGroup column
|
||||
t.column :account_updated, :timestamp # OrderGroup column
|
||||
t.column :created_on, :timestamp, :null => false
|
||||
t.column :role_admin, :boolean, :default => false, :null => false
|
||||
end
|
||||
add_index(:groups, :name, :unique => true)
|
||||
|
||||
create_table :memberships do |t|
|
||||
t.column :group_id, :integer, :null => false
|
||||
t.column :user_id, :integer, :null => false
|
||||
end
|
||||
add_index(:memberships, [:user_id, :group_id], :unique => true)
|
||||
|
||||
# Create the default "Administrators" group...
|
||||
puts "Creating group #{GROUP_ADMIN}..."
|
||||
Group.create(:name => GROUP_ADMIN, :description => "System administrators.", :role_admin => true)
|
||||
raise 'Failed!' unless administrators = Group.find_by_name(GROUP_ADMIN)
|
||||
|
||||
# Create a sample order group...
|
||||
puts "Creating order group #{GROUP_ORDER}..."
|
||||
ordergroup = OrderGroup.create!(:name => GROUP_ORDER, :description => "A sample order group created by the migration.", :actual_size => 1, :account_updated => Time.now)
|
||||
raise "Wrong type created!" unless ordergroup.is_a?(OrderGroup)
|
||||
|
||||
# Get the admin user and join the admin group...
|
||||
raise "User #{CreateUsers::USER_ADMIN} not found, cannot join group '#{administrators.name}'!" unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
|
||||
puts "Joining #{CreateUsers::USER_ADMIN} user to new '#{administrators.name}' group as a group admin..."
|
||||
membership = Membership.create(:group => administrators, :user => admin)
|
||||
raise "Failed!" unless admin.memberships.first == membership
|
||||
raise "User #{CreateUsers::USER_ADMIN} has no admin_roles" unless admin.role_admin?
|
||||
|
||||
# Get the test user and join the order group...
|
||||
raise "User #{CreateUsers::USER_TEST} not found, cannot join group '#{ordergroup.name}'!" unless test = User.find_by_nick(CreateUsers::USER_TEST)
|
||||
puts "Joining #{CreateUsers::USER_TEST} user to new '#{ordergroup.name}' group as a group admin..."
|
||||
membership = Membership.create(:group => ordergroup, :user => test)
|
||||
raise "Failed!" unless test.memberships.first == membership
|
||||
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :groups
|
||||
drop_table :memberships
|
||||
end
|
||||
end
|
||||
38
db/migrate/003_create_suppliers.rb
Normal file
38
db/migrate/003_create_suppliers.rb
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
class CreateSuppliers < ActiveRecord::Migration
|
||||
SUPPLIER_SAMPLE = 'Sample Supplier'
|
||||
|
||||
def self.up
|
||||
add_column :groups, :role_suppliers, :boolean, :default => false, :null => false
|
||||
Group.reset_column_information
|
||||
puts "Give #{CreateGroups::GROUP_ADMIN} the role supplier .."
|
||||
raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_suppliers, true)
|
||||
raise "Cannot find admin user!" unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
|
||||
raise "Failed to enable role_suppliers with admin user!" unless admin.role_suppliers?
|
||||
|
||||
create_table :suppliers do |t|
|
||||
t.column :name, :string, :null => false
|
||||
t.column :address, :string, :null => false
|
||||
t.column :phone, :string, :null => false
|
||||
t.column :phone2, :string
|
||||
t.column :fax, :string
|
||||
t.column :email, :string
|
||||
t.column :url, :string
|
||||
t.column :contact_person, :string
|
||||
t.column :customer_number, :string
|
||||
t.column :delivery_days, :string
|
||||
t.column :order_howto, :string
|
||||
t.column :note, :string
|
||||
end
|
||||
add_index(:suppliers, :name, :unique => true)
|
||||
|
||||
# Create sample supplier...
|
||||
puts "Creating sample supplier '#{SUPPLIER_SAMPLE}'..."
|
||||
Supplier.create(:name => SUPPLIER_SAMPLE, :address => "Organic City", :phone => "0123-555555")
|
||||
raise "Failed!" unless supplier = Supplier.find_by_name(SUPPLIER_SAMPLE)
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :groups, :role_suppliers
|
||||
drop_table :suppliers
|
||||
end
|
||||
end
|
||||
33
db/migrate/004_create_article_meta.rb
Normal file
33
db/migrate/004_create_article_meta.rb
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
class CreateArticleMeta < ActiveRecord::Migration
|
||||
CATEGORY_SAMPLE = 'Sample Category'
|
||||
TAX_STANDARD = 'Standard'
|
||||
TAX_REDUCED = 'Reduced'
|
||||
|
||||
def self.up
|
||||
# Add user roles...
|
||||
add_column :groups, :role_article_meta, :boolean, :default => false, :null => false
|
||||
Group.reset_column_information
|
||||
puts "Give #{CreateGroups::GROUP_ADMIN} the role article_meta .."
|
||||
raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_article_meta, true)
|
||||
raise 'Cannot find admin user!' unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
|
||||
raise 'Failed to enable role_article_meta with admin user!' unless admin.role_article_meta?
|
||||
|
||||
# ArticleCategories
|
||||
create_table :article_categories do |t|
|
||||
t.column :name, :string, :null => false
|
||||
t.column :description, :string
|
||||
end
|
||||
add_index(:article_categories, :name, :unique => true)
|
||||
|
||||
# Create sample category...
|
||||
puts "Creating sample article category '#{CATEGORY_SAMPLE}'..."
|
||||
ArticleCategory.create(:name => CATEGORY_SAMPLE, :description => "This is just a sample article category.")
|
||||
raise "Failed!" unless category = ArticleCategory.find_by_name(CATEGORY_SAMPLE)
|
||||
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :groups, :role_article_meta
|
||||
drop_table :article_categories
|
||||
end
|
||||
end
|
||||
38
db/migrate/005_create_financial_transactions.rb
Normal file
38
db/migrate/005_create_financial_transactions.rb
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
class CreateFinancialTransactions < ActiveRecord::Migration
|
||||
def self.up
|
||||
# Create Financial Transactions
|
||||
create_table :financial_transactions do |t|
|
||||
t.column :order_group_id, :integer, :null => false
|
||||
t.column :amount, :decimal, :precision => 8, :scale => 2, :null => false
|
||||
t.column :note, :text, :null => false
|
||||
t.column :user_id, :integer, :null => false
|
||||
t.column :created_on, :datetime, :null => false
|
||||
end
|
||||
|
||||
# add column for the finance role
|
||||
puts 'add column in "groups" for the finance role'
|
||||
add_column :groups, :role_finance, :boolean, :default => false, :null => false
|
||||
Group.reset_column_information
|
||||
puts "Give #{CreateGroups::GROUP_ADMIN} the role finance .."
|
||||
raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_finance, true)
|
||||
raise 'Cannot find admin user!' unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
|
||||
raise 'Failed to enable role_finance with admin user!' unless admin.role_finance?
|
||||
|
||||
# Add transactions to the sample order group
|
||||
puts "Add 30 transactions to the group '#{CreateGroups::GROUP_ORDER}'..."
|
||||
raise "Group '#{CreateGroups::GROUP_ORDER}' not found!" unless ordergroup = Group.find_by_name(CreateGroups::GROUP_ORDER)
|
||||
balance = 0
|
||||
for i in 1..30
|
||||
ordergroup.addFinancialTransaction(i, "Sample Transaction Nr. #{i}", admin)
|
||||
balance += i
|
||||
end
|
||||
raise "Failed!" unless financial_transaction = FinancialTransaction.find_by_note('Sample Transaction Nr. 1')
|
||||
raise "Failed to update account_balance!" unless OrderGroup.find(ordergroup.id).account_balance == balance
|
||||
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :groups, :role_finance
|
||||
drop_table :financial_transactions
|
||||
end
|
||||
end
|
||||
36
db/migrate/006_create_articles.rb
Normal file
36
db/migrate/006_create_articles.rb
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
class CreateArticles < ActiveRecord::Migration
|
||||
SAMPLE_ARTICLE_NAMES = ['banana', 'kiwi', 'strawberry']
|
||||
|
||||
def self.up
|
||||
create_table :articles do |t|
|
||||
t.column :name, :string, :null => false
|
||||
t.column :supplier_id, :integer, :null => false
|
||||
t.column :article_category_id, :integer, :null => false
|
||||
t.column :unit, :string, :null => false
|
||||
t.column :note, :string
|
||||
t.column :availability, :boolean, :default => true, :null => false
|
||||
t.column :current_price_id, :integer
|
||||
end
|
||||
add_index(:articles, :name, :unique => true)
|
||||
|
||||
# Create 30 sample articles...
|
||||
puts "Create 3 articles of the supplier '#{CreateSuppliers::SUPPLIER_SAMPLE}'..."
|
||||
raise "Supplier '#{CreateSuppliers::SUPPLIER_SAMPLE}' not found!" unless supplier = Supplier.find_by_name(CreateSuppliers::SUPPLIER_SAMPLE)
|
||||
raise "Category '#{CreateArticleMeta::CATEGORY_SAMPLE}' not found!" unless category = ArticleCategory.find_by_name(CreateArticleMeta::CATEGORY_SAMPLE)
|
||||
SAMPLE_ARTICLE_NAMES.each do |a|
|
||||
puts 'Create Article ' + a
|
||||
Article.create( :name => a,
|
||||
:supplier => supplier,
|
||||
:article_category => category,
|
||||
:unit => '500g',
|
||||
:note => 'delicious',
|
||||
:availability => true)
|
||||
end
|
||||
raise "Failed!" unless Article.find(:all).length == SAMPLE_ARTICLE_NAMES.length
|
||||
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :articles
|
||||
end
|
||||
end
|
||||
35
db/migrate/007_create_article_prices.rb
Normal file
35
db/migrate/007_create_article_prices.rb
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
class CreateArticlePrices < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :article_prices do |t|
|
||||
t.column :article_id, :int, :null => false
|
||||
t.column :clear_price, :decimal, :precision => 8, :scale => 2, :null => false
|
||||
t.column :gross_price, :decimal, :precision => 8, :scale => 2, :null => false #gross price, incl. vat, refund and price markup
|
||||
t.column :tax, :float, :null => false, :default => 0
|
||||
t.column :refund, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
|
||||
t.column :updated_on, :datetime
|
||||
t.column :unit_quantity, :int, :default => 1, :null => false
|
||||
t.column :order_number, :string
|
||||
end
|
||||
add_index(:article_prices, :article_id)
|
||||
|
||||
#add some prices ...
|
||||
puts 'add prices to the sample articles'
|
||||
CreateArticles::SAMPLE_ARTICLE_NAMES.each do |a|
|
||||
puts 'Create Price for article ' + a
|
||||
raise 'article #{a} not found!' unless article = Article.find_by_name(a)
|
||||
new_price = ArticlePrice.new(:clear_price => rand(4)+1,
|
||||
:tax => 7.0,
|
||||
:refund => 0,
|
||||
:unit_quantity => rand(10)+1,
|
||||
:order_number => rand(9999))
|
||||
article.add_price(new_price)
|
||||
raise 'Failed!' unless ArticlePrice.find_by_article_id(article.id)
|
||||
end
|
||||
raise 'Failed!' unless ArticlePrice.find(:all).length == CreateArticles::SAMPLE_ARTICLE_NAMES.length
|
||||
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :article_prices
|
||||
end
|
||||
end
|
||||
118
db/migrate/008_create_orders.rb
Normal file
118
db/migrate/008_create_orders.rb
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
class CreateOrders < ActiveRecord::Migration
|
||||
ORDER_TEST = 'Test Order'
|
||||
GROUP_ORDER = 'Orders'
|
||||
|
||||
def self.up
|
||||
# Order role
|
||||
add_column :groups, :role_orders, :boolean, :default => false, :null => false
|
||||
Group.reset_column_information
|
||||
puts "Give #{CreateGroups::GROUP_ADMIN} the role finance .."
|
||||
raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_orders, true)
|
||||
raise 'Cannot find admin user!' unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
|
||||
raise 'Failed to enable role_orders with admin user!' unless admin.role_orders?
|
||||
|
||||
# Create the default "Order" group...
|
||||
puts 'Creating group "Orders"...'
|
||||
Group.create(:name => GROUP_ORDER, :description => "working group for managing orders", :role_orders => true)
|
||||
raise "Failed!" unless Group.find_by_name(GROUP_ORDER)
|
||||
|
||||
# Order
|
||||
create_table :orders do |t|
|
||||
t.column :name, :string, :null => false
|
||||
t.column :supplier_id, :integer, :null => false
|
||||
t.column :starts, :datetime, :null => false
|
||||
t.column :ends, :datetime
|
||||
t.column :note, :string
|
||||
t.column :finished, :boolean, :default => false, :null => false
|
||||
t.column :booked, :boolean, :null => false, :default => false
|
||||
t.column :lock_version, :integer, :null => false, :default => 0
|
||||
t.column :updated_by_user_id, :integer
|
||||
end
|
||||
add_index(:orders, :starts)
|
||||
add_index(:orders, :ends)
|
||||
add_index(:orders, :finished)
|
||||
|
||||
puts "Creating order '#{ORDER_TEST}'..."
|
||||
raise "Supplier '#{CreateSuppliers::SUPPLIER_SAMPLE}' not found!" unless supplier = Supplier.find_by_name(CreateSuppliers::SUPPLIER_SAMPLE)
|
||||
Order.create(:name => ORDER_TEST, :supplier => supplier, :starts => Time.now)
|
||||
raise 'Creating test order failed!' unless order = Order.find_by_name(ORDER_TEST)
|
||||
|
||||
# OrderArticle
|
||||
create_table :order_articles do |t|
|
||||
t.column :order_id, :integer, :null => false
|
||||
t.column :article_id, :integer, :null => false
|
||||
t.column :quantity, :integer, :null => false, :default => 0
|
||||
t.column :tolerance, :integer, :null => false, :default => 0
|
||||
t.column :units_to_order, :integer, :null => false, :default => 0
|
||||
t.column :lock_version, :integer, :null => false, :default => 0
|
||||
end
|
||||
add_index(:order_articles, [:order_id, :article_id], :unique => true)
|
||||
|
||||
puts 'Adding articles to the order...'
|
||||
CreateArticles::SAMPLE_ARTICLE_NAMES.each { | a |
|
||||
puts "Article #{a}..."
|
||||
raise 'Article not found!' unless article = Article.find_by_name(a)
|
||||
raise 'No price found for article!' unless price = article.current_price
|
||||
OrderArticle.create(:order => order, :article => article)
|
||||
raise 'Creating OrderArticle failed!' unless OrderArticle.find_by_order_id_and_article_id(order.id, article.id)
|
||||
}
|
||||
raise 'Creating OrderArticles failed!' unless order.articles.size == CreateArticles::SAMPLE_ARTICLE_NAMES.length
|
||||
|
||||
# GroupOrder
|
||||
create_table :group_orders do |t|
|
||||
t.column :order_group_id, :integer, :null => false
|
||||
t.column :order_id, :integer, :null => false
|
||||
t.column :price, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
|
||||
t.column :lock_version, :integer, :null => false, :default => 0
|
||||
t.column :updated_on, :timestamp, :null => false
|
||||
t.column :updated_by_user_id, :integer, :null => false
|
||||
end
|
||||
add_index(:group_orders, [:order_group_id, :order_id], :unique => true)
|
||||
|
||||
puts 'Adding group order...'
|
||||
raise "Cannot find user #{CreateUsers::USER_TEST}" unless user = User.find_by_nick(CreateUsers::USER_TEST)
|
||||
raise "Cannot find OrderGroup '#{CreateGroups::GROUP_ORDER}'!" unless orderGroup = OrderGroup.find_by_name(CreateGroups::GROUP_ORDER)
|
||||
GroupOrder.create(:order_group => orderGroup, :order => order, :price => 0, :updated_by => user)
|
||||
raise 'Retrieving group order failed!' unless groupOrder = orderGroup.group_orders.find(:first, :conditions => "order_id = #{order.id}")
|
||||
|
||||
# GroupOrderArticles
|
||||
create_table :group_order_articles do |t|
|
||||
t.column :group_order_id, :integer, :null => false
|
||||
t.column :order_article_id, :integer, :null => false
|
||||
t.column :quantity, :integer, :null => false
|
||||
t.column :tolerance, :integer, :null => false
|
||||
t.column :updated_on, :timestamp, :null => false
|
||||
end
|
||||
add_index(:group_order_articles, [:group_order_id, :order_article_id], :unique => true, :name => "goa_index")
|
||||
# GroupOrderArticleQuantity
|
||||
create_table :group_order_article_quantities do |t|
|
||||
t.column :group_order_article_id, :int, :null => false
|
||||
t.column :quantity, :int, :default => 0
|
||||
t.column :tolerance, :int, :default => 0
|
||||
t.column :created_on, :timestamp, :null => false
|
||||
end
|
||||
|
||||
puts 'Adding articles to group order...'
|
||||
order.order_articles.each { | orderArticle |
|
||||
puts "Article #{orderArticle.article.name}..."
|
||||
GroupOrderArticle.create(:group_order => groupOrder, :order_article => orderArticle, :quantity => 0, :tolerance => 0)
|
||||
raise 'Failed to create order!' unless article = GroupOrderArticle.find(:first, :conditions => "group_order_id = #{groupOrder.id} AND order_article_id = #{orderArticle.id}")
|
||||
article.updateQuantities(rand(6) + 1, rand(4) + 1)
|
||||
}
|
||||
raise 'Failed to create orders!' unless groupOrder.order_articles.size == order.order_articles.size
|
||||
groupOrder.updatePrice
|
||||
raise 'Failed to update GroupOrder.price' unless groupOrder.save!
|
||||
|
||||
# Update order
|
||||
order.updateQuantities
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :groups, :role_orders
|
||||
drop_table :orders
|
||||
drop_table :order_articles
|
||||
drop_table :group_orders
|
||||
drop_table :group_order_articles
|
||||
drop_table :group_order_article_quantities
|
||||
end
|
||||
end
|
||||
41
db/migrate/009_create_order_results.rb
Normal file
41
db/migrate/009_create_order_results.rb
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
class CreateOrderResults < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :group_order_results do |t|
|
||||
t.column :order_id, :int, :null => false
|
||||
t.column :group_name, :string, :null => false
|
||||
t.column :price, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
|
||||
end
|
||||
add_index(:group_order_results, [:group_name, :order_id], :unique => true)
|
||||
|
||||
create_table :order_article_results do |t|
|
||||
t.column :order_id, :int, :null => false
|
||||
t.column :name, :string, :null => false
|
||||
t.column :unit, :string, :null => false
|
||||
t.column :note, :string
|
||||
t.column :clear_price, :decimal, :precision => 8, :scale => 2, :null => false
|
||||
t.column :gross_price, :decimal, :precision => 8, :scale => 2, :null => false
|
||||
t.column :tax, :float, :null => false, :default => 0
|
||||
t.column :refund, :decimal, :precision => 8, :scale => 2
|
||||
t.column :fc_markup, :float, :null => false
|
||||
t.column :order_number, :string
|
||||
t.column :unit_quantity, :int, :null => false
|
||||
t.column :units_to_order, :int, :null => false
|
||||
end
|
||||
add_index(:order_article_results, :order_id)
|
||||
|
||||
create_table :group_order_article_results do |t|
|
||||
t.column :order_article_result_id, :int, :null => false
|
||||
t.column :group_order_result_id, :int, :null => false
|
||||
t.column :quantity, :int, :null => false
|
||||
t.column :tolerance, :int
|
||||
end
|
||||
add_index(:group_order_article_results, :order_article_result_id)
|
||||
add_index(:group_order_article_results, :group_order_result_id)
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :group_order_results
|
||||
drop_table :order_article_results
|
||||
drop_table :group_order_article_results
|
||||
end
|
||||
end
|
||||
12
db/migrate/010_user_password_reset.rb
Normal file
12
db/migrate/010_user_password_reset.rb
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class UserPasswordReset < ActiveRecord::Migration
|
||||
|
||||
def self.up
|
||||
add_column :users, :reset_password_token, :string
|
||||
add_column :users, :reset_password_expires, :timestamp
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :users, :reset_password_token
|
||||
remove_column :users, :reset_password_expires
|
||||
end
|
||||
end
|
||||
19
db/migrate/011_create_comments.rb
Normal file
19
db/migrate/011_create_comments.rb
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
class CreateComments < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :comments, :force => true do |t|
|
||||
t.column :title, :string, :limit => 50, :default => ""
|
||||
t.column :comment, :string, :default => ""
|
||||
t.column :created_at, :datetime, :null => false
|
||||
t.column :commentable_id, :integer, :default => 0, :null => false
|
||||
t.column :commentable_type, :string, :limit => 15,
|
||||
:default => "", :null => false
|
||||
t.column :user_id, :integer, :default => 0, :null => false
|
||||
end
|
||||
|
||||
add_index :comments, ["user_id"], :name => "fk_comments_user"
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :comments
|
||||
end
|
||||
end
|
||||
18
db/migrate/012_create_order_clearing.rb
Normal file
18
db/migrate/012_create_order_clearing.rb
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class CreateOrderClearing < ActiveRecord::Migration
|
||||
|
||||
def self.up
|
||||
add_column :orders, :invoice_amount, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
|
||||
add_column :orders, :refund, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
|
||||
add_column :orders, :refund_credit, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
|
||||
add_column :orders, :invoice_number, :string
|
||||
add_column :orders, :invoice_date, :string
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :orders, :invoice_amount
|
||||
remove_column :orders, :refund
|
||||
remove_column :orders, :refund_credit
|
||||
remove_column :orders, :invoice_number
|
||||
remove_column :orders, :invoice_date
|
||||
end
|
||||
end
|
||||
25
db/migrate/013_add_messaging.rb
Normal file
25
db/migrate/013_add_messaging.rb
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
class AddMessaging < ActiveRecord::Migration
|
||||
def self.up
|
||||
# Table that holds the messages:
|
||||
create_table :messages do |t|
|
||||
t.column :sender_id, :integer
|
||||
t.column :recipient_id, :integer, :null => false
|
||||
t.column :recipients, :string, :null => false
|
||||
t.column :subject, :string, :null => false
|
||||
t.column :body, :text, :null => false
|
||||
t.column :read, :boolean, :null => false, :default => false
|
||||
t.column :email_state, :integer, :null => false
|
||||
t.column :created_on, :timestamp, :null => false
|
||||
end
|
||||
add_index(:messages, :sender_id)
|
||||
add_index(:messages, :recipient_id)
|
||||
|
||||
# Setup acts_as_configurable plugin for user options etc.
|
||||
ConfigurableSetting.create_table
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :messages
|
||||
ConfigurableSetting.drop_table
|
||||
end
|
||||
end
|
||||
37
db/migrate/014_create_tasks.rb
Normal file
37
db/migrate/014_create_tasks.rb
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
class CreateTasks < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :tasks do |t|
|
||||
t.column :name, :string, :null => false
|
||||
t.column :description, :string
|
||||
t.column :due_date, :date
|
||||
t.column :done, :boolean, :default => false
|
||||
t.column :group_id, :integer
|
||||
t.column :assigned, :boolean, :default => false
|
||||
t.column :created_on, :datetime, :null => false
|
||||
t.column :updated_on, :datetime, :null => false
|
||||
end
|
||||
add_index :tasks, :name
|
||||
add_index :tasks, :due_date
|
||||
|
||||
create_table :assignments do |t|
|
||||
t.column :user_id, :integer, :null => false
|
||||
t.column :task_id, :integer, :null => false
|
||||
t.column :accepted, :boolean, :default => false
|
||||
end
|
||||
add_index :assignments, [:user_id, :task_id], :unique => true
|
||||
|
||||
add_column :groups, :weekly_task, :boolean, :default => false # if group has an job for every week
|
||||
add_column :groups, :weekday, :integer # e.g. 1 means monday, 2 = tuesday an so on
|
||||
add_column :groups, :task_name, :string # the name of the weekly task
|
||||
add_column :groups, :task_description, :string
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :tasks
|
||||
drop_table :assignments
|
||||
remove_column :groups, :weekly_task
|
||||
remove_column :groups, :weekday
|
||||
remove_column :groups, :task_name
|
||||
remove_column :groups, :task_description
|
||||
end
|
||||
end
|
||||
11
db/migrate/015_change_result_quantities.rb
Normal file
11
db/migrate/015_change_result_quantities.rb
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class ChangeResultQuantities < ActiveRecord::Migration
|
||||
def self.up
|
||||
change_column :group_order_article_results, :quantity, :decimal, :precision => 6, :scale => 3
|
||||
change_column :order_article_results, :units_to_order, :decimal, :precision => 6, :scale => 3, :null => false
|
||||
end
|
||||
|
||||
def self.down
|
||||
change_column :group_order_article_results, :quantity, :integer, :null => false
|
||||
change_column :order_article_results, :units_to_order,:integer, :default => 0, :null => false
|
||||
end
|
||||
end
|
||||
15
db/migrate/016_add_shared_lists_connection.rb
Normal file
15
db/migrate/016_add_shared_lists_connection.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class AddSharedListsConnection < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column :suppliers, :shared_supplier_id, :integer
|
||||
add_column :articles, :manufacturer , :string
|
||||
add_column :articles, :origin, :string
|
||||
add_column :articles, :shared_updated_on, :timestamp
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :suppliers, :shared_supplier_id
|
||||
remove_column :articles, :manufacturer
|
||||
remove_column :articles, :origin
|
||||
remove_column :articles, :shared_updated_on
|
||||
end
|
||||
end
|
||||
9
db/migrate/017_add_min_order_quantity.rb
Normal file
9
db/migrate/017_add_min_order_quantity.rb
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class AddMinOrderQuantity < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column :suppliers, :min_order_quantity, :string
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :suppliers, :min_order_quantity
|
||||
end
|
||||
end
|
||||
16
db/migrate/018_create_invites.rb
Normal file
16
db/migrate/018_create_invites.rb
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
class CreateInvites < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :invites do |t|
|
||||
t.column :token, :string, :null => false
|
||||
t.column :expires_at, :timestamp, :null => false
|
||||
t.column :group_id, :integer, :null => false
|
||||
t.column :user_id, :integer, :null => false
|
||||
t.column :email, :string, :null => false
|
||||
end
|
||||
add_index :invites, :token
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :invites
|
||||
end
|
||||
end
|
||||
11
db/migrate/019_remove_uniqueness_of_article_name.rb
Normal file
11
db/migrate/019_remove_uniqueness_of_article_name.rb
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class RemoveUniquenessOfArticleName < ActiveRecord::Migration
|
||||
def self.up
|
||||
remove_index :articles, :name
|
||||
add_index :articles, [:name, :supplier_id]
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_index :articles, [:name, :supplier_id]
|
||||
add_index :articles, :name, :unique => true
|
||||
end
|
||||
end
|
||||
9
db/migrate/020_add_users_last_login.rb
Normal file
9
db/migrate/020_add_users_last_login.rb
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class AddUsersLastLogin < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column :users, :last_login, :datetime
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :users, :last_login
|
||||
end
|
||||
end
|
||||
75
db/migrate/021_remove_table_article_prices.rb
Normal file
75
db/migrate/021_remove_table_article_prices.rb
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
class RemoveTableArticlePrices < ActiveRecord::Migration
|
||||
def self.up
|
||||
|
||||
puts "create columns in articles ..."
|
||||
add_column "articles", "clear_price", :decimal, :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
add_column "articles", "gross_price", :decimal, :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
add_column "articles", "tax", :float
|
||||
add_column "articles", "refund", :decimal, :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
add_column "articles", "unit_quantity", :integer, :default => 1, :null => false
|
||||
add_column "articles", "order_number", :string
|
||||
add_column "articles", "created_at", :datetime
|
||||
add_column "articles", "updated_at", :datetime
|
||||
|
||||
# stop auto-updating the timestamps to make the data-copy safe!
|
||||
Article.record_timestamps = false
|
||||
|
||||
puts "now copy values of article_prices into new articles-columns..."
|
||||
Article.find(:all).each do |article|
|
||||
price = article.current_price
|
||||
article.update_attributes!(:clear_price => price.clear_price,
|
||||
:gross_price => price.gross_price,
|
||||
:tax => price.tax,
|
||||
:refund => price.refund,
|
||||
:unit_quantity => price.unit_quantity,
|
||||
:order_number => price.order_number,
|
||||
:updated_at => price.updated_on,
|
||||
:created_at => price.updated_on)
|
||||
end
|
||||
|
||||
|
||||
puts "delete article_prices, current_price attribute"
|
||||
drop_table :article_prices
|
||||
remove_column :articles, :current_price_id
|
||||
end
|
||||
|
||||
def self.down
|
||||
add_column :articles, :current_price_id, :integer
|
||||
create_table "article_prices", :force => true do |t|
|
||||
t.integer "article_id", :default => 0, :null => false
|
||||
t.decimal "clear_price", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.decimal "gross_price", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.float "tax", :default => 0.0, :null => false
|
||||
t.decimal "refund", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.datetime "updated_on"
|
||||
t.integer "unit_quantity", :default => 1, :null => false
|
||||
t.string "order_number"
|
||||
end
|
||||
|
||||
# copy data from article now into old ArticlePrice-object
|
||||
Article.find(:all).each do |article|
|
||||
price = ArticlePrice.create(:clear_price => article.clear_price,
|
||||
:gross_price => article.gross_price,
|
||||
:tax => article.tax,
|
||||
:refund => article.refund,
|
||||
:unit_quantity => article.unit_quantity,
|
||||
:order_number => article.order_number.blank? ? nil : article.order_number,
|
||||
:updated_on => article.updated_at)
|
||||
|
||||
article.update_attribute(:current_price, price)
|
||||
price.update_attribute(:article, article)
|
||||
|
||||
end
|
||||
|
||||
# remove new columns
|
||||
remove_column "articles", "clear_price"
|
||||
remove_column "articles", "gross_price"
|
||||
remove_column "articles", "tax"
|
||||
remove_column "articles", "refund"
|
||||
remove_column "articles", "unit_quantity"
|
||||
remove_column "articles", "order_number"
|
||||
remove_column "articles", "created_at"
|
||||
remove_column "articles", "updated_at"
|
||||
|
||||
end
|
||||
end
|
||||
14
db/migrate/022_add_required_user_for_task.rb
Normal file
14
db/migrate/022_add_required_user_for_task.rb
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class AddRequiredUserForTask < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column :tasks, :required_users, :integer, :default => 1
|
||||
add_column :groups, :task_required_users, :integer, :default => 1
|
||||
# add default values to every task and group
|
||||
Task.find(:all).each { |task| task.update_attribute :required_users, 1 }
|
||||
Group.workgroups.each { |group| group.update_attribute :task_required_users, 1 }
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :tasks, :required_users
|
||||
remove_column :groups, :tasks_required_users
|
||||
end
|
||||
end
|
||||
23
db/migrate/023_new_wording.rb
Normal file
23
db/migrate/023_new_wording.rb
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
class NewWording < ActiveRecord::Migration
|
||||
def self.up
|
||||
rename_column :articles, :clear_price, :net_price
|
||||
rename_column :articles, :refund, :deposit
|
||||
|
||||
rename_column :order_article_results, :clear_price, :net_price
|
||||
rename_column :order_article_results, :refund, :deposit
|
||||
|
||||
rename_column :orders, :refund, :deposit
|
||||
rename_column :orders, :refund_credit, :deposit_credit
|
||||
end
|
||||
|
||||
def self.down
|
||||
rename_column :articles, :net_price, :clear_price
|
||||
rename_column :articles, :deposit, :refund
|
||||
|
||||
rename_column :order_article_results, :net_price, :clear_price
|
||||
rename_column :order_article_results, :deposit, :refund
|
||||
|
||||
rename_column :orders, :deposit, :refund
|
||||
rename_column :orders, :deposit_credit, :refund_credit
|
||||
end
|
||||
end
|
||||
12
db/migrate/024_add_deposit_defaults.rb
Normal file
12
db/migrate/024_add_deposit_defaults.rb
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class AddDepositDefaults < ActiveRecord::Migration
|
||||
def self.up
|
||||
change_column_default :articles, :deposit, 0.0
|
||||
change_column_default :order_article_results, :net_price, 0.0
|
||||
change_column_default :order_article_results, :deposit, 0.0
|
||||
change_column_default :orders, :deposit, 0.0
|
||||
change_column_default :orders, :deposit_credit, 0.0
|
||||
end
|
||||
|
||||
def self.down
|
||||
end
|
||||
end
|
||||
9
db/migrate/025_extend_comments.rb
Normal file
9
db/migrate/025_extend_comments.rb
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class ExtendComments < ActiveRecord::Migration
|
||||
def self.up
|
||||
change_column :comments, :comment, :text, :default => ""
|
||||
end
|
||||
|
||||
def self.down
|
||||
change_column :comments, :comment, :string, :default => ""
|
||||
end
|
||||
end
|
||||
282
db/schema.rb
Normal file
282
db/schema.rb
Normal file
|
|
@ -0,0 +1,282 @@
|
|||
# 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 => 25) do
|
||||
|
||||
create_table "article_categories", :force => true do |t|
|
||||
t.string "name", :default => "", :null => false
|
||||
t.string "description"
|
||||
end
|
||||
|
||||
add_index "article_categories", ["name"], :name => "index_article_categories_on_name", :unique => true
|
||||
|
||||
create_table "articles", :force => true do |t|
|
||||
t.string "name", :default => "", :null => false
|
||||
t.integer "supplier_id", :default => 0, :null => false
|
||||
t.integer "article_category_id", :default => 0, :null => false
|
||||
t.string "unit", :default => "", :null => false
|
||||
t.string "note"
|
||||
t.boolean "availability", :default => true, :null => false
|
||||
t.string "manufacturer"
|
||||
t.string "origin"
|
||||
t.datetime "shared_updated_on"
|
||||
t.decimal "net_price", :precision => 8, :scale => 2
|
||||
t.decimal "gross_price", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.float "tax"
|
||||
t.decimal "deposit", :precision => 8, :scale => 2, :default => 0.0
|
||||
t.integer "unit_quantity", :default => 1, :null => false
|
||||
t.string "order_number"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "articles", ["name", "supplier_id"], :name => "index_articles_on_name_and_supplier_id"
|
||||
|
||||
create_table "assignments", :force => true do |t|
|
||||
t.integer "user_id", :default => 0, :null => false
|
||||
t.integer "task_id", :default => 0, :null => false
|
||||
t.boolean "accepted", :default => false
|
||||
end
|
||||
|
||||
add_index "assignments", ["user_id", "task_id"], :name => "index_assignments_on_user_id_and_task_id", :unique => true
|
||||
|
||||
create_table "comments", :force => true do |t|
|
||||
t.string "title", :limit => 50, :default => ""
|
||||
t.text "comment"
|
||||
t.datetime "created_at", :null => false
|
||||
t.integer "commentable_id", :default => 0, :null => false
|
||||
t.string "commentable_type", :limit => 15, :default => "", :null => false
|
||||
t.integer "user_id", :default => 0, :null => false
|
||||
end
|
||||
|
||||
add_index "comments", ["user_id"], :name => "fk_comments_user"
|
||||
|
||||
create_table "configurable_settings", :force => true do |t|
|
||||
t.integer "configurable_id"
|
||||
t.string "configurable_type"
|
||||
t.integer "targetable_id"
|
||||
t.string "targetable_type"
|
||||
t.string "name", :default => "", :null => false
|
||||
t.string "value_type"
|
||||
t.text "value"
|
||||
end
|
||||
|
||||
add_index "configurable_settings", ["name"], :name => "index_configurable_settings_on_name"
|
||||
|
||||
create_table "financial_transactions", :force => true do |t|
|
||||
t.integer "order_group_id", :default => 0, :null => false
|
||||
t.decimal "amount", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.text "note", :null => false
|
||||
t.integer "user_id", :default => 0, :null => false
|
||||
t.datetime "created_on", :null => false
|
||||
end
|
||||
|
||||
create_table "group_order_article_quantities", :force => true do |t|
|
||||
t.integer "group_order_article_id", :default => 0, :null => false
|
||||
t.integer "quantity", :default => 0
|
||||
t.integer "tolerance", :default => 0
|
||||
t.datetime "created_on", :null => false
|
||||
end
|
||||
|
||||
create_table "group_order_article_results", :force => true do |t|
|
||||
t.integer "order_article_result_id", :default => 0, :null => false
|
||||
t.integer "group_order_result_id", :default => 0, :null => false
|
||||
t.decimal "quantity", :precision => 6, :scale => 3, :default => 0.0
|
||||
t.integer "tolerance"
|
||||
end
|
||||
|
||||
add_index "group_order_article_results", ["order_article_result_id"], :name => "index_group_order_article_results_on_order_article_result_id"
|
||||
add_index "group_order_article_results", ["group_order_result_id"], :name => "index_group_order_article_results_on_group_order_result_id"
|
||||
|
||||
create_table "group_order_articles", :force => true do |t|
|
||||
t.integer "group_order_id", :default => 0, :null => false
|
||||
t.integer "order_article_id", :default => 0, :null => false
|
||||
t.integer "quantity", :default => 0, :null => false
|
||||
t.integer "tolerance", :default => 0, :null => false
|
||||
t.datetime "updated_on", :null => false
|
||||
end
|
||||
|
||||
add_index "group_order_articles", ["group_order_id", "order_article_id"], :name => "goa_index", :unique => true
|
||||
|
||||
create_table "group_order_results", :force => true do |t|
|
||||
t.integer "order_id", :default => 0, :null => false
|
||||
t.string "group_name", :default => "", :null => false
|
||||
t.decimal "price", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
end
|
||||
|
||||
add_index "group_order_results", ["group_name", "order_id"], :name => "index_group_order_results_on_group_name_and_order_id", :unique => true
|
||||
|
||||
create_table "group_orders", :force => true do |t|
|
||||
t.integer "order_group_id", :default => 0, :null => false
|
||||
t.integer "order_id", :default => 0, :null => false
|
||||
t.decimal "price", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.integer "lock_version", :default => 0, :null => false
|
||||
t.datetime "updated_on", :null => false
|
||||
t.integer "updated_by_user_id", :default => 0, :null => false
|
||||
end
|
||||
|
||||
add_index "group_orders", ["order_group_id", "order_id"], :name => "index_group_orders_on_order_group_id_and_order_id", :unique => true
|
||||
|
||||
create_table "groups", :force => true do |t|
|
||||
t.string "type", :default => "", :null => false
|
||||
t.string "name", :default => "", :null => false
|
||||
t.string "description"
|
||||
t.integer "actual_size"
|
||||
t.decimal "account_balance", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.datetime "account_updated"
|
||||
t.datetime "created_on", :null => false
|
||||
t.boolean "role_admin", :default => false, :null => false
|
||||
t.boolean "role_suppliers", :default => false, :null => false
|
||||
t.boolean "role_article_meta", :default => false, :null => false
|
||||
t.boolean "role_finance", :default => false, :null => false
|
||||
t.boolean "role_orders", :default => false, :null => false
|
||||
t.boolean "weekly_task", :default => false
|
||||
t.integer "weekday"
|
||||
t.string "task_name"
|
||||
t.string "task_description"
|
||||
t.integer "task_required_users", :default => 1
|
||||
end
|
||||
|
||||
add_index "groups", ["name"], :name => "index_groups_on_name", :unique => true
|
||||
|
||||
create_table "invites", :force => true do |t|
|
||||
t.string "token", :default => "", :null => false
|
||||
t.datetime "expires_at", :null => false
|
||||
t.integer "group_id", :default => 0, :null => false
|
||||
t.integer "user_id", :default => 0, :null => false
|
||||
t.string "email", :default => "", :null => false
|
||||
end
|
||||
|
||||
add_index "invites", ["token"], :name => "index_invites_on_token"
|
||||
|
||||
create_table "memberships", :force => true do |t|
|
||||
t.integer "group_id", :default => 0, :null => false
|
||||
t.integer "user_id", :default => 0, :null => false
|
||||
end
|
||||
|
||||
add_index "memberships", ["user_id", "group_id"], :name => "index_memberships_on_user_id_and_group_id", :unique => true
|
||||
|
||||
create_table "messages", :force => true do |t|
|
||||
t.integer "sender_id"
|
||||
t.integer "recipient_id", :default => 0, :null => false
|
||||
t.string "recipients", :default => "", :null => false
|
||||
t.string "subject", :default => "", :null => false
|
||||
t.text "body", :null => false
|
||||
t.boolean "read", :default => false, :null => false
|
||||
t.integer "email_state", :default => 0, :null => false
|
||||
t.datetime "created_on", :null => false
|
||||
end
|
||||
|
||||
add_index "messages", ["sender_id"], :name => "index_messages_on_sender_id"
|
||||
add_index "messages", ["recipient_id"], :name => "index_messages_on_recipient_id"
|
||||
|
||||
create_table "order_article_results", :force => true do |t|
|
||||
t.integer "order_id", :default => 0, :null => false
|
||||
t.string "name", :default => "", :null => false
|
||||
t.string "unit", :default => "", :null => false
|
||||
t.string "note"
|
||||
t.decimal "net_price", :precision => 8, :scale => 2, :default => 0.0
|
||||
t.decimal "gross_price", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.float "tax", :default => 0.0, :null => false
|
||||
t.decimal "deposit", :precision => 8, :scale => 2, :default => 0.0
|
||||
t.float "fc_markup", :default => 0.0, :null => false
|
||||
t.string "order_number"
|
||||
t.integer "unit_quantity", :default => 0, :null => false
|
||||
t.decimal "units_to_order", :precision => 6, :scale => 3, :default => 0.0, :null => false
|
||||
end
|
||||
|
||||
add_index "order_article_results", ["order_id"], :name => "index_order_article_results_on_order_id"
|
||||
|
||||
create_table "order_articles", :force => true do |t|
|
||||
t.integer "order_id", :default => 0, :null => false
|
||||
t.integer "article_id", :default => 0, :null => false
|
||||
t.integer "quantity", :default => 0, :null => false
|
||||
t.integer "tolerance", :default => 0, :null => false
|
||||
t.integer "units_to_order", :default => 0, :null => false
|
||||
t.integer "lock_version", :default => 0, :null => false
|
||||
end
|
||||
|
||||
add_index "order_articles", ["order_id", "article_id"], :name => "index_order_articles_on_order_id_and_article_id", :unique => true
|
||||
|
||||
create_table "orders", :force => true do |t|
|
||||
t.string "name", :default => "", :null => false
|
||||
t.integer "supplier_id", :default => 0, :null => false
|
||||
t.datetime "starts", :null => false
|
||||
t.datetime "ends"
|
||||
t.string "note"
|
||||
t.boolean "finished", :default => false, :null => false
|
||||
t.boolean "booked", :default => false, :null => false
|
||||
t.integer "lock_version", :default => 0, :null => false
|
||||
t.integer "updated_by_user_id"
|
||||
t.decimal "invoice_amount", :precision => 8, :scale => 2, :default => 0.0, :null => false
|
||||
t.decimal "deposit", :precision => 8, :scale => 2, :default => 0.0
|
||||
t.decimal "deposit_credit", :precision => 8, :scale => 2, :default => 0.0
|
||||
t.string "invoice_number"
|
||||
t.string "invoice_date"
|
||||
end
|
||||
|
||||
add_index "orders", ["starts"], :name => "index_orders_on_starts"
|
||||
add_index "orders", ["ends"], :name => "index_orders_on_ends"
|
||||
add_index "orders", ["finished"], :name => "index_orders_on_finished"
|
||||
|
||||
create_table "suppliers", :force => true do |t|
|
||||
t.string "name", :default => "", :null => false
|
||||
t.string "address", :default => "", :null => false
|
||||
t.string "phone", :default => "", :null => false
|
||||
t.string "phone2"
|
||||
t.string "fax"
|
||||
t.string "email"
|
||||
t.string "url"
|
||||
t.string "contact_person"
|
||||
t.string "customer_number"
|
||||
t.string "delivery_days"
|
||||
t.string "order_howto"
|
||||
t.string "note"
|
||||
t.integer "shared_supplier_id"
|
||||
t.string "min_order_quantity"
|
||||
end
|
||||
|
||||
add_index "suppliers", ["name"], :name => "index_suppliers_on_name", :unique => true
|
||||
|
||||
create_table "tasks", :force => true do |t|
|
||||
t.string "name", :default => "", :null => false
|
||||
t.string "description"
|
||||
t.date "due_date"
|
||||
t.boolean "done", :default => false
|
||||
t.integer "group_id"
|
||||
t.boolean "assigned", :default => false
|
||||
t.datetime "created_on", :null => false
|
||||
t.datetime "updated_on", :null => false
|
||||
t.integer "required_users", :default => 1
|
||||
end
|
||||
|
||||
add_index "tasks", ["name"], :name => "index_tasks_on_name"
|
||||
add_index "tasks", ["due_date"], :name => "index_tasks_on_due_date"
|
||||
|
||||
create_table "users", :force => true do |t|
|
||||
t.string "nick", :default => "", :null => false
|
||||
t.string "password_hash", :default => "", :null => false
|
||||
t.string "password_salt", :default => "", :null => false
|
||||
t.string "first_name", :default => "", :null => false
|
||||
t.string "last_name", :default => "", :null => false
|
||||
t.string "email", :default => "", :null => false
|
||||
t.string "phone"
|
||||
t.string "address"
|
||||
t.datetime "created_on", :null => false
|
||||
t.string "reset_password_token"
|
||||
t.datetime "reset_password_expires"
|
||||
t.datetime "last_login"
|
||||
end
|
||||
|
||||
add_index "users", ["nick"], :name => "index_users_on_nick", :unique => true
|
||||
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue