/******************************************************************************* * Copyright (c) 2014 MEDEVIT. * 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * MEDEVIT <office@medevit.at> - initial API and implementation *******************************************************************************/ package at.medevit.elexis.impfplan.model.po; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; import at.medevit.elexis.impfplan.model.ArticleToImmunisationModel; import ch.elexis.core.constants.StringConstants; import ch.elexis.core.jdt.NonNull; import ch.elexis.data.Artikel; import ch.elexis.data.Mandant; import ch.elexis.data.PersistentObject; import ch.elexis.data.PersistentObjectFactory; import ch.elexis.data.Person; import ch.elexis.data.Query; import ch.rgw.tools.JdbcLink; import ch.rgw.tools.TimeTool; public class Vaccination extends PersistentObject { public static final String TABLENAME = "AT_MEDEVIT_ELEXIS_IMPFPLAN"; static final String VERSION = "1.0.0"; //@formatter:off public static final String FLD_PATIENT_ID = "Patient_ID"; public static final String FLD_ARTIKEL_REF = "Artikel_REF"; /** Handelsname */ public static final String FLD_BUSS_NAME = "BusinessName"; /** EAN Code */ public static final String FLD_EAN = "ean"; /** ATC Code */ public static final String FLD_ATCCODE = "ATCCode"; /** Chargen-No */ public static final String FLD_LOT_NO ="lotnr"; /** Verabr. Datum*/ public static final String FLD_DOA = "dateOfAdministration"; /** Verabreicher, entweder ein Mandant im lokalen System, oder ein Kontakt-String */ public static final String FLD_ADMINISTRATOR = "administrator"; /** Impfung gegen */public static final String FLD_VACC_AGAINST = "vaccAgainst"; /** side where vaccination was applied (optional)*/ public static final String SIDE = "Side"; /** Definition of the database table */ static final String createDB = "CREATE TABLE " + TABLENAME + "(" + "ID VARCHAR(25) primary key," // has to be of type varchar else version.exists fails + "lastupdate BIGINT," + "deleted CHAR(1) default '0'," // will never be set to 1 + FLD_PATIENT_ID +" VARCHAR(25)," + FLD_ARTIKEL_REF +" VARCHAR(255)," + FLD_BUSS_NAME +" VARCHAR(255)," + FLD_EAN +" VARCHAR(13)," + FLD_ATCCODE +" VARCHAR(20)," + FLD_LOT_NO +" VARCHAR(255)," + FLD_DOA +" CHAR(8)," + FLD_ADMINISTRATOR +" VARCHAR(255)," + FLD_VACC_AGAINST +" VARCHAR(255)," + PersistentObject.FLD_EXTINFO + " BLOB" + "); " + "INSERT INTO " + TABLENAME + " (ID,"+FLD_PATIENT_ID+","+FLD_DOA+") VALUES ('"+StringConstants.VERSION_LITERAL+"'," + JdbcLink.wrap(VERSION) +","+new TimeTool().toString(TimeTool.DATE_COMPACT)+");"; //@formatter:on static { addMapping(TABLENAME, FLD_PATIENT_ID, FLD_ARTIKEL_REF, FLD_BUSS_NAME, FLD_EAN, FLD_ATCCODE, FLD_LOT_NO, FLD_DOA, FLD_ADMINISTRATOR, FLD_VACC_AGAINST, PersistentObject.FLD_EXTINFO); } Vaccination(){} protected Vaccination(String id){ super(id); } public static Vaccination load(String id){ return new Vaccination(id); } public Vaccination(final String patientId, final Artikel a, final Date doa, final String lotNo, final String mandantId){ this(patientId, a.storeToString(), a.getLabel(), a.getEAN(), a.getATC_code(), doa, lotNo, mandantId); } public Vaccination(final String patientId, final String articleStoreToString, final String articleLabel, final String articleEAN, final String articleATCCode, final Date doa, final String lotNo, final String mandantId){ this(patientId, articleStoreToString, articleLabel, articleEAN, articleATCCode, (new TimeTool(doa)).toString(TimeTool.DATE_COMPACT), lotNo, mandantId); } public Vaccination(final String patientId, final String articleStoreToString, final String articleLabel, final String articleEAN, final String articleATCCode, final String doa, final String lotNo, final String mandantId){ create(null); String vaccAgainst = ""; if (articleATCCode != null) { vaccAgainst = StringUtils .join(ArticleToImmunisationModel.getImmunisationForAtcCode(articleATCCode), ","); } String[] fields = new String[] { FLD_PATIENT_ID, FLD_ARTIKEL_REF, FLD_BUSS_NAME, FLD_EAN, FLD_ATCCODE, FLD_LOT_NO, FLD_DOA, FLD_ADMINISTRATOR, FLD_VACC_AGAINST }; String[] vals = new String[] { patientId, articleStoreToString, articleLabel, articleEAN, articleATCCode, lotNo, doa, mandantId, vaccAgainst }; set(fields, vals); } static { addMapping(TABLENAME, FLD_PATIENT_ID, FLD_ARTIKEL_REF, FLD_BUSS_NAME, FLD_EAN, FLD_ATCCODE, FLD_LOT_NO, FLD_DOA, FLD_ADMINISTRATOR, FLD_VACC_AGAINST, PersistentObject.FLD_EXTINFO); Vaccination version = load(StringConstants.VERSION_LITERAL); //$NON-NLS-1$ if (!version.exists()) { createOrModifyTable(createDB); } else { // update code } } @Override protected String getTableName(){ return TABLENAME; } @Override public String getLabel(){ return getDateOfAdministration().toString(TimeTool.DATE_COMPACT) + " " + getBusinessName() + " (" + getLotNo() + ") - " + getAdministratorLabel(); } public TimeTool getDateOfAdministration(){ return new TimeTool(get(FLD_DOA)); } public void setDateOfAdministration(Date tt){ TimeTool ttd = new TimeTool(tt); set(FLD_DOA, ttd.toString(TimeTool.DATE_COMPACT)); } public String getDateOfAdministrationLabel(){ String doa = get(FLD_DOA); if (doa.contains("0000")) { doa = doa.replace("0000", ""); return doa; } TimeTool ttDoA = new TimeTool(doa); return ttDoA.toString(TimeTool.DATE_GER); } public String getBusinessName(){ return get(FLD_BUSS_NAME); } public String getShortBusinessName(){ String businessName = get(FLD_BUSS_NAME); if (businessName.contains("(")) { return businessName.substring(0, businessName.indexOf("(")); } return businessName; } public String getLotNo(){ return get(FLD_LOT_NO); } public String getAtcCode(){ return get(FLD_ATCCODE); } public String getPatientId(){ return get(FLD_PATIENT_ID); } /** * @return a human-readable label of the person that administered the vaccine */ public @NonNull String getAdministratorLabel(){ String value = get(FLD_ADMINISTRATOR); if (value.startsWith(Mandant.class.getName())) { Mandant mandant = (Mandant) new PersistentObjectFactory().createFromString(value); if (mandant == null) { return ""; } String title = Person.load(mandant.getId()).get(Person.TITLE); if (title == null || title.isEmpty()) { return mandant.getName() + " " + mandant.getVorname(); } return title + " " + mandant.getName() + " " + mandant.getVorname(); } else { if (value == null || value.length() < 2) return ""; return value; } } public boolean isSupplement(){ String value = get(FLD_ADMINISTRATOR); if (value.startsWith(Mandant.class.getName())) { Mandant mandant = (Mandant) new PersistentObjectFactory().createFromString(value); if (mandant.exists()) { return false; } } return true; } /** * Find all vaccinations with a specific lotNo * * @param lotNo * number to look for * @return list of vaccinations matching the lotNo */ public static List<Vaccination> findByLotNo(String lotNo){ Query<Vaccination> qbe = new Query<Vaccination>(Vaccination.class); qbe.clear(true); qbe.add(FLD_LOT_NO, Query.EQUALS, lotNo); return qbe.execute(); } public void setVaccAgainst(String vaccAgainst){ set(FLD_VACC_AGAINST, vaccAgainst); } public List<String> getVaccAgainstList(){ List<String> vaccAgainst = new ArrayList<String>(); String vaccAgaisntString = get(FLD_VACC_AGAINST); String[] split = vaccAgaisntString.split(","); for (String va : split) { vaccAgainst.add(va); } return vaccAgainst; } public void setAdministratorString(String administrator){ set(FLD_ADMINISTRATOR, administrator); } public void setLotNo(String lotNo){ set(FLD_LOT_NO, lotNo); } public String getSide(){ return checkNull(getExtInfoStoredObjectByKey(SIDE)); } public void setSide(final String side){ setExtInfoStoredObjectByKey(SIDE, side); } }