PageRenderTime 41ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/src/mpv5/ui/panels/ProductsOverview.java

http://mp-rechnungs-und-kundenverwaltung.googlecode.com/
Java | 368 lines | 295 code | 55 blank | 18 comment | 19 complexity | ab214971ff448160b6a0dae251d82e9e MD5 | raw file
Possible License(s): LGPL-3.0, Apache-2.0, GPL-3.0, GPL-2.0, AGPL-3.0, JSON, BSD-3-Clause
  1. /*
  2. * ProductsOverview.java
  3. *
  4. * Created on Aug 27, 2010, 1:48:39 PM
  5. */
  6. package mpv5.ui.panels;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.MouseEvent;
  9. import java.util.ArrayList;
  10. import java.util.Date;
  11. import java.util.List;
  12. import javax.swing.AbstractAction;
  13. import mpv5.ui.misc.MPTable;
  14. import javax.swing.SwingUtilities;
  15. import javax.swing.tree.DefaultMutableTreeNode;
  16. import mpv5.db.common.Context;
  17. import mpv5.db.common.DatabaseObject;
  18. import mpv5.db.common.NodataFoundException;
  19. import mpv5.db.common.QueryCriteria2;
  20. import mpv5.db.common.QueryHandler;
  21. import mpv5.db.common.QueryParameter;
  22. import mpv5.db.objects.Product;
  23. import mpv5.db.objects.ProductGroup;
  24. import mpv5.globals.Messages;
  25. import mpv5.logging.Log;
  26. import mpv5.ui.dialogs.BigPopup;
  27. import mpv5.ui.misc.DragNDropTreeForGroups;
  28. import mpv5.ui.misc.DragTableHandlerForDBOs;
  29. import mpv5.utils.date.DateConverter;
  30. import mpv5.utils.date.vTimeframe;
  31. import mpv5.utils.models.MPTableModel;
  32. import mpv5.utils.tables.TableFormat;
  33. import mpv5.utils.trees.TreeFormat;
  34. import mpv5.ui.misc.TableViewPersistenceHandler;
  35. /**
  36. *
  37. * @author andreas.weber
  38. */
  39. public class ProductsOverview extends javax.swing.JPanel implements ListPanel {
  40. /** Creates new form ProductsOverview */
  41. public ProductsOverview() {
  42. initComponents();
  43. gtree.setLargeModel(true);
  44. ((DragNDropTreeForGroups) gtree).setContainerToNotify(this);
  45. DragTableHandlerForDBOs t = new DragTableHandlerForDBOs(listtable, Context.getProduct());
  46. setName("productsoverview");
  47. both.setSelected(true);
  48. addedafter.setDate(DateConverter.addYears(new Date(), -10));
  49. fillTree();
  50. filltable(null, null);
  51. search.getTextField().addActionListener(new AbstractAction() {
  52. public void actionPerformed(ActionEvent e) {
  53. search();
  54. }
  55. });
  56. ((MPTable) listtable).setPersistanceHandler(new TableViewPersistenceHandler((MPTable) listtable, this));
  57. }
  58. private void search() {
  59. List<ProductGroup> gs = new ArrayList<ProductGroup>();
  60. DefaultMutableTreeNode node = (DefaultMutableTreeNode) gtree.getLastSelectedPathComponent();
  61. if (node != null && !node.isRoot()) {
  62. ProductGroup g = (ProductGroup) node.getUserObject();
  63. gs.add(g);
  64. }
  65. filltable(search.getText(), gs);
  66. }
  67. /** This method is called from within the constructor to
  68. * initialize the form.
  69. * WARNING: Do NOT modify this code. The content of this method is
  70. * always regenerated by the Form Editor.
  71. */
  72. @SuppressWarnings("unchecked")
  73. // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  74. private void initComponents() {
  75. buttonGroup1 = new javax.swing.ButtonGroup();
  76. jSplitPane1 = new javax.swing.JSplitPane();
  77. jScrollPane1 = new javax.swing.JScrollPane();
  78. gtree = new DragNDropTreeForGroups(1);
  79. jPanel1 = new javax.swing.JPanel();
  80. jScrollPane2 = new javax.swing.JScrollPane();
  81. listtable = new MPTable(this);
  82. jToolBar1 = new javax.swing.JToolBar();
  83. products = new javax.swing.JRadioButton();
  84. services = new javax.swing.JRadioButton();
  85. both = new javax.swing.JRadioButton();
  86. jSeparator2 = new javax.swing.JToolBar.Separator();
  87. addedafter = new mpv5.ui.beans.LabeledDateChooser();
  88. jSeparator1 = new javax.swing.JToolBar.Separator();
  89. search = new mpv5.ui.beans.LabeledTextField();
  90. jButton1 = new javax.swing.JButton();
  91. setName("Form"); // NOI18N
  92. setLayout(new java.awt.BorderLayout());
  93. jSplitPane1.setName("jSplitPane1"); // NOI18N
  94. jScrollPane1.setName("jScrollPane1"); // NOI18N
  95. gtree.setLargeModel(true);
  96. gtree.setName("gtree"); // NOI18N
  97. gtree.setPreferredSize(new java.awt.Dimension(250, 64));
  98. gtree.addMouseListener(new java.awt.event.MouseAdapter() {
  99. public void mouseClicked(java.awt.event.MouseEvent evt) {
  100. gtreeMouseClicked(evt);
  101. }
  102. });
  103. jScrollPane1.setViewportView(gtree);
  104. jSplitPane1.setLeftComponent(jScrollPane1);
  105. jPanel1.setName("jPanel1"); // NOI18N
  106. jPanel1.setLayout(new java.awt.BorderLayout());
  107. jScrollPane2.setName("jScrollPane2"); // NOI18N
  108. listtable.setAutoCreateRowSorter(true);
  109. listtable.setModel(new javax.swing.table.DefaultTableModel(
  110. new Object [][] {
  111. },
  112. new String [] {
  113. }
  114. ));
  115. listtable.setDragEnabled(true);
  116. listtable.setName("listtable"); // NOI18N
  117. listtable.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
  118. listtable.addMouseListener(new java.awt.event.MouseAdapter() {
  119. public void mouseClicked(java.awt.event.MouseEvent evt) {
  120. listtableMouseClicked(evt);
  121. }
  122. });
  123. jScrollPane2.setViewportView(listtable);
  124. jPanel1.add(jScrollPane2, java.awt.BorderLayout.CENTER);
  125. jToolBar1.setFloatable(false);
  126. jToolBar1.setRollover(true);
  127. jToolBar1.setName("jToolBar1"); // NOI18N
  128. buttonGroup1.add(products);
  129. java.util.ResourceBundle bundle = mpv5.i18n.LanguageManager.getBundle(); // NOI18N
  130. products.setText(bundle.getString("ProductsOverview.products.text")); // NOI18N
  131. products.setFocusable(false);
  132. products.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
  133. products.setMaximumSize(new java.awt.Dimension(333, 20));
  134. products.setMinimumSize(new java.awt.Dimension(100, 20));
  135. products.setName("products"); // NOI18N
  136. products.setPreferredSize(new java.awt.Dimension(100, 20));
  137. products.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
  138. jToolBar1.add(products);
  139. buttonGroup1.add(services);
  140. services.setText(bundle.getString("ProductsOverview.services.text")); // NOI18N
  141. services.setFocusable(false);
  142. services.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
  143. services.setMaximumSize(new java.awt.Dimension(333, 20));
  144. services.setMinimumSize(new java.awt.Dimension(100, 20));
  145. services.setName("services"); // NOI18N
  146. services.setPreferredSize(new java.awt.Dimension(100, 20));
  147. services.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
  148. jToolBar1.add(services);
  149. buttonGroup1.add(both);
  150. both.setSelected(true);
  151. both.setText(bundle.getString("ProductsOverview.both.text")); // NOI18N
  152. both.setFocusable(false);
  153. both.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
  154. both.setMaximumSize(new java.awt.Dimension(333, 20));
  155. both.setMinimumSize(new java.awt.Dimension(100, 20));
  156. both.setName("both"); // NOI18N
  157. both.setPreferredSize(new java.awt.Dimension(100, 20));
  158. both.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
  159. jToolBar1.add(both);
  160. jSeparator2.setMaximumSize(new java.awt.Dimension(10, 0));
  161. jSeparator2.setMinimumSize(new java.awt.Dimension(10, 0));
  162. jSeparator2.setName("jSeparator2"); // NOI18N
  163. jSeparator2.setPreferredSize(new java.awt.Dimension(10, 0));
  164. jToolBar1.add(jSeparator2);
  165. addedafter.set_Label(bundle.getString("ProductsOverview.addedafter._Label")); // NOI18N
  166. addedafter.setMaximumSize(new java.awt.Dimension(226, 21));
  167. addedafter.setMinimumSize(new java.awt.Dimension(226, 21));
  168. addedafter.setName("addedafter"); // NOI18N
  169. jToolBar1.add(addedafter);
  170. jSeparator1.setMaximumSize(new java.awt.Dimension(10, 0));
  171. jSeparator1.setMinimumSize(new java.awt.Dimension(10, 0));
  172. jSeparator1.setName("jSeparator1"); // NOI18N
  173. jSeparator1.setPreferredSize(new java.awt.Dimension(10, 0));
  174. jToolBar1.add(jSeparator1);
  175. search.set_Label(bundle.getString("ProductsOverview.search._Label")); // NOI18N
  176. search.setName("search"); // NOI18N
  177. jToolBar1.add(search);
  178. jButton1.setText(bundle.getString("ProductsOverview.jButton1.text")); // NOI18N
  179. jButton1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
  180. jButton1.setFocusable(false);
  181. jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
  182. jButton1.setName("jButton1"); // NOI18N
  183. jButton1.setPreferredSize(new java.awt.Dimension(55, 19));
  184. jButton1.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/mpv5/resources/images/16/kalarm.png"))); // NOI18N
  185. jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
  186. jButton1.addActionListener(new java.awt.event.ActionListener() {
  187. public void actionPerformed(java.awt.event.ActionEvent evt) {
  188. jButton1ActionPerformed(evt);
  189. }
  190. });
  191. jToolBar1.add(jButton1);
  192. jPanel1.add(jToolBar1, java.awt.BorderLayout.PAGE_START);
  193. jSplitPane1.setRightComponent(jPanel1);
  194. add(jSplitPane1, java.awt.BorderLayout.CENTER);
  195. }// </editor-fold>//GEN-END:initComponents
  196. private void listtableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_listtableMouseClicked
  197. doPopup(evt);
  198. }//GEN-LAST:event_listtableMouseClicked
  199. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
  200. search();
  201. }//GEN-LAST:event_jButton1ActionPerformed
  202. private void gtreeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_gtreeMouseClicked
  203. search();
  204. }//GEN-LAST:event_gtreeMouseClicked
  205. // Variables declaration - do not modify//GEN-BEGIN:variables
  206. private mpv5.ui.beans.LabeledDateChooser addedafter;
  207. private javax.swing.JRadioButton both;
  208. private javax.swing.ButtonGroup buttonGroup1;
  209. private javax.swing.JTree gtree;
  210. private javax.swing.JButton jButton1;
  211. private javax.swing.JPanel jPanel1;
  212. private javax.swing.JScrollPane jScrollPane1;
  213. private javax.swing.JScrollPane jScrollPane2;
  214. private javax.swing.JToolBar.Separator jSeparator1;
  215. private javax.swing.JToolBar.Separator jSeparator2;
  216. private javax.swing.JSplitPane jSplitPane1;
  217. private javax.swing.JToolBar jToolBar1;
  218. private javax.swing.JTable listtable;
  219. private javax.swing.JRadioButton products;
  220. private mpv5.ui.beans.LabeledTextField search;
  221. private javax.swing.JRadioButton services;
  222. // End of variables declaration//GEN-END:variables
  223. private void fillTree() {
  224. ArrayList<ProductGroup> data = null;
  225. try {
  226. data = DatabaseObject.getObjects(Context.getProductGroup());
  227. } catch (NodataFoundException ex) {
  228. Log.Debug(this, ex.getMessage());
  229. }
  230. ProductGroup g;
  231. try {
  232. g = (ProductGroup) DatabaseObject.getObject(Context.getProductGroup(), 1);
  233. } catch (NodataFoundException ex) {
  234. g = new ProductGroup(Messages.GROUPNAMES.toString());
  235. g.setIDS(-1);
  236. }
  237. gtree.setModel(ProductGroup.toTreeModel(data, g));
  238. Runnable runnable = new Runnable() {
  239. @Override
  240. public void run() {
  241. TreeFormat.expandTree(gtree);
  242. }
  243. };
  244. SwingUtilities.invokeLater(runnable);
  245. }
  246. private void doPopup(MouseEvent evt) {
  247. if (evt.isPopupTrigger()) {
  248. } else {
  249. if (evt.getClickCount() > 1) {
  250. try {
  251. Product p = (Product) DatabaseObject.getObject(Context.getProduct(), Integer.valueOf(listtable.getModel().getValueAt(listtable.getSelectedRow(), 0).toString()));
  252. ProductPanel pan = new ProductPanel(p);
  253. BigPopup.showPopup(this, pan, p.__getCname(), true);
  254. } catch (NodataFoundException ex) {
  255. }
  256. }
  257. }
  258. }
  259. private void filltable(String search, List<ProductGroup> groups) {
  260. QueryCriteria2 qc = new QueryCriteria2();
  261. if (search != null) {
  262. List<List<QueryParameter>> ps = new ArrayList<List<QueryParameter>>();
  263. List<QueryParameter> not = new ArrayList<QueryParameter>();
  264. String[] strings = search.split("\\s+");
  265. for (int i = 0; i < strings.length; i++) {
  266. ArrayList<QueryParameter> psx = new ArrayList<QueryParameter>();
  267. ps.add(psx);
  268. String string = strings[i];
  269. for (String en : new Product().getStringVars()) {
  270. if (!string.startsWith("-")) {
  271. psx.add(new QueryParameter(Context.getProduct(), en, string, QueryParameter.LIKE));
  272. } else {
  273. not.add(new QueryParameter(Context.getProduct(), en, string.substring(1), QueryParameter.NOTLIKE));
  274. }
  275. }
  276. }
  277. for (int i = 0; i < ps.size(); i++) {
  278. qc.or(ps.get(i));
  279. }
  280. qc.and(not);
  281. }
  282. if (!both.isSelected()) {
  283. int type = Product.TYPE_PRODUCT;
  284. if (services.isSelected()) {
  285. type = Product.TYPE_SERVICE;
  286. }
  287. qc.and(new QueryParameter(Context.getProduct(), "inttype", type, QueryParameter.EQUALS));
  288. }
  289. if (groups != null && !groups.isEmpty()) {
  290. List<QueryParameter> ps = new ArrayList<QueryParameter>();
  291. for (int i = 0; i < groups.size(); i++) {
  292. ProductGroup group = groups.get(i);
  293. ps.add(new QueryParameter(Context.getProduct(), "productgroupsids", group.__getIDS(), QueryParameter.EQUALS));
  294. }
  295. qc.or(ps);
  296. }
  297. Context c = Context.getProduct();
  298. c.addReference(Context.getContact().getDbIdentity(), "ids", "suppliersids");
  299. c.addReference(Context.getGroup());
  300. try {
  301. listtable.setModel(new MPTableModel(QueryHandler.instanceOf().clone(c).select(Context.DETAILS_PRODUCTS, qc, new vTimeframe(this.addedafter.getDate(), new Date())).getData()));
  302. } catch (NodataFoundException ex) {
  303. listtable.setModel(new MPTableModel());
  304. }
  305. TableFormat.hideHeader(listtable);
  306. }
  307. public void refresh() {
  308. search();
  309. }
  310. public void flush() {
  311. search();
  312. }
  313. }