From e4544f8d1bb2c649fcba05c6b29907e687460e1a Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 8 Apr 2020 16:30:05 +0200 Subject: [PATCH 1/5] IDEMPIERE-4236 Allow Mixed Invoice (Assets And Products) / drop localization code from core - that must go into a localization plugin --- .../AssetInvoiceWithMixedLines_LRO.java | 21 -------- .../idempiere/fa/model/ModelValidator.java | 52 +------------------ 2 files changed, 2 insertions(+), 71 deletions(-) delete mode 100644 org.adempiere.base/src/org/idempiere/fa/exceptions/AssetInvoiceWithMixedLines_LRO.java diff --git a/org.adempiere.base/src/org/idempiere/fa/exceptions/AssetInvoiceWithMixedLines_LRO.java b/org.adempiere.base/src/org/idempiere/fa/exceptions/AssetInvoiceWithMixedLines_LRO.java deleted file mode 100644 index 26fe12d2a0..0000000000 --- a/org.adempiere.base/src/org/idempiere/fa/exceptions/AssetInvoiceWithMixedLines_LRO.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - */ -package org.idempiere.fa.exceptions; - - -/** - * @author Teo Sarca, SC ARHIPAC SERVICE SRL - * - */ -public class AssetInvoiceWithMixedLines_LRO extends AssetException { - - /** - * - */ - private static final long serialVersionUID = 7477049497754422353L; - - public AssetInvoiceWithMixedLines_LRO() { - super("@AssetInvoiceWithMixedLines@"); - } -} diff --git a/org.adempiere.base/src/org/idempiere/fa/model/ModelValidator.java b/org.adempiere.base/src/org/idempiere/fa/model/ModelValidator.java index 2c5a890a8e..3f736c0ab5 100644 --- a/org.adempiere.base/src/org/idempiere/fa/model/ModelValidator.java +++ b/org.adempiere.base/src/org/idempiere/fa/model/ModelValidator.java @@ -22,7 +22,6 @@ import org.compiere.model.SetGetModel; import org.compiere.model.SetGetUtil; import org.compiere.util.CLogger; import org.compiere.util.DB; -import org.idempiere.fa.exceptions.AssetInvoiceWithMixedLines_LRO; import org.idempiere.fa.exceptions.AssetProductStockedException; @@ -57,7 +56,6 @@ implements org.compiere.model.ModelValidator, org.compiere.model.FactsValidator engine.addDocValidate(MInvoice.Table_Name, this); engine.addModelChange(MMatchInv.Table_Name, this); // -// engine.addFactsValidate(MDepreciationEntry.Table_Name, this); } public String login(int AD_Org_ID, int AD_Role_ID, int AD_User_ID) @@ -105,12 +103,6 @@ implements org.compiere.model.ModelValidator, org.compiere.model.FactsValidator // TABLE C_Invoice String tableName = po.get_TableName(); if(tableName.equals(MInvoice.Table_Name)){ - // Invoice - Validate Fixed Assets Invoice (LRO) - if (timing==TIMING_AFTER_PREPARE) - { - MInvoice invoice = (MInvoice)po; - validateFixedAssetsInvoice_LRO(invoice); - } if(timing==TIMING_AFTER_COMPLETE){ MInvoice mi = (MInvoice)po; @@ -134,7 +126,7 @@ implements org.compiere.model.ModelValidator, org.compiere.model.FactsValidator * @param m model * @param changeType set when called from model validator (See TYPE_*); else -1, when called from callout */ - public static void modelChange_InvoiceLine(SetGetModel m, int changeType) { + public void modelChange_InvoiceLine(SetGetModel m, int changeType) { // // Set Asset Related Fields: if (-1 == changeType || TYPE_BEFORE_NEW == changeType || TYPE_BEFORE_CHANGE == changeType) { @@ -201,7 +193,7 @@ implements org.compiere.model.ModelValidator, org.compiere.model.FactsValidator // // Check Product - fixed assets products shouldn't be stocked (but inventory objects are allowed) MProduct product = line.getProduct(); - if (product.isStocked() && line.get_ValueAsBoolean("IsFixedAssetInvoice")) { + if (product.isStocked() && line.isFixedAssetInvoice()) { throw new AssetProductStockedException(product); } } @@ -222,48 +214,8 @@ implements org.compiere.model.ModelValidator, org.compiere.model.FactsValidator DB.executeUpdateEx(sql, new Object[]{invoice_id}, m.get_TrxName()); } } - - /** - * Check if is a valid fixed asset related invoice (LRO) - * @param invoice - */ - private void validateFixedAssetsInvoice_LRO(MInvoice invoice) - { - if (invoice.get_ValueAsBoolean("IsFixedAssetInvoice")) - { - boolean hasFixedAssetLines = false; - boolean hasNormalLines = false; - for (MInvoiceLine line : invoice.getLines()) - { - if (line.get_ValueAsBoolean("IsFixedAssetInvoice")) - { - hasFixedAssetLines = true; - } - else if (line.getM_Product_ID() > 0) - { - MProduct product = MProduct.get(line.getCtx(), line.getM_Product_ID()); - if (product.isItem()) - { - // Only items are forbiden for FA invoices because in Romania these should use - // V_Liability vendor account and not V_Liability_FixedAssets vendor account - hasNormalLines = true; - } - } - // - // No mixed lines are allowed - if (hasFixedAssetLines && hasNormalLines) - { - throw new AssetInvoiceWithMixedLines_LRO(); - } - } - } - } - - - public String factsValidate(MAcctSchema schema, List facts, PO po) { - // TODO: implement it return null; } } From 8067cb23ed13858c5a2b861e148fa7a1df973faf Mon Sep 17 00:00:00 2001 From: Orlando Curieles Date: Thu, 28 Nov 2019 15:28:36 +0100 Subject: [PATCH 2/5] IDEMPIERE-4116 OSX Mac Compatibility --- org.idempiere.parent/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/org.idempiere.parent/pom.xml b/org.idempiere.parent/pom.xml index f092030126..4888ce7dd3 100644 --- a/org.idempiere.parent/pom.xml +++ b/org.idempiere.parent/pom.xml @@ -557,6 +557,11 @@ win32 x86_64 + + macosx + cocoa + x86_64 + JavaSE-11 JavaSE-11 From e7b227200ed919f25a8bfdcebb22fff3a3fd1d8f Mon Sep 17 00:00:00 2001 From: Ray Lee Date: Thu, 9 Apr 2020 06:08:41 +0800 Subject: [PATCH 3/5] IDEMPIERE-4240 --- .../src/org/compiere/model/MDocTypeCounter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/org.adempiere.base/src/org/compiere/model/MDocTypeCounter.java b/org.adempiere.base/src/org/compiere/model/MDocTypeCounter.java index c1514643d7..8b9d333cfc 100644 --- a/org.adempiere.base/src/org/compiere/model/MDocTypeCounter.java +++ b/org.adempiere.base/src/org/compiere/model/MDocTypeCounter.java @@ -82,6 +82,8 @@ public class MDocTypeCounter extends X_C_DocTypeCounter return Counter_C_DocType_ID; } // getCounterDocType_ID + + /** * Get (first) valid Counter document for document type * @param ctx context @@ -97,7 +99,7 @@ public class MDocTypeCounter extends X_C_DocTypeCounter // Direct Relationship MDocTypeCounter temp = null; - String sql = "SELECT * FROM C_DocTypeCounter WHERE C_DocType_ID=?"; + String sql = "SELECT * FROM C_DocTypeCounter WHERE IsActive = 'Y' and C_DocType_ID=?"; PreparedStatement pstmt = null; ResultSet rs = null; try From d368c2583a7910f30511b39e40f2623fba67f331 Mon Sep 17 00:00:00 2001 From: Nicolas Micoud Date: Sat, 11 Apr 2020 15:01:45 +0200 Subject: [PATCH 4/5] IDEMPIERE-4239 Web Services : AD_User_OrgAccess table is not used on login --- .../adinterface/CompiereService.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java index f5f57637ec..ad8d87f471 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java @@ -182,22 +182,25 @@ public class CompiereService { // Get Login Info String loginInfo = null; // Verify existence of User/Client/Org/Role and User's acces to Client & Org - String sql = "SELECT u.Name || '@' || c.Name || '.' || o.Name AS Text " - + "FROM AD_User u, AD_Client c, AD_Org o, AD_User_Roles ur, AD_Role r " - + "WHERE u.AD_User_ID=?" // #1 - + " AND c.AD_Client_ID=?" // #2 - + " AND o.AD_Org_ID=?" // #3 - + " AND ur.AD_Role_ID=?" // #4 - + " AND ur.AD_User_ID=u.AD_User_ID" - + " AND ur.AD_Role_ID=r.AD_Role_ID" - + " AND (o.AD_Client_ID = 0 OR o.AD_Client_ID=c.AD_Client_ID)" - + " AND (r.IsAccessAllOrgs='Y' OR (c.AD_Client_ID IN (SELECT AD_Client_ID FROM AD_Role_OrgAccess ca WHERE ca.AD_Role_ID=ur.AD_Role_ID)" - + " AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Role_OrgAccess ca WHERE ca.AD_Role_ID=ur.AD_Role_ID)))"; + + StringBuilder sql = new StringBuilder("SELECT u.Name || '@' || c.Name || '.' || o.Name AS Text") + .append(" FROM AD_User u, AD_Client c, AD_Org o, AD_Role r") + .append(" WHERE u.AD_User_ID = ?") // #1 + .append(" AND c.AD_Client_ID = ?") // #2 + .append(" AND o.AD_Org_ID = ?") // #3 + .append(" AND r.AD_Role_ID = ?") // #4 + .append(" AND (o.AD_Client_ID = 0 OR o.AD_Client_ID=c.AD_Client_ID)") + .append(" AND ( ") + .append(" r.IsAccessAllOrgs='Y'") + .append(" OR (r.IsUseUserOrgAccess='N' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Role_OrgAccess ra WHERE ra.AD_Role_ID=r.AD_Role_ID AND ra.IsActive='Y'))") + .append(" OR (r.IsUseUserOrgAccess='Y' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_User_OrgAccess ua WHERE ua.AD_User_ID=u.AD_User_ID AND ua.IsActive='Y'))") + .append(")"); + PreparedStatement pstmt = null; ResultSet rs = null; try { - pstmt = DB.prepareStatement(sql, null); + pstmt = DB.prepareStatement(sql.toString(), null); pstmt.setInt(1, AD_User_ID); pstmt.setInt(2, AD_Client_ID); pstmt.setInt(3, AD_Org_ID); From ba380e114e17b73d7d3ecb22bc2ebaafc1c8d51a Mon Sep 17 00:00:00 2001 From: hieplq Date: Mon, 6 Apr 2020 11:09:57 +0700 Subject: [PATCH 5/5] IDEMPIERE-3416: Implement the ability to track open DB connections (NPE) --- .../src/org/adempiere/impexp/GridTabCSVImporter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java index 17c12b20fe..b92420dea8 100644 --- a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java +++ b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java @@ -241,7 +241,8 @@ public class GridTabCSVImporter implements IGridTabImporter manageMasterTrx(gridTab, null); createTrx(gridTab); } - trx.setDisplayName(GridTabCSVImporter.class.getName()+"_fileImport_" + gridTab.getTableName()); + if (trx != null) + trx.setDisplayName(GridTabCSVImporter.class.getName()+"_fileImport_" + gridTab.getTableName()); String recordResult = processRecord(importMode, gridTab, indxDetail, isDetail, idx, rowResult, childs); rowResult.append(recordResult);