IDEMPIERE-1338:Create a record from Info window

This commit is contained in:
hieplq 2015-08-04 04:22:52 +08:00
parent 41efd70ce9
commit 8159e67f60
3 changed files with 57 additions and 4 deletions

View File

@ -446,7 +446,7 @@ public class WQuickEntry extends Window implements EventListener<Event>, ValueCh
public int getRecord_ID()
{
if (quickPOs.get(0) == null)
if (quickPOs.isEmpty() || quickPOs.get(0) == null)
return 0;
return quickPOs.get(0).get_ID();

View File

@ -43,8 +43,10 @@ import org.adempiere.webui.editor.WEditor;
import org.adempiere.webui.editor.WSearchEditor;
import org.adempiere.webui.editor.WTableDirEditor;
import org.adempiere.webui.editor.WebEditorFactory;
import org.adempiere.webui.event.DialogEvents;
import org.adempiere.webui.event.ValueChangeEvent;
import org.adempiere.webui.event.ValueChangeListener;
import org.adempiere.webui.grid.WQuickEntry;
import org.adempiere.webui.panel.InfoPanel;
import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.theme.ThemeManager;
@ -71,12 +73,14 @@ import org.compiere.util.KeyNamePair;
import org.compiere.util.Msg;
import org.compiere.util.Util;
import org.compiere.util.ValueNamePair;
import org.zkoss.zk.au.out.AuEcho;
import org.zkoss.zk.ui.Component;
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.event.SwipeEvent;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Center;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Comboitem;
@ -2005,5 +2009,41 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
return true;
}
@Override
protected boolean hasNew() {
return getADWindowID () > 0;
}
/**
* Get id of window link with main table of this info window
* @param tableName
* @return
*/
protected int getADWindowID() {
String isSOTrx = Env.getContext(Env.getCtx(), p_WindowNo, "IsSOTrx");
if (!isLookup() && Util.isEmpty(isSOTrx)) {
isSOTrx = "Y";
}
return super.getAD_Window_ID(MTable.getTableName(Env.getCtx(), infoWindow.getAD_Table_ID()), isSOTrx.equalsIgnoreCase("Y"));
}
@Override
protected void newRecordAction() {
final WQuickEntry vqe = new WQuickEntry (0, getADWindowID());
vqe.loadRecord (0);
vqe.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener<Event>() {
@Override
public void onEvent(Event event) throws Exception {
Clients.response(new AuEcho(InfoWindow.this, "onQueryCallback", null));
}
});
vqe.setVisible(true);
AEnv.showWindow(vqe);
}
}

View File

@ -123,10 +123,8 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
protected final static String ON_RUN_PROCESS = "onRunProcess";
// attribute key of info process
protected final static String ATT_INFO_PROCESS_KEY = "INFO_PROCESS";
protected int pageSize;
protected MInfoRelated[] relatedInfoList;
public static InfoPanel create (int WindowNo,
String tableName, String keyColumn, String value,
boolean multiSelection, String whereClause)
@ -246,6 +244,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
}
confirmPanel = new ConfirmPanel(true, true, true, true, true, true); // Elaine 2008/12/16
confirmPanel.addComponentsLeft(confirmPanel.createButton(ConfirmPanel.A_NEW));
confirmPanel.addActionListener(Events.ON_CLICK, this);
confirmPanel.setHflex("1");
@ -253,6 +252,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
confirmPanel.getButton(ConfirmPanel.A_CUSTOMIZE).setVisible(hasCustomize());
confirmPanel.getButton(ConfirmPanel.A_HISTORY).setVisible(hasHistory());
confirmPanel.getButton(ConfirmPanel.A_ZOOM).setVisible(hasZoom());
confirmPanel.getButton(ConfirmPanel.A_NEW).setVisible(hasNew());
//
if (!isLookup())
{
@ -1189,7 +1189,6 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
confirmPanel.getButton(ConfirmPanel.A_ZOOM).setEnabled(!enable?enable : (contentPanel.getSelectedCount() == 1) ); //red1 only zoom for single record
if (hasProcess())
confirmPanel.getButton(ConfirmPanel.A_PROCESS).setEnabled(enable);
// IDEMPIERE-1334 start
for (Button btProcess : btProcessList){
btProcess.setEnabled(enable);
@ -1262,6 +1261,12 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
* @return true if it has zoom (default false)
*/
protected boolean hasZoom() {return false;}
/**
* Has new function for create new record (false)
* To be overwritten by concrete classes
* @return
*/
protected boolean hasNew() {return false;}
/**
* Save Selection Details
* To be overwritten by concrete classes
@ -1378,6 +1383,9 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
if (isLookup())
this.detach();
}
}else if (event.getTarget().equals(confirmPanel.getButton(ConfirmPanel.A_NEW)))
{
newRecordAction ();
}
// IDEMPIERE-1334 handle event click into process button start
else if (ON_RUN_PROCESS.equals(event.getName())){
@ -1706,6 +1714,11 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
}
}
/**
* process action when user click to new button
*/
protected void newRecordAction (){}
public void addValueChangeListener(ValueChangeListener listener)
{
if (listener == null)