package wenrgise.hrms.ejb.business;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import wenrgise.common.bean.BaseHeaderBean;
import wenrgise.common.bean.LOVBean;
import wenrgise.common.ejb.business.HrmCommonBO;
import wenrgise.common.exception.EnrgiseApplicationException;
import wenrgise.common.exception.EnrgiseMessageKeyException;
import wenrgise.common.exception.EnrgiseSystemException;
import wenrgise.common.utility.EnrgiseUtil;
import wenrgise.common.utility.MessageKey;
import wenrgise.common.utility.RecordMetaInfo;
import wenrgise.common.utility.UserInfo;
import wenrgise.common.vo.LovQueryVO;
import wenrgise.common.vo.LovVO;
import wenrgise.ejb.common.helper.DBObject;
import wenrgise.ejb.common.helper.QueryRow;
import wenrgise.ejb.common.helper.QueryValue;
import wenrgise.ejb.common.utility.DBUtilitiesBean;
import wenrgise.hrms.bean.HrmEmpClaimDtlBean;
import wenrgise.hrms.bean.HrmEmpClaimHdrBean;
import wenrgise.hrms.vo.HrmEmpClaimQVO;

public class HrmEmpClaimBO extends HrmBaseBO {
  public HrmEmpClaimBO() {}
  
  public HrmEmpClaimBO(UserInfo oUserInfo) {
    super(oUserInfo);
  }
  
