/*
* Created by JFormDesigner on Wed May 30 16:04:17 CEST 2012
*/
package op.care.med.prodassistant;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
import entity.prescription.*;
import gui.GUITools;
import op.OPDE;
import op.care.med.structure.PnlDosageForm;
import op.tools.SYSConst;
import op.tools.SYSTools;
import org.apache.commons.collections.Closure;
import org.jdesktop.swingx.JXSearchField;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/**
* @author Torsten Löhr
*/
public class PnlTradeForm extends JPanel {
private MedProducts product;
private TradeForm tradeForm;
private DosageForm dosageForm;
private Closure validate;
private boolean ignoreEvent = false;
public static final String internalClassID = "opde.medication.medproduct.wizard.subtext";
public PnlTradeForm(Closure validate, MedProducts product) {
this.validate = validate;
initComponents();
setProduct(product);
initPanel();
}
public void setProduct(MedProducts product) {
this.product = product;
if (!product.getTradeforms().isEmpty()) {
ArrayList model = new ArrayList(product.getTradeforms());
model.add(0, "<html><b>" + SYSTools.xx("misc.msg.noneOfThem") + "</b></html>");
DefaultListModel lmDaf = SYSTools.list2dlm(model);
lstDaf.setModel(lmDaf);
lstDaf.setCellRenderer(TradeFormTools.getRenderer(TradeFormTools.LONG));
}
lblMsg.setText(SYSTools.xx("opde.medication.medproduct.wizard.subtext.existingTradeforms"));
cbWeightControlled.setText(SYSTools.xx("opde.medication.medproduct.wizard.subtext.weightControlled"));
lblMsg.setVisible(!product.getTradeforms().isEmpty());
jsp1.setVisible(!product.getTradeforms().isEmpty());
lstDaf.setVisible(!product.getTradeforms().isEmpty());
}
private void initPanel() {
EntityManager em = OPDE.createEM();
Query query = em.createQuery(" SELECT m FROM DosageForm m ");
java.util.List listDosageForm = query.getResultList();
Collections.sort(listDosageForm, (us, them) -> DosageFormTools.toPrettyString((DosageForm) us).compareTo(DosageFormTools.toPrettyString((DosageForm) them)));
cmbFormen.setModel(SYSTools.list2cmb(listDosageForm));
cmbFormen.setRenderer(DosageFormTools.getRenderer(0));
em.close();
cmbDaysWeeks.setModel(new DefaultComboBoxModel(new String[]{SYSTools.xx("misc.msg.Days"), SYSTools.xx("misc.msg.weeks")}));
dosageForm = (DosageForm) cmbFormen.getSelectedItem();
cbExpiresAfterOpened.setText(SYSTools.xx("tradeform.subtext.expiresAfterOpenedIn"));
cbExpiresAfterOpened.setSelected(false);
tradeForm = new TradeForm(product, "", dosageForm);
rbCalcUPR.setSelected(true);
rbCalcUPR.setText(SYSTools.xx("opde.medication.medproduct.wizard.subtext.calcUPR"));
rbSetUPR.setText(SYSTools.xx("opde.medication.medproduct.wizard.subtext.setUPR"));
txtUPR.setText("10");
txtUPR.setEnabled(false);
pnlUPR.setVisible(false);
validate.execute(tradeForm);
}
private void txtZusatzActionPerformed(ActionEvent e) {
cmbFormen.setEnabled(true);
tradeForm = new TradeForm(product, txtZusatz.getText().trim(), dosageForm);
validate.execute(tradeForm);
if (lstDaf.isVisible() && lstDaf.getSelectedIndex() != 0) {
ignoreEvent = true;
lstDaf.setSelectedIndex(0);
ignoreEvent = false;
}
}
private void lstDafValueChanged(ListSelectionEvent e) {
if (ignoreEvent) {
return;
}
if (!e.getValueIsAdjusting()) {
if (lstDaf.getSelectedIndex() > 0) {
tradeForm = (TradeForm) lstDaf.getSelectedValue();
txtZusatz.setText(null);
} else {
tradeForm = new TradeForm(product, txtZusatz.getText().trim(), dosageForm);
}
// https://github.com/tloehr/Offene-Pflege.de/issues/34
btnAdd.setEnabled(lstDaf.getSelectedIndex() <= 0);
cmbFormen.setEnabled(lstDaf.getSelectedIndex() <= 0);
SYSTools.setXEnabled(pnlUPR, lstDaf.getSelectedIndex() <= 0);
SYSTools.setXEnabled(panel1, lstDaf.getSelectedIndex() <= 0);
cbWeightControlled.setEnabled(lstDaf.getSelectedIndex() <= 0);
validate.execute(tradeForm);
}
}
private void cmbFormenItemStateChanged(ItemEvent e) {
if (e.getStateChange() != ItemEvent.SELECTED) return;
dosageForm = (DosageForm) cmbFormen.getSelectedItem();
tradeForm = new TradeForm(product, txtZusatz.getText().trim(), dosageForm);
// selection of constant UPR ?
if (dosageForm.isUPRn()) {
lblTo1.setText(" " + SYSConst.UNITS[dosageForm.getUsageUnit()] + " " + SYSTools.xx("misc.msg.to1") + " " + SYSConst.UNITS[dosageForm.getPackUnit()]);
pnlUPR.setVisible(true);
rbCalcUPR.setSelected(true);
} else {
pnlUPR.setVisible(false);
}
validate.execute(tradeForm);
}
private void btnAddActionPerformed(ActionEvent e) {
PnlDosageForm pnl = new PnlDosageForm(new DosageForm(0));
GUITools.showPopup(GUITools.createPanelPopup(pnl, o -> {
if (o != null) {
cmbFormen.setModel(new DefaultComboBoxModel(new DosageForm[]{(DosageForm) o}));
dosageForm = (DosageForm) cmbFormen.getSelectedItem();
tradeForm = new TradeForm(product, txtZusatz.getText().trim(), dosageForm);
validate.execute(tradeForm);
}
}, btnAdd), SwingConstants.SOUTH_WEST);
}
private void rbCalcUPRItemStateChanged(ItemEvent e) {
txtUPR.setEnabled(e.getStateChange() != ItemEvent.SELECTED);
if (e.getStateChange() == ItemEvent.SELECTED) {
tradeForm.setUPR(null);
validate.execute(tradeForm);
}
}
private void rbSetUPRItemStateChanged(ItemEvent e) {
txtUPR.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
if (e.getStateChange() == ItemEvent.SELECTED) {
tradeForm.setUPR(SYSTools.parseDecimal(txtUPR.getText()));
validate.execute(tradeForm);
}
}
private void txtUPRFocusLost(FocusEvent e) {
BigDecimal upr = SYSTools.parseDecimal(txtUPR.getText());
if (upr == null || upr.compareTo(BigDecimal.ZERO) <= 0) {
upr = BigDecimal.TEN;
txtUPR.setText("10");
} else {
txtUPR.setText(SYSTools.formatBigDecimal(upr.setScale(2, RoundingMode.HALF_UP)));
}
tradeForm.setUPR(upr);
}
private void cbExpiresAfterOpenedItemStateChanged(ItemEvent e) {
txtExpiresIn.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
cmbDaysWeeks.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
if (e.getStateChange() == ItemEvent.SELECTED) {
txtExpiresIn.setText("7");
cmbDaysWeeks.setSelectedIndex(0);
tradeForm.setDaysToExpireAfterOpened(7);
validate.execute(tradeForm);
} else {
tradeForm.setDaysToExpireAfterOpened(null);
validate.execute(tradeForm);
}
}
private void txtExpiresInFocusLost(FocusEvent e) {
Integer i = SYSTools.checkInteger(txtExpiresIn.getText());
if (i == null || i.compareTo(0) <= 0) {
i = 7;
// txtExpiresIn.setText("7");
}
if (cmbDaysWeeks.getSelectedIndex() == 1) {
tradeForm.setDaysToExpireAfterOpened(i * 7);
} else {
tradeForm.setDaysToExpireAfterOpened(i);
}
txtExpiresIn.setText(Integer.toString(i));
validate.execute(tradeForm);
}
private void cmbDaysWeeksItemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
Integer i = SYSTools.checkInteger(txtExpiresIn.getText());
if (i == null || i.compareTo(0) <= 0) {
i = 7;
// txtExpiresIn.setText("7");
}
if (cmbDaysWeeks.getSelectedIndex() == 1) {
tradeForm.setDaysToExpireAfterOpened(i * 7);
} else {
tradeForm.setDaysToExpireAfterOpened(i);
}
txtExpiresIn.setText(Integer.toString(i));
validate.execute(tradeForm);
}
}
private void cbWeightControlledItemStateChanged(ItemEvent e) {
tradeForm.setWeightControlled(e.getStateChange() == ItemEvent.SELECTED);
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
txtZusatz = new JXSearchField();
cmbFormen = new JComboBox();
btnAdd = new JButton();
pnlUPR = new JPanel();
rbCalcUPR = new JRadioButton();
rbSetUPR = new JRadioButton();
txtUPR = new JTextField();
lblTo1 = new JLabel();
panel1 = new JPanel();
cbExpiresAfterOpened = new JCheckBox();
hSpacer1 = new JPanel(null);
txtExpiresIn = new JTextField();
hSpacer2 = new JPanel(null);
cmbDaysWeeks = new JComboBox();
lbl1 = new JLabel();
cbWeightControlled = new JCheckBox();
lblMsg = new JLabel();
jsp1 = new JScrollPane();
lstDaf = new JList();
//======== this ========
setLayout(new FormLayout(
"default, $lcgap, default, $ugap, default:grow, 2*($lcgap, default)",
"2*(default, $lgap), default, $rgap, pref, 3*($lgap, default), $lgap, default:grow, $lgap, default"));
//---- txtZusatz ----
txtZusatz.setFont(new Font("Arial", Font.PLAIN, 14));
txtZusatz.setInstantSearchDelay(0);
txtZusatz.setPrompt("Zusatzbezeichnung");
txtZusatz.addActionListener(e -> txtZusatzActionPerformed(e));
add(txtZusatz, CC.xywh(3, 3, 5, 1));
//---- cmbFormen ----
cmbFormen.setFont(new Font("Arial", Font.PLAIN, 14));
cmbFormen.addItemListener(e -> cmbFormenItemStateChanged(e));
add(cmbFormen, CC.xywh(3, 5, 3, 1));
//---- btnAdd ----
btnAdd.setBackground(Color.white);
btnAdd.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png")));
btnAdd.setToolTipText("Medikamente bearbeiten");
btnAdd.setBorder(null);
btnAdd.setSelectedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add-pressed.png")));
btnAdd.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnAdd.addActionListener(e -> btnAddActionPerformed(e));
add(btnAdd, CC.xy(7, 5));
//======== pnlUPR ========
{
pnlUPR.setLayout(new BoxLayout(pnlUPR, BoxLayout.X_AXIS));
//---- rbCalcUPR ----
rbCalcUPR.setText("text");
rbCalcUPR.addItemListener(e -> rbCalcUPRItemStateChanged(e));
pnlUPR.add(rbCalcUPR);
//---- rbSetUPR ----
rbSetUPR.setText("text");
rbSetUPR.addItemListener(e -> rbSetUPRItemStateChanged(e));
pnlUPR.add(rbSetUPR);
//---- txtUPR ----
txtUPR.setColumns(10);
txtUPR.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
txtUPRFocusLost(e);
}
});
pnlUPR.add(txtUPR);
//---- lblTo1 ----
lblTo1.setText("text");
pnlUPR.add(lblTo1);
}
add(pnlUPR, CC.xywh(3, 7, 5, 1, CC.LEFT, CC.FILL));
//======== panel1 ========
{
panel1.setLayout(new BoxLayout(panel1, BoxLayout.X_AXIS));
//---- cbExpiresAfterOpened ----
cbExpiresAfterOpened.setText("expiresAfterOpened");
cbExpiresAfterOpened.addItemListener(e -> cbExpiresAfterOpenedItemStateChanged(e));
panel1.add(cbExpiresAfterOpened);
panel1.add(hSpacer1);
//---- txtExpiresIn ----
txtExpiresIn.setColumns(10);
txtExpiresIn.setEnabled(false);
txtExpiresIn.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
txtExpiresInFocusLost(e);
}
});
panel1.add(txtExpiresIn);
panel1.add(hSpacer2);
//---- cmbDaysWeeks ----
cmbDaysWeeks.setEnabled(false);
cmbDaysWeeks.addItemListener(e -> cmbDaysWeeksItemStateChanged(e));
panel1.add(cmbDaysWeeks);
}
add(panel1, CC.xywh(3, 9, 3, 1));
//---- lbl1 ----
lbl1.setText(null);
lbl1.setIcon(new ImageIcon(getClass().getResource("/artwork/other/medicine2.png")));
lbl1.setFont(new Font("Arial", Font.PLAIN, 18));
add(lbl1, CC.xy(3, 15, CC.LEFT, CC.FILL));
//---- cbWeightControlled ----
cbWeightControlled.setText("text");
cbWeightControlled.addItemListener(e -> cbWeightControlledItemStateChanged(e));
add(cbWeightControlled, CC.xywh(3, 11, 3, 1));
//---- lblMsg ----
lblMsg.setText("text");
lblMsg.setFont(new Font("Arial", Font.PLAIN, 14));
lblMsg.setHorizontalAlignment(SwingConstants.RIGHT);
add(lblMsg, CC.xywh(3, 13, 5, 1));
//======== jsp1 ========
{
//---- lstDaf ----
lstDaf.setFont(new Font("Arial", Font.PLAIN, 14));
lstDaf.setVisible(false);
lstDaf.addListSelectionListener(e -> lstDafValueChanged(e));
jsp1.setViewportView(lstDaf);
}
add(jsp1, CC.xywh(5, 15, 3, 1, CC.DEFAULT, CC.FILL));
//---- buttonGroup1 ----
ButtonGroup buttonGroup1 = new ButtonGroup();
buttonGroup1.add(rbCalcUPR);
buttonGroup1.add(rbSetUPR);
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JXSearchField txtZusatz;
private JComboBox cmbFormen;
private JButton btnAdd;
private JPanel pnlUPR;
private JRadioButton rbCalcUPR;
private JRadioButton rbSetUPR;
private JTextField txtUPR;
private JLabel lblTo1;
private JPanel panel1;
private JCheckBox cbExpiresAfterOpened;
private JPanel hSpacer1;
private JTextField txtExpiresIn;
private JPanel hSpacer2;
private JComboBox cmbDaysWeeks;
private JLabel lbl1;
private JCheckBox cbWeightControlled;
private JLabel lblMsg;
private JScrollPane jsp1;
private JList lstDaf;
// JFormDesigner - End of variables declaration //GEN-END:variables
}