package ch.elexis.core.eigenartikel;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import org.eclipse.core.runtime.IProgressMonitor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;
import static ch.elexis.core.eigenartikel.Eigenartikel.*;
/**
* @deprecated remove in 3.3
* @see https://redmine.medelexis.ch/issues/5204
*/
public class EigenartikelDatabaseConverter {
private static Logger log = LoggerFactory.getLogger(EigenartikelDatabaseConverter.class);
/**
* Convert the Eigenartikel contained in the ARTIKEL table to the 3.2 format
* @deprecated
* @see https://redmine.medelexis.ch/issues/5204
*/
public static void performConversionTo32Format(IProgressMonitor pm){
List<Eigenartikel> qre = new Query<Eigenartikel>(Eigenartikel.class).execute();
String taskName = "Converting " + qre.size() + " Eigenartikel to 3.2 format.";
log.info(taskName);
pm.beginTask(taskName, qre.size());
for (Eigenartikel ea : qre) {
String[] values =
ea.get(false, FLD_EAN, FLD_SUB_ID, LIEFERANT_ID, FLD_EK_PREIS, FLD_VK_PREIS);
long count = Arrays.asList(values).stream().filter(Objects::nonNull)
.filter(p -> p.length() > 0).count();
if (count > 0) {
// convert condition already met, no HashMap resolve required
EigenartikelDatabaseConverter.convertTo32PackageProduct(ea);
continue;
}
String ext = ea.getExt(VERPACKUNGSEINHEIT);
if (ext != null && ext.length() > 0) {
EigenartikelDatabaseConverter.convertTo32PackageProduct(ea);
}
log.debug("Converted " + ea.getLabel());
pm.worked(1);
}
log.info("Done");
pm.done();
}
/**
* Convert a single Eigenartikel to the 3.2 package product format
*
* @param ea
*/
public static void convertTo32PackageProduct(Eigenartikel ea){
String parent = ea.get(FLD_EXTID);
if (parent != null && parent.length() > 0) {
if (new Query<Eigenartikel>(Eigenartikel.class, PersistentObject.FLD_ID, parent)
.size() > 0) {
log.info("Skipping " + ea.getId() + " as a parent is already referenced.");
return;
}
}
Eigenartikel eaProduct = new Eigenartikel(ea.getName(), ea.getInternalName());
eaProduct.set(new String[] {
FLD_ATC_CODE, FLD_CODECLASS
}, ea.getATC_code(), "U");
ea.set(new String[] {
FLD_EXTID, FLD_CODECLASS
}, eaProduct.getId(), "U");
}
}