/* * 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 com.jgoodies.forms.factories.CC; import com.jgoodies.forms.layout.FormLayout; import entity.info.Resident; import entity.prescription.*; import op.OPDE; import op.threads.DisplayManager; import op.tools.MyJDialog; import op.tools.SYSConst; import op.tools.SYSTools; import org.apache.commons.collections.Closure; import javax.persistence.EntityManager; import javax.persistence.LockModeType; import javax.persistence.Query; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.math.BigDecimal; import java.util.Date; /** * @author tloehr */ public class DlgOpenStock extends MyJDialog { private MedInventory inventory; private Closure actionBlock; private MedStock medStock; /** * Creates new form DlgOpenStock */ public DlgOpenStock(TradeForm darreichung, Resident resident, Closure actionBlock) { super(false); this.inventory = TradeFormTools.getInventory4TradeForm(resident, darreichung); this.medStock = null; this.actionBlock = actionBlock; initComponents(); initDialog(); pack(); // 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { lbl1 = new JLabel(); cmbBestID = new JComboBox<>(); lbl2 = new JLabel(); btnClose = new JButton(); btnOK = new JButton(); //======== this ======== setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setResizable(false); Container contentPane = getContentPane(); contentPane.setLayout(new FormLayout( "default, $lcgap, default:grow, 2*($lcgap, default), $lcgap, default:grow, $lcgap, default", "default, $lgap, fill:default, 21dlu, default, $lgap, default")); //---- lbl1 ---- lbl1.setText("Die Packung mit der Nummer:"); lbl1.setFont(new Font("Arial", Font.PLAIN, 14)); contentPane.add(lbl1, CC.xy(3, 3)); //---- cmbBestID ---- cmbBestID.setModel(new DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); cmbBestID.setFont(new Font("Arial", Font.PLAIN, 14)); cmbBestID.addItemListener(e -> cmbBestIDItemStateChanged(e)); contentPane.add(cmbBestID, CC.xy(5, 3)); //---- lbl2 ---- lbl2.setText("anbrechen."); lbl2.setFont(new Font("Arial", Font.PLAIN, 14)); contentPane.add(lbl2, CC.xywh(7, 3, 3, 1)); //---- btnClose ---- btnClose.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/cancel.png"))); btnClose.addActionListener(e -> btnCloseActionPerformed(e)); contentPane.add(btnClose, CC.xy(7, 5)); //---- btnOK ---- btnOK.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/apply.png"))); btnOK.addActionListener(e -> btnOKActionPerformed(e)); contentPane.add(btnOK, CC.xy(9, 5)); setSize(455, 165); setLocationRelativeTo(getOwner()); }// </editor-fold>//GEN-END:initComponents private void btnCloseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCloseActionPerformed medStock = null; dispose(); }//GEN-LAST:event_btnCloseActionPerformed private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOKActionPerformed if (cmbBestID.getSelectedIndex() > 0) { EntityManager em = OPDE.createEM(); try { em.getTransaction().begin(); medStock = em.merge((MedStock) cmbBestID.getSelectedItem()); em.lock(medStock, LockModeType.OPTIMISTIC); em.lock(em.merge(medStock.getInventory().getResident()), LockModeType.OPTIMISTIC); medStock.setOpened(new Date()); em.getTransaction().commit(); } catch (javax.persistence.OptimisticLockException ole) { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); } if (ole.getMessage().indexOf("Class> entity.info.Resident") > -1) { OPDE.getMainframe().emptyFrame(); OPDE.getMainframe().afterLogin(); } OPDE.getDisplayManager().addSubMessage(DisplayManager.getLockMessage()); } catch (Exception e) { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); } OPDE.fatal(e); } finally { em.close(); } dispose(); } }//GEN-LAST:event_btnOKActionPerformed @Override public void dispose() { actionBlock.execute(medStock); super.dispose(); } private void initDialog() { EntityManager em = OPDE.createEM(); Query query = em.createQuery(" " + " SELECT b FROM MedStock b " + " WHERE b.inventory = :vorrat AND b.out = :aus AND b.opened = :anbruch " + " ORDER BY b.in, b.id "); // Geht davon aus, dass die PKs immer fortlaufend, automatisch vergeben werden. query.setParameter("vorrat", inventory); query.setParameter("aus", SYSConst.DATE_UNTIL_FURTHER_NOTICE); query.setParameter("anbruch", SYSConst.DATE_UNTIL_FURTHER_NOTICE); DefaultComboBoxModel dcbm = new DefaultComboBoxModel(query.getResultList().toArray()); dcbm.insertElementAt(SYSTools.xx("misc.msg.none"), 0); cmbBestID.setModel(dcbm); cmbBestID.setRenderer(MedStockTools.getBestandOnlyIDRenderer()); int index = Math.min(2, cmbBestID.getItemCount()); cmbBestID.setSelectedIndex(index - 1); } private void cmbBestIDItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbBestIDItemStateChanged if (cmbBestID.getSelectedIndex() == 0) { cmbBestID.setToolTipText(null); } else { cmbBestID.setToolTipText(SYSTools.toHTML(MedStockTools.getTextASHTML((MedStock) cmbBestID.getSelectedItem()))); } }//GEN-LAST:event_cmbBestIDItemStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables private JLabel lbl1; private JComboBox<String> cmbBestID; private JLabel lbl2; private JButton btnClose; private JButton btnOK; // End of variables declaration//GEN-END:variables }