package ibase.webitm.ejb.mfg;

import java.rmi.RemoteException;
import java.util.*;
import java.sql.*;
import javax.ejb.*;

import org.w3c.dom.*;

import ibase.webitm.ejb.*;
import ibase.webitm.ejb.dis.*;
import ibase.webitm.utility.ITMException;
import ibase.webitm.utility.GenericUtility;
import javax.ejb.Stateless; // added for ejb3
import ibase.webitm.ejb.mfg.MfgCommon;

@Stateless // added for ejb3

public class WOrderIssuePrs extends ValidatorEJB implements  WOrderIssuePrsLocal,  WOrderIssuePrsRemote //SessionBean
{
	/*public void ejbCreate() throws RemoteException, CreateException 
	{
	}

	public void ejbRemove()
	{
	}

	public void ejbActivate() 
	{
	}

	public void ejbPassivate() 
	{
	}*/

    public String preSave() throws RemoteException,ITMException
	{
		return "";
	}

	
    public String preSaveRec(String xmlString1,String domId,String objContext,String editFlag, String xtraParams, String windowName, Connection conn)throws RemoteException,ITMException
	{
		System.out.println("WOrderIssuePrsEJB called");
		Document dom = null;
		String errString = "";
		try
		{
			if (xmlString1 != null && xmlString1.trim().length() > 0)
			{
				dom = GenericUtility.getInstance().parseString(xmlString1);
				errString = executePreSaveRec(dom,domId,objContext,editFlag,xtraParams, windowName, conn);
			}		
		}
		catch(Exception e)
		{
			System.out.println("Exception :WOrderIssuePrsEJB ::" + e.getMessage() + ":");
			e.printStackTrace();
			throw new ITMException(e);
		}
		return errString;
	}
	
