﻿//######################################################################
//	ディルマ　フレッシュネス・アクセス　－　製造ライン情報定義
//----------------------------------------------------------------------
//	2005/02/08	Ver1.0	K.Ikeda
//	2005/04/26	Ver1.1	K.Ikeda		日付の制限を追加
//	2007/06/15	Ver2.0	K.Ikeda		バッチコード13桁に変更
//######################################################################
var this_year = (new Date()).getFullYear();		// 今年の西暦年

var kotoshi = this_year;
var sakunen = this_year - 1;

//======================================================================
//	エラー用製造ライン番号
//----------------------------------------------------------------------
var err_line_num	= '999';

//======================================================================
//	バッチコードの内容
//----------------------------------------------------------------------
var year_num	 = 0;				// 製造年の下1桁
var	night_or_day = "";				// 夜or昼
var line_num	 = err_line_num;	// 製造ライン番号
var day_of_year  = 1;				// 年頭からの日数

var line_info	 = null;			// 製造ライン情報

//======================================================================
//	バッチコードをチェックし、必要な項目に分割
//----------------------------------------------------------------------
//	check_batch(batch)
//		batch:		バッチコード（13桁）
//					例）CT70074N23044
//					 0,2	CT		固定
//					 2,1	7		西暦年下1桁
//					 3,4	0074	意味無し
//					 7,1	N		夜or昼（NorD）
//					 8,2	23		ライン
//					10,3	044		月日（元旦から数えて何日目）
//	結果：エラーメッセージを返す。（正常の場合：""）
//	　　　以下のグローバル変数をセットする。
//			year_num		製造年の下1桁
//			night_or_day	夜or昼
//			line_num		製造ライン番号
//			day_of_year 	年頭からの日数
//----------------------------------------------------------------------
function check_batch(batch) {
	var errmsg = "";
	var	line_check = true;	// 製造ラインチェック状態
	var	date_check = true;	// 日付チェック状態
	//---- 未入力チェック、桁数チェック
	if (batch == "" || batch.length != 13 || ! batch.match(/^CT/i)) {
		errmsg = "製造コードを13桁全てご入力ください。\n";
		return errmsg;
	}
	year_num	 = batch.substr(2,1);
	if (! year_num.match(/^[0-9]{1}$/)) {
		errmsg += "3桁目は数字をご入力下さい。\n";
		date_check = false;
	}
	night_or_day = batch.substr(7,1);
	if (! night_or_day.match(/^[DN]{1}$/i)) {
		errmsg += "8桁目は'D'または'N'をご入力下さい。\n";
	}
	line_num	 = batch.substr(8,2);
	if (! line_num.match(/^[0-9]{2}$/)) {
		errmsg += "9桁目からは数字2桁をご入力下さい。\n";
		line_check = false;
	}
	day_of_year	 = batch.substr(10,3);
	if (! day_of_year.match(/^[0-9]{3}$/)) {
		errmsg += "11桁目からは数字3桁をご入力下さい。\n";
		date_check = false;
	}
	//---- 日付制限
	if (date_check && errmsg == "") {
		// 製造年
		var yyyy = get_yyyy(year_num);
		if (yyyy < year_min || year_max < yyyy) {
			errmsg += "ご入力いただいた製造コードは現在使われておりません。もう一度ご確認ください。\n";
			date_check = false;
		}
	}
	if (date_check) {
		// 製造日
		var days_in_year = get_days_in_year(year_num);
		if (day_of_year < 1 || days_in_year < day_of_year) {
			if (errmsg == "") {
				errmsg += "ご入力いただいた製造コードは登録されておりません。もう一度ご確認ください。\n";
			}
			date_check = false;
		}
	}
	//---- 製造ライン情報
	if (line_check) {
		line_info = search_line(line_num);
		if (! line_info) {
			if (errmsg == "") {
				errmsg += "ご入力いただいた製造コードは登録されておりません。もう一度ご確認ください。\n";
			}
			line_num = err_line_num;
			line_info = search_line(line_num);
			line_check = false;
		}
	}
	return errmsg;
}

//======================================================================
//	製造ライン情報定義から製造ライン番号で検索
//----------------------------------------------------------------------
//	search_line(line_num)
//		line_num:		製造ライン番号（2～3桁）
//	結果：製造ライン情報オブジェクトを返す。（未定義の場合：null）
//----------------------------------------------------------------------
function search_line(line_num) {
	var line_info = null;
	for (var i=0; i<line_info_array.length; i++) {
		if (line_info_array[i].id == line_num) {
			line_info = line_info_array[i];
		}
	}
	return line_info;
}

//======================================================================
//	製造年（西暦）下1桁より西暦年4桁を得る
//----------------------------------------------------------------------
//	get_yyyy(year_num)
//		year_num:		製造年（西暦）下1桁
//	結果：製造年（西暦）4桁（数値）を返す。
//----------------------------------------------------------------------
function get_yyyy(year_num) {
	var this_year = (new Date()).getFullYear();		// 今年の西暦年
	var yyyy = 2000 + Number(year_num);				// 製造年の下1桁に2000を加算
	while ((this_year - yyyy) >= 10) yyyy += 10;	// 今年より10年以内に調整
	return yyyy;
}

//======================================================================
//	製造年（西暦）下1桁より1年間の日数を得る
//----------------------------------------------------------------------
//	get_days_in_year(year_num)
//		year_num:		製造年（西暦）下1桁
//	結果：製造年1年間の日数（数値）を返す。
//----------------------------------------------------------------------
function get_days_in_year(year_num) {
	var yyyy = get_yyyy(year_num);
	var dt_this_year = (new Date(yyyy, 0, 1, 0, 0, 0)).getTime();	// 製造年の1月1日
	var dt_next_year = (new Date(yyyy+1, 0, 1, 0, 0, 0)).getTime();	// 製造年翌年の1月1日
	var secs = dt_next_year - dt_this_year;
	var days = Math.round(secs / (3600000 * 24));
	return days;
}

