From c979d175501b51c9951827940ad118bc3194b2e8 Mon Sep 17 00:00:00 2001 From: nmicoud Date: Sat, 14 Dec 2019 14:07:54 +0100 Subject: [PATCH] IDEMPIERE-4215 : Accounting Fact Reconcilation form : add a Select/DeselectAll and ZoomToDocument buttons --- .../webui/apps/form/WFactReconcile.java | 84 +++++++++++++++++-- 1 file changed, 78 insertions(+), 6 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java index 796f9c6e7f..2257011c6f 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java @@ -23,6 +23,7 @@ import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Textbox; +import org.adempiere.webui.component.ToolBarButton; import org.adempiere.webui.component.WListbox; import org.adempiere.webui.editor.WDateEditor; import org.adempiere.webui.editor.WSearchEditor; @@ -35,10 +36,12 @@ import org.adempiere.webui.panel.ADForm; import org.adempiere.webui.panel.CustomForm; import org.adempiere.webui.panel.IFormController; import org.adempiere.webui.session.SessionManager; +import org.adempiere.webui.theme.ThemeManager; import org.adempiere.webui.util.ZKUpdateUtil; import org.compiere.apps.form.FactReconcile; import org.compiere.model.MClient; import org.compiere.model.MColumn; +import org.compiere.model.MFactAcct; import org.compiere.model.MLookup; import org.compiere.model.MLookupFactory; import org.compiere.model.X_C_ElementValue; @@ -47,8 +50,10 @@ import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.KeyNamePair; import org.compiere.util.Msg; +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; import org.zkoss.zul.Borderlayout; import org.zkoss.zul.Center; import org.zkoss.zul.North; @@ -112,6 +117,7 @@ implements IFormController, EventListener, WTableModelListener, ValueChan private Button bGenerate = cp.createButton(ConfirmPanel.A_PROCESS); private Button bReset = cp.createButton(ConfirmPanel.A_RESET); private Button bZoom = cp.createButton(ConfirmPanel.A_ZOOM); + private Button bZoomDoc = cp.createButton(ConfirmPanel.A_ZOOM); private Grid commandLayout = GridFactory.newGridLayout(); private Button bRefresh = cp.createButton(ConfirmPanel.A_REFRESH); private Label labelDateAcct = new Label(); @@ -124,6 +130,9 @@ implements IFormController, EventListener, WTableModelListener, ValueChan private boolean loading = false; private Label differenceLabel = new Label(); private Textbox differenceField = new Textbox(); + + private ToolBarButton bSelect = new ToolBarButton("SelectAll"); + private boolean checkAllSelected = true; /** * Static Init @@ -137,12 +146,19 @@ implements IFormController, EventListener, WTableModelListener, ValueChan bRefresh.addActionListener(this); bReset.addActionListener(this); bZoom.addActionListener(this); + bZoomDoc.addActionListener(this); bGenerate.setEnabled(false); bReset.setEnabled(false); //bRefresh.setText(Msg.getMsg(Env.getCtx(), "Query")); bGenerate.setLabel(Msg.getMsg(Env.getCtx(),"Process")); bReset.setLabel(Msg.getMsg(Env.getCtx(),"Reset")); bZoom.setLabel(Msg.translate(Env.getCtx(), "Fact_Acct_ID")); + bZoomDoc.setId(bZoomDoc.getId() + "Doc"); // to avoid 'org.zkoss.zk.ui.UiException: Not unique in the ID space of : Zoom' + bZoomDoc.setLabel(Msg.translate(Env.getCtx(), "ZoomDocument")); + bSelect.setMode("toggle"); + bSelect.setImage(ThemeManager.getThemeResource("images/SelectAll24.png")); + bSelect.setTooltiptext(Msg.getCleanMsg(Env.getCtx(), "SelectAll")); + bSelect.addEventListener(Events.ON_CLICK, this); // labelAcctSchema.setText(Msg.translate(Env.getCtx(), "C_AcctSchema_ID")); @@ -234,9 +250,13 @@ implements IFormController, EventListener, WTableModelListener, ValueChan ZKUpdateUtil.setWidth(commandLayout, "100%"); rows = commandLayout.newRows(); row = rows.newRow(); + row.appendCellChild(bSelect, 1); row.appendCellChild(bZoom, 1); ZKUpdateUtil.setHflex(bZoom, "true"); ZKUpdateUtil.setWidth(bZoom, "100%"); + row.appendCellChild(bZoomDoc, 1); + ZKUpdateUtil.setHflex(bZoomDoc, "true"); + ZKUpdateUtil.setWidth(bZoomDoc, "100%"); row.appendCellChild(differenceLabel.rightAlign()); ZKUpdateUtil.setHflex(differenceLabel, "true"); row.appendCellChild(differenceField, 2); @@ -251,6 +271,8 @@ implements IFormController, EventListener, WTableModelListener, ValueChan { bZoom.setTooltiptext(bZoom.getLabel()); bZoom.setLabel(null); + bZoomDoc.setTooltiptext(bZoomDoc.getLabel()); + bZoomDoc.setLabel(null); bGenerate.setTooltiptext(bGenerate.getLabel()); bGenerate.setLabel(null); bReset.setTooltiptext(bReset.getLabel()); @@ -310,11 +332,14 @@ implements IFormController, EventListener, WTableModelListener, ValueChan + "AND EXISTS (SELECT 1 FROM C_AcctSchema_Element ase " + "WHERE ase.C_Element_ID=C_ElementValue.C_Element_ID AND ase.ElementType='AC' " + "AND ase.C_AcctSchema_ID=@C_AcctSchema_ID@ AND ase.AD_Client_ID=@AD_Client_ID@) "); - fieldAccount = new WTableDirEditor("C_ElementValue_ID", false, false, true, lookupAccount); + fieldAccount = new WTableDirEditor("C_ElementValue_ID", true, false, true, lookupAccount); } public void loadData(){ + if(fieldAccount.isNullOrEmpty()) + throw new WrongValueException(fieldAccount.getComponent(), Msg.getMsg(Env.getCtx(), "FillMandatory")); + if(fieldAcctSchema.getValue()!=null) m_C_AcctSchema_ID = (Integer)fieldAcctSchema.getValue(); else @@ -419,6 +444,27 @@ implements IFormController, EventListener, WTableModelListener, ValueChan public void tableChanged(WTableModelEvent event) { if (! loading ) calculateSelection(); + + if (event.getModel() == miniTable.getModel()) { + + int row = event.getFirstRow(); + int col = event.getColumn(); + + if (row < 0) + return; + + if (checkAllSelected && col == selectedColIndex) { + ListModelTable model = miniTable.getModel(); + boolean rowUnSelected = false; + for (int i = 0; i < model.getRowCount(); i++) { + if ( ! (Boolean) model.getValueAt(i, selectedColIndex) ) { + rowUnSelected = true; + break; + } + } + bSelect.setPressed(! rowUnSelected); + } + } } @Override @@ -431,14 +477,19 @@ implements IFormController, EventListener, WTableModelListener, ValueChan resetReconciliation(); else if (event.getTarget().equals(bZoom)) - zoom(); - + zoom(MFactAcct.Table_ID); + else if (event.getTarget().equals(bZoomDoc)) + zoom(-1); + else if (event.getTarget().equals(bCancel)) SessionManager.getAppDesktop().closeActiveWindow(); else if (event.getTarget().equals(bRefresh)) loadData(); + else if (event.getTarget().equals(bSelect)) + onbSelect(); + } private void generateReconciliation() { @@ -474,6 +525,8 @@ implements IFormController, EventListener, WTableModelListener, ValueChan ((ListModelTable) miniTable.getModel()).remove(r--); } } + + bSelect.setPressed(false); } /** @@ -481,7 +534,7 @@ implements IFormController, EventListener, WTableModelListener, ValueChan * @param AD_Window_ID window id * @param zoomQuery zoom query */ - protected void zoom () + protected void zoom (int tableID) { log.info(""); @@ -493,8 +546,13 @@ implements IFormController, EventListener, WTableModelListener, ValueChan KeyNamePair pp = (KeyNamePair)miniTable.getModel().getValueAt(selected, idColIndex); int factId = pp.getKey(); - - AEnv.zoom(270, factId); + + if (tableID == MFactAcct.Table_ID) + AEnv.zoom(tableID, factId); + else { + MFactAcct fa = new MFactAcct(Env.getCtx(), factId, null); + AEnv.zoom(fa.getAD_Table_ID(), fa.getRecord_ID()); + } } // zoom private void resetReconciliation() { @@ -522,6 +580,8 @@ implements IFormController, EventListener, WTableModelListener, ValueChan ((ListModelTable) miniTable.getModel()).remove(r--); } } + + bSelect.setPressed(false); } @Override @@ -529,5 +589,17 @@ implements IFormController, EventListener, WTableModelListener, ValueChan return form; } + void onbSelect() { + ListModelTable model = miniTable.getModel(); + int rows = model.getSize(); + Boolean selectAll = bSelect.isPressed() ? Boolean.FALSE : Boolean.TRUE; + bSelect.setPressed(! bSelect.isPressed()); + checkAllSelected = false; + for (int i = 0; i < rows; i++) + model.setValueAt(selectAll, i, selectedColIndex); + checkAllSelected = true; + miniTable.setModel(model); + calculateSelection(); + } }