#!ruby -Ks

        ##
        ##  伝票用のテーブル（タイトル＋明細）を作成するスクリプト
        ##  （カウンタ付き）
        ##

require "phi"
require "rdb"
include Phi
include RDB

Phi.date_format = "yyyy/mm/dd"

        ##
        ##  カウンタ方式の追加
        ##
DB = Database_ib.new("IBLocal","SYSDBA","masterkey")
##DB = Database_ib.new("APOLLO","apollo","apollo")

def table_drop table_name
  DB.execute "DROP TABLE #{table_name}"
end

def table_create table_name , col_def
  DB.execute "CREATE TABLE #{table_name} ( #{col_def} )"
end

def table_recreate table_name , col_def
  table_drop   table_name if DB.table_exist? table_name
  table_create table_name, col_def
end

        ##
        ##  コンソールで確認
        ##
print "サンプルＤＢ(原始バージョン)を作成します。y/n:" ; ans=gets
if not ans or not ans.upcase[0] == ?Y
  puts "canceled"
  exit
end
puts "run"

puts 'create TABLEs'

        ##
        ##  カウンタの作成
        ##
DB.counter_create 'ap02den_id_cnt' unless DB.counter_exist? "ap02den_id_cnt"

        ##
        ##  商品テーブルの作成
        ##
##table_recreate "ap02shohin", <<EOT
##        shohin_code   VARCHAR(6)  ,
##        shohin_mei    VARCHAR(14) ,
##        tanka         INTEGER
##EOT

        ##
        ##  伝票のタイトルと明細のテーブル
        ##
table_recreate 'ap02den' , <<EOT
        den_id        INTEGER ,
        den_date      DATE    ,
        kokyaku_mei   VARCHAR(14)  ,
        gokei         INTEGER
EOT

table_recreate 'ap02meisai' , <<EOT
        den_id        INTEGER,
        meisai_id     INTEGER,
        shohin_mei    VARCHAR(14),
        tanka         INTEGER,
        suryo         INTEGER,
        shokei        INTEGER
EOT

        ##
        ##  初期データの挿入。
        ##
puts 'insert DATA'

        ##
        ##  商品一覧の初期データ
        ##
##def insert_shohin shohin_code,shohin_mei,tanka
##  DB.execute <<EOT
##    INSERT INTO ap02shohin
##           (    shohin_code   ,    shohin_mei   ,   tanka )
##    VALUES ( "#{shohin_code}" , "#{shohin_mei}" , #{tanka} )
##EOT
##end
##
##insert_shohin ( "M001" , "緑茶アポロ"   ,  100 )
##insert_shohin ( "D001" , "デルファイ飴" , 1000 )
##insert_shohin ( "R001" , "ルビーの小枝" ,  300 )

        ##
        ##  伝票の初期データ
        ##  カウンタ方式
        ##
def insert_denpyo den,meisais
  DB.transaction{
    den_id = DB.counter_inc("ap02den_id_cnt")
    insert_den ( den_id, den )
    meisais.each_with_index{ |meisai,meisai_id|
      insert_meisai den_id , meisai_id, meisai
    }
  }
end

def insert_meisai den_id, meisai_id, meisai
  shohin_mei = meisai[0]
  tanka      = meisai[1]
  suryo      = meisai[2]
  shokei     = meisai[3]
  DB.execute <<EOT
    INSERT INTO ap02meisai
          (  den_id ,  meisai_id ,   shohin_mei  ,  tanka ,  suryo ,  shokei)
    VALUES(#{den_id},#{meisai_id},"#{shohin_mei}",#{tanka},#{suryo},#{shokei} )
EOT
end

def insert_den den_id, den
  query = DB.internal_query
  query.close
  query.sql.text = <<EOT
    INSERT INTO ap02den
           (  den_id ,  den_date ,  kokyaku_mei ,  gokei )
    VALUES ( :den_id , :den_date , :kokyaku_mei , :gokei )
EOT
  query.params["den_id"]      = den_id
  query.params["den_date"]    = den[0]
  query.params["kokyaku_mei"] = den[1]
  query.params["gokei"]       = den[2]
  query.execute
end

        ##
        ##  初期データの追加
        ##
insert_denpyo   [DateTime.now.date,"たけ(tk)",1500],
            [   ["緑茶アポロ"  , 100,5, 500],
                ["デルファイ飴",1000,1,1000]    ]

        ##
        ##  点検のため表示してみる。
        ##
##puts DB.table('ap02shohin').fields
##puts DB.table('ap02shohin')

puts DB.table('ap02den').fields
puts DB.table('ap02den')

puts DB.table('ap02meisai').fields
puts DB.table('ap02meisai')

