diff --git a/migration/iD10/oracle/202205181247_IDEMPIERE-2058.sql b/migration/iD10/oracle/202205181247_IDEMPIERE-2058.sql new file mode 100644 index 0000000000..2138e63bed --- /dev/null +++ b/migration/iD10/oracle/202205181247_IDEMPIERE-2058.sql @@ -0,0 +1,35 @@ +-- IDEMPIERE-2058 +SELECT register_migration_script('202205181247_IDEMPIERE-2058.sql') FROM dual; + +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- May 18, 2022, 12:47:47 PM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Copy Report',0,0,'Y',TO_TIMESTAMP('2022-05-18 12:47:47','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-18 12:47:47','YYYY-MM-DD HH24:MI:SS'),100,200752,'CopyReport','D','829ae7a6-b716-4969-b95a-8440666032c2') +; + +-- May 23, 2022, 10:45:29 AM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','You selected the Copy Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views',0,0,'Y',TO_TIMESTAMP('2022-05-23 10:45:29','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-23 10:45:29','YYYY-MM-DD HH24:MI:SS'),100,200753,'CreateCopyReport?','D','c482066a-d3bf-40d1-8525-1e303c49e586') +; + +-- May 23, 2022, 10:47:59 AM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','You selected the New Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views',0,0,'Y',TO_TIMESTAMP('2022-05-23 10:47:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-23 10:47:59','YYYY-MM-DD HH24:MI:SS'),100,200754,'CreateNewReport?','D','fa925848-3e7b-45ed-9300-cb2e2b8fda97') +; + +-- May 24, 2022, 4:08:19 PM CEST +UPDATE AD_Message SET MsgText='You selected the New Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views
+Print Format Name:', Value='CreateNewPrintFormat',Updated=TO_TIMESTAMP('2022-05-24 16:08:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200754 +; + +-- May 24, 2022, 4:08:39 PM CEST +UPDATE AD_Message SET MsgText='You selected the Copy Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views
+Print Format Name:', Value='CreatePrintFormatCopy',Updated=TO_TIMESTAMP('2022-05-24 16:08:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200753 +; + +-- May 24, 2022, 4:09:21 PM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Create Print Format Copy',0,0,'Y',TO_TIMESTAMP('2022-05-24 16:09:21','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-24 16:09:21','YYYY-MM-DD HH24:MI:SS'),100,200755,'CreatePrintFormatCopyTitle','D','d82387a5-6663-4733-a098-ec6a00357277') +; + +-- May 24, 2022, 4:09:48 PM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Create New Print Format',0,0,'Y',TO_TIMESTAMP('2022-05-24 16:09:48','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-24 16:09:48','YYYY-MM-DD HH24:MI:SS'),100,200756,'CreateNewPrintFormatTitle','D','d2c8213e-95e2-476d-a745-601115e16b30') +; diff --git a/migration/iD10/postgresql/202205181247_IDEMPIERE-2058.sql b/migration/iD10/postgresql/202205181247_IDEMPIERE-2058.sql new file mode 100644 index 0000000000..5fac0ec8fa --- /dev/null +++ b/migration/iD10/postgresql/202205181247_IDEMPIERE-2058.sql @@ -0,0 +1,32 @@ +-- IDEMPIERE-2058 +SELECT register_migration_script('202205181247_IDEMPIERE-2058.sql') FROM dual; + +-- May 18, 2022, 12:47:47 PM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Copy Report',0,0,'Y',TO_TIMESTAMP('2022-05-18 12:47:47','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-18 12:47:47','YYYY-MM-DD HH24:MI:SS'),100,200752,'CopyReport','D','829ae7a6-b716-4969-b95a-8440666032c2') +; + +-- May 23, 2022, 10:45:29 AM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','You selected the Copy Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views',0,0,'Y',TO_TIMESTAMP('2022-05-23 10:45:29','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-23 10:45:29','YYYY-MM-DD HH24:MI:SS'),100,200753,'CreateCopyReport?','D','c482066a-d3bf-40d1-8525-1e303c49e586') +; + +-- May 23, 2022, 10:47:59 AM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','You selected the New Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views',0,0,'Y',TO_TIMESTAMP('2022-05-23 10:47:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-23 10:47:59','YYYY-MM-DD HH24:MI:SS'),100,200754,'CreateNewReport?','D','fa925848-3e7b-45ed-9300-cb2e2b8fda97') +; + +-- May 24, 2022, 4:08:19 PM CEST +UPDATE AD_Message SET MsgText='You selected the New Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views
+Print Format Name:', Value='CreateNewPrintFormat',Updated=TO_TIMESTAMP('2022-05-24 16:08:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200754 +; + +-- May 24, 2022, 4:08:39 PM CEST +UPDATE AD_Message SET MsgText='You selected the Copy Report function. It creates a brand new Print Format which you can modify, update, change. This is usually used for improving reporting to get additional information views
+Print Format Name:', Value='CreatePrintFormatCopy',Updated=TO_TIMESTAMP('2022-05-24 16:08:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200753 +; + +-- May 24, 2022, 4:09:21 PM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Create Print Format Copy',0,0,'Y',TO_TIMESTAMP('2022-05-24 16:09:21','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-24 16:09:21','YYYY-MM-DD HH24:MI:SS'),100,200755,'CreatePrintFormatCopyTitle','D','d82387a5-6663-4733-a098-ec6a00357277') +; + +-- May 24, 2022, 4:09:48 PM CEST +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Create New Print Format',0,0,'Y',TO_TIMESTAMP('2022-05-24 16:09:48','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-05-24 16:09:48','YYYY-MM-DD HH24:MI:SS'),100,200756,'CreateNewPrintFormatTitle','D','d2c8213e-95e2-476d-a745-601115e16b30') +; diff --git a/org.adempiere.base/src/org/compiere/print/ReportEngine.java b/org.adempiere.base/src/org/compiere/print/ReportEngine.java index 65ffd98c1e..6b1ae47d30 100644 --- a/org.adempiere.base/src/org/compiere/print/ReportEngine.java +++ b/org.adempiere.base/src/org/compiere/print/ReportEngine.java @@ -39,9 +39,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -388,11 +386,7 @@ public class ReportEngine implements PrintServiceAttributeListener if(Util.isEmpty(processFileNamePattern)) { - Calendar cal = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String dt = sdf.format(cal.getTime()); - - m_name = m_printFormat.get_Translation("Name") + "_" + dt; + m_name = (m_name = m_printFormat.get_Translation(m_printFormat.getName())) != null ? m_name : m_printFormat.getName(); } else { 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 df4302d333..0b878b623f 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 @@ -17,6 +17,8 @@ package org.adempiere.webui.component; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; import org.adempiere.util.Callback; @@ -25,6 +27,8 @@ import org.adempiere.webui.ClientInfo; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.editor.WEditor; import org.adempiere.webui.editor.WStringEditor; +import org.adempiere.webui.event.ValueChangeEvent; +import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.factory.ButtonFactory; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.theme.ThemeManager; @@ -35,6 +39,7 @@ import org.compiere.util.Util; import org.zkoss.zhtml.Text; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Page; +import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; @@ -73,6 +78,8 @@ public class Messagebox extends Window implements EventListener private Button btnRetry; private Button btnIgnore; private WEditor inputField; + private boolean isInputMandatory; + private boolean isExceptionThrown = false; private Image img = new Image(); @@ -259,10 +266,10 @@ public class Messagebox extends Window implements EventListener public int show(String message, String title, int buttons, String icon, Callback callback, boolean modal) { - return show(message, title, buttons, icon, null, callback, modal); + return show(message, title, buttons, icon, null, false, callback, modal); } - public int show(String message, String title, int buttons, String icon, WEditor editor, Callback callback, boolean modal) + public int show(String message, String title, int buttons, String icon, WEditor editor, boolean isInputMandatory, Callback callback, boolean modal) { this.msg = message; this.imgSrc = icon; @@ -271,7 +278,8 @@ public class Messagebox extends Window implements EventListener inputField = new WStringEditor(); else inputField = editor; - + this.isInputMandatory = isInputMandatory; + init(); btnOk.setVisible(false); @@ -307,6 +315,13 @@ public class Messagebox extends Window implements EventListener if ((buttons & INPUT) != 0) { inputField.setVisible(true); isInput = true; + inputField.addValueChangeListener(new ValueChangeListener() { + + @Override + public void valueChange(ValueChangeEvent evt) { + isExceptionThrown = false; + } + }); } this.setTitle(title); @@ -347,13 +362,17 @@ public class Messagebox extends Window implements EventListener public static int showDialog(String message, String title, int buttons, String icon, Callback callback, boolean modal) { - return showDialog(message, title, buttons, icon, null, callback, modal); + return showDialog(message, title, buttons, icon, null, false, callback, modal); } - public static int showDialog(String message, String title, int buttons, String icon, WEditor editor, Callback callback, boolean modal) + public static int showDialog(String message, String title, int buttons, String icon, WEditor editor, Callback callback, boolean modal) { + return showDialog(message, title, buttons, icon, editor, false, callback, modal); + } + + public static int showDialog(String message, String title, int buttons, String icon, WEditor editor, boolean isInputMandatory, Callback callback, boolean modal) { Messagebox msg = new Messagebox(); - return msg.show(message, title, buttons, icon, editor, callback, modal); + return msg.show(message, title, buttons, icon, editor, isInputMandatory, callback, modal); } // Andreas Sumerauer IDEMPIERE 4702 @@ -398,7 +417,13 @@ public class Messagebox extends Window implements EventListener { returnValue = IGNORE; } - close(); + if ((returnValue == CANCEL) || !isInputMandatory || (isInputMandatory && !Util.isEmpty(String.valueOf(inputField.getValue())))) + close(); + else { + isExceptionThrown = true; + returnValue = 0; + throw new WrongValueException(inputField.getComponent(), Msg.getMsg(Env.getCtx(), "PrintFormatMandatory")); + } } private void close() { @@ -417,8 +442,12 @@ public class Messagebox extends Window implements EventListener if (callback != null && !isInput) { callback.onCallback(returnValue); - } else if (callback != null && isInput) { + } else if (callback != null && isInput && !btnCancel.isVisible() && !btnNo.isVisible()) { callback.onCallback(inputField.getValue()); + } else if (callback != null && isInput && (btnCancel.isVisible() || btnNo.isVisible())) { + Map map = new HashMap(); + map.put(returnValue == OK || returnValue == YES, isExceptionThrown ? "" : inputField.getValue()); + callback.onCallback(map.entrySet().iterator().next()); } } } 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 5fa788a4ac..9f68b61be9 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 @@ -17,6 +17,7 @@ package org.adempiere.webui.window; +import java.util.Map; import java.util.Properties; import java.util.logging.Level; @@ -444,6 +445,23 @@ public class FDialog Messagebox.showDialog(s, Util.isEmpty(title) ? AEnv.getDialogHeader(Env.getCtx(), windowNo) : title, Messagebox.OK | Messagebox.INPUT, Messagebox.QUESTION, msgCallback, (msgCallback == null)); } + + public static void askForInputWithCancel(int windowNo, WEditor weditor, String adMessage, String title, final Callback> callback) + { + Callback> msgCallback = null; + if (callback != null) + { + msgCallback = new Callback>() { + @Override + public void onCallback(Map.Entry result) { + callback.onCallback(result); + } + }; + } + String s = Msg.getMsg(Env.getCtx(), adMessage).replace("\n", "
"); + Messagebox.showDialog(s, Util.isEmpty(title) ? AEnv.getDialogHeader(Env.getCtx(), windowNo) : title, + Messagebox.OK | Messagebox.CANCEL | Messagebox.INPUT, Messagebox.QUESTION, weditor, true, msgCallback, (msgCallback == null)); + } /************************************************************************** * Ask Question with question icon and (OK) (Cancel) buttons 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 862b87ffeb..fb0a670a28 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 @@ -22,6 +22,8 @@ import java.io.StringWriter; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -35,6 +37,7 @@ import javax.servlet.http.HttpServletRequest; import org.adempiere.base.upload.IUploadService; import org.adempiere.exceptions.DBException; import org.adempiere.pdf.Document; +import org.adempiere.util.Callback; import org.adempiere.util.ContextRunnable; import org.adempiere.webui.ClientInfo; import org.adempiere.webui.Extensions; @@ -53,6 +56,8 @@ import org.adempiere.webui.component.Tabpanel; import org.adempiere.webui.component.ToolBarButton; import org.adempiere.webui.component.Window; import org.adempiere.webui.desktop.IDesktop; +import org.adempiere.webui.editor.WEditor; +import org.adempiere.webui.editor.WStringEditor; import org.adempiere.webui.editor.WTableDirEditor; import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.event.DrillEvent; @@ -101,6 +106,7 @@ import org.zkoss.zk.au.out.AuScript; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.HtmlBasedComponent; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -190,6 +196,7 @@ public class ZkReportViewer extends Window implements EventListener, ITab private ToolBarButton bExport = new ToolBarButton(); private ToolBarButton bWizard = new ToolBarButton(); private Listbox comboReport = new Listbox(); + private Listitem previousSelected = new Listitem(); private WTableDirEditor wLanguage; private Label labelDrill = new Label(); private Listbox comboDrill = new Listbox(); @@ -1127,6 +1134,7 @@ public class ZkReportViewer extends Window implements EventListener, ITab { selectValue = pp; if(selectValue != null) + previousSelected = comboReport.getSelectedItem(); comboReport.setSelectedItem(li); } } @@ -1149,6 +1157,9 @@ public class ZkReportViewer extends Window implements EventListener, ITab StringBuffer sb = new StringBuffer("** ").append(Msg.getMsg(Env.getCtx(), "NewReport")).append(" **"); KeyNamePair pp = new KeyNamePair(-1, sb.toString()); comboReport.appendItem(pp.getName(), pp.getKey()); + sb = new StringBuffer("** ").append(Msg.getMsg(m_ctx, "CopyReport")).append(" **"); + pp = new KeyNamePair(-2, sb.toString()); + comboReport.addItem(pp); } comboReport.addEventListener(Events.ON_SELECT, this); } // fillComboReport @@ -1438,7 +1449,18 @@ public class ZkReportViewer extends Window implements EventListener, ITab winExportFile.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); AEnv.showWindow(winExportFile); } // cmd_export - + + /** + * Sets AD_PrintFormat_Trl Name to AD_PrintFormat Name + * @param pf + */ + private void resetPrintFormatTrl(MPrintFormat pf) { + String sql = "UPDATE AD_PrintFormat_Trl pf " + + " SET Name = '" + pf.getName() + "' " + + " WHERE pf.AD_PrintFormat_ID = " + pf.getAD_PrintFormat_ID(); + DB.executeUpdate(sql, null); + } + /** * Report Combo - Start other Report or create new one */ @@ -1457,38 +1479,120 @@ public class ZkReportViewer extends Window implements EventListener, ITab // create new if (AD_PrintFormat_ID == -1) { - int AD_ReportView_ID = m_reportEngine.getPrintFormat().getAD_ReportView_ID(); - if (AD_ReportView_ID != 0) - { - String name = m_reportEngine.getName(); - int index = name.lastIndexOf('_'); - if (index != -1) - name = name.substring(0,index); - pf = MPrintFormat.createFromReportView(m_ctx, AD_ReportView_ID, name); - } - else - { - int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID(); - pf = MPrintFormat.createFromTable(m_ctx, AD_Table_ID); - } - if (pf != null) - fillComboReport(pf.get_ID()); - else - return; + WEditor editor = new WStringEditor(); + ZKUpdateUtil.setWidth((HtmlBasedComponent)editor.getComponent(), "98%"); + FDialog.askForInputWithCancel(m_WindowNo, editor, "CreateNewPrintFormat", Msg.getMsg(m_ctx, "CreateNewPrintFormatTitle"), new Callback>() { + public void onCallback(Map.Entry result) { + if((result == null) || (!(result.getValue() instanceof String)) || (!result.getKey())) { + comboReport.setSelectedItem(previousSelected); + return; + } + MPrintFormat pf = null; + if (!Util.isEmpty((String)result.getValue())) { + int AD_ReportView_ID = m_reportEngine.getPrintFormat().getAD_ReportView_ID(); + if (AD_ReportView_ID != 0) + { + String name = (String)result.getValue(); + pf = MPrintFormat.createFromReportView(m_ctx, AD_ReportView_ID, name); + } + else + { + int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID(); + pf = MPrintFormat.createFromTable(m_ctx, AD_Table_ID); + } + if (pf != null) { + pf.setName((String)result.getValue()); + if(!pf.save()) { + Calendar cal = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String dt = sdf.format(cal.getTime()); + pf.setName(pf.getName() + "_" + dt); + pf.saveEx(); + } + resetPrintFormatTrl(pf); + fillComboReport(pf.get_ID()); + } + else + return; +// Get Language from previous - thanks Gunther Hoppe + if (m_reportEngine.getPrintFormat() != null) + { + setLanguage(); + pf.setLanguage(m_reportEngine.getPrintFormat().getLanguage()); // needs to be re-set - otherwise viewer will be blank + pf.setTranslationLanguage(m_reportEngine.getPrintFormat().getLanguage()); + } + + m_reportEngine.setPrintFormat(pf); + m_reportEngine.initName(); + postRenderReportEvent(); + } + else { + comboReport.setSelectedItem(previousSelected); + } + } + }); + } else if (AD_PrintFormat_ID == -2) { + WEditor editor = new WStringEditor(); + ZKUpdateUtil.setWidth((HtmlBasedComponent)editor.getComponent(), "90%"); + FDialog.askForInputWithCancel(m_WindowNo, editor, "CreatePrintFormatCopy", Msg.getMsg(m_ctx, "CreatePrintFormatCopyTitle"), new Callback>() { + public void onCallback(Map.Entry result) { + if((result == null) || (!(result.getValue() instanceof String)) || (!result.getKey())) { + comboReport.setSelectedItem(previousSelected); + return; + } + MPrintFormat pf = null; + if (!Util.isEmpty((String)result.getValue())) { + MPrintFormat current = m_reportEngine.getPrintFormat(); + if (current != null) { + pf = MPrintFormat.copyToClient(m_ctx, + current.getAD_PrintFormat_ID(), + Env.getAD_Client_ID(m_ctx)); + + if (pf != null) { + pf.setName((String)result.getValue()); + if(!pf.save()) { + Calendar cal = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String dt = sdf.format(cal.getTime()); + pf.setName(pf.getName() + "_" + dt); + pf.saveEx(); + } + resetPrintFormatTrl(pf); + fillComboReport(pf.get_ID()); + } + else + return; + } else + return; +// Get Language from previous - thanks Gunther Hoppe + if (m_reportEngine.getPrintFormat() != null) + { + setLanguage(); + pf.setLanguage(m_reportEngine.getPrintFormat().getLanguage()); // needs to be re-set - otherwise viewer will be blank + pf.setTranslationLanguage(m_reportEngine.getPrintFormat().getLanguage()); + } + m_reportEngine.initName(); + m_reportEngine.setPrintFormat(pf); + postRenderReportEvent(); + } + else { + comboReport.setSelectedItem(previousSelected); + } + } + }); } - else + else { +// Get Language from previous - thanks Gunther Hoppe pf = MPrintFormat.get (Env.getCtx(), AD_PrintFormat_ID, true); - - // Get Language from previous - thanks Gunther Hoppe - if (m_reportEngine.getPrintFormat() != null) - { - setLanguage(); - pf.setLanguage(m_reportEngine.getPrintFormat().getLanguage()); // needs to be re-set - otherwise viewer will be blank - pf.setTranslationLanguage(m_reportEngine.getPrintFormat().getLanguage()); + if (m_reportEngine.getPrintFormat() != null) + { + setLanguage(); + pf.setLanguage(m_reportEngine.getPrintFormat().getLanguage()); // needs to be re-set - otherwise viewer will be blank + pf.setTranslationLanguage(m_reportEngine.getPrintFormat().getLanguage()); + } + m_reportEngine.setPrintFormat(pf); + postRenderReportEvent(); } - m_reportEngine.setPrintFormat(pf); - - postRenderReportEvent(); } // cmd_report /**