From cee14ac94d07d7207683d34df86d597eda179e89 Mon Sep 17 00:00:00 2001 From: yamelsenih Date: Tue, 19 Dec 2023 12:47:14 -0400 Subject: [PATCH] Add changes to structure --- .../eca56/util/support/documents/Process.java | 82 +++++++++++++++---- .../util/support/documents/ReferenceUtil.java | 81 ++++++++++++++++++ 2 files changed, 148 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/spin/eca56/util/support/documents/ReferenceUtil.java diff --git a/src/main/java/org/spin/eca56/util/support/documents/Process.java b/src/main/java/org/spin/eca56/util/support/documents/Process.java index 950f69e..0c07750 100644 --- a/src/main/java/org/spin/eca56/util/support/documents/Process.java +++ b/src/main/java/org/spin/eca56/util/support/documents/Process.java @@ -21,20 +21,34 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import org.adempiere.core.domains.models.I_AD_Browse; import org.adempiere.core.domains.models.I_AD_Form; +import org.adempiere.core.domains.models.I_AD_Image; import org.adempiere.core.domains.models.I_AD_Process; import org.adempiere.core.domains.models.I_AD_Process_Para; -import org.adempiere.core.domains.models.I_AD_Reference; import org.adempiere.core.domains.models.I_AD_Workflow; +import org.adempiere.core.domains.models.I_C_Location; +import org.adempiere.core.domains.models.I_M_AttributeSetInstance; +import org.adempiere.core.domains.models.X_AD_Reference; import org.adempiere.model.MBrowse; import org.compiere.model.MForm; +import org.compiere.model.MLookupFactory; +import org.compiere.model.MLookupInfo; import org.compiere.model.MProcess; import org.compiere.model.MProcessPara; +import org.compiere.model.MReportView; +import org.compiere.model.MValRule; import org.compiere.model.PO; +import org.compiere.util.DisplayType; +import org.compiere.util.Env; +import org.compiere.util.Language; +import org.compiere.util.Util; import org.compiere.wf.MWorkflow; import org.spin.eca56.util.support.DictionaryDocument; +import org.spin.util.AbstractExportFormat; +import org.spin.util.ReportExportHandler; /** * the document class for Process senders @@ -61,19 +75,27 @@ public DictionaryDocument withEntity(PO entity) { documentDetail.put("name", process.get_Translation(I_AD_Process.COLUMNNAME_Name, getLanguage())); documentDetail.put("description", process.get_Translation(I_AD_Process.COLUMNNAME_Description, getLanguage())); documentDetail.put("help", process.get_Translation(I_AD_Process.COLUMNNAME_Help, getLanguage())); - documentDetail.put("entity_type", process.getEntityType()); - documentDetail.put("access_level", process.getAccessLevel()); - documentDetail.put("class_name", process.getClassname()); documentDetail.put("is_report", process.isReport()); documentDetail.put("is_active", process.isActive()); documentDetail.put("show_help", process.getShowHelp()); - documentDetail.put("jasper_report", process.getJasperReport()); - documentDetail.put("procedure_name", process.getProcedureName()); documentDetail.put("workflow_id", process.getAD_Workflow_ID()); documentDetail.put("form_id", process.getAD_Form_ID()); documentDetail.put("browser_id", process.getAD_Browse_ID()); documentDetail.put("report_view_id", process.getAD_ReportView_ID()); documentDetail.put("print_format_id", process.getAD_PrintFormat_ID()); + if(process.isReport()) { + MReportView reportView = null; + if(process.getAD_ReportView_ID() > 0) { + reportView = MReportView.get(entity.getCtx(), process.getAD_ReportView_ID()); + } + ReportExportHandler exportHandler = new ReportExportHandler(entity.getCtx(), reportView); + Map reportExportReference = new HashMap<>(); + for(AbstractExportFormat reportType : exportHandler.getExportFormatList()) { + reportExportReference.put("name", reportType.getName()); + reportExportReference.put("type", reportType.getExtension()); + } + documentDetail.put("report_export_types", reportExportReference); + } if(process.getAD_Form_ID() > 0) { MForm form = new MForm(process.getCtx(), process.getAD_Form_ID(), null); Map referenceDetail = new HashMap<>(); @@ -115,7 +137,6 @@ public DictionaryDocument withEntity(PO entity) { detail.put("name", parameter.get_Translation(I_AD_Process_Para.COLUMNNAME_Name, getLanguage())); detail.put("description", parameter.get_Translation(I_AD_Process_Para.COLUMNNAME_Description, getLanguage())); detail.put("help", parameter.get_Translation(I_AD_Process_Para.COLUMNNAME_Help, getLanguage())); - detail.put("entity_type", parameter.getEntityType()); detail.put("column_name", parameter.getColumnName()); detail.put("element_id", parameter.getAD_Element_ID()); detail.put("default_value", parameter.getDefaultValue()); @@ -124,23 +145,54 @@ public DictionaryDocument withEntity(PO entity) { detail.put("is_info_only", parameter.isInfoOnly()); detail.put("is_mandatory", parameter.isMandatory()); detail.put("display_logic", parameter.getDisplayLogic()); + detail.put("read_only_logic", parameter.getReadOnlyLogic()); detail.put("sequence", parameter.getSeqNo()); detail.put("value_format", parameter.getVFormat()); detail.put("min_value", parameter.getValueMin()); detail.put("max_value", parameter.getValueMax()); detail.put("reference_id", parameter.getAD_Reference_ID()); - if(parameter.getAD_Reference_ID() > 0) { - PO reference = (PO) parameter.getAD_Reference(); + detail.put("reference_value_id", parameter.getAD_Reference_Value_ID()); + detail.put("validation_id", parameter.getAD_Val_Rule_ID()); + String embeddedContextColumn = null; + if(parameter.getAD_Reference_ID() > 0 && ReferenceUtil.isLookupReference(parameter.getAD_Reference_ID())) { + X_AD_Reference reference = (X_AD_Reference) parameter.getAD_Reference(); Map referenceDetail = new HashMap<>(); referenceDetail.put("id", reference.get_ID()); - referenceDetail.put("uuid", reference.get_UUID()); - referenceDetail.put("name", reference.get_Translation(I_AD_Reference.COLUMNNAME_Name, getLanguage())); - referenceDetail.put("description", reference.get_Translation(I_AD_Reference.COLUMNNAME_Description, getLanguage())); - referenceDetail.put("help", reference.get_Translation(I_AD_Reference.COLUMNNAME_Help, getLanguage())); + MLookupInfo lookupInformation = null; + String tableName = null; + // Special references + if(DisplayType.TableDir == parameter.getAD_Reference_ID()) { + tableName = parameter.getColumnName().replaceAll("_ID", ""); + } else if (DisplayType.Location == parameter.getAD_Reference_ID()) { + tableName = I_C_Location.COLUMNNAME_C_Location_ID.replaceAll("_ID", ""); + } else if (DisplayType.PAttribute == parameter.getAD_Reference_ID()) { + tableName = I_M_AttributeSetInstance.COLUMNNAME_M_AttributeSetInstance_ID.replaceAll("_ID", ""); + } else if(DisplayType.Image == parameter.getAD_Reference_ID()) { + tableName = I_AD_Image.COLUMNNAME_AD_Image_ID.replaceAll("_ID", ""); + } + if(Util.isEmpty(tableName)) { + lookupInformation = MLookupFactory.getLookupInfo(process.getCtx(), 0, 0, parameter.getAD_Reference_ID(), Language.getLanguage(Env.getAD_Language(Env.getCtx())), parameter.getColumnName(), parameter.getAD_Reference_Value_ID(), false, null, false); + if(lookupInformation != null) { + String validationRuleValue = null; + if(parameter.getAD_Val_Rule_ID() > 0) { + MValRule validationRule = MValRule.get(process.getCtx(), parameter.getAD_Val_Rule_ID()); + validationRuleValue = validationRule.getCode(); + } + tableName = lookupInformation.TableName; + embeddedContextColumn = Optional.ofNullable(lookupInformation.Query).orElse("") + + Optional.ofNullable(lookupInformation.QueryDirect).orElse("") + + Optional.ofNullable(lookupInformation.ValidationCode).orElse("") + + Optional.ofNullable(validationRuleValue).orElse(""); + } + } + referenceDetail.put("table_name", tableName); detail.put("display_type", referenceDetail); } - detail.put("reference_value_id", parameter.getAD_Reference_Value_ID()); - detail.put("validation_id", parameter.getAD_Val_Rule_ID()); + detail.put("context_column_names", ReferenceUtil.getContextColumnNames(Optional.ofNullable(parameter.getDefaultValue()).orElse("") + + Optional.ofNullable(parameter.getDefaultValue2()).orElse("") + + Optional.ofNullable(parameter.getDisplayLogic()).orElse("") + + Optional.ofNullable(parameter.getReadOnlyLogic()).orElse("") + + Optional.ofNullable(embeddedContextColumn).orElse(""))); parametersDetail.add(detail); }); } diff --git a/src/main/java/org/spin/eca56/util/support/documents/ReferenceUtil.java b/src/main/java/org/spin/eca56/util/support/documents/ReferenceUtil.java new file mode 100644 index 0000000..6bc0748 --- /dev/null +++ b/src/main/java/org/spin/eca56/util/support/documents/ReferenceUtil.java @@ -0,0 +1,81 @@ +/****************************************************************************** + * Product: Adempiere ERP & CRM Smart Business Solution * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 or later 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. * + * For the text or an alternative of this public license, you may reach us * + * Copyright (C) 2003-2023 E.R.P. Consultores y Asociados, C.A. * + * All Rights Reserved. * + * Contributor(s): Yamel Senih www.erpya.com * + *****************************************************************************/ +package org.spin.eca56.util.support.documents; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.compiere.util.DisplayType; +import org.compiere.util.Util; + +/** + * the document class for Process senders + * @author Yamel Senih, ysenih@erpya.com, ERPCyA http://www.erpya.com + */ +public class ReferenceUtil { + + /** + * Validate reference + * TODO: Improve support to ID reference to get display column + * TODO: Add support to Resource Assigment reference to get display column + * @param referenceId + * @param referenceValueId + * @param columnName + * @return + */ + public static boolean isLookupReference(int referenceId) { + if (DisplayType.isLookup(referenceId) || DisplayType.Account == referenceId + || DisplayType.ID == referenceId + || DisplayType.Location == referenceId || DisplayType.PAttribute == referenceId + || DisplayType.Locator == referenceId + || DisplayType.Image == referenceId) { + return true; + } + + return false; + } + + /** + * Get Context column names from context + * @param context + * @return + * @return List + */ + public static List getContextColumnNames(String context) { + if (Util.isEmpty(context, true)) { + return new ArrayList(); + } + String START = "\\@"; // A literal "(" character in regex + String END = "\\@"; // A literal ")" character in regex + + // Captures the word(s) between the above two character(s) + String patternValue = START + "(#|$){0,1}(\\w+)" + END; + + Pattern pattern = Pattern.compile(patternValue); + Matcher matcher = pattern.matcher(context); + Map columnNamesMap = new HashMap(); + while(matcher.find()) { + columnNamesMap.put(matcher.group().replace("@", "").replace("@", ""), true); + } + return new ArrayList(columnNamesMap.keySet()); + } +}