#!/usr/bin/perl --



use CGI::Carp qw(fatalsToBrowser);

# =========================================================================

#	[ CART.CGI ] 作成者:株式会社ニーズ 日付:2004/09/01

#	 Description : カートプログラム

#	 Copyright (C) NEEZ Co.,Ltd. 2002 All Rights Reserved.

# ------------------------------------------------------------------------

#	※当ＣＧＩプログラムの著作権は株式会社ニーズに帰属します

#	　著作者に無断で改変・配布・譲渡する事は原則として禁止致します

# =========================================================================



	require '../../lib/toms.pl';

	require '../../lib/config.pl';



	# フォーム読み込み

	%FORM = &toms'read_input('sjis',1);



	# クッキー読み込み

	$CK = &toms'read_cookie($cookie_header);

	%COOKIE = %$CK;



	# モード分岐

	$mode = $FORM{'MODE'};

	delete $FORM{'MODE'};

	goto "MODE".sprintf("%d",$mode);



# ------------------------------------

#	初期画面表示

# ------------------------------------

MODE0:



	# カートの中身を計算

	&CAL_CART;



	# 画面表示

	&toms'OutputTEXT(0,"cart01.html",\%FORM,\@OUT);

	exit;



# ------------------------------------

#	カートに入れる

# ------------------------------------

MODE1:



	# カートクッキーを持っているのか？

	if ($COOKIE{'CART'} !~ /^[0-9]+$/){

		opendir DIR,"tmp/";

		@dir = readdir DIR;

		closedir DIR;

		$new = 1;

		foreach (@dir){

			if ($_ =~ /^([0-9]+)\.dat$/ && $new <= $1){ $new = $1 + 1; }

		}

		$COOKIE{'CART'} = sprintf("%08d",$new);

		&toms'write_cookie(\%COOKIE,120);

	}



	# 商品データ読み込み

	@items = &toms'FileOPEN(0,"../../data/item.dat");

	foreach $rd(@items){

		@P = split /<>/,$rd;

		if ($P[1] eq $FORM{'ITEM'}){ @DAT = @P; last; }

	}

	if (@DAT == 0){ &ErrPAGE('商品データが見付りませんでした'); }



	# 商品データを作成(数量除く)

	$RET = "$FORM{'ITEM'}<>$P[3]<>$FORM{'SIZE'}<>$P[2]<>$P[5]";



	# 数量指定が無ければ１個とみなす

	if ($FORM{'SS'} eq ""){ $FORM{'SS'} = 1; }



	# カートデータ読み込み

	@cart = &toms'FileOPEN(0,"tmp/$COOKIE{'CART'}\.dat");



	# 既にカートに入っていれば数量を増加、入っていなければ追加

	$fnd = 0;

	undef @new_cart;

	foreach $it(@cart){

		@P = split /<>/,$it;

		$a = substr($it,0,length($RET));

		if ($RET eq $a){ $P[5] += $FORM{'SS'}; $fnd = 1; }

		push @new_cart,join("<>",@P);

	}

	if ($fnd != 1){ push @new_cart,"$RET<>$FORM{'SS'}"; }

	&toms'FileOPEN(1,"tmp/$COOKIE{'CART'}\.dat",@new_cart);



	# リスト表示

	goto MODE0;



# ------------------------------------

#	カートから出す

# ------------------------------------

MODE2:



	# カートデータを読み込み

	@cart = &toms'FileOPEN(0,"tmp/$COOKIE{'CART'}\.dat");



	# 削除処理

	undef @savdat;

	foreach $a(0..@cart-1){

		@P = split /<>/,$cart[$a];

		if ($FORM{'DEL_'.$P[0].'_'.$P[2]} ne 'ON'){ push @savdat,$cart[$a]; }

	}



	# 更新保存

	&toms'FileOPEN(1,"tmp/$COOKIE{'CART'}\.dat",@savdat);



	# リスト表示

	goto MODE0;



# ------------------------------------

#	フォームを表示

# ------------------------------------

