/** Business logic to execute. */
  public VOListResponse updateLedger(
      ArrayList oldVOs,
      ArrayList newVOs,
      String serverLanguageId,
      String username,
      ArrayList customizedFields)
      throws Throwable {
    Connection conn = null;
    try {
      if (this.conn == null) conn = getConn();
      else conn = this.conn;
      LedgerVO oldVO = null;
      LedgerVO newVO = null;
      Response res = null;

      for (int i = 0; i < oldVOs.size(); i++) {
        oldVO = (LedgerVO) oldVOs.get(i);
        newVO = (LedgerVO) newVOs.get(i);

        // update SYS10 table...
        TranslationUtils.updateTranslation(
            oldVO.getDescriptionSYS10(),
            newVO.getDescriptionSYS10(),
            newVO.getProgressiveSys10ACC01(),
            serverLanguageId,
            conn);

        HashSet pkAttrs = new HashSet();
        pkAttrs.add("companyCodeSys01ACC01");
        pkAttrs.add("ledgerCodeACC01");

        HashMap attribute2dbField = new HashMap();
        attribute2dbField.put("ledgerCodeACC01", "LEDGER_CODE");
        attribute2dbField.put("progressiveSys10ACC01", "PROGRESSIVE_SYS10");
        attribute2dbField.put("enabledACC01", "ENABLED");
        attribute2dbField.put("companyCodeSys01ACC01", "COMPANY_CODE_SYS01");
        attribute2dbField.put("accountTypeACC01", "ACCOUNT_TYPE");

        res =
            new CustomizeQueryUtil()
                .updateTable(
                    conn,
                    new UserSessionParameters(username),
                    pkAttrs,
                    oldVO,
                    newVO,
                    "ACC01_LEDGER",
                    attribute2dbField,
                    "Y",
                    "N",
                    null,
                    true,
                    customizedFields);
        if (res.isError()) {
          throw new Exception(res.getErrorMessage());
        }
      }

      return new VOListResponse(newVOs, false, newVOs.size());
    } catch (Throwable ex) {
      Logger.error(
          username,
          this.getClass().getName(),
          "executeCommand",
          "Error while updating existing ledger",
          ex);
      try {
        if (this.conn == null && conn != null)
          // rollback only local connection
          conn.rollback();
      } catch (Exception ex3) {
      }
      throw new Exception(ex.getMessage());
    } finally {
      try {
        if (this.conn == null && conn != null) {
          // close only local connection
          conn.commit();
          conn.close();
        }

      } catch (Exception exx) {
      }
    }
  }
  /** Business logic to execute. */
  public VOListResponse insertLedger(
      ArrayList list,
      String serverLanguageId,
      String username,
      ArrayList companyCodes,
      ArrayList customizedFields)
      throws Throwable {

    Connection conn = null;
    try {
      if (this.conn == null) conn = getConn();
      else conn = this.conn;
      String companyCode = companyCodes.get(0).toString();

      LedgerVO vo = null;

      BigDecimal progressiveSYS10 = null;
      Response res = null;

      Map attribute2dbField = new HashMap();
      attribute2dbField.put("ledgerCodeACC01", "LEDGER_CODE");
      attribute2dbField.put("progressiveSys10ACC01", "PROGRESSIVE_SYS10");
      attribute2dbField.put("enabledACC01", "ENABLED");
      attribute2dbField.put("companyCodeSys01ACC01", "COMPANY_CODE_SYS01");
      attribute2dbField.put("accountTypeACC01", "ACCOUNT_TYPE");

      for (int i = 0; i < list.size(); i++) {
        vo = (LedgerVO) list.get(i);
        vo.setEnabledACC01("Y");
        if (vo.getCompanyCodeSys01ACC01() == null) vo.setCompanyCodeSys01ACC01(companyCode);

        // insert record in SYS10...
        progressiveSYS10 =
            TranslationUtils.insertTranslations(
                vo.getDescriptionSYS10(), vo.getCompanyCodeSys01ACC01(), conn);
        vo.setProgressiveSys10ACC01(progressiveSYS10);

        // insert into ACC01...
        res =
            CustomizeQueryUtil.insertTable(
                conn,
                new UserSessionParameters(username),
                vo,
                "ACC01_LEDGER",
                attribute2dbField,
                "Y",
                "N",
                null,
                true,
                customizedFields);
        if (res.isError()) {
          throw new Exception(res.getErrorMessage());
        }
      }

      return new VOListResponse(list, false, list.size());
    } catch (Throwable ex) {
      Logger.error(
          username,
          this.getClass().getName(),
          "executeCommand",
          "Error while inserting new ledgers",
          ex);
      try {
        if (this.conn == null && conn != null)
          // rollback only local connection
          conn.rollback();
      } catch (Exception ex3) {
      }
      throw new Exception(ex.getMessage());
    } finally {
      try {
        if (this.conn == null && conn != null) {
          // close only local connection
          conn.commit();
          conn.close();
        }

      } catch (Exception exx) {
      }
    }
  }