  public RecordMetaInfo getHrmEmpClaimDetailMetaInfo(HrmEmpClaimQVO oHrmEmpClaimQVO) throws EnrgiseApplicationException, EnrgiseSystemException {
    ArrayList arylstParam = new ArrayList();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    if (EnrgiseUtil.checkString(oHrmEmpClaimQVO.getHeaderPrimaryKey())) {
      String[] sPrimaryKey = oHrmEmpClaimQVO.getHeaderPrimaryKey().split(",");
      System.out.println(sPrimaryKey[0]);
      System.out.println(sPrimaryKey[1]);
      oHrmEmpClaimQVO.setClaimCodeId(sPrimaryKey[0]);
      oHrmEmpClaimQVO.setStartDate(sPrimaryKey[1]);
      oHrmEmpClaimQVO.setEndDate(sPrimaryKey[2]);
    } 
    arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, oHrmEmpClaimQVO.getEmpId()));
    arylstParam.add(new DBObject(2, 1, 12, oHrmEmpClaimQVO.getClaimCodeId()));
    arylstParam.add(new DBObject(3, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimQVO.getStartDate())));
    arylstParam.add(new DBObject(4, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimQVO.getEndDate())));
    arylstParam.add(new DBObject(5, 1, 12, oHrmEmpClaimQVO.getClaimNo()));
    arylstParam.add(new DBObject(6, 1, 12, oHrmEmpClaimQVO.getPeriod()));
    arylstParam.add(new DBObject(7, 1, 12, oHrmEmpClaimQVO.getEmpDtlId()));
    arylstParam.add(new DBObject(8, 2, -5));
    arylstParam.add(new DBObject(9, 2, 93));
    arylstParam.add(new DBObject(10, 2, 12));
    arylstParam.add(new DBObject(11, 2, 12));
    arylstParam.add(new DBObject(12, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.procHrmEmpClaimDtlCount(?,?,?,?,?,?,?,?,?,?,?,?)");
    RecordMetaInfo oRecordMetaInfo = new RecordMetaInfo();
    DBObject oTotalRecord = arylstOutArray.get(0);
    oRecordMetaInfo.setRecordCount(((Long)oTotalRecord.getObject()).longValue());
    DBObject oTimeObject = arylstOutArray.get(1);
    oRecordMetaInfo.setOWhenPicked((Timestamp)oTimeObject.getObject());
    return oRecordMetaInfo;
  }
  
  public ArrayList getHrmEmpClaimDetail(HrmEmpClaimQVO oHrmEmpClaimQVO, long lDetailFirstPosition, long lDetailLastPosition) throws EnrgiseApplicationException, EnrgiseSystemException {
    ArrayList arylstParam = new ArrayList();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    int count = 0;
    if (EnrgiseUtil.checkString(oHrmEmpClaimQVO.getHeaderPrimaryKey())) {
      String[] sPrimaryKey = oHrmEmpClaimQVO.getHeaderPrimaryKey().split(",");
      System.out.println(sPrimaryKey[0]);
      System.out.println(sPrimaryKey[1]);
      oHrmEmpClaimQVO.setClaimCodeId(sPrimaryKey[0]);
      oHrmEmpClaimQVO.setStartDate(sPrimaryKey[1]);
      oHrmEmpClaimQVO.setEndDate(sPrimaryKey[2]);
    } 
    QueryRow oRow = null;
    QueryValue oValue = null;
    ArrayList arylstList = null;
    Iterator itrBean = null;
    ArrayList arylstHrmEmpClaim = null;
    arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, oHrmEmpClaimQVO.getEmpId()));
    arylstParam.add(new DBObject(2, 1, -5, new Long(lDetailFirstPosition)));
    arylstParam.add(new DBObject(3, 1, -5, new Long(lDetailLastPosition)));
    arylstParam.add(new DBObject(4, 1, 12, oHrmEmpClaimQVO.getClaimCodeId()));
    arylstParam.add(new DBObject(5, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimQVO.getStartDate())));
    arylstParam.add(new DBObject(6, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimQVO.getEndDate())));
    arylstParam.add(new DBObject(7, 1, 12, oHrmEmpClaimQVO.getClaimNo()));
    arylstParam.add(new DBObject(8, 1, 12, oHrmEmpClaimQVO.getPeriod()));
    arylstParam.add(new DBObject(9, 1, 12, oHrmEmpClaimQVO.getEmpDtlId()));
    arylstParam.add(new DBObject(10, 2, -10));
    arylstParam.add(new DBObject(11, 2, 12));
    arylstParam.add(new DBObject(12, 2, 12));
    arylstParam.add(new DBObject(13, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.prochrmempclaimdetail(?,?,?,?,?,?,?,?,?,?,?,?,?)");
    arylstList = (ArrayList)((DBObject)arylstOutArray.get(0)).getObject();
    if (arylstList.size() == 0)
      throw new EnrgiseApplicationException("wenrgise.hrms.norecordfound", "M"); 
    count = 0;
    itrBean = arylstList.iterator();
    while (itrBean.hasNext()) {
      if (count == 0)
        arylstHrmEmpClaim = new ArrayList(); 
      count++;
      oRow = itrBean.next();
      HrmEmpClaimDtlBean oHrmEmpClaimDtlBean = new HrmEmpClaimDtlBean();
      oHrmEmpClaimDtlBean.setDetailId(oRow.get("ID").getString());
      oHrmEmpClaimDtlBean.setTxtApplnDate(EnrgiseUtil.convertToString(oRow.get("APPLICATION_DATE").getDate()));
      oHrmEmpClaimDtlBean.setTxtApprovalDate(EnrgiseUtil.convertToString(oRow.get("SANCTION_DATE").getDate()));
      oHrmEmpClaimDtlBean.setTxtAppliedAmount(oRow.get("APPLIED_AMOUNT").getString());
      oHrmEmpClaimDtlBean.setTxtApprovedAmount(oRow.get("SANCTIONED_AMOUNT").getString());
      oHrmEmpClaimDtlBean.setTxtApproverId(oRow.get("APPROVED_BY").getString());
      oHrmEmpClaimDtlBean.setTxtApprovedBy(oRow.get("APPROVER_NAME").getString());
      oHrmEmpClaimDtlBean.setTxtEligibleAmount(oRow.get("ELIG_AMT").getString());
      oHrmEmpClaimDtlBean.setTxtEmpId(oRow.get("E_PER_DTL_ID").getString());
      oHrmEmpClaimDtlBean.setTxtEmployeeName(oRow.get("EMPNAME").getString());
      oHrmEmpClaimDtlBean.setTxtEmployeeNo(oRow.get("EMP_NO").getString());
      oHrmEmpClaimDtlBean.setTxtPayrollFlag(oRow.get("PAYROLL_FLAG").getString());
      oHrmEmpClaimDtlBean.setTxtReimbursementTillDate(oRow.get("REIMBURSED_TILL_DATE").getString());
      oHrmEmpClaimDtlBean.setTxtClaimDtlId(oRow.get("CLAIM_DTL_ID").getString());
      oHrmEmpClaimDtlBean.setTxtClaimCode(oRow.get("DESCRIPTION").getString());
      oHrmEmpClaimDtlBean.setTxtClaimNo(oRow.get("CLAIM_NO").getString());
      oHrmEmpClaimDtlBean.setTxtNewRemarks(oRow.get("APPROVER_REMARKS").getString());
      arylstHrmEmpClaim.add(oHrmEmpClaimDtlBean);
    } 
    return arylstHrmEmpClaim;
  }
  
  public void initializeBOImpl() {
    this.headerTable = "HRM_CLAIM_DTL";
  }
  
  public void saveDetailImpl(String sHeaderPrimaryKey, String sScreenName, ArrayList oDetailBeanArray) throws EnrgiseSystemException {}
  
  public void saveDetailImpl(BaseHeaderBean oBaseHeaderBean, String sScreenName, ArrayList oDetailBeanArray) throws EnrgiseApplicationException, EnrgiseSystemException {
    if (sScreenName.equalsIgnoreCase("HrmEmpClaim"))
      saveHrmEmpClaimDetail(oBaseHeaderBean, oDetailBeanArray); 
  }
  
  public String saveHrmEmpClaimDetail(BaseHeaderBean oBaseHeaderBean, ArrayList arylstDetailBeanArray) throws EnrgiseSystemException {
    boolean bInsert = false;
    boolean bUpdate = false;
    boolean bDelete = false;
    ArrayList arylstParameters = new ArrayList();
    DBUtilitiesBean oBean1 = null;
    DBUtilitiesBean oBean2 = null;
    DBUtilitiesBean oBean3 = null;
    HrmEmpClaimHdrBean oHrmEmpClaimHdrBean = (HrmEmpClaimHdrBean)oBaseHeaderBean;
    Iterator itrBean = arylstDetailBeanArray.iterator();
    while (itrBean.hasNext()) {
      HrmEmpClaimDtlBean oHrmEmpClaimDtlBean = itrBean.next();
      String sEligibleAmount = calculateEligibleAmount(oHrmEmpClaimDtlBean);
      String sReimbursedAmount = calculateReimbursedAmount(oHrmEmpClaimHdrBean.getPeriod(), oHrmEmpClaimDtlBean);
      if (oHrmEmpClaimDtlBean.getStatus().equals("N")) {
        if (!bInsert) {
          oBean1 = new DBUtilitiesBean();
          oBean1.createBatch("HrmEmpClaim.procupserthrmempclaimdtl(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
          bInsert = true;
        } 
        arylstParameters = new ArrayList();
        arylstParameters.add(new DBObject(1, 1, 12, "N"));
        arylstParameters.add(new DBObject(2, 1, 12, oHrmEmpClaimDtlBean.getTxtClaimDtlId()));
        arylstParameters.add(new DBObject(3, 1, 12, null));
        arylstParameters.add(new DBObject(4, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimDtlBean.getTxtApplnDate())));
        arylstParameters.add(new DBObject(5, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimDtlBean.getTxtApprovalDate())));
        arylstParameters.add(new DBObject(6, 1, 12, oHrmEmpClaimDtlBean.getTxtAppliedAmount()));
        arylstParameters.add(new DBObject(7, 1, 12, oHrmEmpClaimDtlBean.getTxtApprovedAmount()));
        arylstParameters.add(new DBObject(8, 1, 12, sEligibleAmount));
        arylstParameters.add(new DBObject(9, 1, 12, oHrmEmpClaimDtlBean.getTxtApproverId()));
        arylstParameters.add(new DBObject(10, 1, 12, oHrmEmpClaimDtlBean.getTxtEmpId()));
        arylstParameters.add(new DBObject(11, 1, 12, oHrmEmpClaimDtlBean.getTxtPayrollFlag()));
        arylstParameters.add(new DBObject(12, 1, 12, sReimbursedAmount));
        arylstParameters.add(new DBObject(13, 1, 12, oHrmEmpClaimDtlBean.getTxtNewRemarks()));
        arylstParameters.add(new DBObject(14, 1, 12, oHrmEmpClaimHdrBean.getPeriod()));
        arylstParameters.add(new DBObject(15, 1, 12, this.oUserInfo.getUserTypeId()));
        arylstParameters.add(new DBObject(16, 1, 12, this.oUserInfo.getSiteId()));
        oBean1.addToBatch(arylstParameters);
        continue;
      } 
      if (oHrmEmpClaimDtlBean.getStatus().equals("U")) {
        if (!bUpdate) {
          oBean2 = new DBUtilitiesBean();
          oBean2.createBatch("HrmEmpClaim.procupserthrmempclaimdtl(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
          bUpdate = true;
        } 
        arylstParameters = new ArrayList();
        arylstParameters.add(new DBObject(1, 1, 12, "U"));
        arylstParameters.add(new DBObject(2, 1, 12, oHrmEmpClaimDtlBean.getTxtClaimDtlId()));
        arylstParameters.add(new DBObject(3, 1, 12, oHrmEmpClaimDtlBean.getDetailId()));
        arylstParameters.add(new DBObject(4, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimDtlBean.getTxtApplnDate())));
        arylstParameters.add(new DBObject(5, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimDtlBean.getTxtApprovalDate())));
        arylstParameters.add(new DBObject(6, 1, 12, oHrmEmpClaimDtlBean.getTxtAppliedAmount()));
        arylstParameters.add(new DBObject(7, 1, 12, oHrmEmpClaimDtlBean.getTxtApprovedAmount()));
        arylstParameters.add(new DBObject(8, 1, 12, sEligibleAmount));
        arylstParameters.add(new DBObject(9, 1, 12, oHrmEmpClaimDtlBean.getTxtApproverId()));
        arylstParameters.add(new DBObject(10, 1, 12, oHrmEmpClaimDtlBean.getTxtEmpId()));
        arylstParameters.add(new DBObject(11, 1, 12, oHrmEmpClaimDtlBean.getTxtPayrollFlag()));
        arylstParameters.add(new DBObject(12, 1, 12, sReimbursedAmount));
        arylstParameters.add(new DBObject(13, 1, 12, oHrmEmpClaimDtlBean.getTxtNewRemarks()));
        arylstParameters.add(new DBObject(14, 1, 12, oHrmEmpClaimHdrBean.getPeriod()));
        arylstParameters.add(new DBObject(15, 1, 12, this.oUserInfo.getUserTypeId()));
        arylstParameters.add(new DBObject(16, 1, 12, this.oUserInfo.getSiteId()));
        oBean2.addToBatch(arylstParameters);
        continue;
      } 
      if (oHrmEmpClaimDtlBean.getStatus().equals("D")) {
        if (!bDelete) {
          oBean3 = new DBUtilitiesBean();
          oBean3.createBatch("HrmEmpClaim.procdeletehrmempclaimdtl(?)");
          bDelete = true;
        } 
        arylstParameters = new ArrayList();
        arylstParameters.add(new DBObject(1, 1, 12, oHrmEmpClaimDtlBean.getDetailId()));
        oBean3.addToBatch(arylstParameters);
      } 
    } 
    if (bInsert)
      oBean1.executeBatch(); 
    if (bUpdate)
      oBean2.executeBatch(); 
    if (bDelete)
      oBean3.executeBatch(); 
    return String.valueOf(String.valueOf(String.valueOf(String.valueOf(oHrmEmpClaimHdrBean.getClaimCodeId()).concat(String.valueOf(","))).concat(String.valueOf(oHrmEmpClaimHdrBean.getStartDate()))).concat(String.valueOf(","))).concat(String.valueOf(oHrmEmpClaimHdrBean.getEndDate()));
  }
  
  public void additionalFieldValidationImpl(BaseHeaderBean oBaseHeaderBean, Timestamp oWhenPicked, String sScreenName, String sScreenMode, boolean bHeaderDataChanged, ArrayList oDetailBeanArray, boolean bDetailDataChanged, Timestamp oDetailPicked) throws EnrgiseApplicationException, EnrgiseSystemException {
    ArrayList oErrorList = new ArrayList();
    if (bDetailDataChanged)
      if (sScreenName.equalsIgnoreCase("HrmEmpClaim")) {
        Iterator oIt1 = oDetailBeanArray.iterator();
        int rowCount = 1;
        while (oIt1.hasNext()) {
          HrmEmpClaimDtlBean oHrmEmpClaimDtlBean = oIt1.next();
          if (!oHrmEmpClaimDtlBean.getStatus().equalsIgnoreCase("D"))
            checkMandatoryDtls(oHrmEmpClaimDtlBean, rowCount, oErrorList); 
          rowCount++;
        } 
      }  
    reportError(oErrorList);
  }
  
  private void checkMandatoryDtls(HrmEmpClaimDtlBean oHrmEmpClaimDtlBean, int rowCount, ArrayList oErrorList) throws EnrgiseSystemException, EnrgiseApplicationException {
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtAppliedAmount())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.txtAppliedAmount");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtApplnDate())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.txtApplnDate");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtApprovedAmount())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.txtApprovedAmount");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtApprovalDate())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.txtApprovalDate");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtApproverId())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.txtApprovedBy");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtPayrollFlag())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.txtPayrollFlag");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtEmployeeNo())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.txtEmployeeNo");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
    if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtClaimDtlId())) {
      MessageKey oMessageKey = new MessageKey("hrm.HrmEmpClaim.claimCode");
      ArrayList oParams = new ArrayList();
      oParams.add(oMessageKey);
      oParams.add(new Integer(rowCount));
      oErrorList.add(new EnrgiseMessageKeyException("wenrgise.common.detail.mandatoryFieldMissing", oParams, "E"));
    } 
  }
  
  public String saveHeaderImpl(BaseHeaderBean oBaseHeaderBean, String param1) throws EnrgiseSystemException {
    return new String();
  }
  
  public void additionalTimestampValidationImpl(BaseHeaderBean param1, Timestamp param2, String param3, String param4, boolean param5, ArrayList param6, boolean param7, Timestamp param8) {}
  
  public void updateHeaderImpl(BaseHeaderBean oBaseHeaderBean) throws EnrgiseSystemException {}
  
  public String saveNewHeaderImpl(BaseHeaderBean oBaseHeaderBean) throws EnrgiseSystemException {
    return new String();
  }
  
  public void additionalBusinessValidationImpl(BaseHeaderBean oBaseHeaderBean, Timestamp oWhenPicked, String sScreenName, String sScreenMode, boolean bHeaderDataChanged, ArrayList oDetailBeanArray, boolean bDetailDataChanged, Timestamp oDetailPicked) throws EnrgiseApplicationException, EnrgiseSystemException {
    ArrayList oList = new ArrayList();
    HrmEmpClaimHdrBean oHrmEmpClaimHdrBean = (HrmEmpClaimHdrBean)oBaseHeaderBean;
    if (bDetailDataChanged) {
      if (!isCheckDate(oHrmEmpClaimHdrBean.getPeriod())) {
        ArrayList arylstParams = new ArrayList();
        oList.add(new EnrgiseMessageKeyException("hrm.HrmEmpClaim.notAllowed", arylstParams, "E"));
      } 
      if (sScreenName.equalsIgnoreCase("HrmEmpClaim")) {
        Iterator oIt1 = oDetailBeanArray.iterator();
        int n = oDetailBeanArray.size();
        int rowCount = 1;
        while (oIt1.hasNext()) {
          HrmEmpClaimDtlBean oHrmEmpClaimDtlBean = oIt1.next();
          if (oHrmEmpClaimDtlBean.getStatus().equalsIgnoreCase("N")) {
            String sElig = calculateEligibleAmount(oHrmEmpClaimDtlBean);
            String sReim = calculateReimbursedAmount(oHrmEmpClaimHdrBean.getPeriod(), oHrmEmpClaimDtlBean);
            String sApp = oHrmEmpClaimDtlBean.getTxtAppliedAmount();
            String sSanc = oHrmEmpClaimDtlBean.getTxtApprovedAmount();
            double reimbTillDate = Double.parseDouble(sReim) - Double.parseDouble(sSanc);
            if (Double.parseDouble(sElig) < Double.parseDouble(sReim)) {
              MessageKey oMessageKey = new MessageKey();
              ArrayList oParams = new ArrayList();
              ArrayList oParams1 = new ArrayList();
              oParams.add(String.valueOf(rowCount));
              oParams1.add(String.valueOf(sElig));
              oParams1.add(String.valueOf(reimbTillDate));
              oList.add(new EnrgiseMessageKeyException("hrm.HrmEmpClaim.validate", oParams, "E"));
              oList.add(new EnrgiseMessageKeyException("hrm.HrmEmpClaim.validate2", oParams1, "E"));
            } 
            if (Double.parseDouble(sSanc) > Double.parseDouble(sApp)) {
              MessageKey oMessageKey = new MessageKey();
              ArrayList oParams = new ArrayList();
              oParams.add(String.valueOf(rowCount));
              oList.add(new EnrgiseMessageKeyException("hrm.HrmEmpClaim.validate1", oParams, "E"));
            } 
            if (!EnrgiseUtil.checkString(oHrmEmpClaimDtlBean.getTxtApprovalDate()))
              if (rowCount < n - 1) {
                HrmEmpClaimDtlBean oHrmEmpClaimDtlBean1 = oDetailBeanArray.get(rowCount + 1);
                if (EnrgiseUtil.checkString(oHrmEmpClaimDtlBean1.getTxtApplnDate()))
                  oList.add(new EnrgiseApplicationException("hrm.HrmEmpClaim.date.value")); 
              }  
          } 
          rowCount++;
        } 
        reportError(oList);
      } 
    } 
  }
  
  private boolean isCheckDate(String period) throws EnrgiseApplicationException, EnrgiseSystemException {
    HrmCommonBO oBo = new HrmCommonBO();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    ArrayList arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, period));
    arylstParam.add(new DBObject(2, 2, 4));
    arylstParam.add(new DBObject(3, 2, 12));
    arylstParam.add(new DBObject(4, 2, 12));
    arylstParam.add(new DBObject(5, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.procCheckDate(?,?,?,?,?)");
    DBObject oOutObject = arylstOutArray.get(0);
    int iVal = ((Integer)oOutObject.getObject()).intValue();
    boolean sReturnValue = !(iVal == 0);
    return sReturnValue;
  }
  
  public LovVO getHrmEmpClaimDtlCodeLOVdata(LovQueryVO oLovQueryVO) throws EnrgiseSystemException {
    LovVO oLovVO = new LovVO();
    ArrayList arylstHeaderList = new ArrayList();
    arylstHeaderList.add("ID");
    arylstHeaderList.add("hrm.HrmEmpClaim.claimCode");
    oLovVO.setHeaderList(arylstHeaderList);
    ArrayList arylstVisibility = new ArrayList();
    arylstVisibility.add("H");
    arylstVisibility.add("V");
    oLovVO.setVisibilityList(arylstVisibility);
    int count = 0;
    ArrayList arylstParam = new ArrayList();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    String sQuerySearch1 = new String();
    String sQuerySearch2 = new String();
    if (oLovQueryVO.getSearchField1() != null)
      sQuerySearch1 = oLovQueryVO.getSearchField1(); 
    if (oLovQueryVO.getSearchField2() != null)
      sQuerySearch2 = oLovQueryVO.getSearchField2(); 
    arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, sQuerySearch1));
    arylstParam.add(new DBObject(2, 1, 12, sQuerySearch2));
    arylstParam.add(new DBObject(3, 2, -10));
    arylstParam.add(new DBObject(4, 2, 12));
    arylstParam.add(new DBObject(5, 2, 12));
    arylstParam.add(new DBObject(6, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.procGetClaimCodeLOVdata(?,?,?,?,?,?)");
    DBObject oOutObject = arylstOutArray.get(0);
    arylstParam = (ArrayList)oOutObject.getObject();
    QueryRow oRow = null;
    Iterator iter = arylstParam.iterator();
    while (iter.hasNext()) {
      if (count == 0)
        arylstParam = new ArrayList(); 
      count++;
      oRow = (QueryRow)iter.next();
      LOVBean oLOVBean = new LOVBean();
      oLOVBean.setDetailField1(oRow.get("ID").getString());
      oLOVBean.setDetailField2(oRow.get("CLAIM_CODE").getString());
      arylstParam.add(oLOVBean);
    } 
    oLovVO.setDetailList(arylstParam);
    return oLovVO;
  }
  
  public LovVO getHrmEmpClaimEmpLOVdata(LovQueryVO oLovQueryVO) throws EnrgiseSystemException {
    LovVO oLovVO = new LovVO();
    ArrayList arylstHeaderList = new ArrayList();
    arylstHeaderList.add("ID");
    arylstHeaderList.add("hrm.HrmEmpClaim.txtEmployeeNo");
    arylstHeaderList.add("hrm.HrmEmpClaim.txtEmployeeName");
    oLovVO.setHeaderList(arylstHeaderList);
    ArrayList arylstVisibility = new ArrayList();
    arylstVisibility.add("H");
    arylstVisibility.add("V");
    arylstVisibility.add("V");
    oLovVO.setVisibilityList(arylstVisibility);
    int count = 0;
    ArrayList arylstParam = new ArrayList();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    String sQuerySearch1 = new String();
    String sQuerySearch2 = new String();
    String sEmpId = new String();
    if (oLovQueryVO.getProperty("SelUser") != null)
      sEmpId = oLovQueryVO.getProperty("SelUser"); 
    if (oLovQueryVO.getSearchField1() != null)
      sQuerySearch1 = oLovQueryVO.getSearchField1(); 
    if (oLovQueryVO.getSearchField2() != null)
      sQuerySearch2 = oLovQueryVO.getSearchField2(); 
    arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, sQuerySearch1));
    arylstParam.add(new DBObject(2, 1, 12, sQuerySearch2));
    arylstParam.add(new DBObject(3, 1, 12, sEmpId));
    arylstParam.add(new DBObject(4, 2, -10));
    arylstParam.add(new DBObject(5, 2, 12));
    arylstParam.add(new DBObject(6, 2, 12));
    arylstParam.add(new DBObject(7, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.procGetEmpLOVdata(?,?,?,?,?,?,?)");
    DBObject oOutObject = arylstOutArray.get(0);
    arylstParam = (ArrayList)oOutObject.getObject();
    QueryRow oRow = null;
    Iterator iter = arylstParam.iterator();
    while (iter.hasNext()) {
      if (count == 0)
        arylstParam = new ArrayList(); 
      count++;
      oRow = (QueryRow)iter.next();
      LOVBean oLOVBean = new LOVBean();
      oLOVBean.setDetailField1(oRow.get("ID").getString());
      oLOVBean.setDetailField2(oRow.get("EMP_NO").getString());
      oLOVBean.setDetailField3(oRow.get("EMPNAME").getString());
      arylstParam.add(oLOVBean);
    } 
    oLovVO.setDetailList(arylstParam);
    return oLovVO;
  }
  
  private ArrayList checkLOVConstraint(ArrayList arylstList, LovQueryVO oLovQueryVO) throws EnrgiseSystemException {
    LOVBean oLOVBean = null;
    ArrayList arylstNewList = new ArrayList();
    Iterator itrBean = arylstList.iterator();
    while (itrBean.hasNext()) {
      oLOVBean = itrBean.next();
      String sId = oLOVBean.getDetailField1();
      String sAllFlag = getAllFlagInfo(sId);
      System.out.println(sAllFlag);
      if (sAllFlag.equalsIgnoreCase("Y")) {
        arylstNewList.add(oLOVBean);
        continue;
      } 
      String sClaimId = oLOVBean.getDetailField1();
      String sQuery = String.valueOf(" Select ELIG_SQL as ELIG_SQL from HRM_CLAIM_DTL where ID= ").concat(String.valueOf(sClaimId));
      DBUtilitiesBean oBean = new DBUtilitiesBean();
      ArrayList arylstList1 = oBean.executeQuery(sQuery);
      Iterator itrBean1 = arylstList1.iterator();
      if (itrBean1.hasNext()) {
        QueryRow oRow = itrBean1.next();
        String sSql = oRow.get("ELIG_SQL").getString();
        if (EnrgiseUtil.checkString(sSql)) {
          String sEmpId = oLovQueryVO.getProperty("txtEmpId");
          StringBuffer s = new StringBuffer(sSql);
          s.replace(s.lastIndexOf("?"), s.lastIndexOf("?") + 1, sEmpId);
          System.out.println(s);
          ArrayList arylstList2 = oBean.executeQuery(s.toString());
          if (arylstList2.size() != 0)
            arylstNewList.add(oLOVBean); 
        } 
      } 
    } 
    return arylstNewList;
  }
  
  public String getAllFlagInfo(String sAttrId) throws EnrgiseSystemException {
    ArrayList arylstParam = new ArrayList();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    int count = 0;
    String sAllFlag = null;
    arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, sAttrId));
    arylstParam.add(new DBObject(2, 2, -10));
    arylstParam.add(new DBObject(3, 2, 12));
    arylstParam.add(new DBObject(4, 2, 12));
    arylstParam.add(new DBObject(5, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.proc_GetAllFlag(?,?,?,?,?)");
    DBObject oOutObject = arylstOutArray.get(0);
    ArrayList oList = (ArrayList)oOutObject.getObject();
    QueryRow oRow = null;
    QueryValue oValue = null;
    HashMap oColumns = null;
    Iterator itrBean = oList.iterator();
    while (itrBean.hasNext()) {
      oRow = itrBean.next();
      sAllFlag = oRow.get("ALL_FLAG").getString();
    } 
    return sAllFlag;
  }
  
  public LovVO getHrmEmpClaimCodeLOVdata(LovQueryVO oLovQueryVO) throws EnrgiseSystemException {
    LovVO oLovVO = new LovVO();
    ArrayList arylstHeaderList = new ArrayList();
    arylstHeaderList.add("ID");
    arylstHeaderList.add("hrm.HrmEmpClaim.claimCode");
    oLovVO.setHeaderList(arylstHeaderList);
    ArrayList arylstVisibility = new ArrayList();
    arylstVisibility.add("H");
    arylstVisibility.add("V");
    oLovVO.setVisibilityList(arylstVisibility);
    int count = 0;
    ArrayList arylstParam = new ArrayList();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    String sQuerySearch1 = new String();
    String sQuerySearch2 = new String();
    if (oLovQueryVO.getSearchField1() != null)
      sQuerySearch1 = oLovQueryVO.getSearchField1(); 
    if (oLovQueryVO.getSearchField2() != null)
      sQuerySearch2 = oLovQueryVO.getSearchField2(); 
    arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, sQuerySearch1));
    arylstParam.add(new DBObject(2, 1, 12, sQuerySearch2));
    arylstParam.add(new DBObject(3, 2, -10));
    arylstParam.add(new DBObject(4, 2, 12));
    arylstParam.add(new DBObject(5, 2, 12));
    arylstParam.add(new DBObject(6, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.procGetClaimCodeLOVdata(?,?,?,?,?,?)");
    DBObject oOutObject = arylstOutArray.get(0);
    arylstParam = (ArrayList)oOutObject.getObject();
    QueryRow oRow = null;
    Iterator iter = arylstParam.iterator();
    while (iter.hasNext()) {
      if (count == 0)
        arylstParam = new ArrayList(); 
      count++;
      oRow = (QueryRow)iter.next();
      LOVBean oLOVBean = new LOVBean();
      oLOVBean.setDetailField1(oRow.get("ID").getString());
      oLOVBean.setDetailField2(oRow.get("CLAIM_CODE").getString());
      arylstParam.add(oLOVBean);
    } 
    oLovVO.setDetailList(arylstParam);
    return oLovVO;
  }
  
  public LovVO getHrmEmpClaimNoLOVdata(LovQueryVO oLovQueryVO) throws EnrgiseSystemException {
    LovVO oLovVO = new LovVO();
    ArrayList arylstHeaderList = new ArrayList();
    arylstHeaderList.add("hrm.HrmEmpClaim.txtClaimNo");
    oLovVO.setHeaderList(arylstHeaderList);
    ArrayList arylstVisibility = new ArrayList();
    arylstVisibility.add("V");
    oLovVO.setVisibilityList(arylstVisibility);
    int count = 0;
    ArrayList arylstParam = new ArrayList();
    DBUtilitiesBean oBean = new DBUtilitiesBean();
    String sQuerySearch1 = new String();
    if (oLovQueryVO.getSearchField1() != null)
      sQuerySearch1 = oLovQueryVO.getSearchField1(); 
    arylstParam = new ArrayList();
    arylstParam.add(new DBObject(1, 1, 12, sQuerySearch1));
    arylstParam.add(new DBObject(2, 2, -10));
    arylstParam.add(new DBObject(3, 2, 12));
    arylstParam.add(new DBObject(4, 2, 12));
    arylstParam.add(new DBObject(5, 2, 4));
    ArrayList arylstOutArray = oBean.callProc(arylstParam, "HRMEMPCLAIM.procGetClaimNoLOVdata(?,?,?,?,?)");
    DBObject oOutObject = arylstOutArray.get(0);
    arylstParam = (ArrayList)oOutObject.getObject();
    QueryRow oRow = null;
    Iterator iter = arylstParam.iterator();
    while (iter.hasNext()) {
      if (count == 0)
        arylstParam = new ArrayList(); 
      count++;
      oRow = (QueryRow)iter.next();
      LOVBean oLOVBean = new LOVBean();
      oLOVBean.setDetailField1(oRow.get("CLAIM_NO").getString());
      arylstParam.add(oLOVBean);
    } 
    oLovVO.setDetailList(arylstParam);
    return oLovVO;
  }
  
  private String calculateEligibleAmount(HrmEmpClaimDtlBean oHrmEmpClaimDtlBean) throws EnrgiseSystemException {
    ArrayList oList = new ArrayList();
    ArrayList oList1 = new ArrayList();
    ArrayList oParameters1 = new ArrayList();
    ArrayList oOutArray1 = new ArrayList();
    DBUtilitiesBean oBean1 = new DBUtilitiesBean();
    QueryRow oRow1 = null;
    String sEligAmount = new String();
    String sEligFactor = new String();
    String sFlatAmt = new String();
    String sMaxAmt = new String();
    String sClaimCodeId = oHrmEmpClaimDtlBean.getTxtClaimDtlId();
    int count2 = 0;
    oParameters1 = new ArrayList();
    oParameters1.add(new DBObject(1, 1, 12, oHrmEmpClaimDtlBean.getTxtEmpId()));
    oParameters1.add(new DBObject(2, 1, 12, sClaimCodeId));
    oParameters1.add(new DBObject(3, 2, -10));
    oParameters1.add(new DBObject(4, 2, 12));
    oParameters1.add(new DBObject(5, 2, 12));
    oParameters1.add(new DBObject(6, 2, 4));
    oOutArray1 = oBean1.callProc(oParameters1, "HRMEMPCLAIM.procCalculateEligAmt(?,?,?,?,?,?)");
    oList1 = (ArrayList)((DBObject)oOutArray1.get(0)).getObject();
    if (oList1.size() == 0)
      return "0"; 
    count2 = 0;
    Iterator oIt1 = oList1.iterator();
    while (oIt1.hasNext()) {
      count2++;
      oRow1 = oIt1.next();
      sEligFactor = oRow1.get("GREATER_LESSER_FLAG").getString();
      sFlatAmt = oRow1.get("FLAT_AMOUNT").getString();
      sMaxAmt = oRow1.get("MAX_AMT").getString();
    } 
    if (String.valueOf(oRow1.get("GREATER_LESSER_FLAG").getString()).equalsIgnoreCase("F"))
      sEligAmount = sFlatAmt; 
    if (String.valueOf(oRow1.get("GREATER_LESSER_FLAG").getString()).equalsIgnoreCase("G"))
      if (Integer.parseInt(sFlatAmt) > Integer.parseInt(sMaxAmt)) {
        sEligAmount = sFlatAmt;
      } else {
        sEligAmount = sMaxAmt;
      }  
    if (String.valueOf(oRow1.get("GREATER_LESSER_FLAG").getString()).equalsIgnoreCase("L"))
      if (Integer.parseInt(sFlatAmt) < Integer.parseInt(sMaxAmt)) {
        sEligAmount = sFlatAmt;
      } else {
        sEligAmount = sMaxAmt;
      }  
    return sEligAmount;
  }
  
  private String calculateReimbursedAmount(String period, HrmEmpClaimDtlBean oHrmEmpClaimDtlBean) throws EnrgiseSystemException {
    ArrayList oList = new ArrayList();
    ArrayList oList1 = new ArrayList();
    ArrayList oParameters1 = new ArrayList();
    ArrayList oOutArray1 = new ArrayList();
    DBUtilitiesBean oBean1 = new DBUtilitiesBean();
    QueryRow oRow1 = null;
    String sReimAmount = new String();
    String sClaimCodeId = oHrmEmpClaimDtlBean.getTxtClaimDtlId();
    oParameters1 = new ArrayList();
    oParameters1.add(new DBObject(1, 1, 12, oHrmEmpClaimDtlBean.getTxtEmpId()));
    oParameters1.add(new DBObject(2, 1, 12, sClaimCodeId));
    oParameters1.add(new DBObject(3, 1, 12, oHrmEmpClaimDtlBean.getTxtApprovedAmount()));
    oParameters1.add(new DBObject(4, 1, 93, EnrgiseUtil.convertToSqlDate(oHrmEmpClaimDtlBean.getTxtApplnDate())));
    oParameters1.add(new DBObject(5, 1, 12, oHrmEmpClaimDtlBean.getDetailId()));
    oParameters1.add(new DBObject(6, 1, 12, period));
    oParameters1.add(new DBObject(7, 2, 12));
    oParameters1.add(new DBObject(8, 2, 12));
    oParameters1.add(new DBObject(9, 2, 12));
    oParameters1.add(new DBObject(10, 2, 4));
    oOutArray1 = oBean1.callProc(oParameters1, "HRMEMPCLAIM.procCalculateReimbursedAmt(?,?,?,?,?,?,?,?,?,?)");
    DBObject oObj = oOutArray1.get(0);
    sReimAmount = oObj.getObject().toString();
    return sReimAmount;
  }
}
