From 33b8b505d7dcaa366ed5a1bf47f3efb684ffaf2f Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 19 Dec 2018 20:00:20 +0100 Subject: [PATCH] IDEMPIERE-3852 Export zip button (pack out) has error for tabs beyond third level (FHCA-815) --- .../handler/GenericPOElementHandler.java | 41 +++++++++++++------ .../adempiere/pipo2/GridTab2PackExporter.java | 6 ++- .../webui/panel/action/ExportAction.java | 21 ++++++++++ 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java index e1a6913c85..c4b9e40f86 100644 --- a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java @@ -20,6 +20,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.List; import java.util.logging.Level; @@ -195,7 +196,7 @@ public class GenericPOElementHandler extends AbstractElementHandler { for (int i = 1; i < components.length; i++) { String tables[] = components[i].split("[>]"); - exportDetail(ctx, document, po, 0, tables); + exportDetail(ctx, document, po, tables); } if (createElement) { @@ -209,19 +210,19 @@ public class GenericPOElementHandler extends AbstractElementHandler { } } - private void exportDetail(PIPOContext ctx, TransformerHandler document, GenericPO parent, int index, String[] tables) { + private void exportDetail(PIPOContext ctx, TransformerHandler document, GenericPO parent, String[] tables) { + String mainTable = tables[0]; AttributesImpl atts = new AttributesImpl(); - tables[index] = tables[index].trim(); - String sql = "SELECT * FROM " + tables[index] + " WHERE " + parent.get_TableName() + "_ID = ?"; + String sql = "SELECT * FROM " + mainTable + " WHERE " + parent.get_TableName() + "_ID = ?"; PreparedStatement pstmt = null; ResultSet rs = null; try { - sql = MRole.getDefault().addAccessSQL(sql, tables[index], true, true); + sql = MRole.getDefault().addAccessSQL(sql, mainTable, true, true); pstmt = DB.prepareStatement(sql, null); pstmt.setInt(1, parent.get_ID()); rs = pstmt.executeQuery(); while (rs.next()) { - GenericPO po = new GenericPO(tables[index], ctx.ctx, rs, getTrxName(ctx)); + GenericPO po = new GenericPO(mainTable, ctx.ctx, rs, getTrxName(ctx)); int AD_Client_ID = po.getAD_Client_ID(); if (AD_Client_ID != Env.getAD_Client_ID(ctx.ctx)) continue; @@ -237,12 +238,12 @@ public class GenericPOElementHandler extends AbstractElementHandler { } if (createElement) { verifyPackOutRequirement(po); - List excludes = defaultExcludeList(tables[index]); + List excludes = defaultExcludeList(mainTable); addTypeName(atts, "table"); - document.startElement("", "", tables[index], atts); + document.startElement("", "", mainTable, atts); PoExporter filler = new PoExporter(ctx, document, po); filler.export(excludes, true); - ctx.packOut.getCtx().ctx.put("Table_Name",tables[index]); + ctx.packOut.getCtx().ctx.put("Table_Name",mainTable); try { new CommonTranslationHandler().packOut(ctx.packOut,document,null,po.get_ID()); } catch(Exception e) { @@ -250,11 +251,27 @@ public class GenericPOElementHandler extends AbstractElementHandler { } } } - for (int i=index+1; i detTablesArr = new ArrayList(); + for (int j=i; j gridTab.getTabLevel()+1) { - sql = sql.append(">").append(child.getTableName()); + int level = child.getTabLevel() - gridTab.getTabLevel() - 1; + String sep = ">"; + for (int i = 1; i < level; i++) + sep += "+"; + sql = sql.append(sep).append(child.getTableName()); } else { sql = sql.append(";").append(child.getTableName()); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/action/ExportAction.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/action/ExportAction.java index 0435823bfc..c6946c4588 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/action/ExportAction.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/action/ExportAction.java @@ -216,6 +216,7 @@ public class ExportAction implements EventListener chkSelectionTab.setAttribute("tabBinding", child); vlayout.appendChild(chkSelectionTab); chkSelectionTabForExport.add(chkSelectionTab); + chkSelectionTab.addEventListener(Events.ON_CHECK, this); isHasSelectionTab = true; } @@ -235,6 +236,26 @@ public class ExportAction implements EventListener panel.hideBusyMask(); }else if (event.getTarget().equals(cboType) && event.getName().equals(Events.ON_SELECT)) { displayExportTabSelection(); + }else if (event.getTarget() instanceof Checkbox) { + // A child is not exportable without its parent + Checkbox cbSel = (Checkbox) event.getTarget(); + GridTab gtSel = (GridTab)cbSel.getAttribute("tabBinding"); + boolean found = false; + for (Checkbox cb : chkSelectionTabForExport) { + if (cb == cbSel) { + found = true; + continue; + } + GridTab gt = (GridTab)cb.getAttribute("tabBinding"); + if (found) { + if (gt.getTabLevel() > gtSel.getTabLevel()) { + cb.setChecked(cbSel.isChecked()); + cb.setEnabled(cbSel.isChecked()); + } else { + break; + } + } + } }else if (event.getName().equals("onExporterException")){ FDialog.error(0, winExportFile, "FileInvalidExtension"); winExportFile.onClose();