package com.floreantpos.bo.ui.explorer; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import net.miginfocom.swing.MigLayout; import org.jdesktop.swingx.JXDatePicker; import com.floreantpos.model.DrawerPullReport; import com.floreantpos.model.dao.DrawerPullReportDAO; import com.floreantpos.model.util.DateUtil; import com.floreantpos.swing.TransparentPanel; import com.floreantpos.ui.PosTableRenderer; import com.floreantpos.ui.dialog.POSMessageDialog; public class DrawerPullReportExplorer extends TransparentPanel { private JXDatePicker fromDatePicker = new JXDatePicker(); private JXDatePicker toDatePicker = new JXDatePicker(); private JButton btnGo = new JButton("GO"); private JButton btnEditActualAmount = new JButton("Edit Actual Amount"); private static SimpleDateFormat dateTimeFormatter = new SimpleDateFormat("dd MMM, yyyy hh:mm a"); private JTable table; public DrawerPullReportExplorer() { super(new BorderLayout()); JPanel topPanel = new JPanel(new MigLayout()); topPanel.add(new JLabel("From:"), "grow"); topPanel.add(fromDatePicker, "wrap"); topPanel.add(new JLabel("To:"), "grow"); topPanel.add(toDatePicker, "wrap"); topPanel.add(btnGo, "skip 1, al right"); add(topPanel, BorderLayout.NORTH); add(new JScrollPane(table = new JTable(new DrawerPullExplorerTableModel(null)))); table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setDefaultRenderer(Object.class, new PosTableRenderer()); JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); bottomPanel.add(btnEditActualAmount); add(bottomPanel, BorderLayout.SOUTH); btnGo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { viewReport(); } catch (Exception e1) { POSMessageDialog.showError(DrawerPullReportExplorer.this, POSMessageDialog.ERROR_MESSAGE, e1); } } }); btnEditActualAmount.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { int selectedRow = table.getSelectedRow(); if(selectedRow < 0) { JOptionPane.showMessageDialog(DrawerPullReportExplorer.this, "Please select a drawer pull to edit.", "MDS-POS", JOptionPane.ERROR_MESSAGE); return; } String amountString = JOptionPane.showInputDialog(DrawerPullReportExplorer.this, "Please enter the actual amount:"); if(amountString == null) { return; } double amount = 0; try { amount = Double.parseDouble(amountString); }catch(Exception x) { JOptionPane.showMessageDialog(DrawerPullReportExplorer.this, "The amount you entered is not valid", "MDS-POS", JOptionPane.ERROR_MESSAGE); return; } DrawerPullExplorerTableModel model = (DrawerPullExplorerTableModel) table.getModel(); DrawerPullReport report = (DrawerPullReport) model.getRowData(selectedRow); report.setCashToDeposit(amount); DrawerPullReportDAO dao = new DrawerPullReportDAO(); dao.saveOrUpdate(report); model.updateItem(selectedRow); } catch (Exception e1) { POSMessageDialog.showError(DrawerPullReportExplorer.this, POSMessageDialog.ERROR_MESSAGE, e1); } } }); } private void viewReport() { try { Date fromDate = fromDatePicker.getDate(); Date toDate = toDatePicker.getDate(); fromDate = DateUtil.startOfDay(fromDate); toDate = DateUtil.endOfDay(toDate); List<DrawerPullReport> list = new DrawerPullReportDAO().findReports(fromDate, toDate); table.setModel(new DrawerPullExplorerTableModel(list)); } catch (Exception e) { POSMessageDialog.showError(this, POSMessageDialog.ERROR_MESSAGE, e); } } class DrawerPullExplorerTableModel extends ListTableModel { String[] columnNames = { "ID", "TIME", "DRAWER PULL AMOUNT", "ACTUAL AMOUNT" }; DrawerPullExplorerTableModel(List<DrawerPullReport> list) { setRows(list); setColumnNames(columnNames); } public Object getValueAt(int rowIndex, int columnIndex) { DrawerPullReport report = (DrawerPullReport) rows.get(rowIndex); switch (columnIndex) { case 0: return report.getId().toString(); case 1: return dateTimeFormatter.format(report.getReportTime()); case 2: return report.getDrawerAccountable(); case 3: return report.getCashToDeposit(); } return null; } } }