MODE3:



	# カートの中身を計算

	&CAL_CART;



	# カートデータを読み込み

	@cart = &toms'FileOPEN(0,"tmp/$COOKIE{'CART'}\.dat");

	if (@cart == 0){

		&toms'OutputTEXT(0,"cart00.html",\%FORM);

		exit;

	}

	# データ掃除

	foreach $key(keys %FORM){ $FORM{$key} = &toms'Sweep($FORM{$key}); }


	# プルダウン生成(都道府県・血液型・職業)

	foreach $rd('4:CITY','11:CITY','15:MCD','32:BLOOD','34:JOB'){

		($x,$y) = split /:/,$rd;

		$FORM{'S_D'.$x} = "<OPTION value=\"\">選択して下さい</OPTION>\n";

		foreach $a(1..@{$y}-1){ 
		
			if (${$y}[$a] eq $FORM{'D'.$x}) {
				$FORM{'S_D'.$x} .= "<OPTION selected>${$y}[$a]</OPTION>\n"; 
			} else {
				$FORM{'S_D'.$x} .= "<OPTION>${$y}[$a]</OPTION>\n"; 
			}			
		}

	}

	if ($FORM{'D14'} eq '代金引換え') { $FORM{'D14a'} = "checked" ;}
	if ($FORM{'D14'} eq '銀行振込') { $FORM{'D14b'} = "checked" ;}

	if ($FORM{'D17'} eq 'ON - 希望する') { $FORM{'D17a'} = "checked" ;}
	if ($FORM{'D17'} eq 'OFF - 希望しない又は登録済み') { $FORM{'D17b'} = "checked" ;}

	if ($FORM{'D30'} eq '男性') { $FORM{'D30a'} = "checked" ;}
	if ($FORM{'D30'} eq '女性') { $FORM{'D30b'} = "checked" ;}

	# 画面表示

	&toms'OutputTEXT(0,"cart02.html",\%FORM,\@OUT);

	exit;





# ------------------------------------

#	確認画面を表示

# ------------------------------------

MODE4:



	# カートの中身を計算

	&CAL_CART;



	# データ掃除

	foreach $key(keys %FORM){ $FORM{$key} = &toms'Sweep($FORM{$key}); }



	# 電話番号ジョイント

	foreach $x(6,13){

		$FORM{'D'.$x} = $FORM{'D'.$x.'a'}.$FORM{'D'.$x.'b'}.$FORM{'D'.$x.'c'};

	#	foreach $a('a','b','c'){ delete $FORM{'D'.$x.$a}; }

	}



	# 生年月日ジョイント

	undef @set;

	if ($FORM{'D31a'} ne ""){ push @set,"$FORM{'D31a'}年"; }

	if ($FORM{'D31b'} ne ""){ push @set,"$FORM{'D31b'}月"; }

	if ($FORM{'D31c'} ne ""){ push @set,"$FORM{'D31c'}日"; }

	$FORM{'D31'} = join("",@set);

#	foreach $a('a','b','c'){ delete $FORM{'D31'.$a}; }



	# メールマガジン

	if ($FORM{'D17'} eq 'ON'){ $FORM{'D17'} = 'ON - 希望する'; }

	elsif ($FORM{'D17'} eq 'OFF'){ $FORM{'D17'} = 'OFF - 希望しない又は登録済み'; }



	# 入力検査

	$m1 = 'が記入されていません';

	$m2 = 'が選択されていません';

	$m3 = 'が間違っています';

	$m4 = 'を入力しないで下さい';



	if ($FORM{'D1'} eq ""){ push @err,'・お名前'.$m1; }

	if ($FORM{'D2'} eq ""){ push @err,'・フリガナ'.$m1; }

	if ($FORM{'D3'} eq ""){ push @err,'・郵便番号'.$m1; }

	elsif ($FORM{'D3'} !~ /^[0-9]{3}[\-]*[0-9]{4}$/){ push @err,'・郵便番号は半角数字７桁で入力して下さい'; }

	if ($FORM{'D4'} eq ""){ push @err,'・都道府県'.$m2; }

	if ($FORM{'D5'} eq ""){ push @err,'・住所'.$m1; }

	if ($FORM{'D6'} eq ""){ push @err,'・電話番号'.$m1; }

	elsif ($FORM{'D6'} !~ /^[0-9]{10,11}$/){ push @err,'・電話番号は半角数字10桁（携帯は11桁）で市外局番から入力して下さい'; }

	if ($FORM{'D7'} eq ""){ push @err,'・メールアドレス'.$m1; }

	elsif (&toms'MailCheck($FORM{'D7'})){ push @err,'・メールアドレスが間違っています'; }

	if ($FORM{'D8'}.$FORM{'D9'}.$FORM{'D10'}.$FORM{'D11'}.$FORM{'D12'}.$FORM{'D13'} ne ""){

		if ($FORM{'D8'} eq ""){ push @err,'・発送先のお名前'.$m1; }

		if ($FORM{'D9'} eq ""){ push @err,'・発送先のフリガナ'.$m1; }

		if ($FORM{'D10'} eq ""){ push @err,'・発送先の郵便番号'.$m1; }

		elsif ($FORM{'D10'} !~ /^[0-9]{3}[\-]*[0-9]{4}$/){ push @err,'・発送先の郵便番号は半角数字７桁で入力して下さい'; }

		if ($FORM{'D11'} eq ""){ push @err,'・発送先の都道府県'.$m2; }

		if ($FORM{'D12'} eq ""){ push @err,'・発送先の住所'.$m1; }

		if ($FORM{'D13'} eq ""){ push @err,'・発送先の電話番号'.$m1; }

		elsif ($FORM{'D13'} !~ /^[0-9]{10,11}$/){ push @err,'・発送先の電話番号は半角数字10桁（携帯は11桁）で市外局番から入力して下さい'; }

	}

	if ($FORM{'D14'} eq ""){ push @err,'・お支払い方法'.$m2; }

	if (@err){ &ErrPAGE(join("<BR>\n",@err)); }



	# HIDDEN作成

	@key = keys %FORM;

	foreach (@key){ $FORM{'HIDDEN'} .= "<INPUT type=hidden name=\"$_\" value=\"$FORM{$_}\">\n"; }



	# 画面表示

	&toms'OutputTEXT(0,"cart03.html",\%FORM,\@OUT);

	exit;





# ------------------------------------

#	送信完了

# ------------------------------------

MODE5:



	# カートの中身を計算

	&CAL_CART;



	# 商品一覧表を作成

	$FORM{'SHOPPING'} = "";

	foreach $rd(@OUT){

		@P = split /<>/,$rd;

		$tp = $P[4];

		$tp =~ s/,//g;

		$price = &toms'Yendot($tp * $P[5]);

		$FORM{'SHOPPING'} .= "□$P[0] - $P[1] × $P[5]個 ($price円)\n";

	}

	$FORM{'SHOPPING'} .= "小計金額：".&toms'Yendot($FORM{'SHOKEI'})."円\n";

	$FORM{'SHOPPING'} .= "郵送料　：".&toms'Yendot($FORM{'POSTAL'})."円\n";

	$ks = $FORM{'TESU'};

	$ks =~ s/,//g;

	if ($ks != 0){

		$FORM{'SHOPPING'} .= "手数料　：".&toms'Yendot($FORM{'TESU'})."円\n";

	}

	$FORM{'SHOPPING'} .= "合計金額：".&toms'Yendot($FORM{'TOTAL'})."円\n";



	# 改行修正

	$FORM{'D18'} =~ s/<BR>/\n/g;



	# 利用者情報取得

	$FORM{'USER'} = $ENV{'HTTP_USER_AGENT'}."/".&toms'GetHOST;



	# 注文番号を取得

	@ocnt = &toms'FileOPEN(0,"order_number.dat");

	$ocnt[0]++;

	$FORM{'ORDER_NO'} = $ocnt[0];

	&toms'FileOPEN(1,"order_number.dat",@ocnt);



	# 注文日を設定

	$today = &toms'get_local_time('num');

	$FORM{'ORDER_DATE'} = substr($today,0,4).'年'.substr($today,4,2).'月'.substr($today,6,2).'日';



	# メール送信(お客さま宛)

	$MAIL{'FROM'} = $admin_mail;

	$MAIL{'TO'}   = $FORM{'D7'};

	$MAIL{'ADMIN'} = $admin_mail;

	$MAIL{'COMMENT'} = &toms'OutputTEXT(1,"mail_user.txt",\%FORM);

	&toms'sendmail($sendmailpath,\%MAIL,$mailmode);



	# メール送信(管理者宛)

	$MAIL{'TO'} = $admin_mail;

	$MAIL{'FROM'}   = $FORM{'D7'};

	$MAIL{'ADMIN'} = $admin_mail;

	$MAIL{'COMMENT'} = &toms'OutputTEXT(1,"mail_admin.txt",\%FORM);

	&toms'sendmail($sendmailpath,\%MAIL,$mailmode);



	# カートを消す

	if ($delete_tmp == 1){

		&toms'write_cookie(\%COOKIE,0);

		unlink "tmp/$COOKIE{'CART'}\.dat";

	}



	# 画面表示

	&toms'OutputTEXT(0,"cart04.html",\%FORM);

	exit;





# ============================================================

#	カートの中身を計算

	sub CAL_CART

	{

		# カートデータを読み込み

		@cart = &toms'FileOPEN(0,"tmp/$COOKIE{'CART'}\.dat");

		if (@cart == 0){

			&toms'OutputTEXT(0,"cart00.html",\%FORM);

			exit;

		}



		# 入っていればリスト表示

		undef @OUT;

		$SHOKEI = 0;

		foreach $it(@cart){

			@P = split /<>/,$it;

			@S = @P;

			$P[6] = &toms'Yendot($S[4] * $S[5]);

			$P[4] = &toms'Yendot($S[4]);

			push @OUT,join("<>",@P);

			$SHOKEI += $S[4]*$S[5];

		}



#		# 消費税計算

#		$TAX = int($SHOKEI * 0.05);



		# 郵送料計算

		if ($FORM{'D14'} eq '銀行振込'){ $POSTAL = 500; }

		else {

			if ($FORM{'D11'} ne ""){ $SELECTED_AREA = $FORM{'D11'}; }

			else { $SELECTED_AREA = $FORM{'D4'}; }

			$POSTAL = 0;

			foreach $rd(@POSF){

				($area,$price) = split /<>/,$rd;

				if (index($area,$SELECTED_AREA) >= 1){ $POSTAL = $price; }

			}

		}



		# 手数料計算

		if ($FORM{'D14'} eq '代金引換え'){

			$skp = $SHOKEI + $POSTAL;

			if    ($skp <=   10000){ $TESU = 315; }

			elsif ($skp <=   30000){ $TESU = 420; }

			elsif ($skp <=  100000){ $TESU = 630; }

			elsif ($skp <=  300000){ $TESU = 1050; }

			elsif ($skp <=  500000){ $TESU = 2100; }

			elsif ($skp <= 1000000){ $TESU = 3150; }

			else                   { $TESU = 4200; }

		} else { $TESU = 0; }



		# 合計金額計算

		$TOTAL = $SHOKEI + $TAX + $POSTAL + $TESU;



		# 表示用変換

		foreach ('SHOKEI','TAX','POSTAL','TOTAL','TESU'){ $FORM{$_} = &toms'Yendot(${$_}); }

	}

# ============================================================

	# 汎用エラー画面

	sub ErrPAGE

	{

		my $msg = $_[0];

		@key = keys %FORM;
	
		foreach (@key){ $FORM{'HIDDEN'} .= "<INPUT type=hidden name=\"$_\" value=\"$FORM{$_}\">\n"; }
		
		$FORM{'MESSAGE'} = $msg;

		&toms'OutputTEXT(0,"cart99.html",\%FORM);

		exit;

	}

# ============================================================

