private void validateRTGS() {
    EntityType entity = null;
    List<ValidationError> errors = new ArrayList<ValidationError>();
    for (EgAdvanceRequisitionDetails advanceDetail :
        advanceRequisition.getEgAdvanceReqDetailses()) {
      if (!advanceDetail.getEgAdvanceReqpayeeDetailses().isEmpty()) {
        for (EgAdvanceReqPayeeDetails payeeDetail : advanceDetail.getEgAdvanceReqpayeeDetailses()) {
          try {
            entity =
                paymentService.getEntity(
                    payeeDetail.getAccountDetailType().getId(),
                    (Serializable) payeeDetail.getAccountdetailKeyId());
            if (entity == null) {
              throw new ValidationException(
                  Arrays.asList(
                      new ValidationError(
                          "no.entity.for.detailkey",
                          getText(
                              "no.entity.for.detailkey",
                              new String[] {entity.getCode() + "-" + entity.getName()}))));
            }
          } catch (ApplicationException e) {
            throw new ValidationException(
                Arrays.asList(
                    new ValidationError("Exception to get EntityType  ", e.getMessage())));
          }

          if ((StringUtils.isBlank(entity.getPanno())
              || StringUtils.isBlank(entity.getBankname())
              || StringUtils.isBlank(entity.getBankaccount())
              || StringUtils.isBlank(entity.getIfsccode()))) {
            populateBankAccounts(
                Integer.parseInt(commonBean.getBankId().split("-")[1]), fund.getId());
            LOGGER.error(
                getText(
                    "validate.paymentMode.rtgs.subledger.details",
                    new String[] {entity.getCode() + "-" + entity.getName()}));
            errors.add(
                new ValidationError(
                    "validate.paymentMode.rtgs.subledger.details",
                    getText(
                        "validate.paymentMode.rtgs.subledger.details",
                        new String[] {entity.getCode() + "-" + entity.getName()})));
            throw new ValidationException(errors);
          }
        }
      } else {
        throw new ValidationException(
            Arrays.asList(
                new ValidationError(
                    "no.subledger.cannot.create.rtgs.payment",
                    "arf.payment.no.subledger.cannot.create.rtgs.payment")));
      }
    }
  }
  private CVoucherHeader createVoucherAndledger() {
    try {
      final HashMap<String, Object> headerDetails = createHeaderAndMisDetails();
      headerDetails.put(
          VoucherConstant.SOURCEPATH, "/EGF/payment/advancePayment!view.action?voucherHeader.id=");
      HashMap<String, Object> detailMap = null;
      HashMap<String, Object> subledgertDetailMap = null;
      final List<HashMap<String, Object>> accountdetails = new ArrayList<HashMap<String, Object>>();
      final List<HashMap<String, Object>> subledgerDetails =
          new ArrayList<HashMap<String, Object>>();

      detailMap = new HashMap<String, Object>();
      detailMap.put(VoucherConstant.CREDITAMOUNT, advanceRequisition.getAdvanceRequisitionAmount());
      detailMap.put(VoucherConstant.DEBITAMOUNT, ZERO);
      Bankaccount account =
          (Bankaccount)
              HibernateUtil.getCurrentSession()
                  .load(Bankaccount.class, Integer.valueOf(commonBean.getAccountNumberId()));
      detailMap.put(VoucherConstant.GLCODE, account.getChartofaccounts().getGlcode());
      accountdetails.add(detailMap);
      Map<String, Object> glcodeMap = new HashMap<String, Object>();
      detailMap = new HashMap<String, Object>();

      detailMap.put(VoucherConstant.DEBITAMOUNT, advanceRequisition.getAdvanceRequisitionAmount());
      detailMap.put(VoucherConstant.CREDITAMOUNT, ZERO);
      for (EgAdvanceRequisitionDetails advanceRequisitionDetails :
          advanceRequisition.getEgAdvanceReqDetailses()) {
        detailMap.put(
            VoucherConstant.GLCODE, advanceRequisitionDetails.getChartofaccounts().getGlcode());
      }
      accountdetails.add(detailMap);
      glcodeMap.put(detailMap.get(VoucherConstant.GLCODE).toString(), VoucherConstant.DEBIT);

      subledgertDetailMap = new HashMap<String, Object>();
      for (EgAdvanceRequisitionDetails advanceDetail :
          advanceRequisition.getEgAdvanceReqDetailses()) {
        for (EgAdvanceReqPayeeDetails payeeDetail : advanceDetail.getEgAdvanceReqpayeeDetailses()) {
          subledgertDetailMap = new HashMap<String, Object>();
          subledgertDetailMap.put(VoucherConstant.DEBITAMOUNT, payeeDetail.getDebitAmount());
          subledgertDetailMap.put(VoucherConstant.CREDITAMOUNT, payeeDetail.getCreditAmount());
          subledgertDetailMap.put(
              VoucherConstant.DETAILTYPEID, payeeDetail.getAccountDetailType().getId());
          subledgertDetailMap.put(VoucherConstant.DETAILKEYID, payeeDetail.getAccountdetailKeyId());
          subledgertDetailMap.put(
              VoucherConstant.GLCODE, advanceDetail.getChartofaccounts().getGlcode());
          subledgerDetails.add(subledgertDetailMap);
        }
      }

      final CreateVoucher cv = new CreateVoucher();
      voucherHeader = cv.createPreApprovedVoucher(headerDetails, accountdetails, subledgerDetails);

    } catch (final HibernateException e) {
      LOGGER.error(e.getMessage(), e);
      throw new ValidationException(
          Arrays.asList(new ValidationError(EXCEPTION_WHILE_SAVING_DATA, FAILED)));
    } catch (final ApplicationRuntimeException e) {
      LOGGER.error(e.getMessage(), e);
      throw new ValidationException(
          Arrays.asList(new ValidationError(e.getMessage(), e.getMessage())));
    } catch (final ValidationException e) {
      LOGGER.error(e.getMessage(), e);
      throw e;
    } catch (final Exception e) {
      // handle engine exception
      LOGGER.error(e.getMessage(), e);
      throw new ValidationException(
          Arrays.asList(new ValidationError(e.getMessage(), e.getMessage())));
    }
    if (LOGGER.isDebugEnabled()) LOGGER.debug("Posted to Ledger " + voucherHeader.getId());
    return voucherHeader;
  }