I have two section “fornitori” (suppliers) and “fatture fornitori” (invoices)
-
I can create an invoice in both section.
-
Invoice details is created initially by default with a list of “causali”
demo.rar (10.9 MB)
user: admin
password: admin
In first example (section “fornitori”) i have no error when i create an invoice.
In the second example (section “fatture fornitori”) when i creaete an invoice i have this error
IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST:
I think that i create the detail incorrectly when i select “fornitore” (controller FornitoreFatturaEdit method copiaCausaliFornitore(item))
import javax.inject.Inject;
import javax.inject.Named;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class FornitoreFatturaEdit extends AbstractEditor<FornitoreFattura> {
@Inject
protected Messages messages;
@Inject
private DataManager dataManager;
@Inject
protected CollectionDatasource<Fornitore, UUID> fornitoriDs;
@Named("fieldGroup.fornitore")
protected LookupPickerField fornitoreField;
@Override
protected void initNewItem(FornitoreFattura item) {
if (item.getFornitore() != null) {
// fornitoreField.setVisible(false);
fornitoreField.setEnabled(false);
copiaCausaliFornitore(item);
}
fornitoriDs.addItemChangeListener(event -> {
copiaCausaliFornitore(item);
});
}
@Override
protected boolean preCommit() {
// controllo dataFattura < dataRegistrazione
if (getItem().getDataFattura().after(getItem().getDataRegistrazione())) {
String msg = messages.getMessage(getClass(), "dataFattVSDataReg");
showNotification(msg, NotificationType.ERROR);
return false;
} else {
return true;
}
}
protected void copiaCausaliFornitore(FornitoreFattura item) {
// esempio preso da data-manipulation
LoadContext<FornitoreCausale> loadContext = LoadContext.create(FornitoreCausale.class)
.setQuery(LoadContext.createQuery("select fc from congiunzione$FornitoreCausale fc where fc.fornitore.id = :fornitore")
.setParameter("fornitore", item.getFornitore().getId()))
.setView("fornitoreCausale-view");
List<FornitoreCausale> causaliPerFornitore = dataManager.loadList(loadContext);
List<FornitoreFatturaDett> listFatturaDettaglioDaCausaliPerFornitore = new ArrayList<FornitoreFatturaDett>();
for (int i = 0; i < causaliPerFornitore.size(); i++) {
FornitoreFatturaDett ffd = new FornitoreFatturaDett();
ffd.setFornitoreFattura(item); // per idFattura
ffd.setTipoRiga(causaliPerFornitore.get(i).getTipoRiga()); // TipoRiga
ffd.setCodiceConto(causaliPerFornitore.get(i).getCodiceConto()); // CodiceConto
ffd.setImportoRiga(new BigDecimal(0.0)); // ImportoRiga
ffd.setImportoIva(new BigDecimal(0.0)); // ImportoIva
ffd.setAliqIva(causaliPerFornitore.get(i).getAliqIva()); // AlquotaIva
ffd.setArtIva(causaliPerFornitore.get(i).getArtIva()); // ArticoloIva
listFatturaDettaglioDaCausaliPerFornitore.add(ffd);
}
item.setLineaDettaglio(listFatturaDettaglioDaCausaliPerFornitore);
}
}