• Este debate está vacío.
Viendo 1 entrada (de un total de 1)
  • Autor
    Entradas
  • #33137
    Saulo Gil
    Miembro

    Existen muchos reportes que tienen un cuadro de búsqueda de EC junto con un desplegable Reporte de con las opciones: Cliente, Proveedor, Ambos. A la fecha, este cuadro de búsqueda ignora el valor del desplegable, trayendo siempre clientes o siempre proveedores, de acuerdo a si se está tratando (o no) con una transacción de ventas. Para solucionar este problema de usabilidad creé el siguiente parche, el cual es compatible con las versiones web y desktop.

    Code:
    diff –git base/src/org/openXpertya/model/MReference.java base/src/org/openXpertya/model/MReference.java
    index b339459..823ee26 100644
    — base/src/org/openXpertya/model/MReference.java
    +++ base/src/org/openXpertya/model/MReference.java
    @@ -4,8 +4,10 @@ import java.sql.ResultSet;
    import java.util.Properties;

    import org.openXpertya.util.DB;
    +import org.openXpertya.util.Env;

    public class MReference extends X_AD_Reference {
    + private final static int REF_ACCOUNT_TYPE = 1000072;

    public MReference(Properties ctx, ResultSet rs, String trxName) {
    super(ctx, rs, trxName);
    @@ -24,5 +26,26 @@ public class MReference extends X_AD_Reference {
    {
    return DB.getSQLValueString(null, ” SELECT name FROM AD_Reference WHERE AD_Reference_ID = ? “, refID);
    }
    +
    + // Some (core) references might need to adjust values in the environment
    + public static void referenceChanged(Properties ctx, int WindowNo, int referenceID, Object value ){
    + if(referenceID==REF_ACCOUNT_TYPE)
    + onAccountTypeSelected(ctx, WindowNo, referenceID, value == null ? null : value.toString());
    + }
    +
    + private static void onAccountTypeSelected(Properties ctx, int WindowNo, int referenceID, String value){
    + if(value==null)
    + return;
    +
    + String newIsSOTrx = null;
    +
    + if(value.equals(“C”))
    + newIsSOTrx = “Y”;
    + else if(value.equals(“V”))
    + newIsSOTrx = “N”;
    +
    + if(newIsSOTrx!=null)
    + Env.setContext(ctx, WindowNo, “IsSOTrx”, newIsSOTrx);
    + }

    }
    diff –git client/Src/org/openXpertya/grid/ed/VLookup.java client/Src/org/openXpertya/grid/ed/VLookup.java
    index 77a9a6c..3866b8b 100644
    — client/Src/org/openXpertya/grid/ed/VLookup.java
    +++ client/Src/org/openXpertya/grid/ed/VLookup.java
    @@ -60,6 +60,7 @@ import org.openXpertya.model.MField;
    import org.openXpertya.model.MLookup;
    import org.openXpertya.model.MLookupFactory;
    import org.openXpertya.model.MQuery;
    +import org.openXpertya.model.MReference;
    import org.openXpertya.model.MRole;
    import org.openXpertya.model.MTab;
    import org.openXpertya.model.X_AD_Table;
    @@ -773,6 +774,11 @@ public class VLookup extends JComponent implements VEditor,ActionListener,FocusL
    actionCombo( null ); // data binding (calls setValue again)
    m_value = null;
    }
    + }else if(m_lookup instanceof MLookup){
    + // let MReference change environment variables if needed
    + MLookup ml = (MLookup) m_lookup;
    + MReference.referenceChanged(Env.getCtx(), m_lookup.getWindowNo()
    + , ml.getAD_Reference_Value_ID(), value);
    }

    m_settingValue = false;
    diff –git zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java
    index 62a3d2c..0e647dc 100644
    — zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java
    +++ zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java
    @@ -31,6 +31,8 @@ import org.adempiere.webui.event.ValueChangeEvent;
    import org.adempiere.webui.window.WFieldRecordInfo;
    import org.openXpertya.model.MField;
    import org.openXpertya.model.Lookup;
    +import org.openXpertya.model.MLookup;
    +import org.openXpertya.model.MReference;
    import org.openXpertya.model.MRole;
    import org.openXpertya.util.CLogger;
    import org.openXpertya.util.DisplayType;
    @@ -187,7 +189,14 @@ ContextMenuListener, IZoomableEditor
    if (value != null && (value instanceof Integer || value instanceof String))
    {

    – getComponent().setValue(value);
    + getComponent().setValue(value);
    +
    + if(lookup instanceof MLookup){
    + MLookup ml = (MLookup) lookup;
    + MReference.referenceChanged(Env.getCtx(), lookup.getWindowNo()
    + , ml.getAD_Reference_Value_ID(), value);
    + }
    +
    if (!getComponent().isSelected(value))
    {
    if (isReadWrite() && lookup != null)

    Aparentemente no sobran lugares donde meter estos hooks. Si alguien tiene una idea mejor, bienvenida sea.

    Saludos

Viendo 1 entrada (de un total de 1)
  • Debes estar registrado para responder a este debate.