Relacion oneToMany en combo

chuchip
2013-06-12
2013-06-24
  • chuchip

    chuchip - 2013-06-12

    Buenos dias,

    Quiero crear una consulta donde se busque un cliente, una vez mostrado el detalle de ese cliente, donde se mostraria el nombre, direccion, población, etc., me gustaria que se mostrara en un combo una relacion de los albaranes de venta, que tiene. Tambien me gustaria que apareciera la fecha del albaran. A continuacion, deberia aparecer el detalle de ese ese albaran, es decir, la relacion de los productos. Cuando se cambie el combo con la relacion de los albaranes, se deberia actualizar el detalle del albaran (una relacion @manytoone?).

    Por mas vueltas que le doy no encuentro la manera de plasmar eso.
    Los albaranes estan en una dos tablas, una con la cabecera (donde aparece el codigo del cliente) y otra con las lineas del producto. La clave de los albarenes es multiple (ejercicio, serie y numero de albaran).

    Alguna idea de como se podria plasmar eso?.

    Gracias por adelantado.

     
  • Javier Paniza

    Javier Paniza - 2013-06-14

    Hola Chuchip,

    simplemente declarando en Cliente una colección de alabaranes ya consigues esa funcionalidad, lo único es que en vez de un combo tienes una lista de albaranes, pero al fin y al cabo el usuario puede hacer lo mismo.

    Si de todas formas quieres un combo usa un editor personalizado y un esterotipo para crear un combo. Añadele una acción @OnChange para visualizar un diálogo con los datos del albaran.


    Ayuda a otros en este foro como yo te ayudo a ti.
    ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava

     
  • chuchip

    chuchip - 2013-06-21

    Buenos dias de nuevo,

    Estoy intentando hacer un combo personalizable a traves de un estereotipo como aparece en la documentacion de la wiki: http://openxava.wikispaces.com/customizing_en#Chapter%209:%20Customizing-Editors-Custom%20editors%20and%20stereotypes%20for%20displaying%20combos

    El caso es que por muchas vueltas que le doy (y ya llevo unas 5.000 ;)) No consigo que me funcione.
    La idea, como puse en el correo original, es presentar una consulta de clientes, y que en el detalle aparezca un combo con la lista de albaranes que tiene.
    Despues, al cambiar los valores del Combo, a traves del evento ONCHANGE, quisiera que se mostrara un descriptionList, con las lineas de los albaranes.
    Pero eso ya sera en la versión 2.0...
    De momento he creado una clase para los clientes de esta manera:


    public class Clientes {

    @Id @Column(length=5,name="cli_codi")  // La longitud de columna se usa a nivel UI y a nivel DB
    private int codigoCliente;
    @Column(length=40, name="cli_nomb")  
    private String nombre;
    @Transient
    @Stereotype("ALBARANVENTA")
    private String albaran;
    (SETERS & GETTERS)
    

    Y una clase con los Albaranes de esta manera:


    @Table(name="v_albavec")
    @Entity
    @IdClass(AlbaranVentaKey.class)
    public class AlbaranVenta {
    @Id @Column(name="emp_codi") private int empCodi;
    @Id @Column(name="avc_nume") private int avcNume;
    @Id @Column(name="avc_serie") private String avcSerie;
    @Id @Column(name="avc_ano") private int avcAno;
    @Stereotype("DATE") @Column(name="avc_fecalb") private Date fecha;
    @ManyToOne @DescriptionsList
    @JoinColumn(name="cli_codi")
    private Clientes codigoCliente;

    (SETERS & GETTERS)
    

    }


    En el fichero xava/editors.xml he puesto las siguientes lineas:


    <editor url="descriptionsEditor.jsp">
        <property  name="model" value="AlbaranVenta"/>
        <property  name="keyProperty" value="codigoCliente"/>  
        <property  name="descriptionProperty" value="claveAlbaran"/> 
        <property name="orderByKey" value="true"/>
        <property name="condition" value="${codigoCliente} = ? "/>
        <property name="parameterValuesProperties" value="clientes.codigoCliente" />
        <for-stereotype  stereotype="ALBARANVENTA"/> 
    </editor>
    

    El caso es que en primer lugar he visto que si la variable albaran la defino como algo que no sea int o String,el Stereotype ni es aplicado, o al menos no es invocada la clase albaranVenta (he utilizado debug).
    Despues de hacer diversas combinaciones, he conseguido que se invoque y que ponga la condicion where a la select pero me da el siguiente error.

    org.openxava.tab.impl.JPATabProvider nextChunk
    SEVERE: Fallo al ejecutar SELECT e.avcAno, e.avcNume, e.avcSerie, e.empCodi, e.codigoCliente, 0, e.codigoCliente from AlbaranVenta e WHERE e.codigoCliente = :p0
    java.lang.IllegalArgumentException: Parameter value [26832] did not match expected type [org.openxava.AnjelicaWeb.model.Clientes]
    at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:365)
    at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:338)

    ¿Alguien podria arrojar un poco de luz sobre este asunto?. La verdad es que no se ya que mas puedo hacer.

    Saludos y gracias por adelantado.

    Jesús Javier Puente

     
  • Javier Paniza

    Javier Paniza - 2013-06-24

    Hola Jesús,

    Parameter value [26832] did not match expected type Clientes

    Creo que en la definición del editor deberías haber puesto:

    <property name="condition" value="${codigoCliente.codigoCliente} = ? "/>
    

    Porque codigoCliente en AlbaranVenta es de tipo Clientes.

    Los nombres hubieran quedado mejor así:

    class Cliente { // En singular, porque cada instancia representa un cliente
        int codigo // No es bueno usar el nombre de la clase en los miembros, por eso del polimorfismo
    }
    

    Y en el albarán:

    class AlbaranVenta {
    
         Cliente cliente; // No codigoCliente porque no es un código es un cliente
    
    }
    

    De esta forma podrías haber puesto la condición así:

    <property name="condition" value="${cliente.codigo} = ? "/>
    

    Ayuda a otros en este foro como yo te ayudo a ti.
    ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava

     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks