xavier  
          
              
                June 19, 2019,  5:53pm
               
              #1 
           
         
        
          Hi forum’s friends,
Is there anyone who encountered problems defining atributes with enumeration data type in v. 7.0 ?  (I’m using Cuba Studio 2018.3 Build #CS  183.10.1)
1)I created the new attribute correctly, as show next images:
When I saved, the data type changes to integer, as you can see on the next image:
 
The code created contains a duplicated declaration that produces the error: “error: method getFCobramente() is already defined in class FacturaComi
 
 
Here it is the code before creating the attribute:
package com.company.logistica.entity;
import com.company.mestrelegacy.entity.Proveidor;
import com.haulmont.chile.core.annotations.MetaProperty;
import com.haulmont.chile.core.annotations.NamePattern;
import com.haulmont.cuba.core.entity.StandardEntity;
import com.haulmont.cuba.core.entity.annotation.OnDeleteInverse;
import com.haulmont.cuba.core.global.DeletePolicy;
import com.haulmont.cuba.core.global.PersistenceHelper;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@NamePattern("%s |numFac,dataFac")
@Table(name = "LOGIS_FACTURA_COMI")
@Entity(name = "logis$FacturaComi")
public class FacturaComi extends StandardEntity {
    private static final long serialVersionUID = -5303781616687963854L;
    @Column(name = "NUM_FAC", unique = true)
    protected Long numFac;
    @OrderBy("numFactura")
    @OnDeleteInverse(DeletePolicy.DENY)
    @OneToMany(mappedBy = "facComiId")
    protected List<FacturaProv> facturesProveidor;
    @NotNull
    @OnDeleteInverse(DeletePolicy.DENY)
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "PROVEIDOR_ID")
    protected Proveidor proveidor;
    @Temporal(TemporalType.DATE)
    @Column(name = "DATA_FAC")
    protected Date dataFac;
    @Column(name = "IMP_COBRAT", precision = 14, scale = 2)
    protected BigDecimal impCobrat;
    public BigDecimal getImpCobrat() {
        return impCobrat;
    }
    public void setImpCobrat(BigDecimal impCobrat) {
        this.impCobrat = impCobrat;
    }
    public Long getNumFac() {
        return numFac;
    }
    public void setNumFac(Long numFac) {
        this.numFac = numFac;
    }
    @MetaProperty(related = "facturesProveidor")
    public String getFacturesProvTxt() {
        if (PersistenceHelper.isLoaded(this, "facturesProveidor") && facturesProveidor != null) {
            return facturesProveidor.stream()
                    .map(FacturaProv -> FacturaProv.getNumFactura())
                    .collect(Collectors.joining(", "));
        } else {
            return "";
        }
    }
    public void setFacturesProveidor(List<FacturaProv> facturesProveidor) {
        this.facturesProveidor = facturesProveidor;
    }
    public List<FacturaProv> getFacturesProveidor() {
        return facturesProveidor;
    }
    public void setProveidor(Proveidor proveidor) {
        this.proveidor = proveidor;
    }
    public Proveidor getProveidor() {
        return proveidor;
    }
    public void setDataFac(Date dataFac) {
        this.dataFac = dataFac;
    }
    public Date getDataFac() {
        return dataFac;
    }
}
And the code after creating the attribute fCobramente:
package com.company.logistica.entity;
import com.company.mestrelegacy.entity.Proveidor;
import com.haulmont.chile.core.annotations.MetaProperty;
import com.haulmont.chile.core.annotations.NamePattern;
import com.haulmont.cuba.core.entity.StandardEntity;
import com.haulmont.cuba.core.entity.annotation.OnDeleteInverse;
import com.haulmont.cuba.core.global.DeletePolicy;
import com.haulmont.cuba.core.global.PersistenceHelper;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@NamePattern("%s |numFac,dataFac")
@Table(name = "LOGIS_FACTURA_COMI")
@Entity(name = "logis$FacturaComi")
public class FacturaComi extends StandardEntity {
    private static final long serialVersionUID = -5303781616687963854L;
    @Column(name = "NUM_FAC", unique = true)
    protected Long numFac;
    @OrderBy("numFactura")
    @OnDeleteInverse(DeletePolicy.DENY)
    @OneToMany(mappedBy = "facComiId")
    protected List<FacturaProv> facturesProveidor;
    @NotNull
    @OnDeleteInverse(DeletePolicy.DENY)
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "PROVEIDOR_ID")
    protected Proveidor proveidor;
    @Temporal(TemporalType.DATE)
    @Column(name = "DATA_FAC")
    protected Date dataFac;
    @Column(name = "IMP_COBRAT", precision = 14, scale = 2)
    protected BigDecimal impCobrat;
    @Column(name = "F_COBRAMENTE")
    protected Integer fCobramente;
    public Integer getFCobramente() {
        return fCobramente;
    }
    public FacComiFCobEnum getFCobramente() {
        return fCobramente == null ? null : FacComiFCobEnum.fromId(fCobramente);
    }
    public void setFCobramente(FacComiFCobEnum fCobramente) {
        this.fCobramente = fCobramente == null ? null : fCobramente.getId();
    }
    public BigDecimal getImpCobrat() {
        return impCobrat;
    }
    public void setImpCobrat(BigDecimal impCobrat) {
        this.impCobrat = impCobrat;
    }
    public Long getNumFac() {
        return numFac;
    }
    public void setNumFac(Long numFac) {
        this.numFac = numFac;
    }
    @MetaProperty(related = "facturesProveidor")
    public String getFacturesProvTxt() {
        if (PersistenceHelper.isLoaded(this, "facturesProveidor") && facturesProveidor != null) {
            return facturesProveidor.stream()
                    .map(FacturaProv -> FacturaProv.getNumFactura())
                    .collect(Collectors.joining(", "));
        } else {
            return "";
        }
    }
    public void setFacturesProveidor(List<FacturaProv> facturesProveidor) {
        this.facturesProveidor = facturesProveidor;
    }
    public List<FacturaProv> getFacturesProveidor() {
        return facturesProveidor;
    }
    public void setProveidor(Proveidor proveidor) {
        this.proveidor = proveidor;
    }
    public Proveidor getProveidor() {
        return proveidor;
    }
    public void setDataFac(Date dataFac) {
        this.dataFac = dataFac;
    }
    public Date getDataFac() {
        return dataFac;
    }
}
4- I manually removed the duplicated procedure definition. The application compiled fine.
5- Running the application, the enumeration values shown on the screen contained the name of the enumeration, as next image shows:
How can I solve this problem ?
Thanks in advance
         
        
           
         
            
       
      
        
        
          I am also having this display format problem
