#!/usr/bin/perl
#--NetShopOwner-CGI-version:4.2.5.5--

;#
;# variation_stock.cgi
;# [PC]バリエーション別在庫ページ
;# Copyright (c) 2004- Increment P Corp. All rights reserved.
;#
;# 2009/09/30 NSO4対応
;#

use strict;
use uselib;
use defnsopath_shop;
use NsoVersionPC 1.00;
use Lib::SiteStatus;
use DB::NsoGoodsDB;
use DB::NsoGoodsVariationDB;
use DB::NsoStockDB;

&ReadParse();
my %in    = %main::in;
my %incfn = %main::incfn;
my %inct  = %main::inct;

# インスタンス定義
my $objConfigSystem = Config::NsoSystem->newShop();
my $objConfigMaster = Config::NsoMaster->new();
my $NsoMisc       = NsoMisc->new();

# コンフィグレーションのキャッシュ
my %ConfigSystem = $objConfigSystem->cache_config();
my %ConfigMaster = $objConfigMaster->cache_config();

my $GoodsDB          = NsoGoodsDB->new({ ConfigSystem=>\%ConfigSystem, ConfigMaster=>\%ConfigMaster});
my $GoodsVariationDB = NsoGoodsVariationDB->new({ ConfigSystem=>\%ConfigSystem, ConfigMaster=>\%ConfigMaster});
my $StockDB          = NsoStockDB->new({ ConfigSystem=>\%ConfigSystem, ConfigMaster=>\%ConfigMaster});

FUNC:{
	my $func = $in{func} || 'main';
	my %function = (
		main       => \&main,
	);
	
	&check_closing();
	
	if ($function{$func}){
		$function{$func}->();
	}else{
		&main();
	}
}

exit();

;#
;# 開店・閉店状態検査
;#
sub check_closing {
	my $SiteStatus = Lib::SiteStatus->new({ ConfigSystem=>\%ConfigSystem });
	$SiteStatus->CheckClosing({ IgnoreFlag=>1 });
}

