package ch.elexis.tarmed.printer; import java.util.HashMap; import java.util.HashSet; import org.eclipse.swt.SWT; import org.jdom.Document; import org.jdom.Element; import ch.elexis.TarmedRechnung.XMLExporter; import ch.elexis.arzttarife_schweiz.Messages; import ch.elexis.core.data.events.ElexisEventDispatcher; import ch.elexis.core.ui.text.ITextPlugin; import ch.elexis.core.ui.text.TextContainer; import ch.elexis.data.Brief; import ch.elexis.data.Fall; import ch.elexis.data.Kontakt; import ch.elexis.data.Mandant; import ch.elexis.data.Patient; import ch.elexis.data.Rechnung; import ch.elexis.data.Rechnungssteller; import ch.elexis.data.RnStatus; import ch.elexis.tarmedprefs.TarmedRequirements; import ch.rgw.tools.StringTool; import ch.rgw.tools.TimeTool; public class XMLPrinterUtil { public static void updateContext(Rechnung rechnung, Fall fall, Patient patient, Mandant mandant, Rechnungssteller rechnungssteller, String paymentMode){ ElexisEventDispatcher.fireSelectionEvents(rechnung, fall, patient, rechnungssteller); // make sure the Textplugin can replace all fields fall.setInfoString("payment", paymentMode); fall.setInfoString("Gesetz", TarmedRequirements.getGesetz(fall)); mandant.setInfoElement("EAN", TarmedRequirements.getEAN(mandant)); rechnungssteller.setInfoElement("EAN", TarmedRequirements.getEAN(rechnungssteller)); mandant.setInfoElement("KSK", TarmedRequirements.getKSK(mandant)); mandant.setInfoElement("NIF", TarmedRequirements.getNIF(mandant)); if (!mandant.equals(rechnungssteller)) { rechnungssteller.setInfoElement("EAN", TarmedRequirements.getEAN(rechnungssteller)); rechnungssteller.setInfoElement("KSK", TarmedRequirements.getKSK(rechnungssteller)); rechnungssteller.setInfoElement("NIF", TarmedRequirements.getNIF(rechnungssteller)); } } /** * Make a guess for the correct code value for the provided vat rate. Guessing is necessary as * the correct code is not part of the XML invoice. * * @param vatRate * @return */ public static int guessVatCode(String vatRate){ if (vatRate != null && !vatRate.isEmpty()) { double scale = Double.parseDouble(vatRate); // make a guess for the correct code if (scale == 0) return 0; else if (scale < 7) return 2; else return 1; } return 0; } public static void insertPage(String templateName, final int page, final Kontakt adressat, final Rechnung rn, final Document xmlRn, final String paymentMode, TextContainer text){ createBrief(templateName, adressat, text); replaceHeaderFields(text, rn, xmlRn, paymentMode); text.replace("\\[Seite\\]", StringTool.pad(StringTool.LEFT, '0', Integer.toString(page), 2)); //$NON-NLS-1$ } public static Brief createBrief(final String template, final Kontakt adressat, TextContainer text){ return text.createFromTemplateName(null, template, Brief.RECHNUNG, adressat, Messages.RnPrintView_tarmedBill); } public static boolean deleteBrief(Brief brief){ if (brief != null) { return brief.delete(); } return true; } public static String getEANList(String[] eans){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < eans.length; i++) { if (i > 0) sb.append(" "); sb.append(Integer.toString(i + 1) + "/" + eans[i]); } return sb.toString(); } public static String[] getEANArray(HashSet<String> responsibleEANs){ String[] eans = responsibleEANs.toArray(new String[responsibleEANs.size()]); return eans; } public static HashMap<String, String> getEANHashMap(String[] eans){ HashMap<String, String> ret = new HashMap<String, String>(); for (int i = 0; i < eans.length; i++) { ret.put(eans[i], Integer.toString(i + 1)); } return ret; } public static void replaceHeaderFields(final TextContainer text, final Rechnung rn, final Document xmlRn, final String paymentMode){ Fall fall = rn.getFall(); Mandant m = rn.getMandant(); String titel; String titelMahnung; // implementation specific headers if (XMLExporter.getXmlVersion(xmlRn.getRootElement()).equals("4.0")) { replace40HeaderFields(text, rn, xmlRn); } else if (XMLExporter.getXmlVersion(xmlRn.getRootElement()).equals("4.4")) { replace44HeaderFields(text, rn, xmlRn); } if (paymentMode.equals(XMLExporter.TIERS_PAYANT)) { //$NON-NLS-1$ titel = Messages.RnPrintView_tbBill; switch (rn.getStatus()) { case RnStatus.MAHNUNG_1_GEDRUCKT: case RnStatus.MAHNUNG_1: titelMahnung = Messages.RnPrintView_firstM; break; case RnStatus.MAHNUNG_2: case RnStatus.MAHNUNG_2_GEDRUCKT: titelMahnung = Messages.RnPrintView_secondM; break; case RnStatus.IN_BETREIBUNG: case RnStatus.TEILVERLUST: case RnStatus.TOTALVERLUST: case RnStatus.MAHNUNG_3: case RnStatus.MAHNUNG_3_GEDRUCKT: titelMahnung = Messages.RnPrintView_thirdM; break; default: titelMahnung = ""; //$NON-NLS-1$ } ; } else { titel = Messages.RnPrintView_getback; titelMahnung = ""; //$NON-NLS-1$ } text.replace("\\[Titel\\]", titel); //$NON-NLS-1$ text.replace("\\[TitelMahnung\\]", titelMahnung); //$NON-NLS-1$ if (fall.getAbrechnungsSystem().equals("IV")) { //$NON-NLS-1$ text.replace("\\[NIF\\]", TarmedRequirements.getNIF(m)); //$NON-NLS-1$ String ahv = TarmedRequirements.getAHV(fall.getPatient()); if (StringTool.isNothing(ahv)) { ahv = fall.getRequiredString("AHV-Nummer"); } text.replace("\\[F60\\]", ahv); //$NON-NLS-1$ } else { text.replace("\\[NIF\\]", TarmedRequirements.getKSK(m)); //$NON-NLS-1$ text.replace("\\[F60\\]", ""); //$NON-NLS-1$ //$NON-NLS-2$ } text.replace("\\?\\?\\??[a-zA-Z0-9 \\.]+\\?\\?\\??", ""); } private static void replace44HeaderFields(TextContainer text, Rechnung rn, Document xmlRn){ Element xmlPayload = xmlRn.getRootElement().getChild("payload", XMLExporter.nsinvoice); Element xmlInvoice = xmlPayload.getChild("invoice", XMLExporter.nsinvoice); if (xmlInvoice != null) { String requestId = xmlInvoice.getAttributeValue(XMLExporter.ATTR_REQUEST_ID); String requestDate = xmlInvoice.getAttributeValue(XMLExporter.ATTR_REQUEST_DATE); TimeTool date = new TimeTool(requestDate); text.replace( "\\[F1\\]", requestId + " - " + date.toString(TimeTool.DATE_GER) + " " + date.toString(TimeTool.TIME_FULL)); //$NON-NLS-1$ } else { text.replace("\\[F1\\]", rn.getRnId()); //$NON-NLS-1$ } } private static void replace40HeaderFields(TextContainer text, Rechnung rn, Document xmlRn){ text.replace("\\[F1\\]", rn.getRnId()); //$NON-NLS-1$ } public static String getValue(final Element s, final String field){ String ret = s.getAttributeValue(field); if (StringTool.isNothing(ret)) { return " "; //$NON-NLS-1$ } return ret; } public static String getValue(final Element s, final String field, String defaultValue){ String ret = s.getAttributeValue(field); if (StringTool.isNothing(ret)) { return defaultValue; } return ret; } public static Object print(final Object cur, final ITextPlugin p, final int size, final int align, boolean bold, final String text){ if (bold) { p.setFont("Helvetica", SWT.BOLD, size); //$NON-NLS-1$ } else { p.setFont("Helvetica", SWT.NORMAL, size); //$NON-NLS-1$ } return p.insertText(cur, text, align); } public static Object print(final Object cur, final ITextPlugin p, final boolean small, final String text){ if (small) { p.setFont("Helvetica", SWT.BOLD, 7); //$NON-NLS-1$ } else { p.setFont("Helvetica", SWT.NORMAL, 9); //$NON-NLS-1$ } return p.insertText(cur, text, SWT.LEFT); } }