, IProc
}
}
- private void hideBusyDialog() {
+ @Override
+ public void hideBusyDialog()
+ {
hideBusyMask();
- if (progressWindow != null) {
- progressWindow.dispose();
- progressWindow = null;
- }
+ closeBusyDialog();
}
- private void updateUI(ProcessInfo pi) {
+ @Override
+ public void updateUI() {
+ ProcessInfo pi = getProcessInfo();
ProcessInfoUtil.setLogFromDB(pi);
- m_messageText.append("** ")
+ getMessageText().append("** ")
.append(pi.getSummary())
.append("
");
- message.setContent(m_messageText.toString());
+ getMessage().setContent(getMessageText().toString());
// Add Log info with zoom on record id
appendRecordLogInfo(pi.getLogs());
@@ -652,7 +461,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
m_ids = pi.getIDs();
//move message div to center to give more space to display potentially very long log info
- centerPanel.detach();
+ getCenterPanel().detach();
messageDiv.detach();
messageDiv.setStyle("");
north.setVisible(false);
@@ -747,8 +556,8 @@ public class ProcessDialog extends Window implements EventListener, IProc
}
private void restart() {
- m_messageText = new StringBuffer(initialMessage);
- message.setContent(initialMessage);
+ setMessageText(new StringBuffer(getInitialMessage()));
+ getMessage().setContent(getInitialMessage());
north.setVisible(true);
messageDiv.detach();
@@ -758,7 +567,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
messageDiv.setStyle(MESSAGE_DIV_STYLE);
north.appendChild(messageDiv);
- center.appendChild(centerPanel);
+ center.appendChild(getCenterPanel());
isParameterPage = true;
@@ -766,10 +575,11 @@ public class ProcessDialog extends Window implements EventListener, IProc
bOK.setImage(ThemeManager.getThemeResource("images/Ok16.png"));
//recreate process info
- m_pi = new WProcessInfo(m_Name, m_AD_Process_ID);
+ ProcessInfo m_pi = new WProcessInfo(getName(), getAD_Process_ID());
m_pi.setAD_User_ID (Env.getAD_User_ID(Env.getCtx()));
m_pi.setAD_Client_ID(Env.getAD_Client_ID(Env.getCtx()));
- parameterPanel.setProcessInfo(m_pi);
+ setProcessInfo(m_pi);
+ getParameterPanel().setProcessInfo(m_pi);
m_ids = null;
@@ -781,7 +591,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
//
if (!afterProcessTask()) {
// If the process is a silent one and no errors occured, close the dialog
- if(m_ShowHelp != null && m_ShowHelp.equals("S"))
+ if(getShowHelp() != null && getShowHelp().equals("S"))
this.dispose();
}
}
@@ -796,12 +606,12 @@ public class ProcessDialog extends Window implements EventListener, IProc
{
log.config("");
// Print invoices
- if (m_AD_Process_ID == PROCESS_C_INVOICE_GENERATE)
+ if (getAD_Process_ID() == PROCESS_C_INVOICE_GENERATE)
{
printInvoices();
return true;
}
- else if (m_AD_Process_ID == PROCESS_M_INOUT_GENERATE)
+ else if (getAD_Process_ID() == PROCESS_M_INOUT_GENERATE)
{
printShipments();
return true;
@@ -821,12 +631,12 @@ public class ProcessDialog extends Window implements EventListener, IProc
{
if (m_ids == null)
return;
- FDialog.ask(m_WindowNo, this, "PrintShipments", new Callback() {
+ FDialog.ask(getWindowNo(), this, "PrintShipments", new Callback() {
@Override
public void onCallback(Boolean result) {
if (result) {
- m_messageText.append("").append(Msg.getMsg(Env.getCtx(), "PrintShipments")).append("
");
- message.setContent(m_messageText.toString());
+ getMessageText().append("").append(Msg.getMsg(Env.getCtx(), "PrintShipments")).append("
");
+ getMessage().setContent(getMessageText().toString());
showBusyDialog();
Clients.response(new AuEcho(ProcessDialog.this, "onPrintShipments", null));
}
@@ -872,7 +682,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
document.close();
hideBusyDialog();
- Window win = new SimplePDFViewer(m_pi.getTitle(), new FileInputStream(outFile));
+ Window win = new SimplePDFViewer(getProcessInfo().getTitle(), new FileInputStream(outFile));
SessionManager.getAppDesktop().showWindow(win, "center");
} catch (Exception e) {
log.log(Level.SEVERE, e.getLocalizedMessage(), e);
@@ -883,7 +693,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
} else if (pdfList.size() > 0) {
hideBusyDialog();
try {
- Window win = new SimplePDFViewer(m_pi.getTitle(), new FileInputStream(pdfList.get(0)));
+ Window win = new SimplePDFViewer(getProcessInfo().getTitle(), new FileInputStream(pdfList.get(0)));
SessionManager.getAppDesktop().showWindow(win, "center");
} catch (Exception e)
{
@@ -892,7 +702,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
}
// If the process is a silent one and no errors occured, close the dialog
- if(m_ShowHelp != null && m_ShowHelp.equals("S"))
+ if(getShowHelp() != null && getShowHelp().equals("S"))
this.dispose();
}
@@ -903,14 +713,14 @@ public class ProcessDialog extends Window implements EventListener, IProc
{
if (m_ids == null)
return;
- FDialog.ask(m_WindowNo, this, "PrintInvoices", new Callback() {
+ FDialog.ask(getWindowNo(), this, "PrintInvoices", new Callback() {
@Override
public void onCallback(Boolean result)
{
if (result)
{
- m_messageText.append("").append(Msg.getMsg(Env.getCtx(), "PrintInvoices")).append("
");
- message.setContent(m_messageText.toString());
+ getMessageText().append("").append(Msg.getMsg(Env.getCtx(), "PrintInvoices")).append("
");
+ getMessage().setContent(getMessageText().toString());
showBusyDialog();
Clients.response(new AuEcho(ProcessDialog.this, "onPrintInvoices", null));
}
@@ -954,7 +764,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
document.close();
hideBusyDialog();
- Window win = new SimplePDFViewer(m_pi.getTitle(), new FileInputStream(outFile));
+ Window win = new SimplePDFViewer(getProcessInfo().getTitle(), new FileInputStream(outFile));
SessionManager.getAppDesktop().showWindow(win, "center");
} catch (Exception e) {
log.log(Level.SEVERE, e.getLocalizedMessage(), e);
@@ -965,7 +775,7 @@ public class ProcessDialog extends Window implements EventListener, IProc
} else if (pdfList.size() > 0) {
hideBusyDialog();
try {
- Window win = new SimplePDFViewer(m_pi.getTitle(), new FileInputStream(pdfList.get(0)));
+ Window win = new SimplePDFViewer(getProcessInfo().getTitle(), new FileInputStream(pdfList.get(0)));
SessionManager.getAppDesktop().showWindow(win, "center");
} catch (Exception e)
{
@@ -974,52 +784,8 @@ public class ProcessDialog extends Window implements EventListener, IProc
}
// If the process is a silent one and no errors occured, close the dialog
- if(m_ShowHelp != null && m_ShowHelp.equals("S"))
+ if(getShowHelp() != null && getShowHelp().equals("S"))
this.dispose();
}
-
- public boolean isValid() {
- return valid;
- }
-
- public boolean isUILocked() {
- return m_isLocked;
- }
- class ProcessDialogRunnable extends ContextRunnable {
- ProcessDialogRunnable() {
- super();
- }
-
- protected void doRun() {
- try {
- if (log.isLoggable(Level.INFO))log.log(Level.INFO, "Process Info="+m_pi+" AD_Client_ID="+Env.getAD_Client_ID(Env.getCtx()));
- WProcessCtl.process(ProcessDialog.this, m_WindowNo, parameterPanel, m_pi, null);
- } finally {
- Executions.schedule(getDesktop(), ProcessDialog.this, new Event(ON_COMPLETE, ProcessDialog.this, null));
- }
- }
- }
-
- @Override
- public void statusUpdate(String message) {
- Desktop desktop = getDesktop();
- if (desktop != null && desktop.isAlive())
- Executions.schedule(desktop, this, new Event(ON_STATUS_UPDATE, this, message));
- }
-
- @Override
- public void ask(final String message, final Callback callback) {
- Executions.schedule(getDesktop(), new EventListener() {
- @Override
- public void onEvent(Event event) throws Exception {
- FDialog.ask(m_WindowNo, null, message, callback);
- }
- }, new Event("onAsk"));
- }
-
- @Override
- public void download(File file) {
- downloadFiles.add(file);
- }
} // ProcessDialog
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 d6fb4c02af..a8e1fb0d69 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
@@ -16,45 +16,24 @@
*****************************************************************************/
package org.adempiere.webui.apps;
-import java.io.File;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.Future;
import java.util.logging.Level;
-import org.adempiere.util.Callback;
-import org.adempiere.util.ContextRunnable;
-import org.adempiere.util.IProcessUI;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.ConfirmPanel;
-import org.adempiere.webui.component.Panel;
import org.adempiere.webui.component.VerticalBox;
import org.adempiere.webui.component.Window;
import org.adempiere.webui.event.DialogEvents;
import org.adempiere.webui.factory.ButtonFactory;
-import org.adempiere.webui.window.FDialog;
-import org.adempiere.webui.window.MultiFileDownloadDialog;
-import org.compiere.Adempiere;
import org.compiere.process.ProcessInfo;
import org.compiere.util.CLogger;
-import org.compiere.util.DB;
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.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
-import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Div;
import org.zkoss.zul.Hbox;
-import org.zkoss.zul.Html;
import org.zkoss.zul.Vlayout;
/**
@@ -68,20 +47,18 @@ import org.zkoss.zul.Vlayout;
* @author arboleda - globalqss
* - Implement ShowHelp option on processes and reports
*/
-public class ProcessModalDialog extends Window implements EventListener, IProcessUI, DialogEvents
+public class ProcessModalDialog extends AbstractProcessDialog implements EventListener, DialogEvents
{
/**
*
*/
- private static final long serialVersionUID = -3708004619583382450L;
+ private static final long serialVersionUID = -3260639688339379279L;
- private static final String ON_STATUS_UPDATE = "onStatusUpdate";
- private static final String ON_COMPLETE = "onComplete";
-
- private boolean m_autoStart;
private VerticalBox dialogBody;
-
- private List downloadFiles;
+
+ /** Logger */
+ private static CLogger log = CLogger.getCLogger(ProcessModalDialog.class);
+ //
/**
* @param aProcess
@@ -102,10 +79,7 @@ public class ProcessModalDialog extends Window implements EventListener,
*/
public ProcessModalDialog(EventListener listener, int WindowNo, ProcessInfo pi, boolean autoStart)
{
- m_ctx = Env.getCtx();
- m_WindowNo = WindowNo;
- m_pi = pi;
- m_autoStart = autoStart;
+ super();
if (listener != null)
{
@@ -116,7 +90,7 @@ public class ProcessModalDialog extends Window implements EventListener,
try
{
initComponents();
- init();
+ init(Env.getCtx(), WindowNo, pi.getAD_Process_ID(), pi, "100%", autoStart, true);
}
catch(Exception ex)
{
@@ -172,12 +146,10 @@ public class ProcessModalDialog extends Window implements EventListener,
dialogBody.appendChild(dialogContent);
Div div = new Div();
div.setId("message");
- message = new Html();
- div.appendChild(message);
+ div.appendChild(getMessage());
div.setStyle("max-height: 150pt; overflow: auto;");
dialogContent.appendChild(div);
- centerPanel = new Panel();
- dialogContent.appendChild(centerPanel);
+ dialogContent.appendChild(getCenterPanel());
Hbox hbox = new Hbox();
hbox.setWidth("100%");
hbox.setSclass("dialog-footer");
@@ -198,28 +170,6 @@ public class ProcessModalDialog extends Window implements EventListener,
}
- private int m_WindowNo;
- private Properties m_ctx;
- private String m_Name = null;
- private StringBuffer m_messageText = new StringBuffer();
- private String m_ShowHelp = null; // Determine if a Help Process Window is shown
- private boolean m_valid = true;
- private boolean m_cancel = false;
-
- private Panel centerPanel = null;
- private Html message = null;
-
- /** Logger */
- private static CLogger log = CLogger.getCLogger(ProcessModalDialog.class);
- //
- private ProcessParameterPanel parameterPanel = null;
-
- private ProcessInfo m_pi = null;
- private BusyDialog progressWindow;
- private boolean isLocked = false;
- private org.adempiere.webui.apps.ProcessModalDialog.ProcessDialogRunnable processDialogRunnable;
- private Future> future;
-
/**
* Set Visible
* (set focus to OK if visible)
@@ -235,158 +185,39 @@ public class ProcessModalDialog extends Window implements EventListener,
*/
public void dispose()
{
- parameterPanel.restoreContext();
- m_valid = false;
+ super.dispose();
+ getParameterPanel().restoreContext();
this.detach();
} // dispose
- /**
- * is dialog still valid
- * @return boolean
- */
- public boolean isValid()
+ @Override
+ public void autoStart()
{
- return m_valid;
+ this.getFirstChild().setVisible(false);
+ super.autoStart();
}
- /**
- * @return true if user have press the cancel button to close the dialog
- */
- public boolean isCancel()
- {
- return m_cancel;
- }
-
- /**
- * Dynamic Init
- * @return true, if there is something to process (start from menu)
- */
- public boolean init()
- {
- log.config("");
- //
- boolean trl = !Env.isBaseLanguage(m_ctx, "AD_Process");
- String sql = "SELECT Name, Description, Help, IsReport, ShowHelp "
- + "FROM AD_Process "
- + "WHERE AD_Process_ID=?";
- if (trl)
- sql = "SELECT t.Name, t.Description, t.Help, p.IsReport, p.ShowHelp "
- + "FROM AD_Process p, AD_Process_Trl t "
- + "WHERE p.AD_Process_ID=t.AD_Process_ID"
- + " AND p.AD_Process_ID=? AND t.AD_Language=?";
-
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- try
- {
- pstmt = DB.prepareStatement(sql, null);
- pstmt.setInt(1, m_pi.getAD_Process_ID());
- if (trl)
- pstmt.setString(2, Env.getAD_Language(m_ctx));
- rs = pstmt.executeQuery();
- if (rs.next())
- {
- m_Name = rs.getString(1);
- m_ShowHelp = rs.getString(5);
- //
- m_messageText.append("");
- String s = rs.getString(2); // Description
- if (rs.wasNull())
- m_messageText.append(Msg.getMsg(m_ctx, "StartProcess?"));
- else
- m_messageText.append(s);
- m_messageText.append("");
-
- s = rs.getString(3); // Help
- if (!rs.wasNull())
- m_messageText.append("").append(s).append("
");
- }
- }
- catch (SQLException e)
- {
- log.log(Level.SEVERE, sql, e);
- return false;
- }
- finally
- {
- DB.close(rs, pstmt);
- }
-
- if (m_Name == null)
- return false;
- //
- this.setTitle(m_Name);
- message.setContent(m_messageText.toString());
-
- // Move from APanel.actionButton
- m_pi.setAD_User_ID (Env.getAD_User_ID(Env.getCtx()));
- m_pi.setAD_Client_ID(Env.getAD_Client_ID(Env.getCtx()));
- m_pi.setTitle(m_Name);
- parameterPanel = new ProcessParameterPanel(m_WindowNo, m_pi);
- centerPanel.getChildren().clear();
- if ( parameterPanel.init() ) {
- centerPanel.appendChild(parameterPanel);
- } else {
- if (m_ShowHelp != null && m_ShowHelp.equals("N")) {
- m_autoStart = true;
- }
- if (m_autoStart) {
- this.getFirstChild().setVisible(false);
- startProcess();
- return true;
- }
- }
-
- // Check if the process is a silent one
- if(isValid() && m_ShowHelp != null && m_ShowHelp.equals("S"))
- {
- this.getFirstChild().setVisible(false);
- startProcess();
- }
- return true;
- } // init
-
- /**
- * launch process
- */
- private void startProcess()
- {
- m_pi.setPrintPreview(true);
-
- lockUI(m_pi);
-
- downloadFiles = new ArrayList();
-
- //use echo, otherwise lock ui wouldn't work
- Clients.response(new AuEcho(this, "runProcess", null));
- }
-
- private void showBusyDialog() {
+ @Override
+ public void showBusyDialog() {
this.setBorder("none");
this.setTitle(null);
dialogBody.setVisible(false);
- progressWindow = new BusyDialog();
- this.appendChild(progressWindow);
+ BusyDialog progressWindow = createBusyDialog();
if (this.getParent() != null)
LayoutUtils.openOverlappedWindow(this.getParent(), progressWindow, "middle_center");
}
-
- /**
- * internal use, don't call this directly
- */
- public void runProcess() {
- processDialogRunnable = new ProcessDialogRunnable();
- future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(processDialogRunnable, getDesktop()));
+
+ @Override
+ public void updateUI() {
+
}
- private void hideBusyDialog() {
- if (progressWindow != null) {
- progressWindow.dispose();
- progressWindow = null;
- }
+ @Override
+ public void hideBusyDialog() {
+ closeBusyDialog();
}
-
+
/**
* handle events
*/
@@ -394,138 +225,12 @@ public class ProcessModalDialog extends Window implements EventListener,
Component component = event.getTarget();
if (component instanceof Button) {
Button element = (Button)component;
- if ("Ok".equalsIgnoreCase(element.getId())) {
- onOK();
- } else if ("Cancel".equalsIgnoreCase(element.getId())) {
- onCancel();
- }
- } else if (event.getName().equals(ON_STATUS_UPDATE)) {
- onStatusUpdate(event);
- } else if (event.getName().equals(ON_COMPLETE)) {
- onComplete();
+ if ("Ok".equalsIgnoreCase(element.getId()))
+ startProcess();
+ else if ("Cancel".equalsIgnoreCase(element.getId()))
+ cancelProcess();
+ } else {
+ super.onEvent(event);
}
- }
-
- private void onOK() {
- if (!parameterPanel.validateParameters())
- return;
- this.startProcess();
- }
-
- private void onCancel() {
- m_cancel = true;
- this.dispose();
- }
-
- private void onStatusUpdate(Event event) {
- String message = (String) event.getData();
- if (progressWindow != null)
- progressWindow.statusUpdate(message);
- }
-
- private void onComplete() {
- if (future != null) {
- try {
- future.get();
- } catch (Exception e) {
- log.log(Level.SEVERE, e.getLocalizedMessage(), e);
- if (!m_pi.isError()) {
- m_pi.setSummary(e.getLocalizedMessage(), true);
- }
- }
- }
- future = null;
- processDialogRunnable = null;
- unlockUI(m_pi);
- if (downloadFiles.size() > 0) {
- MultiFileDownloadDialog downloadDialog = new MultiFileDownloadDialog(downloadFiles.toArray(new File[0]));
- downloadDialog.setPage(this.getPage());
- downloadDialog.setTitle(m_pi.getTitle());
- Events.postEvent(downloadDialog, new Event(MultiFileDownloadDialog.ON_SHOW));
- }
- dispose();
- }
-
- @Override
- public void lockUI(ProcessInfo pi) {
- if (isLocked || Executions.getCurrent() == null)
- return;
-
- showBusyDialog();
- isLocked = true;
- }
-
- @Override
- public void unlockUI(ProcessInfo pi) {
- if (!isLocked)
- return;
-
- if (Executions.getCurrent() == null) {
- Executions.schedule(getDesktop(), new EventListener() {
- @Override
- public void onEvent(Event event) throws Exception {
- doUnlockUI();
- }
- }, new Event("onUnLockUI"));
- } else {
- doUnlockUI();
- }
- }
-
- private void doUnlockUI() {
- hideBusyDialog();
- isLocked = false;
- }
-
- @Override
- public boolean isUILocked() {
- return isLocked;
- }
-
- @Override
- public void statusUpdate(String message) {
- Executions.schedule(getDesktop(), this, new Event(ON_STATUS_UPDATE, this, message));
- }
-
- /**
- *
- * @return ProcessInfo
- */
- public ProcessInfo getProcessInfo() {
- return m_pi;
- }
-
- class ProcessDialogRunnable extends ContextRunnable{
- ProcessDialogRunnable() {
- super();
- }
-
- protected void doRun() {
- try {
- if (log.isLoggable(Level.INFO))log.log(Level.INFO, "Process Info="+m_pi+" AD_Client_ID="+Env.getAD_Client_ID(Env.getCtx()));
- WProcessCtl.process(ProcessModalDialog.this, m_WindowNo, parameterPanel, m_pi, null);
- } catch (Exception ex) {
- m_pi.setError(true);
- m_pi.setSummary(ex.getLocalizedMessage());
- log.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
- } finally {
- Executions.schedule(getDesktop(), ProcessModalDialog.this, new Event(ON_COMPLETE, ProcessModalDialog.this, null));
- }
- }
- }
-
- @Override
- public void ask(final String message, final Callback callback) {
- Executions.schedule(getDesktop(), new EventListener() {
- @Override
- public void onEvent(Event event) throws Exception {
- FDialog.ask(m_WindowNo, null, message, callback);
- }
- }, new Event("onAsk"));
- }
-
- @Override
- public void download(File file) {
- downloadFiles.add(file);
- }
-} // ProcessDialog
+ }
+} // ProcessModalDialog
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java
index c35deb6da9..5fe683d99e 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java
@@ -471,4 +471,14 @@ public class WPaySelect extends PaySelect
// TODO Auto-generated method stub
}
+
+ @Override
+ public void askForInput(final String message, final Callback callback) {
+ Executions.schedule(form.getDesktop(), new EventListener() {
+ @Override
+ public void onEvent(Event event) throws Exception {
+ FDialog.askForInput(m_WindowNo, null, message, callback);
+ }
+ }, new Event("onAskForInput"));
+ }
} // VPaySelect
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
index b81cdbfc93..5a98f40b43 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
@@ -35,6 +35,7 @@ import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Image;
+import org.zkoss.zul.Vbox;
/**
* Messagebox : Replaces ZK's Messagebox
@@ -46,9 +47,10 @@ import org.zkoss.zul.Image;
public class Messagebox extends Window implements EventListener
{
/**
- * generated serial version ID
+ *
*/
- private static final long serialVersionUID = -4957498533838144942L;
+ private static final long serialVersionUID = 8928526331932742124L;
+
private static final String MESSAGE_PANEL_STYLE = "text-align:left; word-break: break-all; overflow: auto; max-height: 350pt; min-width: 230pt; max-width: 450pt;";
private String msg = new String("");
private String imgSrc = new String("");
@@ -62,11 +64,14 @@ public class Messagebox extends Window implements EventListener
private Button btnAbort;
private Button btnRetry;
private Button btnIgnore;
+ private Textbox txtInput = new Textbox();;
private Image img = new Image();
private int returnValue;
- private Callback callback;
+ @SuppressWarnings("rawtypes")
+ private Callback callback;
+ private boolean isInput = false;
/** A OK button. */
public static final int OK = 0x0001;
@@ -88,6 +93,9 @@ public class Messagebox extends Window implements EventListener
/** A IGNORE button. */
public static final int IGNORE = 0x0400;
+
+ /** A INPUT Textfield*/
+ public static final int INPUT = 0x0800;
/** A symbol consisting of a question mark in a circle. */
public static final String QUESTION = "~./zul/img/msgbox/question-btn.png";
@@ -155,6 +163,14 @@ public class Messagebox extends Window implements EventListener
pnlMessage.setStyle(MESSAGE_PANEL_STYLE);
pnlMessage.appendChild(lblMsg);
+ Panel pnlInput= new Panel();
+ pnlInput.setStyle(MESSAGE_PANEL_STYLE);
+ pnlInput.appendChild(txtInput);
+
+ Vbox pnlText = new Vbox();
+ pnlText.appendChild(pnlMessage);
+ pnlText.appendChild(pnlInput);
+
Hbox pnlImage = new Hbox();
img.setSrc(imgSrc);
@@ -168,7 +184,7 @@ public class Messagebox extends Window implements EventListener
north.setAlign("center");
this.appendChild(north);
north.appendChild(pnlImage);
- north.appendChild(pnlMessage);
+ north.appendChild(pnlText);
north.setSclass("dialog-content");
Hbox pnlButtons = new Hbox();
@@ -201,7 +217,7 @@ public class Messagebox extends Window implements EventListener
return show(message, title, buttons, icon, callback, false);
}
- public int show(String message, String title, int buttons, String icon, Callback callback, boolean modal)
+ public int show(String message, String title, int buttons, String icon, Callback> callback, boolean modal)
{
this.msg = message;
this.imgSrc = icon;
@@ -216,6 +232,7 @@ public class Messagebox extends Window implements EventListener
btnRetry.setVisible(false);
btnAbort.setVisible(false);
btnIgnore.setVisible(false);
+ txtInput.setVisible(false);
if ((buttons & OK) != 0)
btnOk.setVisible(true);
@@ -238,6 +255,11 @@ public class Messagebox extends Window implements EventListener
if ((buttons & IGNORE) != 0)
btnIgnore.setVisible(true);
+ if ((buttons & INPUT) != 0) {
+ txtInput.setVisible(true);
+ isInput = true;
+ }
+
this.setTitle(title);
this.setPosition("center");
this.setClosable(true);
@@ -274,7 +296,7 @@ public class Messagebox extends Window implements EventListener
return showDialog(message, title, buttons, icon, callback, false);
}
- public static int showDialog(String message, String title, int buttons, String icon, Callback callback, boolean modal)
+ public static int showDialog(String message, String title, int buttons, String icon, Callback> callback, boolean modal)
{
Messagebox msg = new Messagebox();
@@ -318,12 +340,15 @@ public class Messagebox extends Window implements EventListener
this.detach();
}
+ @SuppressWarnings("unchecked")
@Override
public void onPageDetached(Page page) {
super.onPageDetached(page);
- if (callback != null)
+ if (callback != null && !isInput)
{
callback.onCallback(returnValue);
+ } else if (callback != null && isInput) {
+ callback.onCallback(txtInput.getText());
}
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPRunningJobs.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPRunningJobs.java
new file mode 100644
index 0000000000..83e220b5e7
--- /dev/null
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPRunningJobs.java
@@ -0,0 +1,282 @@
+/******************************************************************************
+ * Copyright (C) 2014 Elaine Tan *
+ * Copyright (C) 2014 Trek Global
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms version 2 of the GNU General Public License as published *
+ * by the Free Software Foundation. This program is distributed in the hope *
+ * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
+ * See the GNU General Public License for more details. *
+ * You should have received a copy of the GNU General Public License along *
+ * with this program; if not, write to the Free Software Foundation, Inc., *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
+ *****************************************************************************/
+
+package org.adempiere.webui.dashboard;
+
+import java.lang.ref.WeakReference;
+import java.util.List;
+import java.util.Properties;
+
+import org.adempiere.base.Service;
+import org.adempiere.base.event.EventManager;
+import org.adempiere.webui.apps.AEnv;
+import org.adempiere.webui.theme.ThemeManager;
+import org.adempiere.webui.util.ServerPushTemplate;
+import org.compiere.model.MPInstance;
+import org.compiere.model.MProcess;
+import org.compiere.model.Query;
+import org.compiere.util.Env;
+import org.compiere.util.Msg;
+import org.compiere.util.Util;
+import org.idempiere.distributed.IMessageService;
+import org.idempiere.distributed.ITopic;
+import org.idempiere.distributed.ITopicSubscriber;
+import org.osgi.service.event.EventHandler;
+import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.Desktop;
+import org.zkoss.zk.ui.Page;
+import org.zkoss.zk.ui.event.Event;
+import org.zkoss.zk.ui.event.EventListener;
+import org.zkoss.zk.ui.event.Events;
+import org.zkoss.zk.ui.util.DesktopCleanup;
+import org.zkoss.zul.A;
+import org.zkoss.zul.Box;
+import org.zkoss.zul.Image;
+import org.zkoss.zul.Panel;
+import org.zkoss.zul.Panelchildren;
+import org.zkoss.zul.Toolbar;
+import org.zkoss.zul.Vbox;
+
+public class DPRunningJobs extends DashboardPanel implements EventListener, EventHandler {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1946438226234068194L;
+
+ private static final String AD_PINSTANCE_ID_ATTR = "AD_PInstance_ID";
+
+ private static TopicSubscriber topicSubscriber;
+
+ private Box bxJobs;
+
+ private int AD_User_ID;
+
+ private Properties ctx;
+
+ private WeakReference desktop;
+
+ private DesktopCleanup listener;
+
+ public DPRunningJobs()
+ {
+ super();
+
+ ctx = new Properties();
+ ctx.putAll(Env.getCtx());
+ AD_User_ID = Env.getAD_User_ID(ctx);
+
+ Panel panel = new Panel();
+ this.appendChild(panel);
+
+ Panelchildren jobsContent = new Panelchildren();
+ panel.appendChild(jobsContent);
+ bxJobs = new Vbox();
+ bxJobs.setHflex("1");
+ this.setSclass("recentitems-box");
+ jobsContent.appendChild(bxJobs);
+ createJobsPanel();
+
+ Toolbar jobsToolbar = new Toolbar();
+ this.appendChild(jobsToolbar);
+
+ Image imgr = new Image(ThemeManager.getThemeResource("images/Refresh24.png"));
+ jobsToolbar.appendChild(imgr);
+ imgr.setStyle("text-align: right; cursor: pointer; width:24px; height:24px;");
+ imgr.setTooltiptext(Util.cleanAmp(Msg.getMsg(ctx, "Refresh")));
+ imgr.addEventListener(Events.ON_CLICK, this);
+
+ createTopicSubscriber();
+
+ listener = new DesktopCleanup() {
+ @Override
+ public void cleanup(Desktop desktop) throws Exception {
+ DPRunningJobs.this.cleanup();
+ }
+ };
+ }
+
+ protected void cleanup()
+ {
+ EventManager.getInstance().unregister(this);
+ desktop = null;
+ }
+
+ private static synchronized void createTopicSubscriber()
+ {
+ if (topicSubscriber == null) {
+ topicSubscriber = new TopicSubscriber();
+ IMessageService service = Service.locator().locate(IMessageService.class).getService();
+ if (service != null) {
+ ITopic topic = service.getTopic(MPInstance.ON_RUNNING_JOB_CHANGED_TOPIC);
+ topic.subscribe(topicSubscriber);
+ }
+ }
+ }
+
+ private void createJobsPanel()
+ {
+ refresh();
+ }
+
+ @Override
+ public void onEvent(Event event) throws Exception
+ {
+ Component comp = event.getTarget();
+ String eventName = event.getName();
+
+ if (eventName.equals(Events.ON_CLICK))
+ doOnClick(comp);
+ }
+
+ private void doOnClick(Component comp)
+ {
+ if (comp instanceof A)
+ {
+ A btn = (A) comp;
+
+ int AD_PInstance_ID = 0;
+ try
+ {
+ AD_PInstance_ID = Integer.valueOf((String)btn.getAttribute(AD_PINSTANCE_ID_ATTR));
+ }
+ catch (Exception e) {
+ }
+
+ if (AD_PInstance_ID > 0)
+ AEnv.zoom(MPInstance.Table_ID, AD_PInstance_ID);
+ }
+
+ if (comp instanceof Image) // Refresh button
+ {
+ refresh();
+ }
+ }
+
+ private synchronized void refresh()
+ {
+ // Please review here - is throwing NPE in some cases when user push repeatedly the refresh button
+ List> childs = bxJobs.getChildren();
+ int childCount = childs.size();
+ for (int c = childCount - 1; c >=0; c--) {
+ Component comp = (Component) childs.get(c);
+ if (comp instanceof A) {
+ comp.removeEventListener(Events.ON_CLICK, this);
+ }
+ bxJobs.removeChild(comp);
+ }
+
+ List pis = getRunningJobForUser(ctx, AD_User_ID);
+ for (MPInstance pi : pis) {
+ MProcess process = new MProcess(pi.getCtx(), pi.getAD_Process_ID(), pi.get_TrxName());
+ String label = process.getName() + " [" + Msg.getElement(pi.getCtx(), "Created") + " = " + pi.getCreated() + "]";
+ A btnJob = new A();
+ btnJob.setAttribute(AD_PINSTANCE_ID_ATTR, String.valueOf(pi.getAD_PInstance_ID()));
+ bxJobs.appendChild(btnJob);
+ btnJob.setLabel(label);
+ btnJob.setImage(ThemeManager.getThemeResource(getIconFile()));
+ btnJob.addEventListener(Events.ON_CLICK, this);
+ btnJob.setSclass("menu-href");
+ btnJob.setHflex("1");
+ }
+ }
+
+ public static List getRunningJobForUser(Properties ctx, int AD_User_ID)
+ {
+ List pis = new Query(ctx, MPInstance.Table_Name, "Coalesce(AD_User_ID,0)=? AND IsProcessing='Y' AND IsRunAsJob='Y'", null)
+ .setOnlyActiveRecords(true)
+ .setClient_ID()
+ .setParameters(AD_User_ID)
+ .setOrderBy("Updated DESC")
+ .list();
+ return pis;
+ }
+
+ private String getIconFile()
+ {
+ return "images/mWindow.png";
+ }
+
+ @Override
+ public void refresh(ServerPushTemplate template)
+ {
+ template.executeAsync(this);
+ }
+
+ @Override
+ public void updateUI()
+ {
+ refresh();
+ bxJobs.invalidate();
+ updateDesktopReference();
+ }
+
+ /**
+ *
+ */
+ protected void updateDesktopReference()
+ {
+ if ((desktop == null || desktop.get() == null) || (desktop.get() != null && desktop.get() != getDesktop())) {
+ if (desktop != null && desktop.get() != null)
+ desktop.get().removeListener(listener);
+
+ desktop = new WeakReference(getDesktop());
+ desktop.get().addListener(listener);
+ }
+ }
+
+ @Override
+ public void handleEvent(org.osgi.service.event.Event event)
+ {
+ if (event.getTopic().equals(MPInstance.ON_RUNNING_JOB_CHANGED_TOPIC) && event.getProperty("AD_User_ID") != null) {
+ Object property = event.getProperty("AD_User_ID");
+ if (property instanceof Number) {
+ int id = ((Number)property).intValue();
+ if (id == AD_User_ID) {
+ try {
+ if (desktop != null && desktop.get() != null && desktop.get().isAlive()) {
+ ServerPushTemplate template = new ServerPushTemplate(desktop.get());
+ refresh(template);
+ }
+ } catch (Exception e) {
+ EventManager.getInstance().unregister(this);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onPageAttached(Page newpage, Page oldpage)
+ {
+ super.onPageAttached(newpage, oldpage);
+ if (newpage != null) {
+ EventManager.getInstance().register(MPInstance.ON_RUNNING_JOB_CHANGED_TOPIC, this);
+ updateDesktopReference();
+ }
+ }
+
+ @Override
+ public void onPageDetached(Page page) {
+ super.onPageDetached(page);
+ cleanup();
+ }
+
+ static class TopicSubscriber implements ITopicSubscriber {
+ @Override
+ public void onMessage(Integer message) {
+ MPInstance.postOnChangedEvent(message);
+ }
+ }
+}
\ No newline at end of file
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPViews.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPViews.java
index be2727d850..b9188cb3b4 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPViews.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPViews.java
@@ -18,7 +18,7 @@ import java.util.List;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.ToolBarButton;
import org.adempiere.webui.component.Window;
-import org.adempiere.webui.panel.InfoPanel;
+import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.theme.ThemeManager;
import org.adempiere.webui.window.InfoSchedule;
import org.compiere.model.MInfoWindow;
@@ -135,9 +135,8 @@ public class DPViews extends DashboardPanel implements EventListener {
if (infoWindowID<=0)
return;
-
- String tableName = MTable.getTableName(Env.getCtx(), new MInfoWindow(Env.getCtx(), infoWindowID, null).getAD_Table_ID());
- InfoPanel.showPanel(tableName);
+
+ SessionManager.getAppDesktop().openInfo(infoWindowID);
}
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoBPartnerWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoBPartnerWindow.java
index adff6a9a4c..7a4b15ea14 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoBPartnerWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoBPartnerWindow.java
@@ -107,6 +107,7 @@ public class InfoBPartnerWindow extends InfoWindow {
}
}
}
+ dynamicDisplay(null);
}
@Override
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInOutWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInOutWindow.java
index 63d9b9c7c5..8636d9ac4b 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInOutWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInOutWindow.java
@@ -67,5 +67,6 @@ public class InfoInOutWindow extends InfoWindow {
}
}
}
+ dynamicDisplay(null);
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInvoiceWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInvoiceWindow.java
index e64a9daa47..705e06dc6d 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInvoiceWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoInvoiceWindow.java
@@ -78,6 +78,7 @@ public class InfoInvoiceWindow extends InfoWindow {
}
}
}
+ dynamicDisplay(null);
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoOrderWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoOrderWindow.java
index 17355170e3..e54f176f81 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoOrderWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoOrderWindow.java
@@ -78,5 +78,6 @@ public class InfoOrderWindow extends InfoWindow {
}
}
}
+ dynamicDisplay(null);
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoPaymentWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoPaymentWindow.java
index a4520f92d6..1e44708fa7 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoPaymentWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoPaymentWindow.java
@@ -67,5 +67,6 @@ public class InfoPaymentWindow extends InfoWindow {
}
}
}
+ dynamicDisplay(null);
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoProductWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoProductWindow.java
index 42345f04d7..60306ea4e2 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoProductWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoProductWindow.java
@@ -130,6 +130,7 @@ public class InfoProductWindow extends InfoWindow {
protected void createParameterPanel() {
super.createParameterPanel();
initParameters();
+ dynamicDisplay(null);
}
@Override
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java
index 8c4ab4631d..1b91924ae0 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java
@@ -40,6 +40,7 @@ import org.adempiere.webui.event.ValueChangeEvent;
import org.adempiere.webui.event.ValueChangeListener;
import org.adempiere.webui.panel.InfoPanel;
import org.adempiere.webui.session.SessionManager;
+import org.adempiere.webui.window.FDialog;
import org.compiere.minigrid.ColumnInfo;
import org.compiere.minigrid.EmbedWinInfo;
import org.compiere.minigrid.IDColumn;
@@ -185,7 +186,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
for (int i = 0; i < identifiers.size(); i++) {
WEditor editor = identifiers.get(i);
editor.setValue(queryValue);
- testCount();
+ testCount(false);
if (m_count > 0) {
break;
} else {
@@ -202,7 +203,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
WEditor editor = identifiers.get(i);
editor.setValue(values[i]);
}
- testCount();
+ testCount(false);
}
}
@@ -270,7 +271,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
StringBuilder builder = new StringBuilder(p_whereClause != null ? p_whereClause.trim() : "");
String infoWhereClause = infoWindow.getWhereClause();
if (infoWhereClause != null && infoWhereClause.indexOf("@") >= 0) {
- infoWhereClause = Env.parseContext(Env.getCtx(), p_WindowNo, infoWhereClause, false, false);
+ infoWhereClause = Env.parseContext(Env.getCtx(), p_WindowNo, infoWhereClause, true, false);
if (infoWhereClause.length() == 0)
log.log(Level.SEVERE, "Cannot parse context= " + infoWindow.getWhereClause());
}
@@ -471,6 +472,9 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
}
int count = 0;
for(WEditor editor : editors) {
+ if (!editor.isVisible())
+ continue;
+
if (editor instanceof IWhereClauseEditor) {
String whereClause = ((IWhereClauseEditor) editor).getWhereClause();
if (whereClause != null && whereClause.trim().length() > 0) {
@@ -518,7 +522,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
if (mInfoColumn.getQueryFunction() != null && mInfoColumn.getQueryFunction().trim().length() > 0) {
String function = mInfoColumn.getQueryFunction();
if (function.indexOf("@") >= 0) {
- String s = Env.parseContext(infoContext, p_WindowNo, function, false, false);
+ String s = Env.parseContext(infoContext, p_WindowNo, function, true, false);
if (s.length() == 0) {
log.log(Level.SEVERE, "Failed to parse query function. " + function);
} else {
@@ -542,7 +546,11 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
if (count > 0 && !checkAND.isChecked()) {
builder.append(" ) ");
}
- return builder.toString();
+ String sql = builder.toString();
+ if (sql.indexOf("@") >= 0) {
+ sql = Env.parseContext(infoContext, p_WindowNo, sql, true, true);
+ }
+ return sql;
}
private MInfoColumn findInfoColumn(GridField gridField) {
@@ -561,7 +569,10 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
protected void setParameters(PreparedStatement pstmt, boolean forCount)
throws SQLException {
int parameterIndex = 0;
- for(WEditor editor : editors) {
+ for(WEditor editor : editors) {
+ if (!editor.isVisible())
+ continue;
+
if (editor.getGridField() != null && editor.getValue() != null && editor.getValue().toString().trim().length() > 0) {
MInfoColumn mInfoColumn = findInfoColumn(editor.getGridField());
if (mInfoColumn == null || mInfoColumn.getSelectClause().equals("0")) {
@@ -608,7 +619,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
}
if (m_sqlOrder != null && m_sqlOrder.indexOf("@") >= 0) {
- String sql = Env.parseContext(infoContext, p_WindowNo, m_sqlOrder, false, false);
+ String sql = Env.parseContext(infoContext, p_WindowNo, m_sqlOrder, true, false);
if (sql == null || sql.length() == 0) {
log.severe("Failed to parsed sql. sql=" + m_sqlOrder);
} else {
@@ -966,7 +977,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
if (infoWindow.getOtherClause() != null && infoWindow.getOtherClause().trim().length() > 0) {
String otherClause = infoWindow.getOtherClause();
if (otherClause.indexOf("@") >= 0) {
- String s = Env.parseContext(infoContext, p_WindowNo, otherClause, false, false);
+ String s = Env.parseContext(infoContext, p_WindowNo, otherClause, true, false);
if (s.length() == 0) {
log.severe("Failed to parse other clause. " + otherClause);
} else {
@@ -1008,8 +1019,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
public void valueChange(ValueChangeEvent evt) {
if (evt != null && evt.getSource() instanceof WEditor)
{
- WEditor editor = (WEditor)evt.getSource();
- boolean asiChanged = false;
+ WEditor editor = (WEditor)evt.getSource();
if (evt.getNewValue() == null) {
Env.setContext(infoContext, p_WindowNo, editor.getColumnName(), "");
Env.setContext(infoContext, p_WindowNo, Env.TAB_INFO, editor.getColumnName(), "");
@@ -1023,24 +1033,29 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
Env.setContext(infoContext, p_WindowNo, editor.getColumnName(), evt.getNewValue().toString());
Env.setContext(infoContext, p_WindowNo, Env.TAB_INFO, editor.getColumnName(), evt.getNewValue().toString());
}
- // if attribute set changed (from any value to any value) clear the attribute set instance m_pAttributeWhere
- if (editor instanceof WTableDirEditor && editor.getColumnName().equals("M_AttributeSet_ID"))
- asiChanged = true;
-
- for(WEditor otherEditor : editors)
- {
- if (otherEditor == editor)
- continue;
- if (asiChanged && otherEditor instanceof WInfoPAttributeEditor)
- ((WInfoPAttributeEditor)otherEditor).clearWhereClause();
-
- otherEditor.dynamicDisplay();
- }
-
- evalDisplayLogic();
+ dynamicDisplay(editor);
}
}
+
+ protected void dynamicDisplay(WEditor editor) {
+ // if attribute set changed (from any value to any value) clear the attribute set instance m_pAttributeWhere
+ boolean asiChanged = false;
+ if (editor != null && editor instanceof WTableDirEditor && editor.getColumnName().equals("M_AttributeSet_ID"))
+ asiChanged = true;
+
+ for(WEditor otherEditor : editors)
+ {
+ if (otherEditor == editor)
+ continue;
+ if (asiChanged && otherEditor instanceof WInfoPAttributeEditor)
+ ((WInfoPAttributeEditor)otherEditor).clearWhereClause();
+
+ otherEditor.dynamicDisplay();
+ }
+
+ evalDisplayLogic();
+ }
public void onEvent(Event event)
{
@@ -1076,6 +1091,15 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
* @return true if display
*/
protected boolean testCount()
+ {
+ return testCount(true);
+ }
+
+ /**
+ * Test Row Count
+ * @return true if display
+ */
+ private boolean testCount(boolean promptError)
{
long start = System.currentTimeMillis();
String dynWhere = getSQLWhere();
@@ -1122,6 +1146,16 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
if (log.isLoggable(Level.FINE))
log.fine("#" + m_count + " - " + (System.currentTimeMillis()-start) + "ms");
+
+ if (infoWindow.getMaxQueryRecords() > 0 && m_count > infoWindow.getMaxQueryRecords())
+ {
+ if (promptError)
+ {
+ FDialog.error(getWindowNo(), this, "InfoFindOverMax",
+ m_count + " > " + infoWindow.getMaxQueryRecords());
+ }
+ m_count = 0;
+ }
return true;
} // testCount
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java
index 2a582fe788..f3ce537df4 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java
@@ -45,6 +45,7 @@ import org.zkoss.zhtml.Td;
import org.zkoss.zhtml.Tr;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
+import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Image;
/**
@@ -274,6 +275,7 @@ public class ChangePasswordPanel extends Window implements EventListener
public void validateChangePassword()
{
+ Clients.clearBusy();
String oldPassword = txtOldPassword.getValue();
String newPassword = txtNewPassword.getValue();
String retypeNewPassword = txtRetypeNewPassword.getValue();
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/HelpController.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/HelpController.java
index 71fbc785c3..7ab457a29c 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/HelpController.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/HelpController.java
@@ -139,30 +139,73 @@ public class HelpController
renderQuickInfo(null);
}
+ /**
+ * Make tooltip content for a field
+ * @param field
+ */
public void renderToolTip(GridField field)
- {
- StringBuilder sb = new StringBuilder();
- sb.append("\n\n\n");
+ {
+ String hdr = null;
+ String desc = null;
+ String help = null;
+ String otherContent = null;
if (field != null)
{
- String hdr = field.getHeader();
+ hdr = field.getHeader();
if (hdr != null && hdr.length() > 0)
- {
- sb.append("
" + hdr + "");
-
+ {
if (field.getDescription().length() != 0)
- sb.append("
\n
" + field.getDescription() + "");
+ desc = field.getDescription();
if (field.getHelp().length() != 0)
- sb.append("
\n" + field.getHelp());
+ help = field.getHelp();
}
}
else
{
- sb.append("
(" + Msg.getMsg(Env.getCtx(), "PlaceCursorIntoField") + ")");
+ otherContent = Msg.getMsg(Env.getCtx(), "PlaceCursorIntoField");
}
+ renderToolTip(hdr, desc, help, otherContent);
+ }
+
+ /**
+ * Make tooltip content, when hdr == null, show otherContent
+ * @param hdr
+ * @param desc
+ * @param help
+ * @param otherContent
+ */
+ public void renderToolTip(String hdr, String desc, String help, String otherContent)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("\n\n
\n");
+
+ if (hdr == null || hdr.trim().length() == 0){
+ if (otherContent != null){
+ sb.append("(");
+ sb.append (otherContent);
+ sb.append (")");
+ }
+ }else{
+ sb.append("");
+ sb.append(hdr);
+ sb.append("");
+
+ if (desc != null && desc.trim().length() > 0){
+ sb.append("
\n");
+ sb.append(desc);
+ sb.append("");
+ }
+
+ if (help != null && help.trim().length() > 0){
+ sb.append("
\n");
+ sb.append(help);
+ }
+
+ }
+
sb.append("
\n\n");
htmlToolTip.setContent(sb.toString());
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java
index 50c422959e..7b273e0a23 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java
@@ -337,7 +337,7 @@ public abstract class InfoPanel extends Window implements EventListener
,
//
m_sqlOrder = "";
// m_sqlUserOrder = "";
- if (orderBy != null && orderBy.length() > 0)
+ if (orderBy != null && orderBy.trim().length() > 0)
m_sqlOrder = " ORDER BY " + orderBy;
} // prepareTable
@@ -352,14 +352,17 @@ public abstract class InfoPanel extends Window implements EventListener,
cacheEnd = -1;
testCount();
- m_useDatabasePaging = (m_count > 1000);
- if (m_useDatabasePaging)
+ if (m_count > 0)
{
- return ;
- }
- else
- {
- readLine(0, -1);
+ m_useDatabasePaging = (m_count > 1000);
+ if (m_useDatabasePaging)
+ {
+ return ;
+ }
+ else
+ {
+ readLine(0, -1);
+ }
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java
index d7cfdc1c9b..20399406c6 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java
@@ -53,6 +53,7 @@ import org.zkoss.zhtml.Td;
import org.zkoss.zhtml.Tr;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
+import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Image;
/**
@@ -314,10 +315,7 @@ public class ResetPasswordPanel extends Window implements EventListener
{
if (event.getTarget().getId().equals(ConfirmPanel.A_OK))
{
- if (txtAnswer != null && txtAnswer.isReadonly())
- validateEmail();
- else
- validateResetPassword();
+ validate ();
}
else if (event.getTarget().getId().equals(ConfirmPanel.A_CANCEL))
{
@@ -326,6 +324,15 @@ public class ResetPasswordPanel extends Window implements EventListener
}
}
+ public void validate (){
+ Clients.clearBusy();
+
+ if (txtAnswer != null && txtAnswer.isReadonly())
+ validateEmail();
+ else
+ validateResetPassword();
+ }
+
protected void validateEmail()
{
String email = txtEmail.getValue();
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java
index 8c5c29e092..1fdd418db6 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java
@@ -122,6 +122,7 @@ public class WAttachment extends Window implements EventListener
autoPreviewList.add("image/gif");
autoPreviewList.add("text/plain");
autoPreviewList.add("application/pdf");
+ autoPreviewList.add("text/html");
}
/**
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java
index cf84a2cdd2..d58acdac2b 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java
@@ -330,7 +330,24 @@ public class FDialog
return ask(AEnv.getDialogHeader(Env.getCtx(), windowNo), windowNo, comp, adMessage, callback);
}
- /**************************************************************************
+ public static void askForInput(int windowNo, Component comp, String adMessage, final Callback callback)
+ {
+ Callback msgCallback = null;
+ if (callback != null)
+ {
+ msgCallback = new Callback() {
+ @Override
+ public void onCallback(String result) {
+ callback.onCallback(result);
+ }
+ };
+ }
+ String s = Msg.getMsg(Env.getCtx(), adMessage).replace("\n", "
");
+ Messagebox.showDialog(s, AEnv.getDialogHeader(Env.getCtx(), windowNo),
+ Messagebox.OK | Messagebox.INPUT, Messagebox.QUESTION, msgCallback, (msgCallback == null));
+ }
+
+ /**************************************************************************
* Ask Question with question icon and (OK) (Cancel) buttons
*
* @param WindowNo Number of Window
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
index 6508cb4b3e..d66c90b8c4 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
@@ -2004,8 +2004,8 @@ public class FindWindow extends Window implements EventListener, ValueCha
if (null!=selectedHistoryItem && selectedHistoryItem.toString().length() > 0 && getHistoryDays(selectedHistoryValue) > 0)
{
- StringBuilder where = new StringBuilder();
- where.append("Created >= ");
+ StringBuilder where = new StringBuilder(m_tableName);
+ where.append(".Created >= ");
where.append("SysDate-").append(getHistoryDays(selectedHistoryValue));
m_query.addRestriction(where.toString());
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java
index f0c8270586..dbd925db7b 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java
@@ -153,14 +153,26 @@ public class LoginWindow extends FWindow implements EventListener
if (rolePanel != null)
{
rolePanel.validateRoles();
+ return;
}
- else
+
+ LoginPanel loginPanel = (LoginPanel)this.getFellowIfAny("loginPanel");
+ if (loginPanel != null)
{
- LoginPanel loginPanel = (LoginPanel)this.getFellowIfAny("loginPanel");
- if (loginPanel != null)
- {
- loginPanel.validateLogin();
- }
+ loginPanel.validateLogin();
+ return;
+ }
+
+ ChangePasswordPanel changePasswordPanel = (ChangePasswordPanel)this.getFellowIfAny("changePasswordPanel");
+ if (changePasswordPanel != null){
+ changePasswordPanel.validateChangePassword();
+ return;
+ }
+
+ ResetPasswordPanel resetPasswordPanel = (ResetPasswordPanel)this.getFellowIfAny("resetPasswordPanel");
+ if (resetPasswordPanel != null){
+ resetPasswordPanel.validate();
+ return;
}
}
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java
index 96bf0d696d..9eaaa3bc2f 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java
@@ -1037,7 +1037,7 @@ public final class WAccountDialog extends Window
M_Product_ID, C_BPartner_ID, AD_OrgTrx_ID,
C_LocFrom_ID, C_LocTo_ID, C_SRegion_ID,
C_Project_ID, C_Campaign_ID, C_Activity_ID,
- User1_ID, User2_ID, 0, 0);
+ User1_ID, User2_ID, 0, 0, null);
if (acct != null && acct.get_ID() == 0)
acct.saveEx();
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WEMailDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WEMailDialog.java
index 70b0506e19..b78f0e1a32 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WEMailDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WEMailDialog.java
@@ -45,8 +45,11 @@ import org.adempiere.webui.event.ValueChangeEvent;
import org.adempiere.webui.event.ValueChangeListener;
import org.adempiere.webui.theme.ThemeManager;
import org.compiere.model.Lookup;
+import org.compiere.model.MAttachment;
+import org.compiere.model.MAttachmentEntry;
import org.compiere.model.MClient;
import org.compiere.model.MLookupFactory;
+import org.compiere.model.MMailText;
import org.compiere.model.MUser;
import org.compiere.model.MUserMail;
import org.compiere.util.ByteArrayDataSource;
@@ -56,6 +59,7 @@ import org.compiere.util.EMail;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.compiere.util.Util;
+import org.zkforge.ckez.CKeditor;
import org.zkoss.util.media.Media;
import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.event.Event;
@@ -68,7 +72,6 @@ import org.zkoss.zul.Cell;
import org.zkoss.zul.Center;
import org.zkoss.zul.Div;
import org.zkoss.zul.South;
-import org.zkoss.zul.Space;
/**
* EMail Dialog
@@ -108,10 +111,16 @@ public class WEMailDialog extends Window implements EventListener, ValueC
this.setSclass("popup-dialog");
this.setClosable(true);
this.setBorder("normal");
- this.setWidth("550px");
+ this.setWidth("80%");
+ this.setHeight("80%");
this.setShadow(true);
this.setMaximizable(true);
+ this.setSizable(true);
+ fMessage = new CKeditor();
+ fMessage.setCustomConfigurationsPath("/js/ckeditor/config.js");
+ fMessage.setToolbar("MyToolbar");
+
commonInit(from, to, subject, message, attachment);
} // EmailDialog
@@ -183,9 +192,9 @@ public class WEMailDialog extends Window implements EventListener, ValueC
private Label lCc = new Label();
private Label lSubject = new Label();
private Label lAttachment = new Label();
- private Textbox fMessage = new Textbox();
+ private CKeditor fMessage;
private ConfirmPanel confirmPanel = new ConfirmPanel(true);
-
+ private Button bAddDefaultMailText;
private Div attachmentBox;
@Override
@@ -195,6 +204,10 @@ public class WEMailDialog extends Window implements EventListener, ValueC
render();
} catch (Exception e) {
}
+
+ if (MUser.get(Env.getCtx()).isAddMailTextAutomatically()) {
+ addMailText();
+ }
}
/**
@@ -301,11 +314,9 @@ public class WEMailDialog extends Window implements EventListener, ValueC
row = new Row();
rows.appendChild(row);
- row.appendChild(new Space());
- row.appendChild(fMessage);
- fMessage.setHflex("1");
- fMessage.setHeight("100%");
- fMessage.setRows(10);
+ row.appendCellChild(fMessage, 2);
+ fMessage.setHflex("2");
+ fMessage.setHeight("350px");
confirmPanel.addActionListener(this);
@@ -315,20 +326,25 @@ public class WEMailDialog extends Window implements EventListener, ValueC
btn.addEventListener(Events.ON_UPLOAD, this);
btn.setTooltiptext(Msg.getMsg(Env.getCtx(), "Attachment"));
confirmPanel.addComponentsLeft(btn);
+
+ bAddDefaultMailText = new Button();
+ bAddDefaultMailText.setImage(ThemeManager.getThemeResource("images/DefaultMailText.png"));
+ bAddDefaultMailText.addEventListener(Events.ON_CLICK, this);
+ bAddDefaultMailText.setTooltiptext(Msg.getMsg(Env.getCtx(), "AddDefaultMailTextContent"));
+ if (new MUser(Env.getCtx(), Env.getAD_User_ID(Env.getCtx()), null).getR_DefaultMailText_ID() > 0)
+ confirmPanel.addComponentsLeft(bAddDefaultMailText);
+
confirmPanel.getButton(ConfirmPanel.A_OK).setWidgetListener("onClick", "zAu.cmd0.showBusy(null)");
Borderlayout borderlayout = new Borderlayout();
this.appendChild(borderlayout);
borderlayout.setHflex("1");
- borderlayout.setVflex("min");
Center centerPane = new Center();
centerPane.setSclass("dialog-content");
centerPane.setAutoscroll(true);
borderlayout.appendChild(centerPane);
centerPane.appendChild(grid);
- grid.setVflex("1");
- grid.setHflex("1");
South southPane = new South();
southPane.setSclass("dialog-footer");
@@ -432,7 +448,7 @@ public class WEMailDialog extends Window implements EventListener, ValueC
public void setMessage(String newMessage)
{
m_message = newMessage;
- fMessage.setText(m_message);
+ fMessage.setValue(m_message);
// fMessage.setCaretPosition(0);
} // setMessage
@@ -441,7 +457,7 @@ public class WEMailDialog extends Window implements EventListener, ValueC
*/
public String getMessage()
{
- m_message = fMessage.getText();
+ m_message = fMessage.getValue();
return m_message;
} // getMessage
@@ -481,7 +497,7 @@ public class WEMailDialog extends Window implements EventListener, ValueC
StringTokenizer st = new StringTokenizer(getTo(), " ,;", false);
String to = st.nextToken();
- EMail email = m_client.createEMail(getFrom(), to, getSubject(), getMessage());
+ EMail email = m_client.createEMail(getFrom(), to, getSubject(), getMessage(), true);
String status = "Check Setup";
if (email != null)
{
@@ -528,6 +544,8 @@ public class WEMailDialog extends Window implements EventListener, ValueC
addAttachment(dataSource, true);
}
}
+ else if (event.getTarget() == bAddDefaultMailText) // Insert the mail text at cursor (light side) ? or at the end (dark side) :D
+ addMailText();
}
/**
@@ -652,4 +670,30 @@ public class WEMailDialog extends Window implements EventListener, ValueC
fCc.setValue(email);
}
}
-} // VEMailDialog
\ No newline at end of file
+
+ private void addMailText()
+ {
+ MMailText mt = (MMailText) MUser.get(Env.getCtx()).getR_DefaultMailText();
+ if (mt.get_ID() > 0) {
+ mt.setPO(MUser.get(Env.getCtx()));
+ fMessage.setValue(getMessage() + "\n" + mt.getMailText(true));
+ MAttachment attachment = MAttachment.get(Env.getCtx(), MMailText.Table_ID, mt.get_ID());
+ if (attachment != null) {
+ MAttachmentEntry[] entries = attachment.getEntries();
+ for (MAttachmentEntry entry : entries) {
+ boolean alreadyAdded = false;
+ for (DataSource attach : attachments)
+ if (attach.getName().equals(entry.getName()))
+ alreadyAdded = true;
+ if (alreadyAdded)
+ continue;
+ byte[] data = entry.getData();
+ ByteArrayDataSource dataSource = new ByteArrayDataSource(data, entry.getContentType());
+ dataSource.setName(entry.getName());
+ addAttachment(dataSource, true);
+ }
+ }
+ }
+ }
+
+} // WEMailDialog
\ No newline at end of file
diff --git a/org.adempiere.ui.zk/theme/default/images/DefaultMailText.png b/org.adempiere.ui.zk/theme/default/images/DefaultMailText.png
new file mode 100644
index 0000000000..5fcf5ba227
Binary files /dev/null and b/org.adempiere.ui.zk/theme/default/images/DefaultMailText.png differ
diff --git a/org.adempiere.ui.zk/theme/default/zul/dashboard/runningJobs.zul b/org.adempiere.ui.zk/theme/default/zul/dashboard/runningJobs.zul
new file mode 100644
index 0000000000..981e9fee23
--- /dev/null
+++ b/org.adempiere.ui.zk/theme/default/zul/dashboard/runningJobs.zul
@@ -0,0 +1,2 @@
+
+
diff --git a/org.adempiere.ui.zk/zul/runningJobs.zul b/org.adempiere.ui.zk/zul/runningJobs.zul
new file mode 100644
index 0000000000..27906a7b1e
--- /dev/null
+++ b/org.adempiere.ui.zk/zul/runningJobs.zul
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/org.adempiere.ui/src/org/compiere/apps/form/Charge.java b/org.adempiere.ui/src/org/compiere/apps/form/Charge.java
index ca37b6a854..f035cf204d 100644
--- a/org.adempiere.ui/src/org/compiere/apps/form/Charge.java
+++ b/org.adempiere.ui/src/org/compiere/apps/form/Charge.java
@@ -362,7 +362,8 @@ public class Charge
defaultAccount.getUser1_ID(),
defaultAccount.getUser2_ID(),
defaultAccount.getUserElement1_ID(),
- defaultAccount.getUserElement2_ID());
+ defaultAccount.getUserElement2_ID(),
+ null);
return account;
}
diff --git a/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java b/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java
index fdd327f8dc..c85bb77d7f 100644
--- a/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java
+++ b/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQL.java
@@ -1013,7 +1013,7 @@ public class Convert_PostgreSQL extends Convert_SQL92 {
} else {
rest = "";
}
- if (defaultvalue.equalsIgnoreCase("NULL")) {
+ if (defaultvalue.equalsIgnoreCase("NULL") || defaultvalue.equalsIgnoreCase("statement_timestamp()")) {
DDL = sqlStatement.substring(0, begin_col
- action.length())
+ " ADD COLUMN "
diff --git a/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQLTest.java b/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQLTest.java
index cd92da9147..c7ccd085de 100644
--- a/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQLTest.java
+++ b/org.compiere.db.postgresql.provider/src/org/compiere/dbPort/Convert_PostgreSQLTest.java
@@ -140,6 +140,11 @@ public final class Convert_PostgreSQLTest extends TestCase{
sqe = "INSERT INTO t_alter_column values('pp_order_nodenext','PP_Order_NodeNext_ID',null,'NULL',null)";
r = convert.convert(sql);
assertEquals(sqe, r[0].trim());
+
+ sql = "ALTER TABLE C_InvoiceTax ADD Created DATE DEFAULT SYSDATE NOT NULL";
+ sqe = "ALTER TABLE C_InvoiceTax ADD COLUMN Created TIMESTAMP DEFAULT statement_timestamp() NOT NULL";
+ r = convert.convert(sql);
+ assertEquals(sqe, r[0].trim());
}
// Convert.recoverQuotedStrings() error on strings with "<-->" - teo_sarca [ 1705768 ]
diff --git a/org.idempiere.hazelcast.service.config/bin/.hgignore b/org.idempiere.hazelcast.service.config/bin/.hgignore
new file mode 100644
index 0000000000..e69de29bb2