#!/usr/bin/perl

# 購入履歴一覧

use DBI;

require './jcode.pl';
require './subfunc.cgi';
require './settings.cgi';

#==================================================================
#	設定
#==================================================================
$html_file = "OrderList.html";								# 表示用テンプレートＨＴＭＬ

#==================================================================
#	cookieの取得
#==================================================================
$cookies = $ENV{'HTTP_COOKIE'};
@pairs = split(/ /, $cookies);
foreach $pair (@pairs) {
	($name, $value) = split(/=/, $pair);
	$value =~ s/\;//g;
	$cc{$name} = $value;
}

#==================================================================
#	引数を解析する
#==================================================================
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
	$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$buffer);
foreach $pair (@pairs)
{
	($name, $value) = split(/=/, $pair);
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$value =~ s/\n//g;
	&jcode'convert(*value,'sjis');
	$PARA{$name} = $value;
}

#==================================================================
#	引数により処理を分岐する
#==================================================================
print "Content-type: text/html\n\n";
# cookieよりログイン名を取得
if( $cc{LoginID} eq "" ) {
	&disp_html( "OrderList" );
	exit;
}
&srch_html;
exit;

#==================================================================
#	検索内容一覧ＨＴＭＬ作成
#==================================================================
sub srch_html {

	open(HTML,"$html_file") || die "error!\n";
	flock (HTML, 2);
	@HTML = <HTML>;
	flock (HTML, 8);
	close(HTML);

	open(HTML2,"../head.html") || die "error!\n";
	flock (HTML2, 2);
	@HEAD_HTML = <HTML2>;
	flock (HTML2, 8);
	close(HTML2);

	$dbh = DBI->connect($data_source,$user_name,$user_pass) || die "CONNECT ERROR $DBI::ERRSTR";

	$sql = "SELECT * FROM orders WHERE OrderDate BETWEEN ? AND ? && CustomerId=?;";
	$sth = $dbh->prepare($sql);
	$sdate = sprintf( "%04d%02d%02d", $PARA{start1}, $PARA{start2}, $PARA{start3} );
	$edate = sprintf( "%04d%02d%02d", $PARA{end1}, $PARA{end2}, $PARA{end3} );
	$sth->execute( $sdate, $edate, "$cc{LoginID}" ) || die $sth->errstr;

	# ＢＯＤＹまでのＨＴＭＬ表示

	($sec,$min,$hour,$day,$mon,$year,$wday) = localtime(time);
	if( $PARA{start1} eq "" ) { $PARA{start1} = $year + 1900; }
	if( $PARA{start2} eq "" ) { $PARA{start2} = 1; }
	if( $PARA{start3} eq "" ) { $PARA{start3} = 1; }
	if( $PARA{end1} eq "" ) { $PARA{end1} = $year+1900; }
	if( $PARA{end2} eq "" ) { $PARA{end2} = $mon+1; }
	if( $PARA{end3} eq "" ) { $PARA{end3} = $day; }
	if( $PARA{recv} eq "" ) { $PARA{recv} = 0; }

	$flg = "";
	@PUTPAGE = ();
	foreach $line (@HTML) {
		if( index( $line, '#INCLUDE_HEAD#' ) >= 0 ) {
			foreach $line2 (@HEAD_HTML) {
				push( @PUTPAGE, $line2 );
			}
			$line = "<!-- INCLUDE OK -->\n";
		}
		if( index( $line, "BODY_START" ) >= 0 ) { last; }
		$line =~ s/#SYEAR#/$PARA{start1}/;
		$line =~ s/#EYEAR#/$PARA{end1}/;
		if( index( $line, "start2" ) >= 0 ) { $flg = "start2"; }
		if( index( $line, "start3" ) >= 0 ) { $flg = "start3"; }
		if( index( $line, "end2" ) >= 0 ) { $flg = "end2"; }
		if( index( $line, "end3" ) >= 0 ) { $flg = "end3"; }
		if( index( $line, "recv" ) >= 0 ) { $flg = "recv"; }
		if( index( $line, "/select" ) >= 0 ) { $flg = ""; }
		if( $flg ne "" ) {
			if( index( $line, "value=$PARA{$flg}>" ) >= 0 ) {
				$line =~ s/>/ selected>/;
			}
		}
		push( @PUTPAGE, $line );
	}

	# ＢＯＤＹ部のテンプレート保存
	$body_save = "";
	$flg = 0;
	foreach $line (@HTML) {
		if( index( $line, "BODY_START" ) >= 0 ) { $flg = 1; next; }
		if ( $flg == 0 ) { next; }
		if( index( $line, "BODY_END" ) >= 0 ) { last; }
		$body_save = $body_save . $line;
	}

	# ＢＯＤＹ部の表示
	$flag = 0;
	while( @value = $sth->fetchrow_array ){
		if( $PARA{recv} == 1 && $value[14] eq "" ) { next; }
		
		$body = $body_save;
		if( $flag == 0 ) {
			$body =~ s/#COLOR#/ffffee/;
		} else {
			$body =~ s/#COLOR#/ffffff/;
		}
		$flag = !$flag;
		
		$value[5] = &put_comma( $value[5] );
		$value[6] = &put_comma( $value[6] );
		$value[7] = &put_comma( $value[7] );
		
		# 日付
		$date = sprintf( "%04d/%02d/%02d", $value[1] / 10000, $value[1] / 100 % 100, $value[1] % 100 );
		$body =~ s/(#)(DATE)(#)/$date/;
		# 時間
		$time = sprintf( "%02d:%02d", $value[2] / 10000, $value[2] / 100 % 100 );
		$body =~ s/(#)(TIME)(#)/$time/;
		# 注文番号
		$body =~ s/(#)(ORDER)(#)/$value[0]/;
		# 商品コード
		$body =~ s/(#)(PRODUCT)(#)/$value[4]/;
		# 商品名
		$body =~ s/(#)(GOODS)(#)/$value[5]/;
		# 数量
		$body =~ s/(#)(QUANTITY)(#)/$value[6]/;
		# 単価
		$body =~ s/(#)(PRICE)(#)/$value[7]/;
		# 送料
		$body =~ s/(#)(MAILCOST)(#)/$value[8]/;
		# お届け先の取得
		if( $value[14] ne "" ) {
			$body =~ s/(#)(GIFTNAME)(#)/$value[14] 様/;
		} else {
			$body =~ s/(#)(GIFTNAME)(#)/ご本人 様/;
		}
#		$giftcode = $value[9];
#		if( $giftcode > 0 ) {
#			$sql = "SELECT * FROM receiver WHERE CustomerId=? AND SeqNo=?;";
#			$sth2 = $dbh->prepare($sql);
#			$sth2->execute( "$value[3]", $giftcode ) || die $sth2->errstr;
#			@value2 = $sth2->fetchrow_array;
#			# お届け先氏名
#			$body =~ s/(#)(GIFTNAME)(#)/$value2[6] 様/;
#			# お届け先〒
#			if( $value2[2] > 0 ) {
#				$zip = sprintf( "%03d-%04d", $value2[2] / 10000, $value2[2] % 10000 );
#				$body =~ s/(#)(GIFTZIP)(#)/$zip/;
#			}
#			else {
#				$body =~ s/(#)(GIFTZIP)(#)//;
#			}
#			# お届け先住所
#			$body =~ s/(#)(GIFTADDRESS)(#)/$value2[3]$value2[4]<br>$value2[5]/;
#			# お届け先電話番号
#			$body =~ s/(#)(GIFTTEL)(#)/$value2[7]/;
#			# 
#			$sth2->finish;
#		}
#		else {
#			# お届け先氏名
#			$body =~ s/(#)(GIFTNAME)(#)//;
#			# お届け先〒
#			$body =~ s/(#)(GIFTZIP)(#)//;
#			# お届け先住所
#			$body =~ s/(#)(GIFTADDRESS)(#)//;
#			# お届け先電話番号
#			$body =~ s/(#)(GIFTTEL)(#)//;
#		}
		push( @PUTPAGE, $body );
	}

	# フッターの表示
	$flg = 0;
	foreach $line (@HTML) {
		if( index( $line, "BODY_END" ) >= 0 ) { $flg = 1; next; }
		if ( $flg == 0 ) { next; }
		$line =~ s/(#)(00)(#)/$cc{LoginID}/g;
		push( @PUTPAGE, $line );
	}

	foreach $line (@PUTPAGE) {
		print $line;
	}

	$sth->finish;
	$dbh->disconnect;
}

#==================================================================
#	数字のカンマ編集
#==================================================================

sub put_comma {
  my $num = $_[0];
  $num = reverse $num;
  $num =~ s/(\d{3})(?=\d)(?!\d*\.)/$1,/g;
  $num = reverse $num;
  return $num
}