I tried to update it in the message file but didn’t work.
         
        
           
         
            
       
      
        
          
          
            xavier  
          
              
                June 20, 2019,  5:22am
               
              #3 
           
         
        
          Thanks for your answer…I’m not alone ! 
I had similar problem recently Enumeration type parameter doesn't show values - CUBA.Platform 
         
        
           
         
            
       
      
        
          
          
            gaslov  
          
              
                June 20, 2019,  3:05pm
               
              #5 
           
         
        
          Hi, Xavier
Thanks for your feedback.
Regarding the first issue. There are several issues with CUBA Studio handling attributes with second uppercase letter. So fCobramente name causes the problem. The quick fix is to rename the attribute, so it has second letter lowercase.
Unfortunately I can’t reproduce the second issue with enumeration values representation.FacComiFCobEnum enum and messages.properties file containing this enum localization strings.
         
        
           
         
            
       
      
        
          
          
            xavier  
          
              
                June 21, 2019,  5:22pm
               
              #6 
           
         
        
          Thanks, Alexander, for the workarround.
Here you are the sources you asked for:
package com.company.logistica.entity;
import com.haulmont.chile.core.datatypes.impl.EnumClass;
import javax.annotation.Nullable;
public enum FacComiFCobEnum implements EnumClass<Integer> {
    Xec(10),
    Transferència(20);
    private Integer id;
    FacComiFCobEnum(Integer value) {
        this.id = value;
    }
    public Integer getId() {
        return id;
    }
    @Nullable
    public static FacComiFCobEnum fromId(Integer id) {
        for (FacComiFCobEnum at : FacComiFCobEnum.values()) {
            if (at.getId().equals(id)) {
                return at;
            }
        }
        return null;
    }
}
and the messages.properties file in source folder
Contracte = Contracte
Contracte.cteCd = Nº Cte
Contracte.cteDt = Data
Contracte.proId = Id. Proveïdor
Contracte.cteNmPro = Nº Cte Prov.
Contracte.cteObs = Observ.
Contracte.conCod = Condició
Contracte.cteFp = Id. Forma Pag.
Contracte.cteQlApr = T. Quilos Aprox.
Contracte.cteRuta = Ruta documents
Contracte.cteTrnfSiNo = Transferència?
Contracte.cteTrnfPer = % Pagament 1 Transf
Contracte.cteTrnfImp = Import pagament 1 Transf
Contracte.cteTrnfDtP = Data pagament 1 Transf.
Contracte.cteTrnf2Pe = % Pagament 2 Transf.
Contracte.cteTrnf2Im = Import pagament 2 Transf.
Contracte.cteTrnf2Dt = Data pagament 2 Transf.
Contracte.bnaId = Id Banc
Contracte.bnaSuc = Id Sucursal Banc
ContracteLin = Contracte Lin
ContracteLin.cteCd = Nº Cte
ContracteLin.cteLnCd = Línia Cte
ContracteLin.agDuCd = Id Agent Duana
ContracteLin.cteLnPrB = Preu Brut
ContracteLin.cteLnPrN = Preu Net
ContracteLin.cteLnDte = % Dte
ContracteLin.cteLnDtOut = Data Sortida
ContracteLin.diCd = Id Divisa
ContracteLin.cteLnSpg = SPG
ContracteLin.cteLnObs = Observ.
ContracteLin.cteLnStat = Estat
ContracteLin.cteLnDtPre = Data prevista
ContracteLin.csCd = Id Consignatària
ContracteLin.navCd = Id Naviera
ContracteLin.tranCd = Id Transitària
ContracteLin.cteLnFPgCd = Id Forma Pag.
ContracteLin.cteLnTQN = T. Quilos Nets
ContracteLin.cteLnTQB = T. Quilos Bruts
ContracteLin.cteLnRefP = Ref. Partida
ContracteLin.cteDivCot = Cotització Div.
ContracteLin.ctePreuTot = Preu total
ContracteLin.cteLnMesDt = Mes previst
ContracteLin.cteLnAnyDt = Any previst
ContracteLin.cteFabrica = Fàbrica
ContracteLin.cteLnHighC = High Cube
ContracteLin.cteQuinzPr = Quinzena previst
ContracteLin.fCteLnQual = Qualitat
ContracteLin.cteLnDtAvi = Data avís
FacturaProv.numFactura = Nº Factura
FacturaProv.data = Data
FacturaProv.venciment = Venciment
FacturaProv.proveidor = Proveïdor
FacturaProv.divisa = Divisa
FacturaProv.importTotal = Import total
FacturaProv.percComissio = % comissió
FacturaProv.importComissio = Import comissió
FacturaProv.importFob = Import FOB
FacturaProv.dataCobrament = Data cobrament
FacturaProv.dataFactura = Data
FacturaProv = Factura proveïdor
FacturaProv.partides = Partides
FacturaProv.client = Client
FacturaProv.remarks = Remarks
FacturaProv.estat = Estat
FacturaProv.facComiId = Debit note Nº
FacturaProv.cobrament=Cobrament
FacProvEstatEnum.Pendent = Pendent
FacProvEstatEnum.Reclamada = Reclamada
FacProvEstatEnum.Cobrada = Cobrada
FacProvEstatEnum.Debit_Note = Debit note
FacturaComi.numFac = Debit Note Nº
FacturaComi.dataFac = Data
FacturaComi = Debit Note
FacturaComi.proveidor = Proveïdor
FacturaComi.facturesProveidor = Factures proveidor
FacturaComi.facturesProvTxt = Factures Proveïdor
FacturaComi.impCobrat=Import cobrat
FacturaComi.fCobramente=FCobramente
FacturaComi.fCobrament=Forma Cobrament
FCobramentEnum=FCobrament enum
FCobramentEnum.Transferència=Forma de cobrament
FacComiFCobEnum=Fac comi FCob enum
Cobrament=Cobrament
Cobrament.importCobrat=Import cobrat
Cobrament.data=Data
Cobrament.proveidor=Proveidor
Cobrament.remarks=Remarks
Cobrament.debitNote=Debit Note
Cobrament.importTotFac=Import total factures
Cobrament.importDifer=Import difer
Cobrament.factures=Factures
and the messages.properties file in build folder
Contracte = Contracte
Contracte.cteCd = Nº Cte
Contracte.cteDt = Data
Contracte.proId = Id. Proveïdor
Contracte.cteNmPro = Nº Cte Prov.
Contracte.cteObs = Observ.
Contracte.conCod = Condició
Contracte.cteFp = Id. Forma Pag.
Contracte.cteQlApr = T. Quilos Aprox.
Contracte.cteRuta = Ruta documents
Contracte.cteTrnfSiNo = Transferència?
Contracte.cteTrnfPer = % Pagament 1 Transf
Contracte.cteTrnfImp = Import pagament 1 Transf
Contracte.cteTrnfDtP = Data pagament 1 Transf.
Contracte.cteTrnf2Pe = % Pagament 2 Transf.
Contracte.cteTrnf2Im = Import pagament 2 Transf.
Contracte.cteTrnf2Dt = Data pagament 2 Transf.
Contracte.bnaId = Id Banc
Contracte.bnaSuc = Id Sucursal Banc
ContracteLin = Contracte Lin
ContracteLin.cteCd = Nº Cte
ContracteLin.cteLnCd = Línia Cte
ContracteLin.agDuCd = Id Agent Duana
ContracteLin.cteLnPrB = Preu Brut
ContracteLin.cteLnPrN = Preu Net
ContracteLin.cteLnDte = % Dte
ContracteLin.cteLnDtOut = Data Sortida
ContracteLin.diCd = Id Divisa
ContracteLin.cteLnSpg = SPG
ContracteLin.cteLnObs = Observ.
ContracteLin.cteLnStat = Estat
ContracteLin.cteLnDtPre = Data prevista
ContracteLin.csCd = Id Consignatària
ContracteLin.navCd = Id Naviera
ContracteLin.tranCd = Id Transitària
ContracteLin.cteLnFPgCd = Id Forma Pag.
ContracteLin.cteLnTQN = T. Quilos Nets
ContracteLin.cteLnTQB = T. Quilos Bruts
ContracteLin.cteLnRefP = Ref. Partida
ContracteLin.cteDivCot = Cotització Div.
ContracteLin.ctePreuTot = Preu total
ContracteLin.cteLnMesDt = Mes previst
ContracteLin.cteLnAnyDt = Any previst
ContracteLin.cteFabrica = Fàbrica
ContracteLin.cteLnHighC = High Cube
ContracteLin.cteQuinzPr = Quinzena previst
ContracteLin.fCteLnQual = Qualitat
ContracteLin.cteLnDtAvi = Data avís
FacturaProv.numFactura = Nº Factura
FacturaProv.data = Data
FacturaProv.venciment = Venciment
FacturaProv.proveidor = Proveïdor
FacturaProv.divisa = Divisa
FacturaProv.importTotal = Import total
FacturaProv.percComissio = % comissió
FacturaProv.importComissio = Import comissió
FacturaProv.importFob = Import FOB
FacturaProv.dataCobrament = Data cobrament
FacturaProv.dataFactura = Data
FacturaProv = Factura proveïdor
FacturaProv.partides = Partides
FacturaProv.client = Client
FacturaProv.remarks = Remarks
FacturaProv.estat = Estat
FacturaProv.facComiId = Debit note Nº
FacturaProv.cobrament=Cobrament
FacProvEstatEnum.Pendent = Pendent
FacProvEstatEnum.Reclamada = Reclamada
FacProvEstatEnum.Cobrada = Cobrada
FacProvEstatEnum.Debit_Note = Debit note
FacturaComi.numFac = Debit Note Nº
FacturaComi.dataFac = Data
FacturaComi = Debit Note
FacturaComi.proveidor = Proveïdor
FacturaComi.facturesProveidor = Factures proveidor
FacturaComi.facturesProvTxt = Factures Proveïdor
FacturaComi.impCobrat=Import cobrat
FacturaComi.fCobramente=FCobramente
FacturaComi.fCobrament=Forma Cobrament
FCobramentEnum=FCobrament enum
FCobramentEnum.Transferència=Forma de cobrament
FacComiFCobEnum=Fac comi FCob enum
Cobrament=Cobrament
Cobrament.importCobrat=Import cobrat
Cobrament.data=Data
Cobrament.proveidor=Proveidor
Cobrament.remarks=Remarks
Cobrament.debitNote=Debit Note
Cobrament.importTotFac=Import total factures
Cobrament.importDifer=Import difer
Cobrament.factures=Factures
Thanks for your quicky answer.
         
        
           
         
            
       
      
        
          
          
            gaslov  
          
              
                June 22, 2019, 12:24pm
               
              #7 
           
         
        
          As I see in the sources, there are no localization provided for your enumeration values.FacComiFCobEnum.Xec = <Xec localization string>FacComiFCobEnum.Transferència = <Transferència localization string>
         
        
           
         
            
       
      
        
          
          
            xavier  
          
              
                June 23, 2019,  7:27am
               
              #8 
           
         
        
          Thanks, Alexander, for your comments.
Best regards,