/* * OffenePflege * Copyright (C) 2006-2012 Torsten Löhr * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License V2 as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; if not, write to * the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA * www.offene-pflege.de * ------------------------ * Auf deutsch (freie Übersetzung. Rechtlich gilt die englische Version) * Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, * wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, gemäß Version 2 der Lizenz. * * Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber * OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN * BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. * * Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, * schreiben Sie an die Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA. * */ package op.care.prescription; import com.jgoodies.forms.factories.CC; import com.jgoodies.forms.layout.FormLayout; import com.jidesoft.popup.JidePopup; import com.jidesoft.wizard.WizardDialog; import entity.EntityTools; import entity.nursingprocess.Intervention; import entity.nursingprocess.InterventionTools; import entity.prescription.*; import gui.GUITools; import op.OPDE; import op.care.med.prodassistant.MedProductWizard; import op.threads.DisplayMessage; import op.tools.*; import org.apache.commons.collections.Closure; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.jdesktop.swingx.JXSearchField; import org.jdesktop.swingx.prompt.PromptSupport; import org.joda.time.LocalDate; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.Query; import javax.swing.*; import javax.swing.border.TitledBorder; import javax.swing.event.CaretEvent; import java.awt.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Bei einer Verordnungsänderung wird die alte Verordnung abgesetzt und die neue Verordnung statt dessen angesetzt. BHPs werden immer erstellt. * Bei neuen Verordnungen immer für den ganzen Tag. Bei Änderung immer ab dem Moment, ab dem die neue Verordnung gilt. * * @author tloehr */ public class DlgOnDemand extends MyJDialog { private boolean ignoreEvent; private Closure actionBlock; private Prescription prescription, resultPrescription; private PrescriptionSchedule schedule; private List<GP> listAerzte; private List<Hospital> listKH; private PnlCommonTags pnlCommonTags; /** * Creates new form DlgRegular */ public DlgOnDemand(Prescription prescription, Closure actionBlock) { super(); setResizable(false); // OnDemand prescriptions have exactly ONE schedule if (prescription.getPrescriptionSchedule().isEmpty()) { PrescriptionSchedule schedule = new PrescriptionSchedule(prescription); schedule.setMorgens(BigDecimal.ZERO); schedule.setMaxAnzahl(1); schedule.setMaxEDosis(BigDecimal.ONE); schedule.setPrescription(prescription); prescription.getPrescriptionSchedule().add(schedule); } schedule = prescription.getPrescriptionSchedule().get(0); this.actionBlock = actionBlock; this.prescription = prescription; // schedules2delete = new ArrayList<PrescriptionSchedule>(); initComponents(); initDialog(); pack(); // setVisible(true); } private void txtSitActionPerformed(ActionEvent e) { if (txtSit.getText().isEmpty()) { cmbSit.setModel(new DefaultComboBoxModel()); } else { cmbSit.setModel(new DefaultComboBoxModel(SituationsTools.findSituationByText(txtSit.getText()).toArray())); } } private void saveSituation(String text) { if (text.isEmpty()) { return; } EntityManager em = OPDE.createEM(); Query query = em.createQuery("SELECT s FROM Situations s WHERE s.text = :text"); query.setParameter("text", text); if (query.getResultList().isEmpty()) { Situations neueSituation = new Situations(text); em.persist(neueSituation); cmbSit.setModel(new DefaultComboBoxModel(new Situations[]{neueSituation})); } else { cmbSit.setModel(new DefaultComboBoxModel(query.getResultList().toArray())); } em.close(); } private ListCellRenderer getRenderer() { return (jList, o, i, isSelected, cellHasFocus) -> { String text; if (o == null) { text = "<i>" + SYSTools.xx("nursingrecords.prescription.dlgOnDemand.noOutcomeCheck") + "</i>"; } else if (o instanceof BigDecimal) { if (o.equals(new BigDecimal("0.5"))) { text = "½ " + SYSTools.xx("misc.msg.Hour"); } else if (o.equals(BigDecimal.ONE)) { text = "1 " + SYSTools.xx("misc.msg.Hour"); } else { text = o.toString() + " " + SYSTools.xx("misc.msg.Hours"); } } else { text = o.toString(); } return new DefaultListCellRenderer().getListCellRendererComponent(jList, SYSTools.toHTMLForScreen(text), i, isSelected, cellHasFocus); }; } private void btnSituationActionPerformed(ActionEvent e) { final JidePopup popup = new JidePopup(); popup.getContentPane().setLayout(new BoxLayout(popup.getContentPane(), BoxLayout.LINE_AXIS)); final JTextField editor = new JTextField(txtSit.getText(), 30); editor.addActionListener(actionEvent -> { saveSituation(editor.getText()); popup.hidePopup(); }); popup.getContentPane().add(new JScrollPane(editor)); JButton saveButton = new JButton(SYSConst.icon22apply); saveButton.addActionListener(actionEvent -> { saveSituation(editor.getText()); popup.hidePopup(); }); popup.setMovable(false); popup.setOwner(btnAddSit); popup.removeExcludedComponent(btnAddSit); popup.getContentPane().add(saveButton); popup.setDefaultFocusComponent(editor); GUITools.showPopup(popup, SwingConstants.SOUTH_WEST); } private void cmbSitPropertyChange(PropertyChangeEvent e) { cmbSitItemStateChanged(null); } private void txtMedActionPerformed(ActionEvent e) { if (txtMed.getText().isEmpty()) { cmbMed.setModel(new DefaultComboBoxModel()); cmbIntervention.setEnabled(true); txtIntervention.setEnabled(true); } else { EntityManager em = OPDE.createEM(); String pzn = null; try { pzn = MedPackageTools.parsePZN(txtMed.getText()); } catch (NumberFormatException nfe) { OPDE.getDisplayManager().addSubMessage(new DisplayMessage(nfe.getMessage(), DisplayMessage.WARNING)); pzn = null; } if (pzn != null) { Query pznQuery = em.createQuery("SELECT m FROM MedPackage m WHERE m.pzn = :pzn"); pznQuery.setParameter("pzn", pzn); try { MedPackage medPackage = (MedPackage) pznQuery.getSingleResult(); cmbMed.setModel(new DefaultComboBoxModel(new TradeForm[]{medPackage.getTradeForm()})); } catch (NoResultException nre) { OPDE.debug("nothing found for this PZN"); } catch (Exception ex) { OPDE.fatal(ex); } } else { // no PZN, a Stock maybe ? or just a text MedStock potentialStock = null; try { long potentialStockID = Integer.parseInt(txtMed.getText()); potentialStock = EntityTools.find(MedStock.class, potentialStockID); } catch (NumberFormatException e1) { // noch stockid then } if (potentialStock != null && potentialStock.getInventory().getResident().equals(prescription.getResident()) && !potentialStock.isClosed()) { cmbMed.setModel(new DefaultComboBoxModel(new TradeForm[]{potentialStock.getTradeForm()})); } else { cmbMed.setModel(new DefaultComboBoxModel(TradeFormTools.findTradeFormByMedProductText(em, txtMed.getText()).toArray())); } } em.close(); if (cmbMed.getModel().getSize() > 0) { cmbMedItemStateChanged(null); } else { cmbMed.setToolTipText(""); cmbIntervention.setSelectedIndex(-1); cmbIntervention.setEnabled(true); txtIntervention.setEnabled(true); } } } private void rbActiveItemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { txtOFF.setText(null); } } private void rbDateItemStateChanged(ItemEvent e) { txtOFF.setEnabled(e.getStateChange() == ItemEvent.SELECTED); if (e.getStateChange() == ItemEvent.SELECTED) { txtOFF.setText(DateFormat.getDateInstance().format(new Date())); } } private void txtMaxTimesActionPerformed(ActionEvent e) { txtEDosis.requestFocus(); } private void txtMaxTimesFocusGained(FocusEvent e) { SYSTools.markAllTxt((JTextField) e.getSource()); } private void txtEDosisFocusGained(FocusEvent e) { SYSTools.markAllTxt((JTextField) e.getSource()); } private void txtOFFFocusLost(FocusEvent evt) { SYSCalendar.handleDateFocusLost(evt, new LocalDate(), new LocalDate().plusYears(1)); } private void txtMaxTimesFocusLost(FocusEvent e) { SYSTools.handleIntegerFocusLost(e, 1, 20, 1); } private void txtEDosisFocusLost(FocusEvent e) { SYSTools.handleBigDecimalFocusLost(e, new BigDecimal(BigInteger.ZERO), new BigDecimal(1000), BigDecimal.ONE); } private void txtEDosisActionPerformed(ActionEvent e) { txtMaxTimes.requestFocus(); } private void cmbDocONKeyPressed(KeyEvent e) { final String searchKey = String.valueOf(e.getKeyChar()); GP doc = (GP) CollectionUtils.find(listAerzte, o -> o != null && ((GP) o).getName().toLowerCase().charAt(0) == searchKey.toLowerCase().charAt(0)); if (doc != null) { cmbDocON.setSelectedItem(doc); } } private void thisWindowClosing(WindowEvent e) { prescription = null; // fixes #22 } private void txtMassActionPerformed(ActionEvent e) { cmbIntervention.setModel(new DefaultComboBoxModel(InterventionTools.findBy(InterventionTools.TYPE_PRESCRIPTION, txtIntervention.getText()).toArray())); } /** * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the PrinterForm Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new JPanel(); txtMed = new JXSearchField(); cmbMed = new JComboBox<>(); panel4 = new JPanel(); btnMedWizard = new JButton(); cmbIntervention = new JComboBox<>(); txtSit = new JXSearchField(); cmbSit = new JComboBox<>(); panel3 = new JPanel(); btnAddSit = new JButton(); txtIntervention = new JXSearchField(); jPanel2 = new JPanel(); lblNumber = new JLabel(); lblDose = new JLabel(); lblMaxPerDay = new JLabel(); txtMaxTimes = new JTextField(); lblX = new JLabel(); txtEDosis = new JTextField(); lblCheckResultAfter = new JLabel(); cmbCheckAfter = new JComboBox<>(); jPanel3 = new JPanel(); pnlOFF = new JPanel(); rbActive = new JRadioButton(); rbDate = new JRadioButton(); txtOFF = new JTextField(); jScrollPane3 = new JScrollPane(); txtBemerkung = new JTextPane(); lblText = new JLabel(); pnlON = new JPanel(); cmbDocON = new JComboBox<>(); cmbHospitalON = new JComboBox<>(); panel1 = new JPanel(); btnClose = new JButton(); btnSave = new JButton(); //======== this ======== setModalityType(Dialog.ModalityType.APPLICATION_MODAL); setResizable(false); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { thisWindowClosing(e); } }); Container contentPane = getContentPane(); contentPane.setLayout(new FormLayout( "14dlu, $lcgap, default, 6dlu, 355dlu, $lcgap, 14dlu", "14dlu, $lgap, fill:default:grow, $lgap, fill:default, $lgap, 14dlu")); //======== jPanel1 ======== { jPanel1.setBorder(null); jPanel1.setLayout(new FormLayout( "68dlu, $lcgap, pref:grow, $lcgap, pref", "3*(16dlu, $lgap), default, $lgap, fill:113dlu:grow, $lgap, 60dlu")); //---- txtMed ---- txtMed.setFont(new Font("Arial", Font.PLAIN, 14)); txtMed.setPrompt("Medikamente"); txtMed.setFocusBehavior(PromptSupport.FocusBehavior.HIGHLIGHT_PROMPT); txtMed.addActionListener(e -> txtMedActionPerformed(e)); txtMed.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { txtMedFocusGained(e); } }); jPanel1.add(txtMed, CC.xy(1, 1)); //---- cmbMed ---- cmbMed.setModel(new DefaultComboBoxModel<>(new String[]{ "Item 1", "Item 2", "Item 3", "Item 4" })); cmbMed.setFont(new Font("Arial", Font.PLAIN, 14)); cmbMed.addItemListener(e -> cmbMedItemStateChanged(e)); jPanel1.add(cmbMed, CC.xy(3, 1)); //======== panel4 ======== { panel4.setLayout(new BoxLayout(panel4, BoxLayout.LINE_AXIS)); //---- btnMedWizard ---- btnMedWizard.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png"))); btnMedWizard.setBorderPainted(false); btnMedWizard.setBorder(null); btnMedWizard.setContentAreaFilled(false); btnMedWizard.setToolTipText("Neues Medikament eintragen"); btnMedWizard.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnMedWizard.setSelectedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add-pressed.png"))); btnMedWizard.addActionListener(e -> btnMedActionPerformed(e)); panel4.add(btnMedWizard); } jPanel1.add(panel4, CC.xy(5, 1)); //---- cmbIntervention ---- cmbIntervention.setModel(new DefaultComboBoxModel<>(new String[]{ "Item 1", "Item 2", "Item 3", "Item 4" })); cmbIntervention.setFont(new Font("Arial", Font.PLAIN, 14)); jPanel1.add(cmbIntervention, CC.xywh(3, 5, 3, 1)); //---- txtSit ---- txtSit.setPrompt("Situationen"); txtSit.setFont(new Font("Arial", Font.PLAIN, 14)); txtSit.addActionListener(e -> txtSitActionPerformed(e)); jPanel1.add(txtSit, CC.xy(1, 3)); //---- cmbSit ---- cmbSit.setModel(new DefaultComboBoxModel<>(new String[]{ "Item 1", "Item 2", "Item 3", "Item 4" })); cmbSit.setFont(new Font("Arial", Font.PLAIN, 14)); cmbSit.addItemListener(e -> cmbSitItemStateChanged(e)); cmbSit.addPropertyChangeListener("model", e -> cmbSitPropertyChange(e)); jPanel1.add(cmbSit, CC.xy(3, 3)); //======== panel3 ======== { panel3.setLayout(new BoxLayout(panel3, BoxLayout.LINE_AXIS)); //---- btnAddSit ---- btnAddSit.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png"))); btnAddSit.setBorderPainted(false); btnAddSit.setBorder(null); btnAddSit.setContentAreaFilled(false); btnAddSit.setToolTipText("Neue Situation eintragen"); btnAddSit.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnAddSit.setSelectedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add-pressed.png"))); btnAddSit.addActionListener(e -> btnSituationActionPerformed(e)); panel3.add(btnAddSit); } jPanel1.add(panel3, CC.xy(5, 3, CC.RIGHT, CC.DEFAULT)); //---- txtIntervention ---- txtIntervention.setFont(new Font("Arial", Font.PLAIN, 14)); txtIntervention.setPrompt("Massnahmen"); txtIntervention.addActionListener(e -> txtMassActionPerformed(e)); jPanel1.add(txtIntervention, CC.xy(1, 5)); //======== jPanel2 ======== { jPanel2.setLayout(new FormLayout( "default, $lcgap, pref, $lcgap, default, $lcgap, 37dlu:grow", "23dlu, fill:22dlu, $ugap, default")); //---- lblNumber ---- lblNumber.setText("Anzahl"); jPanel2.add(lblNumber, CC.xy(3, 1)); //---- lblDose ---- lblDose.setText("Dosis"); jPanel2.add(lblDose, CC.xy(7, 1, CC.CENTER, CC.DEFAULT)); //---- lblMaxPerDay ---- lblMaxPerDay.setText("Max. Tagesdosis:"); jPanel2.add(lblMaxPerDay, CC.xy(1, 2)); //---- txtMaxTimes ---- txtMaxTimes.setHorizontalAlignment(SwingConstants.CENTER); txtMaxTimes.setText("1"); txtMaxTimes.addActionListener(e -> txtMaxTimesActionPerformed(e)); txtMaxTimes.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { txtMaxTimesFocusGained(e); } @Override public void focusLost(FocusEvent e) { txtMaxTimesFocusLost(e); } }); jPanel2.add(txtMaxTimes, CC.xy(3, 2)); //---- lblX ---- lblX.setText("x"); jPanel2.add(lblX, CC.xy(5, 2)); //---- txtEDosis ---- txtEDosis.setHorizontalAlignment(SwingConstants.CENTER); txtEDosis.setText("1.0"); txtEDosis.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { txtEDosisFocusGained(e); } @Override public void focusLost(FocusEvent e) { txtEDosisFocusLost(e); } }); txtEDosis.addActionListener(e -> txtEDosisActionPerformed(e)); jPanel2.add(txtEDosis, CC.xy(7, 2)); //---- lblCheckResultAfter ---- lblCheckResultAfter.setText("Nachkontrolle:"); jPanel2.add(lblCheckResultAfter, CC.xy(1, 4)); //---- cmbCheckAfter ---- cmbCheckAfter.setModel(new DefaultComboBoxModel<>(new String[]{ "keine Nachkontrolle", "nach 1 Stunde", "nach 2 Stunden", "nach 3 Stunden" })); jPanel2.add(cmbCheckAfter, CC.xywh(3, 4, 5, 1)); } jPanel1.add(jPanel2, CC.xywh(1, 9, 5, 1, CC.CENTER, CC.TOP)); } contentPane.add(jPanel1, CC.xy(5, 3)); //======== jPanel3 ======== { jPanel3.setBorder(null); jPanel3.setLayout(new FormLayout( "149dlu", "3*(fill:default, $lgap), fill:100dlu:grow")); //======== pnlOFF ======== { pnlOFF.setBorder(new TitledBorder("Absetzung")); pnlOFF.setLayout(new FormLayout( "pref, 86dlu:grow", "fill:17dlu, $lgap, fill:17dlu")); //---- rbActive ---- rbActive.setText("text"); rbActive.setSelected(true); rbActive.addItemListener(e -> rbActiveItemStateChanged(e)); pnlOFF.add(rbActive, CC.xywh(1, 1, 2, 1)); //---- rbDate ---- rbDate.setText(null); rbDate.addItemListener(e -> rbDateItemStateChanged(e)); pnlOFF.add(rbDate, CC.xy(1, 3)); //---- txtOFF ---- txtOFF.setEnabled(false); txtOFF.setFont(new Font("Arial", Font.PLAIN, 14)); txtOFF.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { txtOFFFocusLost(e); } }); pnlOFF.add(txtOFF, CC.xy(2, 3)); } jPanel3.add(pnlOFF, CC.xy(1, 3)); //======== jScrollPane3 ======== { //---- txtBemerkung ---- txtBemerkung.addCaretListener(e -> txtBemerkungCaretUpdate(e)); jScrollPane3.setViewportView(txtBemerkung); } jPanel3.add(jScrollPane3, CC.xy(1, 7)); //---- lblText ---- lblText.setText("Bemerkung:"); jPanel3.add(lblText, CC.xy(1, 5)); //======== pnlON ======== { pnlON.setBorder(new TitledBorder("Ansetzung")); pnlON.setLayout(new FormLayout( "119dlu:grow", "17dlu, $lgap, fill:17dlu")); //---- cmbDocON ---- cmbDocON.setModel(new DefaultComboBoxModel<>(new String[]{ "Item 1", "Item 2", "Item 3", "Item 4" })); cmbDocON.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { cmbDocONKeyPressed(e); } }); pnlON.add(cmbDocON, CC.xy(1, 1)); //---- cmbHospitalON ---- cmbHospitalON.setModel(new DefaultComboBoxModel<>(new String[]{ "Item 1", "Item 2", "Item 3", "Item 4" })); pnlON.add(cmbHospitalON, CC.xy(1, 3)); } jPanel3.add(pnlON, CC.xy(1, 1)); } contentPane.add(jPanel3, CC.xy(3, 3)); //======== panel1 ======== { panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS)); //---- btnClose ---- btnClose.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/cancel.png"))); btnClose.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnClose.addActionListener(e -> btnCloseActionPerformed(e)); panel1.add(btnClose); //---- btnSave ---- btnSave.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/apply.png"))); btnSave.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnSave.addActionListener(e -> btnSaveActionPerformed(e)); panel1.add(btnSave); } contentPane.add(panel1, CC.xy(5, 5, CC.RIGHT, CC.DEFAULT)); setSize(1035, 515); setLocationRelativeTo(getOwner()); //---- bgMedikament ---- ButtonGroup bgMedikament = new ButtonGroup(); bgMedikament.add(rbActive); bgMedikament.add(rbDate); }// </editor-fold>//GEN-END:initComponents public void initDialog() { fillComboBoxes(); ignoreEvent = true; lblCheckResultAfter.setText(SYSTools.xx("nursingrecords.prescription.dlgOnDemand.outcomeCheck") + ":"); rbActive.setText(SYSTools.xx("nursingrecords.prescription.dlgOnDemand.rbActive")); txtMed.setText(""); txtEDosis.setText(SYSTools.formatBigDecimal(BigDecimal.ONE)); cmbMed.setRenderer(TradeFormTools.getRenderer(TradeFormTools.LONG)); cmbMed.setModel(new DefaultComboBoxModel()); cmbDocON.setSelectedItem(prescription.getDocON()); cmbHospitalON.setSelectedItem(prescription.getHospitalON()); txtBemerkung.setText(SYSTools.catchNull(prescription.getText())); if (prescription.hasMed()) { cmbMed.setModel(new DefaultComboBoxModel(new TradeForm[]{prescription.getTradeForm()})); } cmbIntervention.setModel(new DefaultComboBoxModel(InterventionTools.findBy(InterventionTools.TYPE_PRESCRIPTION).toArray())); cmbIntervention.setRenderer(InterventionTools.getRenderer()); cmbIntervention.setEnabled(cmbMed.getModel().getSize() == 0); txtIntervention.setEnabled(cmbIntervention.isEnabled()); cmbIntervention.setSelectedItem(prescription.getIntervention()); cmbCheckAfter.setSelectedItem(schedule.getCheckAfterHours()); cmbSit.setRenderer(SituationsTools.getSituationenRenderer()); cmbSit.setModel(new DefaultComboBoxModel(new Situations[]{prescription.getSituation()})); txtSit.setText(""); txtMaxTimes.setText(schedule.getMaxAnzahl().toString()); txtEDosis.setText(SYSTools.formatBigDecimal(schedule.getMaxEDosis().setScale(2, RoundingMode.HALF_UP))); pnlCommonTags = new PnlCommonTags(prescription.getCommontags(), true, 3); jPanel1.add(new JScrollPane(pnlCommonTags), CC.xyw(1, 11, 5)); ignoreEvent = false; txtMed.requestFocus(); } private void txtMedFocusGained(FocusEvent evt) {//GEN-FIRST:event_txtMedFocusGained SYSTools.markAllTxt(txtMed); }//GEN-LAST:event_txtMedFocusGained private void btnMedActionPerformed(ActionEvent evt) {//GEN-FIRST:event_btnMedActionPerformed // String pzan = MedPackageTools.parsePZN(txtMed.getText()); final JidePopup popup = new JidePopup(); WizardDialog wizard = new MedProductWizard(o -> { if (o != null) { MedPackage aPackage = (MedPackage) o; txtMed.setText(aPackage.getPzn()); } popup.hidePopup(); }).getWizard(); popup.setMovable(false); popup.setPreferredSize((new Dimension(800, 450))); popup.setResizable(false); popup.getContentPane().setLayout(new BoxLayout(popup.getContentPane(), BoxLayout.LINE_AXIS)); popup.getContentPane().add(wizard.getContentPane()); popup.setOwner(btnMedWizard); popup.removeExcludedComponent(btnMedWizard); popup.setTransient(true); popup.setDefaultFocusComponent(wizard.getContentPane()); popup.showPopup(new Insets(-5, wizard.getPreferredSize().width * -1 - 200, -5, -100), btnMedWizard); }//GEN-LAST:event_btnMedActionPerformed private void cmbMedItemStateChanged(ItemEvent evt) {//GEN-FIRST:event_cmbMedItemStateChanged cmbIntervention.setModel(new DefaultComboBoxModel(InterventionTools.findBy(InterventionTools.TYPE_PRESCRIPTION).toArray())); cmbIntervention.setSelectedItem(((TradeForm) cmbMed.getSelectedItem()).getDosageForm().getIntervention()); cmbIntervention.setEnabled(false); txtIntervention.setText(null); txtIntervention.setEnabled(false); }//GEN-LAST:event_cmbMedItemStateChanged private boolean saveOK() { if (ignoreEvent) return false; boolean OnOK = (cmbDocON.getSelectedIndex() > 0 || cmbHospitalON.getSelectedIndex() > 0); // boolean OffOK = rbActive.isSelected() || jdcAB.getDate() != null; boolean sitOK = cmbSit.getSelectedItem() != null; boolean medOK = cmbMed.getModel().getSize() == 0 || cmbMed.getSelectedItem() != null; boolean intervOK = cmbIntervention.getSelectedItem() != null; boolean doseOK = true; try { BigDecimal parsedDecimal = SYSTools.parseDecimal(txtEDosis.getText()); if (parsedDecimal == null || parsedDecimal.equals(BigDecimal.ZERO)) { throw new NumberFormatException("Alle Dosierungen sind 0."); } if (Integer.parseInt(txtMaxTimes.getText()) == 0) { throw new NumberFormatException("Die Anzahl ist Null."); } } catch (NumberFormatException nfe) { doseOK = false; } String reason = ""; reason += (OnOK ? "" : SYSTools.xx("nursingrecords.prescription.dlgOnDemand.NotOnOK") + " "); reason += (medOK ? "" : SYSTools.xx("nursingrecords.prescription.dlgOnDemand.NotMedOK") + " "); reason += (sitOK ? "" : SYSTools.xx("nursingrecords.prescription.dlgOnDemand.NotSitOK") + " "); reason += (intervOK ? "" : SYSTools.xx("nursingrecords.prescription.dlgOnDemand.NotIntervOK") + " "); reason += (doseOK ? "" : SYSTools.xx("nursingrecords.prescription.dlgOnDemand.NotDoseOK") + " "); if (!reason.isEmpty()) { OPDE.getDisplayManager().addSubMessage(new DisplayMessage(reason, DisplayMessage.WARNING)); } return OnOK & medOK & intervOK & doseOK & sitOK; } private void btnSaveActionPerformed(ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed if (save()) { resultPrescription = prescription; dispose(); } }//GEN-LAST:event_btnSaveActionPerformed @Override public void dispose() { actionBlock.execute(resultPrescription); SYSTools.unregisterListeners(this); super.dispose(); } private void cmbSitItemStateChanged(ItemEvent evt) {//GEN-FIRST:event_cmbSitItemStateChanged if (ignoreEvent) return; // saveOK(); }//GEN-LAST:event_cmbSitItemStateChanged private void txtBemerkungCaretUpdate(CaretEvent evt) {//GEN-FIRST:event_txtBemerkungCaretUpdate }//GEN-LAST:event_txtBemerkungCaretUpdate private boolean save() { if (!saveOK()) return false; schedule.setNachtMo(BigDecimal.ZERO); schedule.setMorgens(BigDecimal.ZERO); schedule.setMittags(BigDecimal.ZERO); schedule.setNachmittags(BigDecimal.ZERO); schedule.setAbends(BigDecimal.ZERO); schedule.setNachtAb(BigDecimal.ZERO); schedule.setUhrzeitDosis(BigDecimal.ZERO); schedule.setUhrzeit(null); schedule.setTaeglich((short) 0); schedule.setWoechentlich((short) 0); schedule.setMonatlich((short) 0); schedule.setLDatum(new Date()); schedule.setMon((short) 0); schedule.setTue((short) 0); schedule.setWed((short) 0); schedule.setThu((short) 0); schedule.setFri((short) 0); schedule.setSat((short) 0); schedule.setSun((short) 0); schedule.setTagNum((short) 0); schedule.setCheckAfterHours((BigDecimal) cmbCheckAfter.getSelectedItem()); schedule.setMaxEDosis(SYSTools.parseDecimal(txtEDosis.getText())); schedule.setMaxAnzahl(Integer.parseInt(txtMaxTimes.getText())); prescription.setHospitalON((Hospital) cmbHospitalON.getSelectedItem()); prescription.setIntervention((Intervention) cmbIntervention.getSelectedItem()); prescription.setShowOnDailyPlan(false); prescription.setSituation((Situations) cmbSit.getSelectedItem()); prescription.setText(txtBemerkung.getText().trim()); prescription.setTradeForm((TradeForm) cmbMed.getSelectedItem()); prescription.setUserON(OPDE.getLogin().getUser()); prescription.setDocON((GP) cmbDocON.getSelectedItem()); prescription.setFrom(new LocalDate().toDate()); if (rbDate.isSelected()) { prescription.setTo(SYSCalendar.eod(new LocalDate(SYSCalendar.parseDate(txtOFF.getText()))).toDate()); prescription.setUserOFF(OPDE.getLogin().getUser()); prescription.setHospitalOFF(prescription.getHospitalON()); prescription.setDocOFF(prescription.getDocON()); prescription.setTo(SYSConst.DATE_UNTIL_FURTHER_NOTICE); } else { prescription.setHospitalOFF(null); prescription.setDocOFF(null); prescription.setTo(SYSConst.DATE_UNTIL_FURTHER_NOTICE); } prescription.setUntilEndOfPackage(false); prescription.getPrescriptionSchedule().clear(); prescription.getPrescriptionSchedule().add(schedule); prescription.getCommontags().clear(); prescription.getCommontags().addAll(pnlCommonTags.getListSelectedTags()); return true; } private void btnCloseActionPerformed(ActionEvent evt) {//GEN-FIRST:event_btnCloseActionPerformed resultPrescription = null; dispose(); }//GEN-LAST:event_btnCloseActionPerformed private void fillComboBoxes() { EntityManager em = OPDE.createEM(); Query queryArzt = em.createQuery("SELECT a FROM GP a WHERE a.status >= 0 ORDER BY a.name, a.vorname"); listAerzte = queryArzt.getResultList(); listAerzte.add(0, null); Query queryKH = em.createQuery("SELECT k FROM Hospital k WHERE k.state >= 0 ORDER BY k.name"); listKH = queryKH.getResultList(); listKH.add(0, null); em.close(); cmbDocON.setModel(new DefaultComboBoxModel(listAerzte.toArray())); cmbDocON.setRenderer(GPTools.getRenderer()); cmbDocON.setSelectedIndex(0); cmbHospitalON.setModel(new DefaultComboBoxModel(listKH.toArray())); cmbHospitalON.setRenderer(HospitalTools.getKHRenderer()); cmbHospitalON.setSelectedIndex(0); cmbCheckAfter.setModel(new DefaultComboBoxModel(new BigDecimal[]{null, new BigDecimal("0.5"), new BigDecimal("1"), new BigDecimal("2"), new BigDecimal("3"), new BigDecimal("4"), new BigDecimal("5"), new BigDecimal("6"), new BigDecimal("8"), new BigDecimal("12"), new BigDecimal("18"), new BigDecimal("24")})); cmbCheckAfter.setRenderer(getRenderer()); } // Variables declaration - do not modify//GEN-BEGIN:variables private JPanel jPanel1; private JXSearchField txtMed; private JComboBox<String> cmbMed; private JPanel panel4; private JButton btnMedWizard; private JComboBox<String> cmbIntervention; private JXSearchField txtSit; private JComboBox<String> cmbSit; private JPanel panel3; private JButton btnAddSit; private JXSearchField txtIntervention; private JPanel jPanel2; private JLabel lblNumber; private JLabel lblDose; private JLabel lblMaxPerDay; private JTextField txtMaxTimes; private JLabel lblX; private JTextField txtEDosis; private JLabel lblCheckResultAfter; private JComboBox<String> cmbCheckAfter; private JPanel jPanel3; private JPanel pnlOFF; private JRadioButton rbActive; private JRadioButton rbDate; private JTextField txtOFF; private JScrollPane jScrollPane3; private JTextPane txtBemerkung; private JLabel lblText; private JPanel pnlON; private JComboBox<String> cmbDocON; private JComboBox<String> cmbHospitalON; private JPanel panel1; private JButton btnClose; private JButton btnSave; // End of variables declaration//GEN-END:variables }