	private String executePreSaveRec(Document dom, String domID,String objContext,String editFlag, String xtraParams, String windowName, Connection conn)throws RemoteException,ITMException
	{

		Statement stmt = null;
		ResultSet rs = null;
		String siteCodeReq = "", itemCode = "", lineNo = "",locCode = "", lotNo = "", lotSl = "";
		String sql = "", line = "", tranType = "", errString = "";
		HashMap strAllocate = null;
		double quantity = 0d;
		int updateCnt = 0, retVal  = 0;
		java.sql.Date tranDate = null;
		String updateStatus = "",quantityStr = "",tranId = "",stkOpt = "0";
		NodeList hdrDom = null;
		Node currDetail = null;
		InvAllocTraceBean invAllocTrace = new InvAllocTraceBean();
		//added by Tarani 20052008
		String potencyAdjStr = "0";
		 double potencyAdj = 0;
		try
		{
			MfgCommon mfgCommon = new MfgCommon();
			stmt = conn.createStatement();

			tranDate = new java.sql.Date(System.currentTimeMillis());
			System.out.println("\n tranDate :"+tranDate);

			hdrDom = dom.getElementsByTagName("Detail1");
			tranType = GenericUtility.getInstance().getColumnValueFromNode("tran_type",hdrDom.item(0));
			siteCodeReq = GenericUtility.getInstance().getColumnValueFromNode("site_code",hdrDom.item(0));
			tranId = GenericUtility.getInstance().getColumnValueFromNode("tran_id",hdrDom.item(0));

			System.out.println("\n tranId :"+tranId);
			
			currDetail = getCurrentDetailFromDom(dom,domID);
			updateStatus = getCurrentUpdateFlag(currDetail);

			System.out.println("updateStatus :: "+updateStatus);
			
			if (currDetail != null && !updateStatus.equalsIgnoreCase("A"))
			{
				lineNo = GenericUtility.getInstance().getColumnValueFromNode("line_no",currDetail);
//				commented by rajendra on 16/01/08  for taking all parameter from WORKORDER_ISSDET
//				itemCode = GenericUtility.getInstance().getColumnValueFromNode("item_code",currDetail);
//				locCode = GenericUtility.getInstance().getColumnValueFromNode("loc_code",currDetail);
//				lotNo = GenericUtility.getInstance().getColumnValueFromNode("lot_no",currDetail);
//				lotSl = GenericUtility.getInstance().getColumnValueFromNode("lot_sl",currDetail);
				if (updateStatus.equalsIgnoreCase("E") || updateStatus.equalsIgnoreCase("D"))
				{
					//added by Tarani 20052008 POTENCY_ADJ
					
					sql = "SELECT ITEM_CODE,LOC_CODE,LOT_NO,LOT_SL,QUANTITY ,POTENCY_ADJ FROM WORKORDER_ISSDET WHERE TRAN_ID = '"+tranId+"' AND LINE_NO = "+lineNo+"";
					rs = stmt.executeQuery(sql);
					if (rs.next())
					{
						itemCode = rs.getString("item_Code");
						locCode = rs.getString("loc_Code");
						lotNo = rs.getString("lot_No");
						lotSl = rs.getString("lot_Sl");
						quantityStr = rs.getString("QUANTITY");
						//added by Tarani 20052008
						potencyAdjStr = rs.getString("POTENCY_ADJ");
					}
				}
				quantity = Double.parseDouble(quantityStr);
				// 30/03/13 manoharan stk_opt to be considered
				stkOpt = mfgCommon.chkStkOpt(siteCodeReq,itemCode,conn);
				if (!"0".equals(stkOpt))
				{
					//added by Tarani 20052008
					if(potencyAdjStr==null || "null".equalsIgnoreCase(potencyAdjStr))potencyAdjStr="0";
					potencyAdj = Double.parseDouble(potencyAdjStr);
					quantity = quantity+potencyAdj;
						
					if (!tranType.equals("R"))
					{
						line = "   " + lineNo;
						System.out.println("line  :"+line);
						strAllocate = new HashMap();
						strAllocate.put("tran_date",tranDate);
						strAllocate.put("ref_ser","W-ISS");
						strAllocate.put("ref_id",tranId);
						strAllocate.put("ref_line",line.substring(line.length()-3));					
						strAllocate.put("site_code",siteCodeReq);
						strAllocate.put("item_code",itemCode);
						strAllocate.put("loc_code",locCode);
						strAllocate.put("lot_no",lotNo);
						strAllocate.put("lot_sl",lotSl);
						strAllocate.put("alloc_qty",new Double(-1*quantity)); 
						strAllocate.put("chg_user",GenericUtility.getInstance().getValueFromXTRA_PARAMS(xtraParams,"loginCode"));
						strAllocate.put("chg_term",GenericUtility.getInstance().getValueFromXTRA_PARAMS(xtraParams,"termId"));
						strAllocate.put("chg_win",windowName);
						
						errString = invAllocTrace.updateInvallocTrace(strAllocate, conn);
						System.out.println("errString ::: " + errString);

						if (errString == "")
						{
							System.out.println("invAllocTrace.updateInvallocTrace : Sucessuful!");
						}
					}
				} // 30/03/13 manoharan stk_opt considered
			}
		}//try end
		catch (SQLException sqx)
		{
			System.out.println("The SQLException occurs in WOrderIssuePrsEJB :"+sqx);
			sqx.printStackTrace();
			errString = "ERROR";
			throw new ITMException(sqx);
		}
		catch(Exception e)
		{
			System.out.println("The SQLException occurs in WOrderIssuePrsEJB :"+e);			
			e.printStackTrace();
			errString = "ERROR";
			throw new ITMException(e);
		}
		finally
		{
			try
			{
				if(stmt != null)
				{
					stmt.close();
					stmt = null;
				}
				if (rs != null)
				{
					rs.close();
					rs = null;
				}
			}
			catch(Exception e)
			{
				System.err.println("Exception :WOrderIssuePrsEJB :\n"+e.getMessage());
				e.printStackTrace();
				throw new ITMException(e);
			}
			return errString;
		}
		//return errString;
	}

	private Node getCurrentDetailFromDom(Document dom,String domId)
	{
		NodeList detailList = null;
		Node currDetail = null,reqDetail = null;
		String currDomId = "";
		int	detailListLength = 0;

		detailList = dom.getElementsByTagName("Detail2");
		detailListLength = detailList.getLength();
		for (int ctr = 0;ctr < detailListLength;ctr++)
		{
			currDetail = detailList.item(ctr);
			currDomId = currDetail.getAttributes().getNamedItem("domID").getNodeValue();
			if (currDomId.equals(domId))
			{
				reqDetail = currDetail;
				break;
			}			
		}
		return reqDetail;
	}

	private String getCurrentUpdateFlag(Node currDetail)
	{
		NodeList currDetailList = null;
		String updateStatus = "",nodeName = "";
		int currDetailListLength = 0;

		currDetailList = currDetail.getChildNodes();
		currDetailListLength = currDetailList.getLength();
		for (int i=0;i< currDetailListLength;i++)
		{
			nodeName = currDetailList.item(i).getNodeName();
			if (nodeName.equalsIgnoreCase("Attribute"))
			{
				updateStatus = currDetailList.item(i).getAttributes().getNamedItem("updateFlag").getNodeValue();
				break;
			}
		}
		return updateStatus;		
	}
}