Skip to content
Commits on Source (102)
# Build script used by gitlab.medelexis.ch
variables:
ORIGIN_BRANCH: "3.4"
ORIGIN_BRANCH: "3.6"
stages:
- build
......
......@@ -55,7 +55,7 @@
<setupTask
xsi:type="setup:PreferenceTask"
key="/instance/org.eclipse.ui.ide/WORKSPACE_NAME"
value="Elexis (${scope.project.stream.name})"/>
value="E ${core.git.clone.checkoutBranch}"/>
</setupTask>
</setupTask>
<setupTask
......@@ -232,8 +232,8 @@
</setupTask>
<setupTask
xsi:type="pde:TargetPlatformTask"
id="ch.elexis.target.juno-target.target"
name="Juno for Elexis 3.0"/>
id="ch.elexis.target.elexis-prepare.target"
name="Prepare Target"/>
<project name="Medelexis"
label="">
<setupTask
......
......@@ -53,6 +53,8 @@ elexis.templatePrintView = Print template
elexis.textCategory = documents
elexis.textView = Letters
perspective.description.0 = A perspective for creating and printing bill
sidebar.activities = Services
sidebar.articles = Articles
sidebar.bbs = Bulletin Board
......
......@@ -53,6 +53,8 @@ elexis.templatePrintView = Vorlage Drucken
elexis.textCategory = Dokumente
elexis.textView = Briefe
perspective.description.0 = Eine Perspektive zum Rechnungen erstellen und ausdrucken
sidebar.activities = Leistungen
sidebar.articles = Artikel
sidebar.bbs = Schwarzes Brett
......
......@@ -53,6 +53,8 @@ elexis.templatePrintView = Print template
elexis.textCategory = Documents
elexis.textView = letters
perspective.description.0 = A perspective for creating and printing bill
sidebar.activities = Services
sidebar.articles = items
sidebar.bbs = Bulletin board
......
......@@ -53,6 +53,8 @@ elexis.templatePrintView = Imprimer mod\u00E8le
elexis.textCategory = Papiers
elexis.textView = Courrier
perspective.description.0 = perspective pour cr\u00E9er et imprimer des factures\n
sidebar.activities = Services
sidebar.articles = Article
sidebar.bbs = Tableau d'affichage
......
......@@ -53,6 +53,8 @@ elexis.templatePrintView = modello di stampa
elexis.textCategory = documenti
elexis.textView = lettere
perspective.description.0 = Una prospettiva per la creazione e la stampa delle fatture
sidebar.activities = servizi
sidebar.articles = articolo
sidebar.bbs = albo
......
......@@ -56,6 +56,16 @@
class="ch.elexis.core.data.util.PatientDataAccessor"
name="Patient">
</DataAccess>
<TextPlaceHolder
name="Kostentraeger"
resolver="ch.elexis.core.data.text.resolver.FallKostentraegerResolver"
type="ch.elexis.data.Fall">
</TextPlaceHolder>
<TextPlaceHolder
name="Kostenträger"
resolver="ch.elexis.core.data.text.resolver.FallKostentraegerResolver"
type="ch.elexis.data.Fall">
</TextPlaceHolder>
</extension>
<extension
point="org.eclipse.core.runtime.preferences">
......
package ch.elexis.core.data.text.resolver;
import java.util.Optional;
import ch.elexis.core.data.interfaces.text.ITextResolver;
import ch.elexis.core.data.util.FallDataAccessor;
import ch.elexis.data.Fall;
import ch.elexis.data.Kontakt;
public class FallKostentraegerResolver implements ITextResolver {
/**
* @see FallDataAccessor#getObject(String, ch.elexis.data.PersistentObject, String, String[])
*/
@Override
public Optional<String> resolve(Object object) {
if (object instanceof Fall) {
Kontakt costBearer = ((Fall) object).getCostBearer();
if (costBearer != null) {
String label = costBearer.getLabel();
String fullName = label.substring(0, label.indexOf(","));
return Optional.of(fullName);
}
}
return Optional.empty();
}
}
......@@ -61,6 +61,7 @@ public class FallDataAccessor implements IDataAccess {
if (descriptor.equalsIgnoreCase(KOSTENTRAEGER)
|| descriptor.equalsIgnoreCase(KOSTENTRAEGER_UMLAUT)) {
// WARN does not seem to be called anymore - see FallKostentraegerResolver
result = new Result<Object>(costBearer.getPostAnschrift(true));
} else if (descriptor.equalsIgnoreCase(KOSTENTRAEGER_KUERZEL)
......
......@@ -11,18 +11,12 @@
*******************************************************************************/
package ch.elexis.data;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.runtime.IProgressMonitor;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.interfaces.IFall;
import ch.elexis.core.data.util.IRunnableWithProgress;
import ch.elexis.core.model.IStockEntry;
import ch.elexis.core.model.article.IArticle;
import ch.rgw.tools.Money;
import ch.rgw.tools.StringTool;
......@@ -49,25 +43,12 @@ public class Artikel extends VerrechenbarAdapter implements IArticle {
public static final String FLD_NAME = "Name";
public static final String FLD_ATC_CODE = "ATC_code";
/** Deprecated - will be removed in 3.3 (https://redmine.medelexis.ch/issues/5204) **/
@Deprecated
public static final String LIEFERANT_ID = "LieferantID";
@Deprecated
public static final String ISTBESTAND = "Istbestand";
@Deprecated
public static final String ANBRUCH = "Anbruch";
@Deprecated
public static final String MINBESTAND = "Minbestand";
@Deprecated
public static final String MAXBESTAND = "Maxbestand";
/** END **/
public static final Pattern NAME_VE_PATTERN = Pattern.compile(".+ ([0-9]+) Stk.*");
static {
addMapping(TABLENAME, LIEFERANT_ID, FLD_NAME, MAXBESTAND, MINBESTAND, ISTBESTAND,
FLD_EK_PREIS, FLD_VK_PREIS, FLD_TYP, FLD_EXTINFO, FLD_EAN, FLD_SUB_ID,
EIGENNAME + "=Name_intern", FLD_CODECLASS, FLD_KLASSE, FLD_ATC_CODE, FLD_EXTID);
addMapping(TABLENAME, FLD_NAME, FLD_EK_PREIS, FLD_VK_PREIS, FLD_TYP,
FLD_EXTINFO, FLD_EAN, FLD_SUB_ID, EIGENNAME + "=Name_intern",
FLD_CODECLASS, FLD_KLASSE, FLD_ATC_CODE, FLD_EXTID);
Xid.localRegisterXIDDomainIfNotExists(XID_PHARMACODE, FLD_PHARMACODE,
Xid.ASSIGNMENT_REGIONAL);
}
......@@ -77,83 +58,6 @@ public class Artikel extends VerrechenbarAdapter implements IArticle {
return TABLENAME;
}
/**
* @param qbe
* @param clazz
* @deprecated to be removed in 3.3
* @see https://redmine.medelexis.ch/issues/5204
*/
public static void transferAllStockInformationToNew32StockModel(Query<? extends Artikel> qbe,
Class<? extends Artikel> clazz){
if (!CoreHub.globalCfg.get(clazz.getSimpleName() + "StocksMigratedTo32", false)) {
IRunnableWithProgress irwp = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException{
log.debug("Migrating stock information");
qbe.startGroup();
qbe.add(ISTBESTAND, Query.GREATER, "0");
qbe.or();
qbe.add(MAXBESTAND, Query.GREATER, "0");
qbe.endGroup();
List<? extends Artikel> stockArticles = qbe.execute();
monitor.beginTask(
"Migrating " + clazz.getSimpleName() + " to new stock format.",
stockArticles.size());
Stock stdStock = Stock.load(Stock.DEFAULT_STOCK_ID);
for (Artikel art : stockArticles) {
if (art.isProduct()) {
log.warn("Article is product with stock [{}].", art.getId());
continue;
}
log.debug("Migrating stock information for [{}]", art.getLabel());
IStockEntry se = CoreHub.getStockService().storeArticleInStock(stdStock,
art.storeToString());
String[] fields = new String[] {
MINBESTAND, ISTBESTAND, MAXBESTAND, LIEFERANT_ID
};
String[] values = art.get(false, fields);
String anbruch = art.getExt(ANBRUCH);
if (anbruch != null && anbruch.length() > 0) {
int anbruchValue = 0;
try {
anbruchValue = Integer.valueOf(anbruch);
} catch (NumberFormatException nfe) {
log.warn(
"Error converting fraction value [{}] for id [{}], setting 0.",
anbruch, art.getId(), nfe);
}
se.setFractionUnits(anbruchValue);
art.setExt(ANBRUCH, null);
}
for (int i = 0; i < values.length; i++) {
if (values[i] != null && values[i].length() > 0) {
if (i == 0) {
se.setMinimumStock(StringTool.parseSafeInt(values[i]));
} else if (i == 1) {
se.setCurrentStock(StringTool.parseSafeInt(values[i]));
} else if (i == 2) {
se.setMaximumStock(StringTool.parseSafeInt(values[i]));
} else if (i == 3) {
se.setProvider(values[i]);
}
}
}
for (String field : fields) {
art.set(field, null);
}
monitor.worked(1);
}
CoreHub.globalCfg.set(clazz.getSimpleName() + "StocksMigratedTo32", true);
CoreHub.globalCfg.flush();
monitor.done();
}
};
PersistentObject.cod.showProgress(irwp, "Migrate stock format to 3.2");
}
}
public String getXidDomain(){
return XID_PHARMACODE;
}
......
......@@ -13,16 +13,12 @@
package ch.elexis.data;
import java.lang.reflect.InvocationTargetException;
import java.util.Comparator;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import ch.elexis.core.constants.Preferences;
import ch.elexis.core.constants.StringConstants;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.util.IRunnableWithProgress;
import ch.elexis.core.jdt.Nullable;
import ch.elexis.core.model.IOrder;
import ch.elexis.core.model.IOrderEntry;
......@@ -48,8 +44,6 @@ public class Bestellung extends PersistentObject implements IOrder {
static {
addMapping(TABLENAME, FLD_ITEMS + "=S:C:Contents", //$NON-NLS-1$
FLD_JOINT_BESTELLUNGEN_ENTRIES + "=LIST:BESTELLUNG:" + BestellungEntry.TABLENAME);
transferAllOrdersToNew32OrderModel();
}
@Override
......@@ -57,78 +51,6 @@ public class Bestellung extends PersistentObject implements IOrder {
return TABLENAME;
}
/**
* @deprecated to be removed in 3.3
* @see https://redmine.medelexis.ch/issues/5204
*/
private static void transferAllOrdersToNew32OrderModel(){
if (!CoreHub.globalCfg.get("OrdersMigratedTo32", false)) {
IRunnableWithProgress irwp = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException{
Stock defStock = Stock.load(Stock.DEFAULT_STOCK_ID);
List<Bestellung> orders = new Query<Bestellung>(Bestellung.class).execute();
orders.sort(new BestellungDateComparator());
int migrateCount = 0;
for (Bestellung order : orders) {
if (migrateCount <= 30) {
migrate(order, defStock);
migrateCount++;
} else {
order.delete();
}
}
CoreHub.globalCfg.set("OrdersMigratedTo32", true);
CoreHub.globalCfg.flush();
}
private void migrate(Bestellung order, Stock defStock){
String[] it = checkNull(order.get(FLD_ITEMS)).split(StringConstants.SEMICOLON);
for (String i : it) {
String[] fld = i.split(StringConstants.COMMA);
if (fld.length == 2) {
Artikel art = Artikel.load(fld[0]);
if (art == null || !art.exists()) {
PersistentObject poFromString =
CoreHub.poFactory.createFromString(fld[0]);
if (poFromString != null) {
art = (Artikel) poFromString;
}
}
if (art != null && art.exists()) {
int count = 1;
try {
count = Integer.parseInt(fld[1]);
} catch (NumberFormatException nfe) {}
String providerId = art.get(Artikel.LIEFERANT_ID);
Kontakt provider = null;
if (providerId != null && providerId.length() > 0) {
Kontakt load = Kontakt.load(providerId);
if (load.exists()) {
provider = load;
}
}
new BestellungEntry(order, art, defStock, provider, count);
} else {
log.warn("Article for 'Bestellung' not found via [" + fld[0] + "]");
}
}
}
order.set(FLD_ITEMS, null);
}
};
PersistentObject.cod.showProgress(irwp, "Migrate orders format to 3.2");
}
}
public static Bestellung load(String id){
return new Bestellung(id);
}
......
/*******************************************************************************
* Copyright (c) 2006-2016, G. Weirich and Elexis
* Copyright (c) 2006-2018, G. Weirich and Elexis
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
......@@ -9,6 +9,7 @@
* G. Weirich - initial implementation
* M. Descher - extracted from elexis main and adapted for usage
* <office@medevit.at> - 3.2 format introduction (products and items)
* <office@medevit.at> - 3.6 removal of 3.2 format conversion
*******************************************************************************/
package ch.elexis.core.eigenartikel;
......@@ -18,23 +19,17 @@ import static ch.elexis.core.model.eigenartikel.Constants.FLD_EXT_HI_COST_ABSORP
import static ch.elexis.core.model.eigenartikel.Constants.FLD_EXT_MEASUREMENT_UNIT;
import static ch.elexis.core.model.eigenartikel.Constants.FLD_EXT_PACKAGE_SIZE_STRING;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import ch.elexis.core.constants.StringConstants;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.interfaces.IOptifier;
import ch.elexis.core.data.interfaces.IVerrechenbar;
import ch.elexis.core.data.util.IRunnableWithProgress;
import ch.elexis.core.model.eigenartikel.Constants;
import ch.elexis.core.model.eigenartikel.EigenartikelTyp;
import ch.elexis.data.Artikel;
import ch.elexis.data.Konsultation;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;
import ch.rgw.tools.JdbcLink;
import ch.rgw.tools.Money;
......@@ -44,29 +39,6 @@ public class Eigenartikel extends Artikel {
private static IOptifier OPTIFIER;
static {
final String isConvertedTo32Key = "Eigenartikel32Format";
boolean converted = CoreHub.globalCfg.get(isConvertedTo32Key, false);
if (!converted) {
log.info("Migrating Eigenartikel to v3.2");
IRunnableWithProgress irwp = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException{
EigenartikelDatabaseConverter.performConversionTo32Format(monitor);
}
};
PersistentObject.cod.showProgress(irwp, "Migrate Eigenartikel to v3.2");
CoreHub.globalCfg.set(isConvertedTo32Key, true);
}
transferAllStockInformationToNew32StockModel(new Query<Eigenartikel>(Eigenartikel.class),
Eigenartikel.class);
}
public static final String TYPNAME = Constants.TYPE_NAME;
public Eigenartikel(final String articleName, final String productName){
......
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");
}
}
pluginName = Elexis Findings Templates
providerName = elexis.info
pluginName = Elexis Befundvorlagen
providerName = elexis.info
pluginName = Les conclusions d'Elexis
providerName = elexis.info
......@@ -447,8 +447,13 @@ public abstract class HL7Writer {
email = kontakt.getEmail();
fax = kontakt.getFax();
}
if (phone1 != null) {
phone1 = phone1.replaceAll("[^\\d.]", "");
xtn.getPhoneNumber().setValue(phone1);
}
if (email != null) {
xtn.getEmailAddress().setValue(email);
}
xtn.getXtn2_TelecommunicationUseCode().setValue(""); //$NON-NLS-1$
xtn.getXtn3_TelecommunicationEquipmentType().setValue(""); //$NON-NLS-1$
xtn.getXtn5_CountryCode().setValue(""); //$NON-NLS-1$
......