diff --git a/db/ddlutils/oracle/functions/C_Currency_Rate.sql b/db/ddlutils/oracle/functions/C_Currency_Rate.sql index 3eb8dbe55d..bdda80d306 100644 --- a/db/ddlutils/oracle/functions/C_Currency_Rate.sql +++ b/db/ddlutils/oracle/functions/C_Currency_Rate.sql @@ -61,7 +61,7 @@ BEGIN FROM ( SELECT C_ConversionType_ID FROM C_ConversionType - WHERE IsDefault='Y' + WHERE IsActive='Y' AND IsDefault='Y' AND AD_Client_ID IN (0,p_Client_ID) ORDER BY AD_Client_ID DESC ) @@ -137,7 +137,7 @@ BEGIN CURSOR CUR_Rate IS SELECT MultiplyRate FROM C_Conversion_Rate - WHERE C_Currency_ID=v_CurrencyFrom AND C_Currency_ID_To=v_CurrencyTo + WHERE IsActive='Y' AND C_Currency_ID=v_CurrencyFrom AND C_Currency_ID_To=v_CurrencyTo AND C_ConversionType_ID=v_ConversionType_ID AND v_ConvDate BETWEEN ValidFrom AND ValidTo AND AD_Client_ID IN (0,p_Client_ID) AND AD_Org_ID IN (0,p_Org_ID) diff --git a/db/ddlutils/postgresql/functions/C_Currency_Rate.sql b/db/ddlutils/postgresql/functions/C_Currency_Rate.sql index 9b9827d6e9..732649841c 100644 --- a/db/ddlutils/postgresql/functions/C_Currency_Rate.sql +++ b/db/ddlutils/postgresql/functions/C_Currency_Rate.sql @@ -65,7 +65,7 @@ BEGIN SELECT C_ConversionType_ID INTO v_ConversionType_ID FROM C_ConversionType - WHERE IsDefault='Y' + WHERE IsActive='Y' AND IsDefault='Y' AND AD_Client_ID IN (0,p_Client_ID) ORDER BY AD_Client_ID DESC LIMIT 1; @@ -140,7 +140,7 @@ BEGIN BEGIN FOR c IN SELECT MultiplyRate FROM C_Conversion_Rate - WHERE C_Currency_ID=v_CurrencyFrom AND C_Currency_ID_To=v_CurrencyTo + WHERE IsActive='Y' AND C_Currency_ID=v_CurrencyFrom AND C_Currency_ID_To=v_CurrencyTo AND C_ConversionType_ID=v_ConversionType_ID AND v_ConvDate BETWEEN ValidFrom AND ValidTo AND AD_Client_ID IN (0,p_Client_ID) AND AD_Org_ID IN (0,p_Org_ID) diff --git a/migration/i2.0z/oracle/201410231928_IDEMPIERE-2269.sql b/migration/i2.0z/oracle/201410231928_IDEMPIERE-2269.sql new file mode 100644 index 0000000000..f2144e49ab --- /dev/null +++ b/migration/i2.0z/oracle/201410231928_IDEMPIERE-2269.sql @@ -0,0 +1,194 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Oct 23, 2014 7:27:09 PM COT +-- IDEMPIERE-2250 Charge on bank transfer not needed +DELETE FROM C_Conversion_Rate WHERE C_Conversion_Rate_ID=117 +; + +-- Oct 23, 2014 7:27:11 PM COT +DELETE FROM C_Conversion_Rate WHERE C_Conversion_Rate_ID=120 +; + +-- Oct 23, 2014 7:27:14 PM COT +DELETE FROM C_Conversion_Rate WHERE C_Conversion_Rate_ID=119 +; + +CREATE OR REPLACE FUNCTION currencyRate +( + p_CurFrom_ID IN NUMBER, + p_CurTo_ID IN NUMBER, + p_ConvDate IN DATE, + p_ConversionType_ID IN NUMBER, + p_Client_ID IN NUMBER, + p_Org_ID IN NUMBER +) +RETURN NUMBER +/************************************************************************* + * The contents of this file are subject to the Compiere License. You may + * obtain a copy of the License at http://www.compiere.org/license.html + * Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either + * express or implied. See the License for details. Code: Compiere ERP+CRM + * Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved. + ************************************************************************* + * $Id: C_Currency_Rate.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $ + *** + * Title: Return Conversion Rate + * Description: + * from CurrencyFrom_ID to CurrencyTo_ID + * Returns NULL, if rate not found + * Test + * SELECT C_Currency_Rate(116, 100, null, null) FROM DUAL; => .647169 + * SELECT C_Currency_Rate(116, 100) FROM DUAL; => .647169 + ************************************************************************/ +AS + -- Currency From variables + cf_IsEuro CHAR(1); + cf_IsEMUMember CHAR(1); + cf_EMUEntryDate DATE; + cf_EMURate NUMBER; + -- Currency To variables + ct_IsEuro CHAR(1); + ct_IsEMUMember CHAR(1); + ct_EMUEntryDate DATE; + ct_EMURate NUMBER; + -- Triangle + v_CurrencyFrom NUMBER; + v_CurrencyTo NUMBER; + v_CurrencyEuro NUMBER; + -- + v_ConvDate DATE := SysDate; + v_ConversionType_ID NUMBER := 0; + v_Rate NUMBER; +BEGIN + -- No Conversion + IF (p_CurFrom_ID = p_CurTo_ID) THEN + RETURN 1; + END IF; + -- Default Date Parameter + IF (p_ConvDate IS NOT NULL) THEN + v_ConvDate := p_ConvDate; -- SysDate + END IF; + -- Default Conversion Type + IF (p_ConversionType_ID IS NULL OR p_ConversionType_ID = 0) THEN + BEGIN + SELECT C_ConversionType_ID + INTO v_ConversionType_ID + FROM ( + SELECT C_ConversionType_ID + FROM C_ConversionType + WHERE IsActive='Y' AND IsDefault='Y' + AND AD_Client_ID IN (0,p_Client_ID) + ORDER BY AD_Client_ID DESC + ) + WHERE ROWNUM=1; + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Conversion Type Not Found'); + END; + ELSE + v_ConversionType_ID := p_ConversionType_ID; + END IF; + + -- Get Currency Info + SELECT MAX(TO_CHAR(IsEuro)), MAX(TO_CHAR(IsEMUMember)), MAX(EMUEntryDate), MAX(EMURate) + INTO cf_IsEuro, cf_IsEMUMember, cf_EMUEntryDate, cf_EMURate + FROM C_Currency + WHERE C_Currency_ID = p_CurFrom_ID; + -- Not Found + IF (cf_IsEuro IS NULL) THEN + DBMS_OUTPUT.PUT_LINE('From Currency Not Found'); + RETURN NULL; + END IF; + SELECT MAX(TO_CHAR(IsEuro)), MAX(TO_CHAR(IsEMUMember)), MAX(EMUEntryDate), MAX(EMURate) + INTO ct_IsEuro, ct_IsEMUMember, ct_EMUEntryDate, ct_EMURate + FROM C_Currency + WHERE C_Currency_ID = p_CurTo_ID; + -- Not Found + IF (ct_IsEuro IS NULL) THEN + DBMS_OUTPUT.PUT_LINE('To Currency Not Found'); + RETURN NULL; + END IF; + + -- Fixed - From Euro to EMU + IF (cf_IsEuro = 'Y' AND ct_IsEMUMember ='Y' AND v_ConvDate >= ct_EMUEntryDate) THEN + RETURN ct_EMURate; + END IF; + + -- Fixed - From EMU to Euro + IF (ct_IsEuro = 'Y' AND cf_IsEMUMember ='Y' AND v_ConvDate >= cf_EMUEntryDate) THEN + RETURN 1 / cf_EMURate; + END IF; + + -- Fixed - From EMU to EMU + IF (cf_IsEMUMember = 'Y' AND cf_IsEMUMember ='Y' + AND v_ConvDate >= cf_EMUEntryDate AND v_ConvDate >= ct_EMUEntryDate) THEN + RETURN ct_EMURate / cf_EMURate; + END IF; + + -- Flexible Rates + v_CurrencyFrom := p_CurFrom_ID; + v_CurrencyTo := p_CurTo_ID; + + -- if EMU Member involved, replace From/To Currency + IF ((cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) + OR (ct_isEMUMember = 'Y' AND v_ConvDate >= ct_EMUEntryDate)) THEN + SELECT MAX(C_Currency_ID) + INTO v_CurrencyEuro + FROM C_Currency + WHERE IsEuro = 'Y'; + -- Conversion Rate not Found + IF (v_CurrencyEuro IS NULL) THEN + DBMS_OUTPUT.PUT_LINE('Euro Not Found'); + RETURN NULL; + END IF; + IF (cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) THEN + v_CurrencyFrom := v_CurrencyEuro; + ELSE + v_CurrencyTo := v_CurrencyEuro; + END IF; + END IF; + + -- Get Rate + DECLARE + CURSOR CUR_Rate IS + SELECT MultiplyRate + FROM C_Conversion_Rate + WHERE IsActive='Y' AND C_Currency_ID=v_CurrencyFrom AND C_Currency_ID_To=v_CurrencyTo + AND C_ConversionType_ID=v_ConversionType_ID + AND v_ConvDate BETWEEN ValidFrom AND ValidTo + AND AD_Client_ID IN (0,p_Client_ID) AND AD_Org_ID IN (0,p_Org_ID) + ORDER BY AD_Client_ID DESC, AD_Org_ID DESC, ValidFrom DESC; + BEGIN + FOR c IN CUR_Rate LOOP + v_Rate := c.MultiplyRate; + EXIT; -- only first + END LOOP; + END; + -- Not found + IF (v_Rate IS NULL) THEN + DBMS_OUTPUT.PUT_LINE('Conversion Rate Not Found'); + RETURN NULL; + END IF; + + -- Currency From was EMU + IF (cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) THEN + RETURN v_Rate / cf_EMURate; + END IF; + + -- Currency To was EMU + IF (ct_isEMUMember = 'Y' AND v_ConvDate >= ct_EMUEntryDate) THEN + RETURN v_Rate * ct_EMURate; + END IF; + + RETURN v_Rate; + +EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(SQLERRM); + RETURN NULL; + +END currencyRate; +/ + +SELECT register_migration_script('201410231928_IDEMPIERE-2269.sql') FROM dual +; + diff --git a/migration/i2.0z/oracle/201410271541_IDEMPIERE-2276.sql b/migration/i2.0z/oracle/201410271541_IDEMPIERE-2276.sql new file mode 100644 index 0000000000..ed54a39eb4 --- /dev/null +++ b/migration/i2.0z/oracle/201410271541_IDEMPIERE-2276.sql @@ -0,0 +1,11 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Oct 27, 2014 3:39:07 PM COT +-- IDEMPIERE-2250 Charge on bank transfer not needed +UPDATE AD_Field SET DisplayLogic='@PaymentRule@=''P''',Updated=TO_DATE('2014-10-27 15:39:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=3439 +; + +SELECT register_migration_script('201410271541_IDEMPIERE-2276.sql') FROM dual +; + diff --git a/migration/i2.0z/oracle/201410271848_IDEMPIERE-2279.sql b/migration/i2.0z/oracle/201410271848_IDEMPIERE-2279.sql new file mode 100644 index 0000000000..97dc5d20b8 --- /dev/null +++ b/migration/i2.0z/oracle/201410271848_IDEMPIERE-2279.sql @@ -0,0 +1,10 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Oct 28, 2014 6:45:00 PM CET +-- IDEMPIERE-2279 C_ContactActivity SalesRep_ID has no AD_Reference_Value_ID +UPDATE AD_Column SET AD_Reference_Value_ID=110,Updated=TO_DATE('2014-10-28 18:45:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=62467 +; + +SELECT register_migration_script('201410271848_IDEMPIERE-2279.sql') FROM dual +; \ No newline at end of file diff --git a/migration/i2.0z/oracle/201410291142_IDEMPIERE-2260.sql b/migration/i2.0z/oracle/201410291142_IDEMPIERE-2260.sql new file mode 100644 index 0000000000..ef2c57c3f5 --- /dev/null +++ b/migration/i2.0z/oracle/201410291142_IDEMPIERE-2260.sql @@ -0,0 +1,6 @@ +update ad_system set name='iDempiere' where name='?' +; + +SELECT register_migration_script('201410291142_IDEMPIERE-2260.sql') FROM dual +; + diff --git a/migration/i2.0z/postgresql/201410231928_IDEMPIERE-2269.sql b/migration/i2.0z/postgresql/201410231928_IDEMPIERE-2269.sql new file mode 100644 index 0000000000..2ad209d92a --- /dev/null +++ b/migration/i2.0z/postgresql/201410231928_IDEMPIERE-2269.sql @@ -0,0 +1,195 @@ +-- Oct 23, 2014 7:27:09 PM COT +-- IDEMPIERE-2250 Charge on bank transfer not needed +DELETE FROM C_Conversion_Rate WHERE C_Conversion_Rate_ID=117 +; + +-- Oct 23, 2014 7:27:11 PM COT +DELETE FROM C_Conversion_Rate WHERE C_Conversion_Rate_ID=120 +; + +-- Oct 23, 2014 7:27:14 PM COT +DELETE FROM C_Conversion_Rate WHERE C_Conversion_Rate_ID=119 +; + +CREATE OR REPLACE FUNCTION currencyRate( + p_CurFrom_ID NUMERIC, + p_CurTo_ID NUMERIC, + p_ConvDate timestamp with time zone, + p_ConversionType_ID NUMERIC, + p_Client_ID NUMERIC, + p_Org_ID NUMERIC + ) + +RETURNS numeric AS $body$ + +/************************************************************************* + * The contents of this file are subject to the Compiere License. You may + * obtain a copy of the License at http://www.compiere.org/license.html + * Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either + * express or implied. See the License for details. Code: Compiere ERP+CRM + * Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved. + * + * converted to postgreSQL by Karsten Thiemann (Schaeffer AG), + * kthiemann@adempiere.org + ************************************************************************* + *** + * Title: Return Conversion Rate + * Description: + * from CurrencyFrom_ID to CurrencyTo_ID + * Returns NULL, if rate not found + * Test + * SELECT currencyrate(116, 100, null, null, null, null) FROM AD_System; => .647169 + ************************************************************************/ + + +DECLARE + -- Currency From variables + cf_IsEuro CHAR(1); + cf_IsEMUMember CHAR(1); + cf_EMUEntryDate timestamp with time zone; + cf_EMURate NUMERIC; + -- Currency To variables + ct_IsEuro CHAR(1); + ct_IsEMUMember CHAR(1); + ct_EMUEntryDate DATE; + ct_EMURate NUMERIC; + -- Triangle + v_CurrencyFrom NUMERIC; + v_CurrencyTo NUMERIC; + v_CurrencyEuro NUMERIC; + -- + v_ConvDate timestamp with time zone := now(); + v_ConversionType_ID NUMERIC := 0; + v_Rate NUMERIC; + c RECORD; + +BEGIN +-- No Conversion + IF (p_CurFrom_ID = p_CurTo_ID) THEN + RETURN 1; + END IF; + -- Default Date Parameter + IF (p_ConvDate IS NOT NULL) THEN + v_ConvDate := p_ConvDate; -- SysDate + END IF; + -- Default Conversion Type + IF (p_ConversionType_ID IS NULL OR p_ConversionType_ID = 0) THEN + BEGIN + SELECT C_ConversionType_ID + INTO v_ConversionType_ID + FROM C_ConversionType + WHERE IsActive='Y' AND IsDefault='Y' + AND AD_Client_ID IN (0,p_Client_ID) + ORDER BY AD_Client_ID DESC + LIMIT 1; + EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'Conversion Type Not Found'; + END; + ELSE + v_ConversionType_ID := p_ConversionType_ID; + END IF; + + -- Get Currency Info + SELECT MAX(IsEuro), MAX(IsEMUMember), MAX(EMUEntryDate), MAX(EMURate) + INTO cf_IsEuro, cf_IsEMUMember, cf_EMUEntryDate, cf_EMURate + FROM C_Currency + WHERE C_Currency_ID = p_CurFrom_ID; + -- Not Found + IF (cf_IsEuro IS NULL) THEN + RAISE NOTICE 'From Currency Not Found'; + RETURN NULL; + END IF; + SELECT MAX(IsEuro), MAX(IsEMUMember), MAX(EMUEntryDate), MAX(EMURate) + INTO ct_IsEuro, ct_IsEMUMember, ct_EMUEntryDate, ct_EMURate + FROM C_Currency + WHERE C_Currency_ID = p_CurTo_ID; + -- Not Found + IF (ct_IsEuro IS NULL) THEN + RAISE NOTICE 'To Currency Not Found'; + RETURN NULL; + END IF; + + -- Fixed - From Euro to EMU + IF (cf_IsEuro = 'Y' AND ct_IsEMUMember ='Y' AND v_ConvDate >= ct_EMUEntryDate) THEN + RETURN ct_EMURate; + END IF; + + -- Fixed - From EMU to Euro + IF (ct_IsEuro = 'Y' AND cf_IsEMUMember ='Y' AND v_ConvDate >= cf_EMUEntryDate) THEN + RETURN 1 / cf_EMURate; + END IF; + + -- Fixed - From EMU to EMU + IF (cf_IsEMUMember = 'Y' AND cf_IsEMUMember ='Y' + AND v_ConvDate >= cf_EMUEntryDate AND v_ConvDate >= ct_EMUEntryDate) THEN + RETURN ct_EMURate / cf_EMURate; + END IF; + + -- Flexible Rates + v_CurrencyFrom := p_CurFrom_ID; + v_CurrencyTo := p_CurTo_ID; + + -- if EMU Member involved, replace From/To Currency + IF ((cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) + OR (ct_isEMUMember = 'Y' AND v_ConvDate >= ct_EMUEntryDate)) THEN + SELECT MAX(C_Currency_ID) + INTO v_CurrencyEuro + FROM C_Currency + WHERE IsEuro = 'Y'; + -- Conversion Rate not Found + IF (v_CurrencyEuro IS NULL) THEN + RAISE NOTICE 'Euro Not Found'; + RETURN NULL; + END IF; + IF (cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) THEN + v_CurrencyFrom := v_CurrencyEuro; + ELSE + v_CurrencyTo := v_CurrencyEuro; + END IF; + END IF; + + -- Get Rate + + BEGIN + FOR c IN SELECT MultiplyRate + FROM C_Conversion_Rate + WHERE IsActive='Y' AND C_Currency_ID=v_CurrencyFrom AND C_Currency_ID_To=v_CurrencyTo + AND C_ConversionType_ID=v_ConversionType_ID + AND v_ConvDate BETWEEN ValidFrom AND ValidTo + AND AD_Client_ID IN (0,p_Client_ID) AND AD_Org_ID IN (0,p_Org_ID) + ORDER BY AD_Client_ID DESC, AD_Org_ID DESC, ValidFrom DESC + LOOP + v_Rate := c.MultiplyRate; + EXIT; -- only first + END LOOP; + END; + -- Not found + IF (v_Rate IS NULL) THEN + RAISE NOTICE 'Conversion Rate Not Found'; + RETURN NULL; + END IF; + + -- Currency From was EMU + IF (cf_isEMUMember = 'Y' AND v_ConvDate >= cf_EMUEntryDate) THEN + RETURN v_Rate / cf_EMURate; + END IF; + + -- Currency To was EMU + IF (ct_isEMUMember = 'Y' AND v_ConvDate >= ct_EMUEntryDate) THEN + RETURN v_Rate * ct_EMURate; + END IF; + + RETURN v_Rate; + +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE '%', SQLERRM; + RETURN NULL; + + +END; + +$body$ LANGUAGE plpgsql STABLE; + +SELECT register_migration_script('201410231928_IDEMPIERE-2269.sql') FROM dual +; + diff --git a/migration/i2.0z/postgresql/201410271541_IDEMPIERE-2276.sql b/migration/i2.0z/postgresql/201410271541_IDEMPIERE-2276.sql new file mode 100644 index 0000000000..03bf41b770 --- /dev/null +++ b/migration/i2.0z/postgresql/201410271541_IDEMPIERE-2276.sql @@ -0,0 +1,8 @@ +-- Oct 27, 2014 3:39:07 PM COT +-- IDEMPIERE-2250 Charge on bank transfer not needed +UPDATE AD_Field SET DisplayLogic='@PaymentRule@=''P''',Updated=TO_TIMESTAMP('2014-10-27 15:39:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=3439 +; + +SELECT register_migration_script('201410271541_IDEMPIERE-2276.sql') FROM dual +; + diff --git a/migration/i2.0z/postgresql/201410271848_IDEMPIERE-2279.sql b/migration/i2.0z/postgresql/201410271848_IDEMPIERE-2279.sql new file mode 100644 index 0000000000..b182a345dc --- /dev/null +++ b/migration/i2.0z/postgresql/201410271848_IDEMPIERE-2279.sql @@ -0,0 +1,7 @@ +-- Oct 28, 2014 6:45:00 PM CET +-- IDEMPIERE-2279 C_ContactActivity SalesRep_ID has no AD_Reference_Value_ID +UPDATE AD_Column SET AD_Reference_Value_ID=110,Updated=TO_TIMESTAMP('2014-10-28 18:45:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=62467 +; + +SELECT register_migration_script('201410271848_IDEMPIERE-2279.sql') FROM dual +; \ No newline at end of file diff --git a/migration/i2.0z/postgresql/201410291142_IDEMPIERE-2260.sql b/migration/i2.0z/postgresql/201410291142_IDEMPIERE-2260.sql new file mode 100644 index 0000000000..ef2c57c3f5 --- /dev/null +++ b/migration/i2.0z/postgresql/201410291142_IDEMPIERE-2260.sql @@ -0,0 +1,6 @@ +update ad_system set name='iDempiere' where name='?' +; + +SELECT register_migration_script('201410291142_IDEMPIERE-2260.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java b/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java index 74e5e57884..e6b85f7f38 100644 --- a/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java +++ b/org.adempiere.base/src/org/adempiere/util/ModelInterfaceGenerator.java @@ -616,13 +616,9 @@ public class ModelInterfaceGenerator if ("D".equals(entityType)) return "org.compiere.model"; - for (MEntityType entity : MEntityType.getEntityTypes(Env.getCtx())) - { - if (entity.getEntityType().equals(entityType)) - { - return entity.getModelPackage(); - } - } + MEntityType entity = MEntityType.get(Env.getCtx(), entityType); + if (entity != null) + return entity.getModelPackage(); return null; } diff --git a/org.adempiere.base/src/org/compiere/Adempiere.java b/org.adempiere.base/src/org/compiere/Adempiere.java index 19d9de5268..332c51952f 100644 --- a/org.adempiere.base/src/org/compiere/Adempiere.java +++ b/org.adempiere.base/src/org/compiere/Adempiere.java @@ -35,6 +35,7 @@ import javax.swing.event.EventListenerList; import org.adempiere.base.Core; import org.compiere.db.CConnection; import org.compiere.model.MClient; +import org.compiere.model.MSysConfig; import org.compiere.model.MSystem; import org.compiere.model.ModelValidationEngine; import org.compiere.model.ServerStateChangeEvent; @@ -153,6 +154,10 @@ public final class Adempiere */ public static String getVersion() { + String version = MSysConfig.getValue(MSysConfig.APPLICATION_MAIN_VERSION, null); + if(version != null) + return version; + IProduct product = Platform.getProduct(); if (product != null) { Bundle bundle = product.getDefiningBundle(); @@ -170,9 +175,40 @@ public final class Adempiere return "Unknown"; } // getVersion + public static boolean isVersionShown(){ + return MSysConfig.getBooleanValue(MSysConfig.APPLICATION_MAIN_VERSION_SHOWN, true); + } + + public static boolean isDBVersionShown(){ + boolean defaultVal = MSystem.get(Env.getCtx()).getSystemStatus().equalsIgnoreCase("P") ? false : true; + return MSysConfig.getBooleanValue(MSysConfig.APPLICATION_DATABASE_VERSION_SHOWN, defaultVal); + } + + public static boolean isVendorShown(){ + return MSysConfig.getBooleanValue(MSysConfig.APPLICATION_IMPLEMENTATION_VENDOR_SHOWN, true); + } + + public static boolean isJVMShown(){ + boolean defaultVal = MSystem.get(Env.getCtx()).getSystemStatus().equalsIgnoreCase("P") ? false : true; + return MSysConfig.getBooleanValue(MSysConfig.APPLICATION_JVM_VERSION_SHOWN, defaultVal); + } + + public static boolean isOSShown(){ + boolean defaultVal = MSystem.get(Env.getCtx()).getSystemStatus().equalsIgnoreCase("P") ? false : true; + return MSysConfig.getBooleanValue(MSysConfig.APPLICATION_OS_INFO_SHOWN, defaultVal); + } + + public static boolean isHostShown() + { + boolean defaultVal = MSystem.get(Env.getCtx()).getSystemStatus().equalsIgnoreCase("P") ? false : true; + return MSysConfig.getBooleanValue(MSysConfig.APPLICATION_HOST_SHOWN, defaultVal); + } + public static String getDatabaseVersion() { - return DB.getSQLValueString(null, "select lastmigrationscriptapplied from ad_system"); +// return DB.getSQLValueString(null, "select lastmigrationscriptapplied from ad_system"); + return MSysConfig.getValue(MSysConfig.APPLICATION_DATABASE_VERSION, + DB.getSQLValueString(null, "select lastmigrationscriptapplied from ad_system")); } /** @@ -238,6 +274,11 @@ public final class Adempiere */ public static String getImplementationVendor() { + if(DB.isConnected()){ + String vendor = MSysConfig.getValue(MSysConfig.APPLICATION_IMPLEMENTATION_VENDOR, null); + if(vendor != null) + return vendor; + } if (s_ImplementationVendor == null) setPackageInfo(); return s_ImplementationVendor; diff --git a/org.adempiere.base/src/org/compiere/model/MAssetGroup.java b/org.adempiere.base/src/org/compiere/model/MAssetGroup.java index de3d9bd917..a7429ca6c3 100644 --- a/org.adempiere.base/src/org/compiere/model/MAssetGroup.java +++ b/org.adempiere.base/src/org/compiere/model/MAssetGroup.java @@ -58,6 +58,8 @@ public class MAssetGroup extends X_A_Asset_Group ag = new MAssetGroup(ctx, A_Asset_Group_ID, null); if (ag != null && ag.get_ID() != A_Asset_Group_ID) ag = null; + else + s_cache.put(A_Asset_Group_ID, ag); // return ag; } diff --git a/org.adempiere.base/src/org/compiere/model/MClient.java b/org.adempiere.base/src/org/compiere/model/MClient.java index eea3f1af16..5aa4c532ce 100644 --- a/org.adempiere.base/src/org/compiere/model/MClient.java +++ b/org.adempiere.base/src/org/compiere/model/MClient.java @@ -447,9 +447,10 @@ public class MClient extends X_AD_Client return msgreturn.toString(); } // - StringBuilder msgce = new StringBuilder("iDempiere EMail Test: ").append(toString()); + String systemName = MSystem.get(getCtx()).getName(); + StringBuilder msgce = new StringBuilder(systemName).append(" EMail Test: ").append(toString()); EMail email = createEMail (getRequestEMail(), - "iDempiere EMail Test",msgce.toString()); + systemName + " EMail Test",msgce.toString()); if (email == null){ StringBuilder msgreturn = new StringBuilder("Could not create EMail: ").append(getName()); return msgreturn.toString(); diff --git a/org.adempiere.base/src/org/compiere/model/MEntityType.java b/org.adempiere.base/src/org/compiere/model/MEntityType.java index 16edadf0fe..a0b641561a 100644 --- a/org.adempiere.base/src/org/compiere/model/MEntityType.java +++ b/org.adempiere.base/src/org/compiere/model/MEntityType.java @@ -16,15 +16,13 @@ *****************************************************************************/ package org.compiere.model; +import static org.compiere.model.SystemIDs.ENTITYTYPE_ADEMPIERE; +import static org.compiere.model.SystemIDs.ENTITYTYPE_DICTIONARY; + import java.sql.ResultSet; -import java.util.ArrayList; -import java.util.List; import java.util.Properties; -import java.util.StringTokenizer; -import java.util.logging.Level; - -import static org.compiere.model.SystemIDs.*; +import org.compiere.util.CCache; import org.compiere.util.CLogger; /** @@ -46,27 +44,8 @@ public class MEntityType extends X_AD_EntityType /** * */ - private static final long serialVersionUID = 4670009709141738924L; + private static final long serialVersionUID = -8449015496292546851L; - /** - * Get Entity Types - * @param ctx context - * @return entity type array - */ - static synchronized public MEntityType[] getEntityTypes(Properties ctx) - { - if (s_entityTypes != null) - return s_entityTypes; - List list = new Query(ctx, Table_Name, null, null) - .setOnlyActiveRecords(true) - .setOrderBy(COLUMNNAME_AD_EntityType_ID) - .list(); - s_entityTypes = new MEntityType[list.size()]; - list.toArray(s_entityTypes); - if (s_log.isLoggable(Level.FINER)) s_log.finer("# " + s_entityTypes.length); - return s_entityTypes; - } // getEntityTypes - /** * Get EntityType object by name * @param ctx @@ -75,102 +54,21 @@ public class MEntityType extends X_AD_EntityType */ public static MEntityType get(Properties ctx, String entityType) { - for (MEntityType entity : getEntityTypes(ctx)) - { - if (entity.getEntityType().equals(entityType)) - { - return entity; - } - } - return null; + MEntityType retValue = (MEntityType) s_cache.get (entityType); + if (retValue != null) + return retValue; + retValue = new Query(ctx, Table_Name, "EntityType=?", null) + .setParameters(entityType) + .firstOnly(); + if (retValue != null) + s_cache.put (entityType, retValue); + return retValue; } - /** - * Get Entity Type as String array - * @param ctx context - * @return entity type array - */ - static public String[] getEntityTypeStrings(Properties ctx) - { - MEntityType[] entityTypes = getEntityTypes(ctx); - ArrayList list = new ArrayList(); // list capabilities - String[] retValue = new String[entityTypes.length]; - for (int i = 0; i < entityTypes.length; i++) - { - String s = entityTypes[i].getEntityType().trim(); - list.add(s); - retValue[i] = s; - } - if (s_log.isLoggable(Level.FINER)) s_log.finer(list.toString()); - return retValue; - } // getEntityTypeStrings - - /** - * Get Entity Type Classpath array - * @param ctx context - * @return classpath array - */ - static public String[] getClasspaths(Properties ctx) - { - MEntityType[] entityTypes = getEntityTypes(ctx); - ArrayList list = new ArrayList(); - for (int i = 0; i < entityTypes.length; i++) - { - String classpath = entityTypes[i].getClasspath(); - if (classpath == null || classpath.length() == 0) - continue; - StringTokenizer st = new StringTokenizer(classpath, ";, \t\n\r\f"); - while (st.hasMoreTokens()) - { - String token = st.nextToken(); - if (token.length() > 0) - { - if (!list.contains(token)) - list.add(token); - } - } - } - String[] retValue = new String[list.size()]; - list.toArray(retValue); - if (s_log.isLoggable(Level.FINER)) s_log.finer(list.toString()); - return retValue; - } // getClathpaths - - /** - * Get Entity Type Model Package array - * @param ctx context - * @return entity type array - */ - static public String[] getModelPackages(Properties ctx) - { - MEntityType[] entityTypes = getEntityTypes(ctx); - ArrayList list = new ArrayList(); - list.add("adempiere.model"); // default - for (int i = 0; i < entityTypes.length; i++) - { - String modelPackage = entityTypes[i].getModelPackage(); - if (modelPackage == null || modelPackage.length() == 0) - continue; - StringTokenizer st = new StringTokenizer(modelPackage, ";, \t\n\r\f"); - while (st.hasMoreTokens()) - { - String token = st.nextToken(); - if (token.length() > 0) - { - if (!list.contains(token)) - list.add(token); - } - } - } - String[] retValue = new String[list.size()]; - list.toArray(retValue); - if (s_log.isLoggable(Level.FINER)) s_log.finer(list.toString()); - return retValue; - } // getModelPackages - /** Cached EntityTypes */ - private static MEntityType[] s_entityTypes = null; + private static CCache s_cache = new CCache(Table_Name, 20); /** Logger */ + @SuppressWarnings("unused") private static CLogger s_log = CLogger.getCLogger (MEntityType.class); /************************************************************************** @@ -268,7 +166,6 @@ public class MEntityType extends X_AD_EntityType */ //setAD_EntityType_ID(); } // new - s_entityTypes = null; // reset return true; } // beforeSave @@ -283,7 +180,6 @@ public class MEntityType extends X_AD_EntityType log.saveError("Error", "You cannot delete a System maintained entity"); return false; } - s_entityTypes = null; // reset return true; } // beforeDelete diff --git a/org.adempiere.base/src/org/compiere/model/MInfoWindow.java b/org.adempiere.base/src/org/compiere/model/MInfoWindow.java index 3cb5124094..5ef35477cd 100644 --- a/org.adempiere.base/src/org/compiere/model/MInfoWindow.java +++ b/org.adempiere.base/src/org/compiere/model/MInfoWindow.java @@ -170,8 +170,8 @@ public class MInfoWindow extends X_AD_InfoWindow Iterator iterator = lsInfoProcess.iterator(); while (iterator.hasNext()){ MInfoProcess testInfoProcess = iterator.next(); - // need more review - if (MRole.getDefault().getProcessAccess(testInfoProcess.getAD_Process_ID()) == null){ + Boolean access = MRole.getDefault().getProcessAccess(testInfoProcess.getAD_Process_ID()); + if (access == null || !access.booleanValue()) { iterator.remove(); } } diff --git a/org.adempiere.base/src/org/compiere/model/MProductCategory.java b/org.adempiere.base/src/org/compiere/model/MProductCategory.java index 1c836a32d9..4c1603765e 100644 --- a/org.adempiere.base/src/org/compiere/model/MProductCategory.java +++ b/org.adempiere.base/src/org/compiere/model/MProductCategory.java @@ -52,10 +52,13 @@ public class MProductCategory extends X_M_Product_Category public static MProductCategory get (Properties ctx, int M_Product_Category_ID) { Integer ii = new Integer (M_Product_Category_ID); - MProductCategory pc = (MProductCategory)s_cache.get(ii); - if (pc == null) - pc = new MProductCategory (ctx, M_Product_Category_ID, null); - return pc; + MProductCategory retValue = (MProductCategory)s_cache.get(ii); + if (retValue != null) + return retValue; + retValue = new MProductCategory (ctx, M_Product_Category_ID, null); + if (retValue.get_ID () != 0) + s_cache.put (M_Product_Category_ID, retValue); + return retValue; } // get /** diff --git a/org.adempiere.base/src/org/compiere/model/MSysConfig.java b/org.adempiere.base/src/org/compiere/model/MSysConfig.java index 90d04f1041..b2a568335e 100644 --- a/org.adempiere.base/src/org/compiere/model/MSysConfig.java +++ b/org.adempiere.base/src/org/compiere/model/MSysConfig.java @@ -42,14 +42,22 @@ public class MSysConfig extends X_AD_SysConfig /** * */ - private static final long serialVersionUID = 1418216769489567455L; + private static final long serialVersionUID = -5043918406658386237L; - public static final String ADDRESS_SAVE_REQUEST_RESPONSE_LOG = "ADDRESS_SAVE_REQUEST_RESPONSE_LOG"; public static final String ADDRESS_VALIDATION = "ADDRESS_VALIDATION"; public static final String ALERT_SEND_ATTACHMENT_AS_XLS = "ALERT_SEND_ATTACHMENT_AS_XLS"; public static final String ALLOW_APPLY_PAYMENT_TO_CREDITMEMO = "ALLOW_APPLY_PAYMENT_TO_CREDITMEMO"; public static final String ALLOW_OVER_APPLIED_PAYMENT = "ALLOW_OVER_APPLIED_PAYMENT"; public static final String ALogin_ShowOneRole = "ALogin_ShowOneRole"; + public static final String APPLICATION_DATABASE_VERSION = "APPLICATION_DATABASE_VERSION"; + public static final String APPLICATION_DATABASE_VERSION_SHOWN = "APPLICATION_DATABASE_VERSION_SHOWN"; + public static final String APPLICATION_HOST_SHOWN = "APPLICATION_HOST_SHOWN"; + public static final String APPLICATION_IMPLEMENTATION_VENDOR = "APPLICATION_IMPLEMENTATION_VENDOR"; + public static final String APPLICATION_IMPLEMENTATION_VENDOR_SHOWN = "APPLICATION_IMPLEMENTATION_VENDOR_SHOWN"; + public static final String APPLICATION_JVM_VERSION_SHOWN = "APPLICATION_JVM_VERSION_SHOWN"; + public static final String APPLICATION_MAIN_VERSION = "APPLICATION_MAIN_VERSION"; + public static final String APPLICATION_MAIN_VERSION_SHOWN = "APPLICATION_MAIN_VERSION_SHOWN"; + public static final String APPLICATION_OS_INFO_SHOWN = "APPLICATION_OS_INFO_SHOWN"; public static final String BACKGROUND_JOB_ALLOWED = "BACKGROUND_JOB_ALLOWED"; public static final String BACKGROUND_JOB_BY_DEFAULT = "BACKGROUND_JOB_BY_DEFAULT"; public static final String BACKGROUND_JOB_MAX_IN_SYSTEM = "BACKGROUND_JOB_MAX_IN_SYSTEM"; @@ -107,7 +115,6 @@ public class MSysConfig extends X_AD_SysConfig public static final String RecentItems_MaxShown = "RecentItems_MaxShown"; public static final String REPORT_SWAP_MAX_ROWS = "REPORT_SWAP_MAX_ROWS"; public static final String SHIPPING_DEFAULT_WEIGHT_PER_PACKAGE = "SHIPPING_DEFAULT_WEIGHT_PER_PACKAGE"; - public static final String SHIPPING_SAVE_REQUEST_RESPONSE_LOG = "SHIPPING_SAVE_REQUEST_RESPONSE_LOG"; public static final String START_VALUE_BPLOCATION_NAME = "START_VALUE_BPLOCATION_NAME"; public static final String SWING_LOGIN_ALLOW_REMEMBER_ME = "SWING_LOGIN_ALLOW_REMEMBER_ME"; public static final String SWING_OVERRIDE_TEXT_AREA_BEHAVIOUR = "SWING_OVERRIDE_TEXT_AREA_BEHAVIOUR"; @@ -116,7 +123,6 @@ public class MSysConfig extends X_AD_SysConfig public static final String SYSTEM_IN_MAINTENANCE_MODE = "SYSTEM_IN_MAINTENANCE_MODE"; public static final String SYSTEM_INSERT_CHANGELOG = "SYSTEM_INSERT_CHANGELOG"; public static final String SYSTEM_NATIVE_SEQUENCE = "SYSTEM_NATIVE_SEQUENCE"; - public static final String TAX_SAVE_REQUEST_RESPONSE_LOG = "TAX_SAVE_REQUEST_RESPONSE_LOG"; public static final String TWOPACK_HANDLE_TRANSLATIONS = "2PACK_HANDLE_TRANSLATIONS"; public static final String USE_EMAIL_FOR_LOGIN = "USE_EMAIL_FOR_LOGIN"; public static final String USER_LOCKING_MAX_ACCOUNT_LOCK_MINUTES = "USER_LOCKING_MAX_ACCOUNT_LOCK_MINUTES"; diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java index 5ac0b8870a..14e6437249 100644 --- a/org.adempiere.base/src/org/compiere/model/PO.java +++ b/org.adempiere.base/src/org/compiere/model/PO.java @@ -3014,6 +3014,8 @@ public abstract class PO { if (m_KeyColumns[i].endsWith("_ID")) sb.append(m_IDs[i]); + else if(m_IDs[i] instanceof Timestamp) + sb.append(DB.TO_DATE((Timestamp)m_IDs[i], false)); else { sb.append("'"); if (m_IDs[i] instanceof Boolean) { diff --git a/org.adempiere.base/src/org/compiere/util/Language.java b/org.adempiere.base/src/org/compiere/util/Language.java index c35c3b5ad3..d6a06c9a4e 100644 --- a/org.adempiere.base/src/org/compiere/util/Language.java +++ b/org.adempiere.base/src/org/compiere/util/Language.java @@ -22,7 +22,7 @@ import java.text.DateFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; +import java.util.List; import java.util.Locale; import java.util.logging.Level; @@ -42,7 +42,7 @@ public class Language implements Serializable /** * */ - private static final long serialVersionUID = 6705748825004207885L; + private static final long serialVersionUID = 8855937839841807335L; /** * @@ -59,19 +59,19 @@ public class Language implements Serializable /*** * System Languages. - * If you want to add a language, extend the array - * - or use the addLanguage() method. + * If you want to add a language, use the method getLanguage which extends the array **/ - static private Language[] s_languages = new Language[] { - new Language ("English", - AD_Language_en_US, Locale.US, null, null, - MediaSize.NA.LETTER) - }; + private static List s_languages = new ArrayList(); /** Base Language */ - private static Language s_baseLanguage = s_languages[0]; + private static Language s_baseLanguage = null; private static boolean isBaseLanguageSet = false; + static { + s_languages.add(new Language ("English", AD_Language_en_US, Locale.US, null, null, MediaSize.NA.LETTER)); + s_baseLanguage = s_languages.get(0); + } + /** Logger */ private static CLogger log = CLogger.getCLogger(Language.class.getName()); @@ -81,7 +81,7 @@ public class Language implements Serializable */ public static int getLanguageCount() { - return s_languages.length; + return s_languages.size(); } // getLanguageCount /** @@ -91,33 +91,18 @@ public class Language implements Serializable */ public static Language getLanguage (int index) { - if (index < 0 || index >= s_languages.length) + if (index < 0 || index >= s_languages.size()) return s_baseLanguage; - return s_languages[index]; + return s_languages.get(index); } // getLanguage - /** - * Add Language to supported Languages - * @param language new language - * @deprecated IDEMPIERE-489 Configure the language in the database - */ - public static void addLanguage (Language language) - { - if (language == null) - return; - ArrayList list = new ArrayList(Arrays.asList(s_languages)); - list.add(language); - s_languages = new Language[list.size()]; - list.toArray(s_languages); - } // addLanguage - /************************************************************************** * Get Language. * If language does not exist, create it on the fly assuming that it is valid * @param langInfo either language (en) or locale (en-US) or display name * @return Name (e.g. Deutsch) */ - public static Language getLanguage (String langInfo) + public synchronized static Language getLanguage (String langInfo) { int idxReplace = -1; String lang = langInfo; @@ -125,17 +110,17 @@ public class Language implements Serializable lang = System.getProperty("user.language", ""); // Search existing Languages - for (int i = 0; i < s_languages.length; i++) + for (int i = 0; i < s_languages.size(); i++) { - if ( lang.equals(s_languages[i].getName()) - || lang.equals(s_languages[i].getLanguageCode()) - || lang.equals(s_languages[i].getAD_Language())) { - if (!s_languages[i].m_fromDB && DB.isConnected()) { + if ( lang.equals(s_languages.get(i).getAD_Language()) + || lang.equals(s_languages.get(i).getLanguageCode()) + || lang.equals(s_languages.get(i).getName())) { + if (!s_languages.get(i).m_fromDB && DB.isConnected()) { // if language was not get from DB and now we're connected idxReplace = i; break; } else { - return s_languages[i]; + return s_languages.get(i); } } } @@ -181,17 +166,16 @@ public class Language implements Serializable if (ll == null) { ll = new Language (lang, lang, locale); } + if (log.isLoggable(Level.INFO)) { + StringBuilder msglog = new StringBuilder("Adding Language=").append(language).append(", Country=").append(country).append(", Locale=").append(locale); + log.info (msglog.toString()); + } StringBuilder msglog = new StringBuilder("Adding Language=").append(language).append(", Country=").append(country).append(", Locale=").append(locale); - if (log.isLoggable(Level.INFO)) log.info (msglog.toString()); + log.warning(msglog.toString()); if (idxReplace >= 0) { - s_languages[idxReplace] = ll; + s_languages.set(idxReplace, ll); } else { - // Add to Languages - ArrayList list = new ArrayList(Arrays.asList(s_languages)); - list.add(ll); - s_languages = new Language [list.size()]; - list.toArray(s_languages); - // Return Language + s_languages.add(ll); } return ll; } @@ -274,10 +258,10 @@ public class Language implements Serializable { if (locale != null) { - for (int i = 0; i < s_languages.length; i++) + for (int i = 0; i < s_languages.size(); i++) { - if (locale.getLanguage().equals(s_languages[i].getLocale().getLanguage())) - return s_languages[i].getAD_Language(); + if (locale.getLanguage().equals(s_languages.get(i).getLocale().getLanguage())) + return s_languages.get(i).getAD_Language(); } } return s_baseLanguage.getAD_Language(); @@ -309,9 +293,9 @@ public class Language implements Serializable */ public static String[] getNames() { - String[] retValue = new String[s_languages.length]; - for (int i = 0; i < s_languages.length; i++) - retValue[i] = s_languages[i].getName(); + String[] retValue = new String[s_languages.size()]; + for (int i = 0; i < s_languages.size(); i++) + retValue[i] = s_languages.get(i).getName(); return retValue; } // getNames diff --git a/org.adempiere.base/src/org/globalqss/process/CashFlow.java b/org.adempiere.base/src/org/globalqss/process/CashFlow.java index 3bf574687a..3ff691291e 100644 --- a/org.adempiere.base/src/org/globalqss/process/CashFlow.java +++ b/org.adempiere.base/src/org/globalqss/process/CashFlow.java @@ -85,6 +85,7 @@ public class CashFlow extends SvrProcess { dateFrom.set(Calendar.HOUR_OF_DAY, 0); dateFrom.set(Calendar.MINUTE, 0); dateFrom.set(Calendar.SECOND, 0); + dateFrom.set(Calendar.MILLISECOND, 0); p_dateFrom = new Timestamp(dateFrom.getTimeInMillis()); p_dateFrom.setNanos(0); diff --git a/org.adempiere.server-feature/utils.unix/unix/idempiere_RedHat.sh b/org.adempiere.server-feature/utils.unix/unix/idempiere_RedHat.sh index b8d5e43a5f..7d193968ae 100644 --- a/org.adempiere.server-feature/utils.unix/unix/idempiere_RedHat.sh +++ b/org.adempiere.server-feature/utils.unix/unix/idempiere_RedHat.sh @@ -1,7 +1,7 @@ #!/bin/bash # # FileName: idempiere.init -# Description: adempiere erp software startup and shutdown +# Description: idempiere erp software startup and shutdown # Vendor: K.K. Alice # Created: 05. April 2004 # Author: S. Christians @@ -13,7 +13,7 @@ # FilePerms: 0755 # # chkconfig: 2345 97 06 -# $Id: adempiere,v 1.1 2006/03/16 05:00:28 cruiz Exp $ +# $Id: idempiere,v 1.1 2006/03/16 05:00:28 cruiz Exp $ # initialization # adjust these variables to your environment @@ -39,7 +39,7 @@ start () { echo "iDempiere is already running" return 1 fi - echo -n "Starting ADempiere ERP: " + echo -n "Starting iDempiere ERP: " cd $IDEMPIERE_HOME/utils source $ENVFILE export LOGFILE=$IDEMPIERE_HOME/log/idempiere_`date +%Y%m%d%H%M%S`.log @@ -85,7 +85,7 @@ stop () { cd $IDEMPIERE_HOME/utils source $ENVFILE echo "Trying direct kill with signal -15" - # Adempiere didn't finish - try direct kill with signal 15, then signal 9 + # iDempiere didn't finish - try direct kill with signal 15, then signal 9 kill -15 -`ps ax o pgid,command | grep -v grep | grep $IDEMPIERE_HOME | sed -e 's/^ *//g' | cut -f 1 -d " " | sort -u` sleep 5 getidempierestatus diff --git a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java index f80cbeeda3..4263ae8988 100644 --- a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java +++ b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java @@ -57,7 +57,8 @@ public class ExecuteProcessCommand extends ServerResource { String procedureName = (String) entity.get("procedureName"); MRole role = MRole.get(context, Env.getAD_Role_ID(context), Env.getAD_User_ID(context), false); - if (!role.getProcessAccess(pi.getAD_Process_ID())) { + Boolean access = role.getProcessAccess(pi.getAD_Process_ID()); + if (access == null || !access.booleanValue()) { throw new AdempiereException("Access denied."); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index b4d69ccb2a..51b61c0841 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -63,6 +63,7 @@ import org.compiere.model.GridWindow; import org.compiere.model.I_AD_Preference; import org.compiere.model.MLookup; import org.compiere.model.MPreference; +import org.compiere.model.MRole; import org.compiere.model.MTab; import org.compiere.model.MTable; import org.compiere.model.MToolBarButton; @@ -633,8 +634,11 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer //get extra toolbar process buttons MToolBarButton[] mToolbarButtons = MToolBarButton.getProcessButtonOfTab(gridTab.getAD_Tab_ID(), null); for(MToolBarButton mToolbarButton : mToolbarButtons) { - ToolbarProcessButton toolbarProcessButton = new ToolbarProcessButton(mToolbarButton, this, windowPanel, windowNo); - toolbarProcessButtons.add(toolbarProcessButton); + Boolean access = MRole.getDefault().getProcessAccess(mToolbarButton.getAD_Process_ID()); + if (access != null && access.booleanValue()) { + ToolbarProcessButton toolbarProcessButton = new ToolbarProcessButton(mToolbarButton, this, windowPanel, windowNo); + toolbarProcessButtons.add(toolbarProcessButton); + } } if (toolbarProcessButtons.size() > 0) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java index b003c4a642..58bb311beb 100755 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java @@ -20,6 +20,8 @@ import static org.compiere.model.SystemIDs.COLUMN_C_INVOICE_C_BPARTNER_ID; import static org.compiere.model.SystemIDs.COLUMN_C_INVOICE_C_CURRENCY_ID; import static org.compiere.model.SystemIDs.COLUMN_C_PERIOD_AD_ORG_ID; +import java.sql.Timestamp; +import java.util.Calendar; import java.util.Vector; import java.util.logging.Level; @@ -336,7 +338,13 @@ public class WAllocation extends Allocation statusBar.setVflex("min"); // Date set to Login Date - dateField.setValue(Env.getContextAsDate(Env.getCtx(), "#Date")); + Calendar cal = Calendar.getInstance(); + cal.setTime(Env.getContextAsDate(Env.getCtx(), "#Date")); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + dateField.setValue(new Timestamp(cal.getTimeInMillis())); dateField.addValueChangeListener(this); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/factory/DefaultFeedbackService.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/factory/DefaultFeedbackService.java index 592fd130cf..c5da1f38f4 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/factory/DefaultFeedbackService.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/factory/DefaultFeedbackService.java @@ -103,7 +103,7 @@ public class DefaultFeedbackService implements IFeedbackService { Msg.getMsg(Env.getCtx(), "EMailSupport"), MUser.get(Env.getCtx()), "", // to - "iDempiere " + Msg.getMsg(Env.getCtx(), "TraceInfo"), + MSystem.get(Env.getCtx()).getName() + " " + Msg.getMsg(Env.getCtx(), "TraceInfo"), "", ds); dialog.setAttribute(Window.MODE_KEY, Mode.OVERLAPPED); diff --git a/org.adempiere.ui.zk/theme/default/zul/login/version-info.zul b/org.adempiere.ui.zk/theme/default/zul/login/version-info.zul index 1e61bcbebb..8574ca0f25 100644 --- a/org.adempiere.ui.zk/theme/default/zul/login/version-info.zul +++ b/org.adempiere.ui.zk/theme/default/zul/login/version-info.zul @@ -11,6 +11,13 @@ Copyright (C) 2009 Idalica Corporation var vendor = Adempiere.getImplementationVendor(); var jvm = Adempiere.getJavaInfo(); var os = Adempiere.getOSInfo(); + var isVersionShown = Adempiere.isVersionShown(); + var isDBVersionShown = Adempiere.isDBVersionShown(); + var isVendorShown = Adempiere.isVendorShown(); + var isJVMShown = Adempiere.isJVMShown(); + var isOSShown = Adempiere.isOSShown(); + var isHostShown = Adempiere.isHostShown(); + var isInfoShown = isVersionShown || isDBVersionShown || isVendorShown || isJVMShown || isOSShown || isHostShown; -
+]]> +
- + - + - + - + - + - +
Version : ${mainVersion}
Database Version : ${dbVersion}
Vendor : ${vendor}
JVM : ${jvm}
OS : ${os}
Host : ${desktop.execution.serverName}
-]]> +