/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	Face2Faceログ更新アクションクラス
//
//		変更履歴
//			2005.02.18  新規作成  梅原 浩司
//
//	機能
//
//	このクラスはFace2Faceログ更新画面のアクションクラスです。
//
////////////////////////////////////////////////////////////////

package jp.co.ntt.lms.xmf.actions.lo.face2face;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;

import java.util.*;
import java.text.DecimalFormat;

import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.xmo.util.XMODate;
import jp.co.ntt.lms.xmo.Assignments.AssignmentsClient;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.People.PeopleClient;
import jp.co.ntt.lms.lo.LoLogRecord;

import jp.co.ntt.lms.xmf.common.CommonFunction;

/**
 *  Face2Faceログ更新アクションクラス
 * 
 *  このクラスはFace2Faceログ更新面のアクションクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class Face2FaceLogUpdateAction extends Action {

	/**
	 * executeメソッド
	 * 
	 * @param ActionMapping このアクションが選択されたときに使用されたActionMapping
	 * @param ActionForm 入力フォーム
	 * @param HttpServletRequest HTTPリクエスト
	 * @param HttpServletResponse HTTPレスポンス
	 * @return ActionForward アクションフォワード
	 * @throws Exception 
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {


		// メッセージリソース取得
		MessageResources resCnt = getResources(request, "msg.xmf.lo.Face2Face.MessageResources");
		MessageResources resMsg = getResources(request, "msg.xmf.xmo.People.PeopleMessage");
		
		// キャッシュ無効処理
		response.setHeader("cache-control", "no-cache");
		
		String strLoID = "";
		String strLoType = "";
		String strReturnURL = "";
		String strAction = "";
		String strPass = "";	//合格日
		String strEnd = "";		//修了日
		int intCount = 0;
		String strUserID = "";
		String[] strUpdateInfo = new String[4];
		//現在の日付を取得します
		//XMODate objDate = new XMODate();
		Date currrentdate = new Date();
		String StrCurrentDate = XMODate.parseTime(currrentdate);

		//Field名称
		String EXECISE_POINT = "execise_point";		// 得点
		String PASSDAY = "passday";					// 合格日
		String STUDY_END_DATE = "study_end_date";	// 修了日
		String USERID = "UserID";					// ユーザID
		String LOID = "LOID";						// LOID

		// URLパラメータの取得
		strLoID = request.getParameter( "LoID" );
		strLoType = request.getParameter( "LoType" );
		strReturnURL = request.getParameter( "returnURL" );
		strAction = request.getParameter( "act" );

		///////////////////////////////////////////
		// RealLOID取得
		///////////////////////////////////////////
		LoClient objLoClient = new LoClient();
		String strRealLoID = "";
		if(objLoClient.getRealLOIDFromLOID(strLoID)){
			strRealLoID = objLoClient.getRealLOIDResult();
		}
		else{
			// 検索がうまくいかなかった場合
			if( objLoClient.isErr() ) {
				// エラーの場合
				response.sendRedirect( objLoClient.getURL() );
			}
			else {
				String strMessage =  objLoClient.getMessage();
				response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
			}
		}
		// Loサーバ名を取得する
		Environment objEnv = null;
		String strLoServerName = null;
		try{
			objEnv = new Environment();
		}catch(Exception e){
			response.sendRedirect( CommonFunction.getParamErrURL( resCnt.getMessage("STR_FILE_ACCESS_ERR"), null, true ) );
		}
		try{
			strLoServerName = objEnv.getLoServerName();
		}catch(Exception e){
			response.sendRedirect( CommonFunction.getParamErrURL( resCnt.getMessage("STR_ENV_ERR"), null, true ) );
		}

		int intCnt = 0;
		String strCnt = "";
		Vector objLoLog = new Vector();
		LoTopClient objLoTop = new LoTopClient( strLoServerName, strLoType );
		Vector vecUserList = new Vector();	// アサインユーザリスト

		try{
			// アクションフラグが設定されている場合は送信情報を取得します
			if( strAction != null && strAction.equals( "on" ) ) {
				// URLパラメータの取得
				intCount = Integer.parseInt(request.getParameter( "RecordCnt" ));
				
				for (int cnt1=0;cnt1<intCount;cnt1++){	
					//更新項目のnameを取得
					String strUser_ID = "userid" + new Integer(cnt1).toString();
					String strExecizePointName = "exersizepoint" + new Integer(cnt1).toString();
					String strPassDayName = "passday" + new Integer(cnt1).toString();
					String strStudyEndDateName = "studyend" + new Integer(cnt1).toString();
					//更新項目のvalueを取得
					strUpdateInfo[0] = request.getParameter( strUser_ID );			//ユーザーID
					strUpdateInfo[1] = request.getParameter( strExecizePointName );	//得点
					strUpdateInfo[2] = request.getParameter( strPassDayName );		//合格日
					strUpdateInfo[3] = request.getParameter( strStudyEndDateName );	//修了日

						//---------
						// 更新処理
						//---------
						//パラメーターをクリア
						objLoTop.clear();
						
						//共通ログ更新項目をセットします
						//SQL編集フラグ
						//得点
						objLoTop.setValue(EXECISE_POINT, strUpdateInfo[1] );
						//合格日
						if(strUpdateInfo[2] != null && strUpdateInfo[2].equals("passed")){
							objLoTop.setValue(PASSDAY, StrCurrentDate );	//合格
						}
						//修了日
						if(strUpdateInfo[3] != null && strUpdateInfo[3].equals("ended")){
							objLoTop.setValue(STUDY_END_DATE, StrCurrentDate );	//修了日
						}
						
						//更新条件
						objLoTop.setValue(LOID, strRealLoID);			//RealLOID
						objLoTop.setValue(USERID, strUpdateInfo[0]);	//ユーザID
						
						// 更新処理の実行
						if( !objLoTop.execute( "updateLoLog" ) ) {
							// 更新がうまくいかなかった場合
							MessageData objMessage = objLoTop.getMessageData();
							response.sendRedirect( objMessage.getURL() );
						}
				}
			}
			
			//--------
			//検索処理
			//--------
			
			// 表示するユーザリストを取得します。
			AssignmentsClient objAssignments = new AssignmentsClient();
			if(!objAssignments.getUserList(strLoID)){
				// エラーの場合
				response.sendRedirect( objAssignments.getURL() );
			}else{
				vecUserList = objAssignments.getUserListResult();
			}
			
			//パラメーターをクリア
			objLoTop.clear();
			
			//検索条件を設定
			objLoTop.setValue(LOID, strRealLoID);
			
			// 検索処理
			if( !objLoTop.execute( "selectLoLog" )  ) {
				// 検索がうまくいかなかった場合
				MessageData objMessage = objLoTop.getMessageData();
				response.sendRedirect( objMessage.getURL() );
			}

			// 検索がうまくいった場合はデータを取得する
			objLoLog = (Vector)objLoTop.getExecute();
			intCnt = vecUserList.size();
			strCnt = new Integer(intCnt).toString();
		}catch(Exception e){
			e.printStackTrace();
			response.sendRedirect(CommonFunction.getParamErrURL(resCnt.getMessage("STR_SYS_ERR") + "<br>" + e.getMessage(), null, true));
		}

		Vector vecUserName = new Vector();
		Vector vecLoLog = new Vector();
		Vector vecExecisePointList = new Vector();

		for( int j = 0; j < vecUserList.size(); j++ ) {

			//ユーザーIDよりユーザー名を取得
			strUserID = (String)vecUserList.get(j);
			PeopleClient objPeople = new PeopleClient();
			objPeople.setWhereUserID(strUserID);
			if( !objPeople.select() ) {
				// 検索がうまくいかなかった場合
				if( objPeople.isErr() ) {
					// エラーの場合
					response.sendRedirect( objPeople.getURL() );
				}
				else {
					String strMessage =  objPeople.getMessage();
					response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
				}
			}
			String strUserName_o = "";
			if( objPeople.next() ) {
				//ユーザー名
				strUserName_o = objPeople.getUserName();
				vecUserName.add(strUserName_o);
			}
			else {
				//ユーザー名が存在しない場合エラーを出力する
				String strMessage =  resMsg.getMessage("M032010");
				response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
			}

			//パラメーターをクリア
			objLoTop.clear();
			
			//検索条件を設定
			objLoTop.setValue(LOID, strRealLoID);
			objLoTop.setValue(USERID, (String)vecUserList.get(j));
			
			// 検索処理
			if( !objLoTop.execute( "selectLoLog" )  ) {
				// 検索がうまくいかなかった場合
				MessageData objMessage = objLoTop.getMessageData();
				response.sendRedirect( objMessage.getURL() );
			}

			// 検索がうまくいった場合はデータを取得する
			objLoLog = (Vector)objLoTop.getExecute();
			vecLoLog.add(objLoLog);

			intCnt = objLoLog.size();
			String strExecisePoint 	= "";	//得点
			Vector vecExecisePoint = new Vector();
			for( int i = 0; i < intCnt; i++ ) {
				LoLogRecord objLoLogRecord = (LoLogRecord)objLoLog.elementAt(i);
				strExecisePoint 	= objLoLogRecord.getExecisePoint();				// 得点
				DecimalFormat objFormat = new DecimalFormat( "#" );
				if( strExecisePoint == null ){
					strExecisePoint = "";
				}
				else{
					strExecisePoint = objFormat.format(Double.parseDouble( strExecisePoint ) );
				}
				vecExecisePoint.add(strExecisePoint);
			}
			vecExecisePointList.add(vecExecisePoint);
		}

		request.setAttribute("strAction", strAction);
		request.setAttribute("strReturnURL", strReturnURL);
		request.setAttribute("strLoID", strLoID);
		request.setAttribute("strLoType", strLoType);
		request.setAttribute("strCnt", strCnt);
		request.setAttribute("vecUserList", vecUserList);
		request.setAttribute("vecUserName", vecUserName);
		request.setAttribute("vecLoLog", vecLoLog);
		request.setAttribute("vecExecisePointList", vecExecisePointList);
		
		return mapping.findForward("success");
	}
}
