Initial commit of foodsoft 2

This commit is contained in:
Benjamin Meichsner 2009-01-06 11:49:19 +01:00
commit 5b9a7e05df
657 changed files with 70444 additions and 0 deletions

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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
View 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