From 5080fb0eed99356d0949319f54e4e206ceb9550d Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 5 Mar 2014 14:45:20 +0800 Subject: [PATCH 01/10] IDEMPIERE-1173 1003754 Landed cost issue -- related to IDEMPIERE-1285. Fixed issues with one landed cost invoice line match against multiple receipt line. Handle incompatibility between average invoice and average po costing method. --- .../src/org/compiere/model/MCostDetail.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MCostDetail.java b/org.adempiere.base/src/org/compiere/model/MCostDetail.java index 6c4e4b3a00..3591772bd1 100644 --- a/org.adempiere.base/src/org/compiere/model/MCostDetail.java +++ b/org.adempiere.base/src/org/compiere/model/MCostDetail.java @@ -147,7 +147,7 @@ public class MCostDetail extends X_M_CostDetail BigDecimal Amt, BigDecimal Qty, String Description, String trxName) { - MCostDetail cd = get (as.getCtx(), "C_InvoiceLine_ID=? AND Coalesce(M_CostElement_ID,0)="+M_CostElement_ID, + MCostDetail cd = get (as.getCtx(), "C_InvoiceLine_ID=? AND Coalesce(M_CostElement_ID,0)="+M_CostElement_ID+" AND M_Product_ID="+M_Product_ID, C_InvoiceLine_ID, M_AttributeSetInstance_ID, as.getC_AcctSchema_ID(), trxName); // if (cd == null) // createNew @@ -921,6 +921,16 @@ public class MCostDetail extends X_M_CostDetail private boolean process (MAcctSchema as, MProduct product, MCostElement ce, int Org_ID, int M_ASI_ID) { + //handle compatibility issue between average invoice and average po + String costingMethod = product.getCostingMethod(as); + if (X_M_Cost.COSTINGMETHOD_AverageInvoice.equals(costingMethod)) { + if (ce.isAveragePO()) + return true; + } else if (X_M_Cost.COSTINGMETHOD_AveragePO.equals(costingMethod)) { + if (ce.isAverageInvoice()) + return true; + } + MCost cost = MCost.get(product, M_ASI_ID, as, Org_ID, ce.getM_CostElement_ID(), get_TrxName()); @@ -1139,7 +1149,7 @@ public class MCostDetail extends X_M_CostDetail { if (adjustment) { - String costingMethod = getM_InventoryLine().getM_Inventory().getCostingMethod(); + costingMethod = getM_InventoryLine().getM_Inventory().getCostingMethod(); if (MCostElement.COSTINGMETHOD_AverageInvoice.equals(costingMethod)) { cost.setWeightedAverage(amt.multiply(cost.getCurrentQty()), qty); @@ -1164,7 +1174,7 @@ public class MCostDetail extends X_M_CostDetail { if (adjustment) { - String costingMethod = getM_InventoryLine().getM_Inventory().getCostingMethod(); + costingMethod = getM_InventoryLine().getM_Inventory().getCostingMethod(); if (MCostElement.COSTINGMETHOD_AveragePO.equals(costingMethod)) { cost.setWeightedAverage(amt.multiply(cost.getCurrentQty()), qty); @@ -1234,7 +1244,7 @@ public class MCostDetail extends X_M_CostDetail { if (adjustment) { - String costingMethod = getM_InventoryLine().getM_Inventory().getCostingMethod(); + costingMethod = getM_InventoryLine().getM_Inventory().getCostingMethod(); if (MCostElement.COSTINGMETHOD_StandardCosting.equals(costingMethod)) { cost.add(amt.multiply(cost.getCurrentQty()), qty); From 7ca2cbc16718ae6ae41236347c4475dcab52447a Mon Sep 17 00:00:00 2001 From: Elaine Tan Date: Tue, 4 Mar 2014 17:07:45 +0800 Subject: [PATCH 02/10] IDEMPIERE-1787 1003797 Payment allocation completed but did not associate the payment to selected invoices - throw exception when 'Allocation not balanced' instead of logging as severe log --- org.adempiere.ui/src/org/compiere/apps/form/Allocation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java b/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java index 85473e3905..17ee0b030d 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java @@ -758,7 +758,7 @@ public class Allocation } if ( unmatchedApplied.signum() != 0 ) - log.log(Level.SEVERE, "Allocation not balanced -- out by " + unmatchedApplied ); + throw new AdempiereException("Allocation not balanced -- out by " + unmatchedApplied); // Should start WF if (alloc.get_ID() != 0) From 118c4f74efe5a629e9d7b128734158b764aa1424 Mon Sep 17 00:00:00 2001 From: Elaine Tan Date: Fri, 28 Feb 2014 10:55:14 +0800 Subject: [PATCH 03/10] IDEMPIERE-1776 Payment Allocation: Allow user to apply payment to credit memo --- org.adempiere.ui/src/org/compiere/apps/form/Allocation.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java b/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java index 17ee0b030d..499f8b6824 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java @@ -421,7 +421,8 @@ public class Allocation if (col == i_payment) { - if ( open.signum() > 0 && applied.signum() == -open.signum() ) + if (! MSysConfig.getBooleanValue("ALLOW_APPLY_PAYMENT_TO_CREDITMEMO", false, Env.getAD_Client_ID(Env.getCtx())) + && open.signum() > 0 && applied.signum() == -open.signum() ) applied = applied.negate(); if (! MSysConfig.getBooleanValue("ALLOW_OVER_APPLIED_PAYMENT", false, Env.getAD_Client_ID(Env.getCtx()))) if ( open.abs().compareTo( applied.abs() ) < 0 ) From f7733eb430cde48975fa56b8b3c97419730e33b0 Mon Sep 17 00:00:00 2001 From: hieplq Date: Fri, 14 Feb 2014 03:03:22 +0700 Subject: [PATCH 04/10] IDEMPIERE-1757:miss css file for browse diff IE --- .../WEB-INF/src/org/adempiere/webui/theme/ITheme.java | 1 + org.adempiere.ui.zk/theme/default/css/thememoz.css.dsp | 2 ++ org.adempiere.ui.zk/theme/default/css/themesaf.css.dsp | 2 ++ 3 files changed, 5 insertions(+) create mode 100644 org.adempiere.ui.zk/theme/default/css/thememoz.css.dsp create mode 100644 org.adempiere.ui.zk/theme/default/css/themesaf.css.dsp diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/theme/ITheme.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/theme/ITheme.java index 84fb5debc5..be89358049 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/theme/ITheme.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/theme/ITheme.java @@ -48,6 +48,7 @@ public interface ITheme { //stylesheet url public static final String THEME_STYLESHEET = "/css/theme.css.dsp"; + //http://books.zkoss.org/wiki/ZK_Developer's_Reference/Internationalization/Locale-Dependent_Resources#Specifying_Locale-_and_browser-dependent_URL public static final String THEME_STYLESHEET_BY_BROWSER = "/css/theme*.css.dsp*"; //theme preference diff --git a/org.adempiere.ui.zk/theme/default/css/thememoz.css.dsp b/org.adempiere.ui.zk/theme/default/css/thememoz.css.dsp new file mode 100644 index 0000000000..288e23651b --- /dev/null +++ b/org.adempiere.ui.zk/theme/default/css/thememoz.css.dsp @@ -0,0 +1,2 @@ +<%@ page contentType="text/css;charset=UTF-8" %> +<%@ taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" %> \ No newline at end of file diff --git a/org.adempiere.ui.zk/theme/default/css/themesaf.css.dsp b/org.adempiere.ui.zk/theme/default/css/themesaf.css.dsp new file mode 100644 index 0000000000..288e23651b --- /dev/null +++ b/org.adempiere.ui.zk/theme/default/css/themesaf.css.dsp @@ -0,0 +1,2 @@ +<%@ page contentType="text/css;charset=UTF-8" %> +<%@ taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" %> \ No newline at end of file From cac1e2d29084cb1c867f8d0b34c71051cc2470ac Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 6 Mar 2014 19:44:55 -0500 Subject: [PATCH 05/10] IDEMPIERE-1778 Remove final of M classes / integrate patch from Nicolas Micoud (nmicoud) --- .../src/org/compiere/model/MAcctSchemaElement.java | 2 +- org.adempiere.base/src/org/compiere/model/MAllocationHdr.java | 2 +- org.adempiere.base/src/org/compiere/model/MCity.java | 2 +- org.adempiere.base/src/org/compiere/model/MCountry.java | 2 +- .../src/org/compiere/model/MPaySelectionCheck.java | 2 +- org.adempiere.base/src/org/compiere/model/MPayment.java | 2 +- org.adempiere.base/src/org/compiere/model/MRegion.java | 2 +- org.adempiere.base/src/org/compiere/model/MTreeNode.java | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MAcctSchemaElement.java b/org.adempiere.base/src/org/compiere/model/MAcctSchemaElement.java index f58bf0007c..7063e2a39e 100644 --- a/org.adempiere.base/src/org/compiere/model/MAcctSchemaElement.java +++ b/org.adempiere.base/src/org/compiere/model/MAcctSchemaElement.java @@ -38,7 +38,7 @@ import org.compiere.util.Msg; * @author victor.perez@e-evolution.com, www.e-evolution.com *
  • RF [ 2214883 ] Remove SQL code and Replace for Query http://sourceforge.net/tracker/index.php?func=detail&aid=2214883&group_id=176962&atid=879335 */ -public final class MAcctSchemaElement extends X_C_AcctSchema_Element +public class MAcctSchemaElement extends X_C_AcctSchema_Element { diff --git a/org.adempiere.base/src/org/compiere/model/MAllocationHdr.java b/org.adempiere.base/src/org/compiere/model/MAllocationHdr.java index 6e1faafe8e..2f0b047674 100644 --- a/org.adempiere.base/src/org/compiere/model/MAllocationHdr.java +++ b/org.adempiere.base/src/org/compiere/model/MAllocationHdr.java @@ -49,7 +49,7 @@ import org.compiere.util.Msg; *
  • BF [ 2880182 ] Error you can allocate a payment to invoice that was paid *
  • https://sourceforge.net/tracker/index.php?func=detail&aid=2880182&group_id=176962&atid=879332 */ -public final class MAllocationHdr extends X_C_AllocationHdr implements DocAction +public class MAllocationHdr extends X_C_AllocationHdr implements DocAction { /** * diff --git a/org.adempiere.base/src/org/compiere/model/MCity.java b/org.adempiere.base/src/org/compiere/model/MCity.java index f7e32d159c..abcc27ee4b 100644 --- a/org.adempiere.base/src/org/compiere/model/MCity.java +++ b/org.adempiere.base/src/org/compiere/model/MCity.java @@ -29,7 +29,7 @@ import org.compiere.util.CLogger; * * @author Mario Calderon / Carlos Ruiz */ -public final class MCity extends X_C_City +public class MCity extends X_C_City implements Comparator, Serializable { /** diff --git a/org.adempiere.base/src/org/compiere/model/MCountry.java b/org.adempiere.base/src/org/compiere/model/MCountry.java index e8572b8774..f01b397169 100644 --- a/org.adempiere.base/src/org/compiere/model/MCountry.java +++ b/org.adempiere.base/src/org/compiere/model/MCountry.java @@ -41,7 +41,7 @@ import static org.compiere.model.SystemIDs.*; * * @author Michael Judd (Akuna Ltd) *
  • BF [ 2695078 ] Country is not translated on invoice */ -public final class MCountry extends X_C_Country +public class MCountry extends X_C_Country implements Comparator, Serializable { /** diff --git a/org.adempiere.base/src/org/compiere/model/MPaySelectionCheck.java b/org.adempiere.base/src/org/compiere/model/MPaySelectionCheck.java index 803d0a6408..b3f5f2a041 100644 --- a/org.adempiere.base/src/org/compiere/model/MPaySelectionCheck.java +++ b/org.adempiere.base/src/org/compiere/model/MPaySelectionCheck.java @@ -37,7 +37,7 @@ import org.compiere.util.Msg; * @author Jorg Janke * @version $Id: MPaySelectionCheck.java,v 1.3 2006/07/30 00:51:02 jjanke Exp $ */ -public final class MPaySelectionCheck extends X_C_PaySelectionCheck +public class MPaySelectionCheck extends X_C_PaySelectionCheck { /** * diff --git a/org.adempiere.base/src/org/compiere/model/MPayment.java b/org.adempiere.base/src/org/compiere/model/MPayment.java index 7e2734f7cd..2469851197 100644 --- a/org.adempiere.base/src/org/compiere/model/MPayment.java +++ b/org.adempiere.base/src/org/compiere/model/MPayment.java @@ -77,7 +77,7 @@ import org.compiere.util.ValueNamePair; * @author Carlos Ruiz - globalqss [ 2141475 ] Payment <> allocations must not be completed - implement lots of validations on prepareIt * @version $Id: MPayment.java,v 1.4 2006/10/02 05:18:39 jjanke Exp $ */ -public final class MPayment extends X_C_Payment +public class MPayment extends X_C_Payment implements DocAction, ProcessCall, PaymentInterface { diff --git a/org.adempiere.base/src/org/compiere/model/MRegion.java b/org.adempiere.base/src/org/compiere/model/MRegion.java index 9b55283fff..71612c8471 100644 --- a/org.adempiere.base/src/org/compiere/model/MRegion.java +++ b/org.adempiere.base/src/org/compiere/model/MRegion.java @@ -40,7 +40,7 @@ import static org.compiere.model.SystemIDs.*; * @author Jorg Janke * @version $Id: MRegion.java,v 1.3 2006/07/30 00:58:36 jjanke Exp $ */ -public final class MRegion extends X_C_Region +public class MRegion extends X_C_Region implements Comparator, Serializable { /** diff --git a/org.adempiere.base/src/org/compiere/model/MTreeNode.java b/org.adempiere.base/src/org/compiere/model/MTreeNode.java index bcbd4a00a3..e95c77d7ef 100644 --- a/org.adempiere.base/src/org/compiere/model/MTreeNode.java +++ b/org.adempiere.base/src/org/compiere/model/MTreeNode.java @@ -33,7 +33,7 @@ import org.compiere.wf.MWFNode; * @author Jorg Janke * @version $Id: MTreeNode.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $ */ -public final class MTreeNode extends DefaultMutableTreeNode +public class MTreeNode extends DefaultMutableTreeNode { /** * From 8786638e1e7f73b79a3af98e740a91081da4734f Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 7 Mar 2014 19:17:14 -0500 Subject: [PATCH 06/10] IDEMPIERE-1789 remove grid border from workflow window --- .../src/org/adempiere/webui/apps/wf/WFNodeContainer.java | 8 ++++++++ .../WEB-INF/src/org/adempiere/webui/apps/wf/WFPanel.java | 5 +++-- org.adempiere.ui.zk/theme/default/css/theme.css.dsp | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFNodeContainer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFNodeContainer.java index 153dc7cb44..c05e4c851a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFNodeContainer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFNodeContainer.java @@ -49,6 +49,7 @@ public class WFNodeContainer private int currentRow = 1; private int currentColumn = 0; private int noOfColumns = 4; + private int maxColumn = 0; private int rowCount = 0; private WorkflowGraphScene graphScene = new WorkflowGraphScene(); @@ -146,6 +147,9 @@ public class WFNodeContainer w.setRow(currentRow); nodes[currentColumn - 1] = node.getAD_WF_Node_ID(); + if (currentColumn > maxColumn) { + maxColumn = currentColumn; + } if (currentRow < oldRow) { currentRow = oldRow; @@ -227,6 +231,10 @@ public class WFNodeContainer return noOfColumns; } + public int getMaxColumnWithNode() { + return maxColumn; + } + public GraphScene getGraphScene() { return graphScene; } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFPanel.java index bff9f74f4d..602ef1a3e0 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFPanel.java @@ -187,14 +187,15 @@ public class WFPanel extends Borderlayout implements EventListener, IHelp try { int row = nodeContainer.getRowCount(); + int maxCol = nodeContainer.getMaxColumnWithNode(); for(int i = 0; i < row; i++) { Tr tr = new Tr(); table.appendChild(tr); - for(int c = 0; c < 4; c++) { + for(int c = 0; c < maxCol; c++) { BufferedImage t = new BufferedImage(WFGraphLayout.COLUMN_WIDTH, WFGraphLayout.ROW_HEIGHT, BufferedImage.TYPE_INT_ARGB); Graphics2D tg = t.createGraphics(); Td td = new Td(); -// td.setStyle("border: 1px dotted lightgray"); + td.setSclass("workflow-panel-table"); tr.appendChild(td); int x = c * WFGraphLayout.COLUMN_WIDTH; diff --git a/org.adempiere.ui.zk/theme/default/css/theme.css.dsp b/org.adempiere.ui.zk/theme/default/css/theme.css.dsp index 2f57ac8e94..2d9f7384f0 100644 --- a/org.adempiere.ui.zk/theme/default/css/theme.css.dsp +++ b/org.adempiere.ui.zk/theme/default/css/theme.css.dsp @@ -1764,6 +1764,10 @@ table.z-vbox > tbody > tr > td > table { .workflow-activity-form { } +.workflow-panel-table { + border: 0px; +} + <%-- find window --%> .find-window { } From 9dd309813877a2a91e09f3e5f07007b51882c64d Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Fri, 7 Mar 2014 19:35:07 -0500 Subject: [PATCH 07/10] IDEMPIERE-1550 Zk: Problem with multiple browser tab --- .../org/adempiere/webui/AdempiereWebUI.java | 3 -- .../src/org/adempiere/webui/apps/AEnv.java | 4 +- .../adempiere/webui/apps/DesktopRunnable.java | 49 +++++++++++++++++++ .../adempiere/webui/apps/ProcessDialog.java | 12 +---- .../webui/apps/ProcessModalDialog.java | 13 +---- .../webui/desktop/AbstractDesktop.java | 17 +++++-- .../webui/desktop/DefaultDesktop.java | 3 +- .../webui/session/SessionContextListener.java | 3 -- .../webui/window/ZkReportViewer.java | 17 ++----- 9 files changed, 71 insertions(+), 50 deletions(-) create mode 100644 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DesktopRunnable.java diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java index 8d5397bc3d..b157d311a2 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java @@ -103,8 +103,6 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb public static final String EXECUTION_CARRYOVER_SESSION_KEY = "execution.carryover"; - public static final String ZK_DESKTOP_SESSION_KEY = "zk.desktop"; - private static final String CLIENT_INFO = "client.info"; private static boolean eventThreadEnabled = false; @@ -246,7 +244,6 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb IDesktop appDesktop = createDesktop(); appDesktop.setClientInfo(clientInfo); appDesktop.createPart(this.getPage()); - ctx.put(ZK_DESKTOP_SESSION_KEY, new WeakReference(this.getPage().getDesktop())); this.getPage().getDesktop().setAttribute(APPLICATION_DESKTOP_KEY, new WeakReference(appDesktop)); //track browser tab per session diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java index 8426495d63..e412de4a9e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java @@ -34,7 +34,6 @@ import java.util.logging.Level; import javax.servlet.ServletRequest; -import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.component.Window; import org.adempiere.webui.desktop.IDesktop; import org.adempiere.webui.session.SessionManager; @@ -741,8 +740,7 @@ public final class AEnv if (inUIThread) { return Executions.getCurrent().getDesktop(); } else { - @SuppressWarnings("unchecked") - WeakReference ref = (WeakReference) Env.getCtx().get(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY); + WeakReference ref = DesktopRunnable.getThreadLocalDesktop(); return ref != null ? ref.get() : null; } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DesktopRunnable.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DesktopRunnable.java new file mode 100644 index 0000000000..ca1a1a9bf5 --- /dev/null +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DesktopRunnable.java @@ -0,0 +1,49 @@ +/** + * + */ +package org.adempiere.webui.apps; + +import java.lang.ref.WeakReference; + +import org.zkoss.zk.ui.Desktop; + +/** + * If your background task need access to desktop, wrap your runnable with this, i.e new DesktopRunnable(yourRunnable, desktop). + * You can then use AEnv.getDesktop() in your runnable to get access to desktop. + * @author hengsin + * + */ +public class DesktopRunnable implements Runnable { + + private Runnable runnable; + private WeakReference desktopWeakRef; + + private static ThreadLocal> threadLocalDesktop = new ThreadLocal>() { + protected WeakReference initialValue() + { + return null; + } + }; + + public DesktopRunnable(Runnable runnable, Desktop desktop) { + this.runnable = runnable; + this.desktopWeakRef = new WeakReference(desktop); + } + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + @Override + public void run() { + try { + threadLocalDesktop.set(desktopWeakRef); + runnable.run(); + } finally { + threadLocalDesktop.remove(); + } + } + + /* package */static WeakReference getThreadLocalDesktop() { + return threadLocalDesktop.get(); + } +} diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java index 88c1acb32e..4adf037559 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java @@ -6,7 +6,6 @@ import static org.compiere.model.SystemIDs.PROCESS_M_INOUT_GENERATE; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; -import java.lang.ref.WeakReference; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -20,8 +19,6 @@ import java.util.logging.Level; import org.adempiere.util.Callback; import org.adempiere.util.ContextRunnable; import org.adempiere.util.IProcessUI; -import org.adempiere.util.ServerContext; -import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.ConfirmPanel; @@ -347,15 +344,8 @@ public class ProcessDialog extends Window implements EventListener, IProc } public void runProcess() { - //prepare context for background thread - Properties context = ServerContext.getCurrentInstance(); - if (context.get(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY) == null) { - Desktop desktop = this.getDesktop(); - context.put(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY, new WeakReference(desktop)); - } - processDialogRunnable = new ProcessDialogRunnable(); - future = Adempiere.getThreadPoolExecutor().submit(processDialogRunnable); + future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(processDialogRunnable, getDesktop())); } private void onComplete() { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java index 91d671edc1..ddd329e5ba 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java @@ -17,7 +17,6 @@ package org.adempiere.webui.apps; import java.io.File; -import java.lang.ref.WeakReference; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -30,8 +29,6 @@ import java.util.logging.Level; import org.adempiere.util.Callback; import org.adempiere.util.ContextRunnable; import org.adempiere.util.IProcessUI; -import org.adempiere.util.ServerContext; -import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.ConfirmPanel; @@ -50,7 +47,6 @@ import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.au.out.AuEcho; import org.zkoss.zk.ui.Component; -import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -379,15 +375,8 @@ public class ProcessModalDialog extends Window implements EventListener, * internal use, don't call this directly */ public void runProcess() { - //prepare context for background thread - Properties context = ServerContext.getCurrentInstance(); - if (context.get(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY) == null) { - Desktop desktop = this.getDesktop(); - context.put(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY, new WeakReference(desktop)); - } - processDialogRunnable = new ProcessDialogRunnable(); - future = Adempiere.getThreadPoolExecutor().submit(processDialogRunnable); + future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(processDialogRunnable, getDesktop())); } private void hideBusyDialog() { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java index 85e656ffef..38ed19fc41 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java @@ -14,6 +14,7 @@ package org.adempiere.webui.desktop; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.adempiere.webui.AdempiereWebUI; @@ -26,6 +27,7 @@ import org.compiere.model.MMenu; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.Session; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zul.Window.Mode; @@ -39,13 +41,10 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop private transient ClientInfo clientInfo; - private List windows = null; - @SuppressWarnings("unused") private static final CLogger logger = CLogger.getCLogger(AbstractDesktop.class); public AbstractDesktop() { - windows = new ArrayList(); } /** @@ -112,6 +111,7 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop * @param win */ public int registerWindow(Object win) { + List windows = getWindows(); int retValue = windows.size(); windows.add(win); return retValue; @@ -121,6 +121,7 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop * @param WindowNo */ public void unregisterWindow(int WindowNo) { + List windows = getWindows(); if (WindowNo < windows.size()) windows.set(WindowNo, null); Env.clearWinContext(WindowNo); @@ -132,6 +133,7 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop * @return Object */ public Object findWindow(int WindowNo) { + List windows = getWindows(); if (WindowNo < windows.size()) return windows.get(WindowNo); else @@ -297,7 +299,14 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop } protected List getWindows(){ - return windows; + Session session = getComponent().getDesktop().getSession(); + @SuppressWarnings("unchecked") + List list = (List) session.getAttribute("windows.list"); + if (list == null) { + list = new ArrayList(); + session.setAttribute("windows.list", list); + } + return Collections.synchronizedList(list); } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java index 7dcc696803..9582947ff8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java @@ -30,6 +30,7 @@ import org.adempiere.util.ServerContext; import org.adempiere.webui.adwindow.ADWindow; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.apps.BusyDialog; +import org.adempiere.webui.apps.DesktopRunnable; import org.adempiere.webui.apps.ProcessDialog; import org.adempiere.webui.apps.WReport; import org.adempiere.webui.component.Tab; @@ -265,7 +266,7 @@ public class DefaultDesktop extends TabbedDesktop implements MenuListener, Seria } }; - Adempiere.getThreadPoolExecutor().submit(runnable); + Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(runnable,layout.getDesktop())); ToolBar toolbar = new ToolBar(); windowContainer.getComponent().appendChild(toolbar); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java index b329771882..2a2ca7728c 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java @@ -17,7 +17,6 @@ package org.adempiere.webui.session; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -133,8 +132,6 @@ public class SessionContextListener implements ExecutionInit, //set locale Locales.setThreadLocal(Env.getLanguage(ServerContext.getCurrentInstance()).getLocale()); } - Properties ctx = ServerContext.getCurrentInstance(); - ctx.put(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY, new WeakReference(exec.getDesktop())); } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java index dafb409eed..45325e462e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java @@ -21,7 +21,6 @@ import static org.compiere.model.SystemIDs.WINDOW_PRINTFORMAT; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.StringWriter; -import java.lang.ref.WeakReference; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -36,11 +35,10 @@ import javax.servlet.http.HttpServletRequest; import org.adempiere.exceptions.DBException; import org.adempiere.pdf.Document; import org.adempiere.util.ContextRunnable; -import org.adempiere.util.ServerContext; -import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.apps.BusyDialog; +import org.adempiere.webui.apps.DesktopRunnable; import org.adempiere.webui.apps.WReport; import org.adempiere.webui.apps.form.WReportCustomization; import org.adempiere.webui.component.Checkbox; @@ -461,21 +459,14 @@ public class ZkReportViewer extends Window implements EventListener, ITab } private void renderReport() { - //prepare context for background thread - Properties context = ServerContext.getCurrentInstance(); - if (context.get(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY) == null) { - Desktop desktop = this.getDesktop(); - context.put(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY, new WeakReference(desktop)); - } - media = null; Listitem selected = previewType.getSelectedItem(); if (selected == null || "PDF".equals(selected.getValue())) { - future = Adempiere.getThreadPoolExecutor().submit(new PDFRendererRunnable(this)); + future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new PDFRendererRunnable(this),getDesktop())); } else if ("HTML".equals(previewType.getSelectedItem().getValue())) { - future = Adempiere.getThreadPoolExecutor().submit(new HTMLRendererRunnable(this)); + future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new HTMLRendererRunnable(this),getDesktop())); } else if ("XLS".equals(previewType.getSelectedItem().getValue())) { - future = Adempiere.getThreadPoolExecutor().submit(new XLSRendererRunnable(this)); + future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new XLSRendererRunnable(this),getDesktop())); } } From 9f67539c3dbfe9c5048cbd5dd6f9deecfdaa5c5a Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 7 Mar 2014 19:35:53 -0500 Subject: [PATCH 08/10] IDEMPIERE-1550 Zk: Problem with multiple browser tab / minor, regenerate serialVersionUID --- .../src/org/adempiere/webui/AdempiereWebUI.java | 2 +- .../src/org/adempiere/webui/apps/ProcessDialog.java | 5 +++-- .../org/adempiere/webui/apps/ProcessModalDialog.java | 9 +++++---- .../org/adempiere/webui/desktop/DefaultDesktop.java | 10 +++++----- .../src/org/adempiere/webui/window/ZkReportViewer.java | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java index b157d311a2..9421c9a369 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java @@ -77,7 +77,7 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb /** * */ - private static final long serialVersionUID = 6505634026383902627L; + private static final long serialVersionUID = 5875869799688466929L; private static final String SAVED_CONTEXT = "saved.context"; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java index 4adf037559..ac34030bc6 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java @@ -105,9 +105,10 @@ import com.lowagie.text.pdf.PdfWriter; public class ProcessDialog extends Window implements EventListener, IProcessUI, IHelpContext { /** - * generate serial version ID + * */ - private static final long serialVersionUID = 5545731871518761455L; + private static final long serialVersionUID = 6316822220179816250L; + private static final String MESSAGE_DIV_STYLE = "max-height: 150pt; overflow: auto; margin: 10px;"; private Div messageDiv; private Center center; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java index ddd329e5ba..2bbe9029fc 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java @@ -70,13 +70,14 @@ import org.zkoss.zul.Vlayout; */ public class ProcessModalDialog extends Window implements EventListener, IProcessUI, DialogEvents { + /** + * + */ + private static final long serialVersionUID = -3708004619583382450L; + private static final String ON_STATUS_UPDATE = "onStatusUpdate"; private static final String ON_COMPLETE = "onComplete"; - /** - * generated serial version ID - */ - private static final long serialVersionUID = -7109707014309321369L; private boolean m_autoStart; private VerticalBox dialogBody; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java index 9582947ff8..55d3e3b5c8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java @@ -100,17 +100,17 @@ import org.zkoss.zul.West; */ public class DefaultDesktop extends TabbedDesktop implements MenuListener, Serializable, EventListener, EventHandler, DesktopCleanup { + /** + * + */ + private static final long serialVersionUID = -3578277408025379219L; + private static final String IMAGES_UPARROW_PNG = "images/collapse-header.png"; private static final String IMAGES_DOWNARROW_PNG = "images/expand-header.png"; private static final String IMAGES_CONTEXT_HELP_PNG = "images/Help16.png"; - /** - * generated serial version ID - */ - private static final long serialVersionUID = -8203958978173990301L; - @SuppressWarnings("unused") private static final CLogger logger = CLogger.getCLogger(DefaultDesktop.class); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java index 45325e462e..af0e7c703d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java @@ -136,7 +136,7 @@ public class ZkReportViewer extends Window implements EventListener, ITab /** * */ - private static final long serialVersionUID = 6208607687967139151L; + private static final long serialVersionUID = 3463776496724974142L; /** Window No */ private int m_WindowNo = -1; From 71db6871df09ab659dffe3597918ef7f513fe120 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 7 Mar 2014 21:03:35 -0500 Subject: [PATCH 09/10] IDEMPIERE-1581 tree maintenance translation missing / thanks to Sergio Oropeza for the patch --- .../compiere/apps/form/TreeMaintenance.java | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/org.adempiere.ui/src/org/compiere/apps/form/TreeMaintenance.java b/org.adempiere.ui/src/org/compiere/apps/form/TreeMaintenance.java index 748e48732b..a6103e2d33 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/TreeMaintenance.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/TreeMaintenance.java @@ -26,6 +26,7 @@ import org.compiere.model.MTree_NodeMM; import org.compiere.model.MTree_NodePR; import org.compiere.util.CLogger; import org.compiere.util.DB; +import org.compiere.util.Env; import org.compiere.util.KeyNamePair; public class TreeMaintenance { @@ -51,14 +52,29 @@ public class TreeMaintenance { String fromClause = m_tree.getSourceTableName(false); // fully qualified String columnNameX = m_tree.getSourceTableName(true); String actionColor = m_tree.getActionColorName(); - - String sql = "SELECT t." + columnNameX - + "_ID,t.Name,t.Description,t.IsSummary," - + actionColor - + " FROM " + fromClause - // + " WHERE t.IsActive='Y'" // R/O - + " ORDER BY 2"; - sql = MRole.getDefault().addAccessSQL(sql, + String fieldName = null; + String fieldDescription = null; + String join = null; + if (m_tree.getTreeType().equals(MTree.TREETYPE_Menu) // IDEMPIERE-1581 (see MTree.getNodeDetails) + && ! Env.isBaseLanguage(Env.getCtx(), "AD_Menu")) { + fieldName = "trl.Name"; + fieldDescription ="trl.Description"; + join = " LEFT JOIN AD_Menu_Trl trl ON (t.AD_Menu_ID = trl.AD_Menu_ID AND trl.AD_Language='" + + Env.getAD_Language(Env.getCtx()) + "')"; + } else { + fieldName ="t.Name"; + fieldDescription ="t.Description"; + join = ""; + } + + StringBuilder sqlb = new StringBuilder("SELECT t.") + .append(columnNameX) + .append("_ID,").append(fieldName).append(",").append(fieldDescription).append(",t.IsSummary,") + .append(actionColor) + .append(" FROM ").append(fromClause).append(join) + // .append(" WHERE t.IsActive='Y'") // R/O + .append(" ORDER BY 2"); + String sql = MRole.getDefault().addAccessSQL(sqlb.toString(), "t", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO); log.config(sql); // From 2dbc965b5f323f2637e66011e188435a199d7135 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 7 Mar 2014 22:16:15 -0500 Subject: [PATCH 10/10] IDEMPIERE-85 Add confirmation on TreeMaintenance when moving all nodes / finish translation of tooltips --- .../i2.0/oracle/201403072215_IDEMPIERE-85.sql | 23 +++++++++++++++++++ .../postgresql/201403072215_IDEMPIERE-85.sql | 20 ++++++++++++++++ .../compiere/apps/form/VTreeMaintenance.java | 8 +++---- .../webui/apps/form/WTreeMaintenance.java | 8 +++---- 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 migration/i2.0/oracle/201403072215_IDEMPIERE-85.sql create mode 100644 migration/i2.0/postgresql/201403072215_IDEMPIERE-85.sql diff --git a/migration/i2.0/oracle/201403072215_IDEMPIERE-85.sql b/migration/i2.0/oracle/201403072215_IDEMPIERE-85.sql new file mode 100644 index 0000000000..42a721e3e8 --- /dev/null +++ b/migration/i2.0/oracle/201403072215_IDEMPIERE-85.sql @@ -0,0 +1,23 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Mar 7, 2014 10:13:16 PM COT +-- IDEMPIERE-85 Add confirmation on TreeMaintenance when moving all nodes +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Add to Tree',200255,'D','0f54ecd3-b5ea-47de-8ff9-a3a7ffe0826f','AddToTree','Y',TO_DATE('2014-03-07 22:13:15','YYYY-MM-DD HH24:MI:SS'),100,100,TO_DATE('2014-03-07 22:13:15','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +-- Mar 7, 2014 10:13:32 PM COT +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Add ALL to Tree',200256,'D','b544cbd4-9d28-401d-93a5-6351b6480108','AddAllToTree','Y',TO_DATE('2014-03-07 22:13:32','YYYY-MM-DD HH24:MI:SS'),100,100,TO_DATE('2014-03-07 22:13:32','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +-- Mar 7, 2014 10:13:44 PM COT +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Delete from Tree',200257,'D','27c456c5-4044-4502-8e7b-f42e1097f25b','DeleteFromTree','Y',TO_DATE('2014-03-07 22:13:43','YYYY-MM-DD HH24:MI:SS'),100,100,TO_DATE('2014-03-07 22:13:43','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +-- Mar 7, 2014 10:13:54 PM COT +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Delete ALL from Tree',200258,'D','ed972baa-3e1b-4819-b62a-fbf8047cd62d','DeleteAllFromTree','Y',TO_DATE('2014-03-07 22:13:53','YYYY-MM-DD HH24:MI:SS'),100,100,TO_DATE('2014-03-07 22:13:53','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +SELECT register_migration_script('201403072215_IDEMPIERE-85.sql') FROM dual +; + diff --git a/migration/i2.0/postgresql/201403072215_IDEMPIERE-85.sql b/migration/i2.0/postgresql/201403072215_IDEMPIERE-85.sql new file mode 100644 index 0000000000..a7076898a5 --- /dev/null +++ b/migration/i2.0/postgresql/201403072215_IDEMPIERE-85.sql @@ -0,0 +1,20 @@ +-- Mar 7, 2014 10:13:16 PM COT +-- IDEMPIERE-85 Add confirmation on TreeMaintenance when moving all nodes +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Add to Tree',200255,'D','0f54ecd3-b5ea-47de-8ff9-a3a7ffe0826f','AddToTree','Y',TO_TIMESTAMP('2014-03-07 22:13:15','YYYY-MM-DD HH24:MI:SS'),100,100,TO_TIMESTAMP('2014-03-07 22:13:15','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +-- Mar 7, 2014 10:13:32 PM COT +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Add ALL to Tree',200256,'D','b544cbd4-9d28-401d-93a5-6351b6480108','AddAllToTree','Y',TO_TIMESTAMP('2014-03-07 22:13:32','YYYY-MM-DD HH24:MI:SS'),100,100,TO_TIMESTAMP('2014-03-07 22:13:32','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +-- Mar 7, 2014 10:13:44 PM COT +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Delete from Tree',200257,'D','27c456c5-4044-4502-8e7b-f42e1097f25b','DeleteFromTree','Y',TO_TIMESTAMP('2014-03-07 22:13:43','YYYY-MM-DD HH24:MI:SS'),100,100,TO_TIMESTAMP('2014-03-07 22:13:43','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +-- Mar 7, 2014 10:13:54 PM COT +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) VALUES ('I','Delete ALL from Tree',200258,'D','ed972baa-3e1b-4819-b62a-fbf8047cd62d','DeleteAllFromTree','Y',TO_TIMESTAMP('2014-03-07 22:13:53','YYYY-MM-DD HH24:MI:SS'),100,100,TO_TIMESTAMP('2014-03-07 22:13:53','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +SELECT register_migration_script('201403072215_IDEMPIERE-85.sql') FROM dual +; + diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/form/VTreeMaintenance.java b/org.adempiere.ui.swing/src/org/compiere/apps/form/VTreeMaintenance.java index b3738aa3a8..4c39b65cbc 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/form/VTreeMaintenance.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/form/VTreeMaintenance.java @@ -125,10 +125,10 @@ public class VTreeMaintenance extends TreeMaintenance cbAllNodes.setEnabled (false); cbAllNodes.setText (Msg.translate(Env.getCtx(), "IsAllNodes")); treeInfo.setText (" "); - bAdd.setToolTipText("Add to Tree"); - bAddAll.setToolTipText("Add ALL to Tree"); - bDelete.setToolTipText("Delete from Tree"); - bDeleteAll.setToolTipText("Delete ALL from Tree"); + bAdd.setToolTipText(Msg.getMsg(Env.getCtx(), "AddToTree")); + bAddAll.setToolTipText(Msg.getMsg(Env.getCtx(), "AddAllToTree")); + bDelete.setToolTipText(Msg.getMsg(Env.getCtx(), "DeleteFromTree")); + bDeleteAll.setToolTipText(Msg.getMsg(Env.getCtx(), "DeleteAllFromTree")); bAdd.addActionListener(this); bAddAll.addActionListener(this); bDelete.addActionListener(this); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java index 31b22cc166..d2320afacd 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java @@ -144,10 +144,10 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController cbAllNodes.setEnabled (false); cbAllNodes.setText (Msg.translate(Env.getCtx(), "IsAllNodes")); treeInfo.setText (" "); - bAdd.setTooltiptext("Add to Tree"); - bAddAll.setTooltiptext("Add ALL to Tree"); - bDelete.setTooltiptext("Delete from Tree"); - bDeleteAll.setTooltiptext("Delete ALL from Tree"); + bAdd.setTooltiptext(Msg.getMsg(Env.getCtx(), "AddToTree")); + bAddAll.setTooltiptext(Msg.getMsg(Env.getCtx(), "AddAllToTree")); + bDelete.setTooltiptext(Msg.getMsg(Env.getCtx(), "DeleteFromTree")); + bDeleteAll.setTooltiptext(Msg.getMsg(Env.getCtx(), "DeleteAllFromTree")); bAdd.addActionListener(this); bAddAll.addActionListener(this); bDelete.addActionListener(this);