/*
* 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.residents.PnlEditGP;
import op.residents.PnlEditHospital;
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 tablerenderer.RNDHTML;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
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 DlgRegular extends MyJDialog {
public static final int MODE_EDIT = 0;
public static final int MODE_CHANGE = 1;
public static final int MODE_NEW = 2;
private boolean ignoreEvent;
private List<GP> listAerzte;
private List<Hospital> listKH;
private JPopupMenu menu;
private int editMode;
private Closure actionBlock;
private Prescription prescription, resultPrescription;
private List<PrescriptionSchedule> schedules2delete = null;
// private Pair<Prescription, List<PrescriptionSchedule>> returnPackage = null;
private JToggleButton tbDailyPlan;
private PnlCommonTags pnlCommonTags;
/**
* Creates new form DlgRegular
*/
public DlgRegular(Prescription prescription, int mode, Closure actionBlock) {
super();
setResizable(false);
this.actionBlock = actionBlock;
this.prescription = prescription;
schedules2delete = new ArrayList<PrescriptionSchedule>();
this.editMode = mode;
initComponents();
initDialog();
pack();
// setVisible(true);
}
private void btnAddDosisActionPerformed(ActionEvent e) {
final JidePopup popup = new JidePopup();
JPanel dlg = new PnlScheduleDose(new PrescriptionSchedule(prescription), o -> {
if (o != null) {
prescription.getPrescriptionSchedule().add(((PrescriptionSchedule) o));
reloadTable();
popup.hidePopup();
}
});
popup.setMovable(false);
popup.getContentPane().setLayout(new BoxLayout(popup.getContentPane(), BoxLayout.LINE_AXIS));
popup.getContentPane().add(dlg);
popup.setOwner(btnAddDosis);
popup.removeExcludedComponent(btnAddDosis);
popup.setDefaultFocusComponent(dlg);
GUITools.showPopup(popup, SwingConstants.NORTH);
}
private void txtMedActionPerformed(ActionEvent e) {
if (txtMed.getText().isEmpty()) {
cmbMed.setModel(new DefaultComboBoxModel());
cmbIntervention.setEnabled(true);
txtIntervention.setEnabled(true);
tbDailyPlan.setEnabled(true);
tbDailyPlan.setSelected(false);
rbEndOfPackage.setEnabled(false);
} 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);
// tbWeightControl.setEnabled(true);
// tbWeightControl.setSelected(false);
} else {
cmbMed.setToolTipText("");
cmbIntervention.setSelectedIndex(-1);
cmbIntervention.setEnabled(true);
txtIntervention.setEnabled(true);
tbDailyPlan.setEnabled(true);
tbDailyPlan.setSelected(false);
OPDE.getDisplayManager().clearSubMessages();
}
rbEndOfPackage.setEnabled(prescription.getResident().isCalcMediUPR1() && cmbMed.getModel().getSize() > 0);
}
}
private void rbActiveItemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
txtTo.setText("");
}
}
private void rbDateItemStateChanged(ItemEvent e) {
txtTo.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
if (e.getStateChange() == ItemEvent.SELECTED) {
txtTo.setText(DateFormat.getDateInstance().format(new Date()));
}
}
private void rbEndOfPackageItemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
txtTo.setText("");
}
}
private void txtToFocusLost(FocusEvent evt) {
SYSCalendar.handleDateFocusLost(evt, new LocalDate(), new LocalDate().plusYears(1));
}
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 btnAddGPActionPerformed(ActionEvent e) {
final PnlEditGP pnlGP = new PnlEditGP(new GP());
JidePopup popup = GUITools.createPanelPopup(pnlGP, o -> {
if (o != null) {
cmbDocON.setModel(new DefaultComboBoxModel(new GP[]{(GP) o}));
}
}, btnAddGP);
GUITools.showPopup(popup, SwingConstants.EAST);
}
private void btnAddHospitalActionPerformed(ActionEvent e) {
final PnlEditHospital pnlHospital = new PnlEditHospital(new Hospital());
JidePopup popup = GUITools.createPanelPopup(pnlHospital, o -> {
if (o != null) {
cmbHospitalON.setModel(new DefaultComboBoxModel(new Hospital[]{(Hospital) o}));
}
}, btnAddHospital);
GUITools.showPopup(popup, SwingConstants.EAST);
}
private void thisWindowClosing(WindowEvent e) {
resultPrescription = null;
// the red button was pressed
// 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();
btnMed = new JButton();
cmbIntervention = new JComboBox<>();
txtIntervention = new JXSearchField();
jPanel8 = new JPanel();
jspDosis = new JScrollPane();
tblDosis = new JTable();
panel2 = new JPanel();
btnAddDosis = new JButton();
jPanel3 = new JPanel();
pnlOFF = new JPanel();
rbActive = new JRadioButton();
rbDate = new JRadioButton();
txtTo = new JTextField();
rbEndOfPackage = new JRadioButton();
jScrollPane3 = new JScrollPane();
txtBemerkung = new JTextPane();
lblText = new JLabel();
pnlON = new JPanel();
cmbDocON = new JComboBox<>();
btnAddGP = new JButton();
cmbHospitalON = new JComboBox<>();
btnAddHospital = new JButton();
panel1 = new JPanel();
btnClose = new JButton();
btnSave = new JButton();
lblTX = new JLabel();
//======== 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(
"$rgap, $lcgap, default, $lcgap, pref, $lcgap, $rgap",
"$rgap, $lgap, fill:default:grow, $lgap, fill:default, $lgap, $rgap"));
//======== jPanel1 ========
{
jPanel1.setBorder(null);
jPanel1.setLayout(new FormLayout(
"68dlu, $lcgap, 284dlu, $lcgap, pref",
"2*(16dlu, $lgap), default, $lgap, fill:default:grow"));
//---- 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));
//---- btnMed ----
btnMed.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png")));
btnMed.setBorderPainted(false);
btnMed.setBorder(null);
btnMed.setContentAreaFilled(false);
btnMed.setToolTipText("Neues Medikament eintragen");
btnMed.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnMed.setSelectedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add-pressed.png")));
btnMed.addActionListener(e -> btnMedActionPerformed(e));
panel4.add(btnMed);
}
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, 3, 3, 1));
//---- txtIntervention ----
txtIntervention.setFont(new Font("Arial", Font.PLAIN, 14));
txtIntervention.setPrompt("Massnahmen");
txtIntervention.addActionListener(e -> txtMassActionPerformed(e));
jPanel1.add(txtIntervention, CC.xy(1, 3));
//======== jPanel8 ========
{
jPanel8.setBorder(new TitledBorder(null, "Dosis / H\u00e4ufigkeit", TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION,
new Font("Arial", Font.PLAIN, 14)));
jPanel8.setFont(new Font("Arial", Font.PLAIN, 14));
jPanel8.setLayout(new FormLayout(
"370dlu",
"fill:default:grow, $lgap, pref"));
//======== jspDosis ========
{
jspDosis.setToolTipText(null);
//---- tblDosis ----
tblDosis.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
},
new String[] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
tblDosis.setSurrendersFocusOnKeystroke(true);
tblDosis.setToolTipText(null);
tblDosis.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
tblDosisMousePressed(e);
}
});
jspDosis.setViewportView(tblDosis);
}
jPanel8.add(jspDosis, CC.xy(1, 1));
//======== panel2 ========
{
panel2.setLayout(new BoxLayout(panel2, BoxLayout.LINE_AXIS));
//---- btnAddDosis ----
btnAddDosis.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png")));
btnAddDosis.setBorderPainted(false);
btnAddDosis.setBorder(null);
btnAddDosis.setContentAreaFilled(false);
btnAddDosis.setToolTipText("Neue Dosierung eintragen");
btnAddDosis.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnAddDosis.setSelectedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add-pressed.png")));
btnAddDosis.addActionListener(e -> btnAddDosisActionPerformed(e));
panel2.add(btnAddDosis);
}
jPanel8.add(panel2, CC.xy(1, 3, CC.LEFT, CC.DEFAULT));
}
jPanel1.add(jPanel8, CC.xywh(1, 7, 5, 1));
}
contentPane.add(jPanel1, CC.xy(5, 3));
//======== jPanel3 ========
{
jPanel3.setBorder(null);
jPanel3.setLayout(new FormLayout(
"149dlu",
"3*(fill:default, $lgap), fill:108dlu:grow, $lgap, 60dlu"));
//======== pnlOFF ========
{
pnlOFF.setBorder(new TitledBorder("Absetzung"));
pnlOFF.setLayout(new FormLayout(
"pref, 86dlu:grow",
"2*(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));
//---- txtTo ----
txtTo.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
txtToFocusLost(e);
}
});
pnlOFF.add(txtTo, CC.xy(2, 3));
//---- rbEndOfPackage ----
rbEndOfPackage.setText("text");
rbEndOfPackage.addItemListener(e -> rbEndOfPackageItemStateChanged(e));
pnlOFF.add(rbEndOfPackage, CC.xywh(1, 5, 2, 1));
}
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, $lcgap, default",
"default, $lgap, default"));
//---- 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));
//---- btnAddGP ----
btnAddGP.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png")));
btnAddGP.setBorderPainted(false);
btnAddGP.setBorder(null);
btnAddGP.setContentAreaFilled(false);
btnAddGP.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnAddGP.setSelectedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add-pressed.png")));
btnAddGP.addActionListener(e -> btnAddGPActionPerformed(e));
pnlON.add(btnAddGP, CC.xy(3, 1));
//---- cmbHospitalON ----
cmbHospitalON.setModel(new DefaultComboBoxModel<>(new String[] {
"Item 1",
"Item 2",
"Item 3",
"Item 4"
}));
pnlON.add(cmbHospitalON, CC.xy(1, 3));
//---- btnAddHospital ----
btnAddHospital.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png")));
btnAddHospital.setBorderPainted(false);
btnAddHospital.setBorder(null);
btnAddHospital.setContentAreaFilled(false);
btnAddHospital.setToolTipText("Neues Medikament eintragen");
btnAddHospital.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnAddHospital.setSelectedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add-pressed.png")));
btnAddHospital.addActionListener(e -> btnAddHospitalActionPerformed(e));
pnlON.add(btnAddHospital, CC.xy(3, 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));
//---- lblTX ----
lblTX.setText(null);
lblTX.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/ambulance2.png")));
contentPane.add(lblTX, CC.xy(3, 5));
setSize(1015, 585);
setLocationRelativeTo(getOwner());
//---- bgMedikament ----
ButtonGroup bgMedikament = new ButtonGroup();
bgMedikament.add(rbActive);
bgMedikament.add(rbDate);
bgMedikament.add(rbEndOfPackage);
}// </editor-fold>//GEN-END:initComponents
public void initDialog() {
fillComboBoxes();
String tooltip = SYSTools.xx("nursingrecords.prescription.dlgRegular.tx.tooltip").replace('[', '<').replace(']', '>');
lblTX.setToolTipText(SYSTools.toHTMLForScreen("<p style=\"width:300px;\">" + tooltip + "</p>"));
ignoreEvent = true;
rbActive.setText(SYSTools.xx("nursingrecords.prescription.dlgRegular.rbActive"));
rbEndOfPackage.setText(SYSTools.xx("nursingrecords.prescription.dlgRegular.rbEndOfPackage"));
txtMed.setText("");
cmbMed.setRenderer(TradeFormTools.getRenderer(TradeFormTools.LONG));
cmbDocON.setSelectedItem(prescription.getDocON());
cmbHospitalON.setSelectedItem(prescription.getHospitalON());
cmbMed.setModel(new DefaultComboBoxModel());
rbEndOfPackage.setSelected(prescription.isUntilEndOfPackage());
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);
cmbIntervention.setSelectedItem(prescription.getIntervention());
txtIntervention.setEnabled(cmbMed.getModel().getSize() == 0);
tbDailyPlan = GUITools.getNiceToggleButton("nursingrecords.prescription.dlgRegular.addToDailyPlan");
jPanel1.add(tbDailyPlan, CC.xywh(1, 5, 5, 1, CC.LEFT, CC.DEFAULT));
tbDailyPlan.setEnabled(cmbMed.getModel().getSize() == 0);
tbDailyPlan.setSelected(prescription.isOnDailyPlan());
// tbWeightControl = GUITools.getNiceToggleButton("nursingrecords.prescription.dlgRegular.weightControl");
// jPanel1.add(tbWeightControl, CC.xywh(1, 7, 5, 1, CC.LEFT, CC.DEFAULT));
// tbWeightControl.setEnabled(cmbMed.getModel().getSize() != 0);
// tbWeightControl.setSelected(prescription.isWeightControl());
cmbMed.setEnabled(editMode != MODE_CHANGE);
txtMed.setEnabled(editMode != MODE_CHANGE);
cmbIntervention.setEnabled(editMode != MODE_CHANGE);
txtIntervention.setEnabled(editMode != MODE_CHANGE);
if (cmbMed.getSelectedItem() != null) {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(TradeFormTools.toPrettyString((TradeForm) cmbMed.getSelectedItem())));
}
rbEndOfPackage.setEnabled(prescription.getResident().isCalcMediUPR1() && cmbMed.getSelectedItem() != null);
ignoreEvent = false;
txtMed.requestFocus();
setFocusCycleRoot(true);
setFocusTraversalPolicy(GUITools.createTraversalPolicy(new ArrayList<Component>(Arrays.asList(new Component[]{cmbDocON, cmbHospitalON, txtMed, rbActive, txtBemerkung}))));
reloadTable();
// #28
btnMed.setToolTipText(SYSTools.xx("nursingrecords.prescription.dlgRegular.addMed.tooltip"));
btnAddGP.setToolTipText(SYSTools.xx("nursingrecords.prescription.dlgRegular.addGP.tooltip"));
btnAddHospital.setToolTipText(SYSTools.xx("nursingrecords.prescription.dlgRegular.addHospital.tooltip"));
pnlCommonTags = new PnlCommonTags(prescription.getCommontags(), true, 3);
jPanel3.add(new JScrollPane(pnlCommonTags), CC.xy(1, 9, CC.DEFAULT, CC.FILL));
}
private void txtMedFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtMedFocusGained
SYSTools.markAllTxt(txtMed);
}//GEN-LAST:event_txtMedFocusGained
private void btnMedActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMedActionPerformed
// String pzn = 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(btnMed);
popup.removeExcludedComponent(btnMed);
popup.setTransient(true);
popup.setDefaultFocusComponent(wizard.getContentPane());
popup.showPopup(new Insets(-5, wizard.getPreferredSize().width * -1 - 200, -5, -100), btnMed);
}//GEN-LAST:event_btnMedActionPerformed
private void cmbMedItemStateChanged(java.awt.event.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);
tbDailyPlan.setEnabled(false);
tbDailyPlan.setSelected(false);
}//GEN-LAST:event_cmbMedItemStateChanged
private boolean saveOK() {
if (ignoreEvent) return false;
LocalDate day;
try {
day = new LocalDate(SYSCalendar.parseDate(txtTo.getText()));
} catch (NumberFormatException ex) {
day = null;
}
boolean OnOK = (cmbDocON.getSelectedItem() != null || cmbHospitalON.getSelectedIndex() > 0);
boolean OffOK = !rbDate.isSelected() || day != null;
boolean medOK = cmbMed.getModel().getSize() == 0 || cmbMed.getSelectedItem() != null;
boolean intervOK = cmbIntervention.getSelectedItem() != null;
boolean doseOK = tblDosis.getModel().getRowCount() > 0;
String reason = "";
reason += (OnOK ? "" : "Die Informationen zum <b>an</b>setzenden <b>Arzt</b> oder KH sind unvollständig. ");
reason += (OffOK ? "" : "Die Informationen zum <b>ab</b>setzenden <b>Arzt</b> oder KH sind unvollständig. ");
reason += (medOK ? "" : "Die <b>Medikamentenangabe</b> ist falsch. ");
reason += (intervOK ? "" : "Die Angaben über die <b>Massnahmen</b> sind falsch. ");
reason += (doseOK ? "" : "Sie müssen mindestens eine <b>Dosierung</b> angegeben. ");
if (!reason.isEmpty()) {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(reason, DisplayMessage.WARNING));
}
return OnOK & OffOK & medOK & intervOK & doseOK;
}
private void btnSaveActionPerformed(java.awt.event.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 txtBemerkungCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_txtBemerkungCaretUpdate
}//GEN-LAST:event_txtBemerkungCaretUpdate
private boolean save() {
if (!saveOK()) return false;
prescription.setHospitalON((Hospital) cmbHospitalON.getSelectedItem());
prescription.setIntervention((Intervention) cmbIntervention.getSelectedItem());
prescription.setShowOnDailyPlan(tbDailyPlan.isSelected());
prescription.setSituation(null);
prescription.setText(txtBemerkung.getText().trim());
prescription.setTradeForm((TradeForm) cmbMed.getSelectedItem());
prescription.setUserON(OPDE.getLogin().getUser());
prescription.setDocON((GP) cmbDocON.getSelectedItem());
prescription.setFrom(new Date());
if (rbDate.isSelected()) {
LocalDate day = null;
try {
day = new LocalDate(SYSCalendar.parseDate(txtTo.getText()));
} catch (NumberFormatException ex) {
OPDE.fatal(ex);
}
prescription.setTo(SYSCalendar.eod(day).toDate());
prescription.setUserOFF(OPDE.getLogin().getUser());
prescription.setHospitalOFF(prescription.getHospitalON());
prescription.setDocOFF(prescription.getDocON());
} else {
prescription.setHospitalOFF(null);
prescription.setDocOFF(null);
prescription.setTo(SYSConst.DATE_UNTIL_FURTHER_NOTICE);
}
prescription.setUntilEndOfPackage(rbEndOfPackage.isSelected());
prescription.getCommontags().clear();
prescription.getCommontags().addAll(pnlCommonTags.getListSelectedTags());
return true;
}
private void tblDosisMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblDosisMousePressed
if (!SwingUtilities.isRightMouseButton(evt)) {
return;
}
final TMDose tm = (TMDose) tblDosis.getModel();
if (tm.getRowCount() == 0) {
return;
}
Point p = evt.getPoint();
Point p2 = evt.getPoint();
// Convert a coordinate relative to a component's bounds to screen coordinates
SwingUtilities.convertPointToScreen(p2, tblDosis);
// final Point screenposition = p2;
final int row = tblDosis.rowAtPoint(p);
ListSelectionModel lsm = tblDosis.getSelectionModel();
lsm.setSelectionInterval(row, row);
// Menüeinträge
SYSTools.unregisterListeners(menu);
menu = new JPopupMenu();
//-----------------------------------------
JMenuItem itemPopupDelete = new JMenuItem(SYSTools.xx("misc.msg.delete"), SYSConst.icon22delete);
itemPopupDelete.addActionListener(evt1 -> {
PrescriptionSchedule schedule = prescription.getPrescriptionSchedule().get(row);
prescription.getPrescriptionSchedule().remove(schedule);
schedules2delete.add(schedule);
reloadTable();
});
menu.add(itemPopupDelete);
menu.show(evt.getComponent(), (int) p.getX(), (int) p.getY());
}//GEN-LAST:event_tblDosisMousePressed
private void btnCloseActionPerformed(java.awt.event.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);
}
private void reloadTable() {
String zubereitung = "x";
if (prescription.getTradeForm() != null) {
zubereitung = prescription.getTradeForm().getDosageForm().getPreparation();
}
tblDosis.setModel(new TMDose(zubereitung, prescription));
tblDosis.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jspDosis.dispatchEvent(new ComponentEvent(jspDosis, ComponentEvent.COMPONENT_RESIZED));
tblDosis.getColumnModel().getColumn(TMDose.COL_Dosis).setCellRenderer(new RNDHTML());
tblDosis.getColumnModel().getColumn(TMDose.COL_Dosis).setHeaderValue(SYSTools.xx("misc.msg.usage"));
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private JPanel jPanel1;
private JXSearchField txtMed;
private JComboBox<String> cmbMed;
private JPanel panel4;
private JButton btnMed;
private JComboBox<String> cmbIntervention;
private JXSearchField txtIntervention;
private JPanel jPanel8;
private JScrollPane jspDosis;
private JTable tblDosis;
private JPanel panel2;
private JButton btnAddDosis;
private JPanel jPanel3;
private JPanel pnlOFF;
private JRadioButton rbActive;
private JRadioButton rbDate;
private JTextField txtTo;
private JRadioButton rbEndOfPackage;
private JScrollPane jScrollPane3;
private JTextPane txtBemerkung;
private JLabel lblText;
private JPanel pnlON;
private JComboBox<String> cmbDocON;
private JButton btnAddGP;
private JComboBox<String> cmbHospitalON;
private JButton btnAddHospital;
private JPanel panel1;
private JButton btnClose;
private JButton btnSave;
private JLabel lblTX;
// End of variables declaration//GEN-END:variables
}