;#
;# メイン処理
;#
sub main {
	my $self = shift;
	my $GoodsID = $in{GoodsID};

	# パラメータが半角数字のみ、1桁以上でないとエラー
	unless( $GoodsID =~ m/^\d+$/ ){
		&ShowErrorPage('不正なパラメータです。');
	}

	# テンプレート基本設定
	my $system_templ_dir   = $main::nsoDB_path ."/";
	my $system_templ_kind  = "templ";

	# 商品情報取得
	my %resultGoods = $GoodsDB->make_GoodsInfoQuery($GoodsID);
	my %resultGoodsHash = (
		RecordList  => $resultGoods{RecordList},
		RecordCount => $resultGoods{RecordCount},
		status_err  => $resultGoods{status_err},
	);

	if ($resultGoodsHash{status_err} ne ""){
		&ShowErrorPage($resultGoodsHash{status_err});
	}

	if ($resultGoodsHash{RecordCount} == 0){
		&ShowErrorPage('商品情報が見つかりません。');
	}

	# 商品情報取得
	my %Article = %{$resultGoodsHash{RecordList}[0]};

	# PC表示フラグの確認
	if ($Article{DisplayFlag} ne "1"){
		&ShowErrorPage('表示できる商品情報がありません。');
	}

	# 在庫表示テーブルの中身の作成
	my $str_body = "";

	# バリエーション1での管理
	if($Article{StockType} == "1"){
		# バリエーション1の名称を取得
		my %resultArticleVariation1 = $GoodsVariationDB->GetArticleVariationType($GoodsID , 1);
		my %resultArticleVariation1Hash = (
			RecordList  => $resultArticleVariation1{RecordList},
			RecordCount => $resultArticleVariation1{RecordCount},
			status_err  => $resultArticleVariation1{status_err},
		);

		if ($resultArticleVariation1Hash{status_err} ne ""){
			&ShowErrorPage($resultArticleVariation1Hash{status_err});
		}

		if ($resultArticleVariation1Hash{RecordCount} == 0){
			&ShowErrorPage('バリエーション1が見つかりません。');
		}
		
		# バリエーション１の名称
		my @ArticleVariation1 = @{$resultArticleVariation1Hash{RecordList}};

		# 在庫情報の取得
		my %resultVariationStock = $StockDB->GetVariationStock($GoodsID);
		my %resultVariationStockHash = (
			RecordList  => $resultVariationStock{RecordList},
			RecordCount => $resultVariationStock{RecordCount},
			status_err  => $resultVariationStock{status_err},
		);

		if ($resultVariationStockHash{status_err} ne ""){
			&ShowErrorPage($resultVariationStockHash{status_err});
		}

		if ($resultVariationStockHash{RecordCount} == 0){
			&ShowErrorPage('在庫1が見つかりません。');
		}

		# 在庫情報
		my %ArticleStock = %{$resultVariationStockHash{RecordList}};

		# バリエーション1用テンプレート設定
		my $Data_v1_head = "stock_list_v1_head.htmp";
		my $Data_v1_body = "stock_list_v1_body.htmp";
		my $NsoTempl_v1_head = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_v1_head });
		my $NsoTempl_v1_body = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_v1_body });

		my %Text_v1_head = ();
		$Text_v1_head{"Variation1Header"} = $Article{'VariationTitle1'};
		my %replace_templ_v1_head = (
			Text => \%Text_v1_head ,
		);
		$str_body .= $NsoTempl_v1_head->replace_templ(\%replace_templ_v1_head);

		# 在庫数テーブルの中身を作成
		for(my $i = 0 ; $i < @ArticleVariation1 ; $i++ ){
			my %Text_v1_body = ();
			my $key_string = "" . $ArticleVariation1[$i]{'VariationID'} . "-" . "0";
			$Text_v1_body{"Variation1Name"} = $ArticleVariation1[$i]{'VariationContent'};
			$Text_v1_body{"VariationStock"} = $NsoMisc->CreateStockImagePath($ArticleStock{$key_string});
			my %replace_templ_v1_body = (
				Text => \%Text_v1_body ,
			);
			$str_body .= $NsoTempl_v1_body->replace_templ(\%replace_templ_v1_body,);
		}
	# バリエーション2での管理
	} elsif($Article{StockType} == "2"){
		# バリエーション1の名称を取得
		my %resultArticleVariation1 = $GoodsVariationDB->GetArticleVariationType($GoodsID , 1);
		my %resultArticleVariation1Hash = (
			RecordList  => $resultArticleVariation1{RecordList},
			RecordCount => $resultArticleVariation1{RecordCount},
			status_err  => $resultArticleVariation1{status_err},
		);

		if ($resultArticleVariation1Hash{status_err} ne ""){
			&ShowErrorPage($resultArticleVariation1Hash{status_err});
		}

		if ($resultArticleVariation1Hash{RecordCount} == 0){
			&ShowErrorPage('バリエーション2-1が見つかりません。');
		}
		
		# バリエーション１の名称
		my @ArticleVariation1 = @{$resultArticleVariation1Hash{RecordList}};

		# バリエーション2の名称を取得
		my %resultArticleVariation2 = $GoodsVariationDB->GetArticleVariationType($GoodsID , 2);
		my %resultArticleVariation2Hash = (
			RecordList  => $resultArticleVariation2{RecordList},
			RecordCount => $resultArticleVariation2{RecordCount},
			status_err  => $resultArticleVariation2{status_err},
		);

		if ($resultArticleVariation2Hash{status_err} ne ""){
			&ShowErrorPage($resultArticleVariation2Hash{status_err});
		}

		if ($resultArticleVariation2Hash{RecordCount} == 0){
			&ShowErrorPage('バリエーション2-2が見つかりません。');
		}

		# バリエーション２の名称
		my @ArticleVariation2 = @{$resultArticleVariation2Hash{RecordList}};

		# 在庫情報の取得
		my %resultVariationStock = $StockDB->GetVariationStock($GoodsID);
		my %resultVariationStockHash = (
			RecordList  => $resultVariationStock{RecordList},
			RecordCount => $resultVariationStock{RecordCount},
			status_err  => $resultVariationStock{status_err},
		);

		if ($resultVariationStockHash{status_err} ne ""){
			&ShowErrorPage($resultVariationStockHash{status_err});
		}

		if ($resultVariationStockHash{RecordCount} == 0){
			&ShowErrorPage('在庫2が見つかりません。');
		}

		# 在庫情報
		my %ArticleStock = %{$resultVariationStockHash{RecordList}};

		# バリエーション2用テンプレート設定
		my $Data_v2_head  = "stock_list_v2_head.htmp";
		my $Data_v2_body1 = "stock_list_v2_body1.htmp";
		my $Data_v2_body2 = "stock_list_v2_body2.htmp";
		my $NsoTempl_v2_head = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_v2_head });
		my $NsoTempl_v2_body1 = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_v2_body1 });
		my $NsoTempl_v2_body2 = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_v2_body2 });

		my %Text_v2_head = ();
		$Text_v2_head{"Variation1Header"} = $Article{'VariationTitle1'};
		$Text_v2_head{"Variation2Header"} = $Article{'VariationTitle2'};
		my %replace_templ_v2_head = (
			Text => \%Text_v2_head ,
		);
		$str_body .= $NsoTempl_v2_head->replace_templ(\%replace_templ_v2_head);

		# 在庫数テーブルの中身を作成
		for(my $i = 0 ; $i < @ArticleVariation1 ; $i++ ){
			my %Text_v2_body1 = ();
			my $key_string = "" . $ArticleVariation1[$i]{'VariationID'} . "-" 
			                    . $ArticleVariation2[0]{'VariationID'};
			$Text_v2_body1{"Variation2Rows"} = "" . @ArticleVariation2;
			$Text_v2_body1{"Variation1Name"} = $ArticleVariation1[$i]{'VariationContent'};
			$Text_v2_body1{"Variation2Name"} = $ArticleVariation2[0]{'VariationContent'};
			$Text_v2_body1{"VariationStock"} = $NsoMisc->CreateStockImagePath($ArticleStock{$key_string});
			my %replace_templ_v2_body1 = (
				Text => \%Text_v2_body1 ,
			);
			$str_body .= $NsoTempl_v2_body1->replace_templ(\%replace_templ_v2_body1);
			
			# 1行目の在庫数は処理済みなので、その後を処理
			for(my $j = 1 ; $j < @ArticleVariation2 ; $j++ ){
				my %Text_v2_body2 = ();
				my $key_string = "" . $ArticleVariation1[$i]{'VariationID'} . "-" 
				                    . $ArticleVariation2[$j]{'VariationID'};
				$Text_v2_body2{"Variation2Name"} = $ArticleVariation2[$j]{'VariationContent'};
				$Text_v2_body2{"VariationStock"} = $NsoMisc->CreateStockImagePath($ArticleStock{$key_string});
				my %replace_templ_v2_body2 = (
					Text => \%Text_v2_body2 ,
				);
				$str_body .= $NsoTempl_v2_body2->replace_templ(\%replace_templ_v2_body2);
			}
		}
	} else{
		# バリエーション別在庫管理ではない。
		&ShowErrorPage('詳細の在庫情報がありません。');
	}

	# テンプレート設定（ヘッダー、フッター）
	my $Data_header = "stock_list_head.htmp";
	my $Data_footer = "stock_list_foot.htmp";
	my $NsoTempl_header = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_header });
	my $NsoTempl_footer = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_footer });

	# テンプレート置換（ヘッダー、フッター）
	my %Text_header = ();
	$Text_header{"ArticleName"} = $Article{Name};
	my %replace_templ_header = (
		Text => \%Text_header,
	);

	my %Text_footer = ();
	my %replace_templ_footer = (
		Text => \%Text_footer,
	);

	# 在庫ページ出力
	print $NsoMisc->print_header();
	print $NsoTempl_header->replace_templ(\%replace_templ_header);

	print $str_body;
	
	print $NsoTempl_footer->replace_templ(\%replace_templ_footer);
	exit();
}

;#
;#	エラーページ生成
;#
;#	@param	: エラーメッセージ
;#	@return	: なし
;#
sub ShowErrorPage {
	my $errstr = shift;

	# テンプレート基本設定
	my $system_templ_dir   = $main::nsoDB_path ."/";
	my $system_templ_kind  = "templ";

	# テンプレート設定（ヘッダー、フッター）
	my $Data_header = "stock_list_head.htmp";
	my $Data_footer = "stock_list_foot.htmp";
	my $NsoTempl_header = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_header });
	my $NsoTempl_footer = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data_footer });

	# テンプレート置換（ヘッダー、フッター）
	my %Text_header = ();
	my %replace_templ_header = (
		Text => \%Text_header,
	);

	my %Text_footer = ();
	my %replace_templ_footer = (
		Text => \%Text_footer,
	);

	# エラーページ出力
	print $NsoMisc->print_header();
	print $NsoTempl_header->replace_templ(\%replace_templ_header);

	print "<TR><TD>" . '在庫状況を確認できませんでした。' . "</TD></TR>\r\n";
	print "<TR><TD>" . $errstr . "</TD></TR>\r\n";
	
	print $NsoTempl_footer->replace_templ(\%replace_templ_footer);
	exit();
}













