/** Business logic to execute. */ public VOListResponse loadSupplierPriceItems( GridParams pars, String serverLanguageId, String username, ArrayList customizedFields) throws Throwable { PreparedStatement pstmt = null; Connection conn = null; try { if (this.conn == null) conn = getConn(); else conn = this.conn; BigDecimal rootProgressiveHIE01 = (BigDecimal) pars.getOtherGridParams().get(ApplicationConsts.ROOT_PROGRESSIVE_HIE01); BigDecimal progressiveHIE01 = (BigDecimal) pars.getOtherGridParams().get(ApplicationConsts.PROGRESSIVE_HIE01); BigDecimal progressiveHIE02 = (BigDecimal) pars.getOtherGridParams().get(ApplicationConsts.PROGRESSIVE_HIE02); BigDecimal progressiveREG04 = (BigDecimal) pars.getOtherGridParams().get(ApplicationConsts.PROGRESSIVE_REG04); String companyCodeSYS01 = (String) pars.getOtherGridParams().get(ApplicationConsts.COMPANY_CODE_SYS01); String pricelistCodePUR03 = (String) pars.getOtherGridParams().get(ApplicationConsts.PRICELIST); CompanyHierarchyLevelVO vo = (CompanyHierarchyLevelVO) pars.getOtherGridParams().get(ApplicationConsts.TREE_FILTER); if (vo != null) { progressiveHIE01 = vo.getProgressiveHIE01(); progressiveHIE02 = vo.getProgressiveHie02HIE01(); } String sql = "select PUR02_SUPPLIER_ITEMS.COMPANY_CODE_SYS01,PUR02_SUPPLIER_ITEMS.ITEM_CODE_ITM01,PUR02_SUPPLIER_ITEMS.SUPPLIER_ITEM_CODE,PUR02_SUPPLIER_ITEMS.PROGRESSIVE_REG04," + "PUR02_SUPPLIER_ITEMS.PROGRESSIVE_HIE02,PUR02_SUPPLIER_ITEMS.PROGRESSIVE_HIE01,PUR02_SUPPLIER_ITEMS.MIN_PURCHASE_QTY,PUR02_SUPPLIER_ITEMS.MULTIPLE_QTY," + "PUR02_SUPPLIER_ITEMS.UM_CODE_REG02,PUR02_SUPPLIER_ITEMS.ENABLED,SYS10_COMPANY_TRANSLATIONS.DESCRIPTION,REG02_MEASURE_UNITS.DECIMALS," + "ITM01_ITEMS.VAT_CODE_REG01,SYS10_VAT.DESCRIPTION,REG01_VATS.DEDUCTIBLE,REG01_VATS.VALUE," + "PUR04_SUPPLIER_PRICES.VALUE,PUR04_SUPPLIER_PRICES.START_DATE,PUR04_SUPPLIER_PRICES.END_DATE," + "ITM01_ITEMS.USE_VARIANT_1,ITM01_ITEMS.USE_VARIANT_2,ITM01_ITEMS.USE_VARIANT_3,ITM01_ITEMS.USE_VARIANT_4,ITM01_ITEMS.USE_VARIANT_5, " + "ITM01_ITEMS.NO_WAREHOUSE_MOV " + " from PUR02_SUPPLIER_ITEMS,SYS10_COMPANY_TRANSLATIONS,ITM01_ITEMS,REG02_MEASURE_UNITS,SYS10_TRANSLATIONS SYS10_VAT,REG01_VATS,PUR04_SUPPLIER_PRICES where " + "PUR02_SUPPLIER_ITEMS.PROGRESSIVE_HIE02=? and " + "PUR02_SUPPLIER_ITEMS.UM_CODE_REG02=REG02_MEASURE_UNITS.UM_CODE and " + "PUR02_SUPPLIER_ITEMS.COMPANY_CODE_SYS01=ITM01_ITEMS.COMPANY_CODE_SYS01 and " + "PUR02_SUPPLIER_ITEMS.ITEM_CODE_ITM01=ITM01_ITEMS.ITEM_CODE and " + "ITM01_ITEMS.COMPANY_CODE_SYS01=SYS10_COMPANY_TRANSLATIONS.COMPANY_CODE_SYS01 and " + "ITM01_ITEMS.PROGRESSIVE_SYS10=SYS10_COMPANY_TRANSLATIONS.PROGRESSIVE and " + "SYS10_COMPANY_TRANSLATIONS.LANGUAGE_CODE=? and " + "PUR02_SUPPLIER_ITEMS.COMPANY_CODE_SYS01 = ? and " + "PUR02_SUPPLIER_ITEMS.PROGRESSIVE_REG04=? and " + "PUR02_SUPPLIER_ITEMS.ENABLED='Y' and " + "ITM01_ITEMS.VAT_CODE_REG01=REG01_VATS.VAT_CODE and " + "REG01_VATS.PROGRESSIVE_SYS10=SYS10_VAT.PROGRESSIVE and " + "SYS10_VAT.LANGUAGE_CODE=? and " + "PUR02_SUPPLIER_ITEMS.COMPANY_CODE_SYS01=PUR04_SUPPLIER_PRICES.COMPANY_CODE_SYS01 and " + "PUR02_SUPPLIER_ITEMS.PROGRESSIVE_REG04=PUR04_SUPPLIER_PRICES.PROGRESSIVE_REG04 and " + "PUR02_SUPPLIER_ITEMS.ITEM_CODE_ITM01=PUR04_SUPPLIER_PRICES.ITEM_CODE_ITM01 and " + "PUR04_SUPPLIER_PRICES.PRICELIST_CODE_PUR03=? and " + "PUR04_SUPPLIER_PRICES.START_DATE<=? and " + "PUR04_SUPPLIER_PRICES.END_DATE>? "; if (rootProgressiveHIE01 == null || !rootProgressiveHIE01.equals(progressiveHIE01)) { // retrieve all subnodes of the specified node... pstmt = conn.prepareStatement( "select HIE01_COMPANY_LEVELS.PROGRESSIVE,HIE01_COMPANY_LEVELS.PROGRESSIVE_HIE01,HIE01_COMPANY_LEVELS.LEV from HIE01_COMPANY_LEVELS " + "where COMPANY_CODE_SYS01='" + companyCodeSYS01 + "' and ENABLED='Y' and PROGRESSIVE_HIE02=? and PROGRESSIVE>=? " + "order by LEV,PROGRESSIVE_HIE01,PROGRESSIVE"); pstmt.setBigDecimal(1, progressiveHIE02); pstmt.setBigDecimal(2, progressiveHIE01); ResultSet rset = pstmt.executeQuery(); HashSet currentLevelNodes = new HashSet(); HashSet newLevelNodes = new HashSet(); String nodes = ""; int currentLevel = -1; while (rset.next()) { if (currentLevel != rset.getInt(3)) { // next level... currentLevel = rset.getInt(3); currentLevelNodes = newLevelNodes; newLevelNodes = new HashSet(); } if (rset.getBigDecimal(1).equals(progressiveHIE01)) { newLevelNodes.add(rset.getBigDecimal(1)); nodes += rset.getBigDecimal(1) + ","; } else if (currentLevelNodes.contains(rset.getBigDecimal(2))) { newLevelNodes.add(rset.getBigDecimal(1)); nodes += rset.getBigDecimal(1) + ","; } } rset.close(); pstmt.close(); if (nodes.length() > 0) nodes = nodes.substring(0, nodes.length() - 1); if (rootProgressiveHIE01 != null || nodes.length() > 0) sql += " and PUR02_SUPPLIER_ITEMS.PROGRESSIVE_HIE01 in (" + nodes + ")"; } Map attribute2dbField = new HashMap(); attribute2dbField.put("companyCodeSys01PUR02", "PUR02_SUPPLIER_ITEMS.COMPANY_CODE_SYS01"); attribute2dbField.put("itemCodeItm01PUR02", "PUR02_SUPPLIER_ITEMS.ITEM_CODE_ITM01"); attribute2dbField.put("supplierItemCodePUR02", "PUR02_SUPPLIER_ITEMS.SUPPLIER_ITEM_CODE"); attribute2dbField.put("progressiveReg04PUR02", "PUR02_SUPPLIER_ITEMS.PROGRESSIVE_REG04"); attribute2dbField.put("progressiveHie02PUR02", "PUR02_SUPPLIER_ITEMS.PROGRESSIVE_HIE02"); attribute2dbField.put("progressiveHie01PUR02", "PUR02_SUPPLIER_ITEMS.PROGRESSIVE_HIE01"); attribute2dbField.put("minPurchaseQtyPUR02", "PUR02_SUPPLIER_ITEMS.MIN_PURCHASE_QTY"); attribute2dbField.put("multipleQtyPUR02", "PUR02_SUPPLIER_ITEMS.MULTIPLE_QTY"); attribute2dbField.put("umCodeReg02PUR02", "PUR02_SUPPLIER_ITEMS.UM_CODE_REG02"); attribute2dbField.put("enabledPUR02", "PUR02_SUPPLIER_ITEMS.ENABLED"); attribute2dbField.put("descriptionSYS10", "SYS10_COMPANY_TRANSLATIONS.DESCRIPTION"); attribute2dbField.put("decimalsREG02", "REG02_MEASURE_UNITS.DECIMALS"); attribute2dbField.put("vatCodeReg01ITM01", "ITM01_ITEMS.VAT_CODE_REG01"); attribute2dbField.put("vatDescriptionSYS10", "SYS10_VAT.DESCRIPTION"); attribute2dbField.put("deductibleREG01", "REG01_VATS.DEDUCTIBLE"); attribute2dbField.put("valueREG01", "REG01_VATS.VALUE"); attribute2dbField.put("valuePUR04", "PUR04_SUPPLIER_PRICES.VALUE"); attribute2dbField.put("startDatePUR04", "PUR04_SUPPLIER_PRICES.START_DATE"); attribute2dbField.put("endDatePUR04", "PUR04_SUPPLIER_PRICES.END_DATE"); attribute2dbField.put("useVariant1ITM01", "ITM01_ITEMS.USE_VARIANT_1"); attribute2dbField.put("useVariant2ITM01", "ITM01_ITEMS.USE_VARIANT_2"); attribute2dbField.put("useVariant3ITM01", "ITM01_ITEMS.USE_VARIANT_3"); attribute2dbField.put("useVariant4ITM01", "ITM01_ITEMS.USE_VARIANT_4"); attribute2dbField.put("useVariant5ITM01", "ITM01_ITEMS.USE_VARIANT_5"); attribute2dbField.put("noWarehouseMovITM01", "ITM01_ITEMS.NO_WAREHOUSE_MOV"); ArrayList values = new ArrayList(); values.add(progressiveHIE02); values.add(serverLanguageId); values.add(companyCodeSYS01); values.add(progressiveREG04); values.add(serverLanguageId); values.add(pricelistCodePUR03); values.add(new java.sql.Date(System.currentTimeMillis())); values.add(new java.sql.Date(System.currentTimeMillis())); // read from PUR02 table... Response answer = CustomizeQueryUtil.getQuery( conn, new UserSessionParameters(username), sql, values, attribute2dbField, SupplierPriceItemVO.class, "Y", "N", null, pars, 50, true, customizedFields); if (answer.isError()) throw new Exception(answer.getErrorMessage()); else return (VOListResponse) answer; } catch (Throwable ex) { Logger.error( username, this.getClass().getName(), "executeCommand", "Error while fetching supplier items list", ex); throw new Exception(ex.getMessage()); } finally { try { pstmt.close(); } catch (Exception exx) { } try { if (this.conn == null && conn != null) { // close only local connection conn.commit(); conn.close(); } } catch (Exception exx) { } } }
/** * Type converts values to other classes. For example an Integer can be converted to a Long. * * @param <T> Data Type. * @param value The value to be converted. * @param to The class to be converted to. Must be one of the Java types corresponding to the * DataTypes. * @return The converted value. * @throws TypeMismatchException Thrown desired class is incompatible with the source class. * @throws OverflowException Thrown only on narrowing value conversions, e.g from a BigInteger to * an Integer. */ @Nullable public static <T> T convert(Object value, Class<?> to) throws TypeMismatchException, OverflowException { final Object result; if (value == null || value.getClass() == to) { result = value; } else { final Class<?> from = value.getClass(); try { if (from == Integer.class) { // Integer -> ... if (to == Long.class) { result = new Long(((Number) value).longValue()); } else if (to == BigInteger.class) { result = BigInteger.valueOf(((Number) value).intValue()); } else if (to == Float.class) { result = new Float(((Number) value).floatValue()); } else if (to == Double.class) { result = new Double(((Number) value).doubleValue()); } else if (to == BigDecimal.class) { // Use intValue() to avoid precision errors result = new BigDecimal(((Number) value).intValue()); } else { throw new TypeMismatchException(value.getClass(), to); } } else if (from == Long.class) { // Long -> ... if (to == Integer.class) { final long l = ((Long) value).longValue(); if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) { throw new OverflowException((Number) value, to); } result = new Integer((int) l); } else if (to == BigInteger.class) { result = BigInteger.valueOf(((Number) value).longValue()); } else if (to == Float.class) { result = new Float(((Number) value).floatValue()); } else if (to == Double.class) { result = new Double(((Number) value).doubleValue()); } else if (to == BigDecimal.class) { // Use longValue() to avoid precision errors result = new BigDecimal(((Number) value).longValue()); } else { throw new TypeMismatchException(value.getClass(), to); } } else if (from == BigInteger.class) { // BigInteger -> ... final BigInteger bi = (BigInteger) value; if (to == Integer.class) { result = new Integer(bi.intValueExact()); } else if (to == Long.class) { result = new Long(bi.longValueExact()); } else if (to == Float.class) { final float f1 = bi.floatValue(); if (f1 == Float.NEGATIVE_INFINITY || f1 == Float.POSITIVE_INFINITY) { throw new OverflowException(bi, to); } result = new Float(f1); } else if (to == Double.class) { final double d = bi.doubleValue(); if (d == Double.NEGATIVE_INFINITY || d == Double.POSITIVE_INFINITY) { throw new OverflowException(bi, to); } result = new Double(d); } else if (to == BigDecimal.class) { result = new BigDecimal(bi); } else { throw new TypeMismatchException(value.getClass(), to); } } else if (from == Float.class) { // Float -> ... final float fl = ((Float) value).floatValue(); if (to == Integer.class) { if (fl < Integer.MIN_VALUE || fl > Integer.MAX_VALUE | fl % 1 > 0) { throw new OverflowException((Number) value, to); } result = new Integer((int) fl); } else if (to == Long.class) { if (fl < Long.MIN_VALUE || fl > Long.MAX_VALUE | fl % 1 > 0) { throw new OverflowException((Number) value, to); } result = new Long((long) fl); } else if (to == BigInteger.class) { if (fl % 1 > 0) { throw new OverflowException((Number) value, to); } final BigDecimal bd = BigDecimal.valueOf(fl); result = bd.toBigInteger(); } else if (to == Double.class) { result = new Double(((Number) value).doubleValue()); } else if (to == BigDecimal.class) { result = BigDecimal.valueOf(fl); } else { throw new TypeMismatchException(value.getClass(), to); } } else if (from == Double.class) { // Double -> ... final double d = ((Double) value).doubleValue(); if (to == Integer.class) { if (d < Integer.MIN_VALUE || d > Integer.MAX_VALUE || d % 1 > 0) { throw new OverflowException((Number) value, to); } result = new Integer((int) d); } else if (to == Long.class) { // OK if (d < Long.MIN_VALUE || d > Long.MAX_VALUE || d % 1 > 0) { throw new OverflowException((Number) value, to); } result = new Long((int) d); } else if (to == BigInteger.class) { // OK if (d % 1 > 0) { throw new OverflowException((Number) value, to); } final BigDecimal bd = BigDecimal.valueOf(d); result = bd.toBigInteger(); } else if (to == Float.class) { // OK if (d < -Float.MAX_VALUE || d > Float.MAX_VALUE) { throw new OverflowException((Number) value, to); } result = new Float((float) d); } else if (to == BigDecimal.class) { // OK result = BigDecimal.valueOf(d); } else { throw new TypeMismatchException(value.getClass(), to); } } else if (from == BigDecimal.class) { // BigDecimal -> ... final BigDecimal bd = (BigDecimal) value; if (to == Integer.class) { // OK result = new Integer(bd.intValueExact()); } else if (to == Long.class) { // OK result = new Long(bd.longValueExact()); } else if (to == BigInteger.class) { // OK // BigDecimal modulus final BigDecimal remainder = bd.remainder(BigDecimal.ONE); if (!remainder.equals(BigDecimal.ZERO)) { throw new OverflowException(bd, to); } result = bd.toBigInteger(); } else if (to == Float.class) { // OK if (bd.compareTo(BigDecimal_MIN_FLOAT) < 0 || bd.compareTo(BigDecimal_MAX_FLOAT) > 0) { throw new OverflowException(bd, to); } result = new Float(bd.floatValue()); } else if (to == Double.class) { // OK if (bd.compareTo(BigDecimal_MIN_DOUBLE) < 0 || bd.compareTo(BigDecimal_MAX_DOUBLE) > 0) { throw new OverflowException(bd, to); } result = new Double(bd.doubleValue()); } else { throw new TypeMismatchException(value.getClass(), to); } } else { throw new UnexpectedException("convert: " + from.getName()); } } catch (final ArithmeticException e) { // Thrown by intValueExact() etc. throw new OverflowException((Number) value, to); } } @SuppressWarnings("unchecked") final T t = (T) result; return t; }