-- 仕入見出しテーブル 変更

CREATE OR REPLACE FUNCTION f_stock_title_update(
    IN kubun           integer,    -- 区分

    IN i_stocktitlecd  integer,    -- 仕入見出しC
    IN i_orderno       varchar,    -- 発注番号
    IN i_suppliercd    integer,    -- 仕入先C
    IN i_supplidiv     integer,    -- 仕入区分

    IN i_updusrnm      varchar,    -- 更新ユーザ
    IN i_updpcnm       varchar,    -- 更新マシン
    IN i_updcnt        integer,    -- 更新カウンタ

    OUT errcd       integer,
    OUT errmsg      varchar,
    OUT code        integer) AS
$BODY$

DECLARE
    sql1 varchar;
    cntcheck integer;
BEGIN

 -- 必須チェック --

    -- 処理区分
    IF kubun IS NULL OR kubun NOT IN (1,2,3) THEN
        RAISE EXCEPTION '処理区分が不正です';
    END IF;

    IF kubun IN (2,3) THEN
        IF i_stocktitlecd IS NULL THEN
            RAISE EXCEPTION '仕入見出しコードの引数は必須です';
        END IF;
        /*
        IF i_updcnt IS NULL THEN
            RAISE EXCEPTION '更新カウンタの引数は必須です';
        END IF;
        */
    END IF;

    IF kubun IN (1,2) THEN
        IF i_updusrnm IS NULL THEN
            RAISE EXCEPTION '更新ユーザ名が指定されていません';
        END IF;
        IF i_updpcnm IS NULL THEN
            RAISE EXCEPTION '更新マシン名が指定されていません';
        END IF;
    END IF;

 -- 桁数チェック
    IF kubun IN (1,2) THEN
        IF s_check_length(i_orderno, 20) = FALSE THEN
            RAISE EXCEPTION '発注番号が不正です';
        END IF;
        IF i_supplidiv NOT IN (0,1,2,3,4) THEN
            RAISE EXCEPTION '仕入区分が不正です';
        END IF;
    END IF;


 -- 外部キーチェック
    IF kubun IN (1,2) AND i_suppliercd IS NOT NULL THEN
        SELECT updcnt INTO cntcheck FROM t_supplier WHERE suppliercd = i_suppliercd;
        IF NOT FOUND THEN
            RAISE EXCEPTION '仕入れ先Cが不正です';
        END IF;
    END IF;


 -- 更新カウンタチェック
    /*とりあえず無効
    IF kubun IN (2,3) THEN
        SELECT updcnt INTO cntcheck FROM t_stock_title WHERE stocktitlecd = i_stocktitlecd;
          IF NOT FOUND OR cntcheck <> i_updcnt THEN
            RAISE EXCEPTION '更新カウンタが不正';
          END IF;
    END IF;
    */


 ---  更新処理 ---

    -- 追加
    IF kubun = 1 THEN

        INSERT INTO t_stock_title(
                orderno,
                orderdate,
                suppliercd,
                supplidiv,

                updusrnm,
                updpcnm)
        VALUES(
                i_orderno ,
                current_timestamp ,
                i_suppliercd ,
                i_supplidiv ,

                i_updusrnm,
                i_updpcnm);

        errcd := 1;
        code  := lastval();
        RETURN;

    -- 変更
    ELSIF kubun = 2 THEN
        -- 更新ユーザ
        UPDATE t_stock_title SET
                orderno = i_orderno,
                orderdate = current_timestamp,
                suppliercd = i_suppliercd,
                supplidiv = i_supplidiv,
                updusrnm = i_updusrnm,
                updpcnm = i_updpcnm

             WHERE stocktitlecd = i_stocktitlecd;
        errcd := 1;
        code := i_stocktitlecd;
        RETURN;

    -- 削除
    ELSIF kubun = 3 THEN
        UPDATE t_stock_title
           SET delflg   = TRUE,
               updusrnm = i_updusrnm,
               updpcnm  = i_updpcnm
           WHERE stocktitlecd = i_stocktitlecd;

        errcd := 1;

        RETURN;
    END IF;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;