/* * 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.med.inventory; import java.awt.event.*; import com.jgoodies.forms.factories.CC; import com.jgoodies.forms.layout.FormLayout; import entity.prescription.MedStockTools; import entity.prescription.MedStockTransaction; import entity.prescription.MedStockTransactionTools; import entity.prescription.TradeFormTools; import op.OPDE; import op.tools.MyJDialog; import op.tools.SYSTools; import org.apache.commons.collections.Closure; import javax.swing.*; import javax.swing.event.CaretEvent; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.math.BigDecimal; import java.text.NumberFormat; /** * */ public class DlgTX extends MyJDialog { private BigDecimal amount, weight; private Closure actionBlock; private BigDecimal bestandsumme; private BigDecimal packgroesse; private MedStockTransaction tx; public DlgTX(MedStockTransaction tx, Closure actionBlock) { super(); this.tx = tx; this.actionBlock = actionBlock; initDialog(); pack(); } private void txtMengeFocusGained(FocusEvent e) { txtValue.selectAll(); } // @Override // public void dispose() { // super.dispose(); // } private void txtTextActionPerformed(ActionEvent e) { txtValue.requestFocus(); } private void txtValueActionPerformed(ActionEvent e) { txtText.requestFocus(); } boolean isAmountOk() { boolean amountOK = false; if (amount.compareTo(BigDecimal.ZERO) < 0) { amountOK = amount.negate().compareTo(bestandsumme) <= 0; } else if (amount.compareTo(BigDecimal.ZERO) > 0) { amountOK = amount.compareTo(packgroesse.subtract(bestandsumme)) <= 0; } return amountOK; } boolean isWeightOk() { if (!tx.getStock().getTradeForm().isWeightControlled()) return true; boolean weightOK = weight.compareTo(BigDecimal.ZERO) > 0; return weightOK; } private void txtWeightControlledFocusGained(FocusEvent e) { txtWeightControlled.selectAll(); } private void txtWeightControlledCaretUpdate(CaretEvent evt) { weight = SYSTools.checkBigDecimal(evt); // https://github.com/tloehr/Offene-Pflege.de/issues/30 if (weight == null) weight = BigDecimal.ZERO; OPDE.debug("weight = " + SYSTools.formatBigDecimal(weight)); btnBuchung.setEnabled(isAmountOk() && isWeightOk()); } private void txtValueCaretUpdate(CaretEvent evt) { amount = SYSTools.checkBigDecimal(evt); // https://github.com/tloehr/Offene-Pflege.de/issues/30 if (amount == null) amount = BigDecimal.ZERO; btnBuchung.setEnabled(isAmountOk() && isWeightOk()); OPDE.debug("amount = " + SYSTools.formatBigDecimal(amount)); } private void thisWindowClosing(WindowEvent e) { tx = null; } private void initDialog() { initComponents(); lblText.setText(SYSTools.xx("opde.medication.tx.text")); lblValue.setText(SYSTools.xx("misc.msg.amount")); lblWeightControl.setText(SYSTools.xx("opde.medication.tx.controlWeight")); lblUnit2.setText("g"); bestandsumme = MedStockTools.getSum(tx.getStock()); weight = null; txtWeightControlled.setVisible(tx.getStock().getTradeForm().isWeightControlled()); lblWeightControl.setVisible(tx.getStock().getTradeForm().isWeightControlled()); lblUnit.setText(TradeFormTools.getPackUnit(tx.getStock().getTradeForm())); if (tx.getStock().hasPackage()) { packgroesse = tx.getStock().getPackage().getContent(); } else { packgroesse = BigDecimal.valueOf(Double.MAX_VALUE); } txtValue.setText(SYSTools.formatBigDecimal(tx.getAmount())); if (txtWeightControlled.isVisible()) { txtWeightControlled.setToolTipText(SYSTools.xx("opde.medication.controlWeight.only.after.change")); txtWeightControlled.setText(SYSTools.formatBigDecimal(tx.getWeight() != null ? tx.getWeight() : BigDecimal.ZERO)); } setVisible(true); } /** * 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() { lblText = new JLabel(); txtText = new JTextField(); txtValue = new JTextField(); lblValue = new JLabel(); lblUnit = new JLabel(); lblWeightControl = new JLabel(); txtWeightControlled = new JTextField(); lblUnit2 = new JLabel(); panel1 = new JPanel(); btnCancel = new JButton(); btnBuchung = new JButton(); //======== this ======== addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { thisWindowClosing(e); } }); Container contentPane = getContentPane(); contentPane.setLayout(new FormLayout( "default, $lcgap, default, $ugap, 141dlu:grow, $rgap, default, $lcgap, default", "2*(default, $lgap), fill:default, $lgap, default, $lgap, fill:default")); //---- lblText ---- lblText.setText("Buchungstext"); lblText.setFont(new Font("Arial", Font.PLAIN, 14)); contentPane.add(lblText, CC.xy(3, 3, CC.DEFAULT, CC.TOP)); //---- txtText ---- txtText.setColumns(100); txtText.addActionListener(e -> txtTextActionPerformed(e)); contentPane.add(txtText, CC.xywh(5, 3, 3, 1)); //---- txtValue ---- txtValue.setHorizontalAlignment(SwingConstants.RIGHT); txtValue.setText("jTextField1"); txtValue.setFont(new Font("Arial", Font.PLAIN, 14)); txtValue.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { txtMengeFocusGained(e); } }); txtValue.addActionListener(e -> txtValueActionPerformed(e)); txtValue.addCaretListener(e -> txtValueCaretUpdate(e)); contentPane.add(txtValue, CC.xy(5, 5)); //---- lblValue ---- lblValue.setText("Menge"); lblValue.setFont(new Font("Arial", Font.PLAIN, 14)); contentPane.add(lblValue, CC.xy(3, 5)); //---- lblUnit ---- lblUnit.setHorizontalAlignment(SwingConstants.TRAILING); lblUnit.setText("jLabel4"); lblUnit.setFont(new Font("Arial", Font.PLAIN, 14)); contentPane.add(lblUnit, CC.xy(7, 5)); //---- lblWeightControl ---- lblWeightControl.setText("Menge"); lblWeightControl.setFont(new Font("Arial", Font.PLAIN, 14)); contentPane.add(lblWeightControl, CC.xy(3, 7)); //---- txtWeightControlled ---- txtWeightControlled.setHorizontalAlignment(SwingConstants.RIGHT); txtWeightControlled.setText("jTextField1"); txtWeightControlled.setFont(new Font("Arial", Font.PLAIN, 14)); txtWeightControlled.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { txtWeightControlledFocusGained(e); } }); txtWeightControlled.addCaretListener(e -> txtWeightControlledCaretUpdate(e)); contentPane.add(txtWeightControlled, CC.xy(5, 7)); //---- lblUnit2 ---- lblUnit2.setHorizontalAlignment(SwingConstants.TRAILING); lblUnit2.setText("g"); lblUnit2.setFont(new Font("Arial", Font.PLAIN, 14)); contentPane.add(lblUnit2, CC.xy(7, 7, CC.LEFT, CC.DEFAULT)); //======== panel1 ======== { panel1.setLayout(new BoxLayout(panel1, BoxLayout.X_AXIS)); //---- btnCancel ---- btnCancel.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/cancel.png"))); btnCancel.addActionListener(e -> btnCancelActionPerformed(e)); panel1.add(btnCancel); //---- btnBuchung ---- btnBuchung.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/apply.png"))); btnBuchung.addActionListener(e -> btnBuchungActionPerformed(e)); panel1.add(btnBuchung); } contentPane.add(panel1, CC.xywh(5, 9, 3, 1, CC.RIGHT, CC.DEFAULT)); setSize(600, 165); setLocationRelativeTo(getOwner()); }// </editor-fold>//GEN-END:initComponents private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed tx = null; dispose(); }//GEN-LAST:event_btnCancelActionPerformed private void btnBuchungActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuchungActionPerformed tx.setAmount(amount); tx.setWeight(weight); tx.setState(MedStockTransactionTools.STATE_EDIT_MANUAL); tx.setText(txtText.getText().trim()); actionBlock.execute(tx); dispose(); }//GEN-LAST:event_btnBuchungActionPerformed private void txtMengeCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_txtMengeCaretUpdate // if (amount.compareTo(BigDecimal.ZERO) < 0) { // btnBuchung.setEnabled(amount.negate().compareTo(bestandsumme) <= 0); // } else if (amount.compareTo(BigDecimal.ZERO) > 0) { // btnBuchung.setEnabled(amount.compareTo(packgroesse.subtract(bestandsumme)) <= 0); // } else { // btnBuchung.setEnabled(false); // } }//GEN-LAST:event_txtMengeCaretUpdate // Variables declaration - do not modify//GEN-BEGIN:variables private JLabel lblText; private JTextField txtText; private JTextField txtValue; private JLabel lblValue; private JLabel lblUnit; private JLabel lblWeightControl; private JTextField txtWeightControlled; private JLabel lblUnit2; private JPanel panel1; private JButton btnCancel; private JButton btnBuchung; // End of variables declaration//GEN-END:variables }