class RemoveTableArticlePrices < ActiveRecord::Migration[4.2]
  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!(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