/src/mpv5/ui/panels/ExpensePanel.java

http://mp-rechnungs-und-kundenverwaltung.googlecode.com/ · Java · 749 lines · 588 code · 85 blank · 76 comment · 18 complexity · 5531523e492596b01e7660ad3a5b3bcf MD5 · raw file

  1. /*
  2. This file is part of YaBS.
  3. YaBS is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 3 of the License, or
  6. (at your option) any later version.
  7. YaBS is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with YaBS. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. /*
  15. * ContactPanel.java
  16. *
  17. * Created on Nov 20, 2008, 8:17:28 AM
  18. */
  19. package mpv5.ui.panels;
  20. import java.awt.BorderLayout;
  21. import java.awt.Color;
  22. import java.awt.Component;
  23. import java.awt.event.ActionEvent;
  24. import java.awt.event.ActionListener;
  25. import java.awt.event.KeyEvent;
  26. import java.awt.event.KeyListener;
  27. import java.math.BigDecimal;
  28. import java.math.RoundingMode;
  29. import java.util.ArrayList;
  30. import java.util.Date;
  31. import javax.swing.JComponent;
  32. import javax.swing.JFrame;
  33. import javax.swing.JTabbedPane;
  34. import javax.swing.JTable;
  35. import javax.swing.JViewport;
  36. import javax.swing.SwingUtilities;
  37. import javax.swing.table.TableCellRenderer;
  38. import mpv5.db.common.*;
  39. import mpv5.db.objects.Account;
  40. import mpv5.db.objects.Expense;
  41. import mpv5.globals.Messages;
  42. import mpv5.db.objects.Favourite;
  43. import mpv5.db.objects.Tax;
  44. import mpv5.db.objects.Template;
  45. import mpv5.logging.Log;
  46. import mpv5.ui.dialogs.Popup;
  47. import mpv5.ui.toolbars.DataPanelTB;
  48. import mpv5.db.objects.User;
  49. import mpv5.globals.Constants;
  50. import mpv5.globals.Headers;
  51. import mpv5.ui.misc.MPTable;
  52. import mpv5.utils.export.Exportable;
  53. import mpv5.utils.models.MPComboBoxModelItem;
  54. import mpv5.utils.models.MPTableModel;
  55. import mpv5.utils.numberformat.FormatNumber;
  56. import mpv5.ui.misc.TableViewPersistenceHandler;
  57. import mpv5.utils.tables.TableFormat;
  58. import mpv5.utils.ui.TextFieldUtils;
  59. /**
  60. *
  61. *
  62. */
  63. public class ExpensePanel extends javax.swing.JPanel implements DataPanel {
  64. private static final long serialVersionUID = 1L;
  65. private static ExpensePanel me;
  66. private ArrayList<DatabaseObject> accmod;
  67. private BigDecimal tax = BigDecimal.ZERO;
  68. private java.util.ResourceBundle bundle = mpv5.i18n.LanguageManager.getBundle();
  69. /**
  70. * Singleton
  71. * @return
  72. */
  73. public static ExpensePanel instanceOf() {
  74. if (me == null) {
  75. me = new ExpensePanel();
  76. }
  77. me.refresh();
  78. return me;
  79. }
  80. private Expense dataOwner;
  81. private DataPanelTB tb;
  82. /** Creates new form ContactPanel
  83. */
  84. public ExpensePanel() {
  85. initComponents();
  86. setName("expensepanel");
  87. tb = new mpv5.ui.toolbars.DataPanelTB(this);
  88. tb.disableButton(1);
  89. tb.disableButton(8);
  90. tb.disableButton(9);
  91. toolbarpane.add(tb, BorderLayout.CENTER);
  92. dataOwner = new Expense();
  93. addedby.setText(mpv5.db.objects.User.getCurrentUser().getName());
  94. groupnameselect.setSearchEnabled(true);
  95. groupnameselect.setContext(Context.getGroup());
  96. taxrate.setSearchEnabled(true);
  97. taxrate.setContext(Context.getTaxes());
  98. value.getTextField().addKeyListener(new KeyListener() {
  99. public void keyTyped(KeyEvent e) {
  100. calculate();
  101. }
  102. public void keyPressed(KeyEvent ek) {
  103. calculate();
  104. }
  105. public void keyReleased(KeyEvent e) {
  106. calculate();
  107. }
  108. });
  109. taxrate.getComboBox().addActionListener(new ActionListener() {
  110. public void actionPerformed(ActionEvent e) {
  111. getTaxRate();
  112. }
  113. });
  114. getTaxRate();
  115. taxrate.getComboBox().setEditable(false);
  116. itemtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  117. itemtable.setFillsViewportHeight(true);
  118. ((MPTable) itemtable).setDefaultColumns(new Integer[]{100, 333, 100}, new Boolean[]{});
  119. ((MPTable) itemtable).setPersistanceHandler(new TableViewPersistenceHandler((MPTable) itemtable, this));
  120. }
  121. private void calculate() {
  122. try {
  123. netvalue.setText(FormatNumber.formatLokalCurrency(FormatNumber.parseDezimal(value.getText()).divide((tax.divide(Constants.BD100, 9, RoundingMode.HALF_UP)).add(BigDecimal.ONE), 9, RoundingMode.HALF_UP)));
  124. } catch (Exception e) {
  125. Log.Debug(e);
  126. netvalue.setText(FormatNumber.formatLokalCurrency(0d));
  127. }
  128. }
  129. @Override
  130. public DatabaseObject getDataOwner() {
  131. return dataOwner;
  132. }
  133. @Override
  134. public void setDataOwner(DatabaseObject object, boolean populate) {
  135. dataOwner = (Expense) object;
  136. if (populate) {
  137. dataOwner.setPanelData(this);
  138. this.exposeData();
  139. setTitle();
  140. tb.setFavourite(Favourite.isFavourite(object));
  141. tb.setEditable(!object.isReadOnly());
  142. formatTable();
  143. if (object.isReadOnly()) {
  144. Popup.notice(Messages.LOCKED_BY);
  145. }
  146. validate();
  147. }
  148. }
  149. Exportable preloadedExportFile;
  150. Template preloadedTemplate;
  151. private void setTitle() {
  152. if (this.getParent() instanceof JViewport || this.getParent() instanceof JTabbedPane) {
  153. JTabbedPane jTabbedPane = null;
  154. String title1 = cname_;
  155. //this->viewport->scrollpane->tabbedpane
  156. if (this.getParent().getParent().getParent() instanceof JTabbedPane) {
  157. jTabbedPane = (JTabbedPane) this.getParent().getParent().getParent();
  158. } else {
  159. try {
  160. jTabbedPane = (JTabbedPane) this.getParent();
  161. } catch (Exception e) {
  162. //Free floating window
  163. ((JFrame) this.getRootPane().getParent()).setTitle(title1);
  164. }
  165. }
  166. if (jTabbedPane != null) {
  167. jTabbedPane.setTitleAt(jTabbedPane.getSelectedIndex(), title1);
  168. }
  169. }
  170. }
  171. @Override
  172. public void showRequiredFields() {
  173. TextFieldUtils.blinkerRed(value);
  174. }
  175. /** This method is called from within the constructor to
  176. * initialize the form.
  177. * WARNING: Do NOT modify this code. The content of this method is
  178. * always regenerated by the Form Editor.
  179. */
  180. @SuppressWarnings("unchecked")
  181. // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  182. private void initComponents() {
  183. buttonGroup1 = new javax.swing.ButtonGroup();
  184. rightpane = new javax.swing.JPanel();
  185. jPanel1 = new javax.swing.JPanel();
  186. number = new mpv5.ui.beans.LabeledTextField();
  187. addedby = new javax.swing.JLabel();
  188. jLabel4 = new javax.swing.JLabel();
  189. accountselect = new mpv5.ui.beans.LabeledCombobox();
  190. groupnameselect = new mpv5.ui.beans.MPCombobox();
  191. jPanel2 = new javax.swing.JPanel();
  192. value = new mpv5.ui.beans.LabeledTextField();
  193. netvalue = new mpv5.ui.beans.LabeledTextField();
  194. jLabel1 = new javax.swing.JLabel();
  195. jScrollPane1 = new javax.swing.JScrollPane();
  196. notes = new javax.swing.JEditorPane();
  197. taxrate = new mpv5.ui.beans.LabeledCombobox();
  198. path = new javax.swing.JLabel();
  199. labeledDateChooser1 = new mpv5.ui.beans.LabeledDateChooser();
  200. jCheckBox1 = new javax.swing.JCheckBox();
  201. paydate = new mpv5.ui.beans.LabeledDateChooser();
  202. jPanel4 = new javax.swing.JPanel();
  203. jScrollPane3 = new javax.swing.JScrollPane();
  204. itemtable = new mpv5.ui.misc.MPTable(this) {
  205. private static final long serialVersionUID = 1L;
  206. public Component prepareRenderer(TableCellRenderer renderer,
  207. int rowIndex, int vColIndex) {
  208. Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
  209. if (c instanceof JComponent) {
  210. JComponent jc = (JComponent)c;
  211. jc.setToolTipText(String.valueOf(getValueAt(rowIndex, vColIndex)));
  212. }
  213. return c;
  214. }
  215. };
  216. toolbarpane = new javax.swing.JPanel();
  217. setBackground(new java.awt.Color(176, 158, 158));
  218. java.util.ResourceBundle bundle = mpv5.i18n.LanguageManager.getBundle(); // NOI18N
  219. setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("ExpensePanel.border.title_1"))); // NOI18N
  220. setName("Form"); // NOI18N
  221. setOpaque(false);
  222. setLayout(new java.awt.BorderLayout());
  223. rightpane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
  224. rightpane.setName("rightpane"); // NOI18N
  225. jPanel1.setBackground(new java.awt.Color(254, 254, 254));
  226. jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
  227. jPanel1.setName("jPanel1"); // NOI18N
  228. number.set_Label(bundle.getString("ExpensePanel.number._Label")); // NOI18N
  229. number.setEnabled(false);
  230. number.setFocusable(false);
  231. number.setFont(number.getFont());
  232. number.setName("number"); // NOI18N
  233. addedby.setFont(addedby.getFont());
  234. addedby.setText(bundle.getString("ExpensePanel.addedby.text")); // NOI18N
  235. addedby.setToolTipText(bundle.getString("ExpensePanel.addedby.toolTipText")); // NOI18N
  236. addedby.setBorder(javax.swing.BorderFactory.createEtchedBorder());
  237. addedby.setEnabled(false);
  238. addedby.setName("addedby"); // NOI18N
  239. jLabel4.setFont(jLabel4.getFont());
  240. jLabel4.setText(bundle.getString("ExpensePanel.jLabel4.text")); // NOI18N
  241. jLabel4.setName("jLabel4"); // NOI18N
  242. accountselect.set_Label(bundle.getString("ExpensePanel.accountselect._Label")); // NOI18N
  243. accountselect.setName("accountselect"); // NOI18N
  244. accountselect.setSearchOnEnterEnabled(false);
  245. groupnameselect.setName("groupnameselect"); // NOI18N
  246. jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
  247. jPanel2.setName("jPanel2"); // NOI18N
  248. value.set_Label(bundle.getString("ExpensePanel.value._Label")); // NOI18N
  249. value.set_Text(bundle.getString("ExpensePanel.value._Text")); // NOI18N
  250. value.setName("value"); // NOI18N
  251. netvalue.set_Label(bundle.getString("ExpensePanel.netvalue._Label")); // NOI18N
  252. netvalue.set_Text(bundle.getString("ExpensePanel.netvalue._Text")); // NOI18N
  253. netvalue.setEnabled(false);
  254. netvalue.setName("netvalue"); // NOI18N
  255. jLabel1.setText(bundle.getString("ExpensePanel.jLabel1.text")); // NOI18N
  256. jLabel1.setName("jLabel1"); // NOI18N
  257. jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  258. jScrollPane1.setName("jScrollPane1"); // NOI18N
  259. notes.setBackground(new java.awt.Color(254, 254, 254));
  260. notes.setName("notes"); // NOI18N
  261. jScrollPane1.setViewportView(notes);
  262. taxrate.set_Label(bundle.getString("ExpensePanel.taxrate._Label")); // NOI18N
  263. taxrate.setName("taxrate"); // NOI18N
  264. taxrate.addMouseListener(new java.awt.event.MouseAdapter() {
  265. public void mouseClicked(java.awt.event.MouseEvent evt) {
  266. taxrateMouseClicked(evt);
  267. }
  268. public void mouseExited(java.awt.event.MouseEvent evt) {
  269. taxrateMouseExited(evt);
  270. }
  271. });
  272. path.setText(bundle.getString("ExpensePanel.path.text")); // NOI18N
  273. path.setName("path"); // NOI18N
  274. javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
  275. jPanel2.setLayout(jPanel2Layout);
  276. jPanel2Layout.setHorizontalGroup(
  277. jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  278. .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
  279. .addContainerGap()
  280. .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  281. .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING)
  282. .addComponent(path, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 720, Short.MAX_VALUE)
  283. .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
  284. .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup()
  285. .addComponent(value, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  286. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  287. .addComponent(taxrate, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
  288. .addGap(18, 18, 18)
  289. .addComponent(netvalue, javax.swing.GroupLayout.PREFERRED_SIZE, 189, javax.swing.GroupLayout.PREFERRED_SIZE)))
  290. .addContainerGap())
  291. );
  292. jPanel2Layout.setVerticalGroup(
  293. jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  294. .addGroup(jPanel2Layout.createSequentialGroup()
  295. .addContainerGap()
  296. .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  297. .addComponent(value, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  298. .addComponent(taxrate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  299. .addComponent(netvalue, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  300. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  301. .addComponent(jLabel1)
  302. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  303. .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 47, Short.MAX_VALUE)
  304. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  305. .addComponent(path, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)
  306. .addGap(0, 0, 0))
  307. );
  308. labeledDateChooser1.set_Label(bundle.getString("ExpensePanel.labeledDateChooser1._Label")); // NOI18N
  309. labeledDateChooser1.setName("labeledDateChooser1"); // NOI18N
  310. jCheckBox1.setText(bundle.getString("ExpensePanel.jCheckBox1.text")); // NOI18N
  311. jCheckBox1.setMargin(new java.awt.Insets(2, 0, 2, 2));
  312. jCheckBox1.setName("jCheckBox1"); // NOI18N
  313. jCheckBox1.setOpaque(false);
  314. jCheckBox1.addItemListener(new java.awt.event.ItemListener() {
  315. public void itemStateChanged(java.awt.event.ItemEvent evt) {
  316. jCheckBox1ItemStateChanged(evt);
  317. }
  318. });
  319. paydate.set_Label(bundle.getString("ExpensePanel.paydate._Label")); // NOI18N
  320. paydate.setName("paydate"); // NOI18N
  321. javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
  322. jPanel1.setLayout(jPanel1Layout);
  323. jPanel1Layout.setHorizontalGroup(
  324. jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  325. .addGroup(jPanel1Layout.createSequentialGroup()
  326. .addContainerGap()
  327. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  328. .addGroup(jPanel1Layout.createSequentialGroup()
  329. .addComponent(number, javax.swing.GroupLayout.PREFERRED_SIZE, 214, javax.swing.GroupLayout.PREFERRED_SIZE)
  330. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  331. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  332. .addComponent(paydate, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)
  333. .addComponent(labeledDateChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)))
  334. .addComponent(accountselect, javax.swing.GroupLayout.PREFERRED_SIZE, 460, javax.swing.GroupLayout.PREFERRED_SIZE))
  335. .addGap(38, 38, 38)
  336. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  337. .addComponent(jCheckBox1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  338. .addGroup(jPanel1Layout.createSequentialGroup()
  339. .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
  340. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  341. .addComponent(addedby, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE))
  342. .addComponent(groupnameselect, javax.swing.GroupLayout.DEFAULT_SIZE, 187, Short.MAX_VALUE))
  343. .addContainerGap())
  344. .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  345. );
  346. jPanel1Layout.setVerticalGroup(
  347. jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  348. .addGroup(jPanel1Layout.createSequentialGroup()
  349. .addContainerGap()
  350. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
  351. .addComponent(accountselect, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  352. .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)
  353. .addComponent(addedby, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
  354. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  355. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
  356. .addComponent(labeledDateChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  357. .addComponent(number, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  358. .addComponent(groupnameselect, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  359. .addGap(10, 10, 10)
  360. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
  361. .addComponent(jCheckBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
  362. .addComponent(paydate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  363. .addGap(8, 8, 8)
  364. .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  365. );
  366. jPanel4.setBackground(new java.awt.Color(204, 204, 204));
  367. jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());
  368. jPanel4.setName("jPanel4"); // NOI18N
  369. jScrollPane3.setName("jScrollPane3"); // NOI18N
  370. itemtable.setAutoCreateRowSorter(true);
  371. itemtable.setModel(new javax.swing.table.DefaultTableModel(
  372. new Object [][] {
  373. },
  374. new String [] {
  375. }
  376. ));
  377. itemtable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
  378. itemtable.setName("itemtable"); // NOI18N
  379. itemtable.setSurrendersFocusOnKeystroke(true);
  380. itemtable.addMouseListener(new java.awt.event.MouseAdapter() {
  381. public void mouseClicked(java.awt.event.MouseEvent evt) {
  382. itemtableMouseClicked(evt);
  383. }
  384. });
  385. jScrollPane3.setViewportView(itemtable);
  386. javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
  387. jPanel4.setLayout(jPanel4Layout);
  388. jPanel4Layout.setHorizontalGroup(
  389. jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  390. .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 744, Short.MAX_VALUE)
  391. );
  392. jPanel4Layout.setVerticalGroup(
  393. jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  394. .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 108, Short.MAX_VALUE)
  395. );
  396. javax.swing.GroupLayout rightpaneLayout = new javax.swing.GroupLayout(rightpane);
  397. rightpane.setLayout(rightpaneLayout);
  398. rightpaneLayout.setHorizontalGroup(
  399. rightpaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  400. .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  401. .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  402. );
  403. rightpaneLayout.setVerticalGroup(
  404. rightpaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  405. .addGroup(rightpaneLayout.createSequentialGroup()
  406. .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  407. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  408. .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  409. );
  410. add(rightpane, java.awt.BorderLayout.CENTER);
  411. toolbarpane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
  412. toolbarpane.setName("toolbarpane"); // NOI18N
  413. toolbarpane.setLayout(new java.awt.BorderLayout());
  414. add(toolbarpane, java.awt.BorderLayout.NORTH);
  415. }// </editor-fold>//GEN-END:initComponents
  416. private void itemtableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_itemtableMouseClicked
  417. try {
  418. setDataOwner((DatabaseObject) itemtable.getModel().getValueAt(itemtable.getSelectedRow(), 0), true);
  419. } catch (Exception e) {
  420. Log.Debug(this, e.getMessage());
  421. }
  422. }//GEN-LAST:event_itemtableMouseClicked
  423. private void jCheckBox1ItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jCheckBox1ItemStateChanged
  424. if (jCheckBox1.isSelected()) {
  425. paydate.setDate(new Date());
  426. }
  427. }//GEN-LAST:event_jCheckBox1ItemStateChanged
  428. private void taxrateMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_taxrateMouseExited
  429. calculate();
  430. }//GEN-LAST:event_taxrateMouseExited
  431. private void taxrateMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_taxrateMouseClicked
  432. calculate();
  433. }//GEN-LAST:event_taxrateMouseClicked
  434. MPTableModel omodel = null;
  435. // Variables declaration - do not modify//GEN-BEGIN:variables
  436. private mpv5.ui.beans.LabeledCombobox accountselect;
  437. private javax.swing.JLabel addedby;
  438. private javax.swing.ButtonGroup buttonGroup1;
  439. private mpv5.ui.beans.MPCombobox groupnameselect;
  440. private javax.swing.JTable itemtable;
  441. private javax.swing.JCheckBox jCheckBox1;
  442. private javax.swing.JLabel jLabel1;
  443. private javax.swing.JLabel jLabel4;
  444. private javax.swing.JPanel jPanel1;
  445. private javax.swing.JPanel jPanel2;
  446. private javax.swing.JPanel jPanel4;
  447. private javax.swing.JScrollPane jScrollPane1;
  448. private javax.swing.JScrollPane jScrollPane3;
  449. private mpv5.ui.beans.LabeledDateChooser labeledDateChooser1;
  450. private mpv5.ui.beans.LabeledTextField netvalue;
  451. private javax.swing.JEditorPane notes;
  452. private mpv5.ui.beans.LabeledTextField number;
  453. private javax.swing.JLabel path;
  454. private mpv5.ui.beans.LabeledDateChooser paydate;
  455. private javax.swing.JPanel rightpane;
  456. private mpv5.ui.beans.LabeledCombobox taxrate;
  457. private javax.swing.JPanel toolbarpane;
  458. private mpv5.ui.beans.LabeledTextField value;
  459. // End of variables declaration//GEN-END:variables
  460. public String cname_;
  461. public String description_;
  462. public String cnumber_;
  463. public int intaddedby_;
  464. public int ids_;
  465. public Date dateadded_;
  466. public int groupsids_ = 1;
  467. public BigDecimal netvalue_;
  468. public BigDecimal taxpercentvalue_;
  469. public BigDecimal brutvalue_;
  470. public int accountsids_;
  471. public boolean ispaid_;
  472. public Date dateend_;
  473. @Override
  474. public synchronized boolean collectData() {
  475. calculate();
  476. try {
  477. accountsids_ = Integer.valueOf(accountselect.getSelectedItem().getId());
  478. mpv5.db.objects.User.getCurrentUser().getProperties().changeProperty(me, "accountselect", accountsids_);
  479. } catch (Exception e) {
  480. accountsids_ = 1;
  481. }
  482. if (groupnameselect.getSelectedItem() != null) {
  483. groupsids_ = Integer.valueOf(groupnameselect.getSelectedItem().getId());
  484. Log.Debug(this, groupnameselect.getSelectedItem().getId());
  485. } else {
  486. groupsids_ = 1;
  487. }
  488. dateadded_ = labeledDateChooser1.getDate();
  489. dateend_ = paydate.getDate();
  490. ispaid_ = jCheckBox1.isSelected();
  491. intaddedby_ = User.getUserId(addedby.getText());
  492. description_ = notes.getText();
  493. try {
  494. netvalue_ = FormatNumber.parseDezimal(netvalue.getText());
  495. } catch (Exception e) {
  496. netvalue_ = BigDecimal.ZERO;
  497. }
  498. try {
  499. brutvalue_ = FormatNumber.parseDezimal(value.getText());
  500. } catch (Exception e) {
  501. brutvalue_ = BigDecimal.ZERO;
  502. }
  503. try {
  504. taxpercentvalue_ = Tax.getTaxValue(Integer.valueOf(taxrate.getSelectedItem().getId()));
  505. } catch (Exception numberFormatException) {
  506. taxpercentvalue_ = BigDecimal.ZERO;
  507. }
  508. return true;
  509. }
  510. @Override
  511. public void exposeData() {
  512. number.setText(cname_);
  513. notes.setText(description_);
  514. value.setText(FormatNumber.formatDezimal(brutvalue_));
  515. netvalue.setText(FormatNumber.formatDezimal(netvalue_));
  516. try {
  517. Account a = (Account) DatabaseObject.getObject(Context.getAccounts(), accountsids_);
  518. accountselect.setSelectedItem(a.__getIDS());
  519. path.setText(a.__getHierarchypath());
  520. } catch (NodataFoundException ex) {
  521. Log.Debug(this, ex.getMessage());
  522. }
  523. try {
  524. groupnameselect.setModel(DatabaseObject.getObject(Context.getGroup(), groupsids_));
  525. } catch (NodataFoundException ex) {
  526. Log.Debug(this, ex.getMessage());
  527. }
  528. addedby.setText(User.getUsername(intaddedby_));
  529. labeledDateChooser1.setDate(dateadded_);
  530. taxrate.setSelectedItem(Tax.getTaxId(taxpercentvalue_));
  531. paydate.setDate(dateend_);
  532. jCheckBox1.setSelected(ispaid_);
  533. getTaxRate();
  534. }
  535. @Override
  536. public void refresh() {
  537. Runnable runnable = new Runnable() {
  538. @Override
  539. public void run() {
  540. groupnameselect.triggerSearch();
  541. taxrate.triggerSearch();
  542. try {
  543. MPTableModel x = new MPTableModel(Expense.getExpenses(), Headers.EXPENSE);
  544. x.setTypes(String.class, String.class, String.class, String.class, String.class, Boolean.class);
  545. itemtable.setModel(x);
  546. } catch (NodataFoundException e) {
  547. Log.Debug(this, e.getMessage());
  548. }
  549. try {
  550. accmod = DatabaseObject.getObjects(Context.getAccounts(), new QueryCriteria("intaccounttype", Account.EXPENSE));
  551. accountselect.setModel(accmod);
  552. } catch (NodataFoundException e) {
  553. Log.Debug(this, e.getMessage());
  554. }
  555. try {
  556. accountselect.setSelectedItem(mpv5.db.objects.User.getCurrentUser().getProperties().getProperty(me, "accountselect", 1));
  557. formatTable();
  558. } catch (Exception e) {
  559. Log.Debug(this, e.getMessage());
  560. }
  561. getTaxRate();
  562. }
  563. };
  564. SwingUtilities.invokeLater(runnable);
  565. }
  566. /**
  567. *
  568. */
  569. public void formatTable() {
  570. // TableFormat.resizeCols(itemtable, new Integer[]{100, 333, 100}, false);
  571. }
  572. @Override
  573. public void paste(DatabaseObject... dbo) {
  574. mpv5.YabsViewProxy.instance().addMessage(Messages.NOT_POSSIBLE.toString() + Messages.ACTION_PASTE.toString(), Color.RED);
  575. }
  576. @Override
  577. public void showSearchBar(boolean show) {
  578. }
  579. @Override
  580. public void actionAfterSave() {
  581. Runnable runnable = new Runnable() {
  582. public void run() {
  583. try {
  584. itemtable.setModel(new MPTableModel(Expense.getExpenses(), Headers.EXPENSE));
  585. formatTable();
  586. } catch (NodataFoundException ex) {
  587. }
  588. }
  589. };
  590. SwingUtilities.invokeLater(runnable);
  591. }
  592. @Override
  593. public void actionAfterCreate() {
  594. Runnable runnable = new Runnable() {
  595. public void run() {
  596. try {
  597. itemtable.setModel(new MPTableModel(Expense.getExpenses(), Headers.EXPENSE));
  598. formatTable();
  599. } catch (NodataFoundException ex) {
  600. }
  601. }
  602. };
  603. SwingUtilities.invokeLater(runnable);
  604. }
  605. public void actionBeforeCreate() {
  606. }
  607. public void actionBeforeSave() {
  608. }
  609. public void mail() {
  610. }
  611. public void print() {
  612. mpv5.utils.export.Export.print(this);
  613. }
  614. private void getTaxRate() {
  615. try {
  616. MPComboBoxModelItem t = taxrate.getValue();
  617. if (t == null) {
  618. tax = BigDecimal.ZERO;
  619. taxrate.setSelectedIndex(-1);
  620. } else {
  621. tax = Tax.getTaxValue(Integer.valueOf(t.getId()));
  622. }
  623. Log.Debug(this, "Selected Taxrate: " + tax);
  624. } catch (Exception ex) {
  625. Log.Debug(this, "Reading Taxrate failed: Assuming Zero");
  626. tax = BigDecimal.ZERO;
  627. }
  628. calculate();
  629. }
  630. // class calc extends Thread {
  631. //
  632. // @Override
  633. // public void run() {
  634. // while (true) {
  635. // while (isShowing()) {
  636. // BigDecimal tax = BigDecimal.ZERO;
  637. // try {
  638. // MPComboBoxModelItem t = taxrate.getValue();
  639. // tax = Tax.getTaxValue(Integer.valueOf(t.getId()));
  640. // } catch (Exception e) {
  641. // try {
  642. // tax = new BigDecimal(taxrate.getText());
  643. // } catch (NumberFormatException numberFormatException) {
  644. // tax = BigDecimal.ZERO;
  645. // }
  646. // }
  647. //
  648. // try {
  649. // netvalue.setText(FormatNumber.formatLokalCurrency(FormatNumber.parseDezimal(value.getText()).divide((tax.divide(Constants.BD100, 9, BigDecimal.ROUND_HALF_UP)).add(BigDecimal.ONE))));
  650. // } catch (Exception e) {
  651. // netvalue.setText(FormatNumber.formatLokalCurrency(0d));
  652. // }
  653. // try {
  654. // sleep(333);
  655. // } catch (InterruptedException ex) {
  656. // }
  657. // }
  658. // }
  659. // }
  660. // }
  661. }