DROP FUNCTION f_import_main(IN _shopdiv integer, IN _itemcd integer, IN _itemnm varchar, IN _itemnmkana varchar, IN _makercd integer, IN _makernm varchar, IN _labelcd integer, IN _labelnm varchar, IN _seriescd integer, IN _seriesnm varchar, IN _itemdivcd integer, IN _examgroupcd integer, IN _examno varchar, IN _iteminfo text, IN _eirinrating integer, IN _subtitle varchar, IN _OriginalTitle varchar, IN _ProductYear varchar, IN _ProductCountry varchar, IN _rankingrate integer, IN _webcomment varchar, IN _mediacd integer, IN _makeritemcd varchar, IN _jancd varchar, IN _isbncd varchar, IN _salestartdate date, IN _orderclosedate date, IN _saleformcd integer, IN _rectime integer, IN _makerprice integer, IN _exhibitcount integer, IN _condition integer, IN _sellingprice integer, IN _souryouprc integer, IN _stockstate integer,IN _genrecd integer[], IN _genrenm varchar[], IN _castcd integer[], IN _castnm varchar[], IN directorcode integer[], IN directorname varchar[], IN release integer, IN usr varchar, OUT errcd integer, OUT errmsg varchar, OUT code integer);


CREATE OR REPLACE FUNCTION f_import_main(IN _shopdiv integer,    -- 区分
    IN _itemcd integer,     -- 品目C
    IN _itemnm varchar,     -- 品名
    IN _itemnmkana varchar, -- 品名(かな)
    IN _makercd integer,    -- メーカーC
    IN _makernm varchar,    -- メーカー名
    IN _labelcd integer,    -- レーベルC
    IN _labelnm varchar,    -- レーベル名
    IN _seriescd integer,   -- シリーズC
    IN _seriesnm varchar,   -- シリーズ名
    IN _itemdivcd integer,  -- 作品区分C
    IN _examgroupcd integer, -- 受審団体C / 公開区分C
    IN _examno varchar,     -- 受審番号 / 映倫番号
    IN _iteminfo text,      -- 作品案内
    IN _eirinrating integer, -- 映倫既定
    IN _subtitle varchar,    -- サブタイトル
    IN _OriginalTitle varchar,  -- 原題
    IN _ProductYear varchar,    -- 製作年
    IN _ProductCountry varchar, -- 製作国
    IN _rankingrate integer,    -- ランク
    IN _webcomment varchar,   -- WEBコメント
    IN _mediacd integer,        -- メディアC
    IN _makeritemcd varchar,    -- メーカー品番
    IN _jancd varchar,          -- JANコード
    IN _isbncd varchar,         -- ISBNコード
    IN _salestartdate date,     -- 発売日
    IN _orderclosedate date,    -- 発注締切日
    IN _saleformcd integer,     -- 発売形態C
    IN _rectime integer,        -- 収録時間
    IN _makerprice integer,     -- メーカー定価
    IN _exhibitcount integer,   -- 出品数
    IN _condition integer,      -- コンディション
    IN _sellingprice integer,   -- 販売価格
    IN _souryouprc integer,     -- 送料
    IN _stockstate integer,     -- 在庫状態
    IN _genrecd integer[],      -- ジャンルC
    IN _genrenm varchar[],      -- ジャンル名
    IN _castcd integer[],       -- キャストC
    IN _castnm varchar[],       -- キャスト名
    IN directorcode integer[],  -- 監督C
    IN directorname varchar[],  -- 監督名
    IN release integer,         -- 公開日
    IN usr varchar,             -- 更新ユーザ

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

DECLARE
    sql varchar;
    rec_item RECORD;
    rec_struct RECORD;
    rec_web RECORD;
    rec_stock RECORD;
    rec_genre RECORD;
    rec_cast  RECORD;
    i    integer := 1;
    makerc integer;
    labelc integer;
    seriesc integer;
    itemc  integer;
BEGIN
    --
    IF usr IS NULL THEN
        errcd := -10;
        errmsg := '更新ユーザがNULL';
        RETURN;
    END IF;

    IF _itemcd IS NOT NULL THEN
        errcd := -10;
        errmsg := '更新はできません';
        RETURN;
    ELSIF _itemcd IS NULL THEN

        -- メーカコード取得
        IF _makercd IS NOT NULL THEN
            SELECT makercd INTO makerc FROM t_maker WHERE makercd = _makercd;
            IF NOT FOUND THEN
                errcd := -10;
                errmsg := _makercd || 'はメーカーマスタにありません。';
                RETURN;
            END IF;
        ELSIF _makernm IS NOT NULL THEN
            -- メーカ名からメーカC取得
            SELECT * INTO makerc FROM s_get_makercd(_makernm);
            IF makerc = 0 THEN
                errcd := -10;
                errmsg := _makernm || 'はメーカーマスタにありません。';
                RETURN;
            END IF;
        END IF;

        -- レーベルコード取得
        IF _shopdiv = 1 THEN
            IF makerc IS NOT NULL AND _labelcd IS NOT NULL THEN
                SELECT labelcd INTO labelc FROM t_label WHERE labelcd = _labelcd AND makercd = makerc;
                IF NOT FOUND THEN
                    errcd := -10;
                    errmsg := _labelcd || 'はレーベルマスタにありません。';
                    RETURN;
                END IF;
            ELSIF makerc IS NOT NULL AND _labelnm IS NOT NULL THEN
                -- レーベル名からレーベルC取得
                SELECT * INTO labelc FROM s_get_labelcd(makerc, _labelnm);
                IF labelc = 0 THEN
                    errcd := -10;
                    errmsg := _labelnm || 'はレーベルマスタにありません。';
                    RETURN;
                END IF;
            END IF;
        END IF;

        -- シリーズコード取得
        IF makerc IS NOT NULL AND _seriescd IS NOT NULL THEN
            SELECT seriescd INTO seriesc FROM t_series WHERE seriescd = _seriescd AND makercd = makerc;
            IF NOT FOUND THEN
                errcd := -10;
                errmsg := _seriescd || 'はシリーズマスタにありません。';
                RETURN;
            END IF;
        ELSIF makerc IS NOT NULL AND _seriesnm IS NOT NULL THEN
            -- シリーズ名からシリーズC取得
            SELECT * INTO seriesc FROM s_get_seriescd(makerc, _seriesnm);
            IF seriesc = 0 THEN
                errcd := -10;
                errmsg := _seriesnm || 'はシリーズマスタにありません。';
                RETURN;
            END IF;
        END IF;

        -- 重複チェック
        SELECT * INTO itemc FROM t_item_basic_attr WHERE s_get_nocase_text(itemnm) LIKE s_get_nocase_text(_itemnm) AND makercd = makerc AND delflg = false;
        IF FOUND THEN
            errcd := -20;
            errmsg := '追加できませんでした';
            RETURN;
        END IF;

        ---- 更新処理
        -- 追加した品名コードをrec_item に代入
        SELECT * FROM f_import_item_basic_attr(
            _itemnm,             -- 品名
            _itemnmkana,         -- 品名(かな)
            makerc,              -- メーカーコード
            labelc,              -- レーベルコード
            seriesc,             -- シリーズコード
            _itemdivcd,          -- 作品区分コード
            _examgroupcd,        -- 受審団体コード
            _examno,             -- 受審番号
            _iteminfo,           -- 作品案内
            _eirinrating,        -- 映倫規定
            _subtitle,           -- サブタイトル
            _OriginalTitle,      -- 原題
            _ProductYear,        -- 製作年
            _ProductCountry,     -- 製作国
            _shopdiv,            -- 区分
            usr                  -- 更新ユーザ
         ) INTO rec_item;
        IF rec_item.errcd <> 1 THEN
            errcd := rec_item.errcd;
            errmsg := rec_item.errmsg;
            code := rec_item.code;
            RETURN;
        END IF;

        -- 品目ウェブ属性テーブルに追加
        SELECT * FROM f_import_item_web_attf( rec_item.code, _rankingrate, release, _webcomment, usr ) INTO rec_web;
        IF rec_web.errcd <> 1 THEN
            errcd := rec_web.errcd;
            errmsg := rec_web.errmsg;
            RETURN;
        END IF;

        -- 品目構成テーブルに追加
        SELECT * FROM f_import_item_struct(
            rec_item.code, -- 品目コード
            _mediacd,    -- メディアコード
            _makeritemcd,     -- メーカー品番
            _jancd,     -- JANコード
            _isbncd,     -- ISBNコード
            _salestartdate,     -- 発売日
            _orderclosedate,     -- 発注締切日
            _saleformcd,     -- 販売形態
            _rectime,     -- 収録時間
            _makerprice,     -- メーカー定価
            usr    -- 更新ユーザ
        ) INTO rec_struct;
        IF rec_struct.errcd <> 1 THEN
            errcd := rec_struct.errcd;
            errmsg := rec_struct.errmsg;
            RETURN;
        END IF;

        -- 販売価格
        SELECT * FROM f_import_ex_stock_detail(
            rec_item.code,
            rec_struct.code,
            _exhibitcount,
            _condition,
            _sellingprice,
            _souryouprc,
            _stockstate,
            usr
        )INTO rec_stock;
        IF rec_stock.errcd <> 1 THEN
            errcd := rec_stock.errcd;
            errmsg := rec_stock.errmsg;
            RETURN;
        END IF;

        -- ジャンル
        IF _genrecd IS NOT NULL OR _genrenm IS NOT NULL THEN
            SELECT * FROM f_import_genre_item(
                rec_item.code,
                _genrecd,
                _genrenm,
                usr
            ) INTO rec_genre ;
            IF rec_genre.errcd <> 1 THEN
                errcd := rec_genre.errcd;
                errmsg := rec_genre.errmsg;
                RETURN;
            END IF;
        END IF;

        -- キャスト
        IF _castcd IS NOT NULL OR _castnm IS NOT NULL THEN
            SELECT * FROM f_import_cast_item ( rec_item.code, _castcd, _castnm, _shopdiv, usr )INTO rec_cast ;
            IF rec_cast.errcd <> 1 THEN
                errcd := rec_cast.errcd;
                errmsg := rec_cast.errmsg;
                RETURN;
            END IF;
        END IF;

        -- キャスト(監督)
        IF directorcode IS NOT NULL OR directorname IS NOT NULL THEN
            SELECT * FROM f_import_cast_item2 ( rec_item.code , directorcode , directorname , usr )INTO rec_cast ;
            IF rec_cast.errcd <> 1 THEN
                errcd := rec_cast.errcd;
                errmsg := rec_cast.errmsg;
                RETURN;
            END IF;
        END IF;

        errcd := 1;
        errmsg := '完了';
        code := rec_item.code;
    END IF;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
