From 90e85ee65e6e236b76b44b2b5552977684039dc7 Mon Sep 17 00:00:00 2001 From: sazanrjb Date: Mon, 12 Oct 2015 20:17:18 +0545 Subject: [PATCH] Success --- .gitignore | 2 + build.xml | 73 + desktop.ini | 5 + manifest.mf | 3 + nbproject/build-impl.xml | 1413 +++++++++++++++++ nbproject/desktop.ini | 5 + nbproject/genfiles.properties | 8 + nbproject/project.properties | 81 + nbproject/project.xml | 15 + src/com/inventory/dao/CustomerDAO.java | 198 +++ src/com/inventory/dao/ProductDAO.java | 636 ++++++++ src/com/inventory/dao/SupplierDAO.java | 175 ++ src/com/inventory/dao/UserDAO.java | 221 +++ .../inventory/database/ConnectionFactory.java | 71 + src/com/inventory/dto/CustomerDTO.java | 86 + src/com/inventory/dto/ProductDTO.java | 160 ++ src/com/inventory/dto/SupplierDTO.java | 90 ++ src/com/inventory/dto/UserDTO.java | 88 + src/com/inventory/ui/About.form | 159 ++ src/com/inventory/ui/About.java | 138 ++ src/com/inventory/ui/ChangeDetails.form | 349 ++++ src/com/inventory/ui/ChangeDetails.java | 335 ++++ src/com/inventory/ui/CurrentStocks.form | 129 ++ src/com/inventory/ui/CurrentStocks.java | 158 ++ src/com/inventory/ui/Customers.form | 424 +++++ src/com/inventory/ui/Customers.java | 471 ++++++ src/com/inventory/ui/Dashboard.form | 490 ++++++ src/com/inventory/ui/Dashboard.java | 614 +++++++ src/com/inventory/ui/HomePage.form | 96 ++ src/com/inventory/ui/HomePage.java | 90 ++ src/com/inventory/ui/LoginDialog.form | 200 +++ src/com/inventory/ui/LoginDialog.java | 272 ++++ src/com/inventory/ui/Logs.form | 78 + src/com/inventory/ui/Logs.java | 82 + src/com/inventory/ui/Products.form | 442 ++++++ src/com/inventory/ui/Products.java | 481 ++++++ src/com/inventory/ui/Purchase.form | 596 +++++++ src/com/inventory/ui/Purchase.java | 644 ++++++++ src/com/inventory/ui/SalesReport.form | 566 +++++++ src/com/inventory/ui/SalesReport.java | 566 +++++++ src/com/inventory/ui/Suppliers.form | 434 +++++ src/com/inventory/ui/Suppliers.java | 485 ++++++ src/com/inventory/ui/Users.form | 387 +++++ src/com/inventory/ui/Users.java | 421 +++++ src/com/inventory/ui/images/add item.png | Bin 0 -> 2439 bytes src/com/inventory/ui/images/addPeople.png | Bin 0 -> 3168 bytes .../inventory/ui/images/basket-icon small.png | Bin 0 -> 2082 bytes src/com/inventory/ui/images/basket-icon.png | Bin 0 -> 4444 bytes src/com/inventory/ui/images/changeDetails.png | Bin 0 -> 912 bytes src/com/inventory/ui/images/clear.png | Bin 0 -> 4126 bytes src/com/inventory/ui/images/customerLarge.png | Bin 0 -> 4306 bytes src/com/inventory/ui/images/customerSmall.png | Bin 0 -> 1522 bytes src/com/inventory/ui/images/defImage.jpeg | Bin 0 -> 22969 bytes src/com/inventory/ui/images/delete item.png | Bin 0 -> 4554 bytes src/com/inventory/ui/images/deletelarge.png | Bin 0 -> 3522 bytes src/com/inventory/ui/images/edit item.png | Bin 0 -> 2934 bytes src/com/inventory/ui/images/editPeople.png | Bin 0 -> 3208 bytes src/com/inventory/ui/images/front-image.gif | Bin 0 -> 14250 bytes src/com/inventory/ui/images/front-image.png | Bin 0 -> 63284 bytes src/com/inventory/ui/images/home.png | Bin 0 -> 1226 bytes .../ui/images/inventory-maintenance-icon.png | Bin 0 -> 3358 bytes src/com/inventory/ui/images/loginMember.png | Bin 0 -> 13103 bytes src/com/inventory/ui/images/logout-icon.png | Bin 0 -> 2818 bytes src/com/inventory/ui/images/logoutLarge.png | Bin 0 -> 2783 bytes src/com/inventory/ui/images/logoutSmall.png | Bin 0 -> 1041 bytes src/com/inventory/ui/images/menu.png | Bin 0 -> 3206 bytes src/com/inventory/ui/images/printLarge.png | Bin 0 -> 2357 bytes src/com/inventory/ui/images/printSmall.png | Bin 0 -> 889 bytes src/com/inventory/ui/images/productLarge.png | Bin 0 -> 3621 bytes src/com/inventory/ui/images/productSmall.png | Bin 0 -> 1290 bytes src/com/inventory/ui/images/reload.png | Bin 0 -> 1528 bytes src/com/inventory/ui/images/saleLarge.png | Bin 0 -> 2314 bytes src/com/inventory/ui/images/saleSmall.png | Bin 0 -> 1046 bytes src/com/inventory/ui/images/supplierLarge.png | Bin 0 -> 4077 bytes src/com/inventory/ui/images/supplierSmall.png | Bin 0 -> 844 bytes src/com/inventory/ui/images/theme-icon.png | Bin 0 -> 1496 bytes .../inventory/ui/images/theme-small-icon.png | Bin 0 -> 893 bytes src/com/inventory/ui/images/userLarge.png | Bin 0 -> 4478 bytes src/com/inventory/ui/images/userSmall.png | Bin 0 -> 1635 bytes src/com/inventory/ui/ims-logo.png | Bin 0 -> 8025 bytes .../InventoryManagementSystem.java | 67 + test/desktop.ini | 5 + 82 files changed, 12509 insertions(+) create mode 100644 .gitignore create mode 100644 build.xml create mode 100644 desktop.ini create mode 100644 manifest.mf create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/desktop.ini create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml create mode 100644 src/com/inventory/dao/CustomerDAO.java create mode 100644 src/com/inventory/dao/ProductDAO.java create mode 100644 src/com/inventory/dao/SupplierDAO.java create mode 100644 src/com/inventory/dao/UserDAO.java create mode 100644 src/com/inventory/database/ConnectionFactory.java create mode 100644 src/com/inventory/dto/CustomerDTO.java create mode 100644 src/com/inventory/dto/ProductDTO.java create mode 100644 src/com/inventory/dto/SupplierDTO.java create mode 100644 src/com/inventory/dto/UserDTO.java create mode 100644 src/com/inventory/ui/About.form create mode 100644 src/com/inventory/ui/About.java create mode 100644 src/com/inventory/ui/ChangeDetails.form create mode 100644 src/com/inventory/ui/ChangeDetails.java create mode 100644 src/com/inventory/ui/CurrentStocks.form create mode 100644 src/com/inventory/ui/CurrentStocks.java create mode 100644 src/com/inventory/ui/Customers.form create mode 100644 src/com/inventory/ui/Customers.java create mode 100644 src/com/inventory/ui/Dashboard.form create mode 100644 src/com/inventory/ui/Dashboard.java create mode 100644 src/com/inventory/ui/HomePage.form create mode 100644 src/com/inventory/ui/HomePage.java create mode 100644 src/com/inventory/ui/LoginDialog.form create mode 100644 src/com/inventory/ui/LoginDialog.java create mode 100644 src/com/inventory/ui/Logs.form create mode 100644 src/com/inventory/ui/Logs.java create mode 100644 src/com/inventory/ui/Products.form create mode 100644 src/com/inventory/ui/Products.java create mode 100644 src/com/inventory/ui/Purchase.form create mode 100644 src/com/inventory/ui/Purchase.java create mode 100644 src/com/inventory/ui/SalesReport.form create mode 100644 src/com/inventory/ui/SalesReport.java create mode 100644 src/com/inventory/ui/Suppliers.form create mode 100644 src/com/inventory/ui/Suppliers.java create mode 100644 src/com/inventory/ui/Users.form create mode 100644 src/com/inventory/ui/Users.java create mode 100644 src/com/inventory/ui/images/add item.png create mode 100644 src/com/inventory/ui/images/addPeople.png create mode 100644 src/com/inventory/ui/images/basket-icon small.png create mode 100644 src/com/inventory/ui/images/basket-icon.png create mode 100644 src/com/inventory/ui/images/changeDetails.png create mode 100644 src/com/inventory/ui/images/clear.png create mode 100644 src/com/inventory/ui/images/customerLarge.png create mode 100644 src/com/inventory/ui/images/customerSmall.png create mode 100644 src/com/inventory/ui/images/defImage.jpeg create mode 100644 src/com/inventory/ui/images/delete item.png create mode 100644 src/com/inventory/ui/images/deletelarge.png create mode 100644 src/com/inventory/ui/images/edit item.png create mode 100644 src/com/inventory/ui/images/editPeople.png create mode 100644 src/com/inventory/ui/images/front-image.gif create mode 100644 src/com/inventory/ui/images/front-image.png create mode 100644 src/com/inventory/ui/images/home.png create mode 100644 src/com/inventory/ui/images/inventory-maintenance-icon.png create mode 100644 src/com/inventory/ui/images/loginMember.png create mode 100644 src/com/inventory/ui/images/logout-icon.png create mode 100644 src/com/inventory/ui/images/logoutLarge.png create mode 100644 src/com/inventory/ui/images/logoutSmall.png create mode 100644 src/com/inventory/ui/images/menu.png create mode 100644 src/com/inventory/ui/images/printLarge.png create mode 100644 src/com/inventory/ui/images/printSmall.png create mode 100644 src/com/inventory/ui/images/productLarge.png create mode 100644 src/com/inventory/ui/images/productSmall.png create mode 100644 src/com/inventory/ui/images/reload.png create mode 100644 src/com/inventory/ui/images/saleLarge.png create mode 100644 src/com/inventory/ui/images/saleSmall.png create mode 100644 src/com/inventory/ui/images/supplierLarge.png create mode 100644 src/com/inventory/ui/images/supplierSmall.png create mode 100644 src/com/inventory/ui/images/theme-icon.png create mode 100644 src/com/inventory/ui/images/theme-small-icon.png create mode 100644 src/com/inventory/ui/images/userLarge.png create mode 100644 src/com/inventory/ui/images/userSmall.png create mode 100644 src/com/inventory/ui/ims-logo.png create mode 100644 src/inventorymangagementsystem/InventoryManagementSystem.java create mode 100644 test/desktop.ini diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..46cba4a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/nbproject/private/ +/build/ \ No newline at end of file diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..11431ed --- /dev/null +++ b/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project InventoryMangagementSystem. + + + diff --git a/desktop.ini b/desktop.ini new file mode 100644 index 0000000..64a4af2 --- /dev/null +++ b/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files\Google\Drive\googledrivesync.exe +IconIndex=12 + \ No newline at end of file diff --git a/manifest.mf b/manifest.mf new file mode 100644 index 0000000..1574df4 --- /dev/null +++ b/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000..ae68275 --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/desktop.ini b/nbproject/desktop.ini new file mode 100644 index 0000000..64a4af2 --- /dev/null +++ b/nbproject/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files\Google\Drive\googledrivesync.exe +IconIndex=12 + \ No newline at end of file diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..22ac471 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=cec352e0 +build.xml.script.CRC32=062f097c +build.xml.stylesheet.CRC32=8064a381@1.68.1.46 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=cec352e0 +nbproject/build-impl.xml.script.CRC32=d35acb61 +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.74.1.48 diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..f7f667a --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,81 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/InventoryMangagementSystem.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +file.reference.jcalendar-1.4.jar=C:\\Users\\ADMIN\\Desktop\\lib\\jcalendar-1.4.jar +file.reference.jcalendar-1.4.jar-1=C:\\Users\\Sajan\\Desktop\\Inventory Management System\\dist\\lib\\jcalendar-1.4.jar +file.reference.JTattoo-1.6.10.jar=C:\\Users\\ADMIN\\Google Drive\\Inventory Management System\\JTattoo-1.6.10.jar +includes=** +jar.compress=false +javac.classpath=\ + ${file.reference.JTattoo-1.6.10.jar}:\ + ${file.reference.jcalendar-1.4.jar}:\ + ${libs.MySQLDriver.classpath}:\ + ${libs.absolutelayout.classpath}:\ + ${file.reference.jcalendar-1.4.jar-1} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.7 +javac.target=1.7 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=inventorymangagementsystem.InventoryManagementSystem +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..541b117 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + InventoryMangagementSystem + + + + + + + + + diff --git a/src/com/inventory/dao/CustomerDAO.java b/src/com/inventory/dao/CustomerDAO.java new file mode 100644 index 0000000..26d0966 --- /dev/null +++ b/src/com/inventory/dao/CustomerDAO.java @@ -0,0 +1,198 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.dao; + +import com.inventory.database.ConnectionFactory; +import com.inventory.dto.CustomerDTO; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Vector; +import javax.swing.JOptionPane; +import javax.swing.table.DefaultTableModel; + +/** + * + * @author ADMIN + */ +public class CustomerDAO { + Connection con = null; + PreparedStatement pstmt = null; + Statement stmt = null; + ResultSet rs = null; + + public CustomerDAO(){ + try { + con = new ConnectionFactory().getConnection(); + stmt = con.createStatement(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void addCustomerDAO(CustomerDTO customerdto) { + try{ + String query = "SELECT * FROM customers WHERE fullname='"+customerdto.getFullName()+"' AND location='"+customerdto.getLocation()+"' AND phone='"+customerdto.getPhone()+"'"; + rs=stmt.executeQuery(query); + if(rs.next()){ + JOptionPane.showMessageDialog(null,"Same Customer has already been added!"); + }else{ + addFunction(customerdto); + } + }catch(Exception e){ + e.printStackTrace(); + } + }//end of method addCustomerDTO + + public void addFunction(CustomerDTO customerdto){ + try { + String customerCode = null; + String oldCustomerCode = null; + String query1="SELECT * FROM customers"; + rs=stmt.executeQuery(query1); + if(!rs.next()){ + customerCode="cus"+"1"; + } + else{ + String query2="SELECT * FROM customers ORDER by cid DESC"; + rs=stmt.executeQuery(query2); + if(rs.next()){ + oldCustomerCode=rs.getString("customercode"); + Integer scode=Integer.parseInt(oldCustomerCode.substring(3)); + scode++; + customerCode="cus"+scode; + } + } + String q = "INSERT INTO customers VALUES(null,?,?,?,?)"; + pstmt = (PreparedStatement) con.prepareStatement(q); + pstmt.setString(1, customerCode); + pstmt.setString(2, customerdto.getFullName()); + pstmt.setString(3, customerdto.getLocation()); + pstmt.setString(4, customerdto.getPhone()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Inserted Successfully"); + }catch (Exception e) { + e.printStackTrace(); + } + } + + public void editCustomerDAO(CustomerDTO customerdto){ + try { + String query = "UPDATE customers SET fullname=?,location=?,phone=? WHERE customercode=?"; + pstmt = (PreparedStatement) con.prepareStatement(query); + pstmt.setString(1, customerdto.getFullName()); + pstmt.setString(2, customerdto.getLocation()); + pstmt.setString(3, customerdto.getPhone()); + pstmt.setString(4, customerdto.getCustomerCode()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Updated Successfully!"); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void deleteCustomerDAO(String value){ + try{ + System.out.println(value); + String query="delete from customers where customercode=?"; + pstmt=con.prepareStatement(query); + pstmt.setString(1,value); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Deleted.."); + }catch(SQLException e){ + e.printStackTrace(); + } + } + + + public ResultSet getQueryResult() { + try { + String query = "SELECT customercode AS CustomerCode, fullname AS Name, location AS Location, phone AS Phone FROM customers"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + }//end of method getQueryResult + + public ResultSet getCreditCustomersQueryResult() { + try { + String query = "SELECT * FROM customers WHERE credit>0"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getDebitCustomersQueryResult() { + try { + String query = "SELECT * FROM customers WHERE credit=0"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getSearchCustomersQueryResult(String searchTxt) { + try { + String query = "SELECT * FROM customers WHERE fullname LIKE '%"+searchTxt+"%' OR location LIKE '%"+searchTxt+"%' OR customercode LIKE '%"+searchTxt+"%' OR phone LIKE '%"+searchTxt+"%'"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getCustomersName(String customerCode){ + try{ + String query="SELECT * FROM customers WHERE customercode='"+customerCode+"'"; + rs=stmt.executeQuery(query); + }catch(Exception e){ + e.printStackTrace(); + } + return rs; + } + + public ResultSet getProductsName(String productCode){ + try{ + String query="SELECT productname, currentstocks.quantity FROM products INNER JOIN currentstocks ON products.productcode=currentstocks.productcode WHERE currentstocks.productcode='"+productCode+"'"; + rs=stmt.executeQuery(query); + }catch(Exception e){ + e.printStackTrace(); + } + return rs; + } + + + + //start of method DefaultTableModel + public DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { + ResultSetMetaData metaData = rs.getMetaData(); //resultset ko metadata + Vector columnNames = new Vector(); + int columnCount = metaData.getColumnCount(); + + for (int column = 1; column <= columnCount; column++) { + columnNames.add(metaData.getColumnName(column)); + } + + Vector> data = new Vector>(); + while (rs.next()) { + Vector vector = new Vector(); + for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { + vector.add(rs.getObject(columnIndex)); + } + data.add(vector); + } + return new DefaultTableModel(data, columnNames); + }//end of method DefaultTableModel +} diff --git a/src/com/inventory/dao/ProductDAO.java b/src/com/inventory/dao/ProductDAO.java new file mode 100644 index 0000000..0559a46 --- /dev/null +++ b/src/com/inventory/dao/ProductDAO.java @@ -0,0 +1,636 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.dao; + +import com.inventory.database.ConnectionFactory; +import com.inventory.dto.ProductDTO; +import com.inventory.ui.CurrentStocks; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Vector; +import javax.swing.JOptionPane; +import javax.swing.table.DefaultTableModel; + +/** + * + * @author ADMIN + */ +public class ProductDAO { + Connection con = null; + PreparedStatement pstmt = null; + Statement stmt = null; + ResultSet rs1=null; + Statement stmt1=null; + ResultSet rs = null; + + public ProductDAO() { + try { + con = new ConnectionFactory().getConnection(); + stmt = con.createStatement(); + stmt1=con.createStatement(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public ResultSet getSuppliersInfo(){ + try{ + String query="SELECT * FROM suppliers"; + rs=stmt.executeQuery(query); + }catch(Exception e){ + e.printStackTrace(); + } + return rs; + } + + public ResultSet getCustomersInfo(){ + try{ + String query="SELECT * FROM customers"; + rs=stmt.executeQuery(query); + }catch(Exception e){ + e.printStackTrace(); + } + return rs; + } + + public ResultSet getProductInfo(){ + try{ + String query="SELECT * FROM currentstocks"; + rs=stmt.executeQuery(query); + }catch(Exception e){ + e.printStackTrace(); + } + return rs; + } + + public ResultSet getProductsName(){ + try{ + String query="SELECT * FROM products"; + rs=stmt.executeQuery(query); + }catch(Exception e){ + e.printStackTrace(); + } + return rs; + } + + public Double getProductCostPrice(String productCodeTxt){ + Double costPrice = null; + try{ + String query="SELECT costprice FROM products WHERE productcode='"+productCodeTxt+"'"; + rs=stmt.executeQuery(query); + if(rs.next()){ + costPrice=rs.getDouble("costprice"); + } + }catch(Exception e){ + e.printStackTrace(); + } + return costPrice; + } + + public Double getProductSellingPrice(String productCodeTxt){ + Double sellingPrice = null; + try{ + String query="SELECT sellingprice FROM products WHERE productcode='"+productCodeTxt+"'"; + rs=stmt.executeQuery(query); + if(rs.next()){ + sellingPrice=rs.getDouble("sellingprice"); + } + }catch(Exception e){ + e.printStackTrace(); + } + return sellingPrice; + } + + + + String supplierCode; + public String getSupplierCode(String suppliersName){ + try{ + String query="SELECT suppliercode FROM suppliers WHERE fullname='"+suppliersName+"'"; + rs=stmt.executeQuery(query); + while(rs.next()){ + supplierCode=rs.getString("suppliercode"); + } + }catch(Exception e){ + e.printStackTrace(); + } + return supplierCode; + } + //getProductCode + + String productCode; + public String getProductCode(String productsName){ + try{ + String query="SELECT productcode FROM products WHERE productname='"+productsName+"'"; + rs=stmt.executeQuery(query); + while(rs.next()){ + productCode=rs.getString("productcode"); + } + }catch(Exception e){ + e.printStackTrace(); + } + return productCode; + } + + String customerCode; + public String getCustomerCode(String customersName){ + try{ + String query="SELECT customercode FROM customers WHERE fullname='"+customersName+"'"; + rs=stmt.executeQuery(query); + while(rs.next()){ + customerCode=rs.getString("customercode"); + } + }catch(Exception e){ + e.printStackTrace(); + } + return customerCode; + } + + boolean flag=false; + public boolean checkStock(String productcode){ + try{ + String query="SELECT * FROM currentstocks where productcode='"+productcode+"'"; + ResultSet rs=stmt.executeQuery(query); + while(rs.next()){ + flag=true; + } + }catch(Exception e){ + e.printStackTrace(); + } + return flag; + } + + public void addProductDAO(ProductDTO productdto) { + try{ + String query = "SELECT * FROM products WHERE productname='"+productdto.getProductName()+"' AND costprice='"+productdto.getCostPrice()+"' AND sellingprice='"+productdto.getSellingPrice()+"' AND brand='"+productdto.getBrand()+"'"; + rs=stmt.executeQuery(query); + if(rs.next()){ + JOptionPane.showMessageDialog(null,"Same Product has already been added!"); + }else{ + addFunction(productdto); + } + }catch(Exception e){ + e.printStackTrace(); + } + + }//end of method addUserDTO + + public void addFunction(ProductDTO productdto){ + try { + String productCode = null; + String oldProductCode = null; + String query1="SELECT * FROM products"; + rs=stmt.executeQuery(query1); + if(!rs.next()){ + productCode="prod"+"1"; + } + else{ + String query2="SELECT * FROM products ORDER by pid DESC"; + rs=stmt.executeQuery(query2); + if(rs.next()){ + oldProductCode=rs.getString("productcode"); + Integer pcode=Integer.parseInt(oldProductCode.substring(4)); + pcode++; + productCode="prod"+pcode; + } + } + String q = "INSERT INTO products VALUES(null,?,?,?,?,?)"; + pstmt = (PreparedStatement) con.prepareStatement(q); + pstmt.setString(1, productCode); + pstmt.setString(2, productdto.getProductName()); + pstmt.setDouble(3, productdto.getCostPrice()); + pstmt.setDouble(4, productdto.getSellingPrice()); + pstmt.setString(5, productdto.getBrand()); + + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Inserted Successfully! Now you can purchase the product.."); + } catch (Exception e) { + e.printStackTrace(); + } + } + +// addPurchaseDAO + public void addPurchaseDAO(ProductDTO productdto){ + try { + String q = "INSERT INTO purchaseinfo VALUES(null,?,?,?,?,?)"; + pstmt = (PreparedStatement) con.prepareStatement(q); + pstmt.setString(1, productdto.getSupplierCode()); + pstmt.setString(2, productdto.getProductCode()); + pstmt.setString(3, productdto.getDate()); + pstmt.setInt(4, productdto.getQuantity()); + pstmt.setDouble(5, productdto.getTotalCost()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Inserted Successfully"); + } catch (Exception e) { + e.printStackTrace(); + } + + String productCode=productdto.getProductCode(); + if(checkStock(productCode)==true){ + try { + String q = "UPDATE currentstocks SET quantity=quantity+? WHERE productcode=?"; + pstmt = (PreparedStatement) con.prepareStatement(q); + pstmt.setDouble(1, productdto.getQuantity()); + pstmt.setString(2, productdto.getProductCode()); + + pstmt.executeUpdate(); + } catch (Exception e) { + e.printStackTrace(); + } + }else if(checkStock(productCode)==false){ + try{ + String q = "INSERT INTO currentstocks VALUES(?,?)"; + pstmt = (PreparedStatement) con.prepareStatement(q); + + pstmt.setString(1, productdto.getProductCode()); + pstmt.setInt(2, productdto.getQuantity()); + pstmt.executeUpdate(); + }catch(Exception e){ + e.printStackTrace(); + } + } + deleteStock(); + + + } + + public void editProductDAO(ProductDTO productdto) { + try { + String query = "UPDATE products SET productname=?,costprice=?,sellingprice=?,brand=? WHERE productcode=?"; + pstmt = (PreparedStatement) con.prepareStatement(query); + pstmt.setString(1, productdto.getProductName()); + pstmt.setDouble(2, productdto.getCostPrice()); + pstmt.setDouble(3, productdto.getSellingPrice()); + pstmt.setString(4, productdto.getBrand()); + pstmt.setString(5, productdto.getProductCode()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Updated Successfully"); + } catch (Exception e) { + e.printStackTrace(); + } + + }//end of method editUserDTO + + + /* + public void editStock1(ProductDTO productdto,int quantity,String pCode){ + String productCode=productdto.getProductCode(); + try { + if(productdto.getQuantity()>quantity){ + String q = "UPDATE currentstocks SET productname=?,quantity=quantity+? WHERE productcode=?"; + pstmt = (PreparedStatement) con.prepareStatement(q); + pstmt.setString(1, productdto.getProductName()); + int n=productdto.getQuantity()-quantity; + pstmt.setDouble(2, n); + pstmt.setString(3, productdto.getProductCode()); + pstmt.executeUpdate(); + }else if(productdto.getQuantity()quantity){ + JOptionPane.showMessageDialog(null,"Quantity Insufficient"); + }else if(productDTO.getQuantity()<=0){ + JOptionPane.showMessageDialog(null,"Invalid Quantity"); + }else{ + try{ + String q="UPDATE currentstocks SET quantity=quantity-'"+productDTO.getQuantity()+"' WHERE productcode='"+productDTO.getProductCode()+"'"; + String qry="INSERT INTO salesreport(date,productcode,customercode,quantity,revenue,soldby) VALUES('"+sellDate+"','"+productCode+"','"+customersCode+"','"+qty+"','"+totalRevenue+"','"+username+"')"; + stmt.executeUpdate(q); + stmt.executeUpdate(qry); + JOptionPane.showMessageDialog(null,"SUCCESSFULLY SOLD"); + }catch(Exception e){ + e.printStackTrace(); + } + } + }catch(Exception e){ + e.printStackTrace(); + } + } + + public ResultSet getQueryResult() { + try { + String query = "SELECT productcode,productname,costprice,sellingprice,brand FROM products ORDER BY pid"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + }//end of method getQueryResult + + public ResultSet getPurchaseResult() { + try { + String query = "SELECT purchaseid,purchaseinfo.productcode,productname,quantity,totalcost FROM purchaseinfo INNER JOIN products ON products.productcode=purchaseinfo.productcode ORDER BY purchaseid"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + }//end of method getQueryResult + + public ResultSet getQueryResultOfCurrentStocks() { + try { + String query = "SELECT currentstocks.productcode,products.productname,currentstocks.quantity,products.costprice,products.sellingprice FROM currentstocks INNER JOIN products ON currentstocks.productcode=products.productcode"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + }//end of method getQueryResult + + public ResultSet getSalesReportQueryResult() { + try { + String query = "SELECT salesid,salesreport.productcode,productname,salesreport.quantity,revenue,soldby FROM salesreport INNER JOIN products ON salesreport.productcode=products.productcode"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + }//end of method getQueryResult + + public ResultSet getSearchProductsQueryResult(String searchTxt) { + try { + String query = "SELECT pid,productcode,productname,costprice,sellingprice,brand FROM products WHERE productname LIKE '%"+searchTxt+"%' OR brand LIKE '%"+searchTxt+"%' OR productcode LIKE '%"+searchTxt+"%'"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getSearchPurchaseQueryResult(String searchTxt) { + try { + String query = "SELECT purchaseid,purchaseinfo.productcode,productname,quantity,totalcost FROM purchaseinfo INNER JOIN products ON products.productcode=purchaseinfo.productcode WHERE purchaseinfo.productcode LIKE '%"+searchTxt+"%' OR productname LIKE '%"+searchTxt+"%' ORDER BY purchaseid"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getSearchSalesQueryResult(String searchTxt) { + try { + String query = "SELECT salesid,salesreport.productcode,productname,quantity,revenue,soldby FROM salesreport INNER JOIN products ON products.productcode=salesreport.productcode INNER JOIN customers ON customers.customercode=salesreport.customercode WHERE salesreport.productcode LIKE '%"+searchTxt+"%' OR productname LIKE '%"+searchTxt+"%' OR soldby LIKE '%"+searchTxt+"%' OR fullname LIKE '%"+searchTxt+"%' ORDER BY salesid"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getProductName(String pcode){ + try { + String query = "SELECT productname FROM products WHERE productcode='"+pcode+"'"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public String getProductsSupplier(int id){ + String sup=null; + try { + String query = "SELECT fullname FROM suppliers INNER JOIN purchaseinfo ON suppliers.suppliercode=purchaseinfo.suppliercode WHERE purchaseid='"+id+"'"; + rs = stmt.executeQuery(query); + if(rs.next()){ + sup=rs.getString("fullname"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return sup; + } + + public String getProductsCustomer(int id){ + String cus=null; + try { + String query = "SELECT fullname FROM customers INNER JOIN salesreport ON customers.customercode=salesreport.customercode WHERE salesid='"+id+"'"; + rs = stmt.executeQuery(query); + if(rs.next()){ + cus=rs.getString("fullname"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return cus; + } + + + public String getPurchasedDate(int pur){ + String p=null; + try { + String query = "SELECT date FROM purchaseinfo WHERE purchaseid='"+pur+"'"; + rs = stmt.executeQuery(query); + if(rs.next()){ + p=rs.getString("date"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return p; + } + + public String getSoldDate(int salesid){ + String p=null; + try { + String query = "SELECT date FROM salesreport WHERE salesid='"+salesid+"'"; + rs = stmt.executeQuery(query); + if(rs.next()){ + p=rs.getString("date"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return p; + } + + //start of method DefaultTableModle + public DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { + ResultSetMetaData metaData = rs.getMetaData(); //resultset ko metadata + Vector columnNames = new Vector(); + int columnCount = metaData.getColumnCount(); + + for (int column = 1; column <= columnCount; column++) { + columnNames.add(metaData.getColumnName(column)); + } + + Vector> data = new Vector>(); + while (rs.next()) { + Vector vector = new Vector(); + for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { + vector.add(rs.getObject(columnIndex)); + } + data.add(vector); + } + return new DefaultTableModel(data, columnNames); + }//end of method DefaultTableModel +} diff --git a/src/com/inventory/dao/SupplierDAO.java b/src/com/inventory/dao/SupplierDAO.java new file mode 100644 index 0000000..b67c7c5 --- /dev/null +++ b/src/com/inventory/dao/SupplierDAO.java @@ -0,0 +1,175 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.dao; + +import com.inventory.database.ConnectionFactory; +import com.inventory.dto.SupplierDTO; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Vector; +import javax.swing.JOptionPane; +import javax.swing.table.DefaultTableModel; + +/** + * + * @author ADMIN + */ +public class SupplierDAO { + Connection con = null; + PreparedStatement pstmt = null; + Statement stmt = null; + ResultSet rs = null; + + public SupplierDAO() { + try { + con = new ConnectionFactory().getConnection(); + stmt = con.createStatement(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void addSupplierDAO(SupplierDTO supplierdto) { + try{ + String query = "SELECT * FROM suppliers WHERE fullname='"+supplierdto.getFullName()+"' AND location='"+supplierdto.getLocation()+"' AND phone='"+supplierdto.getPhone()+"'"; + rs=stmt.executeQuery(query); + if(rs.next()){ + JOptionPane.showMessageDialog(null,"Same Supplier has already been added!"); + }else{ + addFunction(supplierdto); + } + }catch(Exception e){ + e.printStackTrace(); + } + }//end of method addSupplierDAO + + public void addFunction(SupplierDTO supplierdto){ + try{ + String supplierCode = null; + String oldSupplierCode = null; + String query1="SELECT * FROM suppliers"; + rs=stmt.executeQuery(query1); + if(!rs.next()){ + supplierCode="sup"+"1"; + } + else{ + String query2="SELECT * FROM suppliers ORDER by sid DESC"; + rs=stmt.executeQuery(query2); + if(rs.next()){ + oldSupplierCode=rs.getString("suppliercode"); + Integer scode=Integer.parseInt(oldSupplierCode.substring(3)); + scode++; + supplierCode="sup"+scode; + } + } + String q = "INSERT INTO suppliers VALUES(null,?,?,?,?)"; + pstmt = (PreparedStatement) con.prepareStatement(q); + pstmt.setString(1, supplierCode); + pstmt.setString(2, supplierdto.getFullName()); + pstmt.setString(3, supplierdto.getLocation()); + pstmt.setString(4, supplierdto.getPhone()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Inserted Successfully! Now add some products.."); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void editSupplierDAO(SupplierDTO supplierdto) { + try { + String query = "UPDATE suppliers SET suppliercode=?,fullname=?,location=?,phone=? WHERE suppliercode=?"; + pstmt = (PreparedStatement) con.prepareStatement(query); + pstmt.setString(1, supplierdto.getSupplierCode()); + pstmt.setString(2, supplierdto.getFullName()); + pstmt.setString(3, supplierdto.getLocation()); + pstmt.setString(4, supplierdto.getPhone()); + pstmt.setString(5, supplierdto.getSupplierCode()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Updated Successfully"); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Nothing updated! Click the table data first!"); + } + }//end of method editCustomerDTO + + public void deleteSupplierDAO(String value){ + try{ + String query="delete from suppliers where suppliercode=?"; + pstmt=con.prepareStatement(query); + pstmt.setString(1,value); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Deleted.."); + }catch(SQLException e){ + + } + } + + public ResultSet getQueryResult() { + try { + String query = "SELECT suppliercode AS SupplierCode, fullname AS Name, location as Address, phone AS Phone FROM suppliers"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + }//end of method getQueryResult + + /* + public ResultSet getCreditSuppliersQueryResult() { + try { + String query = "SELECT * FROM suppliers WHERE credit>0"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getDebitSuppliersQueryResult() { + try { + String query = "SELECT * FROM suppliers WHERE credit=0"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + */ + public ResultSet getSearchSuppliersQueryResult(String searchTxt) { + try { + String query = "SELECT suppliercode AS SupplierCode, fullname AS Name, location as Address, phone AS Phone FROM suppliers WHERE fullname LIKE '%"+searchTxt+"%' OR location LIKE '%"+searchTxt+"%' OR suppliercode LIKE '%"+searchTxt+"%' OR phone LIKE '%"+searchTxt+"%'"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + //start of method DefaultTableModel + public DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { + ResultSetMetaData metaData = rs.getMetaData(); //resultset ko metadata + Vector columnNames = new Vector(); + int columnCount = metaData.getColumnCount(); + + for (int column = 1; column <= columnCount; column++) { + columnNames.add(metaData.getColumnName(column)); + } + + Vector> data = new Vector>(); + while (rs.next()) { + Vector vector = new Vector(); + for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { + vector.add(rs.getObject(columnIndex)); + } + data.add(vector); + } + return new DefaultTableModel(data, columnNames); + }//end of method DefaultTableModel +} diff --git a/src/com/inventory/dao/UserDAO.java b/src/com/inventory/dao/UserDAO.java new file mode 100644 index 0000000..35e37c9 --- /dev/null +++ b/src/com/inventory/dao/UserDAO.java @@ -0,0 +1,221 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.inventory.dao; + +import com.inventory.database.ConnectionFactory; +import com.inventory.dto.UserDTO; +import com.inventory.ui.Users; +import java.io.File; +import java.io.FileInputStream; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Vector; +import javax.swing.ImageIcon; +import javax.swing.JOptionPane; +import javax.swing.table.DefaultTableModel; + +/** + * + * @author ADMIN + */ +public class UserDAO { + + Connection con = null; + PreparedStatement pstmt = null; + Statement stmt = null; + ResultSet rs = null; + + public UserDAO() { + try { + con = new ConnectionFactory().getConnection(); + stmt = con.createStatement(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void addUserDAO(UserDTO userdto, String user) { + try{ + String query = "SELECT * FROM users WHERE fullname='"+userdto.getFullName()+"' AND location='"+userdto.getLocation()+"' AND phone='"+userdto.getPhone()+"' AND category='"+userdto.getCategory()+"'"; + rs=stmt.executeQuery(query); + if(rs.next()){ + JOptionPane.showMessageDialog(null,"Same User has already been added!"); + }else{ + addFunction(userdto, user); + } + }catch(Exception e){ + e.printStackTrace(); + } + }//end of method addUserDTO + + public void addFunction(UserDTO userdto, String user){ + try{ + String username = null; + String password = null; + String oldUsername = null; + String encPass=null; + String query1="SELECT * FROM users"; + rs=stmt.executeQuery(query1); + if(!rs.next()){ + username="user"+"1"; + password="user"+"1"; + } + else{ + String query2="SELECT * FROM users ORDER by id DESC"; + rs=stmt.executeQuery(query2); + if(rs.next()){ + oldUsername=rs.getString("username"); + Integer ucode=Integer.parseInt(oldUsername.substring(4)); + ucode++; + username="user"+ucode; + password="user"+ucode; + } + encPass=new Users().encryptPassword(password); + } + + String query = "INSERT INTO users (fullname,location, phone, username, password, category) VALUES(?,?,?,?,?,?)"; + pstmt = (PreparedStatement) con.prepareStatement(query); + pstmt.setString(1, userdto.getFullName()); + pstmt.setString(2, userdto.getLocation()); + pstmt.setString(3, userdto.getPhone()); + pstmt.setString(4, username); + pstmt.setString(5, encPass); + pstmt.setString(6, userdto.getCategory()); + pstmt.executeUpdate(); + if("ADMINISTRATOR".equals(user)) + JOptionPane.showMessageDialog(null, "NEW ADMINISTRATOR ADDED"); + else + JOptionPane.showMessageDialog(null, "NEW NORMAL USER ADDED"); + }catch(Exception e){ + e.printStackTrace(); + } + + } + + public void editUserDAO(UserDTO userdto) { + try { + String query = "UPDATE users SET fullname=?,location=?,phone=?,category=? WHERE username=?"; + pstmt = (PreparedStatement) con.prepareStatement(query); + pstmt.setString(1, userdto.getFullName()); + pstmt.setString(2, userdto.getLocation()); + pstmt.setString(3, userdto.getPhone()); + pstmt.setString(4, userdto.getCategory()); + pstmt.setString(5, userdto.getUsername()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Updated"); + } catch (Exception e) { + e.printStackTrace(); + } + }//end of method editUserDTO + + public void editFunction(UserDTO userdto, String imgLink, File file){ + + try{ + if(imgLink.equals("")) { + + } else { + String query = "UPDATE users SET fullname=?,location=?,phone=?,username=?,password=?,category=?,image=? WHERE id=?"; + FileInputStream fis=new FileInputStream(file); + pstmt = (PreparedStatement) con.prepareStatement(query); + pstmt.setString(1, userdto.getFullName()); + pstmt.setString(2, userdto.getLocation()); + pstmt.setString(3, userdto.getPhone()); + pstmt.setString(4, userdto.getUsername()); + pstmt.setString(5, userdto.getPassword()); + pstmt.setString(6, userdto.getCategory()); + pstmt.setBinaryStream(7, fis,(int)file.length()); + pstmt.setInt(8, userdto.getId()); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Updated"); + } + + }catch(Exception e){ + e.printStackTrace(); + } + } + + public void deleteUserDAO(String value){ + try{ + String query="delete from users where username=?"; + pstmt=con.prepareStatement(query); + pstmt.setString(1,value); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Deleted.."); + }catch(SQLException e){ + } + new Users().loadDatas(); + } + + public ResultSet getQueryResult1() { + try { + String query = "SELECT fullname,location,phone,username,category FROM users"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getUser(String user){ + try { + String query = "SELECT * FROM users WHERE username='"+user+"'"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public ResultSet getPassword(String user, String pass){ + try { + String query = "SELECT password FROM users WHERE username='"+user+"' AND password='"+pass+"'"; + rs = stmt.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public void changePassword(String user, String pass){ + try{ + String query="UPDATE users SET password=? WHERE username=?"; + pstmt=con.prepareStatement(query); + String encPass=new Users().encryptPassword(pass); + pstmt.setString(1, encPass); + pstmt.setString(2, user); + pstmt.executeUpdate(); + JOptionPane.showMessageDialog(null, "Updated!"); + }catch(Exception e){ + e.printStackTrace(); + } + } + + + //start of method DefaultTableModle + public DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { + ResultSetMetaData metaData = rs.getMetaData(); //resultset ko metadata + Vector columnNames = new Vector(); + int columnCount = metaData.getColumnCount(); + + for (int column = 1; column <= columnCount; column++) { + columnNames.add(metaData.getColumnName(column)); + } + + Vector> data = new Vector>(); + while (rs.next()) { + Vector vector = new Vector(); + for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { + vector.add(rs.getObject(columnIndex)); + } + data.add(vector); + } + return new DefaultTableModel(data, columnNames); + }//end of method DefaultTableModel +} diff --git a/src/com/inventory/database/ConnectionFactory.java b/src/com/inventory/database/ConnectionFactory.java new file mode 100644 index 0000000..3e562ef --- /dev/null +++ b/src/com/inventory/database/ConnectionFactory.java @@ -0,0 +1,71 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.inventory.database; + +import java.sql.Statement; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; + +/** + * + * @author ADMIN + */ +public class ConnectionFactory { + + Connection con = null; + Statement stmt = null; + ResultSet rs = null; + boolean flag=false; + + //Constructor starts + public ConnectionFactory(){ + try{ + Class.forName("com.mysql.jdbc.Driver"); + con=DriverManager.getConnection("jdbc:mysql://localhost/IMS?user=root&password"); + stmt=con.createStatement(); + }catch(Exception e){ + e.printStackTrace(); + } + }//end of constructor ConnectionFactory + + //method Connection starts + public Connection getConnection(){ + try{ + Class.forName("com.mysql.jdbc.Driver"); + con=DriverManager.getConnection("jdbc:mysql://localhost/IMS?user=root&password"); + }catch(Exception e){ + e.printStackTrace(); + } + return con; + }//end of method Connection + + //method checkLogin starts + public boolean checkLogin(String username,String password, String user){ + if(user=="ADMINISTRATOR"){ + String query="SELECT * FROM users WHERE username='"+username+"' AND password='1' AND category='ADMINISTRATOR'"; + try{ + rs=stmt.executeQuery(query); + while(rs.next()){ + flag=true; + } + }catch(Exception e){ + e.printStackTrace(); + } + }else{ + String query="SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"'AND category='NORMAL USER'"; + try{ + rs=stmt.executeQuery(query); + while(rs.next()){ + flag=true; + } + }catch(Exception e){ + e.printStackTrace(); + } + } + return true; + } +} diff --git a/src/com/inventory/dto/CustomerDTO.java b/src/com/inventory/dto/CustomerDTO.java new file mode 100644 index 0000000..5e5a526 --- /dev/null +++ b/src/com/inventory/dto/CustomerDTO.java @@ -0,0 +1,86 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.dto; + +/** + * + * @author ADMIN + */ +public class CustomerDTO { + private int customersId; + private String customerCode; + private String fullName; + private String location; + private String phone; + private double debit; + private double credit; + private double balance; + + public int getCustomersId() { + return customersId; + } + + public void setCustomersId(int customersId) { + this.customersId = customersId; + } + + public String getCustomerCode() { + return customerCode; + } + + public void setCustomerCode(String customerCode) { + this.customerCode = customerCode; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public double getDebit() { + return debit; + } + + public void setDebit(double debit) { + this.debit = debit; + } + + public double getCredit() { + return credit; + } + + public void setCredit(double credit) { + this.credit = credit; + } + + public double getBalance() { + return balance; + } + + public void setBalance(double balance) { + this.balance = balance; + } +} diff --git a/src/com/inventory/dto/ProductDTO.java b/src/com/inventory/dto/ProductDTO.java new file mode 100644 index 0000000..c4924fc --- /dev/null +++ b/src/com/inventory/dto/ProductDTO.java @@ -0,0 +1,160 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.dto; + +import com.inventory.dao.ProductDAO; +import java.sql.ResultSet; + +/** + * + * @author ADMIN + */ +public class ProductDTO { + private int productId; + private String productCode; + private String date; + private String sellDate; + private String supplierCode; + private String productName; + private int quantity; + private double costPrice; + private double sellingPrice; + private String brand; + private int userId; + private String customersName; + private String customerCode; + private Double totalCost; + private Double totalRevenue; + + public int getProductId() { + return productId; + } + + public void setProductId(int productId) { + this.productId = productId; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getSellDate() { + return sellDate; + } + + public void setSellDate(String sellDate) { + this.sellDate = sellDate; + } + + public String getSupplierCode() { + return supplierCode; + } + + public void setSupplierCode(String supplierCode) { + this.supplierCode = supplierCode; + } + + public String getCustomerCode() { + return customerCode; + } + + public void setCustomerCode(String customerCode) { + this.customerCode = customerCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + this.quantity = quantity; + } + + public double getCostPrice() { + return costPrice; + } + + public void setCostPrice(double costPrice) { + this.costPrice = costPrice; + } + + public double getSellingPrice() { + return sellingPrice; + } + + public void setSellingPrice(double sellingPrice) { + this.sellingPrice = sellingPrice; + } + + public ResultSet getSuppliersName() { + ResultSet rs=new ProductDAO().getSuppliersInfo(); + return rs; + } + + public ResultSet getCustomersName() { + ResultSet rs=new ProductDAO().getCustomersInfo(); + return rs; + } + + public ResultSet getProductsName() { + ResultSet rs=new ProductDAO().getProductInfo(); + return rs; + } + + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public Double getTotalCost() { + return totalCost; + } + + public void setTotalCost(Double totalCost) { + this.totalCost = totalCost; + } + + public Double getTotalRevenue() { + return totalRevenue; + } + + public void setTotalRevenue(Double totalRevenue) { + this.totalRevenue = totalRevenue; + } + +} diff --git a/src/com/inventory/dto/SupplierDTO.java b/src/com/inventory/dto/SupplierDTO.java new file mode 100644 index 0000000..703667b --- /dev/null +++ b/src/com/inventory/dto/SupplierDTO.java @@ -0,0 +1,90 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.dto; + +/** + * + * @author ADMIN + */ +public class SupplierDTO { + + public int getSupplierId() { + return supplierId; + } + + public void setSupplierId(int supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierCode() { + return supplierCode; + } + + public void setSupplierCode(String suppliersCode) { + this.supplierCode = suppliersCode; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public double getDebit() { + return debit; + } + + public void setDebit(double debit) { + this.debit = debit; + } + + public double getCredit() { + return credit; + } + + public void setCredit(double credit) { + this.credit = credit; + } + + public double getBalance() { + return balance; + } + + public void setBalance(double balance) { + this.balance = balance; + } + + private int supplierId; + private String supplierCode; + private String fullName; + private String location; + private String phone; + private double debit; + private double credit; + private double balance; + + + +} diff --git a/src/com/inventory/dto/UserDTO.java b/src/com/inventory/dto/UserDTO.java new file mode 100644 index 0000000..95cf342 --- /dev/null +++ b/src/com/inventory/dto/UserDTO.java @@ -0,0 +1,88 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.dto; + +import java.io.File; + +/** + * + * @author ADMIN + */ +public class UserDTO { + private int id; + private String fullName; + private String location; + private String phone; + private String username; + private String password; + private String category; + private File image; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public File getImage() { + return image; + } + + public void setImage(File image) { + this.image = image; + } +} diff --git a/src/com/inventory/ui/About.form b/src/com/inventory/ui/About.form new file mode 100644 index 0000000..39fff37 --- /dev/null +++ b/src/com/inventory/ui/About.form @@ -0,0 +1,159 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/inventory/ui/About.java b/src/com/inventory/ui/About.java new file mode 100644 index 0000000..898e69c --- /dev/null +++ b/src/com/inventory/ui/About.java @@ -0,0 +1,138 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +/** + * + * @author ADMIN + */ +public class About extends javax.swing.JPanel { + + /** + * Creates new form About + */ + public About() { + initComponents(); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jLayeredPane1 = new javax.swing.JLayeredPane(); + jLabel1 = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + + jLayeredPane1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 4, true)); + + jLabel1.setFont(new java.awt.Font("Comfortaa", 0, 24)); // NOI18N + jLabel1.setText("Develper Info."); + + jLabel2.setFont(new java.awt.Font("Comfortaa", 0, 14)); // NOI18N + jLabel2.setForeground(new java.awt.Color(0, 0, 102)); + jLabel2.setText("Name: Sajan Rajbhandari"); + + jLabel3.setFont(new java.awt.Font("Comfortaa", 0, 14)); // NOI18N + jLabel3.setForeground(new java.awt.Color(0, 0, 102)); + jLabel3.setText("Email Id: sazanrjb@gmail.com"); + + jLabel4.setFont(new java.awt.Font("Comfortaa", 0, 14)); // NOI18N + jLabel4.setForeground(new java.awt.Color(0, 0, 102)); + jLabel4.setText("Contact: 9849284991"); + + jLabel5.setFont(new java.awt.Font("Comfortaa", 0, 14)); // NOI18N + jLabel5.setForeground(new java.awt.Color(0, 0, 102)); + jLabel5.setText("Website: http://sazanrjb.com.np"); + + javax.swing.GroupLayout jLayeredPane1Layout = new javax.swing.GroupLayout(jLayeredPane1); + jLayeredPane1.setLayout(jLayeredPane1Layout); + jLayeredPane1Layout.setHorizontalGroup( + jLayeredPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jLayeredPane1Layout.createSequentialGroup() + .addGap(150, 150, 150) + .addGroup(jLayeredPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addComponent(jLabel3) + .addComponent(jLabel4) + .addComponent(jLabel5) + .addComponent(jLabel1)) + .addContainerGap(133, Short.MAX_VALUE)) + ); + jLayeredPane1Layout.setVerticalGroup( + jLayeredPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jLayeredPane1Layout.createSequentialGroup() + .addGap(19, 19, 19) + .addComponent(jLabel1) + .addGap(41, 41, 41) + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel5) + .addContainerGap(71, Short.MAX_VALUE)) + ); + jLayeredPane1.setLayer(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER); + jLayeredPane1.setLayer(jLabel2, javax.swing.JLayeredPane.DEFAULT_LAYER); + jLayeredPane1.setLayer(jLabel3, javax.swing.JLayeredPane.DEFAULT_LAYER); + jLayeredPane1.setLayer(jLabel4, javax.swing.JLayeredPane.DEFAULT_LAYER); + jLayeredPane1.setLayer(jLabel5, javax.swing.JLayeredPane.DEFAULT_LAYER); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(44, 44, 44) + .addComponent(jLayeredPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(176, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(35, 35, 35) + .addComponent(jLayeredPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(112, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLayeredPane jLayeredPane1; + private javax.swing.JPanel mainPanel; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/ChangeDetails.form b/src/com/inventory/ui/ChangeDetails.form new file mode 100644 index 0000000..492e92c --- /dev/null +++ b/src/com/inventory/ui/ChangeDetails.form @@ -0,0 +1,349 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/com/inventory/ui/ChangeDetails.java b/src/com/inventory/ui/ChangeDetails.java new file mode 100644 index 0000000..8b33584 --- /dev/null +++ b/src/com/inventory/ui/ChangeDetails.java @@ -0,0 +1,335 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.inventory.ui; + +import com.inventory.dao.UserDAO; +import com.inventory.dto.UserDTO; +import java.sql.ResultSet; +import javax.swing.ImageIcon; +import javax.swing.JOptionPane; + +/** + * + * @author ADMIN + */ +public class ChangeDetails extends javax.swing.JPanel { + + /** + * Creates new form ChangeDetails + */ + + String user; + public ChangeDetails(String userSelect) { + initComponents(); + user = userSelect; + fullNameTxt.setEnabled(false); + locationTxt.setEnabled(false); + phoneTxt.setEnabled(false); + usernameTxt.setEnabled(false); + passwordTxt.setEnabled(false); + newPasswordTxt.setEnabled(false); + categoryTxt.setEnabled(false); + ResultSet rs = new UserDAO().getUser(user); + try { + while (rs.next()) { + fullNameTxt.setText(rs.getString("fullname")); + locationTxt.setText(rs.getString("location")); + phoneTxt.setText(rs.getString("phone")); + usernameTxt.setText(rs.getString("username")); + categoryTxt.setText(rs.getString("category")); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + inputPanel = new javax.swing.JPanel(); + usernameTxt = new javax.swing.JTextField(); + jLabel1 = new javax.swing.JLabel(); + passwordLab = new javax.swing.JLabel(); + locationLab = new javax.swing.JLabel(); + fullNameLab = new javax.swing.JLabel(); + phoneTxt = new javax.swing.JTextField(); + locationTxt = new javax.swing.JTextField(); + fullNameTxt = new javax.swing.JTextField(); + phoneLab = new javax.swing.JLabel(); + clearBttn = new javax.swing.JLabel(); + editBttn = new javax.swing.JLabel(); + passwordTxt = new javax.swing.JPasswordField(); + passwordLab1 = new javax.swing.JLabel(); + categoryTxt = new javax.swing.JTextField(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + passwordLab3 = new javax.swing.JLabel(); + newPasswordTxt = new javax.swing.JPasswordField(); + editProfileBttn = new javax.swing.JButton(); + + inputPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + + usernameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + usernameTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + usernameTxtActionPerformed(evt); + } + }); + + jLabel1.setText("Username"); + + passwordLab.setText("Old Password"); + + locationLab.setText("Location"); + + fullNameLab.setText("Full Name "); + + phoneTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + locationTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + fullNameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + phoneLab.setText("Phone"); + + clearBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttnMouseClicked(evt); + } + }); + + editBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/editPeople.png"))); // NOI18N + editBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + editBttnMouseClicked(evt); + } + }); + + passwordTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + passwordTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + passwordTxtActionPerformed(evt); + } + }); + + passwordLab1.setText("Category"); + + categoryTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + jLabel2.setText("Update"); + + jLabel3.setText("Clear"); + + passwordLab3.setText("New Password"); + + newPasswordTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + newPasswordTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + newPasswordTxtActionPerformed(evt); + } + }); + + javax.swing.GroupLayout inputPanelLayout = new javax.swing.GroupLayout(inputPanel); + inputPanel.setLayout(inputPanelLayout); + inputPanelLayout.setHorizontalGroup( + inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel2) + .addGap(23, 23, 23) + .addComponent(jLabel3)) + .addGroup(inputPanelLayout.createSequentialGroup() + .addComponent(editBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(clearBttn)) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(passwordLab3, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(locationLab) + .addComponent(fullNameLab) + .addComponent(phoneLab) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(passwordLab1, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(passwordLab, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(fullNameTxt, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(locationTxt, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(phoneTxt, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(usernameTxt, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(passwordTxt) + .addComponent(categoryTxt) + .addComponent(newPasswordTxt)))) + .addGap(34, 34, 34)) + ); + inputPanelLayout.setVerticalGroup( + inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(20, 20, 20) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(fullNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(fullNameLab)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(locationLab) + .addComponent(locationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(phoneLab) + .addComponent(phoneTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(usernameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(passwordTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(passwordLab, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(newPasswordTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(passwordLab3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(passwordLab1, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(categoryTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(editBttn) + .addComponent(clearBttn)) + .addGap(12, 12, 12) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(jLabel3)) + .addGap(29, 29, 29)) + ); + + jTabbedPane1.addTab("Profile Detail", inputPanel); + + editProfileBttn.setText("Edit Profile"); + editProfileBttn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + editProfileBttnActionPerformed(evt); + } + }); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(172, 172, 172) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(editProfileBttn) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 381, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(126, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(editProfileBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jTabbedPane1) + .addContainerGap()) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void usernameTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_usernameTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_usernameTxtActionPerformed + + private void passwordTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_passwordTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_passwordTxtActionPerformed + + private void editBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_editBttnMouseClicked + if (fullNameTxt.getText().equals("") || locationTxt.getText().equals("") || phoneTxt.getText().equals("") || usernameTxt.getText().equals("") || passwordTxt.getText().equals("") || newPasswordTxt.getText().equals("")) { + JOptionPane.showMessageDialog(null, "Please fill all the fields!"); + } else { + + UserDTO userdto = new UserDTO(); + + String encryptPass=new Users().encryptPassword(passwordTxt.getText()); + ResultSet rs = new UserDAO().getPassword(usernameTxt.getText(),encryptPass); + try { + if(rs.next()) { + new UserDAO().changePassword(usernameTxt.getText(),newPasswordTxt.getText()); + }else{ + JOptionPane.showMessageDialog(null,"Wrong Password!"); + } + }catch (Exception e) { + e.printStackTrace(); + } + } + }//GEN-LAST:event_editBttnMouseClicked + + + private void editProfileBttnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editProfileBttnActionPerformed + passwordTxt.setEnabled(true); + newPasswordTxt.setEnabled(true); + }//GEN-LAST:event_editProfileBttnActionPerformed + + private void clearBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttnMouseClicked + passwordTxt.setText(""); + newPasswordTxt.setText(""); + }//GEN-LAST:event_clearBttnMouseClicked + + private void newPasswordTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newPasswordTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_newPasswordTxtActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTextField categoryTxt; + private javax.swing.JLabel clearBttn; + private javax.swing.JLabel editBttn; + private javax.swing.JButton editProfileBttn; + private javax.swing.JLabel fullNameLab; + private javax.swing.JTextField fullNameTxt; + public javax.swing.JPanel inputPanel; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JLabel locationLab; + private javax.swing.JTextField locationTxt; + public javax.swing.JPanel mainPanel; + private javax.swing.JPasswordField newPasswordTxt; + private javax.swing.JLabel passwordLab; + private javax.swing.JLabel passwordLab1; + private javax.swing.JLabel passwordLab3; + private javax.swing.JPasswordField passwordTxt; + private javax.swing.JLabel phoneLab; + private javax.swing.JTextField phoneTxt; + private javax.swing.JTextField usernameTxt; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/CurrentStocks.form b/src/com/inventory/ui/CurrentStocks.form new file mode 100644 index 0000000..c33096b --- /dev/null +++ b/src/com/inventory/ui/CurrentStocks.form @@ -0,0 +1,129 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ diff --git a/src/com/inventory/ui/CurrentStocks.java b/src/com/inventory/ui/CurrentStocks.java new file mode 100644 index 0000000..b1dcde3 --- /dev/null +++ b/src/com/inventory/ui/CurrentStocks.java @@ -0,0 +1,158 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.dao.CustomerDAO; +import com.inventory.dao.ProductDAO; +import com.inventory.dto.ProductDTO; +import java.sql.ResultSet; +import java.sql.SQLException; +import javax.swing.JOptionPane; + +/** + * + * @author ADMIN + */ +public class CurrentStocks extends javax.swing.JPanel { + + /** + * Creates new form CurrentStocks + */ + String u; + public CurrentStocks(){ + + } + + public CurrentStocks(String username) { + + initComponents(); + loadDatas(); + u=username; + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + jSeparator1 = new javax.swing.JSeparator(); + jLabel1 = new javax.swing.JLabel(); + refreshBttn = new javax.swing.JButton(); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + table.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + tableMouseClicked(evt); + } + }); + jScrollPane1.setViewportView(table); + + jLabel1.setFont(new java.awt.Font("Comfortaa", 1, 36)); // NOI18N + jLabel1.setForeground(new java.awt.Color(0, 102, 204)); + jLabel1.setText("CURRENT STOCKS"); + + refreshBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/reload.png"))); // NOI18N + refreshBttn.setText("Refresh"); + refreshBttn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + refreshBttnActionPerformed(evt); + } + }); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 747, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(refreshBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel1))) + .addGap(0, 58, Short.MAX_VALUE))) + .addContainerGap()) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel1) + .addComponent(refreshBttn)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 384, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(56, 56, 56)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked + + }//GEN-LAST:event_tableMouseClicked + + private void refreshBttnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshBttnActionPerformed + + loadDatas(); + }//GEN-LAST:event_refreshBttnActionPerformed + + public void loadDatas(){ + try{ + ProductDAO productDAO=new ProductDAO(); + table.setModel(productDAO.buildTableModel(productDAO.getQueryResultOfCurrentStocks())); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JPanel mainPanel; + private javax.swing.JButton refreshBttn; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/Customers.form b/src/com/inventory/ui/Customers.form new file mode 100644 index 0000000..970b299 --- /dev/null +++ b/src/com/inventory/ui/Customers.form @@ -0,0 +1,424 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+
+ diff --git a/src/com/inventory/ui/Customers.java b/src/com/inventory/ui/Customers.java new file mode 100644 index 0000000..9680175 --- /dev/null +++ b/src/com/inventory/ui/Customers.java @@ -0,0 +1,471 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.dao.CustomerDAO; +import com.inventory.dto.CustomerDTO; +import com.inventory.dto.UserDTO; +import java.sql.ResultSet; +import java.sql.SQLException; +import javax.swing.JOptionPane; + +/** + * + * @author ADMIN + */ +public class Customers extends javax.swing.JPanel { + + /** + * Creates new form Customers + */ + public Customers() { + initComponents(); + loadDatas(); + // table.getColumn("customercode").setMaxWidth(0); + customerCodeTxt.setVisible(false); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jLabel12 = new javax.swing.JLabel(); + searchByLab = new javax.swing.JLabel(); + searchTxt = new javax.swing.JTextField(); + jSeparator1 = new javax.swing.JSeparator(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + inputPanel = new javax.swing.JPanel(); + customersNameTxt = new javax.swing.JTextField(); + phoneTxt = new javax.swing.JTextField(); + locationTxt = new javax.swing.JTextField(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + addBttn = new javax.swing.JLabel(); + editBttn = new javax.swing.JLabel(); + deleteBttn = new javax.swing.JLabel(); + clearBttn = new javax.swing.JLabel(); + customerCodeTxt = new javax.swing.JTextField(); + jLabel11 = new javax.swing.JLabel(); + editLab = new javax.swing.JLabel(); + jLabel6 = new javax.swing.JLabel(); + deleteLab = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + + addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + formMouseClicked(evt); + } + }); + + mainPanel.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + mainPanelMouseClicked(evt); + } + }); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 921, Short.MAX_VALUE) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 596, Short.MAX_VALUE) + ); + + jLabel12.setForeground(new java.awt.Color(102, 102, 255)); + jLabel12.setText("(Search using Full Name, Location, Phone OR Customer Code)"); + + searchByLab.setText("SEARCH"); + + searchTxt.setToolTipText("Search using Full Name Location, Phone OR Customer Code"); + searchTxt.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR)); + searchTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + searchTxtKeyReleased(evt); + } + }); + + inputPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("PLEASE ENTER ALL THE FIELDS")); + + customersNameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + customersNameTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + customersNameTxtActionPerformed(evt); + } + }); + + phoneTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + phoneTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + phoneTxtActionPerformed(evt); + } + }); + + locationTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + locationTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + locationTxtActionPerformed(evt); + } + }); + + jLabel2.setText("Customer's name"); + + jLabel3.setText("Location"); + + jLabel5.setText("Phone"); + + addBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/addPeople.png"))); // NOI18N + addBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + addBttnMouseClicked(evt); + } + }); + + editBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/editPeople.png"))); // NOI18N + editBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + editBttnMouseClicked(evt); + } + }); + + deleteBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/deletelarge.png"))); // NOI18N + deleteBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + deleteBttnMouseClicked(evt); + } + }); + + clearBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttnMouseClicked(evt); + } + }); + + customerCodeTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + customerCodeTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + customerCodeTxtActionPerformed(evt); + } + }); + + jLabel11.setText("Clear"); + + editLab.setText("Edit"); + + jLabel6.setText("Add"); + + deleteLab.setText("Delete"); + + javax.swing.GroupLayout inputPanelLayout = new javax.swing.GroupLayout(inputPanel); + inputPanel.setLayout(inputPanelLayout); + inputPanelLayout.setHorizontalGroup( + inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addComponent(jLabel3) + .addComponent(jLabel5)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(locationTxt, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE) + .addComponent(customersNameTxt, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(phoneTxt))) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(inputPanelLayout.createSequentialGroup() + .addComponent(addBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(editBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)) + .addGroup(inputPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel6) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(editLab) + .addGap(19, 19, 19))) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(deleteBttn) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(deleteLab))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel11) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 74, Short.MAX_VALUE)) + .addGroup(inputPanelLayout.createSequentialGroup() + .addComponent(clearBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(customerCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 12, javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addContainerGap(36, Short.MAX_VALUE)) + ); + inputPanelLayout.setVerticalGroup( + inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(54, 54, 54) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(customersNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(locationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(phoneTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5)) + .addGap(18, 18, 18) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(editBttn, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(addBttn, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(deleteBttn, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(clearBttn, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(customerCodeTxt, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(4, 4, 4) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(editLab) + .addComponent(jLabel6) + .addComponent(deleteLab) + .addComponent(jLabel11)) + .addContainerGap(130, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab("CUSTOMERS", inputPanel); + + jLabel1.setFont(new java.awt.Font("Comfortaa", 1, 36)); // NOI18N + jLabel1.setForeground(new java.awt.Color(0, 102, 204)); + jLabel1.setText("CUSTOMERS"); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + table.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + tableMouseClicked(evt); + } + }); + jScrollPane1.setViewportView(table); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel12) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchByLab) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(173, 173, 173)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 544, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addGap(560, 560, 560) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 324, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 864, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(12, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel1) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchByLab, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel12))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(jTabbedPane1) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGap(0, 4, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void locationTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_locationTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_locationTxtActionPerformed + + private void phoneTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_phoneTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_phoneTxtActionPerformed + + private void customersNameTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_customersNameTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_customersNameTxtActionPerformed + + private void addBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addBttnMouseClicked + if(customersNameTxt.getText().equals("") || locationTxt.getText().equals("") || phoneTxt.getText().equals("") ){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + + CustomerDTO customerdto=new CustomerDTO(); + customerdto.setFullName(customersNameTxt.getText()); + customerdto.setLocation(locationTxt.getText()); + customerdto.setPhone(phoneTxt.getText()); + new CustomerDAO().addCustomerDAO(customerdto); + loadDatas(); + } + }//GEN-LAST:event_addBttnMouseClicked + + private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked + int row = table.getSelectedRow(); + int column = table.getColumnCount(); + Object[] val = new Object[column]; + for(int i = 0; i < column; i++) { + val[i]=table.getValueAt(row, i); + } + customerCodeTxt.setText((String) val[0]); + customersNameTxt.setText((String) val[1]); + locationTxt.setText((String) val[2]); + phoneTxt.setText((String) val[3]); + }//GEN-LAST:event_tableMouseClicked + + private void customerCodeTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_customerCodeTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_customerCodeTxtActionPerformed + + private void editBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_editBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + if(customersNameTxt.getText().equals("") || locationTxt.getText().equals("") || phoneTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + + CustomerDTO customerdto=new CustomerDTO(); + customerdto.setCustomerCode(customerCodeTxt.getText()); + customerdto.setFullName(customersNameTxt.getText()); + customerdto.setLocation(locationTxt.getText()); + customerdto.setPhone(phoneTxt.getText()); + new CustomerDAO().editCustomerDAO(customerdto); + loadDatas(); + // table.getColumn("customercode").setMaxWidth(0); + } + } + }//GEN-LAST:event_editBttnMouseClicked + + private void deleteBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deleteBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + new CustomerDAO().deleteCustomerDAO(table.getValueAt(table.getSelectedRow(),0).toString()); + loadDatas(); + } + }//GEN-LAST:event_deleteBttnMouseClicked + + private void clearBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttnMouseClicked + customerCodeTxt.setText(""); + customersNameTxt.setText(""); + locationTxt.setText(""); + phoneTxt.setText(""); + }//GEN-LAST:event_clearBttnMouseClicked + + private void searchTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTxtKeyReleased + String text=searchTxt.getText(); + loadSearchCustomersDatas(text); + }//GEN-LAST:event_searchTxtKeyReleased + + private void mainPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mainPanelMouseClicked + customerCodeTxt.setText(""); + customersNameTxt.setText(""); + locationTxt.setText(""); + phoneTxt.setText(""); + }//GEN-LAST:event_mainPanelMouseClicked + + private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked + + }//GEN-LAST:event_formMouseClicked + + public void loadDatas(){ + try{ + CustomerDAO customerDAO=new CustomerDAO(); + table.setModel(customerDAO.buildTableModel(customerDAO.getQueryResult())); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + public void loadSearchCustomersDatas(String text){ + try{ + CustomerDAO customerDAO=new CustomerDAO(); + table.setModel(customerDAO.buildTableModel(customerDAO.getSearchCustomersQueryResult(text))); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel addBttn; + private javax.swing.JLabel clearBttn; + private javax.swing.JTextField customerCodeTxt; + private javax.swing.JTextField customersNameTxt; + private javax.swing.JLabel deleteBttn; + private javax.swing.JLabel deleteLab; + private javax.swing.JLabel editBttn; + private javax.swing.JLabel editLab; + private javax.swing.JPanel inputPanel; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel11; + private javax.swing.JLabel jLabel12; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel6; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JTextField locationTxt; + public javax.swing.JPanel mainPanel; + private javax.swing.JTextField phoneTxt; + private javax.swing.JLabel searchByLab; + private javax.swing.JTextField searchTxt; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/Dashboard.form b/src/com/inventory/ui/Dashboard.form new file mode 100644 index 0000000..aa32a80 --- /dev/null +++ b/src/com/inventory/ui/Dashboard.form @@ -0,0 +1,490 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/com/inventory/ui/Dashboard.java b/src/com/inventory/ui/Dashboard.java new file mode 100644 index 0000000..e80937f --- /dev/null +++ b/src/com/inventory/ui/Dashboard.java @@ -0,0 +1,614 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.inventory.ui; + +import java.awt.CardLayout; +import java.awt.Dimension; +import java.awt.Toolkit; +import javax.swing.ButtonGroup; +import javax.swing.JFrame; +import javax.swing.JScrollPane; + +/** + * + * @author ADMIN + */ + +public class Dashboard extends javax.swing.JFrame { + + /** + * Creates new form Dashboard + */ + CardLayout layout; + String userSelect; + String username; + ButtonGroup theme; + + public Dashboard(){ + + } + + public Dashboard(String user,String username) { + initComponents(); + navPanel.setVisible(true); + menuPanel.setVisible(true); + layout = new CardLayout(); + userSelect = user; + this.username=username; + if ("NORMAL USER".equalsIgnoreCase(userSelect)) { + NotForNormalUser(); + } + mainPanel.setLayout(layout); + mainPanel.add("First", new HomePage()); + mainPanel.add("Second", new Products(username)); + mainPanel.add("Third", new Customers()); + mainPanel.add("Fourth", new Suppliers()); + mainPanel.add("Sixth", new Users()); + mainPanel.add("Seventh", new Logs()); + mainPanel.add("Eight", new ChangeDetails(username)); + mainPanel.add("Ninth", new CurrentStocks(username)); + mainPanel.add("Tenth", new SalesReport(username)); + mainPanel.add("Eleventh", new Purchase()); + mainPanel.add("Twelvth", new About()); + layout.next(mainPanel); + layout.next(mainPanel); + + /* theme=new ButtonGroup(); + theme.add(hifiThemeMenuItem); + theme.add(graphiteThemeMenuItem); + */ + //ImageIcon icon=new ImageIcon("userLarge.png"); + setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("ims-logo.png"))); + Toolkit theKit = getToolkit(); + Dimension dim = theKit.getScreenSize(); + setSize(dim); + setTitle("Inventory Management System"); + setLocationRelativeTo(null); + setVisible(true); + } + + public void addProductsPage() { + layout.show(mainPanel, "Second"); + } + + public void addCustomersPage() { + layout.show(mainPanel, "Third"); + } + + public void addSuppliersPage() { + layout.show(mainPanel, "Fourth"); + } + + public void addUsersPage() { + layout.show(mainPanel, "Sixth"); + } + + public void addLogsPage() { + layout.show(mainPanel, "Seventh"); + } + + public void addChangeDetailsPage() { + layout.show(mainPanel, "Eight"); + } + + public void addCurrentStocksPage() { + layout.show(mainPanel, "Ninth"); + } + + public void addSalesReportPage() { + layout.show(mainPanel, "Tenth"); + } + + public void addPurchasePage() { + layout.show(mainPanel, "Eleventh"); + } + + public void addAboutPage() { + layout.show(mainPanel, "Twelvth"); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jPanel1 = new javax.swing.JPanel(); + bttnPanel = new javax.swing.JPanel(); + navPanel = new javax.swing.JPanel(); + jLabel6 = new javax.swing.JLabel(); + addProductBttn = new javax.swing.JLabel(); + customersBttn = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + suppliersBttn = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + userBttn = new javax.swing.JLabel(); + userLab = new javax.swing.JLabel(); + currentStocksBttn = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + salesReportBttn = new javax.swing.JLabel(); + salesReportLab = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + purchaseBttn = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + menuPanel = new javax.swing.JPanel(); + menuBttn = new javax.swing.JLabel(); + jMenuBar1 = new javax.swing.JMenuBar(); + fileMenu = new javax.swing.JMenu(); + homeMenuItem = new javax.swing.JMenuItem(); + jMenuItem1 = new javax.swing.JMenuItem(); + salesMenuItem = new javax.swing.JMenu(); + changeDetailsMenuItem = new javax.swing.JMenuItem(); + logoutMenuItem = new javax.swing.JMenuItem(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + bttnPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); + + javax.swing.GroupLayout bttnPanelLayout = new javax.swing.GroupLayout(bttnPanel); + bttnPanel.setLayout(bttnPanelLayout); + bttnPanelLayout.setHorizontalGroup( + bttnPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 255, Short.MAX_VALUE) + ); + bttnPanelLayout.setVerticalGroup( + bttnPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 164, Short.MAX_VALUE) + ); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(193, 193, 193) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(570, 570, 570) + .addComponent(bttnPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(440, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(486, 486, 486) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 130, Short.MAX_VALUE) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(183, 183, 183)) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(bttnPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + ); + + navPanel.setBackground(new java.awt.Color(255, 255, 255)); + navPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, null, null, new java.awt.Color(204, 204, 255), new java.awt.Color(204, 204, 255))); + navPanel.setForeground(new java.awt.Color(255, 255, 255)); + + jLabel6.setText("Products"); + + addProductBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/productLarge.png"))); // NOI18N + addProductBttn.setToolTipText("Products"); + addProductBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + addProductBttnMouseClicked(evt); + } + }); + + customersBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/customerLarge.png"))); // NOI18N + customersBttn.setToolTipText("Customers"); + customersBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + customersBttnMouseClicked(evt); + } + }); + + jLabel3.setText("Customers"); + + suppliersBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/supplierLarge.png"))); // NOI18N + suppliersBttn.setToolTipText("Suppliers"); + suppliersBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + suppliersBttnMouseClicked(evt); + } + }); + + jLabel5.setText("Suppliers"); + + userBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/userLarge.png"))); // NOI18N + userBttn.setToolTipText("Users"); + userBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + userBttnMouseClicked(evt); + } + }); + + userLab.setText("Users"); + + currentStocksBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/inventory-maintenance-icon.png"))); // NOI18N + currentStocksBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + currentStocksBttnMouseClicked(evt); + } + }); + + jLabel4.setText("Current Stocks"); + + salesReportBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/saleLarge.png"))); // NOI18N + salesReportBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + salesReportBttnMouseClicked(evt); + } + }); + + salesReportLab.setText("Sales"); + + jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/home.png"))); // NOI18N + jLabel1.setText("Home"); + jLabel1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jLabel1MouseClicked(evt); + } + }); + + purchaseBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/basket-icon.png"))); // NOI18N + purchaseBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + purchaseBttnMouseClicked(evt); + } + }); + + jLabel7.setText("Purchase"); + + javax.swing.GroupLayout navPanelLayout = new javax.swing.GroupLayout(navPanel); + navPanel.setLayout(navPanelLayout); + navPanelLayout.setHorizontalGroup( + navPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(14, 14, 14) + .addComponent(jLabel5)) + .addGroup(navPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(suppliersBttn)) + .addGroup(navPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(addProductBttn)) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(5, 5, 5) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(16, 16, 16) + .addComponent(jLabel6)) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(15, 15, 15) + .addGroup(navPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(userLab)) + .addComponent(userBttn, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(15, 15, 15) + .addComponent(customersBttn)) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(15, 15, 15) + .addComponent(jLabel3)) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(14, 14, 14) + .addGroup(navPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(purchaseBttn) + .addComponent(jLabel7))) + .addGroup(navPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(currentStocksBttn)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, navPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel4) + .addContainerGap()) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(15, 15, 15) + .addGroup(navPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(navPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(salesReportLab)) + .addComponent(salesReportBttn))) + ); + navPanelLayout.setVerticalGroup( + navPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(navPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1) + .addGap(18, 18, 18) + .addComponent(suppliersBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel5) + .addGap(18, 18, 18) + .addComponent(addProductBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel6) + .addGap(18, 18, 18) + .addComponent(purchaseBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel7) + .addGap(18, 18, 18) + .addComponent(customersBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel3) + .addGap(18, 18, 18) + .addComponent(currentStocksBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel4) + .addGap(18, 18, 18) + .addComponent(salesReportBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(salesReportLab) + .addGap(18, 18, 18) + .addComponent(userBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(userLab) + .addContainerGap(351, Short.MAX_VALUE)) + ); + + menuPanel.setPreferredSize(new java.awt.Dimension(61, 16)); + + menuBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/menu.png"))); // NOI18N + menuBttn.setPreferredSize(new java.awt.Dimension(77, 16)); + menuBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + menuBttnMouseClicked(evt); + } + }); + + javax.swing.GroupLayout menuPanelLayout = new javax.swing.GroupLayout(menuPanel); + menuPanel.setLayout(menuPanelLayout); + menuPanelLayout.setHorizontalGroup( + menuPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(menuPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(menuBttn, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(1556, Short.MAX_VALUE)) + ); + menuPanelLayout.setVerticalGroup( + menuPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, menuPanelLayout.createSequentialGroup() + .addComponent(menuBttn, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + ); + + fileMenu.setMnemonic('f'); + fileMenu.setText("File"); + + homeMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_H, java.awt.event.InputEvent.CTRL_MASK)); + homeMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/home.png"))); // NOI18N + homeMenuItem.setText("Home"); + homeMenuItem.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + homeMenuItemActionPerformed(evt); + } + }); + fileMenu.add(homeMenuItem); + + jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK)); + jMenuItem1.setText("About"); + jMenuItem1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jMenuItem1ActionPerformed(evt); + } + }); + fileMenu.add(jMenuItem1); + + jMenuBar1.add(fileMenu); + + salesMenuItem.setText("Action"); + + changeDetailsMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_2, java.awt.event.InputEvent.CTRL_MASK)); + changeDetailsMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/changeDetails.png"))); // NOI18N + changeDetailsMenuItem.setText("Change Details"); + changeDetailsMenuItem.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + changeDetailsMenuItemMouseClicked(evt); + } + }); + changeDetailsMenuItem.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + changeDetailsMenuItemActionPerformed(evt); + } + }); + salesMenuItem.add(changeDetailsMenuItem); + + logoutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_3, java.awt.event.InputEvent.CTRL_MASK)); + logoutMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/logoutSmall.png"))); // NOI18N + logoutMenuItem.setText("Logout"); + logoutMenuItem.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + logoutMenuItemActionPerformed(evt); + } + }); + salesMenuItem.add(logoutMenuItem); + + jMenuBar1.add(salesMenuItem); + + setJMenuBar(jMenuBar1); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(navPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(menuPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1665, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(menuPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(navPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 0, Short.MAX_VALUE)) + ); + + pack(); + }// //GEN-END:initComponents + + + private void logoutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_logoutMenuItemActionPerformed + // TODO add your handling code here: + dispose(); + LoginDialog ld = new LoginDialog(); + ld.setLocationRelativeTo(null); + ld.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + ld.setVisible(true); + }//GEN-LAST:event_logoutMenuItemActionPerformed + + private void changeDetailsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changeDetailsMenuItemActionPerformed + addChangeDetailsPage(); + }//GEN-LAST:event_changeDetailsMenuItemActionPerformed + + private void changeDetailsMenuItemMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_changeDetailsMenuItemMouseClicked + + }//GEN-LAST:event_changeDetailsMenuItemMouseClicked + + private void currentStocksBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_currentStocksBttnMouseClicked + addCurrentStocksPage(); + }//GEN-LAST:event_currentStocksBttnMouseClicked + + private void userBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_userBttnMouseClicked + /* setContentPane(new Users().mainPanel); + remove(mainPanel); + revalidate(); + repaint(); */ + addUsersPage(); + }//GEN-LAST:event_userBttnMouseClicked + + private void suppliersBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_suppliersBttnMouseClicked + addSuppliersPage(); + }//GEN-LAST:event_suppliersBttnMouseClicked + + private void customersBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_customersBttnMouseClicked + addCustomersPage(); + }//GEN-LAST:event_customersBttnMouseClicked + + private void addProductBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addProductBttnMouseClicked + addProductsPage(); + }//GEN-LAST:event_addProductBttnMouseClicked + + private void salesReportBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_salesReportBttnMouseClicked + addSalesReportPage(); + }//GEN-LAST:event_salesReportBttnMouseClicked + + private void menuBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuBttnMouseClicked + if(navPanel.isVisible()==false){ + navPanel.setVisible(true); + }else{ + navPanel.setVisible(false); + } + }//GEN-LAST:event_menuBttnMouseClicked + + private void homeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_homeMenuItemActionPerformed + new Dashboard(userSelect,username); + dispose(); + }//GEN-LAST:event_homeMenuItemActionPerformed + + private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseClicked + new Dashboard(userSelect,username); + dispose(); + }//GEN-LAST:event_jLabel1MouseClicked + + private void purchaseBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_purchaseBttnMouseClicked + addPurchasePage(); + }//GEN-LAST:event_purchaseBttnMouseClicked + + private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed + addAboutPage(); + }//GEN-LAST:event_jMenuItem1ActionPerformed + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(Dashboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(Dashboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(Dashboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(Dashboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + } + + public void NotForNormalUser() { + navPanel.remove(userBttn); + navPanel.remove(userLab); + } + + + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel addProductBttn; + private javax.swing.JPanel bttnPanel; + private javax.swing.JMenuItem changeDetailsMenuItem; + private javax.swing.JLabel currentStocksBttn; + private javax.swing.JLabel customersBttn; + private javax.swing.JMenu fileMenu; + private javax.swing.JMenuItem homeMenuItem; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel6; + private javax.swing.JLabel jLabel7; + private javax.swing.JMenuBar jMenuBar1; + private javax.swing.JMenuItem jMenuItem1; + private javax.swing.JPanel jPanel1; + private javax.swing.JMenuItem logoutMenuItem; + private javax.swing.JPanel mainPanel; + private javax.swing.JLabel menuBttn; + private javax.swing.JPanel menuPanel; + private javax.swing.JPanel navPanel; + private javax.swing.JLabel purchaseBttn; + private javax.swing.JMenu salesMenuItem; + private javax.swing.JLabel salesReportBttn; + private javax.swing.JLabel salesReportLab; + private javax.swing.JLabel suppliersBttn; + private javax.swing.JLabel userBttn; + private javax.swing.JLabel userLab; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/HomePage.form b/src/com/inventory/ui/HomePage.form new file mode 100644 index 0000000..9341891 --- /dev/null +++ b/src/com/inventory/ui/HomePage.form @@ -0,0 +1,96 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/com/inventory/ui/HomePage.java b/src/com/inventory/ui/HomePage.java new file mode 100644 index 0000000..473d77e --- /dev/null +++ b/src/com/inventory/ui/HomePage.java @@ -0,0 +1,90 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.inventory.ui; + +/** + * + * @author nccs + */ +public class HomePage extends javax.swing.JPanel { + + /** + * Creates new form HomePage + */ + public HomePage() { + initComponents(); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + jPanel1 = new javax.swing.JPanel(); + + jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/front-image.png"))); // NOI18N + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(103, 103, 103) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel1) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(113, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 87, Short.MAX_VALUE) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(183, 183, 183)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 856, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 850, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) + ); + }// //GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + private javax.swing.JPanel jPanel1; + public javax.swing.JPanel mainPanel; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/LoginDialog.form b/src/com/inventory/ui/LoginDialog.form new file mode 100644 index 0000000..a58935c --- /dev/null +++ b/src/com/inventory/ui/LoginDialog.form @@ -0,0 +1,200 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/com/inventory/ui/LoginDialog.java b/src/com/inventory/ui/LoginDialog.java new file mode 100644 index 0000000..7cc3c11 --- /dev/null +++ b/src/com/inventory/ui/LoginDialog.java @@ -0,0 +1,272 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.database.ConnectionFactory; +import java.math.BigInteger; +import java.security.MessageDigest; +import javax.swing.JOptionPane; + +/** + * + * @author ADMIN + */ +public class LoginDialog extends javax.swing.JDialog { + + /** + * Creates new form LoginDialog + */ + public LoginDialog() { + initComponents(); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + comboBox = new javax.swing.JComboBox(); + jLabel1 = new javax.swing.JLabel(); + usernameLab = new javax.swing.JLabel(); + usernameTxt = new javax.swing.JTextField(); + jLabel2 = new javax.swing.JLabel(); + loginBttn = new javax.swing.JLabel(); + clearBttn = new javax.swing.JLabel(); + passwordTxt = new javax.swing.JPasswordField(); + jLabel3 = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + setTitle("Login"); + + comboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "ADMINISTRATOR", "NORMAL USER" })); + + jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/loginMember.png"))); // NOI18N + + usernameLab.setText("Username"); + + usernameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + usernameTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + usernameTxtActionPerformed(evt); + } + }); + + jLabel2.setText("Password"); + + loginBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/logout-icon.png"))); // NOI18N + loginBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + loginBttnMouseClicked(evt); + } + }); + loginBttn.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyPressed(java.awt.event.KeyEvent evt) { + loginBttnKeyPressed(evt); + } + }); + + clearBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttnMouseClicked(evt); + } + }); + + passwordTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + passwordTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyTyped(java.awt.event.KeyEvent evt) { + passwordTxtKeyTyped(evt); + } + }); + + jLabel3.setText("Login"); + + jLabel4.setText("Clear"); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(30, 30, 30) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(comboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(usernameLab) + .addComponent(jLabel2)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(usernameTxt) + .addComponent(passwordTxt, javax.swing.GroupLayout.DEFAULT_SIZE, 188, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(loginBttn) + .addGroup(layout.createSequentialGroup() + .addGap(17, 17, 17) + .addComponent(jLabel3))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(29, 29, 29) + .addComponent(clearBttn)) + .addGroup(layout.createSequentialGroup() + .addGap(42, 42, 42) + .addComponent(jLabel4))))))) + .addGap(22, 22, 22)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel1) + .addGap(80, 80, 80)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(comboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(usernameLab) + .addComponent(usernameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addComponent(jLabel2) + .addGap(23, 23, 23)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(passwordTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18))) + .addGap(1, 1, 1) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(clearBttn) + .addGap(9, 9, 9) + .addComponent(jLabel4)) + .addGroup(layout.createSequentialGroup() + .addComponent(loginBttn) + .addGap(1, 1, 1) + .addComponent(jLabel3))) + .addContainerGap(12, Short.MAX_VALUE)) + ); + + pack(); + }// //GEN-END:initComponents + + private void usernameTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_usernameTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_usernameTxtActionPerformed + + private String encryptPassword(String input){ + String encPass=null; + if(input==null) return null; + + try{ + MessageDigest digest=MessageDigest.getInstance("MD5"); + digest.update(input.getBytes(),0,input.length()); + encPass=new BigInteger(1,digest.digest()).toString(16); + } + catch(Exception e){ + e.printStackTrace(); + } + return encPass; + } + + String user; + private void loginBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_loginBttnMouseClicked + String username=usernameTxt.getText(); + String p=passwordTxt.getText(); + String password=encryptPassword(p); + user=(String)comboBox.getSelectedItem(); + + if(new ConnectionFactory().checkLogin(username,password,user)==true){ + dispose(); + new Dashboard(user,username); + }else{ + JOptionPane.showMessageDialog(null, "Invalid username or password"); + } + }//GEN-LAST:event_loginBttnMouseClicked + + + private void clearBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttnMouseClicked + usernameTxt.setText(""); + passwordTxt.setText(""); + }//GEN-LAST:event_clearBttnMouseClicked + + private void loginBttnKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_loginBttnKeyPressed + + }//GEN-LAST:event_loginBttnKeyPressed + + private void passwordTxtKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_passwordTxtKeyTyped + + }//GEN-LAST:event_passwordTxtKeyTyped + + public String getUser(){ + return user; + } + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(LoginDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(LoginDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(LoginDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(LoginDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the dialog */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + LoginDialog dialog = new LoginDialog(); + dialog.addWindowListener(new java.awt.event.WindowAdapter() { + @Override + public void windowClosing(java.awt.event.WindowEvent e) { + System.exit(0); + } + }); + dialog.setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel clearBttn; + private javax.swing.JComboBox comboBox; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel loginBttn; + private javax.swing.JPasswordField passwordTxt; + private javax.swing.JLabel usernameLab; + private javax.swing.JTextField usernameTxt; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/Logs.form b/src/com/inventory/ui/Logs.form new file mode 100644 index 0000000..d575b9f --- /dev/null +++ b/src/com/inventory/ui/Logs.form @@ -0,0 +1,78 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
diff --git a/src/com/inventory/ui/Logs.java b/src/com/inventory/ui/Logs.java new file mode 100644 index 0000000..52ed1e8 --- /dev/null +++ b/src/com/inventory/ui/Logs.java @@ -0,0 +1,82 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +/** + * + * @author ADMIN + */ +public class Logs extends javax.swing.JPanel { + + /** + * Creates new form Logs + */ + public Logs() { + initComponents(); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + jScrollPane1.setViewportView(table); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 742, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(64, 64, 64) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 329, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(72, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane jScrollPane1; + public javax.swing.JPanel mainPanel; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/Products.form b/src/com/inventory/ui/Products.form new file mode 100644 index 0000000..652b19b --- /dev/null +++ b/src/com/inventory/ui/Products.form @@ -0,0 +1,442 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + <Editor/> + <Renderer/> + </Column> + <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true"> + <Title/> + <Editor/> + <Renderer/> + </Column> + <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true"> + <Title/> + <Editor/> + <Renderer/> + </Column> + <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true"> + <Title/> + <Editor/> + <Renderer/> + </Column> + </TableColumnModel> + </Property> + <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor"> + <TableHeader reorderingAllowed="true" resizingAllowed="true"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tableMouseClicked"/> + </Events> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JTabbedPane" name="jTabbedPane1"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanel1"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="PLEASE FILL ALL THE FIELDS"/> + </Border> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription"> + <JTabbedPaneConstraints tabName="PRODUCTS"> + <Property name="tabTitle" type="java.lang.String" value="PRODUCTS"/> + </JTabbedPaneConstraints> + </Constraint> + </Constraints> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" max="-2" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="42" max="-2" attributes="0"/> + <Component id="jLabel6" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="30" max="-2" attributes="0"/> + <Component id="jLabel7" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="28" max="-2" attributes="0"/> + <Component id="jLabel8" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="addProduct" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="editBttn" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="10" max="-2" attributes="0"/> + <Component id="deleteBttn" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="clearBttn" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="53" max="-2" attributes="0"/> + <Component id="productCodeTxt" min="-2" pref="13" max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="productNameLab" alignment="0" min="-2" pref="84" max="-2" attributes="0"/> + <Component id="costPriceLab" alignment="0" min="-2" pref="66" max="-2" attributes="0"/> + <Component id="priceLab1" alignment="0" min="-2" pref="76" max="-2" attributes="0"/> + <Component id="brandLab" alignment="0" min="-2" pref="47" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="costPriceTxt" min="-2" pref="194" max="-2" attributes="0"/> + <Component id="sellingPriceTxt" alignment="1" min="-2" pref="194" max="-2" attributes="0"/> + <Component id="brandTxt" alignment="1" min="-2" pref="194" max="-2" attributes="0"/> + <Component id="productNameTxt" alignment="1" min="-2" pref="194" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="37" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="productNameLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="productNameTxt" alignment="3" min="-2" pref="28" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="costPriceLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="costPriceTxt" alignment="3" min="-2" pref="30" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="priceLab1" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="sellingPriceTxt" alignment="3" min="-2" pref="30" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="brandLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="brandTxt" alignment="3" min="-2" pref="31" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="addProduct" min="-2" max="-2" attributes="0"/> + <Component id="deleteBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="clearBttn" min="-2" max="-2" attributes="0"/> + <Component id="editBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="productCodeTxt" min="-2" pref="28" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" alignment="0" groupAlignment="3" attributes="0"> + <Component id="jLabel7" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace pref="55" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="productNameLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Product Name"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="productNameTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="costPriceLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Cost Price"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="costPriceTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="sellingPriceTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="priceLab1"> + <Properties> + <Property name="text" type="java.lang.String" value="Selling Price"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="brandLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Brand"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="brandTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="addProduct"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/add item.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="addProductMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="editBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/edit item.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="editBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="deleteBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/delete item.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="deleteBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="clearBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/clear.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="clearBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="text" type="java.lang.String" value="Add"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel6"> + <Properties> + <Property name="text" type="java.lang.String" value="Edit"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel7"> + <Properties> + <Property name="text" type="java.lang.String" value="Delete"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel8"> + <Properties> + <Property name="text" type="java.lang.String" value="Clear"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="productCodeTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="36" style="1"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="66" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="PRODUCTS"/> + </Properties> + </Component> + <Component class="javax.swing.JSeparator" name="jSeparator1"> + </Component> + <Component class="javax.swing.JTextField" name="searchTxt"> + <Properties> + <Property name="toolTipText" type="java.lang.String" value="Search using Product Name, Brand Name OR Product Code"/> + </Properties> + <Events> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="searchTxtKeyReleased"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="searchByLab"> + <Properties> + <Property name="text" type="java.lang.String" value="SEARCH"/> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="refreshBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/reload.png"/> + </Property> + <Property name="text" type="java.lang.String" value="Refresh"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="refreshBttnActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel9"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="66" red="66" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="(Search using Product Name,Brand Name, OR Product Code)"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/src/com/inventory/ui/Products.java b/src/com/inventory/ui/Products.java new file mode 100644 index 0000000..895a084 --- /dev/null +++ b/src/com/inventory/ui/Products.java @@ -0,0 +1,481 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.dao.ProductDAO; +import com.inventory.dto.ProductDTO; +import java.sql.ResultSet; +import java.sql.SQLException; +import javax.swing.JOptionPane; +import javax.swing.table.TableColumn; + +/** + * + * @author ADMIN + */ +public class Products extends javax.swing.JPanel { + + /** + * Creates new form Products + */ + ProductDTO productdto; + String username; + String supplier; + int userId; + + public Products(){ +// suppliersName(); + } + + public Products(String user) { + initComponents(); + username=user; + productCodeTxt.setVisible(false); + loadDatas(); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + productsPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + jPanel1 = new javax.swing.JPanel(); + productNameLab = new javax.swing.JLabel(); + productNameTxt = new javax.swing.JTextField(); + costPriceLab = new javax.swing.JLabel(); + costPriceTxt = new javax.swing.JTextField(); + sellingPriceTxt = new javax.swing.JTextField(); + priceLab1 = new javax.swing.JLabel(); + brandLab = new javax.swing.JLabel(); + brandTxt = new javax.swing.JTextField(); + addProduct = new javax.swing.JLabel(); + editBttn = new javax.swing.JLabel(); + deleteBttn = new javax.swing.JLabel(); + clearBttn = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); + jLabel6 = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + jLabel8 = new javax.swing.JLabel(); + productCodeTxt = new javax.swing.JTextField(); + jLabel1 = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + searchTxt = new javax.swing.JTextField(); + searchByLab = new javax.swing.JLabel(); + refreshBttn = new javax.swing.JButton(); + jLabel9 = new javax.swing.JLabel(); + + productsPanel.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + productsPanelMouseClicked(evt); + } + }); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + table.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + tableMouseClicked(evt); + } + }); + jScrollPane1.setViewportView(table); + + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("PLEASE FILL ALL THE FIELDS")); + + productNameLab.setText("Product Name"); + + productNameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + costPriceLab.setText("Cost Price"); + + costPriceTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + sellingPriceTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + priceLab1.setText("Selling Price"); + + brandLab.setText("Brand"); + + brandTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + addProduct.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/add item.png"))); // NOI18N + addProduct.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + addProductMouseClicked(evt); + } + }); + + editBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/edit item.png"))); // NOI18N + editBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + editBttnMouseClicked(evt); + } + }); + + deleteBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/delete item.png"))); // NOI18N + deleteBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + deleteBttnMouseClicked(evt); + } + }); + + clearBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttnMouseClicked(evt); + } + }); + + jLabel2.setText("Add"); + + jLabel6.setText("Edit"); + + jLabel7.setText("Delete"); + + jLabel8.setText("Clear"); + + productCodeTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel2) + .addGap(42, 42, 42) + .addComponent(jLabel6) + .addGap(30, 30, 30) + .addComponent(jLabel7) + .addGap(28, 28, 28) + .addComponent(jLabel8)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() + .addComponent(addProduct) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(editBttn) + .addGap(10, 10, 10) + .addComponent(deleteBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(clearBttn) + .addGap(53, 53, 53) + .addComponent(productCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 13, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productNameLab, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(costPriceLab, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(priceLab1, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(brandLab, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(costPriceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sellingPriceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(brandTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(productNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(37, 37, 37) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(productNameLab) + .addComponent(productNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(costPriceLab) + .addComponent(costPriceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(priceLab1) + .addComponent(sellingPriceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(brandLab) + .addComponent(brandTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(addProduct) + .addComponent(deleteBttn) + .addComponent(clearBttn) + .addComponent(editBttn) + .addComponent(productCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel7) + .addComponent(jLabel8) + .addComponent(jLabel6)) + .addComponent(jLabel2)) + .addContainerGap(55, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab("PRODUCTS", jPanel1); + + jLabel1.setFont(new java.awt.Font("Comfortaa", 1, 36)); // NOI18N + jLabel1.setForeground(new java.awt.Color(0, 102, 204)); + jLabel1.setText("PRODUCTS"); + + searchTxt.setToolTipText("Search using Product Name, Brand Name OR Product Code"); + searchTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + searchTxtKeyReleased(evt); + } + }); + + searchByLab.setText("SEARCH"); + + refreshBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/reload.png"))); // NOI18N + refreshBttn.setText("Refresh"); + refreshBttn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + refreshBttnActionPerformed(evt); + } + }); + + jLabel9.setForeground(new java.awt.Color(102, 102, 255)); + jLabel9.setText("(Search using Product Name,Brand Name, OR Product Code)"); + + javax.swing.GroupLayout productsPanelLayout = new javax.swing.GroupLayout(productsPanel); + productsPanel.setLayout(productsPanelLayout); + productsPanelLayout.setHorizontalGroup( + productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator1) + .addGroup(productsPanelLayout.createSequentialGroup() + .addComponent(refreshBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel1) + .addGap(143, 143, 143) + .addComponent(jLabel9) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchByLab) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(productsPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 557, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 319, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(72, 72, 72)) + ); + productsPanelLayout.setVerticalGroup( + productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(productsPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchByLab, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel9)) + .addComponent(jLabel1) + .addComponent(refreshBttn, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jTabbedPane1) + .addGroup(productsPanelLayout.createSequentialGroup() + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 381, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 943, javax.swing.GroupLayout.PREFERRED_SIZE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + ); + }// </editor-fold>//GEN-END:initComponents + + private void addProductMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addProductMouseClicked + productdto=new ProductDTO(); + + if( productNameTxt.getText().equals("") || costPriceTxt.getText().equals("") || sellingPriceTxt.getText().equals("") || brandTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + productdto.setProductName(productNameTxt.getText()); + productdto.setCostPrice(Double.parseDouble(costPriceTxt.getText())); + productdto.setSellingPrice(Double.parseDouble(sellingPriceTxt.getText())); + productdto.setBrand((brandTxt.getText())); + productdto.setUserId(userId); + new ProductDAO().addProductDAO(productdto); + loadDatas(); + } + }//GEN-LAST:event_addProductMouseClicked + +static String productCode; + private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked + int row = table.getSelectedRow(); + int column = table.getColumnCount(); + Object[] val = new Object[column]; + for(int i = 0; i < column; i++) { + val[i]=table.getValueAt(row, i); + } + productCodeTxt.setText(val[0].toString()); + productNameTxt.setText(val[1].toString()); + costPriceTxt.setText(val[2].toString()); + sellingPriceTxt.setText(val[3].toString()); + brandTxt.setText(val[4].toString()); + productCode=val[1].toString(); + + + }//GEN-LAST:event_tableMouseClicked + + private void editBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_editBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + productdto=new ProductDTO(); + if(productNameTxt.getText().equals("") || costPriceTxt.getText().equals("") || sellingPriceTxt.getText().equals("") || brandTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + productdto.setProductCode(productCodeTxt.getText()); + productdto.setProductName(productNameTxt.getText()); + productdto.setCostPrice(Double.parseDouble(costPriceTxt.getText())); + productdto.setSellingPrice(Double.parseDouble(sellingPriceTxt.getText())); + productdto.setBrand((brandTxt.getText())); + productdto.setUserId(userId); + new ProductDAO().editProductDAO(productdto); + +/* + if(productCode.equals(productCodeTxt.getText())){ + new ProductDAO().editStock1(productdto,quantity,productCode); + }else{ + new ProductDAO().editStock2(productdto,quantity,productCode); + } + new ProductDAO().editProductDAO(productdto); +*/ + } + loadDatas(); + } + }//GEN-LAST:event_editBttnMouseClicked + + private void deleteBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deleteBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + new ProductDAO().deleteProductDAO(((String)table.getValueAt(table.getSelectedRow(),0))); + loadDatas(); + } + }//GEN-LAST:event_deleteBttnMouseClicked + + private void clearBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttnMouseClicked + productCodeTxt.setText(""); + productNameTxt.setText(""); + costPriceTxt.setText(""); + sellingPriceTxt.setText(""); + brandTxt.setText(""); + }//GEN-LAST:event_clearBttnMouseClicked + + private void searchTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTxtKeyReleased + String text=searchTxt.getText(); + loadSearchProductsDatas(text); + }//GEN-LAST:event_searchTxtKeyReleased + + private void productsPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_productsPanelMouseClicked + productCodeTxt.setText(""); + productNameTxt.setText(""); + costPriceTxt.setText(""); + sellingPriceTxt.setText(""); + brandTxt.setText(""); + }//GEN-LAST:event_productsPanelMouseClicked + + private void refreshBttnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshBttnActionPerformed + + productCodeTxt.setText(""); + productNameTxt.setText(""); + costPriceTxt.setText(""); + sellingPriceTxt.setText(""); + brandTxt.setText(""); + }//GEN-LAST:event_refreshBttnActionPerformed + + public void loadDatas(){ + try{ + ProductDAO productDAO=new ProductDAO(); + table.setModel(productDAO.buildTableModel(productDAO.getQueryResult())); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + public void loadSearchProductsDatas(String text){ + try{ + ProductDAO productDAO=new ProductDAO(); + table.setModel(productDAO.buildTableModel(productDAO.getSearchProductsQueryResult(text))); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + + /* + public void suppliersName(){ + ResultSet rs=new ProductDTO().getSuppliersName(); + try{ + while(rs.next()){ + String suppliersName=rs.getString("fullname"); + comboBox.addItem(suppliersName); + } + }catch(Exception e){ + e.printStackTrace(); + } + } +*/ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel addProduct; + private javax.swing.JLabel brandLab; + private javax.swing.JTextField brandTxt; + private javax.swing.JLabel clearBttn; + private javax.swing.JLabel costPriceLab; + private javax.swing.JTextField costPriceTxt; + private javax.swing.JLabel deleteBttn; + private javax.swing.JLabel editBttn; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel6; + private javax.swing.JLabel jLabel7; + private javax.swing.JLabel jLabel8; + private javax.swing.JLabel jLabel9; + private javax.swing.JPanel jPanel1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JLabel priceLab1; + private javax.swing.JTextField productCodeTxt; + private javax.swing.JLabel productNameLab; + private javax.swing.JTextField productNameTxt; + public javax.swing.JPanel productsPanel; + private javax.swing.JButton refreshBttn; + private javax.swing.JLabel searchByLab; + private javax.swing.JTextField searchTxt; + private javax.swing.JTextField sellingPriceTxt; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/Purchase.form b/src/com/inventory/ui/Purchase.form new file mode 100644 index 0000000..ba8f262 --- /dev/null +++ b/src/com/inventory/ui/Purchase.form @@ -0,0 +1,596 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="productsPanel" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="productsPanel" min="-2" max="-2" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="productsPanel"> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="productsPanelMouseClicked"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="1"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="refreshBttn" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + <Component id="jLabel9" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="searchByLab" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="searchTxt" min="-2" pref="169" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="60" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jSeparator2" min="-2" pref="901" max="-2" attributes="0"/> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="supplierInfoPanel" alignment="0" max="32767" attributes="0"/> + <Component id="jScrollPane1" alignment="0" min="-2" pref="557" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="jTabbedPane1" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace pref="35" max="32767" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jSeparator1" max="32767" attributes="0"/> + <Group type="102" attributes="0"> + <Component id="jPanel2" max="32767" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Group type="103" alignment="0" groupAlignment="3" attributes="0"> + <Component id="searchByLab" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="searchTxt" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="jLabel9" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="refreshBttn" alignment="0" max="32767" attributes="0"/> + <Component id="jLabel1" alignment="0" pref="0" max="32767" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="jSeparator2" min="-2" pref="12" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="5" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + <Component id="jPanel2" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="100" max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jScrollPane1" pref="0" max="32767" attributes="0"/> + <Component id="jTabbedPane1" max="32767" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="supplierInfoPanel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTable" name="table"> + <Properties> + <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor"> + <Table columnCount="4" rowCount="3"> + <Column editable="true" title="Title 1" type="java.lang.Object"/> + <Column editable="true" title="Title 2" type="java.lang.Object"/> + <Column editable="true" title="Title 3" type="java.lang.Object"/> + <Column editable="true" title="Title 4" type="java.lang.Object"/> + </Table> + </Property> + <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor"> + <TableHeader reorderingAllowed="true" resizingAllowed="true"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tableMouseClicked"/> + </Events> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JTabbedPane" name="jTabbedPane1"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanel1"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="PLEASE FILL ALL THE FIELDS"/> + </Border> + </Property> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="12" style="0"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription"> + <JTabbedPaneConstraints tabName="PRODUCTS"> + <Property name="tabTitle" type="java.lang.String" value="PRODUCTS"/> + </JTabbedPaneConstraints> + </Constraint> + </Constraints> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <Component id="addProduct" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="deleteBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel7" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="clearBttn" min="-2" max="-2" attributes="0"/> + <Group type="102" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel8" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace pref="128" max="32767" attributes="0"/> + <Component id="purchaseIdTxt" min="-2" pref="13" max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="productCodeLab" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="quatityLab1" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="productCodeTxt" alignment="0" max="32767" attributes="0"/> + <Component id="quantityTxt" alignment="0" max="32767" attributes="0"/> + <Component id="costPriceTxt" alignment="1" max="32767" attributes="0"/> + </Group> + </Group> + <Component id="comboBox" alignment="0" pref="301" max="32767" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + <Component id="dateChooser" min="-2" pref="230" max="-2" attributes="0"/> + </Group> + <Component id="productNameLab" max="32767" attributes="0"/> + </Group> + <Component id="productCodeLab1" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="23" max="-2" attributes="0"/> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="17" max="-2" attributes="0"/> + <Component id="dateChooser" min="-2" pref="25" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="comboBox" min="-2" pref="36" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="20" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="productCodeTxt" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="productCodeLab" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Component id="productNameLab" min="-2" pref="19" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="costPriceTxt" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="productCodeLab1" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="quantityTxt" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="quatityLab1" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="1" max="-2" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="purchaseIdTxt" min="-2" pref="28" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="26" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="addProduct" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="deleteBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="clearBttn" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel7" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace pref="75" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JComboBox" name="comboBox"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="1"> + <StringItem index="0" value="Select Supplier's Name"/> + </StringArray> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="comboBoxActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="addProduct"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/add item.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="addProductMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="deleteBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/delete item.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="deleteBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="clearBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/clear.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="clearBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="text" type="java.lang.String" value="Purchase"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel7"> + <Properties> + <Property name="text" type="java.lang.String" value="Delete"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel8"> + <Properties> + <Property name="text" type="java.lang.String" value="Clear"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="purchaseIdTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel3"> + <Properties> + <Property name="text" type="java.lang.String" value="Date"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="productCodeTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="productCodeTxtActionPerformed"/> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="productCodeTxtKeyReleased"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="productCodeLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Product Code"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="quantityTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="quantityTxtActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="quatityLab1"> + <Properties> + <Property name="text" type="java.lang.String" value="Quantity"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="productNameLab"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="cc" red="cc" type="rgb"/> + </Property> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="14" style="0"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="66" red="66" type="rgb"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="productCodeLab1"> + <Properties> + <Property name="text" type="java.lang.String" value="Cost Price"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="costPriceTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="costPriceTxtActionPerformed"/> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="costPriceTxtKeyReleased"/> + </Events> + </Component> + <Component class="com.toedter.calendar.JDateChooser" name="dateChooser"> + </Component> + </SubComponents> + </Container> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="36" style="1"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="66" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="PURCHASE"/> + </Properties> + </Component> + <Component class="javax.swing.JSeparator" name="jSeparator1"> + </Component> + <Component class="javax.swing.JTextField" name="searchTxt"> + <Properties> + <Property name="toolTipText" type="java.lang.String" value="Search using Product Name, Brand Name OR Product Code"/> + </Properties> + <Events> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="searchTxtKeyReleased"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="searchByLab"> + <Properties> + <Property name="text" type="java.lang.String" value="SEARCH"/> + </Properties> + </Component> + <Container class="javax.swing.JPanel" name="supplierInfoPanel"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="ff" red="ff" type="rgb"/> + </Property> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="e" green="80" red="90" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="19" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel5" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="purchasedDateLab" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel4" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="supplierInfoLab" min="-2" pref="291" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="purchasedDateLab" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="32767" attributes="0"/> + <Component id="jLabel5" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="supplierInfoLab" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel4"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="0" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="Supplier Info: "/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="supplierInfoLab"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="0" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value=" "/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel5"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="0" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="Purchased Date:"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="purchasedDateLab"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="33" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value=" "/> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JButton" name="refreshBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/reload.png"/> + </Property> + <Property name="text" type="java.lang.String" value="Refresh"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="refreshBttnActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel9"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="66" red="66" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="(Search using Product Name,Brand Name, OR Product Code)"/> + </Properties> + </Component> + <Container class="javax.swing.JPanel" name="jPanel2"> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <EmptySpace min="0" pref="7" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <EmptySpace min="0" pref="21" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + </Container> + <Component class="javax.swing.JSeparator" name="jSeparator2"> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/src/com/inventory/ui/Purchase.java b/src/com/inventory/ui/Purchase.java new file mode 100644 index 0000000..3d34b67 --- /dev/null +++ b/src/com/inventory/ui/Purchase.java @@ -0,0 +1,644 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.dao.ProductDAO; +import com.inventory.dto.ProductDTO; +import static com.inventory.ui.Products.productCode; +import java.sql.ResultSet; +import java.sql.SQLException; +import javax.swing.JOptionPane; + +/** + * + * @author dell pc + */ +public class Purchase extends javax.swing.JPanel { +ProductDTO productdto; + /** + * Creates new form Purchase + */ + public Purchase() { + initComponents(); + comboBox.removeAllItems(); + comboBox.addItem("Select Supplier's Name"); + suppliersName(); + purchaseIdTxt.setVisible(false); + productNameLab.setVisible(false); + + loadDatas(); +// table.getColumn("productcode").setMaxWidth(0); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + productsPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + jPanel1 = new javax.swing.JPanel(); + comboBox = new javax.swing.JComboBox(); + addProduct = new javax.swing.JLabel(); + deleteBttn = new javax.swing.JLabel(); + clearBttn = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + jLabel8 = new javax.swing.JLabel(); + purchaseIdTxt = new javax.swing.JTextField(); + jLabel3 = new javax.swing.JLabel(); + productCodeTxt = new javax.swing.JTextField(); + productCodeLab = new javax.swing.JLabel(); + quantityTxt = new javax.swing.JTextField(); + quatityLab1 = new javax.swing.JLabel(); + productNameLab = new javax.swing.JLabel(); + productCodeLab1 = new javax.swing.JLabel(); + costPriceTxt = new javax.swing.JTextField(); + dateChooser = new com.toedter.calendar.JDateChooser(); + jLabel1 = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + searchTxt = new javax.swing.JTextField(); + searchByLab = new javax.swing.JLabel(); + supplierInfoPanel = new javax.swing.JPanel(); + jLabel4 = new javax.swing.JLabel(); + supplierInfoLab = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + purchasedDateLab = new javax.swing.JLabel(); + refreshBttn = new javax.swing.JButton(); + jLabel9 = new javax.swing.JLabel(); + jPanel2 = new javax.swing.JPanel(); + jSeparator2 = new javax.swing.JSeparator(); + + productsPanel.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + productsPanelMouseClicked(evt); + } + }); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + table.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + tableMouseClicked(evt); + } + }); + jScrollPane1.setViewportView(table); + + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("PLEASE FILL ALL THE FIELDS")); + jPanel1.setFont(new java.awt.Font("Comfortaa", 0, 12)); // NOI18N + + comboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Select Supplier's Name" })); + comboBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboBoxActionPerformed(evt); + } + }); + + addProduct.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/add item.png"))); // NOI18N + addProduct.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + addProductMouseClicked(evt); + } + }); + + deleteBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/delete item.png"))); // NOI18N + deleteBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + deleteBttnMouseClicked(evt); + } + }); + + clearBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttnMouseClicked(evt); + } + }); + + jLabel2.setText("Purchase"); + + jLabel7.setText("Delete"); + + jLabel8.setText("Clear"); + + purchaseIdTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + jLabel3.setText("Date"); + + productCodeTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + productCodeTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + productCodeTxtActionPerformed(evt); + } + }); + productCodeTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + productCodeTxtKeyReleased(evt); + } + }); + + productCodeLab.setText("Product Code"); + + quantityTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + quantityTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + quantityTxtActionPerformed(evt); + } + }); + + quatityLab1.setText("Quantity"); + + productNameLab.setBackground(new java.awt.Color(204, 204, 255)); + productNameLab.setFont(new java.awt.Font("Comfortaa", 0, 14)); // NOI18N + productNameLab.setForeground(new java.awt.Color(102, 102, 255)); + + productCodeLab1.setText("Cost Price"); + + costPriceTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + costPriceTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + costPriceTxtActionPerformed(evt); + } + }); + costPriceTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + costPriceTxtKeyReleased(evt); + } + }); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addComponent(addProduct)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(deleteBttn) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel7))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(clearBttn) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel8))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 128, Short.MAX_VALUE) + .addComponent(purchaseIdTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 13, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productCodeLab) + .addComponent(quatityLab1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productCodeTxt) + .addComponent(quantityTxt) + .addComponent(costPriceTxt, javax.swing.GroupLayout.Alignment.TRAILING))) + .addComponent(comboBox, 0, 301, Short.MAX_VALUE) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(dateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 230, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(productNameLab, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(productCodeLab1)) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(23, 23, 23) + .addComponent(jLabel3)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(17, 17, 17) + .addComponent(dateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(18, 18, 18) + .addComponent(comboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(20, 20, 20) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(productCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(productCodeLab)) + .addGap(4, 4, 4) + .addComponent(productNameLab, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(costPriceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(productCodeLab1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(quantityTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(quatityLab1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(purchaseIdTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(26, 26, 26)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() + .addComponent(addProduct) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addComponent(jLabel2)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(deleteBttn) + .addComponent(clearBttn)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel7) + .addComponent(jLabel8)))) + .addContainerGap(75, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab("PRODUCTS", jPanel1); + + jLabel1.setFont(new java.awt.Font("Comfortaa", 1, 36)); // NOI18N + jLabel1.setForeground(new java.awt.Color(0, 102, 204)); + jLabel1.setText("PURCHASE"); + + searchTxt.setToolTipText("Search using Product Name, Brand Name OR Product Code"); + searchTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + searchTxtKeyReleased(evt); + } + }); + + searchByLab.setText("SEARCH"); + + supplierInfoPanel.setBackground(new java.awt.Color(255, 255, 204)); + supplierInfoPanel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(144, 128, 14), 1, true)); + + jLabel4.setForeground(new java.awt.Color(0, 0, 51)); + jLabel4.setText("Supplier Info: "); + + supplierInfoLab.setForeground(new java.awt.Color(0, 0, 51)); + supplierInfoLab.setText(" "); + + jLabel5.setForeground(new java.awt.Color(0, 0, 51)); + jLabel5.setText("Purchased Date:"); + + purchasedDateLab.setForeground(new java.awt.Color(0, 51, 51)); + purchasedDateLab.setText(" "); + + javax.swing.GroupLayout supplierInfoPanelLayout = new javax.swing.GroupLayout(supplierInfoPanel); + supplierInfoPanel.setLayout(supplierInfoPanelLayout); + supplierInfoPanelLayout.setHorizontalGroup( + supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(supplierInfoPanelLayout.createSequentialGroup() + .addGap(19, 19, 19) + .addGroup(supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(supplierInfoPanelLayout.createSequentialGroup() + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(purchasedDateLab)) + .addGroup(supplierInfoPanelLayout.createSequentialGroup() + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(supplierInfoLab, javax.swing.GroupLayout.PREFERRED_SIZE, 291, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + supplierInfoPanelLayout.setVerticalGroup( + supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, supplierInfoPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(purchasedDateLab) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, supplierInfoPanelLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel4) + .addComponent(supplierInfoLab)) + .addContainerGap()) + ); + + refreshBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/reload.png"))); // NOI18N + refreshBttn.setText("Refresh"); + refreshBttn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + refreshBttnActionPerformed(evt); + } + }); + + jLabel9.setForeground(new java.awt.Color(102, 102, 255)); + jLabel9.setText("(Search using Product Name,Brand Name, OR Product Code)"); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 7, Short.MAX_VALUE) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 21, Short.MAX_VALUE) + ); + + javax.swing.GroupLayout productsPanelLayout = new javax.swing.GroupLayout(productsPanel); + productsPanel.setLayout(productsPanelLayout); + productsPanelLayout.setHorizontalGroup( + productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(productsPanelLayout.createSequentialGroup() + .addComponent(refreshBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel9) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchByLab) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(60, 60, 60)) + .addGroup(productsPanelLayout.createSequentialGroup() + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 901, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(productsPanelLayout.createSequentialGroup() + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(supplierInfoPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 557, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE) + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator1) + .addGroup(productsPanelLayout.createSequentialGroup() + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()))) + ); + productsPanelLayout.setVerticalGroup( + productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(productsPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchByLab, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel9)) + .addComponent(refreshBttn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 12, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(5, 5, 5) + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(productsPanelLayout.createSequentialGroup() + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(100, 100, 100)) + .addGroup(productsPanelLayout.createSequentialGroup() + .addGroup(productsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(jTabbedPane1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(supplierInfoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()))) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + ); + }// </editor-fold>//GEN-END:initComponents +int quantity; + private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked + int row = table.getSelectedRow(); + int column = table.getColumnCount(); + Object[] val = new Object[column]; + for(int i = 0; i < column; i++) { + val[i]=table.getValueAt(row, i); + } + purchaseIdTxt.setText(val[0].toString()); + String sup=new ProductDAO().getProductsSupplier(Integer.parseInt(purchaseIdTxt.getText())); + supplierInfoLab.setText("Purchased from "+sup); + String purchasedDate=new ProductDAO().getPurchasedDate(Integer.parseInt(purchaseIdTxt.getText())); + purchasedDateLab.setText(purchasedDate); + + quantity=Integer.parseInt(val[3].toString()); + productCode=val[1].toString(); + }//GEN-LAST:event_tableMouseClicked + + public void loadDatas(){ + try{ + ProductDAO productDAO=new ProductDAO(); + table.setModel(productDAO.buildTableModel(productDAO.getPurchaseResult())); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + private void searchTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTxtKeyReleased + String text=searchTxt.getText(); + loadSearchPurchaseDatas(text); + + // loadSearchProductsDatas(text); + }//GEN-LAST:event_searchTxtKeyReleased + + public void loadSearchPurchaseDatas(String text){ + try{ + ProductDAO productDAO=new ProductDAO(); + table.setModel(productDAO.buildTableModel(productDAO.getSearchPurchaseQueryResult(text))); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + private void refreshBttnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshBttnActionPerformed + comboBox.removeAllItems(); + comboBox.addItem("Select Supplier's Name"); + suppliersName(); + purchaseIdTxt.setText(""); + productCodeTxt.setText(""); + productNameLab.setText(""); + dateChooser.setDate(null); + productCodeTxt.setText(""); + }//GEN-LAST:event_refreshBttnActionPerformed + + private void productsPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_productsPanelMouseClicked + purchaseIdTxt.setText(""); + dateChooser.setDate(null); + productNameLab.setText(""); + productNameLab.setVisible(false); + productCodeTxt.setText(""); + }//GEN-LAST:event_productsPanelMouseClicked + + private void productCodeTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_productCodeTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_productCodeTxtActionPerformed + + private void clearBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttnMouseClicked + purchaseIdTxt.setText(""); + productNameLab.setText(""); + productNameLab.setVisible(false); + dateChooser.setDate(null); + productCodeTxt.setText(""); + }//GEN-LAST:event_clearBttnMouseClicked + + private void deleteBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deleteBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + new ProductDAO().deletePurchaseDAO(String.valueOf(table.getValueAt(table.getSelectedRow(),0))); + new ProductDAO().editStock(String.valueOf(table.getValueAt(table.getSelectedRow(),1)),quantity); + loadDatas(); + } + }//GEN-LAST:event_deleteBttnMouseClicked + + private void addProductMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addProductMouseClicked + productdto=new ProductDTO(); + + if(productCodeTxt.getText().equals("") || dateChooser.getDate()==null || productCodeTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + + String supplier=(String)comboBox.getSelectedItem(); + if("SELECT SUPPLIER'S NAME".equalsIgnoreCase(supplier)){ + JOptionPane.showMessageDialog(null, "Please select a supplier and try again!"); + }else{ + + String supplierCode=new ProductDAO().getSupplierCode(supplier); + productdto.setSupplierCode(supplierCode); + productdto.setProductCode(productCodeTxt.getText()); + try{ + ResultSet rs=new ProductDAO().getProductName(productCodeTxt.getText()); + if(rs.next()){ + productdto.setDate(dateChooser.getDate().toString()); + productdto.setQuantity(Integer.parseInt(quantityTxt.getText())); + Double costPrice=Double.parseDouble(costPriceTxt.getText()); + Double totalCost = costPrice*Integer.parseInt(quantityTxt.getText()); + productdto.setTotalCost(totalCost); + // productdto.setUserId(userId); + new ProductDAO().addPurchaseDAO(productdto); + loadDatas(); + }else{ + productNameLab.setText("Not associated with any Products!"); + } + }catch(Exception e){ + e.printStackTrace(); + } + + + } + } + }//GEN-LAST:event_addProductMouseClicked + + private void comboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboBoxActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_comboBoxActionPerformed + + private void quantityTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quantityTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_quantityTxtActionPerformed + + + private void productCodeTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_productCodeTxtKeyReleased + productNameLab.setVisible(true); + + try{ + ResultSet rs=new ProductDAO().getProductName(productCodeTxt.getText()); + if(rs.next()){ + productNameLab.setText(rs.getString("productname")); + Double costPrice=new ProductDAO().getProductCostPrice(productCodeTxt.getText()); + costPriceTxt.setText(costPrice.toString()); + }else{ + productNameLab.setText("Not associated with any Products!"); + } + }catch(Exception e){ + e.printStackTrace(); + } + }//GEN-LAST:event_productCodeTxtKeyReleased + + private void costPriceTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_costPriceTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_costPriceTxtActionPerformed + + private void costPriceTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_costPriceTxtKeyReleased + // TODO add your handling code here: + }//GEN-LAST:event_costPriceTxtKeyReleased + + public void suppliersName(){ + ResultSet rs=new ProductDTO().getSuppliersName(); + try{ + while(rs.next()){ + String suppliersName=rs.getString("fullname"); + comboBox.addItem(suppliersName); + } + }catch(Exception e){ + e.printStackTrace(); + } + } + + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel addProduct; + private javax.swing.JLabel clearBttn; + private javax.swing.JComboBox comboBox; + private javax.swing.JTextField costPriceTxt; + private com.toedter.calendar.JDateChooser dateChooser; + private javax.swing.JLabel deleteBttn; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel7; + private javax.swing.JLabel jLabel8; + private javax.swing.JLabel jLabel9; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JSeparator jSeparator2; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JLabel productCodeLab; + private javax.swing.JLabel productCodeLab1; + private javax.swing.JTextField productCodeTxt; + private javax.swing.JLabel productNameLab; + public javax.swing.JPanel productsPanel; + private javax.swing.JTextField purchaseIdTxt; + private javax.swing.JLabel purchasedDateLab; + private javax.swing.JTextField quantityTxt; + private javax.swing.JLabel quatityLab1; + private javax.swing.JButton refreshBttn; + private javax.swing.JLabel searchByLab; + private javax.swing.JTextField searchTxt; + private javax.swing.JLabel supplierInfoLab; + private javax.swing.JPanel supplierInfoPanel; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/SalesReport.form b/src/com/inventory/ui/SalesReport.form new file mode 100644 index 0000000..4f45710 --- /dev/null +++ b/src/com/inventory/ui/SalesReport.form @@ -0,0 +1,566 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jSeparator1" alignment="0" max="32767" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="91" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="48" max="-2" attributes="0"/> + <Component id="jLabel10" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="searchByLab" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="searchTxt" min="-2" pref="169" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="1" max="-2" attributes="0"> + <Component id="supplierInfoPanel" alignment="0" max="32767" attributes="0"/> + <Component id="jScrollPane1" alignment="0" pref="514" max="32767" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="jTabbedPane1" min="-2" max="-2" attributes="0"/> + <EmptySpace min="0" pref="16" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="searchByLab" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="searchTxt" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="jLabel10" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="15" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + </Group> + </Group> + <Component id="jSeparator1" min="-2" pref="11" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="jTabbedPane1" min="-2" pref="430" max="-2" attributes="0"/> + <Component id="jScrollPane1" max="32767" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="supplierInfoPanel" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="21" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTable" name="table"> + <Properties> + <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor"> + <Table columnCount="4" rowCount="4"> + <Column editable="true" title="Title 1" type="java.lang.Object"/> + <Column editable="true" title="Title 2" type="java.lang.Object"/> + <Column editable="true" title="Title 3" type="java.lang.Object"/> + <Column editable="true" title="Title 4" type="java.lang.Object"/> + </Table> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tableMouseClicked"/> + </Events> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="36" style="1"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="66" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="Sales"/> + </Properties> + </Component> + <Component class="javax.swing.JSeparator" name="jSeparator1"> + </Component> + <Container class="javax.swing.JTabbedPane" name="jTabbedPane1"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanel1"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="PLEASE FILL ALL THE FIELDS"/> + </Border> + </Property> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="12" style="0"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription"> + <JTabbedPaneConstraints tabName="Sales"> + <Property name="tabTitle" type="java.lang.String" value="Sales"/> + </JTabbedPaneConstraints> + </Constraint> + </Constraints> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="8" max="-2" attributes="0"/> + <Component id="salePanel" max="32767" attributes="0"/> + <EmptySpace min="-2" pref="9" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="salePanel" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="25" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="salePanel"> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="customerNameLab" max="32767" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="62" max="32767" attributes="0"/> + <Component id="dateChooser" min="-2" pref="204" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="sellBttn" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="jLabel9" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="19" max="-2" attributes="0"/> + </Group> + </Group> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="deleteBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel7" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel8" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="clearBttn1" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + <Component id="salesIdTxt" min="-2" pref="30" max="-2" attributes="0"/> + <EmptySpace min="7" pref="7" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="sellingPriceLab" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="quantityLab" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="29" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="quantityTxt" max="32767" attributes="0"/> + <Component id="sellingPriceTxt" max="32767" attributes="0"/> + </Group> + </Group> + <Component id="productNameLab" alignment="0" max="32767" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="productCodeLab1" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="productCodeLab" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="productCodeTxt" max="32767" attributes="0"/> + <Component id="customerCodeTxt" pref="204" max="32767" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="dateChooser" min="-2" pref="27" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="32767" attributes="0"/> + </Group> + </Group> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="productCodeLab1" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="customerCodeTxt" alignment="3" min="-2" pref="29" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="customerNameLab" min="-2" pref="19" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="13" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="productCodeLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="productCodeTxt" alignment="3" min="-2" pref="29" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="productNameLab" min="-2" pref="19" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="sellingPriceLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="sellingPriceTxt" alignment="3" min="-2" pref="29" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="quantityLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="quantityTxt" alignment="3" min="-2" pref="29" max="-2" attributes="0"/> + </Group> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="25" max="-2" attributes="0"/> + <Component id="salesIdTxt" min="-2" pref="34" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="sellBttn" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="deleteBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="clearBttn1" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel7" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel9" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </Group> + <EmptySpace pref="21" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="productCodeLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Product Code"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="productCodeTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="productCodeTxtKeyReleased"/> + </Events> + </Component> + <Component class="javax.swing.JTextField" name="quantityTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="quantityLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Quantity"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="sellingPriceTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="sellingPriceLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Selling Price"/> + </Properties> + </Component> + <Component class="com.toedter.calendar.JDateChooser" name="dateChooser"> + </Component> + <Component class="javax.swing.JLabel" name="jLabel3"> + <Properties> + <Property name="text" type="java.lang.String" value="Date"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="customerCodeTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="customerCodeTxtKeyReleased"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="productCodeLab1"> + <Properties> + <Property name="text" type="java.lang.String" value="Customer Code"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="productNameLab"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="cc" red="cc" type="rgb"/> + </Property> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="14" style="0"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="66" red="66" type="rgb"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="sellBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/saleLarge.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="sellBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel7"> + <Properties> + <Property name="text" type="java.lang.String" value="Delete"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="deleteBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/delete item.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="deleteBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="clearBttn1"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/clear.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="clearBttn1MouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel8"> + <Properties> + <Property name="text" type="java.lang.String" value="Clear"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel9"> + <Properties> + <Property name="text" type="java.lang.String" value="Sell"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="salesIdTxt"> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="salesIdTxtActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="customerNameLab"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="cc" red="cc" type="rgb"/> + </Property> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="14" style="0"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="66" red="66" type="rgb"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> + </Container> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="supplierInfoPanel"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="ff" red="ff" type="rgb"/> + </Property> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="e" green="80" red="90" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="19" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel5" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="purchasedDateLab" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel4" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="supplierInfoLab" min="-2" pref="291" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="purchasedDateLab" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="32767" attributes="0"/> + <Component id="jLabel5" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="supplierInfoLab" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel4"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="0" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="Customer Info: "/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="supplierInfoLab"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="0" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value=" "/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel5"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="0" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="Sold Date:"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="purchasedDateLab"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="33" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value=" "/> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="jLabel10"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="66" red="66" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="(Search using Product Name, Product Code, Customer Name or Username)"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="searchByLab"> + <Properties> + <Property name="text" type="java.lang.String" value="SEARCH"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="searchTxt"> + <Properties> + <Property name="toolTipText" type="java.lang.String" value="Search using Product Name, Brand Name OR Product Code"/> + </Properties> + <Events> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="searchTxtKeyReleased"/> + </Events> + </Component> + </SubComponents> +</Form> diff --git a/src/com/inventory/ui/SalesReport.java b/src/com/inventory/ui/SalesReport.java new file mode 100644 index 0000000..6c9beec --- /dev/null +++ b/src/com/inventory/ui/SalesReport.java @@ -0,0 +1,566 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.dao.CustomerDAO; +import com.inventory.dao.ProductDAO; +import com.inventory.dto.ProductDTO; +import static com.inventory.ui.Products.productCode; +import java.sql.ResultSet; +import java.sql.SQLException; +import javax.swing.JOptionPane; + +/** + * + * @author ADMIN + */ +public class SalesReport extends javax.swing.JPanel { +String u; + /** + * Creates new form SalesReport + */ + public SalesReport(String user) { + initComponents(); + u=user; + loadDatas(); + salesIdTxt.setVisible(false); + customerNameLab.setVisible(false); + productNameLab.setVisible(false); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + jLabel1 = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + jPanel1 = new javax.swing.JPanel(); + salePanel = new javax.swing.JPanel(); + productCodeLab = new javax.swing.JLabel(); + productCodeTxt = new javax.swing.JTextField(); + quantityTxt = new javax.swing.JTextField(); + quantityLab = new javax.swing.JLabel(); + sellingPriceTxt = new javax.swing.JTextField(); + sellingPriceLab = new javax.swing.JLabel(); + dateChooser = new com.toedter.calendar.JDateChooser(); + jLabel3 = new javax.swing.JLabel(); + customerCodeTxt = new javax.swing.JTextField(); + productCodeLab1 = new javax.swing.JLabel(); + productNameLab = new javax.swing.JLabel(); + sellBttn = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + deleteBttn = new javax.swing.JLabel(); + clearBttn1 = new javax.swing.JLabel(); + jLabel8 = new javax.swing.JLabel(); + jLabel9 = new javax.swing.JLabel(); + salesIdTxt = new javax.swing.JTextField(); + customerNameLab = new javax.swing.JLabel(); + supplierInfoPanel = new javax.swing.JPanel(); + jLabel4 = new javax.swing.JLabel(); + supplierInfoLab = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + purchasedDateLab = new javax.swing.JLabel(); + jLabel10 = new javax.swing.JLabel(); + searchByLab = new javax.swing.JLabel(); + searchTxt = new javax.swing.JTextField(); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + table.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + tableMouseClicked(evt); + } + }); + jScrollPane1.setViewportView(table); + + jLabel1.setFont(new java.awt.Font("Comfortaa", 1, 36)); // NOI18N + jLabel1.setForeground(new java.awt.Color(0, 102, 204)); + jLabel1.setText("Sales"); + + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("PLEASE FILL ALL THE FIELDS")); + jPanel1.setFont(new java.awt.Font("Comfortaa", 0, 12)); // NOI18N + + productCodeLab.setText("Product Code"); + + productCodeTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + productCodeTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + productCodeTxtKeyReleased(evt); + } + }); + + quantityTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + quantityLab.setText("Quantity"); + + sellingPriceTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + sellingPriceLab.setText("Selling Price"); + + jLabel3.setText("Date"); + + customerCodeTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + customerCodeTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + customerCodeTxtKeyReleased(evt); + } + }); + + productCodeLab1.setText("Customer Code"); + + productNameLab.setBackground(new java.awt.Color(204, 204, 255)); + productNameLab.setFont(new java.awt.Font("Comfortaa", 0, 14)); // NOI18N + productNameLab.setForeground(new java.awt.Color(102, 102, 255)); + + sellBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/saleLarge.png"))); // NOI18N + sellBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + sellBttnMouseClicked(evt); + } + }); + + jLabel7.setText("Delete"); + + deleteBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/delete item.png"))); // NOI18N + deleteBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + deleteBttnMouseClicked(evt); + } + }); + + clearBttn1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttn1MouseClicked(evt); + } + }); + + jLabel8.setText("Clear"); + + jLabel9.setText("Sell"); + + salesIdTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + salesIdTxtActionPerformed(evt); + } + }); + + customerNameLab.setBackground(new java.awt.Color(204, 204, 255)); + customerNameLab.setFont(new java.awt.Font("Comfortaa", 0, 14)); // NOI18N + customerNameLab.setForeground(new java.awt.Color(102, 102, 255)); + + javax.swing.GroupLayout salePanelLayout = new javax.swing.GroupLayout(salePanel); + salePanel.setLayout(salePanelLayout); + salePanelLayout.setHorizontalGroup( + salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(salePanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(customerNameLab, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(salePanelLayout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 62, Short.MAX_VALUE) + .addComponent(dateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, salePanelLayout.createSequentialGroup() + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(salePanelLayout.createSequentialGroup() + .addComponent(sellBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)) + .addGroup(salePanelLayout.createSequentialGroup() + .addComponent(jLabel9) + .addGap(19, 19, 19))) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(deleteBttn) + .addGroup(salePanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel7))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(salePanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel8)) + .addComponent(clearBttn1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(salesIdTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(7, 7, 7)) + .addGroup(salePanelLayout.createSequentialGroup() + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sellingPriceLab) + .addComponent(quantityLab)) + .addGap(29, 29, 29) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(quantityTxt) + .addComponent(sellingPriceTxt))) + .addComponent(productNameLab, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, salePanelLayout.createSequentialGroup() + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(productCodeLab1) + .addComponent(productCodeLab)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(productCodeTxt) + .addComponent(customerCodeTxt, javax.swing.GroupLayout.DEFAULT_SIZE, 204, Short.MAX_VALUE)))) + .addContainerGap()) + ); + salePanelLayout.setVerticalGroup( + salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(salePanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, salePanelLayout.createSequentialGroup() + .addComponent(jLabel3) + .addGap(18, 18, 18)) + .addGroup(salePanelLayout.createSequentialGroup() + .addComponent(dateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(productCodeLab1) + .addComponent(customerCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(customerNameLab, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(13, 13, 13) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(productCodeLab) + .addComponent(productCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(productNameLab, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sellingPriceLab) + .addComponent(sellingPriceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(quantityLab) + .addComponent(quantityTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(salePanelLayout.createSequentialGroup() + .addGap(25, 25, 25) + .addComponent(salesIdTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(salePanelLayout.createSequentialGroup() + .addGap(4, 4, 4) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sellBttn) + .addGroup(salePanelLayout.createSequentialGroup() + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(deleteBttn) + .addComponent(clearBttn1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(salePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel7) + .addComponent(jLabel8) + .addComponent(jLabel9)))))) + .addContainerGap(21, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(8, 8, 8) + .addComponent(salePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(9, 9, 9)) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(salePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(25, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab("Sales", jPanel1); + + supplierInfoPanel.setBackground(new java.awt.Color(255, 255, 204)); + supplierInfoPanel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(144, 128, 14), 1, true)); + + jLabel4.setForeground(new java.awt.Color(0, 0, 51)); + jLabel4.setText("Customer Info: "); + + supplierInfoLab.setForeground(new java.awt.Color(0, 0, 51)); + supplierInfoLab.setText(" "); + + jLabel5.setForeground(new java.awt.Color(0, 0, 51)); + jLabel5.setText("Sold Date:"); + + purchasedDateLab.setForeground(new java.awt.Color(0, 51, 51)); + purchasedDateLab.setText(" "); + + javax.swing.GroupLayout supplierInfoPanelLayout = new javax.swing.GroupLayout(supplierInfoPanel); + supplierInfoPanel.setLayout(supplierInfoPanelLayout); + supplierInfoPanelLayout.setHorizontalGroup( + supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(supplierInfoPanelLayout.createSequentialGroup() + .addGap(19, 19, 19) + .addGroup(supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(supplierInfoPanelLayout.createSequentialGroup() + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(purchasedDateLab)) + .addGroup(supplierInfoPanelLayout.createSequentialGroup() + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(supplierInfoLab, javax.swing.GroupLayout.PREFERRED_SIZE, 291, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + supplierInfoPanelLayout.setVerticalGroup( + supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, supplierInfoPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(purchasedDateLab) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, supplierInfoPanelLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(supplierInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel4) + .addComponent(supplierInfoLab)) + .addContainerGap()) + ); + + jLabel10.setForeground(new java.awt.Color(102, 102, 255)); + jLabel10.setText("(Search using Product Name, Product Code, Customer Name or Username)"); + + searchByLab.setText("SEARCH"); + + searchTxt.setToolTipText("Search using Product Name, Brand Name OR Product Code"); + searchTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + searchTxtKeyReleased(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator1) + .addGroup(layout.createSequentialGroup() + .addGap(91, 91, 91) + .addComponent(jLabel1) + .addGap(48, 48, 48) + .addComponent(jLabel10) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchByLab) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(supplierInfoPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)) + .addGap(18, 18, 18) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 16, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchByLab, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel10)) + .addGap(15, 15, 15)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED))) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 11, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 430, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jScrollPane1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(supplierInfoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(21, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + int quantity; + private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked + int row = table.getSelectedRow(); + int column = table.getColumnCount(); + Object[] val = new Object[column]; + for(int i = 0; i < column; i++) { + val[i]=table.getValueAt(row, i); + } + salesIdTxt.setText(val[0].toString()); + String cus=new ProductDAO().getProductsCustomer(Integer.parseInt(salesIdTxt.getText())); + supplierInfoLab.setText("Sold to "+cus); + String soldDate=new ProductDAO().getSoldDate(Integer.parseInt(salesIdTxt.getText())); + purchasedDateLab.setText(soldDate); + + quantity=Integer.parseInt(val[3].toString()); + productCode=val[1].toString(); + }//GEN-LAST:event_tableMouseClicked + + private void salesIdTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_salesIdTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_salesIdTxtActionPerformed + + private void clearBttn1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttn1MouseClicked + salesIdTxt.setText(""); + customerCodeTxt.setText(""); + productNameLab.setText(""); + productNameLab.setVisible(false); + customerNameLab.setText(""); + customerNameLab.setVisible(false); + dateChooser.setDate(null); + productCodeTxt.setText(""); + }//GEN-LAST:event_clearBttn1MouseClicked + + private void deleteBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deleteBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + new ProductDAO().deleteSalesDAO(String.valueOf(table.getValueAt(table.getSelectedRow(),0))); + new ProductDAO().editSoldStock(String.valueOf(table.getValueAt(table.getSelectedRow(),1)),quantity); + loadDatas(); + } + }//GEN-LAST:event_deleteBttnMouseClicked + + private void sellBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_sellBttnMouseClicked + if(dateChooser.getDate()==null || quantityTxt.getText().equals("") || customerCodeTxt.getText().equals("") ){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + try{ + ResultSet rs=new CustomerDAO().getCustomersName(customerCodeTxt.getText()); + if(rs.next()){ + ProductDTO productdto=new ProductDTO(); + productdto.setCustomerCode(customerCodeTxt.getText()); + productdto.setSellDate(dateChooser.getDate().toString()); + productdto.setProductCode(productCodeTxt.getText()); + Double sellingPrice=Double.parseDouble(sellingPriceTxt.getText()); + Double totalRevenue = sellingPrice*Integer.parseInt(quantityTxt.getText()); + productdto.setTotalRevenue(totalRevenue); + productdto.setQuantity(Integer.parseInt(quantityTxt.getText())); + new ProductDAO().sellProductDAO(productdto,u); + loadDatas(); + }else{ + JOptionPane.showMessageDialog(null, "Please enter valid customer code!"); + } + }catch(Exception e){ + e.printStackTrace(); + } + } + }//GEN-LAST:event_sellBttnMouseClicked + + private void customerCodeTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_customerCodeTxtKeyReleased + customerNameLab.setVisible(true); + + try{ + ResultSet rs=new CustomerDAO().getCustomersName(customerCodeTxt.getText()); + if(rs.next()){ + customerNameLab.setText("Name: "+rs.getString("fullname") + " | Location: "+rs.getString("location")); + }else{ + customerNameLab.setText("Not associated with any Customers!"); + } + }catch(Exception e){ + e.printStackTrace(); + } + }//GEN-LAST:event_customerCodeTxtKeyReleased + + private void productCodeTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_productCodeTxtKeyReleased + productNameLab.setVisible(true); + + try{ + ResultSet rs=new CustomerDAO().getProductsName(productCodeTxt.getText()); + if(rs.next()){ + productNameLab.setText("Name: "+rs.getString("productname")+" | Available Quantity: "+rs.getInt("quantity")); + Double sellingPrice=new ProductDAO().getProductSellingPrice(productCodeTxt.getText()); + sellingPriceTxt.setText(sellingPrice.toString()); + }else{ + productNameLab.setText("Not associated with any Products!"); + } + }catch(Exception e){ + e.printStackTrace(); + } + }//GEN-LAST:event_productCodeTxtKeyReleased + + private void searchTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTxtKeyReleased + String text=searchTxt.getText(); + loadSearchSalesDatas(text); + + // loadSearchProductsDatas(text); + }//GEN-LAST:event_searchTxtKeyReleased + + public void loadDatas(){ + try{ + ProductDAO productDAO=new ProductDAO(); + table.setModel(productDAO.buildTableModel(productDAO.getSalesReportQueryResult())); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + public void loadSearchSalesDatas(String text){ + try{ + ProductDAO productDAO=new ProductDAO(); + table.setModel(productDAO.buildTableModel(productDAO.getSearchSalesQueryResult(text))); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel clearBttn1; + private javax.swing.JTextField customerCodeTxt; + private javax.swing.JLabel customerNameLab; + private com.toedter.calendar.JDateChooser dateChooser; + private javax.swing.JLabel deleteBttn; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel10; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel7; + private javax.swing.JLabel jLabel8; + private javax.swing.JLabel jLabel9; + private javax.swing.JPanel jPanel1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JLabel productCodeLab; + private javax.swing.JLabel productCodeLab1; + private javax.swing.JTextField productCodeTxt; + private javax.swing.JLabel productNameLab; + private javax.swing.JLabel purchasedDateLab; + private javax.swing.JLabel quantityLab; + private javax.swing.JTextField quantityTxt; + private javax.swing.JPanel salePanel; + private javax.swing.JTextField salesIdTxt; + private javax.swing.JLabel searchByLab; + private javax.swing.JTextField searchTxt; + private javax.swing.JLabel sellBttn; + private javax.swing.JLabel sellingPriceLab; + private javax.swing.JTextField sellingPriceTxt; + private javax.swing.JLabel supplierInfoLab; + private javax.swing.JPanel supplierInfoPanel; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/Suppliers.form b/src/com/inventory/ui/Suppliers.form new file mode 100644 index 0000000..ea72182 --- /dev/null +++ b/src/com/inventory/ui/Suppliers.form @@ -0,0 +1,434 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <NonVisualComponents> + <Container class="javax.swing.JPopupMenu" name="popUpMenu"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout"> + <Property name="useNullLayout" type="boolean" value="true"/> + </Layout> + </Container> + </NonVisualComponents> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="mainPanel" min="-2" pref="914" max="-2" attributes="0"/> + <EmptySpace min="0" pref="20" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="mainPanel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="0" pref="36" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="mainPanel"> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="mainPanelMouseClicked"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="1"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + <Component id="jLabel10" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="searchByLab" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="searchTxt" min="-2" pref="184" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="179" max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jSeparator1" alignment="0" min="-2" pref="989" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="jScrollPane1" min="-2" pref="559" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jTabbedPane1" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="searchByLab" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="searchTxt" alignment="3" min="-2" pref="34" max="-2" attributes="0"/> + <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel10" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="1" max="-2" attributes="0"/> + <Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="jTabbedPane1" max="32767" attributes="0"/> + <Component id="jScrollPane1" pref="0" max="32767" attributes="0"/> + </Group> + <EmptySpace pref="110" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTable" name="table"> + <Properties> + <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor"> + <Table columnCount="4" rowCount="4"> + <Column editable="true" title="Title 1" type="java.lang.Object"/> + <Column editable="true" title="Title 2" type="java.lang.Object"/> + <Column editable="true" title="Title 3" type="java.lang.Object"/> + <Column editable="true" title="Title 4" type="java.lang.Object"/> + </Table> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tableMouseClicked"/> + <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tableMousePressed"/> + </Events> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JTabbedPane" name="jTabbedPane1"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/> + <SubComponents> + <Container class="javax.swing.JPanel" name="inputPanel"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="PLEASE ENTER ALL THE FIELDS"/> + </Border> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription"> + <JTabbedPaneConstraints tabName="SUPPLIERS"> + <Property name="tabTitle" type="java.lang.String" value="SUPPLIERS"/> + </JTabbedPaneConstraints> + </Constraint> + </Constraints> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="addBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="editLab" max="32767" attributes="0"/> + </Group> + <Component id="editBttn" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="deleteBttn" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="deleteLab" min="-2" pref="38" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel9" max="32767" attributes="0"/> + </Group> + <Component id="clearBttn" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace pref="100" max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="supplierCodeTxt" min="-2" pref="11" max="-2" attributes="0"/> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="suppliersNameLab" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="jLabel5" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" max="-2" attributes="0"> + <Component id="phoneTxt" alignment="0" pref="184" max="32767" attributes="0"/> + <Component id="locationTxt" alignment="0" max="32767" attributes="0"/> + <Component id="suppliersNameTxt" alignment="0" max="32767" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace min="-2" pref="21" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="49" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="suppliersNameLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="suppliersNameTxt" alignment="3" min="-2" pref="32" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="locationTxt" alignment="3" min="-2" pref="32" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="phoneTxt" alignment="3" min="-2" pref="32" max="-2" attributes="0"/> + <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" attributes="0"> + <Component id="supplierCodeTxt" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="addBttn" min="-2" max="-2" attributes="0"/> + <Component id="editBttn" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="editLab" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="54" pref="54" max="-2" attributes="0"/> + <Component id="deleteLab" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="deleteBttn" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="clearBttn" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel9" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace pref="77" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JTextField" name="suppliersNameTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="suppliersNameTxtActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JTextField" name="phoneTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="phoneTxtActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JTextField" name="locationTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="locationTxtActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="suppliersNameLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Supplier's name"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel3"> + <Properties> + <Property name="text" type="java.lang.String" value="Location"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel5"> + <Properties> + <Property name="text" type="java.lang.String" value="Phone"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="addBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/addPeople.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="addBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="editBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/editPeople.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="editBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="deleteBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/deletelarge.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="deleteBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="clearBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/clear.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="clearBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JTextField" name="supplierCodeTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="supplierCodeTxtActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="text" type="java.lang.String" value="Add"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="editLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Edit"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="deleteLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Delete"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel9"> + <Properties> + <Property name="text" type="java.lang.String" value="Clear"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="36" style="1"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="66" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="SUPPLIERS"/> + </Properties> + </Component> + <Component class="javax.swing.JSeparator" name="jSeparator1"> + </Component> + <Component class="javax.swing.JTextField" name="searchTxt"> + <Properties> + <Property name="toolTipText" type="java.lang.String" value="Search using Full Name Location, Phone OR Supplier Code"/> + </Properties> + <Events> + <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="searchTxtMouseReleased"/> + <EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="searchTxtKeyReleased"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="searchByLab"> + <Properties> + <Property name="text" type="java.lang.String" value="SEARCH"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel10"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="66" red="66" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="(Search using Full Name, Location, Phone OR Supplier Code)"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/src/com/inventory/ui/Suppliers.java b/src/com/inventory/ui/Suppliers.java new file mode 100644 index 0000000..3d6ba8c --- /dev/null +++ b/src/com/inventory/ui/Suppliers.java @@ -0,0 +1,485 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.dao.SupplierDAO; +import com.inventory.dto.SupplierDTO; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.sql.SQLException; +import javax.swing.JOptionPane; + +/** + * + * @author ADMIN + */ +public class Suppliers extends javax.swing.JPanel { + + /** + * Creates new form Suppliers + */ + public Suppliers() { + initComponents(); + supplierCodeTxt.setVisible(false); + loadDatas(); +// editBttn.setVisible(false); +// editLab.setVisible(false); +// deleteBttn.setVisible(false); +// deleteLab.setVisible(false); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + popUpMenu = new javax.swing.JPopupMenu(); + mainPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + inputPanel = new javax.swing.JPanel(); + suppliersNameTxt = new javax.swing.JTextField(); + phoneTxt = new javax.swing.JTextField(); + locationTxt = new javax.swing.JTextField(); + suppliersNameLab = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + addBttn = new javax.swing.JLabel(); + editBttn = new javax.swing.JLabel(); + deleteBttn = new javax.swing.JLabel(); + clearBttn = new javax.swing.JLabel(); + supplierCodeTxt = new javax.swing.JTextField(); + jLabel2 = new javax.swing.JLabel(); + editLab = new javax.swing.JLabel(); + deleteLab = new javax.swing.JLabel(); + jLabel9 = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + searchTxt = new javax.swing.JTextField(); + searchByLab = new javax.swing.JLabel(); + jLabel10 = new javax.swing.JLabel(); + + mainPanel.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + mainPanelMouseClicked(evt); + } + }); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + table.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + tableMouseClicked(evt); + } + public void mousePressed(java.awt.event.MouseEvent evt) { + tableMousePressed(evt); + } + }); + jScrollPane1.setViewportView(table); + + inputPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("PLEASE ENTER ALL THE FIELDS")); + + suppliersNameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + suppliersNameTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + suppliersNameTxtActionPerformed(evt); + } + }); + + phoneTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + phoneTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + phoneTxtActionPerformed(evt); + } + }); + + locationTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + locationTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + locationTxtActionPerformed(evt); + } + }); + + suppliersNameLab.setText("Supplier's name"); + + jLabel3.setText("Location"); + + jLabel5.setText("Phone"); + + addBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/addPeople.png"))); // NOI18N + addBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + addBttnMouseClicked(evt); + } + }); + + editBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/editPeople.png"))); // NOI18N + editBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + editBttnMouseClicked(evt); + } + }); + + deleteBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/deletelarge.png"))); // NOI18N + deleteBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + deleteBttnMouseClicked(evt); + } + }); + + clearBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttnMouseClicked(evt); + } + }); + + supplierCodeTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + supplierCodeTxt.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + supplierCodeTxtActionPerformed(evt); + } + }); + + jLabel2.setText("Add"); + + editLab.setText("Edit"); + + deleteLab.setText("Delete"); + + jLabel9.setText("Clear"); + + javax.swing.GroupLayout inputPanelLayout = new javax.swing.GroupLayout(inputPanel); + inputPanel.setLayout(inputPanelLayout); + inputPanelLayout.setHorizontalGroup( + inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(addBttn) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel2))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(editLab, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(editBttn)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(deleteBttn) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(deleteLab, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(clearBttn)) + .addContainerGap(100, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, inputPanelLayout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(supplierCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 11, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(suppliersNameLab) + .addComponent(jLabel3) + .addComponent(jLabel5)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(phoneTxt, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE) + .addComponent(locationTxt, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(suppliersNameTxt, javax.swing.GroupLayout.Alignment.LEADING)))) + .addGap(21, 21, 21)))) + ); + inputPanelLayout.setVerticalGroup( + inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(49, 49, 49) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(suppliersNameLab) + .addComponent(suppliersNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(locationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(phoneTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addComponent(supplierCodeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(addBttn) + .addComponent(editBttn)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addComponent(editLab))) + .addGroup(inputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(inputPanelLayout.createSequentialGroup() + .addGap(54, 54, 54) + .addComponent(deleteLab)) + .addComponent(deleteBttn) + .addGroup(inputPanelLayout.createSequentialGroup() + .addComponent(clearBttn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel9)))) + .addContainerGap(77, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab("SUPPLIERS", inputPanel); + + jLabel1.setFont(new java.awt.Font("Comfortaa", 1, 36)); // NOI18N + jLabel1.setForeground(new java.awt.Color(0, 102, 204)); + jLabel1.setText("SUPPLIERS"); + + searchTxt.setToolTipText("Search using Full Name Location, Phone OR Supplier Code"); + searchTxt.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseReleased(java.awt.event.MouseEvent evt) { + searchTxtMouseReleased(evt); + } + }); + searchTxt.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyReleased(java.awt.event.KeyEvent evt) { + searchTxtKeyReleased(evt); + } + }); + + searchByLab.setText("SEARCH"); + + jLabel10.setForeground(new java.awt.Color(102, 102, 255)); + jLabel10.setText("(Search using Full Name, Location, Phone OR Supplier Code)"); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel10) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchByLab) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(179, 179, 179)) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 989, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 559, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(0, 0, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(4, 4, 4) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchByLab, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1) + .addComponent(jLabel10)) + .addGap(1, 1, 1) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(jTabbedPane1) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) + .addContainerGap(110, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 914, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 20, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 36, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + private void mainPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mainPanelMouseClicked + supplierCodeTxt.setText(""); + suppliersNameTxt.setText(""); + locationTxt.setText(""); + phoneTxt.setText(""); + }//GEN-LAST:event_mainPanelMouseClicked + + private void searchTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTxtKeyReleased + String text=searchTxt.getText(); + loadSearchSuppliersDatas(text); + table.getColumn("sid").setMaxWidth(0); + }//GEN-LAST:event_searchTxtKeyReleased + + private void searchTxtMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchTxtMouseReleased + // TODO add your handling code here: + }//GEN-LAST:event_searchTxtMouseReleased + + private void supplierCodeTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_supplierCodeTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_supplierCodeTxtActionPerformed + + private void locationTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_locationTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_locationTxtActionPerformed + + private void phoneTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_phoneTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_phoneTxtActionPerformed + + private void suppliersNameTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suppliersNameTxtActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_suppliersNameTxtActionPerformed + + private void tableMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMousePressed + if(evt.isPopupTrigger()){ + popUpMenu.show(this,evt.getX(),evt.getY()); + } + }//GEN-LAST:event_tableMousePressed + + private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked + int row = table.getSelectedRow(); + int column = table.getColumnCount(); + Object[] val = new Object[column]; + for(int i = 0; i < column; i++) { + val[i]=table.getValueAt(row, i); + } + supplierCodeTxt.setText(val[0].toString()); + suppliersNameTxt.setText((String) val[1]); + locationTxt.setText((String) val[2]); + phoneTxt.setText((String) val[3]); + }//GEN-LAST:event_tableMouseClicked + + private void editBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_editBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + if(suppliersNameTxt.getText().equals("") || locationTxt.getText().equals("") || phoneTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + + SupplierDTO supplierdto=new SupplierDTO(); + supplierdto.setSupplierCode(supplierCodeTxt.getText()); + supplierdto.setFullName(suppliersNameTxt.getText()); + supplierdto.setLocation(locationTxt.getText()); + supplierdto.setPhone(phoneTxt.getText()); + new SupplierDAO().editSupplierDAO(supplierdto); + loadDatas(); + //table.getColumn("sid").setMaxWidth(0); + } + } + }//GEN-LAST:event_editBttnMouseClicked + + private void deleteBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deleteBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + new SupplierDAO().deleteSupplierDAO(table.getValueAt(table.getSelectedRow(),0).toString()); + loadDatas(); + } + }//GEN-LAST:event_deleteBttnMouseClicked + + private void addBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addBttnMouseClicked + + if(suppliersNameTxt.getText().equals("") || locationTxt.getText().equals("") || phoneTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + + SupplierDTO supplierdto = new SupplierDTO(); + supplierdto.setFullName(suppliersNameTxt.getText()); + supplierdto.setLocation(locationTxt.getText()); + supplierdto.setPhone(phoneTxt.getText()); + new SupplierDAO().addSupplierDAO(supplierdto); + loadDatas(); + } + }//GEN-LAST:event_addBttnMouseClicked + + private void clearBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttnMouseClicked + supplierCodeTxt.setText(""); + suppliersNameTxt.setText(""); + locationTxt.setText(""); + phoneTxt.setText(""); + }//GEN-LAST:event_clearBttnMouseClicked + + public void loadDatas(){ + try{ + SupplierDAO supplierDAO=new SupplierDAO(); + table.setModel(supplierDAO.buildTableModel(supplierDAO.getQueryResult())); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + public void loadSearchSuppliersDatas(String text){ + try{ + SupplierDAO supplierDAO=new SupplierDAO(); + table.setModel(supplierDAO.buildTableModel(supplierDAO.getSearchSuppliersQueryResult(text))); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel addBttn; + private javax.swing.JLabel clearBttn; + private javax.swing.JLabel deleteBttn; + private javax.swing.JLabel deleteLab; + private javax.swing.JLabel editBttn; + private javax.swing.JLabel editLab; + private javax.swing.JPanel inputPanel; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel10; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel9; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JTextField locationTxt; + public javax.swing.JPanel mainPanel; + private javax.swing.JTextField phoneTxt; + private javax.swing.JPopupMenu popUpMenu; + private javax.swing.JLabel searchByLab; + private javax.swing.JTextField searchTxt; + private javax.swing.JTextField supplierCodeTxt; + private javax.swing.JLabel suppliersNameLab; + private javax.swing.JTextField suppliersNameTxt; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/Users.form b/src/com/inventory/ui/Users.form new file mode 100644 index 0000000..84654ac --- /dev/null +++ b/src/com/inventory/ui/Users.form @@ -0,0 +1,387 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.9" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="mainPanel" alignment="1" min="-2" max="-2" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="mainPanel" min="-2" max="-2" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="mainPanel"> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="mainPanelMouseClicked"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="1"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jSeparator1" max="32767" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="userTabbedPane" min="-2" pref="536" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="jPanel1" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="247" max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="7" max="-2" attributes="0"/> + <Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="jPanel1" max="32767" attributes="0"/> + <Component id="userTabbedPane" pref="0" max="32767" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JTabbedPane" name="userTabbedPane"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription"> + <JTabbedPaneConstraints tabName="Users"> + <Property name="tabTitle" type="java.lang.String" value="Users"/> + </JTabbedPaneConstraints> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTable" name="table"> + <Properties> + <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor"> + <Table columnCount="4" rowCount="4"> + <Column editable="true" title="Title 1" type="java.lang.Object"/> + <Column editable="true" title="Title 2" type="java.lang.Object"/> + <Column editable="true" title="Title 3" type="java.lang.Object"/> + <Column editable="true" title="Title 4" type="java.lang.Object"/> + </Table> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tableMouseClicked"/> + </Events> + </Component> + </SubComponents> + </Container> + </SubComponents> + </Container> + <Component class="javax.swing.JSeparator" name="jSeparator1"> + </Component> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Comfortaa" size="36" style="1"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="66" red="0" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="USERS"/> + </Properties> + </Component> + <Container class="javax.swing.JPanel" name="jPanel1"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="PLEASE FILL ALL THE FIELDS"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="locationLab" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="fullNameLab" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="phoneLab" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="22" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="locationTxt" alignment="0" max="32767" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="usernameTxt" min="-2" pref="21" max="-2" attributes="0"/> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> + </Group> + <Component id="phoneTxt" max="32767" attributes="0"/> + <Component id="fullNameTxt" alignment="0" max="32767" attributes="0"/> + </Group> + </Group> + <Component id="userComboBox" alignment="0" min="-2" pref="300" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="10" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="addBttn" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="editBttn" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="5" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="jLabel4" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="16" max="-2" attributes="0"/> + </Group> + </Group> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="UserdeleteBttn" min="-2" max="-2" attributes="0"/> + <Group type="102" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel5" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="10" pref="10" max="-2" attributes="0"/> + <Component id="jLabel6" max="32767" attributes="0"/> + </Group> + <Component id="clearBttn" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="116" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="35" max="-2" attributes="0"/> + <Component id="userComboBox" min="-2" pref="45" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="usernameTxt" min="-2" pref="32" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="fullNameTxt" alignment="3" min="-2" pref="32" max="-2" attributes="0"/> + <Component id="fullNameLab" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="locationLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="locationTxt" alignment="3" min="-2" pref="32" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="phoneLab" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="phoneTxt" alignment="3" min="-2" pref="32" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="UserdeleteBttn" min="-2" max="-2" attributes="0"/> + <Component id="clearBttn" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="addBttn" min="-2" max="-2" attributes="0"/> + <Component id="editBttn" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="58" max="32767" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="addBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/addPeople.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="addBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="locationLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Location"/> + </Properties> + </Component> + <Component class="javax.swing.JComboBox" name="userComboBox"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="2"> + <StringItem index="0" value="ADMINISTRATOR"/> + <StringItem index="1" value="NORMAL USER"/> + </StringArray> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="userComboBoxActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="fullNameLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Full Name "/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="phoneTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="locationTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="fullNameTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="phoneLab"> + <Properties> + <Property name="text" type="java.lang.String" value="Phone"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="UserdeleteBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/deletelarge.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="UserdeleteBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="clearBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/clear.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="clearBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel3"> + <Properties> + <Property name="text" type="java.lang.String" value="Add"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel5"> + <Properties> + <Property name="text" type="java.lang.String" value="Delete"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel6"> + <Properties> + <Property name="text" type="java.lang.String" value="Clear"/> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="usernameTxt"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder roundedCorners="true"> + <Color PropertyName="color" blue="cc" green="cc" red="cc" type="rgb"/> + </LineBorder> + </Border> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="editBttn"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/com/inventory/ui/images/editPeople.png"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="editBttnMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel4"> + <Properties> + <Property name="text" type="java.lang.String" value="Edit"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/src/com/inventory/ui/Users.java b/src/com/inventory/ui/Users.java new file mode 100644 index 0000000..f6dbcd3 --- /dev/null +++ b/src/com/inventory/ui/Users.java @@ -0,0 +1,421 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package com.inventory.ui; + +import com.inventory.dao.UserDAO; +import com.inventory.dto.UserDTO; +import java.io.File; +import java.math.BigInteger; +import java.security.MessageDigest; +import java.sql.SQLException; +import javax.swing.ImageIcon; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; + +/** + * + * @author ADMIN + */ +public class Users extends javax.swing.JPanel { + File f; + JFileChooser chooser; + /** + * Creates new form NewJPanel + */ + + public Users() { + + initComponents(); + + usernameTxt.setVisible(false); + chooser=new JFileChooser(); + loadDatas(); + } + + /** + * 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 Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + userTabbedPane = new javax.swing.JTabbedPane(); + jScrollPane1 = new javax.swing.JScrollPane(); + table = new javax.swing.JTable(); + jSeparator1 = new javax.swing.JSeparator(); + jLabel2 = new javax.swing.JLabel(); + jPanel1 = new javax.swing.JPanel(); + addBttn = new javax.swing.JLabel(); + locationLab = new javax.swing.JLabel(); + userComboBox = new javax.swing.JComboBox(); + fullNameLab = new javax.swing.JLabel(); + phoneTxt = new javax.swing.JTextField(); + locationTxt = new javax.swing.JTextField(); + fullNameTxt = new javax.swing.JTextField(); + phoneLab = new javax.swing.JLabel(); + UserdeleteBttn = new javax.swing.JLabel(); + clearBttn = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + jLabel6 = new javax.swing.JLabel(); + usernameTxt = new javax.swing.JTextField(); + editBttn = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + + mainPanel.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + mainPanelMouseClicked(evt); + } + }); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + table.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + tableMouseClicked(evt); + } + }); + jScrollPane1.setViewportView(table); + + userTabbedPane.addTab("Users", jScrollPane1); + + jLabel2.setFont(new java.awt.Font("Comfortaa", 1, 36)); // NOI18N + jLabel2.setForeground(new java.awt.Color(0, 102, 204)); + jLabel2.setText("USERS"); + + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("PLEASE FILL ALL THE FIELDS")); + + addBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/addPeople.png"))); // NOI18N + addBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + addBttnMouseClicked(evt); + } + }); + + locationLab.setText("Location"); + + userComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "ADMINISTRATOR", "NORMAL USER" })); + userComboBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + userComboBoxActionPerformed(evt); + } + }); + + fullNameLab.setText("Full Name "); + + phoneTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + locationTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + fullNameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + phoneLab.setText("Phone"); + + UserdeleteBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/deletelarge.png"))); // NOI18N + UserdeleteBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + UserdeleteBttnMouseClicked(evt); + } + }); + + clearBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/clear.png"))); // NOI18N + clearBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + clearBttnMouseClicked(evt); + } + }); + + jLabel3.setText("Add"); + + jLabel5.setText("Delete"); + + jLabel6.setText("Clear"); + + usernameTxt.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + editBttn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/inventory/ui/images/editPeople.png"))); // NOI18N + editBttn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + editBttnMouseClicked(evt); + } + }); + + jLabel4.setText("Edit"); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(locationLab) + .addComponent(fullNameLab) + .addComponent(phoneLab)) + .addGap(22, 22, 22) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(locationTxt) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(usernameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(phoneTxt) + .addComponent(fullNameTxt))) + .addComponent(userComboBox, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(10, 10, 10)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(addBttn) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel3))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addComponent(editBttn) + .addGap(5, 5, 5)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addComponent(jLabel4) + .addGap(16, 16, 16))) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(UserdeleteBttn) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel5))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(clearBttn)) + .addGap(116, 116, 116)))) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(35, 35, 35) + .addComponent(userComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(usernameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(fullNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(fullNameLab)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(locationLab) + .addComponent(locationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(phoneLab) + .addComponent(phoneTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(UserdeleteBttn) + .addComponent(clearBttn)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel5) + .addComponent(jLabel6) + .addComponent(jLabel4)) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(addBttn) + .addComponent(editBttn)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel3) + .addContainerGap(58, Short.MAX_VALUE)))) + ); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator1) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(userTabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 536, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(247, Short.MAX_VALUE)) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(jLabel2) + .addGap(0, 0, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(jLabel2) + .addGap(7, 7, 7) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(userTabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(mainPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + ); + }// </editor-fold>//GEN-END:initComponents + + private void userComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_userComboBoxActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_userComboBoxActionPerformed + + public String encryptPassword(String input){ + String encPass=null; + if(input==null) return null; + + try{ + MessageDigest digest=MessageDigest.getInstance("MD5"); + digest.update(input.getBytes(),0,input.length()); + encPass=new BigInteger(1,digest.digest()).toString(16); + }catch(Exception e){ + e.printStackTrace(); + } + return encPass; + } + + String user; + private void addBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addBttnMouseClicked + UserDTO userdto=new UserDTO(); + + if(fullNameTxt.getText().equals("") || locationTxt.getText().equals("") || phoneTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + user=(String)userComboBox.getSelectedItem(); + userdto.setFullName(fullNameTxt.getText()); + userdto.setLocation(locationTxt.getText()); + userdto.setPhone(phoneTxt.getText()); + userdto.setCategory(user); + new UserDAO().addUserDAO(userdto,user); + loadDatas(); + } + }//GEN-LAST:event_addBttnMouseClicked + String username; + private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked + int row = table.getSelectedRow(); + int column = table.getColumnCount(); + Object[] val = new Object[column]; + for(int i = 0; i < column; i++) { + val[i]=table.getValueAt(row, i); + } + usernameTxt.setText(val[3].toString()); + fullNameTxt.setText((String) val[0]); + locationTxt.setText((String) val[1]); + phoneTxt.setText((String) val[2]); + user=(String)userComboBox.getSelectedItem(); + userComboBox.setSelectedItem(user); + username=(String) val[3]; + }//GEN-LAST:event_tableMouseClicked + + private void UserdeleteBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_UserdeleteBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + new UserDAO().deleteUserDAO(String.valueOf(table.getValueAt(table.getSelectedRow(),3))); + loadDatas(); + } + }//GEN-LAST:event_UserdeleteBttnMouseClicked + + private void clearBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearBttnMouseClicked + usernameTxt.setText(""); + fullNameTxt.setText(""); + locationTxt.setText(""); + phoneTxt.setText(""); + }//GEN-LAST:event_clearBttnMouseClicked +String filename; + private void mainPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mainPanelMouseClicked + usernameTxt.setText(""); + fullNameTxt.setText(""); + locationTxt.setText(""); + phoneTxt.setText(""); + }//GEN-LAST:event_mainPanelMouseClicked + + private void editBttnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_editBttnMouseClicked + if(table.getSelectedRow()<0){ + JOptionPane.showMessageDialog(null,"Select a table data first!"); + }else{ + UserDTO userdto=new UserDTO(); + + if(fullNameTxt.getText().equals("") || locationTxt.getText().equals("") || phoneTxt.getText().equals("")){ + JOptionPane.showMessageDialog(null,"Please fill all the fields!"); + }else{ + user=(String)userComboBox.getSelectedItem(); + userdto.setFullName(fullNameTxt.getText()); + userdto.setLocation(locationTxt.getText()); + userdto.setPhone(phoneTxt.getText()); + userdto.setUsername(usernameTxt.getText()); + userdto.setCategory(user); + new UserDAO().editUserDAO(userdto); + loadDatas(); + } + } + }//GEN-LAST:event_editBttnMouseClicked + + + public void loadDatas(){ + try{ + UserDAO userDAO=new UserDAO(); + table.setModel(userDAO.buildTableModel(userDAO.getQueryResult1())); + }catch(SQLException ex){ + ex.printStackTrace(); + } + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel UserdeleteBttn; + private javax.swing.JLabel addBttn; + private javax.swing.JLabel clearBttn; + private javax.swing.JLabel editBttn; + private javax.swing.JLabel fullNameLab; + private javax.swing.JTextField fullNameTxt; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel6; + private javax.swing.JPanel jPanel1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JLabel locationLab; + private javax.swing.JTextField locationTxt; + public javax.swing.JPanel mainPanel; + private javax.swing.JLabel phoneLab; + private javax.swing.JTextField phoneTxt; + private javax.swing.JTable table; + private javax.swing.JComboBox userComboBox; + private javax.swing.JTabbedPane userTabbedPane; + private javax.swing.JTextField usernameTxt; + // End of variables declaration//GEN-END:variables +} diff --git a/src/com/inventory/ui/images/add item.png b/src/com/inventory/ui/images/add item.png new file mode 100644 index 0000000000000000000000000000000000000000..69f879829e1919227f4a7f102fb106dc166d3292 GIT binary patch literal 2439 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 FV1jOVhxq^i literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/addPeople.png b/src/com/inventory/ui/images/addPeople.png new file mode 100644 index 0000000000000000000000000000000000000000..2b2f6646984463780850aff8e7bb852f7e83ac58 GIT binary patch literal 3168 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 GLSTZ}vEms3 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/basket-icon small.png b/src/com/inventory/ui/images/basket-icon small.png new file mode 100644 index 0000000000000000000000000000000000000000..4ba1d5e851f0299d33879d45e2ba1668b8da6058 GIT binary patch literal 2082 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 M07*qoM6N<$f*(H!Qvd(} literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/basket-icon.png b/src/com/inventory/ui/images/basket-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03f80dba2470372e47b40ec6882fc7b1aae7ec17 GIT binary patch literal 4444 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/changeDetails.png b/src/com/inventory/ui/images/changeDetails.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa9d6747aad704cac4a2e2d60c205cfb89b0fcb GIT binary patch literal 912 zcmV;B18@9^P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv000A5Nkl<Zc-pO2 zT}V_x6h3oz{b_Yea;<c&G<P8-NL{j^Ad{fCFd>k{6|I-Tw1==B%F296=*fD^eqV%2 zEfkZWAJKkH#V0M@ASi!YGtG5fb$_OF)_a$`+r6t`1H+t|J9EBszH`pZWe}!W`#zd+ zD8!zJJp;Qz{PYX^Aof?-8y{Nsj;QHiDvC{vu{sowa?S;m1N(5!X)cYp<VEp0id7G? zb8IUDl=SzM;(>ZR5F=L@20&VyNAWCz+*1WW%P-+j18Zy5NLlSa0I0kat!SV%1?&9s z*64K*qt)^sE*Eon+=_cd`K06tlQ_p=K#3NTH%CRYGpT8iqKom*eR!^aW}4ss{*5`k zUQnSclVTzPG~tl1<gZo`pmygjFhoQ^$5$InyXL`?XoU2H1Q>G6LY?gkaAm4mkg5Vk zsfdU}@@$b?l({~RpGz~dhW=h?`8*W(R-UtuA2FHP#qLfRkB;I@5JJyVcBM1Sn#&Ye zHQtMpxAQ}W1XkMe6n?v0fp1w`5_wJDVRrLf7j#eBxjxy*5G0hYYVzPU$_Ld_qI_El z#A~!r+1^G60_(@pGoUQX0vBF(z~H1EBK5JLHySZIL5ca6Jot&iCM6FvIOT2+Uz(U; z^G;`=6eu~WbMv@qV>~NqegcagkAHteEP*7+>9UgtUQns%${l9N+7K5u>0j7J;C9c4 zz&ui~7d=@vhCCnuLCJ%PR1*P&t>pHRVFCy`iy#bRLQ`K@isS%3<o`xjCuo?!&+k7# z8&v^FrkKPgCD{ppf}Fb&fXnTM;-<$y#y=`J&Z0D$umJuV(&^q%3@A;nttJMykZbe+ zPVdQ4je)!&&Q(_Y>AhLdXcP-AGzNG2dI2}_vTRG(7>F|7D3I=7M4Fm#J^z0NS(KYw zi>w99cTq21b_@nk)U7p5MQU8AZ+Ghnt1awx9q;47rlvTSmb^~5SU3K0W?=y)<{WY_ zY5f#he-}av45{)zICLdQ2Nq`jaOe2=YF;!6^a?7!9`GjAW%2}vdO2N7vksUW8w<LN z6f%b1fC|ZSRRAd_ObCAT7bOs%FVq9dmS@<jQ2EM_zPwQi<Hc2odi=jFOO82%V|0`_ mnF8^*1$}C4E3yu&>G%u4X*WWsAHORA0000<MNUMnLSTa7Po1m) literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/clear.png b/src/com/inventory/ui/images/clear.png new file mode 100644 index 0000000000000000000000000000000000000000..8cec3b64ca7f39fbc7679c320c6f586c13678135 GIT binary patch literal 4126 zcmV+(5aI8MP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000l=Nkl<Zc-qyO z33L=yy2rm;)z#hUbf=eer@KS84j~YBgg_9VgX6xPhl7X&g6rrgs81ag6`T=K5R?fI zg(u=s98{h`1|5-^H#j&?mH-JPgfJu|L9%p~-uJHRs=Dv1ARIDJXIz5k&?h;4le$&+ z``!Ehwr&DH(d*L>U$+E<f#I?!oS6UM(!gLnm;6)!pMCVkf95(&5A}4m2YbBXM=KV* z@Xkd8@X407>TIX|lo0i1YgG*G4a7gW{`SXaTr>dNHdkI-GAwVW`>ST+u-oB8n|t=m zyPy5=q5;^sb^SXQJv%=Z=pzP`Ezsfa%m2kaOClEqzy}*w=!d#;P6v9vGH2*Cq&LXF zJL9g!cMR6^FE~Ke+bd@k<=a2(XlaDJ+&p@$rR(~64=w-mMFa5Z2Wz&aG07Rpuou#e zS#FOnG<4Pj%lL}|U}NQC)40*Yy4#!TG?}Ih@J6K9ZvEA=hX-?w3kvYx8<*dcYd36c zZ>oo)VZ&){<5yGff9ACV7Y)FU4=Q)jr0+^89;8}BR%<96Exv8x%k-iEc&l=8-k6bv z&25b}8fTW3x_!wP=RCY}$zZQ@!2mwk@Zw`RS^8JIT8_ccqTy1_v9_@fEM9l~q5#<P z=1atEG92K8?n#W8AhOC(8}kNB=RCc3P~~&M0Nz;rOv$9N!x~x|4ly~|PICHW-xKAF z*S>Ng*18}7Ti;&!e3n`BoTsxD@^cGm$A&*0<~;r`(dWH)Mr)hr`#h`4Zok2D$t5oY zJ36*PIJ{zJd;5S>9CUy!8&?pU)!dW_b{BC(0#!$dmyUFJL?K1vpMBOu37I=fl)e*0 z6(KiLm1<4S6OXF9w*QerbMr<j$;)n|^c=*X1FT=Yc=E(C!>Zd)9wT<FJbfFs`6o=B z9Fx@?)IRqr$dY`5GGy*-iT+cFDu5f%%C#AV4(`%bE1==c4bb(ceH1Nz>oy8YFBri4 zZ?0Hl$xuHW_Vv&#s~xiITiq^wt^|5LwEJ5~?XuUXBuXa{Vov$DKx_fH35{Q4EOe?a zdwLP1b%%&lm`iImt%r`k93*J<M!fz)IR!eX0Bc@)>OQ9}eOZc++q7yG%>rF=Tzkw* zQ)2&-GuBMf6KSV4%hy9nl$r%RiF+m5cm6ZpLgO_6l}49cJ#Eobls$!)X}_J6DK3B` zAG}REb{$ksVxvr9*`NWeeRiHc9u1w)WV(i!3~8WYDHOQ{Uv5l_pFfYyvVmXdfj!Ir z3lfst9A`-RlV3xuK;uog4|bQGoA$)xAfM<|j32O0TG>RXUi|{}*0w5F?i)0Kb<f|w z(4>=B>a=QYI2b4Geu0kUHK7SSQ5u)CR`l<r%AN%Q@RJ>{Y@{hcYK<TSmFW~C!0KF= zU3K-NkATo{ihwK+xQ|WOfqFs_`P;9bp>ba<ivRq@j|O;m<^7{rhN(E+9l9%b=t!Gc z_Cv_qMbeBWs;xU2C`r$WB?74dhA0EhVJ99gOt)2TB1u7Va{#vN0vmVhBMWJw_9TEL zotvxN$EZ1~8(#?fURq6Jo^S*&-g7rV^^XF0<M})8GH0Z(GZ-?o={gPcdV|p1+6P*b z4b15rO)gvCQ#8^kx<*fgm}g)Mpjf7I+QFNifT}g`LDmop+`iyGh*zHgMv?~1B@6+> z*gV+3?j4AG!ZAYN&U+~wIJ+Z1OfpN#=V$13Zx@%85Iz=$cDIKZ^;#P1?M9*MNn58c z#ctXCW=3z|rh>9U$S)oP(eC(wU6mABIPF9n!carH6~cRu6O|~PjVxyzSH*(9*g_7x z_X&-Aql)o&-%p|X9NZ5ve*JUhWh$Vb7nPLgG%AMn`GOF^XXobT(C*{)pfy`i7AfjG z(sC8qap(#N$LG5gh=O7g>4=;IzyTHUU1haUF%$+SB@zbCghocKCdLWlDd%9}e^<SM zvWX~~zvn@K{R2+t`x;;Q<gG@nnyqs<9R*ga72=5)baeY6+hzonN)5fOO`x-6f{+ry z@Af_=?rD4lYFn0~wG{|K^0V_Gd@3|RN@s}}mIdS3vA~)w5cBo|;Z8&S_F5dr;)-k* zp11Qq7+~$9+g{~3=FyxSCzy;T((Cop6dG$t*AgM<rwLI6HOHa7g!c3Wo_T21wiT5G zm#0+8p7RUKT;Li~05Nxx5RRiNLk2-|DxvNv%Mfo(4dp#OFy!V@<meYIH0F!P(8#+V zf&Xv(_Xc=n@qHz7w6E6b$kaL=b}S175{f3NR)d0)WfFFGQmw@bG9M#Um4*PmnUAdc z!ylA;Up=$dyZC$g_!;AXInqg@r+pO8i%e(7Ik$|1+5=yakUOL#tc8zL_~W<P^t}L< zExdWXpmF?aT!9X(W<7)>F$~o*E-6DQm4djp57Y)DuvCB)(a2s;An)N<w|Di!e_h*H z@+{oMaXH}K(SWznb22*L7)_P|*vpHddV3wnqJ&|I%zZ-s=Cb2E11x*+x=GPka&M7q z2p5zL;INuNuSyas@l-J+9taQ-2U=Ykh<t+ZlFFUz_T?>j^M9n53D!0g)@0^oa%JOl zY3S2>#rXc+re8;+e#gZz`I<*#GZ1ll3ElT`El9$d+G)`@Kzt{FWe;4VLy1)D4f-)d z>=tT9Cv8662O)tYnZ`8ANfBV90m7uGQx(fVFcK#!V0Zm;dDYb~YPp+8GF55Gw{n+H z$S3hn>lC^5FRfUuj6`xKB%u(2p<iR+k2))Z#-@*gFSj2ek|3TyADQ>8B=>!9fZsiO zV`U^RJd&4f1*JqzrBEUgg=8WQ-e4TM!x;Km0+}{5kW>sf;2{+jD&sp3ea^S_tjWx` zaaUa8BErripp^1dacWFXGA=K3EF^B84C$wO0cu((E8%|;kVtr}IG4*Zf&a=0@I}>^ zAc-Q%iJ7}Zl0DxUV9jGU-OO?9b_{XEY|J1=qk+bF3W-P%pG8P4DNveBVCI(yPdIw2 zCk(bM2jP!4f2uv$INF?-rJg?C1$0*(>EB#MBnZ$y=2X;k^(0ub=O~PIIq8Cw4D7+< zlob^Ki83NWAc)FtCOy|qqn~g2Gf1h_Nz4&*mhgh-Ujl6U&8$(l%$GWy#@y|R(9tDD zBp8ZNk3R@HjM=P)B|V-HwXia%EheH?u~d=PxRQKwblqn@iz!3AbhL{wd+PgTL(Y1v z;=DMwZ~A2TU3EQ8_64PwBr_8yje-Suw5t8}2!Q}th7$z_Pl9#Y=;`aG!(ZP2m?(~I z9X`Bb!SUn0-wN>Ii*pJ@S=wzerRN`LXeVWtlu%Jf5N{w#6|d81RUl!Vj<KFvwJeyN zHiAadhLdg>Tbu_ypEm?bu?bNhIEsatA`6^+RvLH;p6Qp;*Q*ax#uwx-yK3yxjwW|m z_3^G7Crueo7YZWf_SOK401N^V<rd}evhC1v!<FRV-ow;7e8kB>TidK}1lYQ~JXe&& zT@G7D@mJkJz}<(*ql+QINBT9N1}tbZ)X>uIfjqkr#CRMGR!jdb|GljjhUVC1o2U(C z{&hcKO@Y8N7HG2aP8o&)&t+5Sh69H|4us;<t{nT4)n%)t5*2GcJMzGR#*UjW#hQO1 zFH-H__M?o>0GxfX(<Z~d$)#{=?;!|xcK*izfXz#16O1DHVoG?wDBoI^6hwF%!&v!s zQ-~<=G$sm!VAM=AsDYr<Hnwz=Q3W=d<ONLoYJ%khHeZ;DMOKP6c1A}Rx~Tq89S}Z6 z8Aa0!3;wC4^u5}8ng|4wrPD{R%FMGJ#(0F3_+&{I4t{)S;o)QLGp?9cMju27Zug$E zO${YOT~K@36tZvoPD)tzFvD>b{Qy-f<`I+wry|7V3x=N`Kf-Yf*7)jee{BS(H3JGW zZJ;x&Fgzv!;xg!MY0%Wx0}iZz(v(=DRYN?P!qbVtNLLoPJ0hKd11B`<G#xi?co9vn zu0;S!LsLuP<JzM%6b$m?FCV$uoRe9HZpfpel4xQaJv)v~Kfk|f@8ieoPtU&Y=a<7> zxQXl+2vJyo#+Sht?^j_3Al0&J%^gd4K1|Sf6~oXp3aa8>Z{VIGS^Clfr|FWmPCv6_ zPZPcUXXC+;r3WuooMK2MW@kE$C3t9P>4mA|@=4GWq$aBo+@5fMVj7m42`9T^pVMHt zHBj4ji(04S#*ZjQ2OxA;?NJDXBgqldMyxevo9l6Y0{sE&4jRRAR3;FUc`@0vuSsg& zeeAhZT&TF}>gg~$%SMi1y|jDthk!-XVZ5i}w`cAFQuXpY14Eb+Zy<7uiepqG^2~G6 zG^*^Co4zD>UORzW9a#{H_+_knnN(CH8l#HF`4k!)L1%T6-YzfIne<qFN<^pSXr|c! z_068Gx-_m%@Pu;whfmF99afbPOG2>Mm&_|0_IifXQjeh}iV+Dj2nnHoW7|m+s1zPE zv~=6k@5y&*Il?AWFJQE*D4#!<9No2>_H=dC;z`~48(9vY%LCh1&9k77jlg5f;8e`@ zL$eJJ{(eWDYU;>baF~oBrEwzGHjJk&!eqG&C>4P=wDytGQ8}Q&B;@Ys18-7-3B$7i zQw5|zO^^P)1G}`e9yCyh1!6`1mfnAtLUGA9Ciiun!-SfLAYKc~goaQy%1$QHaPiis zHp}Px<YQ_z<20F;UN(7hh0o(T+U<7F`(;N*==?bdFjq$jqsKAUwctcwD>ducMMAG& zbBr7!%6u53jI4@<1uAM~2_qBxMa?Prd1)bLMu~X(g0!_S3O}1zK;n@U4e+uMiX~sc zW9CsBJeCUyDaLcSb3v6(a|&}9mY_61BqoBPDS-h-y!FY=1AEBx1IwsUgr#(p$z*D| ze&4?2KVByvt(wPRTE{s`YGI5r$p2>0u;t09n5#3Xjb?+|db-|cG7r`FX*kB>3nf@( zr(M|=hz6sC$Mdgg>V|8l4kO;K7!3e)rX*<-QS?nAf&n~$QN)WNUi{mOHAGkhIe|Mb zVBI6neCqc<>J#g8Vf3R_^Odn07c%3{*>P+kK+L#Xm}u#gWGa<WkZqjW*w&kQ>DXLd zQjn5iPf*JlbWqpagQb8Y&WNCEj|vB|pHX@MKmPV%i0nlV_Fym%vNDO`$q2Gy_>=Dr z%17-3^1#+rN?4^BO^KSwSd$T=#f8;a=xT8HjOZserQb-`u-C+S(a$7e<szp}*Qi-B z)We?`Ga+a6!N#slW|M9w&d2T^jVCmK!dAK}9?NBU=C3#ZG+!}oTUmjpOc`YkWwBJ3 z34#zE7LjRKQR)%W#3z%b;W&R&p2HMOhEr+IT+1~L&F+d!lOE$c^<$Tap%J?q>>6f2 z`QD&^x$#c{{_%C@bo!fH>|B9ES!fZ<fO*V_vePPacwW9jt%i3n5JXs%3eJ&cE&6d9 c|5va71CCDv*h?^H0RR9107*qoM6N<$g1yzqTL1t6 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/customerLarge.png b/src/com/inventory/ui/images/customerLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..723baf8caa4a26bfc91aa84595fa170b2e99c5fd GIT binary patch literal 4306 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 AH2?qr literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/customerSmall.png b/src/com/inventory/ui/images/customerSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..0be4402285609f5c37ad75fbaaa73a364fdca04b GIT binary patch literal 1522 zcmV<O1r7R%P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv000HKNkl<Zc-pm< zd2Ccw6o=1w^Y+==Qo7O>D3n4|%1%+JM1mNXum++aOTd7jfdm1AaUuReGz5{TAS#fs z3u-V#Kn$`Kq^;}~NX72!w6ni?Z{Bvj(?nymM8tTKmpSw1-t*ma?(dvI_@52``eMV% zM+J^^thFtBp03+jdfaS^$IX+5Zh!FMp=-7O8L)9p*<qGtX4)1(8W=RyB${R>{IF$_ z{Ow0>bUrlT%@yOaMTx7Y046Iv2a?>qAQn-&A0@1AUa{%xR}<^zK2ahIJUhlP?bK*Y z4@P48_3x`{eE$e|<E3%Wb3C&z$(u~(%vpjQ$AK0Ikf_gxjkOJT&tJVW`1-wuwO*(2 znp5Jux?y85qJcl6nTl$B7T3+?S8JNceF1MRFI|Jky;m@>kUTwWE;5Lq`Z`FYtsPtH z8;vuSH%HxRY`aQ>Gj69qY#Xq-BM4m~l_)U-Y2=}of3CZEU%;u|&+e+Oh6U57&Hzt( z1`uK=GJt4@4_X?Vt>(7YxtTec2U9b$fZ;^Cn}K%v+s3VXA)>_Tdh%k$?fTDq1T3Cb zglQ>axfaK9(<e_M{qpmX8t95b!u}vOH?;<$YGhx(K?7IF-V_8@B*-|BSO#p_zMtH@ zU7LvYHqBr|kAS5!if7S)hZFvg+`i<Ikt0x&B&s5fghCPQ=;%C!90?6595hpKB_VJU z1+WNK9L|?lk{_#X;q80Pt0`df{Q!Fs0!jFVx&0wKIR)G<C)l*Gv6u=`MVT$gj#&c- z7tWSkUI13;E)m!!*t!abj{cyXzI3bjQg!XU9s%p8mAv9-$kv2knm?F0Jzn(t{lL%+ z*kEMaqJw8w>|8fvbHR{7tK8lsdU&2t0214RXgJh*^6XEGH|#ieyhoXym@+!g!?E9Z z1+LhpHAUKBp$X%mA?ydXsSTW0ZWv+PS{WEQFqk!>Xn$II8t}Y8<1=8H2K;)j?);qB zcR$u+9~_=oBImkYSBlaz3uLDYY0)9l-b%Eh5=<*CgSu-~r1guvsMA?d>v2988&~vE zpPZ~zNv3x|EgFeJQ&U^uLOsbibo5*OZ-A4NhR++8k+G+DUOqvW8|hpCtFewW`8zRZ z*=ne*C?|oh4j`lJ&|ulsw+G~}=JI;&P4S4mWT%XVZa^@skX;>P&k64AcWp~QQMq&3 zAI*kmCk@*+Dyz>jDX%}lL<Tz5GX?k?>(P4rDY`jC!pFWu2My%2Y}k@Lb$gARw_x++ zR*?Z4TRNjq#g8Dj0;$M?NK0m2AeKG<;>UBl2P0mbIP}c$l$0_dJrls~0Z>&S?X92$ zx}eRI3?zRLgpMBtptatSTn49;N76GW&_7uRk*X~0%m#<s4HD0RgB8J`4Hs85pQ#&V zmp_?*7tfUzR1fpGhlr9)7@kLBnqaCi64O*{QDR^h7876PMZCu6z}C#^GzdpTSw^0x zpDqb`7Y{;`K$5aDkWOIGf^@Ghg0Wz@yyDYE<MBvw_WOM$X=REifZ%YTO$SWeG)X8P z$95{wu+vl16jYBL$ei{}JD*y>2?CK_E)-ZKg4ct|eR_kO?xwzowrPXfrI2V#5W^jQ zqN{3dw@mjGWeyb>=1CSY4}hR)+bx=D-HDo3#qwXe8pf8sAU3-P1PB3v7e$}|5S<dp z9v8UMJRqmJLGVgIXjf`}1tQHs2)B2E8i`IvcmV4?W@#Sl%BV~Df+!J*sz-Lah~$z{ zOmc#hEEB;aBGB0tr;|0>7Q#qp0Ak_Lx(5QJ3}47lz$Q8_U*-gnm8jaJZh#X7Sp>l) z5>Dp30lE?=YEVIiPT^Q6xaolazgueQs$6=>OXxk!rlKeiolX#B8R&O#aBTM)llF@i zRT8HsMqFF?uK<6x+)3*P&}=5K95>p*vW0YPWYhlx-Zo92Vd#~XVeG2=?wzWK20W<! Y1|7J>B|dXX`~Uy|07*qoM6N<$f+#D_Gynhq literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/defImage.jpeg b/src/com/inventory/ui/images/defImage.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..33d0966f30f86183e3098932029b6f6bb4e78dc5 GIT binary patch literal 22969 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 WnVeDoZ3LEF6L|Wd2Z1<Z-~Rz>52CdI literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/delete item.png b/src/com/inventory/ui/images/delete item.png new file mode 100644 index 0000000000000000000000000000000000000000..8b04bf5385db23fea4e14931e3c683f080fdf6dd GIT binary patch literal 4554 zcmV;*5jF0KP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000q@Nkl<Zc-qBT z378aBl8(sCy1J^XyQ}XT<ght~1{4NI4hO^w5k$ouWLH;*0WVlwKxJT79fcXx(NRAS z7#2mm5D{U-hIREr0p-4g=7y&4uCA`?t~>K>yq8%;L0`D*>?FL-$g0ej@kjhGj#mhO zhhyKmO)^MQ8Zc%-#t;x0T?awa8vBnQtNons!k=T3T_1mLPfB<74|$tMg#G?&v}m*h z7^DF(lSJP$J`f{_Qk`T{j#`o(J7kk-OUUaxQab4-|33`C_SK)}N+#2TphoWqx;?!l z($JRb1Z%Pb6pIBUMJD4*<OmJ4s0xu_5JJ8d2sC*CB`Io2bsk2G<pZW^Zw<cv#`^y^ z09#jnlr5Xhv!kA-ha&z!5~ql(Fc0nNE)tO?%-e>H91v@+twT>`4Zk1E&SZ}{E#;Mn zuldDc_fBs7y8+nz=eK1`hHDZF1fLCin!1I3Ets001FoWcM%L~?>9%F=m4;L2z*|$x ztSL^gxzfrNhkcf>qH@!yNB{M**2-lA*tFy|OHy{$A0mzJNBoUVa?~G$yuMdLa#qIw z#)%hc&{R<kwdE(lWVeAMGb2PsTGCQo`^>0E?vMN|0Jglg!ew<jS2UlixV5Fek+EnL z^ZJ%BXHF&xTmA&Aw;>Bwc`B-~=E!kS%x31u&H!6p?wXd$>S@24Grhw_-YI}DUVPJ* zl$QE&^O<uu`WqTii$n$AvwC*>zbMTvc{k&6s`_v_c&qCeMJP<p&V;0b+*Qrhbq|jH z_usY)qC)_mEm~@#@c4S5uI@g6og2vVU^1Jb`09Zmo0PaFnnrY`#Yj=;vN_q-bJ1`F zPH)=<6qRUx6F3WUz}}_s&)zc?v&YSUnEhk`WpBJYCwRVciLa^#SwsaM(_KXc%ymT( ze~zI^!Gb~kASEw{g#$r6y<<0o+#Zp+I<h+5!14$6M_T+4rqFtN`)(F;HzA+D_UK9G zt*RE$O0k$(T9*P<PEDOL^0!mp`bhxRFL||84uv;2o~=mL0wI({HeygXxIeSl?L1bp zj6OZE_?ptVazSr19NbXGAP^SHv;{z=Q%?V0tbhQ--ql>!zz%QRf+li^ztO|04j$3h z7KLPs!;Tpx-5Z0zN^f}Vfzy`_;BPOyQRX>z;`*Sw3ApkS-6}~E6b~CD+|IZnWc}hH z0|*z3&sI$f@#I(Az!ZaU32{uW6zDf$93?p={wXO9`_^m(4nPfu;ry-xpsA`pCB4&; zlL;v$-B){0pSySb^G~Rq0{HZqmu^%W-5VRvRsu#fCJU93M+hhwauw;z$OBa9WToT4 z$+rqiAzq-(?ll`QNJ)x7U*rLe$X+sjEKu$cbHo%pvvV&yw|zI7=?SK4taA4OR3nkN z*CcvxcAuUE4X(fWceA#32;k#?TV!%%Wqw|D;LzBx#|tv)Dx)N{;|nW)P(QA_pir3D z-0RjcklFJJh6#!`RoCLa57&bdQ5pF`pwLL;i~+r|+sI)TQA;C5w=RE=nS)W3c|6rL zR<-94suVDUn~k{O$jxMFeM{DOPMo=O(#ub?b^(;V@Miy}a}_&k%a2<yqJhGxW6Xk* z40)w}Aht$%s>D<~44HNpn5-7K-~@mlH-7`QKkOG&651x)V8FD=V76N0l#}SY1Dm#h zd;d|e2=zIIB2ataC`G7?m;$oR3OS{Ho4k?mkjc-?JKipU|9W}Zf1KX-{ZkZwQ6an1 zv}8p?HF|Mo@19JtSy5cj^AS3wm-c3TZyBRg!l;EPD#7>5Rx{@I(gX<ICyis7-MgZp zyr5k5(c^IFlfQwT{45!DQrOqb8jhW69mOQ7x4L&hr7(Ba_yx0GY7@ZPxlhZM<mB&8 zZrwH{+U!RY*`8BKikX(Cqb$iBJOdk(^FIO9*j3XeV@B5^0e~yV6|MTQoE>~`9p;tx zgYGwtW|D+)0HGE?ZeR8un7jcn$JYvi_k0!e*Ei}ePoNOLvSqk1efXfVn;xGrwrv3O zo-K&_1N+YI-kT<cRa7_tdQbu>P7bQ)nX6kDL|KYkN9EqgO2w<EPvsPe1K=+`@Oc?_ z`{htDC0XP5OR~&%eYg&N`^&)wf;ze}R1F%+Pg1d}way*%U$I-UaKz9i3gcNLAD<p> z1z^+Szl^Bddth_T(c>}?X*vK&B(TIAZLU<XXQs!m`CCG?BC<wY4ZUvpRs3_FX}R;F zv>^GJgW{pM^3V}DxbhQll8KarnTfU#q+X$|LzsiIf8OAJ;4CicGkV^PA6o(V;<;C* zo!Yu>h5JkeGm{+!g~S?=5>hJ@7Ix%hF{&Ofgh-yq%m@Q#PGc!lD+$l2s-BK?<%P_v z*l%8ZgV{WO5jJDb^U}PfwjT8OYAiXpSf+4@SyTb%55MN-;WO{u*b2b<C!U*o;@j=d z`>JaQfGhwg#v)F*Rac4@l|3s16^cHf#}$mwS5i?n8$Ndia;pnv^h3xdD$;ho^AWhe z+shoN7^w~+(h?xvyW_Njw#pCCk-4ty2L127<AMHn-1K(qHSp+DPafQ~<!Ln(1`FBV z0APgCwv#rsg<!TP#j~?di@?x@kAZ^<vH03I!e)fp$uFOL9#TV0%*~e$Ssti2hRzN? zw@TC5DJx$+W7^CCzn=JdD*&H7{NxjR)~<gx==HG_XR2^9tpm!$QbL4}Tjj!{G?|z= z*^Zo}u4_x#fQP3c(MMR_a02H(<8C|j{yL~wyP26HDn^=HD3L|mwR)ng(QHA#A02tw zaP8cgGX_j;1HjtZiyq&*X5A9^*>lWkcVe<VSpZNv0RVbZK*({y^>04Mtge*!=cKri zLWsh$jA}3h>+YMw;AAB#m(a2!ITQ%6Kua@b_A7zmb050@swv}_w*s(X;h*l__raR? zs>+XnRg)mek_2|U0~C}6jXF9)GK0a-Jq}$*{X$&pdSg8LC{(=h2*jy&YTHiO^1wWB zh&b0t2f=9;2#BF62zl2Ggp9tu$4q$Rxh<_JG<)GSXSeS7`sA)%X0wK9A@W#c6SLWp zP?mK+#5fT@b8eEHdE00l`Scv1g?f<%zj^mVyzZXKV4~VSP6xVw<J@Pk`jgFI<x81C zycmpgj`1+8vM81Eye<-iw8(hHm=P?!&z0TAEuMd>6@XRuJ(d;qcn|K~urUL}QM8hU z%#@4GND)afQ8jAPD^Dg;rzqffJ)~u)v56a2U~+m|JX{i8VAp3~ur&|Q#|cXo!q6!b z;}s~^vyqyl4<_6X<|?-c)tHd5`15>iP(>Q6e1XR_ImM2>?wMFi(KP?oSD%fx0`S*K z_hEWbVcB=fSB?%f`N%pl2OtJ_Hur$=ge-B62=|7}5{z877<!DpR!{}SJu=jut$??0 z{WT=jP-4nRfhp@(K+Y9iF6tc)eD)=5`OSQAYO)@&G*Xp{IKJHyyN~}>MFi5o)u$(< zkNM@AJ6~8dIi_<f0&e=<A7|}axq4~cnKQ^0r*O)sQp9*xX1vxB<Yo~PyHB42*DabY zKI6M^Jld#H72lmP2kO^uVQFZ_AgSOQKZ@P?)>5M|H@Y)Y^s|SafSQlLWELj)c~Skt zI3CoHtPkeQG?q)fxT|Nkf4O1lg8yt6z}knO?B+RoV)vo1zH&<R0$K+IKtU7AdQM=H zP?k?_>Dv`=Teln(yG=wG-kk9F?pgl@Zu-qU$coUj<TqXzH)5ELUG*~d9y20N6aMmm z+XKsn-ooq+em%7rZe)7uVk#L)p)Ssrm&J;%8&*dle!%T3U#e;sz}q+6CFS<+_0A6~ zS50YgyTQa4vOy&i=pgvNAgOipXUo7fsIQ=wq$>{rUo*UZ-FQf;^zkw|{sL-#AkrfT zrhNVm@cq;HLC=;`N&WTA1(2-D@%StN(3E6(keqgK6y`$Su&ZAi{mh()67_8}hQ0q! zGY9%ko%#O6&L0$@u8L@cF#sk`B6_R2q?k?m`Xh``M<q&VqvqN0<R4hYU)Q3GKOyLF zA-eb=irpWb3fInmgiNc(-;LBpuD<?Gl#f@5@|_1Io)j%P=?tu9M4JWjhYo5YV8d>H z<M|&u1;CFD4?VSV|Ho^mdTMK!iAWOzAk?DgitfId4O_ZEZ~cr0rDpFTSTp%SmK&D! zLM^eLCz;cs$u7ffpDts`J-Wo-ZMIn0#`|ZZcjI@WH&ButXwFEbxGyn^{piTgf&6QS zzEpqk$n1$9zRoTS!25SiFTil*+rwpLh2fSKqLQRXB+>dwVCmfzCYOBx{$M~%gOp+4 zyZxWRT3#g*RC^N#c_Z4dD@>xO6cRfRR2PxKSC6|Jk}4V@IU^k~$qE{+0+mxJ%?Sm= zho16QRu7o)?#r!;rVi5}d0}Gh&ONJ6?%8E!;iw3uRHZUnY#1U>7v6Cr_LwjZqJbdW z{+H#b?mGc4@|S#}gJYNwQMk<WMl*{t$Ed;BXWAqYj`ywlgoXAW!*sio5(xD*bRQ>} zY`3zkJ|)d)OPX}!>(7?8rDKNxUhO|h$}b%_ziP*hr>l-17h8*pQKj;KynN;%l9vO? zXc3FnbWw58x`q`y6!bSh&joB0nw<_vaioA%;+Y<V)p<XLRug3O=&mwH^6c?%FMg#x z9Xs91Tv}L)1%pbLddiPJQgz~(tc4?@xFaCK6SC-=C1G`=d((RWy;0OX5X(taAjy=? zWeU5BgIBMzNau`KCX$|x2>_F5;kvqZ(ZV1ttUYjev8M7vV~?KrmR&Z0#hHBTk4aiI zDr>4{EB?ih1>u_NM=Fo}s6>Jx5wUe3BEgB0Tjt@EX9~c02~DLoDNU=#N*TpM5k-+X zZN%c{yA@n%jc*4@`ZaZVEUmaG?DhFyIQ8G({Yec+!t`8}dhtj!7}gd9j(5I@7fFTu zMKm3ns2;JBGD)PLy<pH)_oSpa=AJ)zz~=XP8Kr*R1Ei3`v$aH5vceQu(ThJt(aUM# zIq%>^@h6FZ%b2kxtqC*nY$c<W@`J0mi|_2Aqf5{4-oKt{EI^O6kV-A|On?>=Z{*cQ z+Bw!CfQ4AVvl3NqV55;j!)1(=<oxWC;;Z^j4L8*HtUq6Y(NIV{BO?bQi-acevtCw+ zA=WfcbdphC8<rOvmgEt$-3}?axr|!>^73!Cz3;DcpBG94cxdq7%o+^28F)@4+`nfP ztRn!N(!AMq@=BTHT#|EWWYTpCxzm|l(!Ec1m%_oph6bm%p$@5DM`IU)^rL@5aY}l8 zQ%MIwvOvH~RYq$8t<-Bc($h7xSUl$r9o<)Z<oGcv<bsCPee|w+l50t>BDtDm4kAEu zv|Rw4K1?_mx%E>?&LO#w<a`=gbe&4qc2S*MOiAfoi*qx(6cyWSmds$ITM77lED{N$ z*j+Xf8LwUiwJa9oTZ=Yl3bQz!QJ=?GUvuol+4_^GYqf|Pp?P`z%mMJ^;w8D3WM21F zkbItG?g>B1kxo58CoA^=SDHp14eo_Z4vL1|_}-#ZjY*2lYDq1~Pj_aer`jBLr^S{; zVTOVe)ss|TGxCiZYVkJ*TUweu)pd=YbLZV^C=@kX3ZBs-#t3pHxd&+Q-;S%f2aM5Z zd>8Eu0QZ2I#3W7`lDXo1Co7GvoiPs>G&7S-37-NI^&H}-1kQFv@I^BE9=*X=HPQco z9%^HX^M+1XpYuDx1Drx0!|DwryGiD2AV_kjYXC)9*OjyJeJqm2pldr_Tj^{yKwba< zpcwSy&thy_h|d|XlJ$;KO8^kP1VD)7ph1;pL+NIcTSyKWQ7HZ!a=Uqeg8<!{TrqRP zFlZxWlkq(tvN5EDftS3486JoYH3lMKgbgb3bI3S{jqg;l{6#;2cbJKd1&yNB(iM{R z4L*#Y`R9f#8FK9Y*t2kn2V$E=ngK{n^oZzT5Y+@(i+L?Zo681pDVRiBB+#Qh8QK5< o2>@aqiCxEJEfHv2N+%xw10yt=sit?siU0rr07*qoM6N<$f_1UF$N&HU literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/deletelarge.png b/src/com/inventory/ui/images/deletelarge.png new file mode 100644 index 0000000000000000000000000000000000000000..119f0275939fb34f26e1ea9e9b81bd05b93b5f5f GIT binary patch literal 3522 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/edit item.png b/src/com/inventory/ui/images/edit item.png new file mode 100644 index 0000000000000000000000000000000000000000..a89dc373ec02a66868d861df5d10d99aa57688ad GIT binary patch literal 2934 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/editPeople.png b/src/com/inventory/ui/images/editPeople.png new file mode 100644 index 0000000000000000000000000000000000000000..78baa4059515509a613f7c6f23a1df4876b4e231 GIT binary patch literal 3208 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%0D(n3j}}NWG%9heNO10i zDrk5N%l#ynxUlCD*4jzWNDd?r3?v((KcAT;+rUuH;J4)|Y<}Swz9gvyKr=H{ffb}= zG67H<1CT_9WRZa*untXxddbRrw0es=VG4zuk732NS<G4F7BzUI?+K7(JC8tAa{wr( z!FzZuJay=|;M474>R85~pvXPF^SS#zx=_Wu=tMSp!K(X9b@4d^gkGWKwWwl!w2rDc zQHhJ;2w-Rd6goDKjA3PQb-^L5TDO2bl6eP=y^s7OI~b>uhIaOi*MQ}FeOT;MdC}#w zU!g}d{+=iqZ!Z1AnBc|iJP*LqWmy<BK~fpYiU|&%Aq@R7C`~9-<y&<S<2VqEPzWvN zpW}U`_SaI#N@Z(C<#(0)zeevTZ?j-92ooL{fzQsE#{NUgpHGe`thm}*m71+ZJ*SI9 zUD3{_e`rHiLBpvIq}4StEi*IIY!E<JRu;c+$C(77?O_tN1Zo~y3dNn$#O_6^oKmdI z&N4%i3=lEw{d)Al^Ibz2Dzn!@*^bXZ6KoLMD+AJojG`J3ELqajcCuQPX44AeMDrx6 z@X;IG>*dt==gyPV_|7e7{P^+yh5+y{&%H^!hm5(N<TfP7lk6m!?<E}63!%z_QiUN( z<%WnpQ-o?$Lcb{hEr9tp26ZA<v~C$qrtSWe#kk!pv3qZpU>Bg3sIvsopv4N~v#W`r zJ(0$ZCs`wz1F0aHud%m~{0T*&q(KTTU%uQ;T{6AYnqK1GZ$+|;WEb@w>P2o3j||=0 z!<(?C97tbC=Jccb$oL6$O&CBhY;=HR{@tL8<T8@^H``JI(C|{C9-V}GE%GUn%l2@8 ur3V8X5igB;Smr!8!hNJMqRs`6Vg3(K4~&b|@@=aC0000<MNUMnLSTZK4Jq#c literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/front-image.gif b/src/com/inventory/ui/images/front-image.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d97575efe63a9f84d51ada7dac8a80c9ebe6960 GIT binary patch literal 14250 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 S<VbmPk0efAaK{0F?*9M{h;s1& literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/front-image.png b/src/com/inventory/ui/images/front-image.png new file mode 100644 index 0000000000000000000000000000000000000000..db29586073b1249c1d60c34f48b7e19755fbf2de GIT binary patch literal 63284 zcmcG!bx>Sg@HTjHCpaXyy9G~h4IUf@hv4q+?!nzd5@e9T;O;>K!QC~u`ws8#+wYI9 z+N#~H+NqhEs#~|uJ-7Smr=Qd3M15A0!9ab73IG6x>?cW80Duhy0GKsoMCcWsiKQ** zABy8A9TxyV!+rh109iRi0D!7&B_Z+ov!#QpgNvnuBZaJl1cjrsgSnNh831@L<f>Vy ztL+mA-K<=S%SQ&L$UCUwBU7k~#{}Xf(lJq@V97;N7S7|VbYV+L!4nS_M8d_#2gc&7 zu%Jhy&LM447R84YM@A1ltosz(%(UL@j6OqVg?B41a%;ztI+4-SK5?n=1frLUlVPug z4D|M|Z?TC6q0%@4Sje?sC|#bYVSrnIK|yA!PNa4K#`7;4GSI1*-N```@$%+CJW~%Q zFchZKHIZK)IS>yJ^^O<+4v0#_1m<SYsR0G>fYGq2$tLib6)>U?*!c?t=H6!dzyP`_ zl=v_Oi2wzzS)?Rj`4OlX*Nm0|v^fAgbNOBYV2%~wkkvB(1XMQwonu&NzW`)(fI}rR zj1hqM0gMKzsXc+vOaM>%Tubnbxe{xa3F@iLUxH0E0#ZS`$gECCT3T#m3}do{%y_)U zu*O-UY~5a&Z{G)TzgfE&0f2%;eCXR=Jb8{`R*sGF#@AySvL19GzEGK%Y(8&~mph6A zz`Cpd#4`(f?YqE_h=F#`MYPB8mIi1AZZ|RJzut&KfP(!6tqaFj-$)gHZJM9o-rAaz z>lN2E9@6rAw&*tO)OxbL^A~))xms)Apb2`fA0z{RyVgB&sZc^Po`e!=vb2*R^Vop) z@<{rZs#n&eNt+38Qw7H<UNS58;(ZBKlz0+jAMNDJmyK1H2RPwX9-!J<7{(`&^{2im z+_gMCmbPo>#ti_Rw>Wf7F(AVQT86BTd%T>8JjoQ$0)ghTNlpM@AW6ffK2$3*fD8bV z1wl;JV#JqSL@b?%BwYwgU1*O+yrJSWz1`wi;;3H&Nt}%sD}u!t!bht~nT*({L`k_j zRV>4k9WmLuH5xI69N*j<Bj<H7v<9KTiwz><8dEMr!k9#BQ^z9{W`^BTc71}!iJ_tR z9f_wxC7;OiiBmONokHUi>A8?ItU!dGbaUdzLEwGxV|c3!XG+j76`?6~h(yy*zIUP0 zMQDG%xN>GC5ENwpajttO6w6z<`={LU%|e2(!~jR<9uX2(uPp~#e~)+#KMP8->2M8I z1$ue^yK2n}xR$6Z)A1S)c$^@qP842v4{-`(GO<tE3ff9@pMFx1&~Rffpzxu<g{pMZ zQzieDucK?mzUw72dCwW4{fUKo1}6cR9m^+DqL+^bCraWyebZN1*_v<alQ@&ollH3A z`z)o|+@Ic2C;wjfV)F}0Accj3c`$4%cdKWMYm0b`@>~}+*F@Cm+pXFLgX)mA+}mxe zZSHMEvyAs*8pT<v%RdX%v3U|e;^4x1)hd;UpSav^SpuUW1hVoa;G)#O?<@%|Z>*~J zT${0%Q^}Ol|7cAP@5}6^@4;PqpksvNhYUnoFuctsLL#zw>p@hNq453f-<Y=p>KuHW zhZ(z>Z!#S;w3+IeeDM>9P*den=~9WA*wstRzL%|(p=n%b467%U8mReIN^5YbZI+@; zrIl-x<$gX?BUZC0{rEGY%;Kkmy2v+wou?>7ogRfAWr=Sp1vQ47t^E{erf+LKStxBV z%ER4)czWq-M(2IqnOZWQNLylr%1R3bB)H_bv}#o^Qp`n=HZz=Vb6k~Bb{T%8U-(C_ z;GHmTFcN>~R%qfh)3Yf{OHb1-|5UD0E_2w%TY2;&_j{XEi_Sw3rr3ZSy&k=cMZy?D z?ylOr+VT(79|Vd*AFe9d%4|xA3tJ>TI_!TOXXLdT1m-C?{8;g7+r208V}DYAvb+Cr zC4;VwSc^`BxQISRB-qE}<RD1OKCpPEBB9?SDp6vbYMj0vn%FcUSUfEqC;cYYs$XxD zX49_UuD_TLk&cp1UhzQjI7?Nr={w{1j|v|Z21Z9li$-TMd9sB#XW#E;?`F?tuQnKg zJV7k=KkFOKWPfdezUv&<x7vq+1awNYH9-2c(%@V$?Mw@}<p=hUCZ%Mh^1K;~p6avu z-}R*pZ>zWG5Em=!?dtuEEldb48u}`Gj+5Jx{hIyao`jGvBIYs6NkOFkE_Kd$A2dI# zWR2w<i}>|jrtPy^Xpdu!&v9+m;|??STIH%`|CO;Iv}ke(xrmI3k`EqcOBZI#ChlJz zY}=A^y>ilD_ny4U&92SvKKi*>b<BHgbsVvjKf;~Qn5V<#@~3A|VohaxLIf>8mBVJW z!e3cJImiOCOU-V|o~Q+$t!^msD7!H}Ar!tAcFx}v-W23pdB37#IKtQ2FxW7x+~bgE z7`7@AK>hON#rtIf_z_48V*wWxBo?F#`*7>+OW6@G@?p{J`q%uCSZqO)7`|9SFgSR- z3ruM_`0p#2@@6+<EOE>VGwief-pn5);~nFe9)EQDu!u0NaFKY&NbPqMoasCs6H5{< ztCIJUX_7117M#igRjhJ6Ou}Vs)`AOs&D_l*{cPqsBh%Ws+OoFtBm!(qmAv-0?W>PR z7ZDq|8)%z8gc<CE`i@?OW8IfwKL|?Ma9BR1i7G@Y@u!@MVKMzAh^0Np^`MPM_39?= zwxD94;GKw^lh9)#Q#${|r0AXWFR_)!i>8mOgk`%al)m(9s{)3?a`uNjf-H9myZ1sL z+Bid!62Cf$mr*Jv*IOJ|?3lX`SD1zUdhWB2X<#QyMfz=1`?Uf=hZVJ6{QI6dh+&oq z>6e9>mU+i$)Q~`0c^>oV(Mavk;#a<$ll+$>oNk=;r23L@c`a5_?VYv?Yk^;aPF{<s zoA?OK;hKmQf{oGjOm@@C<wsiSmHusX-ikIs23<qJT@V<XLo^N4?J&Q?rP(8WWo>qy zRfzF@crLLpepGZN-XdW-e!v{VlIJ#Ygu_rr=2A*sX?btcmvQq+^ZlI_);wLzw6gS_ zbWD4U`Gq=+Rn5Ait81x6_ViJP#g>qIiKgNX!NyjzAHT;&KZ>Y-Q@>QdSLZ#RT!t9W z-r7$b6Z^DYbN`!O)NQ?a68_!3r~#v)IBh;{_8|LEdm~aARknYd_F$(ER<d(C8i1RG zdqSedte<U~nkJnTQddowVLp_>93XFh&OPy9#o)!zh|B5Upmvn>+S<QCS-l~{_^{v} z>r=6g^q1V7)Pj`VT0HAKOFCOE>p|B<w^?~acw**Y#rsiak^D^#x1f%f+=cpYtA+jG zzsVNo<FUD^xqkj^cS}Z#MfE<rremwtZyZjVv0T?DrCwroKem1x(>rf;J^!`1jjPqD zl~wh@(C)zXK=3*Fukt`kPD@s0lb%h}v3DE9$NXlWIFD~^`LfOHjNoNvI!{1ox$VN+ z;im8AYL#Hw-<ketY`A6KgZ>!Ys@!ULDS9L}FR>gkEu#CpG<UKTVBP6aa51qYbAuQb zGX9)+mGDLaAt5tiI2<GVFppnYKwv|}`Dy?0hs5}oak@Oh=c4D~N<sp5|J&)q*|CX? ziNf^r^yCgZ-;$?;&cnA=i~ZgGWbMB_xi}3jH6M<;JeE92Pl{LHC~x^v1Tef<-ql>G z{rT~b{5CoH1s*Qr;?b0gbrGsJDNH}9DguBvEdT_D0KnY~^nV`!+&BQ>zz6_7WB>r6 zLy}>iGywcFl$8`y_gwh*<dO4b)@v2zCC_CHLt|P%p_j%8F(j5U1D*~YMK$;vZ4^E& zC_Xg!$?FJWsCEb`DWOGk)>f;3Y_Fa*2&mB4O%bX35|hOEC&^5;sJBoyN{mXtNV0zf zNLCv_y;*U|yGd|40UzWkX-qHw#Sk>~&-%Mp*6g+^&~YJYVvZb4@%pVIP04{3!-9u? zu>=3-QZTaU|6CA*FZl1CU<%mJ|J@;m1;g+^c98(ytBDwvB!K!qR#X7O|NCM7{~GuI z!Swz=&G-Moxc~RwTZhCZs#Qa7Z+~#Wt`P-p0+>4;t8dnF$$jDJ(>!0KU0^#UfIL`^ z)R!B)z+^yaTO^ob310X%G6(L}&+YGeSMdVZ%?yO|VyZ@W3LjS=2%q?XN7%rD?I9Fs z5W26$^*VK9j0F(>i%2BkYsc9(dVQ0k_x``gz%X16{KhvRZbEseUGRwhp9o?Hb|X6f z<2ld$KW!A9oU@NkP@2B{cLDbEUIOF)9uN;ko5LCR+M?t{kTqTYe}(_a#W`&DxC7<E z#WrkK>Gw9y{{>5h@=Er_enOQ0+raO<OGZ-(_U`tFqhqqiet{nT|C*ky;9uQOU%{7t zKekj~UkK_-V?X{T#cQ?y0ivy1Y)-Hi4-!mk%FA;(K$fgV)jISR=9D3D^Hk^Gu-Ujs zDto;W;EA(XhqyZ+;?|QN&-&qcUF)z0?dhURW{U(GzIq&b7{R&`n}I+2=Y3~p{)Ws0 znx03!ba}~}fN+ac<@m0*VEQ3K)#<{=vjxR50nD`?V5Ot~W;OrC7rC=)3+>xLjUVe` z!uCVJnuhB?8^2?b%$Suc6YIC@twak&yT$nky;%cYZ-kxI2E>d>u?SCROiQM3Kcz1o zkl?*3cvxxgaTW+=9qZD&^sh%dYrrE9Zb%ae%2so2BUf=`B6LPFFdZ;B^{+7Wy)=D) zj6wy3ff)dwOcKre6N5xHif+v{&I()3ldz6lhl@F0{%3mUbsr<rgr{C!f$NgvFmN5| zYnHl>{&rg!tD)8Wbw~>+|2D(1e@`CL;B6NQ*%4(6C0i~U5QZghxoO}tTD);k!@ga2 zd&fndBqI+swUugqo06W@y3!%GN{gJ$`Yc@6waSUU))2({cK4Fz-o>M8d#)iES#V`r zSfu_p)p?^}^lPMq1e%71I>=!fCs$kUDsi1NL$iBvg`zutR6ECwruNQgg3$fYmvu|O zUu>R8!ILdX-$;wVI>PJDZZIPg2Y-Qa;1s?^{(e6=azHY2Y-l`vzg7OP?x~y3f0nUH z-r)egL$hIb*SW^kB+ABJaCN3wdpS%n$6=S>-oGhDW|qPK$A!hCsXWUJW>GGu-^;sr zzjBndR8NN0*<_&=-9@20iGDFL__gxDePN{HO`-OBee&ml?KH1x7p#^0hIc<Men0l2 zo(Lqq#BNbp@pv3O-3eW<XL~;OwO97jUpxsyx@#Y59(QXVb1<u%|B)MPHm#!i61C~T ziaauTN;i`sm0+&f5Iey*C@NJ}ck7pz7?r?08Rb){Y6f(h*JgcY>>cN<5Rx=z3efbo z#yELeY;58*OsHDF4d4;Ug9zu74<}f8W2_4OQanzU@tK?5)b3EQehuZ4di>2@GlebW z!Hb7^dH4KxK$(nF69M*ZO}6VJQcd$=%dC<J{VWA+M2#OyU>i+{uQnMcl)9@m_~&=O z)GS!n8^U;svn5tX3APU%{+I{=UT~WtK~Zpx0&W|^t>K#|GQBx^Jp%rC*$xPT^<uj= zXP$S@iYp?o4`&&ka%T5^R4d2qw#h`EJ<r2#LhmM6Bhq~1=ZSupTySPwp||y@<uJLi zTcZdCW3}`5Q|}a={j}8nf^o1T7}K?8(9bsYkk#}Xw1~{TgLT9xAA_L#_Snpg)!<iP z1Xt_$dZx~bG{hI#TE7)LEe9~St8$xBHXJ;Y<6q8%!}iQCYJ`uoA+0B-=eMufFuL=F zJYT>3<K_feLx3DxLUmMyd%ke{*s2GtaORddS_g#e#XCBMUQ1^U%oAi=>uHke<OuQ8 zm(>$NKykx{)~m(HO=fMBnR^4VIk^o7+QV6C#YyrN*lq{b@qO-@Rk^EPL{<{MV8)7n z-~DVcV5?^@D3GBK##rA%t%`FM;LkTOPx7=(wTru~b_lLsfpw%6t`}SNLDlV<^z+4s zX~o{Sk<6d{!qvBGEpA5}<bgFjkminhXyt{D0A<_nXI(Ph@i2nzBZ2-!NQd1|<>;-! z)o)=fY4cJxSHJe{%Gs|)@Sfc!fQ=J<afa!uDpDX%x9<oE=zW&{3(2KI1M_&uaAZCG zI{2+J_^-7AG}dopjkcYomDi`q6PmL+`D>u_DH?wQvCk}E>__1n_}FIp96}w|;Q8^j zn9qGpz4g{cQ>x(jNxmBTgcBNvB|>kwxohMNhj98^xM~#YbbNx5H|zahzRGA}rRRsz zG{5?ub*PICeof6%_g@-LAX3`=ikQG?x1u?u?|0N}rvSfWGW@Ca;!5;p4=!`-^)1s& z+sx5_B(BCkzrFUbhZErAoVlv?u+){!eTLi(lIkzjx;rC3RQqQ44G^qH7@vLRVwJjO z$bc5s%n!;EL#QU{CNL@+{%zuk4})BHnC<553wI-r#VZH2FVG((X5W%1T{SuIg{Wz_ z(~LL{h~L!U*Pk^Cy1x=q3rc5+<kBS$^Bt}qswiU=g)KhJC5W)|2k-5J@=c9Hw$r2h zS&c^TvKT-PGPd=BRyGx^dUR=}uC(o~_W>gHy{lyU8xHg{w+-uh@Oj$XA2k<#WRGqx zx-NE~FLiX=<m19LuEU<<rFo>1%@x6(O0wy_VW}Ngt~i~ipJ>y#>Lh5fXeKKcelCTy zorEL|@-skPkILeH6>qe^pr_16y_WWlf?S^lkg1;+xbuSQuhXoJUexi!Dwd0d2OrNd zWg{0G@*#c(+jkqVE6q82n-B3G0-||)Cd6&W$<Ts7x+d#NUUn|<X`k@Fgx4-19<<&# zx<rLrP=$rokkJD^S}o~0*g?O>vt1)=;{5akx4TUGEq5Gf8tBH+YW*UAnF=OqlS$V> zsHzh;h#os4NsiK*>&{70t6twV`k23I55H{HdasL$8jRejH9;Yggw_?J{Q>K)mx+0+ zWTBhXu+=Zq6G5y|HumytUQOGl=+A)thClRf(LxI{{hgC?ux0)~6W!qIX@0sNMm_Rh zNfvizZ=>A&^Os_}%Q1h$t}NvA4!yM;NWWbKX|~fln)c5*3TNc%nFZ8S(KHO%L}Lpe z@JGfe>dhVR-paBV;(TAzIy*qM+4m-ST%$gxXiLLJTbnVr#$WgF%?xs2g?01}I})DS zeufHFTb{hV3%6GuvlW1eOb9?7sBwL0z_nSrRz2}?4ZD#i#1g}*N2Q-V%}W5EE~wco z^~(xOzhb8x!+9Vb+scNt8jAEczeO2rvGYLd5YwvdKEts=#DEvMMUgg)G3B$o?Rz+p zn)p@fSBg+Hg<nn&&^h!WPyWkndxqkF%hP_lh>qQ=%G|EDxF;xFGa`OxdLH?jOGo@D zB!=dJ!V`V<%B;0XFOCVgNffPF@PFL3;a4i`l<m6DNDT)b_FQbR!uWhd5TF76V;*Kt zF$^Bd|98%u_s?We%~>i`@eAbPXqpXBUh3U6v|C)X<GiiWc-DQ@<+@1_Izz$fkWU{c z`h27S)GB<KIt_lPgO=fqoY(^JCvUW%x7p*)e3;AIGhU?UH4=e0<~n}ZtO|0ePWt?| zzaKwDcxJ%g&J26*u8JZONKrd2TmMZa%oPS{P{0Wt{esGD0lS)@6(F`ZO<+k(8?3cp z&zFi=p9KgmZ;I=@&Versf?3~&X-hxj1s%K={!cL#Fq<2q-Q?4+iS=3e>NHbrZ`6)$ zGY`s2jaCZab)o!!rVq-MoBqh%=BNb&&{QQK%}+?2{R;Tkjr)Pv<Lx@Nxgjw50(1$b zuQr*m)%jv~G@8oXui|KQ?YG8pTST>!lOy%1ea}sgZUR}G?5<Hs-|{J9<l396zri(z z_442WY%hgZGM097j>9$Uz_sgmpg<<3h1J?P!+2a-$K*U;JiXeKuAe)r`T+>Wr!IFW zi@mpejX|{;e;a1VIf_7BH^Fw4hQSNg%qqqWf0}*FZNo+1pEE^*z;Ye2gsM%as@{Pu zcf3~y+i`Nn?Olu#z7fOXJ%2W2ReLhk78zbL1^oTPX5ScHEENR4f$?(2jeqIUZX#@a zU4B6kOULXAw_k^KIm}p*qXW%j@y7oO_>HOGf{zg5n%2y1I~Xbe?ggJsZEoWYQ=LR# z9iBZd$5w!Qcu7kCihvYc?Pb(k%1evF`_p%QtMoNZ1f3>9*X(?Iw+Y+39*}P_1AJ$m zZ|sYGE(!$mUV%?7&@{5@WA!o<0|+vvi#Gli44<x@5D7gty~NzPd4BQ0I1!2)ZFqJ= zt%i`iB<n{e4a_h+`@>{sKh`Wf=Pzuzbg0U=!<}2AF5*-FFw(u)B3Pao%^=~6QJZV7 z`J7;Uq5CbjbB6{ycc|*ZTKvc#$Pa5E@@H9XP?JZF-8?PPhpO$9{IOLLx8%wrb$`DA zpVXT+5s`ZOkMRMerZ0~El`~ZSd2=Q=ccs~<ev4vzZbF#;k7{lC$!~<II18bfHM&NV zhWW?9VdDC?8C`F(?j!UARgt^()xhH)#rqZ9>`Ni#&K8zg=bSgJ-sXA1$|-wpQ~|bV zf=J5U0~=uX$DTVM;VDW3Ww6RA>yCM}fmpwoF&sAG>9tWQjOTqwLd8R<Yf;PzVQ6-j z=^i-X>d7y%gS=;^=Br5f@y8eR8>mCjah@q(DS?$9P`2&7VSy;_!&2GukcBmb+HwB{ zR-(Wb`+HLG*Hq8KbPZY1<ifLOlLvR_FBO~!w1uA#gl4x<c%uso7#Dk@3Tqzs5(quZ z)OedaRu$ct$8;pxxr@XPQZqu$c$0A#ZCju^L=bb$ZEuveH3_&!xYh0fx8L4zw1%Bu zey}@nY1(_5QxvW=UHm63NS9FbDghV>lqG+N+zy7Db?0htw;&jo3lR^vP);T2)?xW0 z)imjBAD*?6g*Gf)F~N%<tp$vY7Ym*QpS}yq&>8FIUE9nT-wnG@hpt`8$6nf3Vu8k$ zv(=93Q98+W$Y__|Ajx<@fF(kg$NLw7pd)?6(qz-q<MqwE6Zz@ek8OL6%D?R{7Pg=@ zQQ#HoxoF~b3m<{gchA>l{KR~BjnOtWtYdb_6x~UhPqgEv%r9O%OZ@LdV~K}AtTz<^ zpbKCC*O0TE*0laOt-g!a47ul6!r4*SjKzYJ_kcC&%MmcL`?3;f8F>^l1+(O>-tecL zo7brheb!OLe&-qfZd`LNJvGv0;zzaZCnR<cUncUYhH@<KJ3omgWW9|>!Wa?*mUjXo zNTaMppP6(|1s$&2+81gYGQZu86PWa{hk>L8&|V3j=&^n%@XwxK>N3v)`Nt|(y;1u& zyvVTHhif@U#sQusHWR(0_=;i?z=7LWEz(_Kgs-;6PUW`~huqI9{*Uf9f-lS3yPjdY zU$s2Pv%ulmepQEIn?@pOa-eOJis(ge*lIzJHkh08V^f7!>B{G!u;*6b<JKHfhuN8P zO$G3YZ&junC7g?az?=L97e{8$H#4A+vcdJ&Z<3C=u&QBYDXOx*VPy|!Z6oohVmoJz z8_Ey4N3`{rsFgB-!Gk(~zDDKR!Kwrc{xj+yP>%rG?ozqfy3F0UwB4f7VShiu+#FU^ zciE>VWY@(Tfeo#R+7UmN=KH&UGlr`}z6{VV!*s3YFqub_;)+~|P}LDhg`bNPNl0d4 zO1KN=7;ScK`J(b8Yo0n&lbJCyqxs*q+f9R2wZ=}6?j{M#)#C-7--#wp&@#!5bLHxG zzpB9o&%)TIR289~Lst`&2X8^)4ZnFGmJ3ru?L8jK-F%!zMkuJTu$z^&7vJwP&cUC} zGQyfxboi9!JC)7kQb3EZ6%V#&vWd_`y#68`l}m9b<ISnyg*%?TH7Oxue*$MK0wDku zGqZ??wocmnlyv6~bJpdL&!yAW6jWa_5xA(4VS!j0+4@bP!s_cS3WLj9&yTq;m2~|0 z_U#A?#VoQl--$S8o!FbC-oP&3K145~PK+h3Z0!c9(Hp~hGT+I1Z9l|6h%8;Ze>jN& z%e5!)MY<w5fb$IpoXlHLj9%BE(esKV7N)j&8l^JKl5cb=nZW+K#sM=y8gg4HR6*-t z_i`Gi&-g~Q;ZY789pnya$Ws8KeNIXmzSR6X`kwAw1)Ih(vG(QB$f&JRzh`-qz@lsl z!F1}b9kXxckHUuQcOCm^i$r|tpR`Y7Uj=xfMObYZ!LuJ37B(W%ljn*~!IUnH1Qs?3 zJX5yuCm^k1i0fTNm(a=({U{_7@?oLIzg&?5+diIH-E=;qqmL7$Pv|xVjMO2}Rb6^o z22xWU{3dPpi{7%Azu8SAPvA9`v3yE$^=f)ZrNP#QFF0jV@v|;0F;qE5_^xy)=kP|5 z>qc;&5z=arw0yAm<<uKP{acEv<dhR#8Y<3-lFf~$0W20CYvF8+kn<QMqiJ!HmOxa3 zQA0&;fBSk=fDlJT*-Rz6ahPnE%6W`27<8uTIz~Gpgr<&Wq{PUxc9T4OIMuW|QjsYj z`sQj4)#g%Dk`c0X^?O`g<mO*<ED~|qk4VvP1hGMA(j9IJWCp`?kcASHp@IGL)_Z`= zJaGQ)rC~E8Rnbou^kYGUv8HSY79KR&h&lJTV8XdmRM!NNLe9HNv?jTatR^kY8K^8x zft~ueh{t%4!E&R7ByxzOV$m0=n%^YW;JBIQoYn<Q&V$nLM(nhf8S_M@bu*}IN-cyz zzh5X7)xsMduPFW)WeU(z*(rPm3B^S9y$pZ)Yg>!-68K3YxU<0T{DN8ZNOl^OUD4yO z1Gs<=gX$^Pl$J5gHF;|(y;+b)MszFT6WJ5LrL{6fTf$ONC_enf4+B=@20ErL9Afu9 z2Y)knx-~D>R=oVmk}mblF{qG_O5%=Mmmv2nF*Vrd8Hlf&{FaJX>@srkl5dt7^d;=I zFLu_)YhGgpC&x@=dj7j3-=zG`!!pFY9L1)EK$bB@HHeea1G&?Lf~tX6Wu9>%Eh{n# zFPI_}GA|cGWd;5X-(R&d{C8tDpJq9q7~DeGH`dfiR2(<s*vFZAfbKX0^OSBQo1tR` z?tbr%gXVxRKoXdUqcRi66A|g1d&|m2FNudB2AFG+IC~j>$+?;y_Dn>s9<dGS+*5+l z&Ot&HV=jk+)ms~6|G|lbeK5(;)tn&G$mRjpUKrcvFy}p$$O<bDZ&5WYSI~?s@ZRNN z{>YTLpNIi`zFV;Q4%;Yqh8d+5qHPSBK~`96lkhDD>Sl1bV#uLrttLeYUJDn?&n%3S z#zHjGLjQ`svw}c@eHT>r5Vgt(&K=WgYRWCoEpA1W?*%Q{Nvacs8(96B0#PHMUx@29 zhi0tz*`<eg&$<9y-5ly-SS+qjpPkH!F2G*$lJgszj$^DoWN8_<nVDRONGe2$E|qpD zh(Q^Jso%MW=LBXUZd!~8yCfBmW#1WWm6*(V5b=Nt{7Jkk1^AC8cP@mNmP%9Z%GMZE zM`R7F#}h<JC4!Pxl@vU!X{JNKSmLe8C7ZP5>R}1ilpum9#c>cg+CBM2M&K+TFQk(O z9<IL^v%xThty_LNg1gax{Ye5hTh8C@t><7Kjsmx*2Lv+)2n!e{tFEK$LH$-6-=jU? zw6&^>?n+9<K^XWx5!xoMCsx7hvUD-c;Nyx#!9rXQ{ua^wG|Oy^bx9!7qp&1^>lWL? z95orwpUR{BXji`L%xoXWf$k8yYJ5U)=+056voLKjC!kiUp+OYtU%;*uYQh00n^f&m zS))DZO6~mt-qakdn4+p;q;L#tJs^qAICs}H2wD_RpRYD+6uZ%x9~l9&4F92mcCoYg z<0ou+jcZwq&1dCf3y1Wr<a1(J6#rJ>Xu;xJRv%S|!g44D6@Mxb0@X(Qunqsprh|<L z5C2@+TkhXM`20MlYXy7o_f(B##Qr<L-A{oYB6#djNSzvq6>5BEVJ+fxNCPyj#)%^J zC#)|$6NiXyE$Y+B;&8asFQv0OoFU}6&>_Q;!WSAgrjOeSqhe8xP8twgK^b=49A|*D zn<LcJqbIOG-ni~eoSqM+a$spHfK0l*{V2ziBqW_^5gC4<^6<A5qdwUM4jfe-uL04= zbgfUrV7L)WZjGDdThw5eOutAdi0rVls`^j{b0l~TBRKon=$$Jdd^yS68|`&73KTYA zsS?$*0X=@b3nQ<;Q!t%x6A!!z_@pHm#k0)YdL!yVU`;ttm{nO3jqK!-(9%Wj0c$6p z!2`=MNb;KmF2f8dV$Bk4MM^j1aFz#q-k{^gyh%bvMuwB0ztQ&5T1E2b-y<Zf*!O;D znpEOOu>8CBLuW{0feg`~wPVs3M94q3GK?Ad;Tf$i8k@uSi<VQ-r7do{l9AiQMrC^a z<`*r&>*mmQwxx&tHFCg#{yRd~F~U+tV27qO$mM?&2XPtXT@gdD3#NILHF;VNIZ4l- z7K{u0?NQz<H5n}T^~g=yrL3Gc_Bv@r)7Gqv_UGtIbW{yfosF#s9HMyAj$>@Dvgzgf zY!zPUl1@{pw>2}WMAH5yCR+a4RKfLcm36XN8p^cfC}op~;R^`wha)Xd_{KIE-p?0} zV`G<1GabZ9A0r-X0zV%!^ptN1umxawc6WCRQ>?G4AB!ySpxUi=OkhUtL3?tNEG+_) zsCeX`t%9Tw{t7LXq;VvTA|ESba3lw>aQs;f=Qpe7BHEw6*I##+_zgI}*XyE@AZN1y zaJVT_>sm}sIN@R+XDx%6jssYULyZmPjXONGNN0xi3cA=8G6LmFiqdehq#8f9DD1_V z>O(;5{FN!2?=IqQB=B@1(O$_Z6Sfj0g(rpF^GDZw<`!To`C|?FTs2!5S&;VjGKzsP zkkgjU6%}T#9Dlqe;X(U6jd`(~^r*pXS+$ajoN#BdWI1M}BBWD2XEO~l!|I>lLCIzZ zgAN<VfN9L78~sNdKnyze<{@E`>(q$@l>{?HU)bz^$kBvXS}S6(X3PJr@OjAaqUb^v z0+MR%mfXszHOAw0GeT6)i&7*thwjn*vE(hCu&iLB(!?=pGmqN6aU0)IW(<RZrBq!L z&rmjtU-gd@ZMa*dA6aBUg_NC<s7;A?dmCh?(fjBfXmlq$fgEHLn~-3-JC^$?=}X^X zN5RPFOsk`U(R<|1ZUlqIu9mx{y*&n^*sh?i${td4b93j0;~|}D6}+OOM}19pH@^|! zYn`_PO%HmnF*;MNivZuqF6FxsBUnU4#I#sWTB>hW(RcTc!N2&9!py(Z(bH={Kz2To z1R5kj;D}BQ0A)Dd5V^jpe*2CmcLfCnqmz|3e(wR&PoPmu8})(Y1?;JjQ~TB3JRh=- zhn9}o^RiVKF(a%#><UPG-6t}enTQCCF=ypm{*1TZkmXb&2rglM>$q>OeNPc@Gmt4Z zFgz!UVjv?YpS`$n<Kg3zkt?NLqOMEPHZn!;W(c3=&BuCbqTJEbYpRSdhkDYB3Nlmn z^l<HUXh-%{_RdV{FS?F7CogY%*;?uBVWaOIPB2AhUYn1mTk^-<pVM+2+}!Z)m35I= zxUNQ6ipoe=-a=~7deIIVdum>X)6csT5b5}J2Bkvv#2FPl#$CMu>K$A~L~EXJe%dv@ zRKa4ux~^a#oO4a4NcQtBgrnxT!inbiYHICkOnJfs+I%p`KxzT39e1UETmAP7^-|5x z<uj+@eC;q}0<Cw74(-Mh{iKs_XBowDUG&0dhK@TURvhdOXE!k+jj>)Ac~}PNjv3O$ zLFKcRSFL+BGiCZM?kZrM-EqZswdXFDVfQ}c&<jGgpER<bPM(qzs4n~ZYYgaqzTnY@ z6L9ntB`?e{feG-sPT?>n+HkA#Aq@`?|4M^$aP=W;lx}Bd=PMnU2c@&AN#Ngn8`8@~ z@e7ym-4^{5s%O*>L!B@RbZkk=ItXdaM4OfvE!D{EuFtPa4z6wnNfM3qxzxfrbP8Rn zGjYZ+?%$$!F9Z%YuC}32h$Na3c0-4Zk)johto|a4468yU9a)T=Ic8t|8Dyi+rvsL{ z{s&qeA92Eh{}4?zM@1JgZ!z`$k2OzC7CtnEYHViNs!d16$Ev&)Gf9gE$r}>zi{DfB z5{2-`D?&g#pu=yoK0TnA{r!E#BbLvRY_;M13MJ~+v6!%?1Qi5Bp+pR=t_LOU2Zadz z1Iza6n$<J!d~S~W+MgaKta-8fojhhyq&D!WIl7vUsDsw(bSH3hs-e$Z@_6yH<ju~= z&ySdScX4r{k0OeAy7xfdck(zE(3i<&k;dwKWV+RjP!n*({d48BT;aU!#$<`SknYGu z4K-$PXRnGn+uA~p>qlK>#$eU5?<rY_u_|VWv5Y1_x+_dMXw(O3C`?BMC41NzK)yJ+ zF)RA^E*9E0lJHzyTtPIKE`QSigIzdpZQ|;RCvqtv5~}<>tIQ^V%vgej0JFiN$I;00 zDd69FOD#(X)pRz1E)lBoHJy!tS{o~2*|LknOCV-Aoqg5OcTAwxbU>+0lbMK=R7G}j za@3sbunyL>K2Epp;JY<Ml}-`wj5qACuj>0O+g>-vzXLt~T~`t<tT0YJnWE^)&?$2x zgT<6qii@P`GIK_jY88?$GfYxMZA<WHu;zLW^>i^>ouiDRva-X%g`_0E;~F3>Ej_d4 zeF;Hh6%A#GZq=<|h!GE*L6rRR$5ds{L=0=7CO~O+9$!I{-*pe``eZdhvpmcad}eVJ zn|>}r+PZDo24CQUSqxX)_%iooBewt=1+@_Dm|L8Mh@6JpK8f7I<$Q2sV!xSWq<9Om zk~E&GaXjCMc)$ys`9NfPj}r)B!5g#vsaRz<=eH=V`(1?}lG44lMv+8QI9BuB6=rwC zYl1%__oIhN0WUo6-mjdb;e3ywO&G?8@9no6@~2LXlm4&ug0kX=R3|7VC<vzY<>_SL z<Z0z(nF9;z{!r{9{%}ZULc<{!5FTmtcLl)+Pb#uVP^r9@XBnr2A!UY$h@`ht|6@8% zU@EjQ!J2Xi2t-L27w+!tFd)MoFU?Y*r`5%Vi-qz>CpL{JKa;lLAR2285Dui;BT#hn zixc6`&#NChWPDputej=*o;et$2c&JFoNTjD?kBCn{$A3kyR!X3`cNzK>EX@VHdH|k zUAPXjHc+5bkBrZ@ICT|+NJVMm+dfmC+#_Kte4XfA6NPtBJZ8rAI=G)|M(g}|(u&*g zuLWTS1TFi0J?X13q~JiJ_HTc^`+yIJSVXlZxkGUU6P9cGC*Fj@FL&dcVT1<SSjwX# zX3kh1G}^!(GvepOlNBxwe&lJHk)Mz>rqrUOkOoI{*=Tbv2_o-d-X8WP_v59obVK2u zEAKYJ@FJoI)!ju<c|?SarI8~rW=5fE$^Gt=t|EGTT$hd(NF2gR!E_&7I~9Trr6@u% zopR0BfWzGukNeMfynHUp*=t>kHUjH>ekz!)Nf=D0P-&Kdfs#qjpl<umHo1-os{QiK zkGg%nVD}J!gzTL-7<7@VRM&s{r&@NB8$F}|GWVe&1&A!df<jn31oN+`y%+az^K`n& zmoJUwwsPjuw3QU7Aqe{LDVmnFtl8hK+OnA?ZAdD?E}3rb?W%D$W@sGt>;%%%;VPxQ z@`%Y*%kMW>aoF1~H<FHTuC_XZ;C^bBlP2GT^iMIxh;GAF%qL2ba=3^{h|~{j0;c7l zr9iFG^K7G;<m71}emzas{w!GE!^57DFtEL^KpEDh>Ci!_H_HWc8Wg&oxUQH0V`lzE zCme~~7fS_iecmEp0<5Xa0Br8{52m-n7Z~zuFsJ$>P%t^g^2ZzHlDF*EqF-Ej5t(vu zZ~*D))}<Oqj>k(n$!3{<K`u_d{Y0_x@hjCw+=|5@NZIBRP>>=%Dfh>^-iXT(XNc1W z<|jtkbeXaF!LH|Pr(My=(Gly!ch|}HEXGhg%?#Sm0>$vhe~vQ!!fP`?$Y$qwXi{?0 zuv(75QCX*--%7#eRES{aZT)Vx%5XePvL#L|%?z@hh>gDmX-i26qsAr5%FAmPV?m6$ zM<Sd_Zmb4ahZK(c5k`#Arx0iG0%p9(Hslb*jH-Xq!AZ*u++sL*QhT^q&sxKL0YJ>W zbb+ehZP9e6I%{XT8UA`a8j$pRUSzMt{%Ai_H`M83u5nlu?sZy9o~xeu#rZB(E|#S> zm$qiTLJ9)XPbb9;2I8bm_2X|w9sIejkC(G=+_uSJ`4`T5_4)&0j2r!7Igq=v)8Myq zJO)+*UY?MHvBpJS1g#+;g9|n4_~Q3FVE#vc@#V<Joo<f3VKZyH9m2kvn`nj-qgr(M zf_ZDI_{~XYtGceiLCbHD8qmX<*{-kN$?54IjM<uL>r!iQGz02-&WSHKmyqf1;RSDW z5l8f<FT5!cDFr<(Bs7!Rs!oF}QDV5P9Wshi@}`^^q=X)Le&xC)&g^dwc%-(Ok<4 zLP1;M$tfsI8Jb_&hd)0h(84B!P;_2Sac6<eTOw`PlAr}w5e&KtGjzd+t`b!orb3vt zDz(9G&2y-8P31EmBvo>BrH_i9fFgz>2&x{Uk9^UwH1I*42^-dKE!w2w4qF<VgP;G8 zhIHP62_5rB;0L*Q{3B5#aG2)1Z}%)068>W6+f}|zwxbOOmf)Iz7k`Jhzr*@hAHtNM zxC0X^opAH-=*hiq{ZxnwaWuXj;F)23k}8=d0iN$)uCoI$It}4Y?;mRo5l)9+uG9Uu z(r520{w+1(j>M)L`Zw*G`VZ@_1cxBKx&G_ZRD9yJj__TOk>Q^q@T<Wfo1&3%ql#kq zJ$z7Ct_N8dC*lvKwop0y!kFSly-U?R<Hd1fTx>k6*tqx`NT<`73Pf|5wFXn}F05r{ zX!`J~0$OFP(t-!sC;R)QtsET#qb;H%q4MXu#dkt&s$7@3TAw$FNJxbcSS(TIIBt2n zBpRqx$0+8%J|YzRBW>*Y1zwCu{J%gECw*t6qoZ>?X}j6D+s*44St8lsm(J1s5Y7AP zi9aay+=*ta2|>tqmVd5B6ADH%ly%4_AY9B!WAj%SX>u*wQj14b!(?H#Wr{r(RLEK! zTzM}DL`tbN7LX{UvHk+wZ-L)2`y-%X8=SxqqPK6aYQk*@0^0=>n3mF-1gM7Jb7w0y zvXxiQv9Z%Kiqlrs-|!J4O7TTpZLCL-_osI}ni*C(=hCGXWy^}Zt(Q%r0a<C3s>jN@ z-3dAxP`kV;ihJCS#|L1gZLhcr>Gb5k@Q9q}zdRZGjDsp&DCvCg108%G79DqUJ?__@ zgew(WDuHxZtbd;`BaU<)I2UHlSwDXf9##!Cj--~s>>-M)wHUwW<ftsLmDEA)TnWpr z@*y(%;`)spW-wlb_~+dh5)QmO;X^T^=F<JlG~N$WL1$4El5;htNNoDey>ZfTl1$^$ z_Qvk^1kF7-nP!;+-VZA8h)6<fF+sTRt`Myu@8XyIL){97Z48k+t-%LjU}RA!O<jMR zwl+2~ft3s;H1JJ?aIPTaSbR!b7QL_T{F)V9OR(o$P(2fzB3_~zHu}r?{Q;g+pAo2+ z&09s<jCXab_X{^ae+oHVdWgUpnAIxl;77hcNP{WWxt>K&?8tQRa}<*uB`B-%F;uf^ zRu`;kGYacyWCToGm&Bkf=o)@#`z#r%$t;#cgNAqxd27_%k|oF3n<^($-U>Yzpc3dV z<hi-hcDq5?q1{~H4B27nlXxQ(y1u@SAimk)f93E<6=?X+clAxc-V4*pDH)Kz?|Ve( zzkhMt^KyS<hlMCjte?f2`PB57_~z+wz~#(?v=d3>DJuUC9e`T-T`mK{m}|@bg>phU zV8g=SoOSm;P50W^+?-%s@WNGVcdgK)6|O3vhZw4-*GX>XgA*5;G`&bavwz-fm&$e- zi^#Bz5_e9~g@s%4J_K|0pF(VAu{2ETh70a-CuZ+xf=A!;XJ63+!;V-Tf$DOFsWg8+ zthM=EH+#3m*PNYAM(ctx*Sf=Ex~8V;xab@M6P%VHF0;X6LbW>F92^B@UQZ&X=+K2` z*NC97u)hR41!G*$0T9b8+$9Cwt*Q{=tNVBX9;suG`Q^!U!Z5$0g5-FnOYj1jw>5F~ zB|!pD&wxTzwCk;z=tJ@l3aUy|FV~np-?jIKQIv>xdcn9p-MfvQ-}@L7rKL&R*r|Xd zmYoJj@zRdkA9rKIe2L(R$jQ|tBqWT}%tpK4L;GDS<<mn3g=VvnjlnF#zU*`H&%H7U zWNyosWY_xq!L2_|-kpRX%xI@DJGdLrc$5Mygn>>|i5PNzEBM1Ga4~#s`--=<A`i7Z zIxtZ`SumWT*|9O0NNouLG33QrL!yxkZkpYq$`_%qHk-LeO`Z}?j5vNQ3|R<;?(Lm+ zjRzbM3af!N0U-ZnirshTDB<xD3FZ+dF#oxo{C<x;;90HXbi<n9*ZMl8q)MGR%uh)F z;_8_@Nx*<aMrNiMk@TU99RoYOqTQhy$qhXag$zv`-Ws6@OpXj9TThf^k}7U@0(#FV zWjuuQHzfR`#zaM`y+D!vbEU)i7}t|6^YD8H(;<r<qLBGJFRacGi4fPP1-F08Ee(2m zVPc_$g@x7gwhI&-QBV<Ljq%arSo^a#y`q{BKSv-1^6-86n7~IqzH|(9bm%E&f0!J0 z5I(lFv<xqcxfV2>fc#ADU(kTG4gb-y3fg9Jy1agISS>n1ytU3TCL7%bf_cY#)aD3c zCXSLoH6d+)*(uhV<iXpcWc&B5q0i2|MabRVojPNmR9hG6M|Zp$WxN3=Zcc$H7I|m8 z3Q@;x0kst=@rXC%ysP)u4U8l5-Fj`__{qu1W~*OpSgqlBB%RPrYbW2UUNZQfb|JN7 zQD$MVt2W=EyG47P&rg5D%Q+GQ+@n-crx~u>l%hegHb1H7o=lKDFDGQq{?(3~*xTDn zp;?);&Iz<W9XSl_4Kl1;w4HSM-7ITG3xRpQ|M+oM!tQ6K7#6NYjV=LCI$QL!Ntbxx z$?|!(3iejPOeJw!<l|XPzE{s#{xehS$6FaDr^lG`JclD(B}~!}q3H(RR``n8>qjS^ zAIZG7uwSRI!ej6wCXo=2?cZ?|gzJC{ZSLk^%(v>8j8z7mPO-TxP6to3+eSCX6;Hw7 zl%6AHhTrp);uj0+y^)EK94X=E-+%vX$AhCXIibCazlr?CA;7d80v!kU$B)BfO`0SF zDx4V5I_)#dhW_S_%C6o<ZLWsbKT}gvy>bjJMhzA_P7aQ*iV6x}RPZtxqOk@N9bWo{ zS-u!mhqDYz{@2fmmZNPK!_s8JSHHM+JenN5t4_B#RAD?_sB)T^jH@Zgw|l#-g(&3F z=s$FsK!#B88^I{cO`m-XtrN8<n$RHkBAydb1yAD_3q;P!2HXejKS_s2BzkOrPPOLY z=%@J8TxagdY|_FdZ3J8APItKx!;a`gLf<slzqR$n>gcq5$J!ub+>?1@<6@$3KZ;pp zb~mw+`ihz`P|k+mhEEVthB54CMXL0kg1C+Y2uyI?xQY4N19M6|F4}Wf`P4FPy`KJj z$G)!U;E&sW+sD3<X_3chx)=RCYr44!m9UY_sn^))33y_RE-Wvb4lpSlCy4%Bgn?Ct zJ6C<MNG%>G{Yb*6Fprb$Pm|GUTONX!n1c6v#ZVnj#bh(*-T?cRq2q66r=y=PfCiKC zU1$7;m8*7UL8DxwB${QLmP~v|Lh5Jj4+pk`4=d{aDIeg!=p;q{QKtTeFd)Rm6>{Q# z)53?BZ@_GoRmRtPhC%d>gaz!e058nUAMID@4bGA){aFp0Or`KIL$Y{ct!SZVX^F(Z z>rTNdc0`Gs-!V|ZsB<i0OhH-M)Y1|e4h}9OFK<kKT)mUcP_$f-rOzoq*68&xN>~)V z0SkZ+l__{y1t|tJV?T=x%MG{BaWv65*asbL2nFpDiuIZmo=&DV3#uT}kfd~$0y20b zTKks3kNu{m=uD{@xwR$b^?S~pBX|Qf9~_N3@_}dy`#Pk6p}!=ls;}LJn`Ivdc*l*f z_oklwRnzHJX`2k<>hNOe+nnAxZ@rJo^$fU0nyg9!$yfrH{aZX>2KwSA2s((X&mAD3 z+xh$_9cbj(BM+GmY891~OrXufM&ErLI*)&yT*@LLwN*J%#S@K`<($z}Bp)0B3j_Zq zheQ&YiS8XDDF)c7uE%ff$gmqjNd%4EM?Qz|tJv?BXsm+I&YYlmb|rnLRk|j0;?L*5 z2S?u77elB5R-c`Hw`jndwp}nMpw2Yij!*!>)G>d+4)muak@+m?n9Dr70ke<nro#e1 zVNA`kuvJfP#<W<*NpR5XPap`g`6e69AMaD?QJNCH$uOfr8xC24C9(|RK%e_yfy9iz z<Tjf-Wy{OS&7U!_i-Twl=jruq=5{rNj~X0kmu75aRG^KQ=u%G*jvZFW&P@&vQ>kn? zaCvoz-2ErPPi2a&I7Q@UnqQjPY8%2S1^?Pw?S$3V|DtkHL*zsv#++(VHW7?I`rf9> z<+GmA&Y?Dj>BKG}Q|kGZfy5JJM!0-#K2NVxrDUVlp|+LHxILH;RE(qbh|1l7Ze<rO z-0}fA*c!Ugm1d4sp~3eKK<?UONSWaGJHTTsY5XZ-d0vSW|JDibA+OPkO0sE`46)sy z_YyWLpB~Oe)vNlYAG2K!n@I)!xEk><VkWRjAv)1i@E1W(;T~jzj)}Rk0I{I}SF64; zHxGBSS2<U5kTfH)+AS6XRP14T-8zhPCs93wUT&_2Tia<iH*s(G^Y7k1{(aee>71HU zXKVGf`gYTP)8_f|u$ll}z!cyN5IZk7U1(oOev_j$K!V9g4GV_`N(C<+p{-P5#xkbm zdQK*0`JERFM|$R?-RPXZvW57(xAp{cDyp=Mj1NJePMS)Isu)RM_1Nlo5DL~nDhql~ z8iYWr$^e1uVx`Te^k*~{JWMx5Y~4&ninRtJVztG1UOlmnje2=%YjkkOEOA`8-}YmZ zEi}uf<x<6<DlhCqelY{;+0tx&v3xq4gD18J^gx15Qjv?8Sl0I@Aa<4`kWKH14g3Dr zUR#}dFU9>?5Rs{o0w7iPV5>2J>`dsKWp-pKgIG85Q@va`O__0ZWstMNjfjk_|EPgn z%&3(?&u-iWt;l4DDe%su`-a)%*iyEE<2h<RJ#jD1KwtFeF7AQ`>nK-KAFcCvMOhO0 zqolNj!|heCK!gO+8#Y_X)r7#`Vcm0cL`r#rO-0%yiw(_Y&L&0Ga+AM)xbkq$#ArXr zyzG&$@A@C_IzBbeCI&o@zj*n++ysa~H5*pdk42AZp9B?sBs3$HqVI+<+Ly}LEwk9A z4L`%M|H^sz{{Xu@;bs$%-wf`38h2x>WhsVAAcp95J<a2rt`H<>KRuG&Z(lwmE6W71 z+B@5ovw|i#b*wmQFu=vd<+(p4za4xKgk+#REeE+|A<F-f6#NxIEU>GqtCd^H0FhZl z4Z2;LL7^@u0EUFUp0t98A=1K<!cHj?l&@lql`|z{z2<hWH2sJxy1+I%wqO`z(|#pK z>FzwN=RqL4tBqZVqgC*?&gI0YP7JJi^<*8__2^3)rDz1!03BM|+LFjl4n5Qtkt|gj zv_#A4iGe}GTnoMySYU2Ua^a$}JRvl|b30Yb@etflq*<N{UhC$#%xsw&W2l&|%?nj( zz%|e-6=lwC`So}vS?Itz{RF?z(^;Tl|LII;3bnnU!tHSP*@;-2;2YL?+vyK_f6n%+ z8QmWKN{Z3R_>A|U3|D1Q(^P}@I5O`iUR~D5<&K-1)0>y))qw=RJx;;%!B<@wS?sxq zm=`}MlH$}8YYm?40Jhw)1J#j5*@mY+x42uqZ4O2#(fcrDSs%e~Eke{TOqsf^G-S`< z7cD_0(tNy7Q@gwAJ~JT-4rjpZs$V{eM4oGML5df-#CqPV%@5=JjzWQ49C<Eokg>!W zWnLZyg)-%^ssrf_8Wk5ecaH9<FJVe)snx$#547-za84nvxFP}@yaC5d);2&4%gEPu z1S|196#zXHOU!}Eo~0MXKv`6`>>WGgS&tyUgfCCX;+qIC*l~RPh)Zl5oS2x{u5X?T zTdi7JFmLPLcFv;{E(gU-{1ALn_r*_$bO{J%7cNm1^~#$Rsy?S8FiGEw87=hXT*NNZ z$U3e+-u;8N%~YlrzR95-lESG}RO>Q-@Vj@Flmv4t4*QM&LWeE|2)f3i2Akrl%rtu` ztV`^%Hp?Q!E0(rB*lD#j3<miWXW7yI5dPym1d+!#*-;+V5xGeiKgAX8h5Iz32&4Sr z#FB<#p&yLtFE<2VTh^$_ts6eZ1O$;LCw~S}#&%<nc@hv0wxTtHj>chsLd0t4nRNdT zqTVtr%I<p`9=c0v2qi_jm68SlX+%0jx~03j1W5%cL6DB2V`zk-r5gl98l>yp-2dNm zydHk?gEMnod#}CLS-a}AfrBZpari7|13DvAyOC!rDa6*9*A7FYz1)9c<L*%YLZ}ht zPYvcB9`Z-b$(9z)1Z03hUhBnP^8JioEe#nDO-xj8+2C+Q+IUOUNz3dLA7L5^2#!`G z0WiMIik>gvY*7=b8<c4coLI#MxlAXTUj}Cdu@9za7(R`6ORdjBfpsPR5RKh?&?xl@ z;q6fSZOo&<;0VrWdcZ_X`REP!&$L2HuY!9F@gM1?=04gwir3@#GgKV+3Z@q_g+4Ly zrf7Ocej?Nc_M^@G;K}=`RI;b^jyx~@u40@0Z@tZ?%MGh|UQz5B7G<8-;l<{5MG!>1 zE)LD`va*7zlXRxjk_Sr4eJ4VuK6icEB$~E_oZfsR@<`S9?L8BxVdKK$x9Z*sk6}7o z>7^<cj7&G2&v|4N;igtqPvZHu<~Sy&^k1?S9DWkN{3PhSCZl@3+U9rt3!q`0%%Lxu z7_cy{ECkVj)lVNOIZ8gJ;rab}Pf=eI|CBEEODD|U^y;u#^oo}*L1Sb}_-)|^0mxaE zKIaaol7V13pAw7I?Th{{g~^YTNJ43&*IV8vOO4&9UJ35{`gU~xen0&<aR9~QRhd=@ z7QZhuZ^s<2LXs3q@Br~@B&I@17#tO|lQ1xZ2dTHW?_W>|24Zx@<OR<Qq#br$+qa3L z`|I~o{9lH4*Lq@f=|%zjZAcP6Bv}4yypuQ|sz<duQ<Yzu!TO*J`tlipf^w2hNn`e? zugyhH?C|^z#vnAr1{Tb&=tCShi48<I1xn4`cu3z|jlPdOG(ez3R?y%R7N(SOMolr_ zi=qsq4=XM%-u(Sr1%ufE_6R__@J)^bC~jydcpoJeHQU6JotUq!8(#92XSz0W{PwP5 zo}@Z0uTY1|j0PbIRorJl%1EmDCjq0C$WsVA+bf$~Ga-#+O=$>5km=4O_mQ%^e<59x z@=x@FjUN2(4mqiG)PhbB0<jC)HZT=2C{IwGc@@0j<>d|5D+?F=r~7d)ZvmUnWuLLe zpCpF{{cz0uNixmP`&*?Ef=5J=K)?{p(_s;ZkMoHkUA<WIs&4d^dg$e)SFIk$^7t;3 z2P#XOv2`3b4UXS9v9Q6wFKq-H61U_>{b8R96lf2ReDMdnK|6GfB^(K?OXR;xNxB62 zl^RiI=8vVVJ1=GgZD2_6wz&C3Luhdqe*eY~z>Abr!$b}N)p{6#&?z8s-<u1oZ#gY9 zv9Lr&G1D|kAXWSPfREebTC<=rfFs3-BrG*W!@M|Du>6A7%(iu9pyqLL0^>)U$@&jF zMv%D$G-@f!fxf3gG$-=k0FR?kro}d5f@4yvHEAPDL409z`S|n>jE2sKD@gNJ{9{)9 z#9Ns^v{;!GY8JXzAxz!Qp;{$x>GC$=D-hd))y%N*x$N(}Q%QsN9*Rj!hJ8q{a*c=h z_~vAdNUQntgXSc1;*4q_1|?5JGTs^#r*q?)&Ls0_#J679)#>$5<>S+#m_qG~2*Jq! zu#LV%205q8;|(f<k7?SYzrkErr1>sX^3Qxbi$oQQJcG@PY`a2O-|Egyt52Je@#rgu zz785ck2^|;uSJ{Df%Sb2`w5Iogxr$K8p6(r*I_v*JfI)*_PR|atWti0WNRe5y?9@G ziyAqfXmiSPz$|xNF!+RWS)2>kDVsjx<S&}vOD2D!*VqG=ISeiou~X&(-=rh(Nel3+ z1>=Qqr3LAkA-PyY{FDz|yTz78u|}~BigXBVpHp&uifvsb!0ew;Pz3Ryi@5K@IqDaJ z`4xWlwR=yLeDLD=6NH3nI#cuZ%>zyZ-`!;gU_8ZO)z>vg0KlchH!yD*WSFe&h;p!h z8pWA|F3ZwkHb418sw-m}C>a0IyeU5rMow>LmR~ug@!7)a1y!LQ1#gJ7wAal$Bg$aE zq`m^JlIJg8^jd$WQ_#?lGTTX4E_l>c#TFyY#|O^2uFET5KIJ!>=w|6T!R{vl$;hz{ z0yrxRyLLvwmV0ES+_<-HELTaLX_n5<Bcgs{8528AvSba;h1u@u8+41gyVIFoe9HiE zM$2=(12R11+!s3YBy4I)jOpp=5-`0UFn~<|a=@3!K-2x&*8*<}?)+Lc$kpmubu|LH z@_~r8t*<2bABH*JEN3GH&hKBB$a0xLE_%q@jsn_ecG|vMV;A@-iZxp!JDC!B_Fm~g zVuZg83%xu+@Y#MqAwO!^5k(I-jqJ!pvRX94B~&*$A;x)ac}o6w#gP0*pIQGp@t{uM zTB9N#+S^{?@FFeStaIE9+Q1i-PPq2Cn>%h<j2x|w%Nz)VdcmK4BpPkMy}!>jSxJA{ zJO?Gg#Lg8lJ;NwP5(@E36C{l>)+o|zcHW+NPy+K3h~IGE{ZqXs0S#VT0^?~jHd^}Q z@Q4U*Ufyc>`9`L60l=f`<~vdrA>Oq8>zmd5d)_OG6TcoYmvoa(yna->Lv*Deh%5b( zUdb?9iV(E}zLFD_cZRAPyJ(&C&dI5An~y*r6FIK&Qi!TIcfQ%O;`Kyr=2@igUJqaz zi4h|s-@CfHsQXglaVO*F-Z|k!lU6Jur@K!|{nY!C&K<k<IxN%89M?1vB1QbeZU@LW zap+Nlf?Qe(RdB`p<L5RUi!%F6lp+xpvo|-sQ;O8u>H}tA#i>Kf6lc?5(eREA$(G{* zHn5^UG&7FyHc~j8@#!fq{rE9y6LB~oGLZZ_%AXRB0$IXaA#i9usNh^eX!G35iM!0( z*PlMs0t~}+nauE9m`OAKlZsC`4TMyHWH?{);R3W&^V*9jOt9(t-l&ScO@;r}zcD9s zrZ#nT#dUtlio=$M%pEJz%>`rIJ~usm?+zyYZEIXh3ovg<CH^hy**-6^s<AHXIklZ0 z2&;poV%R*_q^D`hiS30;C==k}MWCRB42_Ku-S2MHSMe;}`T+2B5W(FGdbmfDgq%8~ z*DlFvdE?%19<2fbutMQ(A^X}TavcifL~H>`j6dgD3Kmm>=z_=485p`|V76O$!~iBV zUC`YR9W19`$Upowcd_<;?%yL6E5PwSA`VA?&4Jm?bdlE_XYmP~i&k61hQF`xEWD5` zlgZ$0X<Rit;juivM{8aP1cH9B8W1!V&IVYmglp9w#E2dS<Z-(fWm9vn)PH}X9UT** zRYhj@9&ztF?3bU_u;%!ED+*?9n9H!S@rL;0P`Xa;SD%?mR3y}?)5yL7nGC;z_N@{j zy4WUfMb6&wTEiR^7atD>ulylbpE@QM@50Bf7gGje%%njnEg)>Ii$(GC^c4KjP5L;@ zRM&UfW8_GI=<%mzAIJ^tX6v-z5XJxG)I;h1-L<MHHqT%7;M%C;1d(WV6sxB{n=mEZ z@#_~p;4EED)xYbDe_YabzmaClSut7PcFG~6u32}nQ->RioU2i6GQFQwr0MI49UQhL z94S?#f;1C>R#~}Z*!m(4hn({t3GZs=L{}F>Wd7)~&*fTdhZSrtN_m&sVskV4`sHl1 zr3ZB%kNH#(W_o72OwHIg?cp}5`X_+Ic4npV?CkHCXTwC^%IsPhC3G$7U}f)H;O4%B zj+V>5rd`HYaeZJJ{Y)($^b8n~n^l@Sy0*hGE|dGaTR_Cf8I4%)A#?xat#o-1X3S|- z$btpuJ2L-rHfPx=9RW{dh>#TJ_kV_5>XvLyk;lEetA~pw^}GhmNPN4QgJl7x+t{ZW zt)cvb;7lse8siC>1>aS-cdAM`iHz0D_GzAb!fzA|{FU8Vm+oELy#nhx0BLxJdH*yJ z^_?FsFNMg6J<(tbM1G^<dYK-_sIYzY>v=)#2Sr_{YIeYVcbPzwr$wXbm6VlJv_gBb zou@QN`fNO1QR`~8K3JpvEbZAhY_>l5+S<BE4%yt=blN!HP#&T6?V?&zt0S*PkVKfi z1b@`ZCP#~=ox!mw7{5LRU!lGKZhY?s_%R|V${WV7o5-U;O;l`s_h&>@!|o~#>4ukR zY;+W2U64+m5qEbfeqZpl50F<!$||38!m@aw0?AT;<w6tU63oDxx1C!8jqBkmK>!qt zFsd()PyurVnvls)kjyVxJsduclJ+^_c2P6$=^amvMsJI1y5tF_hKq|?3>rp#+AX#W zp2kX%ZccfICv==Fkvbx2vVz7`T7B@B-WR|>ro*B3bJx7Q!g=2<3%eThBvZfnAC&}N z`4V3{%*wUR1scDX^2(Q#G;x)S(vc!TR$x0i<#~#)2IMTxFK-UJJTF!weC}Fc5A=|d z?zDq75|lpng8(tPv*T?~`@gwY_+HgP_|ja6=tqoR=mzQLPVvrvM$0TlzAknnFgtVD zmtG@^rm3jI)k_3Ji@N;yjk5vomo>ECe(pbE^ZX>%RNM=6-QYLNm?nowuB2!=lYKyf zoCP<|*NpYo1U3uh$5Tj$gkT19JIbY{y*sL@;qArMv9)x#$y9a61nTiA8)s@Cwi$YI zd>`=&tggyOVMx^mIk24q7R1m{?xfur$xT^p0!@qesm+0*I$043;THST%+yCvFE1#} z>|LI)kWg_9=>*XGFfsKG{rVN_KXTsoU7ZRl@%*f{R75|YMFVsLz8eE6N;_0GZsAOr z^kvLuy}_jk1y@()KPkUjK(o{Pn<ebRdt6P$7vHUtmVJW6b`m<1KXs1wj-Rw4rMc{v zySmy3J8!M|$M0ZwmKZ~wCefI5-Tm3lf@CR}UdKhZ=ZFGrTfN&Ka!BK|&`5ZY^doje zcl%Cx^MGxt1&aiwX^|q2IFDF4XllMGNQW7bvz0mDUhyX}vdnYi<KmildU{I!3E^pK zA&>Muo?@$bDZRy&$z>*V(0Fc?Q3{4_eY~>g4=T%-_cu6~KfXGU1WJa|M*1RgZ?+g0 zN*T*mPUTucH-gT0p=zjTDQT(dk}$pe*9NkwOpOJ>64>(kSU`pN&f{Rt5Wicy!caDU z_TRp;y`4!gYP3=!8m7aSm;3GaZQR&hp~-9Va*a6yFj_w91|KB(P?w4p4g6X|%)rtQ z{~{@=WBc`XYWO5+w+K<`+z;l$4txQi?aQg~XaO*BGp#=7!Lf>E&-YtSRBnD|-~7b8 zPBN!pdd6fmvcG78?)n?!_T7?z-ue}6=cRG>!JN0Yuj=Q*+cSb8N7EmdU1P;lO$stN zr8#Y+xs9u0mKMUk7f$BW`-a}`7G!ChMhFWF%f*?QhPf)2h>Y}f{@2A(S~VGf>TuS7 zNxm(Ct($r*e)~t<Uegw*`IMQS@(DGgJuU~CV(SwZy4Rg1#Ac8a%kr8m;NXW$@b~=w z%?K1rUT<E*7pl+6m^Huw%gIK&V1k5uqC(Y^H>zGSsW0)3P?jtN1;t$Q`UzPVNf=S* zXduT55cOwAE!*)oL=K&pQkJ`njX0AqU^7(0Og09`G)ta~mr93F=X5~;+^7shV3``= zo0)>+5MX^QUDT1-2@wY&C>H5(TFekQ)GUOy|G~vrcZl`^T`r!wcl*tEN9e_jP^f7j zEx*au=olTApC$ZMlzhXj;TWOL9PD7d;I)+niWE1C?9!DsrV3i6nH=1g=O@tX-d>+C zk4|_vxTEKrnVIzMg&(8F#>WAM7(JT8nfkIp)Zu%cXN=i-0-{5oVC|pc_c5C~-(AG# zVOoK>sX4$1#`|Z=GV$iWLQu06d{)#YNd0Uj5+<|N3P;SLO6n9(eJtcS(A%lpw6T|n z{tKygkg+rEQAk3KdzEjTHkRWO&*ZTms)b#@?9U&`=IjotZm5e#04U~V^-B+5&dlGx z?Ing+z{;Pqc}D@hiHVD|`u0Vj+%FcOjO@hZ8XoB(XxZ0sy*RY*h~a9B6!meh*V#FK z!6aK*Oz^#kgEiKmyBH6TfNOSpEk0kaIlw#J@1>Tt=-fp$3(l_pW6_BzX$YC9l_QhS z*=`UI5*XEh{PH?UQI?(p)|d69M?|e-rW;Cfx^Nfo`-~E8>Q2upKesj*mMX#~lqu#? zcw<m9X(M`gh4E|VqG&kDRT8IVn44}x@n>y%tM_{gV`DYq<oq))7Adu3A8Fe-AbGOS zdZQQP3+5I(9K{s?7&zVCT%v_|sZ(+AchIwSy{c0<a28U+e$Aq!w4cKqd+hgXLn6hT z1&DCZ_UG#*WC~|HDSd|<NhCyZgKgBs3TuCR?r6RB$~M|Y|CZO`YsB6}9>3)LOO@I7 zWm#Ayu*y7Lga3H79)$4()7bwqWfNwrooG(szB>~%@7Vqra6$qNPhv)B#QmuOrro2+ z)fx%}xtb+!sfAtT59VNs*9iDZ_)m7_Hvp?Z0eq_AV;4eHL63dva>M5ECwvhpu)4zJ zyeyzLPHaKBNRmk7GRCf9uX#l^-`E~gmP|}c{CB_k0Kd1d_XyB;OxB;7WHG`3l=!M< zw&i-?C!Fb-M^Q#b20T4yk|nZsD&4;JVs`7RqF=>6723+-;bHJNJsMY*@Z_np$d=Q6 zl^N!X=P2o8ME@#HkY*EryXYOzcYr=kpcV43yIU|AZen92>|tMbKw%#&E4O6)2s4DJ zDChizlNZm`+KH_AKM9P{pr99pN-wr!4;)~6T8SS_3IC={ttup~eD&F9@!@~wRZS2? z_}dIZ)RAt|kull}w~B-RdCNxhpUs#N*#m$ECE698n?1f+>(%RFY)KLW-&;M98Vsnl z$T!=oGrWoV@y;GoCg<^Xd}B@k=yJ{E8qms#lnp~`K=;!(mJdWbuTp1+gR*K6n@19R zGQ<|3%~raE*iP1wRMsOG=!SzMfBJTn5LB?H&xj~Y04s?2UQ{l@T%JAEb?^H3l9zgP zdxA?lqY)`EMI&<Ev!@%$IG=~P%vm=zgBd$Ns6+C-!e0(DbEcwfSMalhM8w5MY+-9f zLHUojyamEPr1=UUjBY;v!27k9FPFd?nCs>mV$yhfHt&{dzB-{QzSy$2BnO2ID<fG} z7>13ZDl@1>^Kc77p9p)Z@dUogH+}Z(nV(Rc@9~Ym{gv^T*9B{sq1@cAn+OWO9sBy( zH3POX2|ec|#xelcqv;~D$l$c(iuV&3cV|I@nr|=OHNWqtV3N~gsL~3UE?b=y4j_eS zRh;_04{-DQZ9M-c!u_@Am5Nku%S1R=%m){=91T|Tzu0_yH5+-~{^U1*RWvRj`B$_* z8{NO+Za`1^&VT_EFPN4#A5TKU1o`E~N(jz=pJ05V1&flu(l4*~V*2=Ca2nacy}D@6 z&85?1O`&Q*4Z;#W!OKnV1f(;dFF|ZCVA1MEdS0Ldpd>vjD-1@a_lAP+ZLc5qHTK1A zDCCR{@|F{lL8fVr+3$+k?w<GuZbb+OldQGn$9k8C59s^%@1GP~j+;TT)`FqOVnON9 z95Q#k9t>w?qs!6=En9@$+E6(-+Lt1=wi(gLsPM=!83%VOOJDQ*ZB&rYejDEf4M@NG zY_6+EePVO1(_jJSBJ2A*l+~}IK5x~@V_jS<O?xmyAY}kE%C4A)_4482mv#-kHhDLI zNs<mvw*8bh!>~n`1i-!rYTDhh+!NLfDLrxi(o@{F9xsCEj#mJK^BQQ%^tPxYN${x! z0|lcGS3(H1j2a^`s$JU(VR_y^YHGH=P_TTDN~S;aD?DgC@TpE%x)*Je#7&2m#?pVT z7zrCTPvq(Cb#~)a{uDrl-hm(3F(4_OXco@o_v7oK@mJMDW!arKGG?uF-8|%}XLXQo zVjO{p-I$RI7s)OEuvs{qHhCQ2$s6?GndQwBjNTQT6VEwz5^v}ZDeWCm<*+M{YpM4Z z5;|o8>e>Yw4t-p9sqrey0oUT=0gI7p5*WjB(;L}8B^!%O>7D%Pw_1YsB#3^~)Wwpl z4g~$rd@L;{;Fm(ZTfYiq5FC?UUHSES<DM<zat>LbkaHS10geBLN}8gBY%|>*!eUCu zUAaIr#R@N^mNP|8HN<;tHoubH-MQ>yq0vPbrZ)*zMC~uH$G8!|kkLYSH8<TB4lG}= zOab~%fIY=O5v5%8za}E?t7^Bn>OB{|zd0EeN&`wUSRYq;mw`C<C8YV%@(p)?I&It0 z%<V8f0l~!Kp_9Dp*S3EJT(C20e~bj&hKLj`M{Scbk_qt(jCLrIq~(h)<2yFsXMz^7 z7DU3Qp!T)&-Pi7O+5Oe5k<`gr+)TQaA0g3mi3WA*?3$i1%CuK}WmwiW9iyXjeRje+ z%*z%>ZQLvEV@j9z=8IQ4pM?!GsGb}ByLw5UB{0=oGUgo#&zsk%nGK!t?iyM5mS~Hp z!|56&U5|9Zw-kN{K{6(A^7S=fDL^ExBk_T?@{v^c-|I_MP^>fD{W^RTi-zKklANi} zzl=Tw4T(eH(@MRvJfn(wwwLx*Jq8}B)xT7fm0`dg<Up9GIJx@H0{9+`fU0GEeSNX4 z-$zhg2B_UkLF1m{kOs?v^#ZYqH$WW#ply?Sy)c|5a$059mj@W$bVdcel-E6F?CD=R zR=XlX^c`C#Wz=N`vkri26JYqyg+}i5+44hnH0$0Uz7Pvo^?lT%UJH)16qV1E)YP&2 zZPyM3`MX11Z+$z31iq0VDfO2k!HcH#jVgQE_9<%6BmEK$l~)kn1iD|53?s=3d^z}S zA7>5{e$K&FXO3l~9l){jLCP#-sf~w!J9dBRk4MC;RhBwc7P{yC(uK-CY}@i0=r{+X z+K1N%L^zyFCg)yEl`=;=6v;MS+z4;&uB_ysRsK#-w4eZB*Pu$8Y~B>e%0NbH(Cl@s zVg|hcfSPkGeQRV)3N(1;7h|){DXQ7mfByVwR}6*Wr}YMREb9TkhOt9jLW1MPrG*7J zpZO`{%9~A~X4HXXmpHJ}jCbezi%nW3)@HauTcs}XHSD%>uHGf2Jbb`#krx#e^_Hsz zR#yO1nO+0I1=LhK9;!oA6@ihT!P`hliFP8u#a#hC7Qt|Kd&7hU^usQExVb9JrJpxO zi%%A&A)6}1z2$b7uBe!KkSt|_^R3_43(vt=dec{*>BP-tkp8zpZyBpbW%1DBDK>uF zK`jhFm4p9q9cg>nl=x=2WHzX`5vNuTsYt-qA$r|Yno~N7u>nkJBeNr*r?4d}0Jxl@ zXmfJmHr|t%g?E31ZLP>0em^}+ahU3qen=;Hx>U-g7m?RO^-k!IMQ49CqQLqyXIk#( z!tD=vF)13#7V%B9(?&H{(Xp+J3QcpbQq6%R?&ol(&;&Il<&W6dSoZ5xQ2HU5)$BMn zusJ-6Dp}v(-QC?kmVLIzpHADo_|mH5*y(i3tKH=!jw1i}wCP1}D4TLoTE#G46Z<tz zRE^VA%F#zeTi6$uSkS&O+Fy=~d1c$t%wt`6j)qM)2;Oz>0mo=+UyoZ;aLoOFOPa5H zA&R6l3!W9+D!+s@fAf3Ejyk8yU<}+SqHstLbBo?-v0k@g`sn6lgiF`c8_z6^f`-QU zlc($O>g87U`N3X8ww=Wym^%^@5|*9PvV>d;Gt6g$HF)#$^Kqgj`1sfg9zk*+gs#D( zlkjEL%V=1W-U${HPB5+R-`gJ4y^uTWpKp%`x!QNn_U6A&UHJiCNAz*J1~$+If)3o4 z$ZLN=sO7K|XBKE2K25joyB*mOr}6*<j{$Tj+uJwBZN9U9CtsHBY|6;r<5r~nDi3g9 z86>ai9kY2QL&6?#XD4gzUBQHg2H%kFEQ86{q<Wlh_Vi>7&WYh9rACrjl(<_|kWrNF zVSOC9o4~nWiVwg+=DJfNyx?S&aau{38vlobXkg9n8BdsV7l)KR2RJELjGeKJ6UEN_ zJ5>;DF{DKdd=WUkjexTWGqvjN>mwgIYH`^bu03fT25ssjnl9Yyk-QlTlDrH!QNUl? zyz)+~2aiHYCckp?u;(82N-(X?n~_BzO3lciIMYQqVC|?!T4wt_=sOH~EefE&0lKQM zKWOtM;}QUK4rjuW9LyXOL((?50IC4$Ywy3mSX>TQBwLBf*(`cbccw2JL5I2~sN(ZP z^F@(xH_ms<zjF9-ni)bmzE3886*F3klGse}zLK44Y_Y66F#P<DLq-zN^VnOZ^*2J{ zZhLvF)=Bi3|D;GeamoT^u?py!sw-QVH8u{0g%HCCNepynBY}^zstxgvNyhA7@fkK0 z=6p-)Epd7G933?5qRoNRO|+AG>od1~hjEVnD7v3hs(BRosASc95$5TtiQ7J|>dqf5 zj5rG&XR`!dHgO-`p$v(v=koQ^Gjape9NL^(f7egDm7d&sC1JZ)r#olc-?N9c9>rLH ze&_t5KM#rDmY)(#HdY+hBHY}g+TqfxN&6cMP_u=F1%q3v<%?IoU>cysMAqZdj)jo{ zQ-=pv%c0bxK4;*p{MS+jx6Aw?bb73Go4Ppp<0!e026X@pJ79uW4i%>W^Mx_VH*0k6 z%N4h>6@ECkTCBlG7Jdm(Xc`_d^!H?$IZAR~SMr*9d-tBlJt;~ieolnsrA@&USbAV> zKY<%)t8aUpYKU5>R?_}9?$4Giq)k};b&3La>z{UqK16;!O>2j6x;X{#W^b?6O|9+D z);Juc1MfuqW09s~XsBtCE$nlAUjM)(8OYfE@_N5+FqpPKmFj&41=v<>Q@myt4@Ajq z>-iE@DOm+EDpEX+_|mk00C<Gm+Y{e?;@kOq4-p8Z^^@%T7QcxvOC-}a&o%stBG+14 z{*5cn;&8Q$0%W6pu=-BVcj{BzW38{ES-(7RReL6Fo>Nj%2D{|2O>eqi2@4rm9I`T3 znlY9!9@v<ye4K6=6otzS^g$k_W$9@yt-aouXT4e%?i-!cM~YcnK`a%Nrrej)?`yEU zjlS)aTEw?EAr8A)ijq7(!PhU@imwzSSv2)F$l++L)Mu&P97tgkU}vvkUk8eE4Tyzq z?}+HRfy<F6&^Z%@n`$FFSy}ai8LuB|_Fv~4Is`y3HqiHO0OM#Ge>8A}(+yUWV!WgO z!FMuhf#~sA_7jNZ@!W6Rn)<zIWSUKEq0)YwQXvEW-2>?4XC~agdTmmWhnq6QuiLej zMxDgPwcl|)|DkN-|Ew77UZ4HOzDisF$Uw8bhL;$~bP5yh;bu#+y^Uuw3SOBxH3q+2 zB=u#Q#*h0TnF46RhH|kc5kAT+8)mp7?BUi)ofmB-{>USr-eA5oc6_v{kNzWJ!r#hI z<-66Wy+jftFk>pln?J7d!4XTk_jno*mm#Fz0^N@dGPKEUS!h_vobT2O`!9{AM&HWV z;T5+#w#i#!O)<42*3R<zleSgj)ekV3cdOXcoE9PK&+OaT>}?=N@my~6`%x3|XU)Z; zOtxmW`wdw7AFdM_qIfJM6(Ub_9yyGEBV1aw+bOu3;8LP_LM0#2e>KPc*l#G1@hCU; zHCxfb@pt)+y|NEg;VoZ~84kqqC3XYfy+d$#h`G$9`I>I^&~&BjwM9>Bj@>D-&9H|I z*<~ae+>|7@@!<~{Yee4#=u7xLullguIP`VnlP~p5omtKlB}}g@8_h`jU>P82(epoj z(7`hNS4h<h43)rk**q}!1PTq*h-RdEa4NR7Or>f1ehS?hx>~wZ5|B}nS+L?afa$>y zCFJDJAQ6GGyoRLPd%SveGYjI9jB&c4llo0A1BscnEMVB#DEeu_&q0lE!_9sv$T}P4 zhJ*bd6mwx@3N=`L3!MKl>w6dqB!0^pmZZ?)x@9P>fykkh)*RO<y0EY*-R7ELUbR<} z*3X|LHtj69g)la6ht1T_wYGC)_Y}yi6tY}c5Kr2ihKJGceTUf5osnr1GDmNC%pX_u zN0K8owC0xS6c`eQ?hXDt7`FSWVS?=*&wt;@bX}iiE;wLl>a}ZJvZ3E3tB#t|95~O~ z74ve7nlg?FlA~A5xqKWSs5KEmasdfIOVhvgm9%EXk(x*38dap(_XWcPH60WfQ}ppK zyHmDTDnQ<XPnO(4qnVka6JmJyOmn1y*?&out#P`jffgdI*b1CL!0;3KC!7{2ZKAnB zdT4XMQTCTF&8wMY$lSPH1?9v@P`$sxuKSAOsVb|R^kg7gZi>8KDCV_=NsbLl{-UuN zlcTP*ku8_md)<8Y6e3x5>kKv~rGs%doEXt9(fP<q+Np%dmKec=jlpW%*Rr(lxD!3N zq&F03Q7i5Bk+VX0C|?Nd^ZEY8;G>}_Jxm;&_*cEa-)RH9J_hanS!p|-K-C=s`n-+q zg=%^c<u|3t7b*1!eP-&|pd=Fa|1!sMnDUheSSsU9T(7+0PfdP!mV8D|tXCt^O>Dc% z3)Vp8eBJzUSR|19?@3(zH^N|^rrpIsuiQU*hb}B68K$vkVR@t-imKvtNyo@<9<o%% z`NLesI`=vb(s+Cw-%Vo4|LLo<1lVCsO^qKGLjlPF7@vMlkMs8cRWjFfgn;s!*tj^i z+pH4vTdqmf*8U&lApIwpHrdW3q63XAf%%<G?zL_obXep`NEV8|RMNKs((Y&PFQB5o ze^M7{y4BL+jC+V<sk>rsC&Li94(@gSW>#iuFARoj!V+zJ@^)ijWV)M#GO{>Azu%1o z$=`l@EWI7T*y+~jQr8XvQYBZ_z2#${=uU3jRN_GY4ihV()q><s1Om5q$}oyAYMuBY zb-j|4@yo~dpQUQ*){}&o-#V5oad@$<+4R+}<ftZ9Hvib2yu!{HB&)-Ij{!%1P3Oos zUI+Og5;IROVhLUE`O3Du4lm95AYgdpH>C&Voa?b(F6d^dbQ@x~A3N36PG;PVmd4od zpT`C-PRABFPQ2@4dHB#IEA6uTK=_Ike<}>}hzRtpAz*|R7H-O;YT%>JBae1>0#8*( zr4sugPu(+)2#xAs=sjez|5ni2TR=aeQ+g2JYm+MtcBv#+x2ExYG<uxfzq#P=j?-=3 z^8BTjEe8~7R2QA8p6d~$%#{KKoRIYKNPw%ef_?7SV@awdt$TD!>vF>)_)ONVo&}uf za`|KM(NQ&;7)m1^mxeK`_uAzKx>YCO8?*8)Ya4ufiZ#w}s8~u1xML1$`WB#gZ#yk> z9P?SeHu}j(`tT$n{GZ}HScsq`&qH2?D0~WjvGjK{J&{p?BIJ85Iz=n(m|0NHPNfy3 zAMCFKX!QlG`jZ?dgs)j5iLBxpdHlyNNgfRJ@kP^Hevf;#a5$Aaz7d9dgPHU&pyc~% zfTD&(i}O6e7I4>b9yE%ftyFtRK*MJb4=W9eW7MeoO57<lUatbJvDhp36xQF-Bzz}H zr+1y)zW`cDr&Uh(5bB4z3X^&#&~QgV9Bxx48hD+-Uu9*%l36n<4B3bxf6XGE%bK03 z?z;7-^t6m*#jYtw`HL2%Y_bX6O7zbWOMDNdn_ZJKX?5Mg$}^!I93_3*!6?xO|J~4s z<vc+t11bp;C{)=-tYEeKhcyTUod*J-oaDcQSM{D%RV2;sdwD6sG#q4~22IPt#s|_Q z^~`&!#&<$OP`sDh^yN_jAqx`QA%ROPe+lD*^bi5%k9tH5`ki#6`3FBTvLtEQ1{IXg z+R-Z{RXf>RJ|i<j;O$p4DkPed?J*J#FLvWvM6kmOY-jai8Z(5Pj4(#^=E;H@N7+hw zWI|~%3B!rj1i>a}7wLkF*d$(;aON97GM+m#Ydj1t!{l2B?ZDlW!buuUJ-Yntle-z9 z9h4*t^|hE0<RjxFL?g?s7Vp|Eb7aCb$%8l-L|--n)mEAN{qn+^dU6vp)AqPjk=yK8 zU<MC>?cl);o*DwZ61IlD_;uA}nJ^sR`d^9G20DaMn1D1(dA<9TrXJ;}>}hB(+G(Mr zg~9@S9&?L2kNIy&#kob)_?o{DklIcqLpl*afc^NTXJz%T9cOB@4<9t5kpOOoDtS1A zhd^>xG0jPO!u@$7Z;6(HYi@V$`A{-IM=?#IDGE^Cr8EIxShE~dsC22W)!oEV@MxK0 zK@~CVG;bkip>Zr~!O^9P1J4B&>GKd-HKI9V*2^c`%(!B-KJ5gC^?Xc~;Mc`ZtyjyW zxAlHH)Z|UhI5bA}dnCD-wq6w)tZ0O0QDWP7U&(KuJ>0gC3)MuRvq+$uP_vqz5#&~q zs|0DP>rlvl$bGAX=(Vzv9(_+JgTB(DLJM)n&w$D6l~r5N64CwWcH(p-vRuS-)`(I3 zc_H?rsTMa$qwQnu@wKgeIKQ&rHq^ZhL*7WEkeRj!LTJ_SX!c@2iJ1&;-|23f|5^r0 zP2C+rAU31?ozO_-w*rsV{}ulJ-CkyBp9Hm_CcPE6#4a4)$%*@QT7iBGCP(z@qx4li z7gD5w7?FbKnk(xUf(PV4N=npIRk49_u!gpgm)Hs$){U^p-$2<;>4d`}vFZhW-Q>X* zf;)UcA#jP}mZzC8+6o8~Hwo-KE{c%y#^AY<e|qF&T2?0!%pa#qzhC)h9~hZUJ=H~% zSTdCxj00+IKnT)kB6@XRr3VStCa^Zp=tAee!Ik=X^|9gbbhNT*h%tkcsT~PNBo=?K z1e;XGlw#q{yEE%<lRo)Rr3_uuIHKq#CuEL$e#psZWF3r0QFP4jkjKi|{w%^FnLgJh zPh+UxNbl!OGY$()Kk&i39E0dU{>y<DGZnrV-6mDk<GfHZnG{)MS0N}W3ha5G@$vC3 z#${!|c!VjXkmP{)CIRVu{phIzC9jaxI4#=87nQ@Qi{i07n5kBMFsFS6W?7u-;FNKb zfu7uHAETlT1*$ty&0bM;ho3c#f{be0^k-G35No`GxeZHd=;!`(#bGp)RGn|u*tRtQ znEBE84OuqH@RBk#LkJ*hSW$r0Vl-3w4*3mo#*LFR-tM53*HS=|&BZcJZET{EzJan; zY{2{9`+S<aln#}k|5_yDX}}W4?`HKBi+zhHfcCwvR#T(zB^lSarY==w`d~|gnfskz zyr~pQL2C{JL~Re1*l}q6-Lo7N6dSj0G}a9cpXdR5<R7(dp{Ai0d@PIbcn-V29}C<3 zbB7jtoJn>|@lXS%pI<s7*M*XMIypH#F8`tvH5EPe*|B-AZnh_YD=FGx+$|l+Hxd;B zh*ho`F3E?-hYX>e4dgemFsVf+MfJr<1o!`7Qe+H$)QhQ2@jPd{bl1^Mm0-bh+<r5v z$5DBfNKX^8)pDw`L61MoR-vLz5rXr^M8rBDLBa%g-X1o0Z{y-NFk*;HG~dG~a&b8^ zU$wS)MTlDT*32s3REbcxL8Oo>)H^0eMgZJq0hU&%y;;vp;5eb!9oMaKBt>jqY;*_@ zHj|pu6usgbRHi^I+;RR8n3zNK<1~&6;X!w+G8dlBoyN(XICmx5VqX7Br){!Rq%v56 zTh*8qa$Lb+kB+_$N^24OTn}2%avv?Gi|OC`p~_L2KB=LKLEJXZaK8V$prz8jNY)(% zm6i^B*O)0K=0$Cp6>9LHol);oDJXhmhG|w<&2S$^Aw}i}Z~BwNyb3}O>(8l%l4NP# zEU1Q-sw<u1`o4t|Kc=^B*pLrn+?^f_nq?4dwJa<aO?g={VZsT0DUOG|^RNo+7$|>U zv6A<}C3Xp|zPfRG%)2wb11liaoF@qBjZwZ*#)r^#=nA6QG9zmQ>W*)1MBVh~Mjeya zA{?BpGwLl<`&2DXG%+8bvd#;6dzn*|k}LYdL&L)<v)!oSE@bddsZK;FH~i+5A~@wG z2=IPr)+!A#ry2=sPd1G2g6Ws~a?m(8JF7PzgnK{3GReKeV(R64)q;ZWzlCG@W<YKD z$E2RDs2nO#$|_~MIqj}|3MAKq#2mz~L-lOaTab8*-AhgBNMcf5SnG{8Ppw8NY-h-V zPy+*aqYsxmT-EoP{`aXIIwQQ?2niEt%Ex8=LUj!EAiuJ<mL0iNuMz`jxOtW+#C)-~ zy27#Xt<CxV)8H4_l7DI_Sa5Hzv2)P}Y;WBf0u<=1pMtm^IcPX$7X&v=|LmBFCQM&I zm6vWK<_*{WP?I3vrwr3%Z`-HchdtI!%u%$#4>UWfsXpPKQ_{d!M;zf!5hr+aWSGp$ zThmwF*!l3s#)b{%F%2#5Ps!ivZAQma%iy}VQ7fvWhvWF<@)o?UB=nNis!&z<xqdG! zW1#EQ#4PfO{Ikk&IfEKR--txuk1dw)a8AmdKeA{ECZTHO!|exXk~7DM;i2+RS0|m@ z@cp?j!D=+;Z*`RDigV!d6S%!r0QrRy2U?qMI&8J;z0v*LgCiNPh5gE!nTfkt!#<_J zI8fszWlEU!FOH3x+@@pOAWl;pNr81bk~#lJc=Pwh+plL^I6=iG{9*=Jhg|wmo#>2j z0buywPxWhb_3~b<D<G}S3RsnYicb`pc>iT8G7qyC3cA%wGj60ftwi6kjIffy_{V{) z93EkAALTo&K<uG$e1RR_mMvx;!~6`nN1YfG_W-dnG6-SvEj8WW-;hEGIo>n$n4~oa zmZ4BfONP`UC!=MOe^n|ciBreyro%UGN);R7>^i3C$p6swzfJsQL~*3O7GK{~MxE67 zZam=n#Q26L`=)4$(iGY$6!Bn4<%#71xDmIVhXQ67NI^+$^#hi!NK8Fj!0;XW?TuIh zfub{Y8jqJcNlM-bG=w?&SmsfjU^((GA!-{;i&{Ge7K}w7n)_3nI7g!x^4k{OCSP(v z<%&D#>^USw3VM+)jm|KNKKFZ5swhMnWwUFGOYB^L%b?AODT94;wSF&=O6C7H<AU!d z72hp^l4PV}nvu}I?d4n5`)io3J_CgoOBi^%g3!INT&&;)Z#izgt_`Uwy(n&B-pHsi zN$Q1qstAJJ-rU>fD$8j`ca?Y)jujB86A)N&GwZ^g7&I<H9flc<ogT!En?tfR-OoBg zBY2$pY(}@S3S0mL`s~iBrwX6i#17UsN!pG##65TCU@;yk0mgX}Cl+g&(j}7+NbP8+ zub+R%P6!I=?!0JFe#F_zS%`@9R$_?Y2Pg8g-LKt;CTKzQK-%yY+YGtodWO+|L;Id# z*jP`C`yhrD)_zJJaMQmPF6ZH!mG$WhxRL0;0;Jr3nubQ54$<Z^7QC9|3fSawk8VFD z42}_R{#7^CbgM_bRz82eUY?I}1UHOun%={3G8uuM9n1z5Jqjs9(GNGHnYT=w=3opT z<fRTc^uMXezEik4&AzTrFA-3yi$O`5?JDcNDXYl591d~xo+t1ZwVvGA1Q#DY95VW! za;tu}iB-TlKnBsWe}kB~N96Ix2DFSiKOH3U0M}xBj`~|}{s!|c)cy7y!lj$0`J>e7 z<tXX;UHG3vTANAi9ISrcZ^g1TV^U++(?Z#p$V`6>41_Jdr5-UH_=tS<-zL4Gx!+vB zJSW3q3tKU7@%`Hzu-|CeepeEAwR;mcOIz{j|9}4$g%#&dM?1Oaj($z6+z>)~3^4Of zzcFuV{PNu<d5hC->*@)qf4mS^FY1J`bXVwe2p6q4Js)<4=I6kWsTthx6_RT8f9Bc` zx**!>Xlp7c{zShUzk|&{Z+@wYMQ^EO_4NgupKR<C)}Q}gYfOu8xml|}>q`kbh^Er{ z-}_Mbd)l~!!AQI!vV1eHUt!$*53UhhN;5XidAE>z`lt6`hUZ1Bz!Q<+`nFYvmeZhl zumWy@vkPC)aj|BKPT{fU+F)A_GZ6|p3!1CzV>(E578h&T@l`M`v!Ebz?KsJL*V`L} z@xAHIPwn;??P231PLtr}Ix~ZIcW3VM*j?{I5&w(kxZcbKlmAteohsY&wy)w;+89T( zs`ua5%STG5dt`HvdXv5yqLUEy_C*}l2`of;v}_x-oW^;q)!mBlybwnH7_6vKOF5*` zLe%onRfajbhI=E=(fK7Eapp12_->hhDHPGhhxJLC4Q;={jbQ1dZhBSQ|AgRJ*{PAk zLc7^@wIG5k)9<JzZgY)({=6UW*+V$9B%y=Y^5t3f+086-xspNKzvCknqG=qQ`S!&> zucltF!j}}No42%H-b`H|j(*wi=n!oN6(-r)DK(LwS4VK!XJ(5jjk%yD9c4gjLi0v- zLwWI7tos`@?o~7+4AabzEQN`cJt7pCKF<V}!i+D=#F?)tJg7y6lnfU<R@Z9eKPO?* z|KAs>qvd*ed%A@2jdtO=xWI(APmI({4y7N5S%UFP-Z)F1_oluhC~`;P%>?W5^Jfh4 z(t;K`TOXUqMv)<aYRMb9Z)cNz(jt!{5uGEUMoDYM{|R@<n;5titP2`=`6AwM8B5eG zb$*Fo47&B{Tgjwxry#?}j($^#V&pMWHq-8dY&mQwIsfa=xw!T7kgJ8-*LrwZ$Y6;2 zZ(AkAY>oW8(JdP?VYB}AAug<-)T2aQXSf9|o=}c1exZrLQOF&7;Jw4sa&*@<Q*VpG z%q_2{{9gAnxyvwz3vOWa2lm7Jk;ck@re34J%OZ=>3O7Fs`mAENogfr1ruev4d$c*% z#wT?R8a&ZzPVg37t|f0S68yQ`_b5@)SNgq!Y&bF%6Ol|51sgn&3EJ*dGKJ1B^NO9k z{z(!ROb%2|ko4m*{qH$GiL*G!l1Ls;9I}fv@N{mbd~F?P=G1op&MyO*E3x(|J!V;O zY%cq4KF##npuSr<G42~<@HslvH%d5fy^fn{wnb)kwP?dDl={aaxRIkH8MJy+qNbLf z^`&b%TPQ;OYHi|T;LXUY$Vdx_PaIC^;}H`Jnih2uf8sZda?w`*q$5{UWQDz}n*5X9 zn}(P9X%L-ZZZ$mTn~vtADAil6@n69Wr5ODvA?sXwGcIhDZVJdm|9j4a7K?qBq_3Z9 zlf3yErY1sP?#nmlXi;R)t!qn!iUf?wJUl$0SS>~8%f+w6=hvIsafdn>%Gf$!Z*dv- z{hq<hYl%1rzJ&xu=0epFPQT%!v|Er5IURo7BJQTsd(xiM<qV$l(j0;oAmhPhOQq%R zw4(2^$3jp?2hz%%z*y7qOKN>?3TE_~MXSl$sntD#g@@YMS;LiursnNa^A|p<&33es zm-HOOkN(%0(8r#sgTs|iT*R+&*3P6-DZC(lz<amG3+Ivq8iL}}Tjep$xVEaWP<=qS z-+CanJ6}%#e45=C7lJ@K88tQ*Uny1IWq3zMsjVWJm_YizmRJs(8iIz#6qxIapn>xH zvh})CcO7+M_bs1(og}c?HM07?S}umy6<AREW_VLCHBmQ4|NNl)ymcM=)o<JGGX5w^ zlq<q{L&W%c;vRjAddA#}Jk&p7!Ri0%&+4Yj@8PB9H=(A!cgH<^Z}=vrnFf_+q_FZh zZq9b8`$8&2qG>$0cAS?N>&*^R&7jLZBxYvBYBuI<6mLjv){H_aOe|Hnie}|D4jT0{ zW}gLoM0ZBlWFk^o!25`Ne9nGukGL$6;a>L${Ny#0!FOrt*ew)}52f+^?Q>YteyWQ= zOe2}>_ZvFiB@nc1UmIDyurLjVqJ(@hNj3O?9d(%Jit_UOi6z@)(8;pbUpC_gr~O|< zTp#ADKu*@mk_i6VYW-5gdE2#*)AXt+l!6kXyoB=0VK3R}u}1kx#ZnfoMdc58>@rrG zQrC;`lCLG*bndZD`@HH2-{E{mMm6(*2oG?04#tSnauK|V)E?(HlQa2}7FfDE*v~#T z$uJaneb9t=;5FZR!Igc-iyrRb>wMoKa!)$XRI8Cb<Av&ME|?(ya0}%_uR%r^&(=yH zKR1K1bP=!Wdrg&nj{~6(tg`K6Ub+-LUt4r+qyn`8Wv1N&Lmue`On#C!c%V(T+TL1s zv&`B4fJH83G#{gbyltB!uJLV!r@+7~8q^39&5Xd}ST_ee2>0{nVdP%}kU&%&m?zi& zjO9nJ3kFc7eMruuD;jWU02eU*9z?J&h(i!XZ*lKBF_xk}sb+U9Um5%Vt@l4%bj*y_ z3~$uJGZxkkfkiEV%N76YY;Ac2=H-A%N^al(_JBs%ciFM!-;IFS#g&g^T)+_nO(%-S zQh0|=WGq&(o5bIhnGW22q~e_Q2>=fRGu9ET!VizD?Sej!xf6Km4mSnb8%ZotCA2-d zWVt$?@<A~1Imx3R`}sw!Qg?I{2jX`ukR`TXerb;ixIX~Osq4i9po=kk{~q;x(Szo0 zbNS|r=a$HFqXcs>zmgknS;mA~x7gQ;t`vP=vsB(EFWsN{uP@&iE(H8LR2_c*b3^Ng zI2BYWYDfG3o%2t8SI)kQeP1O^$7NwkG7LDk6gz$saPGKpe}Bg&?s?zkC>nlcM|^65 zZcoCGi9pprQhK?Rs;aco;=c4<{MPzrBH&8(zh4DFWm<ZG%C9~|IRc}<KR$39RZPE^ z#AE#m5wKjT^&lc9Et~Vzh&0<W?6&9+VA6Jd@GXcPCnkUd$mBk!jR8_1Ge5al7r!&R zDG4~OIP4(scUqN1fBq34GOzavLabrQ^HQhd_XV9!TC1~Ky?@87-sFcHEP4m-H|IS> z;5O6$2Ft`)ylHQ$*!~VHoI!r4-$M~gM~-(tmxaz#eV*+*A_P8Gp%LZi1W7nmjy7Ry zneGdp&eKBL@2}evXzq__`WjvKntTzlK$y8E5O5-J1hV{y?^nfdFdo!^5KQV{kPlu_ zq``yDj?BkWHHTC+*3TS$*NC&>%a<YnmOll>;QBNHf4}=<13r@+2!_78hgV?()+i_c zt>G7X7;361A9@#ENSlYC)y>Ry#^ZJYqc8RbnU76n-(iuU=8FG!yXzFOt)Z%TSuEk$ z&8oib@|F1cTjR@9xn-~O^Mr)BP7AWRX$(}hgMjCd99((pirfB}THERJ)uTQdW7<1m z#b!WOW9ZrX-koG0cp8Q%NN=rGmtx^v#M369U$~J$KAKZ}_5RD^J96$z@DLHya*}n> z4Fpl-z66j=5fA+KGuwNw4l(ZUkojtDr)RP5Mm!;YH?%%|{LBpKk&ip7g4d;r0O9g4 zTn7xAI@;bx%Dlus3f%@f{>~<_rufmC1yA8eC(3PXNX7CSEUjxhqc`LkSKQBU-Sv?l z_Hg+-kJV9#-*kz`W?w{Q!@(!>0HZHZc%JQW9&s8U`-wrcLm_n>A@M=o9;>5z>kKrP zm=7z3R{0H})z+r{_ofH#_kSxI-#jWE%5f9>Rp?@3E2(HzpLa?PR}&@=iq4gAFMRI# z!$NP`k*YN?q$^EW?3Af-^?%i8=-FVChbr%<C2`+<xnvbF_;BEgVJ8JNnLLC^L#-_u z2Z}oU*=d&Al|Qoc{rR4w_#~O8>|;p?2wMjFgqNHK4Uhu<hoq*%u7hr%(8N=*fLFFn z$R*YcqJA9Qb4Cphvo{FtHLcZygPq$R@gNehG!hH3%=RZ+zStCaeY7>$ezCjEXx|}> zQMS6+7{^BIKKKh6p})YhVg4QI9h&ml&FLn*y_s7a5mZ;8^#96cDxI4;7c!xYF0SRu zaWp$3b9!}f?;XOcG4&<qh`G}Vd2UJb$z5xpdXw1~33a(cj{p$%(A<8#toBWn8+yM1 z)~TV#6Lf*^0|tiS_bO<PMBf%T5He12);Z3kWv+zxH^w(EzDEh|p6fw`8@Iu??e$CU zY{=_1$&EsIUz=x^?#<P{31iO@>Ty=Sp2ZQdeM9)Yf);Zptos4eDHp_Vx~rm|DT#}6 z4D|e3^yhBXu+3hwuW||*Q6TuCW(&UU$`ZTZbh00BIus*EW4qPTVz&I&)72MO?x2M{ zT?8jhY0K^MIKIp4QRIQ5(uTxOPD%IeX6Tb2Yqtm2x%gud3o7aQ_!Lf!R(}6l4~94r z@n=)M2bE%J+32zvIsf^_pN^!Af69KPO-^N&_E#6}B*q`S^8f0>b9B<l`H`^R-vN$| ze>`%c5&CgG*44wh+#-ZX@sRf}{pF%~m8zqjJ0eTL^{uxZ`1Y^N6<@Iaq6`#2X9ysQ zAc$pXzQV;E(7(=+7~Sv@wgbFWvWEPZG}8*PFq-SC_E?&mj`I}ZPchwb@oU54N5tYm z2lpNKSWYbCY|FtV#(}}X@22Z4IFkeX<%geh5q(4&F|frAz*ibVP_W;DZtf51?ZtY+ zpe_g&UIb_NBjhZ%Q{o@EGAnB4{3M7r9EnL=Hf`(zcP5UUlz}g9(46Ne7C43(5-{Pw zc?Z$h5x;%Z!otGTg?53KOGywWaYn#XJWThc`EO0si6*hss{6hZw#PR#ViJQ}?C@}@ zm;d%@x@U2;kH(89<UhF^wy&<L-xLsth9}&u$?+IW^q2cmIs7Golf~D1ye6MQ$a3?@ zTSE(SBD1p<ZSPlZ7P@IDK9s_BZfY#=IUlyxAFL*4QdZ31QP4#V)O%lLn#KJnR((>` zdPDWfvM+<Q3f6Du-Q|Nq9GHx>0!{+t;EvnTd^yQ6!nT_Y@gDKJzI$lE@w0%~#zx(b zywE2U9RwgHX5I2`nx=2;vBdh-tbyi_x(hu`y@H|!gjaOrfr?#6JR!k>#G=xgi}4*< z+hLz^&xY+Akd2Pqw|qpn<aOhdqo@7Rzz?h38BfiNqobv@YEVPalHBi8S{5KrLP{pe zI-XTLm%H19^-8!jx}1qRHp@8({@;>uI=S4RZkwAoL8WzJol|c-^UGg7RTb89n(CP2 z9~nAz_QDP4!JdO2_zx*I5Mq+x2Zo=~Q_sZ|>&7_xU(b84Hd+!<gfP_acP`e)F}$vz zD;w!hH}VXFn&8Qi4X|(%kw6CVDd*CHgHXuZW)09E@yQbf|HZU2c}Do__ybRk{EoKi zR)yE4yx8W5qhwbj?v#a7Y|9i4oq(_uo5$m(vy{uy<H4=XXZMFUyYbffHRdC;%?UKg z|38*+_fJvv{LU0T_QN`coY6(k4~IKcOY~wzi78H}9#(oQ;wv5aO~n%IFN7H$ifQ}* zG4<9_QFh<^@C*zv^w14Mhr|#n&Co4FC`cnMC?F|<3|$I?bcdu$gOqeh2nY%&Al*oJ zzPCPpe&6?xS!>p;HRnF}Is5Fm_I38QMtud%iL`Mdov78VdkBSmSk<-A&)}*Ja1W-T z*}TS_WEZ7xWu*0%*_q|q#jhvcI5%s@C6QEq9O@`YjkQvel8yWP#lrdb)qCU6Y^^!t zQn8P#cHYQaO<U`}r>Cs{$w(v{HN?tn{jLP-m$i+C27kHMa^La$T36-9c9YWT?8Eh+ zUmO{unDr;jM<2tm6KXN{E}p_op#sO_GPvNSCb#10(#`IiU{5+)f~e-@n09ypGXH9} zLMhit59Ml^9NlGl>Za<risKu{#CZ1X4g_Zzq)HM~n|@D4)&hUbH-A&DU?%-vAR>5Z zQk)VI_hW9W<P2M`>Fu+<j+~a`X2?tTN>7&~cQj6dF%Kx3BZe(5*zBn&2eIl<)02U7 zG{LyU<TrVSezPyXwpZt(ss?jj$x9ygarYz_&d2-=QG$ef_0jf6w~33dDTh+0Fl8J~ zjXzhXS8cgaTUfaHwRHOIJrz4jSfmKa!AuYI7{ukpW(VLmhLq2_Pj4lc6~^DpIa|-_ zh>RK1mI)m1M-2@%=tY1VJY#NSXj~uIvRDKybbQ|sa4{BLSxNI*{>EwJNT@+kGm7Xz z(qR|eH?MvOt^nvbDcLSb3odaRIAqBSbrphwAy!Xtmxx!Re1k!Xin&&JS%aqE`c2Wk z4-`eC$%-kXrmKJk=FsN9oRg1?kT5R73dPRvE%&{#S8<PsGQ9hP7z6tfg#(l$X|dXt z{7Py09v_hP&&jaluPW2xRFri03CUvTNmV$_Lf<?f9C{u{s|@a#MAx{;pUjkJ_O2}< z!c=grM4LJ^8XY*j7u`I2Ouc)=MAoLidn`y*X1SQ4YNzr3Ioj!%lI!q9iLwp_c5S?N zrQ*iQS>{pE9kyLm)7PI0^7jv~j~e-QuuUJgN*BC+I~eUr7pCfzl0n<ObNw^h(xEtt z!?9fw0JO0?$#7M}bQz!s|0m27WrK760qegDCiz?39dS1OhX<cnZA2Tnn-s6K@*>g% zuQPq`oPJ5bUO&3^4;Wy{zo0?TiTO$03G&3%HarV{bzeV@0joieP58y#3cZc6A^Miv zQyr}y*Fz*ImH98TFN78XLBsx=j4O5<DUFiBHHoYPv|QhyZ$VN|>AE|20%W*OUa@Ib z*JgxzncO`coEz#GHsvZnM2vdy&0KuQ9Sr4*V^I6&pvyhdn9$Y6LI&ZInrE)I-w3Pe z%WXLwC6ZTAqMO@d$a)A|{8lr4=5m`bHROY)z{Qbe2{9A=j;QvvE(Di%OdBn+Q^Um! z-du(W2a3w*`DVW7p6J9_<&Ahe@r$~;za86whN=t)Pkm<U)^pxGm%1EKe7q4ZmF{_( z)kr;5lBJyE-fxemA68GFXB=I5(xwF5=BY@ElTg{H`t%F#+2C*Db;UFN4TRjvN${MA z-?MP4cjeo9bwlyb)AGtIw43lxC+f&xdck*lH9%YcoF>(eJ7(d&-ReNK$HU2AhSdD$ zSC7RvJ0YdD4Yby-s<J`?@za%WJdP>@qGNk$GCn$+r)sDMq(_JbD=lUJJGohqZ_}9H zB5R|s7+yXdG~F*Sm$a}ZTs_=ZryF<@&r1_PqSSwaXSHfl^Sp23W500!zNk}Dzz|Ku z(*TRThqIpfS;UtX?ms?jl6C#Ry%zQ~oWcB-bbwDCO}*Xdx8PV{kAYgwx^zllVa|?S z&zk5m2tVq{uRM#{-?9`O=&aEBan!2+5KFQStoJLN_PK>+!tbdlV$p=zWSnhBy!5&X z_SM$p&p~k}%=i{fNv{INQE3tXFZgoOi@9UdL=^g5>h$$<=IbrE_RPDCQ7!WdUb_m# zU(ABB->id3o83ox&<U}<*t%bJ1!>%)c|Z7-&AcR8?nP$w(!as!tV?G10`ZDJv+PBo zKAYltHTZE@WMeYI9)bElu2lVu4152w`-J5WL-j9k`B9kQN7xgoMUY|jOsfH5Q9wc> z5c@k6&relX)>>Nc@85!86y0T&{hyM!3AF7x5XaC8I_(Hh1kXS7ECS&&QtiEbG5~LT z?sVt4kGsLc0Ho$<!#nc99;%2H4yo?|se>2|bU&rhLazFcocCvqNpe0XO#v|b-;n>K z4ZBnVT~&&D@4ex)+yI&ULfMX8>f5TnqE;AlXi-Zyg;3}%R(f}VPp<n^V)S&!zwX3j zUi6|$R8UdvA3hQOAfp|RZlCVc9DFYC=yD%I!RY)e*eJLLThwY}pRp`69k^gel{lja zl47|DClOAiDIW*f{hn)0SMRxZ;gXQV@;}wm$-wJCTY>6Zwz(-M?XC_;jNodBSUuon zv>ZZGo=zg!QqaOJFJSVw+fsK-J0|2V_}|!t#mQh#2H4<vZD%42=vm*<Vz?ZbR+6N$ zVI5kQg`e#4a@5<wt^(1UtA(x`KL+YwS~1uCs>WVy!p%)kd0Z_$j*+iG<<CXrFm@`m zy0$c|-W4Iy=i`t4A0#$pL~_T-5=(zQ#>GN3IpFbh#?6iR11ZXqs;017bB{Q^hBIOi zS(wWEdZ6ZA{qOA=pS^X%-Ap;DP#3>F9Hej$cbM=;YpA02{cpJMBi@7gzSAZeLv0Pr zDKK#b)b3;2rhaDxf|*S*Dl**y7rkz?CZyIAfo>dv2W}Bt)b()^bs)ZF^ZIYoS9OI| zd!htSt-GuKsfRnHb-5-&qauY>Osz6GMK>B+2eVEMYSX)417akGYreeQ^jow<fNQ_f zo-{8bwtZ&68FKE#LVg#FS=T+9r{^?T@@Ym!L&zx0SMo4ghj>Fm8(hlHVo-4B{b{cW z^H0lhQx&V@>M6+f!XZN<n`G_)P`&|OZ1Lwu<0SrGl1w*Zxib_%YGU3FIYWJq3b+m& zDfIH}TcKa9?d!<7(M=cp?5h)a%j}9o)34FO98b{5zQ0t09vW*B>x*xY6HTG(_8^t1 zv^(*H&~Tov3t$%TiSi~b9qOYpUvO7$w()pvu_${MZ@4RoY&u;n-?psc54`1cLlyd# zF6qmT++FXJ@WRnb!p-mdzs+2ll>c~#z6$(*66czf5`ztaE?P~MH|~?B=K*5j&#}UV z+O(E(j`jr~05{|OpQjenTMo}NO}@Ce*CtZ+Agm^_LqySun8E=P7bZdvuq1HnKV<&a zS}F}0FC^^B_GXeof6q46I=*ghWU9~k+}8~#(m!Z=xu8gy^H1;F&KWJ!pBCj*6IY}j zKi)1k%By-D?M|1#2IEDz|KQ9&@Wz|fGzx5^>s;<@;ky%It#3?92a<woi@*|(-bz^- zrMDZu=$yqr?KpB?uwVV%rXR(zt_TYesESC^heJDjJD%6Q{&Mcv@bmIkUtIQ6wsY}@ zkByJ)EKcc+M#yaBo5UaRu<e<aZA8#HGgS=+F?HHe4@ru9$&z5MM*7e~^ok@~{2$DW zZZLD84i<~yo|n1X?*gjKpIQKvuOsB2Rr_!YpeU7b0L^Lu?f{38PhDx<<im8&dOgF3 z-EWi!?hBf#9p7wa%^4`OKNnhcn(Ck;DoBdNSpw<`j))ggd42=&KNt)(ssT|@Qht^Y zx|Y0ysUx~x(2_hSr7*n0iql*kg8f@F<3jt@2b2L1M-|?GM<x|mdZ9GhQ($hU%4r2^ zX`ZiMX+L`8N3K2^GLEZ0YOD+66R)Y?pAOw>o1L+}_fYZ2TcVxw+J^*GA%quL-Vw5V z0Yz1Ku0?n9m1nyuY)Kyl1$$B_MK65)wZCfQ|FkFOCjMJ@_WdQ1fd%J((0uu$mct_# z0ikaRJ>ALKouWDcRLMdaDrp?hTU1*={Xr+cPP{T?ZpiP+1(3V=_r4I8xDx@iLABgC z=LG5+_|q~ohFFJ-9re_7QxQ=zk{iBQdFDH}%9SUYFaAPqd57H|+|1m`v^u+N)@!=0 zD#+Z|UM1lska~GRvhqI7`J-NX-6+%VyWqFC6Yc<wHGUF3OylP@{U1(NFk)N^2T=hu zq(3Qd#W)4pZs1#w!=J($o*<wOU(f3GTHWsMNdUAw<DA4?;srH3yERb8#s?sY$2|U! zTMHBl|2+C299rX$dt6Fb%6_vMGuJJqauCi09THY^Gf()z9f%TaYvc`GP6%H3NNcm| zbbU6|7GqMjUo!CJDj+;EyR7*94a0a(+tSnh2SDpeftm*nA4M`Qhup=zH%!DY_C>`# zrZ!zqD#J0HrM5F0q%!sYFFM<O+?H%!@*S597YtktbUW(j931)%MzoxNm+Q{<UvHhq z`*mVX`vHfRA-$`Gi3;w7uI7)$XY|`!9+wI5S3T|cmeY70q39d^j6lQ5HC(xLO0u}0 zSNsu7IKsb2xLqDBH2mZ1&6V@!M;(**<wSUf)Fd_Z#Sm5z{qEEQLt)P=f;>b=w%@W2 zP=>}9xMSb$-Fn11eY0{he@2tlSv`A3U_`u_)Je+rWIVT)==*=hXTFvLFZG~|5ey2e zrUn{vUG~#m#>$<Gznr_0i?P=xEN^n>KGuq1ucrGjfY`w;H@)X_W#T*}D^e_Y{n0kN zIJXAuD}c6u%2nt<bwA2x-<NX}n7J7sx@K#m3-m9c-5(zjA35EY=<v?IAkm9)+b@at z*<LS#-G4_*%d7~yk16DRlaFI9)`3t0nlFX1*06~e<RsPy0z&Zzm3N|JLuIL(mVCoJ zj26nel$5;)x8L)ZJEakpaCV#h3eZj^2d9jy9ZCJK)Lg+TCPsv4N&`7J&#n<v#g^>L zhT5BnO~+;L!r#RVgynDqeGFv;<(pS-*IS&I+cf4~L&3Ab@fI&g9G#dQ-^T?0gd4z+ zPMP+yV;%cq{|q7Q!Dw)ZacPwPuvw3mOlMu|g;?1ThtEZ@OWT$oMa37RAG|z-6=iK; zIK|9Jgm<MjhC2ElY|_?ssKb_6Y;>-`k@?KVj`$Vs8%m$EeNTf$`s=k#i{3LQ+<^1$ z+0G$<RpEx&Tx0yNY=p_RZF<DU|9RTbD+*fdw^SX7t|Hkh$4|S5cXwNMZeDINR>l96 z6lcRc0ezu1g<;DRl`2vyXGV*>{Qc}Dqz&xcp6Y!oUc3Dv!2%>EEV#r5+7E%J&yR6u zDGZQ2a&@51K4Y<HXJGb$f?&AD<j(<C&NDSPK6#k=eHd9r^=YTvHCD^sC}WMI0k+<+ zpdt_=I9}4!n&6>3ZrN?pr?=-uaWQw0j!X_;0@L+fk9h0Pc<XzJiX{j+h%xS#deFY> z(8rj2_2ZN;ujH=qq_3tmiytUJR9FeH8(@Haa_qtaHuZg2y`CbaVaMYquJy7nu7-53 zPIRU{Z(^E$`K<jS%TKn;X@CVno{^}fyE+8+O&qdg`Q4Skeao}01utkrv}iMuL2+~S z7Vivfm0zC+^mw;kQB8YqmCCFpLH`qKc_U%~N<b$B=^0aeof-OJ5^zG%>eu`I7R{{a zZBNIwk-*G4<{6gP{)dsV^8r^QQ*M{J6K|jU<CfGSG}?vb-KJ(V`|TM;mj!--5E(+p zTFS8)Q_!0rLhB=j*8TFEau>g=sca_ZbZO$e>ilmK1&6l_Jj@%F{aXJ$e=RkSQOmR> z5Z(WMz&`f-s@?2a_H}l^>3P2J&C}I4{XfRk5pov2e=Dq42OLM!GSc_BTqbkx#ojE- zwQCAl^jHV1Uyu!Q71wQ`Y})$4S|IQeRnAS>zKQ=ZsSADnrxY=4E(O!qo?cgHEHVd! zeJo7$3{F}8*XcI_$G>Dg#k~J?a#L2jQnh1ZQswu0*@TF7vcWR^S%iX`x&uQI=Lm)3 zn~x|5#f&lLU`;0X{&J24MQ6qPdTk`U0yUfxjN!*4W8yVkj98Vqq2iJ3isam0kNRlN z3a7?fzSuUm0(Fv|HXo}easK#}y_(vaBqr))_u}|ib;o$;;(=HC1J0}=nYj1aCkm^n zG0mVX(NZH>YRzX!LY)YHG*KsFkuy$f@vx6wGxj5s&u}~TaO=g7?8~X|NmhfE{E_*# z?9}Co_AR6n&5OR5wwi?Gkr2?_RjdCk>bnA6*e3z>;XiN4(yuR`MA(ZIA5sB{K?g7| zh#1TZ34xzdMzJ^|Rmj@l%1V4Vj$KH4w3u7pr-q6rqAN~J?tIEiIv)PTO^cq44*reo zaf2-!34X8DE;ae7Z%V9;de1E0SkY1=!>m%i%H|MJ=<z{W%g?`_cz;?wjY|&bUElmv zBbeEl5$0=@6hw)YhJIA=%10#TVyCs0FF<#y&Z5DNih26@zTbI^T(3;P@m-%eot?JJ zP(sw!HkcPoM&%U-mGnn_duxcxX#$0bL{RcswcqRAyJGp>`JRcBM-vM|tI)2-fzj## zL+i`r>b4SAnEj9Jcce$o5Ap22m>eqbN!_GJQ(JsA(Kz~)kP+OA7(8sxMiO-nN=I0x zQTzH1@z1upoUAh6$XT2ne>Dv7wHPN)7BsDZ{b=Op9|P5(Nus5^kB%3DTW_rRA6Di2 zraAmfL>hgo0RdFB<jO;VyNjeZy|Y%sI>)TK7Nq)g@}hT3K)E2usJa4{hCC0p0v*}_ z)*q6oK0kL$b+<X2xpU{`TIVhk3q8aFR>S2$?2w(4pd=Efpy)3nm@36x7M<BTx_5qH zaXwtsa#g!sMv*O)NRVveWx6MKrxP)@Pk5&l0?eNy1Qx-mN1R!tGkvLZv)ktToBF|* zcjc<nSyWuMK4_9>9=7!Xm3lo}4b^*1t?sI?74`0ef@xVW8a;dKau*!eCk%p}**8ZP z3o#S-=GcL1p9Vid^}WD!4}c>19tb5=mBi<3oGm4yqT!4li+}^X`m3_nYQ6lYEn%Ek zj-gPtFkO)DMvhCx8-jHk+;z&_tpvkN$^C`zf=gdQ6(;Iv1Of)`CW=^qX~OMj?Fi<f z@J@uN(j|x1m`Z`3`Bmr6Rr&9tm`{f&E<r<q3^^9J0jxM|Vq!L&pfEU+5UCNlz5VnP zkT6y8_rF5B>uH-Mwe^Vsa$VO<lYKEDv|w?<*v`FuL7x#7?ZbtGREPuRM{J2~UEP9d zc76Rm6+ZkV0Bhn`J++I8|83s`8F7y#gvPQ+egaGh_AUE@At4#RFi9TR-zU9@_qpan z8oh!$;x#(~(slN$G1#rA>pMo333@6cJ1JJQVK^A86bq~~3izm9@7~0=#O^`1bNL}- z^ONgOKO#Lu@U<l|JZ~_PJTq)4?O)131^LQ_xpVJdh^36H)H(z92kqId&%QjCJ{;+E zT^w**?Pcj|v0y~{Js=syz`qJvL0<dt1#bUhyIxIh4Nm-0XZic*2^Ppthuwl_LCc%e z!$-UJoGXWnpOphM(q0H=V@a~LzTT1uQ}#D(u6LPO5$(0Od91S<$yrEejc@bcbfa0u zYF00IFJfm-24h=}LPM+VOP>~(hjW0nu@okZ@AEw4Ktc<BbUeKk_(CPB?PCj5=DBoD z(p|Qvf1C~^3HY2`$OgSmXX%V_@u#t4!<~u>9mVe&qx&@OMjvoJC$}gt(MsBSBjx=d z_QW69JcUXFl?GFid<yvjS|}N121zS5r4j`v&V*tb5}vQ`Xe#nzC`e(|iRJ8<oZRVa zKOh(0UvZjiNxSl?!wEzemU<@yhUzyxezX~Tqgq*gb&_OOHHjKUYYIZt)r8YV@f|?i zI+-0)<uCA(1WfK!lFApjo|v(;M^W9XI13zJu)i>GFO+L!B0gXM=`8#hS3Dh^y<vEH z@R4-UzwUYkZA}=8^`?(Qua86WMPp@K7K6h(==ja+({%4Ah&NC@0<k-T3bM0DG1wO` zF(2PF{3vt`(AU6;!4)BLm!10~yJI})4Pqu$^Q(*r?}g*DgB1on0-q&?Ht15U%FXV+ zG--EK@bW-1d#cvGUA`dswAt%hr%mMnObJbl-u};|j<<fr20Y(azMQGMp<roT)d~O1 z0$RG*hnIdevWV3y3DGNos?mLmFRXq=i*qLwJp#$SEwau?KRW)splmUFL)>du|6Tz{ z!9q(1QKyzHBiM%4PVyV6-n+Y*68@*xDf82&78A7Grz4PvoQFbi&y>Jhsu<PCU%v!F zNWtXv(}Iv_eEhbpht<2Gr6#+>vu8BU=a+VjvVN2S2d`VZk0x6DClvwGEJ$HGhBZ?w zueu5EU=cr~bR7?;x-*vuH<}&?G*9tJnBidMTkBq1i&;RK3~6ia@nZIUJ$WaltpNm) zD84HMI4C9e<ydnPj6F8G=5K@wGiE=O4{+eiLP~P*%He7y;8K;#2!ePOj1VPjeiv{r zaJXBU>=3-3{QhL-oZ0Vcr!~_1dV~0MOzsTAeEoB_!+nM|{QPIQ0l8Ah!y{rI30q1{ zWwnTRbFZBPJN<Z}`8Zm(*7A$|2h09VvIjFe&P{cCyt#V33Kz09JNNH~{b!y8p$TH5 z;iR=s4PIW$9C<dRjIa%6eV0$AfdGtgV%@29!*7!5NQ+A7uzTFSf+1~?d``tT!taAK z=DzD9msfI^GS^Fs0YO5}GeIX;#{u0fH0HEC=qx;5O21OFI%_p9inWd3fjabWL&2QH z(|MFs3K$-&-->huge!y8LNYf?Mc3;lCO4Y{LbB|QO_E<{JPR9zi8?DlB1EE#!diqt zoyF!O8E*5lxs0$Lr4gX`vD&yzKbvzm^;0&Ol9@ZR0Mx%5>rr8(5`RqCL*lDE@ux}w z$7L{VEq&1GT=+}Uo9msMm><;)mB$~afLfh?;4?pF5K7PxUI2-Nv)2nxz&_x3WLzu7 zR+@s9P2f2Skh{+5)GIckdyC~am+{?tvnJXDDgj*8b9hnzEtwrIP|4);N<H(wjG516 zW%;z<8qJG4L+LVi>6E6#@+K#Y;A}{!cvkqchF3~__){Nsy#<{>stmVm`rdG!{;7;3 z^l~p6=pw-Vr>fr{LPMekj)IyR0c7OklYD*N!$S|!26oo2`d%)!u19W(uOsWEt5>J8 zH@78)b(~yGS0B-aSpibM@`*i!v5GDXzew+)-(f9{?44WjF{%9^e7VVNjxL_B{G;s# z6~&Rb)X_LF$U-G8|CoZm*|zkwDuUDWR#596Lu+6F(5j-h>DQ5<-*I(zw|DD>nb8AG z!FyZORC$YFxI#%p%QIeB?XGL-QAn4zB75RJ@N$;LRlv>h5$XMmM_Tl_Dy4Cq2qJfC zal#a<6!qn$N=0lO5-bf~>4U}08?*IM?e!(+)A>dzBszrU@HZ3ZJiE9q?1~-Kd?sC0 zLJ5K7=fa|UgZ+o&ArE#!p-Hw@SLa7Y)po?!bEMaBj1q6qb(b+ab1XZZPEJ!11FzJB z=Hkl!**W204y(X0Eo!D-((Crfm`=Gb<6q8NcA73L0NKI%j2Ik*&-(k$-OX3ZEx!nh z|1ETVe);f7exSyonFVSLRbvfyA#qZYxBCFqEJ(;8Fr84olPTX|8fHNLQR1w2Kf(be z)euPTy<U*KaPDmy8!W^EeX5W5RbiC=H8HWz@6TkEnw<IM_-kprGnKET4%4xcY}qm~ zngJg#vTyQbCwBG6YW6Q{go#9TeF*+6Oo8d=6BqyIr?y4gZNmYVEe6wm@s6}`CH+Qd z@(q~-GOE||h5}Y)(Y7CoMKl)j#ALU_`JpW>(15v8k0FwQ5$DyepAbx+z}~k2eeB;= zN;|p-X*`e_Ndst47ms`CPq0C`xwR^iz)PHTnUFR&?$pW5u7<z<pTHI}l|S9{pf;P~ zF6XCd{FQvKASV*;@g+@;9HYA)uM3Ij(CEwBd0UP`a-{|(5Xd_66u=WdXiV9VX9}H* zMiHop-^0=CLvD3w*|HgIVo~$iQqG9LJC8yXUcLC8g+^0jad6}(d@kGyOFr3Ys9lge zICZrC&)m`lGU>F(6v3j4tY|BZR@W!wU=+R|a}DmV_F&^99f&!pq7p@Fj^i{qf|p=W zp4`H%U$}&JxhTfn>f(%7$F~8&)dOC(vB^n^<oi#651*j$o`_ui&7S!5!nz3wi{HHD z%b&DisXU)>0TrvxnMfq^EYT{jXmg1{@~1_MWBUhOY$%(Jh{Nt3FE9sE13z2rJPN1l zH?8wj*s=d)Ar2>}nvQC;m_muchjCI4GX^Fia)oD}5{xo0DGT)Q`+TtAGJ%gmA!O>7 z7`@;GCc|FRn}uVY>AJ-ikxCz@NQ;7RR=HhP@PLO4x03-5KUbn{vRUMx52uS!<i`o) zSsKy%@s125`QY51t4fN}baxrjZaw@T29l=Pcsx{E(f9C-v6r7oeAbE?7kf~UIOoI? z>BG3^!)PWmGeVgZNVmg(8z0RP^urnpUxAITH<bb}T_;=GH`K8Q4zIrhSm4DVb|4zk z;w#YO6{$OnTr8hX(dyD_LsPz-+<4+g!tt*5CJN5Rv54<*imV?WLOo7f3ZHW#rqf`; zS)t*o3vt4`ZS|lGtQy0jm}{gYnFTEj?3K|&gc6k^-&m?ehLqSfpD%3BR$Cv(B8tsf zffG*%JXOCxHlTu?^6uH4S%DUrBn^<#NKlZM{o=Q5HD_N!oO}v=T8;Lx#xy!Dwv?xt z)MD~%YwXf+C-Lc;@rd39R2bmcnR8G?B1w9Aov?HhbdhWDTat9Ki#`{c1GCrfy@xb7 zMvIDm-v&IPppYUo;0YQ0I$d$9SlHM^@puS5%M3y!60lph8?4mJ<%ggb#a%N9MoT>4 z53Tf+42-%DKJm8dVCC?>0;%NDQ~8tJEun1mZJL)5tV-2_Kcg@zHxfw44g!Jc5!w_> z$=3t9hFQ(mlV1(pw$|QX?*7vwhjY)F{bn_j37aRT!idOektrk7_Qm?4kHATeY}C<# zH6-lL2Co|>VnmOyif>EbT^o3x$2<G(99(Fyc8khwp$lK^+bTxA5Tu>*>c?ZOb^`+P zmghCUyKnvS=sxmUOfO#!j|Bv$Q@`!c{t4~e;3tSM9L#X1Q|v)Jj22@ducvN8U{=R2 zWa|b5VFtT3cab4A<E}F$F3~HEf>GU%?kjMjexF*Y;q)H3etL`j!x`5z)fx3sg#gB7 zU&<`s_5gQ3vo~PTrq{`0*Z(f5X*VgbbJqXlWup1Q8)1K4)!6b&|6}O~_w8X5HzuE~ za3yInYW*^L6g(m;R--^<`J|*1YUwIqaHX#SCZz|&B=|{c%6&P)kt-(UE{^5LFtD%` z?gX#-$DPywi|gqC=^;{<{~~lPQY>VHo{_R^wO$E)fr<+a$r6+0G|*Fkl4;ecyivXy z>&sfr6(QDdGv3UpAwIA6NW@?i7P=xScGawhwj?mv)VTK^eXN3~6ylV>spC7_2K-Bb zKa2J^xGoI0E^mz}(^oC8A{J#;9$C>2IU}ojr}<WqZ5oJTxfb@seGi(UQEb@8ArvLK zv=921OBy6LhBd~GJ11n}oHZP46#_GTqD5Z~c`UCp8W4%P6iiA-JCsLA>MPr)J^s89 zHGH4Myi_gwmDZ!ilikkV|73qmaU%6?9%e`DVc0|cY?q7z3kCJ4pYLt;94T*c8t{?W zXm8#Hw;h-Q<qoyJe2KjFa?M(8KlqeW%K$DE8A;q}U*8rSOc%v-o5Fpqmlm2|OdS^n zTQsMmEl4*i<du?=`sKftNK;QP_P=H9jctB<bmaM+w*Vx3OhScCKu3X0n~TGBR2Zzv z)uNE;R;WD)2f;%_cFxuYR*NoWWoE;VZ|5f<LV@^0p?6*1;e!iOG7fUaK9CK=0@l2# z2(RooxHj<7qvc$I0i}}iroFX!i~O_oe|p<--tgC%xvt>yqDDVhztCP03T7&c*Vk)v zGs_TvPHudGNKoKPRdQjKLnQ%iyI9T~VQuh68q?_V+c8<PksfT3=gwv*c2~-53J_me zw0>q$uID7%(@&Yw9TWWs;)JM~25VJ|{@t<vt*AoT%ctWfnVR_qw4Z*t@avW#X>kC% zAVfL;ToweU(owje57i^n`23jF;rH3v<}Iye5P4vSmJJ)0JiFZwj6z$l5t}cB?4xKZ zis3FfoE(vlGf|Q+slyz-_kYh|ofVz%&b)iS=&_Te?JH%EyxJ!kbQr4{IRR*r72NLO zTHncoCKokUr14u+1{?T8gWtr#+!-^_eAtnVLMN9yJ6uOH<-G9g@S+njfoQmV3d$21 zSV0jvuF`;6Z7loexXRR<E1$m{VGSN(nW5J_)PcS0<zZ#zXm^{2|K#QzT^EZgAm=N? z=C!?_rqMn6ZQAsUKz&TGMgf+*Jb0~93%6`1*FaEF9vNHcfwfyhsz^YqA+H6r%Yzz% zH3FaU3YFg+%`S4l!mNz`#D~lg(4Qy64WJr5@-WAo1#uW`7YyinD0qobUPMjo$~fzt z2;#O60E6L6Vld+s{0weWDlQf+g{;$RLgaIjf(dU{cO~Cid{F16C^=`8^Z(ylu<$8_ zMK5xB`6a+uLy*%os50?f6j?qDqk;3}yVA`ymHmcPAZC2mUk;|r<^cX?TfKJcuzhd3 zLTI<*F7!1#$l>7wZH0kTa|BsbJ`77iFH@gaV6NzYXLnUmnV^-AXA!AtCAuNBpP|Mv zS5Lw?fv?%(vnvBc^72ma#_{>7qx4^9D@1@Zk!nsHkKEJ>fcQuyW1kviIvc#$sMbR< zlGnODuT&<VlNOTqf708IcoK`G(0B}2xXlm*>T+h#fF6b&-SEW_vO*punVFds=POuP z%!);neNZ`rf<A|{a#oe_`|kU{P4X;B7=ROOFc7f9BamrayS_L=v}9nV%jZM?JNqK3 z+gMAR#+z=cV1ORP0l{ZY5{Xme7%}7lwS+A;$j{q$LgV?NVR~y@TN&i|j2YdG-#Iu? zw4XSDc;DxzYNhEr>QZK{T%!=j)C#RzAFz3Ze@V|3mx{2y!n&u{0JL=i-21Rp$UWv4 zrNs$uQ60~CtgjJl2AV}sxI-mwpa);5p9Qo3GC8mYj%ioAqO6ubsbg5Ag5tS#vQA#S z&m2FJAvMO!L~=mH)G=H}N#LnFUnvMmgz~Oi<#U}Tyn#~{r(T$wXDyF;<j2y>CT15z zIx0@5X-oQlXQiW6_Sg_1knUINwk^;5T8ST5k<LNxB~jL9`^OJC5Ut7J2?Vi+mseg> z(+iEAF*h@Z(%=uP#c+>$F5z^7f$u)d`4~7Ew2TtVzndIMU*bXDvZENT+Z{<6%*BSm z)w;FPI(_aDnJxQIjHx#mXik%;Zk@I;WAH_;&Fk7lBs&oZ?;%Eyla;UOJBlJn=yB$t zGo7FUt;6MuLO-UQ)eAuO>V<%=hzNn-PBw3NVPa9;ST^E@npU-|qBApUMfw#9bS;Sa z=6eXIG-QSIR6v6#DK~IW^ly-Gi12Q&(qPjM=y%VQ7r9&M3e=5i@W8F!*g$<qunN&{ zqa2qPCc^1;8<`rDDmYocco`74`7R0vpDxTmt!Q*@=p+oE4Z_N~@Bdu9Ed0EY@e(oh zFiSDPKmjcln6In8y3%-g_|K83sc`+8{;Bc&Ik)LVx6Kl#Ln$jOB4Ef=4d(lzNuHx~ zn~u#$O0_MLg1d0(nr(fog>;l2gabyh!g<$TE;zCP^NLx_TaZNQb#T8P%e2R67Fnh~ za4oCAj>tg%=z>?!suejFoj*G|cn(Ay{~1Sh5RFCHd6<N%=>(3Ih#e=6>2G%G*j&eU zERUn(yrl;@`2<UvP@|+s8Vf%+jcuW{ey<J^PQAmr{AdljbESwMcNQvvFryizk;^@c zJ#jLE8IUIrRTnJg>W={Kg$B-D$i69QEGsO$yY&AK-a1(u=PhBU<Gk$q(seoNc>1+L z9S+}5X&TibWXN3n*A2M&Z`3oyJ+XdH!09OE?{!&=?{0v7vhF?&rQenkTXX3Inp~kw zb}GF13~@BEbd&Gp0#Qk&X-A)^{RqmCg|e~`{+P#cL4Q$qk8bvaEVh8aeTAR*|IA3o zP{26>5EkT4XxI^!d9gyk9N4yTzS9E3?^yJecKujh6IahYmj$q{+#ERE(&SDIvqX@F z?WMpxR5n5y9kgzGN|NJ02NWoCvUPWzy2}drd_tzvWu+FW`1?r(5d{F{`M#m|g0ixT z0q_4Ka;y6FL7F&z$p0LYx2op2>XJ;+_AmUoN7%_FHy#K-4u2Il0zdugE5VBJK4$bd z_Q)-t#4F)&9#c|P#oIsI8ww&oi(QTh1!`mlPG(+96#E>f1-0x<s4ca<7?tGFfAWx; zs8dO&h18v4l_*6})=(_8Iqo$_h)A|Tk~rw|Kef~q@VvLwXUenAE5Dlfg0TpS0Y&CG zRJTE#GDCXtSwY%rU5|=~S6sK2@C~GC_KX<2AK_<aW-iLrmd|@O6SRH<j|zUu>de{y zF}w(fdQq(W1DYcqFFvY_jg77#3HP{&USvLZ&A1B(V7p2`&<H)O_p`Wgx;UHv=Q6BY zS&i8m)vs0c2Ne!@tqc@c7SQ9Xea5G1B5az$4Ipg_a46NaFbuchk2zlKwM@a)V%-C3 zZ|clNb=JN#r*pl9K9<kYKhS^okV4#GKR-dyF6wPI)9*F3ZCZ+4lQ2IXw$@}IUVx8g z<hBBM{T%1!vWKd5|0e^`l~vB~e@4qA)44aYQ^@-JhQ(EDg@|0SI28{Tj5Fkw;V=ZZ zlz}MZRRp5d?T++pXXIEBYe-wb<!V68#U&ONjC`n%X1+#_*i05Xd#EL2$TKqs*Wyc! zR{|@4Xj|&gy+bMjqbgUj1QDc_M0%t`Fl6k+^e~aHyyfW0T{*oqiPw5AH2*gb+CqF= zdNupaA=887+0)*!%o*DtbdoN~?kR^FIsEqhYUlSqszH97z+^~#U%bEwQSAa%PGfI^ zLLtwYGen=bzA(p=@Q1ZbS^Ny`LOV|JIMtzef{-J|iqRDlLS!Lt)_4!+PgC_B((ba9 z7!mzE33i8S`4JewJiZwk5oBygFAFptzUvkBJQ8~Gl&)px|L3~$rxJZs!gBGSYHEE_ z#K64CdnifpZg!3f%o-#}8)-yDxFUe|GR=^6BQLs_Ne_Q)AB-GHlwI@VuGs{Y5!T~G zAPCeR%?)}|F5gNXxJ}oLMc!WHTw<zX(km=BKEWP;uk*b+bt;qt+5&@du;zd{QNWQt zUaq7vG{33SfbPrC{5&}YgvM^G^}~T?8)DE#Z;Q~lO1%IjNOM3)V{u#?EOdQX7-E+C z-Whu-TKyres+EAuZ%2+rH-57!+RzsBPp1pffBKJ(yhw>q*;3Ym!RsK;24G9UVmX-# zC~B3@kDHs@<1~BS-YM`zAhCAMXu@MzlqFL;w!$95+0+hoX7A;%WTVkA`XG)72nXa| zrgUIIvc*N6#l^nL(4{4<ox)$lR=wcri013{d9=^f+{+B{WBLbX2k&pbB3|rG3?Clj zj+MlV#lYVsZ5&9G5;yp!^tai|9nftth*9yYl*sUapu@yv0~7FqoEh>OFLp&n*DrBh zIL+uzQa#@J3t19x#?U9U^)|=T8<O2$m)xBT8MK~XjKKPlE-iRjRyTQPVK?Woe_*7) z*6Nkza(~?;;Ij~w=+fO!H8D48>+<aBO>=BOLEYB&@G2qZ*(fCp0@>UFotA|IZX^?M zE7p2*Vv$?!tPkeMKwS<Ul~sdc4Dn^D2V~HOQCn_CsT>50K?-dX^s2E;!Q=GFgPEkf zwg?%12wchYGSc%3N-eFyJMTo(doM$>`TXbXWi+7eTY7XD{)<Znp)obBl9o<VexMn% zq8L6~CRx8jsI-paw}gAS?z{532gzz!qU&OkI+<O~0q6MAXU*JrYE!PKiGCQv50syI z<sSzLo}l?;6qSh#62%KBm3VwrrDAfonvCk_$blndaUt)um$NoI$rdP<ZzLAV_Ver4 zz(UP(zlAEQiA(+N`Ho>AaAq{e1~9+;{ebKB_lf~y1_Z>!uYvR*lk!ERwL@Af2unWD z0R<0S{6b8YOBX4hxAa0*q)#mBOnUp~KqvS8dkUx7o9i?gTy-N(7RXrw&L};K9=M)* zaZlbhSqUtTg#2iW>m(x!p%j0)50M`3%+nMMd}4%VQMy(GDa3Nq;h-roN+Y^Gt{&Zb zIq!=oS|V<G%bQm_v&||T8cYO__BwkIgCTzteeqF_KNatAYNr%B@|)B^i=?E!x^38` zNRw%hXzSUz)}LkJO;w<H6D!XEK$ga&1$K-dQ|NLLyQi56!$Ks`b^Xf6Nx@&c6vlYH z<EGMWU;E5(i^{{(tHX_n|I-pV01YaoP%$QyrMA_^lOp9mqheTD3zQlR+WW@r&CSk| zHs#{AY%NL*G~f&N|APmiKUwS!K*M8f=|h(Dmzu7JN_h89Ji_$b7cvMqNN<<GzlPL= zl@J*f2DV<Lw{{o4xH~_&XPxUD%4t3=Qal2ty#wdSrwgul1G8gn^do58F{qb2GNDI5 z%8g*T-VMiub>xL=N0`W$wr->;3GXF&Lx|y@U6T|#4*Y9aq&8Y=&txoo0W9RK%+?5z zh(A_wY6U2Vj$KMbCnEkL_YrNUM(T0RP6PAG&|_pb@8Z$%9kr4XOuqu2Ra+k!Y80FN zcD})9uK3ey3aPKh=T7w}!`DPE%`5aEw4pfeJCEQ595&*DSMOHIKqrF(sP*UQwHvdB zq9VMLS#K8Oli!`o1GDH9s}549E1X4gv7j=R#qUT3BabvlK5VzIeV#r1D7~z4yZqP1 zwcL4?ZO@#zEr#p*(2jN`<8J~iUJxC8cMJh9*!SO`cX}P_zLJ|;#vD$<qGF#*gNdgB zC)|#&RUkk*Ih4j}+q>=32rXC#T=t%Z2V8RTB@z_ZF)7fYu+T*0(x1HnRgoWu=E+3Q zdguFYe?0cO++(>B_PX9|eRNL|+qpA@#S066wMr2`Lv7d^3nCB4$dMzb_THw{t-X8V z^z>@?>gS1PgK5aIr)y@~Dgc^EgbzP{i4Q~*S|N<*FA88-7=@D)Lu~3Vtq`TQ+zC?a zzC7jPVH@O2#FaYRR;h4YM<1J7ehxh=J6k<GUxZFPluh<TPA>X9CHVGxhWSZehaI9E zXC!@lM(rj#BqWLaIyE_myn6Q_nbdkQ`)ONyvbnrqd>9%%PXB1cWmG}`+kuVq1Vd6< z;o}E{U~=)73mpAf%h$)hPii>yQu9z)dVISJasX_)nrsWOCDfJhB?b%Oq2F|Mtx>Q{ zCu1M{jp~Ptepj9u+Z&LC5KQ|LFWLQx(bq+oX9*}ag=98@fp?g&BLA*<VIy*J|0SAs z8v!ynamu=iniMWRzM~Q73?La4ALjU77Wr(&g?~N2B>ZeMieWRY<pB}AVARR)WWtA6 zJ;KLVCpU)vfi^PDW{hf1iLWmUZMpS4i4pu1qZmx#yQcu(gd+4W&{_r}sm4V?@t4(q zk1Lg{Iq?*Xc=U0i!a6pegwKl$uG|??sRd6Va1xZYt(Nz4S-}q4s31!Q2qp|3R3*Br z&G52>@F!k~WBAuQ#N@a(^OVjfM2|i`{9+t4j*nX<q4hjfxX;4q7QH;%E7g#<+>$8% z<J^)Gd;kIjib#nNRjV<c{d2ieqYz=KSYeQaQLC4VBeT?4OHOL6BVsP#g{0RX7gcpV z_#D!tSU!pb9ovhcE{pAqy-g=Vb56xV36B%rU^tMl5j_wG+!Fm6-}i#;)q{?3D;}Fs zH#Hm(1Rr0ZW3%nFn}0+Zj8Ck9!8h~b6ZfjZ&f0wI*sefZNIc=m8Vcvd8NL+xmvT|= zvnu2YB_d}~*rS8HD1pdU1|NqwKJ;mBCdP~66cb2^)e?C<PwDh&pBs#U!;~s0;~-jN zL=?(FP#}eX;*y@ljze=06G**MD?lZycc9uEyXH*WYoq737Ae|X{qurA>Vdx$n0s|H z(6%NH#;*7aNufcT?GPefPIcb@uy=~TmSE{+v6_U9XhKNBDCzj3ZY`1kJfhb|gD&!4 z8l^M!T7L$_Jci~kh*c$HIuHDdccpXS<l?`uZc!5Cz`?{pB@q4+<eQFs0{kElCq3&U z&ygi%y!$wJlJBvSRp-{u2I%ETYRi;OM1V>-OktAuGTSN_d*jrLDqXj+CLdrPGJX)I z?1d!U%0W!`0Lfon@jn@<{5&FeA6|ognxJ=N%{g0<=#lSv0=v0ZCe%qn#zFD+_ZA)g z!~(K|=`swS>tb31A&bxDV`~wbMk-_NO1I6VIQ&LoY!O2^y1ka~?o+@M(N9vXl3Zy+ z5(reD@}joomnYR7%mO)@epZzUrYj779GO~eM-&_LWAdCaC<0Y|eR4L&Sj^7AqQNSi z!*DN<V2;zah1Y~}5x;3SsD(>Arg-($XvF}D*Z(qT%4+T@JG@XwANhiKL^VyG-HKT8 z3vO1Vq>;(prb@DPEx>2+oSTdD`ev(_BIR^vG?D{uV?;>0OQu3)3y)_@7?`{K3WAUs z7?B+7Vkr=u!sgSEc%wrdp9QcRls|7zfLf>Ju0Gt><7KF<4=nqoG1(019J+kqGy?^z z$E|57)tL(#x)yE{5rkstt&7<Wr{fGDz@_i6!h(I#=+&kb@0Ozp_LlM1lV9a~*#A&O zQ6wmo@%V)TR9iBl<8{JU<n4#8`S@-FJyqS&BV$v+F=IupySq-G^Q#<+-z&0NwHr`_ zz@;U|cfvZL=^@bmUI*e3bxLwj92!Ny$9ET-7>s|vj>x79%ueETZ8DeTOiV751A3!2 zNxfh<a`d+GT8GFqog2pWUg?DW?IM1G2Ax@R^Jf|Ygmx$ZRI_KQ;gTt8@8Z0RZ`4h| zM7UPHCC<MsXY?;tao2rZ3<`4sdwyH>GIGneY9Wai-4K2FHwAn=?_p0v!t5B%OI4LB zM(-}sW$mWMJO7v^|90N}pfryW;t-`t6GJ40JU)_+JV=bgFXEd5?T><psD{te&oJ@f z6Ib-`+cn3QQ(TXP2^H`z9N;|c?2p;g<Vh_!gI-xr9H5>N00>4NYAx82Hf3xQttEoP zOQp8CkrKqS#)F0B!Gp#^ap~Or69=sul<qhJs~8?SpRH{Zc55fE^OXrN75#?$XS>n0 z-vf(F>!RYLUjy~+hjMbuNQfI47xsY2nN=wT&1RF6&Sr$Krl+V0*5@<Q!)n1@aJL+4 zp~tA8#EoGgVpfAK1fcevC&9=5Mq$W~2PnQ`CWkf<K5?<7dLA4s0G>FQm*k|>;5<yy z*k!^Kp6dA2BcaCm20?`H0G>UN7m3h&j6%KPYMcZjlh43m`<tE;rI*mUB~IsYI$|F$ zS9-zzxK_Ph2}q+A0$G1nlW;A**T>eXsCNb<hI|WJ_B0}%fM)n%3!hb$%?@8}guxJr zK?daH1Q<v%A0~--DXFc$1>B)=%w3?QT%1VkzHP$##vQI<7V(4g+wjvMrp*vN+z1c2 z12ZsQ$CxZZ0lCI9dCg8ILJLTQ<<r}<T6G82MzXoy!<3bgDH#|@X3*2rI*KR-0Timg zaE+a`Mu}C6JyK&{-?PKLcti;&3s21|!TDB@bzVM!1%(zX;5=BqBVQTL49{-86w#83 zk-NB&eXYb6mc26@YpohPzf_{Xw!N+3qC?78AaZ`buQu^TetUE?m%d!7Uc?o7{IquP z6$T-qi5?`+hZeUksjhAL(`yhI@YyEZqH@Sa{tUKCLlA{JO9t07DN0iZ^HPbCiRo%j zVCK2om5nS=;rRTIT*ZL-{^fnqUF3>r0T~M-o`TE0(^s?{su4AD=M!_?i*AR<EAu`i z33?6=4sGwgyU6>OF;AFJ5rKH9qt|XxqWGwF%Mx@26UkzGD}8?Kr|Ay8w9){5nP_1W zYCU92;x~WA?Ijy%pXE=TYD2Dlu*#kV9cSe$!AkuOk<<EBoR!&wFn-NK$m$^Nj{(5a zzbH5txJCtr982FS(VD8Uq$LQCWmfEVLnZgYGc`yjx#QH}acUU{MoJ-@<*m#U76CG# zxueeTy}{}iacW(08eEoYIHk91#@i{&C^4&PpKgKvkT?I1y!Y9v5M7`LQ+PZoHcGS` z5~8IMs3aZ8&aDG(QIRGKcT9`-5~>{=RV*y(EPpZ;WI&KbG8+6oQ+`O-tCmaci#nXB zGo$FA7bfE1(2yKSZbO9KXG4xZg%xP|a2ysWH6g4bX~>c0CWRYPdjmyNe-GnWJ=N14 z$yL(CP<Q@uJ^t`r2Z?&$^P1^3IkL&8d{TShAvlIWNExyuL<zql!`U{?cddsc`tak9 zAuQAFZpYvK8LSk5dk`X*6bT}^6ee=dn&Y(u9IcZ&4T(X@3Nd)di2NCaRuph**p&zZ z!_IvfWuB9_tY%)-<9{e&*iJbQ!v*rQmi;FBx2v9))p4s~Q+kT+amKMEWB?-Y2cx!I zVG9%G(fYNt1LrZaPKn?inVb~2^`?u(d)VqrD<L(}_v7<jUjAThMuLCryVOBf{SRU} zZ@W1{LF`}OKz>ss=%t9-4<*bLJ(&W5W>3O@TRywD&kt3iH+CXBlvw%0F#G%NmSO3F zR94}{5q)M}ACxD91o&Iu3@jIJ$x=i@5(qR}wa%SrqjJVMYLEYrQT{tplFveR`VPo@ z*uV~>Fg?rTtsnYc$t4DSDOj?kSZYvmWIYw*f5V%?BCLGDguJZz;x5#RX_h?J8b#>% zJ`Mw;OS*XT52+oFmj4ro1{iIbY$i3#7z6VieJ1ZQX=p?il;otKrO_K(`Q~0xjuu5( z(Qw0>d+7;I01pT&s0N+Ybs+km(s!5Ly_(moJpE~ic{KWX3ZM6Vobc=fOaY##k$G|v zJ!&+%PNda|-f4`NRSBR50-(RTj0O~ALboqd;P2Dobg%F$G_PXv83ytwh3nbTk-k^9 zE_sB$pw2JKQliHo1&|Vb%Z}#k3C<oP@b|w<XCv)W40=4eE7MDfN%<s#U|VZr1zTJI ziSI}szy57e=Gabz_Gt^AHa+<>z0D(htePFo;gdhqmH(FUPK>Als9=B2w~QB&+DC5n z;trPIu&Q+CyW`bNK5&f|#kEb?ZBGo69UrC8aUz4AMVLio_fJU(qK8o61cIzpy7=_~ z`S;WCm6bDQyW4{begy33k54+Ix`SkUTf)SamVDFT4zq?39arf8G@@9UJ~JO$qy2<Y z6OBksqNK{$^JA%|XRxAOy<yk>2DKDPMZ<;HZH>j0P}1o&A;+gcu=rOurG9bMZ&Oh7 z$%?<Pr@il7h%UbkkbDFU@pza2O4|1!z;j3$?6c3CyUo6@w{&rd0@yldt%J{=(RCu; zejOVVjq9Ywu779up73Tc#?uHi93BwBjJ%630)1kBy2zFOWnYf#-|ocopgloPadwAx zhYuW0;uvM`S6BXVqyCcEl(Bqnp-I6$!ye|3cmikf>z@9RqrdCQWdV|d%*leH?dCXd zWY8{_C>zWlYf#A2Cj<sq9dnt`@i~A0uznVhAFPeEWAhSr6Az$4f5#Qx0Qm`1zE`IC zd|QY>xt5{b;5IOwzpfi?13|mT#yR2PdG)*u@Ed~F6riWP?32)Z(<?>B@xVr?@M7r* z&?kQfVkcA3ata&&Q}*o1)W<zJNGD=Y8L9&oB@zu;S+Pq3VzZQJ+CP4wC_3?$;lfu{ zmdphAqvPYe+FB|dxhpYWU*D0RKP5M=wY9Y!9zX7&GBgb=EaduNR2g(559o<MN>pOj zdA5ZqRcj?9e+L+#doflnW~RwId#u)``r!xD2J%1Mzthswxy_&~(-l^d78?xUX<W<u z^`78KLQ5KS_(WZehjz!+Ye|*UqmYNQqaxF^(B4VHxymB}fu>WlZiFbQAmj@|^yrHO zu@mU-lb<2l>36i(CXbK3q<7n}<EdpBWByF)VKwf_v^y!aps9G4;*Kh+zL75}7tRE! z5W76yKp7A9@PURw;t<Opkf+wX=<+ZuadI=zol+Oa=RQFTcUOcJ$hw|4l7^Iz6#@^A z-D^s-vLpG+JbGt3<321yA$gn|&a41bV1Aw`2Xb(7>IC{qz1MB$&hl9>)oG|%**S^X zODVI8VH)<)2^*!vpR5ALdE~Dd4MLGx5~3N=<+Alwoz06(@Pt<3SmBrp=HIfi1UWB9 zXjzCueR<JLq)#U+7Tbv#o?YIvPN5^W`GY_Vj@(_PR0Y+!%*Fs6OZ}&N|4e1o>~e^! zEc<ead)VtYyE4cTGbzydqewX!OPuyf^!35BY<ZacG~rxfT;cOh$M4*oLWboojz6Tv z!OXx8C|FxM16_D$RK<sY_Yd!A@b=dnc>K~^bnvkA56cPj#jeusOB&(5Yc!m%{^^XQ zsrQWMB+xcdNvHZQWkS=?V!>0Af^`@=U4`O{>&$f0?trlB+MkizXx~QuQ0hhA__hjy zoQ6L>5YFf^XELYI!500`ZwtNcH2z9zZ!wZPE5+;VeE}e5PU9ciGrfOB9v>g?F<-mB zp3WeBy!?!!C&`b@Z0xl)9X!LlG)B0G<Bi*E;kDbo&cIxAD;Z(ib-uti>X&uG|BW1C z^0dKrx>rl=;gVl9Q14Id?%hRTyXc3lnqW#`!`J#@J^g06knL{Tx0bnLK=t$q+KHk2 zy|k(w%AT)wCo56u>r!@H?C(>pQu=}i+Wx=RzA`H6_j!BiZk29Cx=SRNMnXcmOL0kQ zsa0B9N<e8)M7kRR>F$!05RmTt-z(qWtLN>*Ih+L!``J4uuDNE02RC4CZO!@bZ99p2 zMq#0S$Gp0_I)M;4d!4lYR14<=9@xRWdC_$tL`-sX_pyhqG$T_YwNfV1c6lM+sn>5b z4sdX&+l*QeP_tjR?W<Q5r$@WsX81|Z&F=iF=LNGid=>}c!;TKpbYbkE!K1`^e5BAn z&`VLn1NAiN{JQk4-}gUsIEW3tV$G~@JMgyXSsL>ba;xW&BGjVllP1)b-?t71-oD&C z74kd%Pn)oSj)A{PGt&=aaY4KI_3(T$Muzu1^JIx2XXT&x#EJaMOoNiq95ijk9Ki7z z`Elxd-dAWm28^|cqo=cPd8b%-NJTa7IhEzT<rYFheaA%`La34?dA=BoCq~`(PxBaU zt62S7L~FNt6d=1UlCEE_#VgOL!MpVpE>!)-@}CgoaxbdisS7_p0fYW+aZid)QA9uT z?G`gZaN)v#Mh0^^Xh!KwTMo`!xbNS^e?xk=Wh`pUJ$8|p7;RxDuvY-C#U5@kp4Htm z`S_A?CkhQcco&w>713*70)bJ+9)T`zzoUcX$-J%F_n(Up872#Pn{j_m&ID>x7ANgT zF6)E?x8C5s@8U>?XVg=Se<vc_5C=OjD*R%{B<EA{03B&Ps(TRU_5}Fk7{>fNp{rt% zRrm{hERFw_v)z2dxrGslh<-Pn#(KmdYpfP;ho{^gFY0iM@dh_(8*$g2UcQHDm#x;h z;CuS(rM>;nwf<D@Dq`NaWL&=cuZ6N163hkmn2*%4T=M^0h`gbR385w1#ZVRIfco7g zN>H&2*?o6D(rs(P7?)3kyqhj0Pii2~BEp5}N96`LRX>c4{7xOVq7aDj*sdFtTA<N* zF24PS>i~ub<)U^e>ZXhR^m$M=G@oq6DF1|T&4aQ{MG_q(((spW{Q2{E*AiTk?Als# zT_b0-l$4Ybi=Xcgg(eWm1r|TC=fKDza3EtVs;ZVjgEV;<Y%8!l=8K+@kmd5-lj}Ue z<ZH`Lk!$4dSj)>6{V9SqtBHmsHvJS<e95-;Q9(GQ7E7%`HRo%o1q-v~F9-|_4GW0c zs;a7zk4EIW={$mFEmy?+bkEjDp3w~|R7Y)+f&Gp#To@S<44{=mU_J;t2e-`^BJu0j zFY!&aRAI-Cwf^kM>3*AXy=n()1k;+ssK%*dey?)UBpg=USasp%=;$b@T;qM}07kE- zWaWB~27h(83JY^F)5-8X-FuO>mA1ezZzR_s!INNXgh;^<w);3lmKpPl^8KGgR!>fX zeZx<8>Wx5l*#mSBQ-M`DW`Q};Yu5OK9LxDeN}wQ*9>3sJhr6hvPX~p`5jx_o+D(%E zwqxrMA=MdgNCe>v{!gf_Jf!3vbIurG;-$8uc{rLk@(czFXI+fZK(OG=Ry(F|GK{T% zz%9#_uj(jA-|28x)N+e(K3Sq3Bzp`|S9|tu_Z!jk{~Q)vog$;K&rduoW~=N;6VC7y znB#u@tzL*iNF~tpwgaeo-urFxpQV{Uv^!y5Yt-@{cjC={`6Z|*p<o5(S<@-SV=cDE z+v@9xT4E_y+!jD7<a7Uei<Wl9gZ=JCV0|~N#z)Kz&N^!PK<B$2!gf%VGput-NK)N! z<UAec?OKS7^$dP3T*M3gLvct(HapY6xv{&w-v^%dNs!_Kh>27flglWs`ZJJ2M1e}Q zU(mwCADWhyb_wyhu)DOMZy*N~@63*txOmFy$GATvLts9dr&_sCmswwbnLpzwdyFs^ z=r15fLh?ukXp6}+gG0_H^O1rhmBPf|6yHNx>+yc1G#J$ks;<Q5mHe8i>1;VGi)%Ju zbZd)@mARd1WznobY%H@M^zNRx5VinKjojbgPkQaTD?8QfFFEmDpTrtJni-Bkq!Lin zF%?IWmLE&O`?fcn0sex0=86m+t;S^WKzZ?FXG^>C=v=Vbw{ts7SNhN^@ji9tf2-vZ zg)Bmp#n7kG*ti4?B&e1a2}0)Kh?eOwzHP(Ku%9J_wzvWQ%-ak$C^Dn2f)moc=Cl21 zf2Q~Xne>~B1y0H<a^*LRlTb`g1R)c7;S?f;#BkkBa5KN#$+7h&cMNp6{)y@eD?CkB z7PlnpIEgg9IglO|;61xS<SGQ^mXp6sU({yX6B8yLJ-R&`3X!l&op_S)0j1-a=1!%G z%WS&epQjkAqg1aO1&h05ZuucoOIxUrpNY}F+toRQyV$uR#49qH&vudbraEsni|Ytw zDbeV9Wb3+iUGJ{77`B<W_Y*`BTLl^~)WX8T710wY_oH%f55Ai=-v~F~Uhhgue1M2X zp)iyoeT011P*cc671hLg^dQ_)M4D0#613~B!}9TjW#tUQ2F2_w;}Azes=$b%Z+%M3 z7mSi&0UYH~Mg~AnHNWvE<ABq^B_MBbZ>f%#(ybXRfHR7)s|P|LJJaP~QmCAZfME%2 zPG70hsM5XbU4PnAJzSvnJ_)@Qb6M+a3Jwk~KwpTq)`!qlObEfr=yC|*6EmX*-j$b6 zSyfqsuqC+!QF{`t@z`I29op)CzcK~+2@OLgVl%kZ<_{*+)XP|0M`poc?UfafDl(b` zB@`>2*rMceNUkkovIYMrLV^gP%GStCZM<wtWH*bj34>@BI5bodk{Q2A1jQ9GfxRof z{&BccyLbDkZ1)n#FaCZf`j^4AT|n6oAcVBi-_qI9(SRpAH7JOC0B*3v+R9pAvQ~ee zaqa7eh)cdzRF4lPC02YL0<(PyTHUmCLVQY3F01TiVD?z_%bF}pFjLsyCr!Ig0?>wd zaAlOuS@Tsg<FOw;eU-(Bjx|F_&-5;)wZhU}1)E+m?!>1U8u(%5tnvevHOoRwPogHP zs;E4KTsgrhabYwJ6N=eZ_C4?e^d$rJyh68|`1>LyWvn(HJJwu#7F$BIIA%qe2j~WA z@OAH@reH#uq{nP+kZ<eS=yU?;f#g^zKDfpVN_*nz3pu#_DF5tM9%c$8J4eUPJk`_z z@1zJIv!Y=3i&=8v@^&i|b8`_0f8#xSk;sDP6p9%y+yRuT9Y_^cC(^)%GpNou|I*CW zEUGEO8KhkF2hOY}_Ees=e${<`l~M5dE8Y*0;?Y?KGB7hH3@GxF1ytLP#7&c)u3G%e z7lFgKM8PcS(Ktr=R`z9~ths@3q4?P1$RX;-Z>+ld$H!N5wD}y86ALTVSCwnES#^7U zXcw8fY3JU{(dNOEc}TpUBcLins7THiZ6+#w7A=h#-)rqzBn--i(%JQv5x?EV@=W`J zbcDsb=PA?uV?HH-ur*&~bzndZcv5`=2phT<({m#;1UM%IDoV|BK!+~{f#j*f8z6lc zmHz+(5JQ%&e3}DzMb5pP)fu(5UVN9NFNkE3cEg+Kb5-;bA0}wBBq-lUeh%@T5_ErF zi$aC8WSEyg$eW8h`1WhqYa*g}ZIo#GGQ2jP+<2Cx-lFw4_|n;$&KSEGy*%b0^I$19 ztTfTNig8C`+^o6V)PL9bk}K$QD{?i#NnSrUN#=moYSIwL3gDvTSziR3KUfZvMMrLR z`xH-@RevJCQYuoBn|a*Al0k^f`vf2JeUV}CEZjFZl1e%31KS~G;+<+Fotd32b@)}M z^m#{|(%#<Qb2;o$M*|Jd<}*H!W&EZDbgJFF0f)F<{B$k=nEomq6s^(pAJKQv;YLM( zaw+546uebuuqEZr(fe-QOC}30=<pkb1&K*9&hSZZemqntj+$7I1ln@yix-os!VFkh zQPf*-Lim;!gve(>K`2g6G~wNrSCcuJ14As25-c+;xc_(PR}l6mgxE5`=kywApqNyW zepJX@VuNTwmQ2K00s;ap&Qu?ub$?W5MrKHJfD{Up%GG?kA|ivz^H~{`xiP)8`k2RZ z54*>WiawBz;hi~|B6FNfR;H#hX7@G5ofVA*tVSA8?u1&4_?WVfF<Okz2B~4EZmY!W za1ASRbY|u~*mPALq1O*u3L#BM5Vz@1F~PE>+6TGuq8~o-FodFTH;ZYq-pjD5tI&y9 z>;Eilw2Z36+U-U?c<iIAjAZ>$ugn!IkWj>F5mK>>@tR52%B;ycC85r4!qrF@_)0U- zP$HQZrJfOiggL%{z0-8VcC0l<8OVa)>YDoAU)3bnR8nNk77Uo-iO^*JTvovha1RoK zcA*+nhIh6pJdx7Y7CEwPap<8#se|?1R;>}!?sG2UrkG2z$S?ILVkQ}4Bu(7g|JhzD zAHSsgy)pPr&{D$?1%QBcF%#enRUUTBmc_!pVw+WQ;pE>7Bs72+1jn+{qjL1N_ps|& zEF4}Eb`R;jl87$Jt3%BYoASx>6`%b1ZM-11cXjdd2L3Wt6MNrE6WG6z%y3NQx|+5~ zX<2aSYqlek5Fyc`EqpQ=WvpJl%y<Ef@-$wy*cB1MOA=|e=LviBK23z`OryNLd}5OY zMXb?z@YRf$=>k^TII(y53l{>qDDl6&;eBYYvMkz!^@4G7Z(xJlZCX^3HPe?CIg5fE zFnfUFXug3p2TNWBNFqkPd<|QOj*7y^#B8@H4U2g4o%~gy^YxQr1z`PW`3oW|$y!k` zgH#-%@M+C7-%ZykUaHO?2&>aol-intAfAuaP4si3PM?lu&!#|0JhAVEewZ(ZQJ zYJTmtl7f7H_>?X%!&B^S(|m(5$9-Sc+%J{Ewgz8&$MHh5D1K1L`Jvo7w4`i6&uZ!P zSo3U66sEqMaC#suw72!g6+77Wom5Yi9eMb)A9L!@IWL#tp&|Hu8jXOEP*!Ovk$;^t z;{$Gkh~}DGKe5|Z2@aErmzvCc#*=cQpWoV&4WSft!v+56ajdOwZuMK`zMJ>i4eW5D z!U&T^25Cu6k~ye2tho(!Mgs@FwC6tDvG_gJm|(g;zrCiy$}lGb1AQC%PQ`rCg}A#0 zVEhq2jwZI$foB}OP-A2FP{@O)pCEla{75E|y?_=Y;&ZlF5!DQ=-Y}XvGRzN;iNly4 za2ha`yO9S}$nz!37D<HYm)ra}^#!V5IrkmHS<uiTX*#JkZL4>z!|IHp4iM|KLZ?Sf z<Tj1c<9J}TmNEhF=TWuqv~ckC#jiE`JY>)tJHdnx3d+61Tq(=#jZu1G#)6V)i#Mgx z#xz^?`Qk#f@7323h;}?~wl83wGkjKKOjgF9+T7fX?Y1hl>L#Yob>-+iAm#WNZD-6} zBhNsloLR&bVpmmExBB{6@yqDdn)yd^hysF+PpFmbB{p*Q_wQelWD66jE~5J?y(&Uu zlLek)=Cn`V#A63R^)KHjqL-|QY;11J9zIFgR{(5~jh#OohnFX4m6xr@&QMINk>pL+ zotK0}Iq@HbJ-FylUy_v`R_3{isvg%;^{ny%##-*nz(m;nFYkVc`(``a3?@f{xhpOY z)%95!Ft2WIO6NEqjIplP6>-ZxTalBJ!hF2wlV=;abzht;7-`{DiFNf+9IK^{Wj0z1 zKkle%`^w9Y<Ahd3A)TptVMRM!eusBHa$oy2B2%^Lat8~G4x)~EkF!_#_v>S}q~4$E zu2j0YuWR2emHFh#zIgG7tM)hX+?y@${SILh^ijUcEeJMU+`uA+<eBs{%xSXomFKWX zXeOl7IU}Az$gBNOOp%@?sXzhbr-;Up53{Wg8p8QssL8y4tI_Qv5&b$Bw~a4gfJ)#@ z6ce31zTbwPE~eY69nM5VEE6~)p!)l@+nyM$GV2jQBJ1mC0S*FcPw3?mvt}Ey)(4xz zD?oh&-{TvVQK<`D#Ks^>72qWP>5(e37DLMq2?#Y}l>?oX*87qz1qRZr)BkL17H#Rw zWvD7VPd<?>b@_Ai$bBB&%oe!@HvV0|@{1_y;*#91XXk@LLEv)(`a=k35a_<i@t_TF z*XPj#lh;au=T;(0D$H@B3CcgpICDm9=>yw=v!i_q;0I#tMW2dlT6s~y64`-B;rUSO z-ozgQk>;J4fdeDSuA<+}S=bzMO(BBlkMgu9PioVGZ7D=N_nzOwM$=XLGng){`?f-K zZh|?G5HxNY8mqu;qDAGh<R!`1e!n1ghd=}=1Mj=SRL0P7*6LHou~_u`AZSBoCLroG z3~y|13IKSa*k{4R|LpV@P;KiWb0R&D6OpHU&J-l;U}5pX!<CaXGmYNDb@laaCotkD zEoso9F`#yREp->IgxuITwFr3aoNZ|um@f;1)@z4E->Qf*1`$eSI(8MgtPT9Q@;V%z zn26HMM{UCl-1XRLAOZ5CXv-ppHxyGX7uh;l@x{o9`}Q};s|8vU2)~<?FF`Q*cOu-p zq#(zS=oB`BU->_O&YPG~Vj}Lc+4`1i3Ucc6nf}{4G8^=a_=AIUA6lZH3ws^H6ujPP zOF(H)Cxag2a*AH!L`arfsZIA<8inUQR}@A8=TKC%Riah;x_;gVsj*QU;^bI!`^}T@ z@rTssA!AL^vV2JNsKHN9^_s3U`#$qy07<$hM$p*U2z;>$`>A~qm0pVDtd)I{cyl@; z^_a|yNx@fzA@^HUgeX-so`wlGpZANnZQgtH#`~A@PeD>n1B;ic6QJJvXDhxiJ0UGq z%~DI=98D#^#ecQ{nN5$EUyY+Os}k#TS1JXnsdDe!xWU`FdlsbvAo4;mav?}4t|E(} z<>+^4sS~N~CUH7voH@pcR&q2|YFPt14un`W5Zi*zPd*m+;YMeLjlmQWsUJf#aOHqR zPFrUrijE^hJ~uxpjPI?v*euus-Xj%cZ@YXDwDQ%a`eM-F1<Il*c36O{Er!?@Go-Nq zkZsPH!_VqzLg&W*qPV@u_wpHAlK3nikcOW$IQkRp?f;Hc*&8SIw;aF2wBmT6z}F2z z>j<1h<q2q6B5P<!37}2^#);#|5IdnKv2AsX$(iQg&Xrj6Jui+-p`ky6ZK14{-2AYK zYj($mKOyB5n>fV{7w-=@3otOKwEU092|OfDjY#3tkP~Ir;n`WBAdUN3gm6(_47ehr zeEC3&=x7?!sJL*dVQR`fe~?(6p~vw<08d=g-I*cwEA!{0<KxWgYS4rh90Z?sV%}jG zVffE>!AT<$SzOhpmrXRK?UBrY3Ii$^1kiL~)+O|%3KJx&pr@^CNGyccx~x$onY^*( zpou2M8x5p>Fc{To5!z{am3N0s+8|di_&q_mS-?!|53TgIv<3~}Ngi+KD;nj*$S7Bd zUHad6-G@_3qYgTsaNSk{Hy6;^t2O_`Ls*nhALer4Gg<=p2+8w|!`e(o?sCw3b{0R9 z;YF)}D*tD-0LYZPUHbta0M;Jr6dDNTc<fKVy8o&$C=-`IZa^vye>Fn>fm9)|B0?V# z^T;4o*i&NQQ%Ql0feL2f)P9lPB<^al1%8t^`*ICOBTsAAQec2>)1t>Q;3#qzoXtZ( zbYj;>qf-rD{6dcNKGH^qoYixD^D-xL{$9J@j%b9kgNQ!LC-Wyi-l0PbRYo~>eAmcd zj0+Zgh%8_48ZXf81kw2KhrYh6NLjAO;~|hS6zL<b&uW%|t^FFPPDz42Gh(a{?Plc} zVx?-0m={hzYYmFU$;8BzkxRuB0dRy<*Tide{>O5na_%!{HqYyP+9KpVCU}wDWV5Ay z;gCKr&h5d_2|*%u(5(sAy$2!0m%|<71+?WHIEnVUyTH)yt=d0pBk(WLX7MS}<S-#G zBAOf9ORTn|ADKDy8LYA^XySS#Hpmb0)EMJVQ*4QvzOn&v5r_w}IhhS4Rmi>-I8u)& zj8pj#(WMdWo%{{%JX`soh*G<0J`R&IGN2?d(Y`()hSo@4P7faZGB!3DB4@l$3T+1o z;@0{oLbFv05gFnKwS&KcZjSv=X>Nw2Uw$k++>7>$@3krCi|b~gM+Nm$)Ijkpdx$9G zdBKtpWYEWYrGs9-2a3tGj76uH{t=}_AhkQoh6KZZZ>&nw)D(w^6Q42SG2{v2Z6lyM zN<c-hy?zNNj>5^d{+qqq>t@=JOH+ORu{Hid3GbDI)n0(iOUw^T<Kf}Gnl7_01?uBD zqkphw2`7L(lJDw^(2vQZfEbVj<0QJ@L0tN$F7t)22GkmEz=qW|cDp}+wI;l>uZzF^ zZTi-P^|vJyyT*D@(sM6^G`cg=i0je8d4m}6B<#F1hR&Lz*^6qBf&4bTXn&N}zOiZ< zyfTDGd+{u3Vy4fE4;|uDkh`h_F_r9fe$sRlrp|HM1&ZB0_eN~@L%;oByE<P!Q&Lb| z*q_nfEYVw&HPeE6j-jg$=ura+J<q)tdXdg(a*Ws#E|ywXdxaZL!cC7vR}a{iZVG_* z@p#U5f3oUtPiqj4WjHCfP6$3V1&^C=6&EXzJ$U~LyvQP=EE5wt2=9u2vkqYWApp~L zZwR68z$9-;Tc=M@&IE?8?#+aw8&c@2!@@T=rnjq$nP1ZCdIeOe#NSkm{QC8mJQ%6B zOgr;g3`q2^G%VE%w4c?`ly?Y(P2-qp)%<dueI!9I;k4Vh>~XU_*uLwxsZ~JAp$C8L zvKCrbC%W&raJ9A!b=)-_r>aMj))GcCbMq{E`Mv%X20cUjiZfl88amt<=K)8{!z813 zv_318r|&iha^qu^uS@)Ht_l)tg&?7*p1P%a-y>}#u*~vf4$^P;ZY~!*RzN+si^bH< zKYu_`ioCQmnqqA>Fr#j0rrCH^AK*sYv>;+|@(<&>%>c%G_WO}!7zT|e1R$jw6()m- zP%ik@j3H!Rc!VI3aNJJ6P%v@csVz@N^6ZBuszymJq-o~lXw(#~WVN2V!RaX5f1fm3 z5x_XJJ!RjKaIUF3^9$2YdEmwP{J$+7FOE$YM&{;>{w{eRZD@QFb;B;&VxWn(oNw@o z@3tCpUz7^p^>SNs79PhmVEO<<5+lK0v==<UhMaX=pK=$T9}I!L2^No*sKZ{;F0<9Y zJ&0BJzi0#Sv8&fW>Vgq=C!7#D2#Tc4+Hlpl`zzec{`dTSP@lvDSrGzX7xC9~*$J@( z^-Fr8xtja4Gc#A<z7*8DtaqgOp6IUwksCshO9em<EgXcgKu&@~%GF+FKMR7={~YWJ z)ZV~un{tE@1b-EZZ6nCGx$qFE0GY5jTZRS`!LKW;*E&z@q7ElbugAU&TrCv)tWt)6 zJ~E6^D;e(f+hx5micC_nXW4`PH%pQiSL;7%eQyqJ98R`ju+9DF4+l<tKjwusHAz%d zSFZp^uMKoSieC{qxxMIZzRKA3n$(I3EVZ33zS%4?=Q<~Z8$*@J@@lbL7Dd@nP)iyc zsWE%Tr6@XF{GAqjY2B$XfJjR4kx&OOp+b{x&WqiTlH|)+0>28G_#NSxp3xE6<2KK^ zt|&;1Sf?=eWjJK*Y;LkWWi2)PfqXpjlsjy=XZSxR02<vp0ucU=PYkbJiF#53LLG>R z4agP`LHBQSGp;FOH=YEfCzQ2E*=}!Xujkfj>W_?f4I<6Hxse2ZRSUaF^I*4ayiPE# z-vHk`k$L_}T*eei&z>nho>H+Ua}-b^A<TlUa#n9s`-p4wiWCZt{HciTw<*-j+>@pb z9nEC-I~1;t(3JHmCPbDWa${QZN+TMlZEvyNkg->n^yP-<LPLu{M#(-wD5gRb)o_?> zt9q^`fKn85HOIS{F6tA-K$n#HN>a#;b8jL+;>CqQ)-EDUZ80kZ@~AcQ?*SjJtBj)< zm;r!L6&V?MGOauUNVk>$vIj^Q;<`Ug9u|YBKZ0NYuzVLa%SNCrZ(XOYlf(tjE|ZL2 zV?m~%nBk#D3#Yxx`Sfmvp_q=|x0k2x?w}$zFm!bBuRHyX;&!)vzHEs!<CrPc%&swd zpUj~z=2;f#dgvz#W}rq)r1bn;PRPs=f3B+=qV+`$kF4|5_xJ0^W8>rba^Vm3CC?Ua zFO?S#i*OlV7!Djz{3c|oaGkA+?C9vIA!IOROF+k5<h=dcO#SAH-L#ez+M>oJacu~) zC$>OsAZlvrRaa3wq7!r-Wst3c!+kT`JYK}^g9|zFKdm>d;@Dz@K<IDQn(e1w>v~2@ zYt!Fr)XbL!)`F96v59@t5}soyd#)!D-M?tWVXrKpCw!H3yo*EtS33~EtZF$8y(QZV z&9nf0G~L<Rp*bjj%H4QR)(W6u34`m;YmE{Ow#xAH@0Tm*f<?`#_1w2u0j=lfPcOEL zC1)olPNvtJ4nMOK%62)(l*l_AmRfd7h<b8Nx-}~2yEbZKhiPvHfkt7Jozb+XZ*O#% z5|rgQjO(;HjcRz%TYNTucY~e<G9uTPdMqxCrSC%l_ydDt8hNcI*p%uCMA3+gn$5ed zSJ~6vhyGUSz4&3Ae%{Au0IR61d~C4w`tLbxLRS7@5^Zsaz25y=MX?qevYbB_96jf; z5D?4cofZNpW-V^NN={3Q%ct#>VD_NV(X)tWB>zK#bU@g4pOx0-_U0OtAL<X41YJzm z7e%7Vf$#s=|Hda-?MorRZrKx*AE&J+u=Xu?S@Dfj{hfNQYivDJ1-x3R)z`IlWWkrF z5_@kOArm*h4Hw=p-)o`FPPD7M+MZod!(lBZhSDW>Z==L0eHoR5I8>;M(NqT#?mr{b z*xssdCCGC=<+5|w5%oIwtyo=luO(6zb-~R8c(<D>%#2|yamu+pn)$(dI`~Sgl57dk zwgxZIPKp*Rr-%Q=X!=P|a_jSVQM9~fW*XZsppShV)U-y^=MI(#b_)`I_i{H=1)DFP zucwDlKZs7$+#LO)J_;&Np&@8Kh*~av@m&iqk8#>Gxf0TEuhw_|jDA^3GWDxX=(qVf zyKv)<1Aoqygai?ub3%b<X!qr7eZiFa!GrrqbWpwNxG;A^y<&qxX+#kQ${0KjCzVX^ zx7m;KXkgUfN|KfZU9NzPj%Khu>R~UgN!t<%>ZB137kiE)Lo$rdu=!_u`+M)|>*czw zqHyY~;b@Ch3nFM}E`$yk2bW+M@<Dicw{|^^otZd{{-HtEjKAP%0?H5?y+rNuTI%gh zFr|ay*mqv4y_A6zK^%<`l0w18gC2G@OUvwjYqS5nFN4+M2f6W4ohw0YAp}X_I8hju zTF89|GW**KMyIpW#gXls^VOu!K()uO4W<{ve(%boTAO6Kxf{xpt;s{^3QLbR3kYt3 zrd2ZXJ73kQ*xB)~tY~<&Fn;W@Z+8+*3HF_~(}EX6wwBk(Pv9CCLeP8|Kr41nZNdHa ztW#2r!?bDceIVC8S;D=s9|0KQe_ZRb;weUoqC(AP-L=ae61Ox$91L!XJlsfP#f{{5 z0dO#fY1a8(5Vi?>uN)U&rkAg6*T!Q;*5QQq1;9+`sLkZ$HZ}mUb)ki;r`tDoZ%)_y zUb@fuUH&Eg2|N8SS{l&oE92pDs#UolGD$3iAP>EY@j;T-Sm(?RH8_fX9{o19HP-Ke zD!T`gUU25{&;E_UA@M*ut=cUPO9J7Wm(L=n@V(3d`)aIbAr5j<<Y=qkziSbke11n- z(Fd`0M4z=eKsZ8#@436YUxIi}o!b^rHajj7lVBQR<k%yYK+)1rGWiN;NiJn4R$`W0 zb+#C1K9f5>b|@g~GT@!P9~CD<Xl+F4cU!ebr4e3RwD-a?wytp{rg>xTam2{L4&a@< zLOV3~Q}_@1#6(20fo(rLHWui;Q;Pwj=bc{MhkWGV#vlUUaTCR7i1%2pSAnp-$Si$5 z)Oq$vl(~?lnJj*$7=9FuM8pl|g8kQSG8(3r!jYC&GAlkx?&Fxdx=3R-A`6!wKJAg| zpK`VY2wK4Fb$Q!jtB>2JZ3{SEAYAp0;S8{T`t<f^fmwm@5&J=0>itz@Tqks&qQFNy zB9_sSAX~CdSZ_io^7TNYCDrXvhGhpkoX8`Hn8H34_S>-+L0&m{5^Byx^)ExDMC@WC z+w*8x0VvP{x#ZN;)Gva32p)mmY!x0*L}J_{)lIp%TVPfb451B$6igZfA(z^WZkC~h z^0KjY{TtCdJJ^GdXU6su_olpIRxn-9KD})F=%C5;wy7`quvLMS6PmEfO08AgHX|}8 zV$8Nao;*=3tA_t59+So%)J2UaGl!x&j*i?2V#$Au0eJu^$*S?MF~v}Wu>Yw&37q<d zJd<c_k6mr;y69Jpv(aU=jMQL)cN?cJdwV5cA5UKp+CN*2bok8=urii4_>?4>z|sNn zAHXX4fy3PZ2i7}+ccFd8947#|f75tUZH?3dEs4l;{IsqT*m(gtuzYORIZ+rJIN@h= zdAK&fnVt9X2s5YEI~05WJhSFvrDlzDDGwt1JUbE$YXa}Xa?ea8CHocE9lB2jbg$~x z841f}7KBO0HmiL5MU-?ay8n(QOZ284LzU&$gjN3wx4)HL&zQp*BTT&sDm#1jE*n?k zb+Xrt$kyD5GIPoR>+zp>L{nhWiTzD@k!>@)Zqpzi{M{MbtWYeH4gRFcK{aTSKP7Oc zErM2wM*i^x^5Ume(G@b0V^zxr?qG8+IDshOd*-DZoVyUJj7}6CA42ZE`t2kpKEQ-- zGxEN?EB)*AB+5{=`$~risz%j}OPBdhrjChsn`-n*U3Qn{-{Z{<QOFTk=2GDXnqnIc z@JtBez~J&9C0QUp!~ba`!VpWrJ)svhTj~ZY3`B;PgJ->}aQNF1nE+PiTgp~t>lPYZ zufLQFU9J0#<<*=z9))Sh`efVR2JoK@lA`|rL|m85Ea;#72nK&C9!}+Tr<>v5+y*ex zzq<PM&MQun%fZVSxDjh|ouXu-f+_(y4kE+>Mf-NeX#eAa32+TGrEyCr4t21-Yb#u( z+?kqT$$awe3QwX*XHEG<E&jLK$)%!FciO1!yF1*+EqKE7PJjkUZ0l$@s?ZQaaT#pj zFJA0iniauMoCW%DlE-)QI~a+_$=I05C>A&B;eMtL6^w)jofZ})v-!%}UQE9$8!Jt6 zW1SaOt2>1j=??oqF989COTYtlT@Wzs_?RUp%fvO5q#vxA2g@lSejkh9OcU;-FF5j* z_YJy(K%#K)WExM?D|~@qe|`d#Nj8d&XrVfefdAHom$7ZIOL59IGCuMVj>zT(QTOw| zW1Nvp<1k?dDvb(vyI-%yL#OnD`oK;~hC?=`mnr`i51A6CSjU)i?GXSthRnv*{98h^ z!MUg*{VL0c2XdPY6y4e8sNW1+xcks))NWqEu%cEeUP<nDiZ*^Hk`?{+?4&&dc7oIe zHgJZ~_|g9snSvR;DCF=}pu_j!X2nmzaX(|D9)0qCHQCa>MJSK_Wr()_NovdEr3Z4{ zFtjlo>+xj;a9lW0i5~d?fE?0-SY;eD`!TgK%nV+|4UQvHefL*6%9B@RfANS#f-<)- z(9q>KBfdghRdZA)KdsvhOOl|FsJ%qZbY<Rqtxr~?rt$e94DcVxQ4#msJot-yilB1f zo{Y1L{FHDC-!UxkDc*;!SXo@KG)%Y=CAHv!+y~#(K5F{2<T-1HMp=>vEUnJjGr^Vi zi|CFdKggFV??~IA%$xkAqT#)BO7(cy-p!^RMxaK;@QD_gM3{`lw$`YCqQN8Ck6($6 z3uxc7{ck;(hFu+)l+c6I%OagH{uawmNxp9#SHmKBq%(YGG4wdHl2Z7MIY^9v(Xh5Y zg6*vMSnc2!If8sV+>l8GN82c4?7KeIu?x+0tTais!WDxwRRNPSq{4kgex}r|fJ|Bi z=-RgkWk<HQoF~+KYG*-ejTQay!wdNX;XV=Y04Z8rK(X%oslfDd*q~$hE9V(5?&mzA zHc4a14mi$8sN_ALknZS^pe|*m&gQ^`3D>LV!Xth%OpZXlG56B88F~J5SNeXc-s`9A zy=d6KN;lh?s!M>~-rW?ymk7)9x*<DF*ht@`X7Cl1beVLR+c@m)<soJMga+u0fct&; z6#d_xfM6+ta*asQ_{WJsydt6>|6c!97DD{^|My@1pQo)^{Jy1yREn@Ae%hp>gn%z4 MIW^fLsM)*!10gQT;{X5v literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/home.png b/src/com/inventory/ui/images/home.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed650e42c3a326ef0dd1b6de4f280a1fbb1a14a GIT binary patch literal 1226 zcmV;*1U37KP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv000D$Nkl<Zc-qBQ zYfM{Z7=Aw}ZG~_t5~w&XA&dekg#tP=7>g;FNpQwU;Eyau!(swL_XmlIiOUi*^@n6+ zAr6BE$Rc2%%M=F~C<22GW>QM&4CP`hZC5VqWeiF={d~`X5*99^#`q;C-+NBa_dM_W zyq8k~|M4RKJ3&Q7#d(j%<7#MV=-K=HLRp!hxuwPRuL!EDs!kC?27G*cgh+CaQhG%! z^0zMjZnzaKem*=_EV^E*ysG?11WKjy1cKkg>jk{H_i&@WgqpUj`WN3h6Gf>oWJLD% zXJ`I4L3MStKaa=z1<effo_gOyo82f&7%E`s$uQrE(V5j#pI^H{k4=D@6MujIHZ+TO z0AUaKGq%&|1g%!vytTFU?$FSX=U4<aH8q#f!H>!I+VyzH=44`T5R^_$O%Z`W0IRF3 zUt^9gs?}<GBtdO$Z7H6;N%kOm0e9?OLW99TV`5@RWMm{vOiWOV#nQkqOl4nRA3cx& z%P`esGTlW_p7Tn;0(w2)d%v`_1Xxi}T3QNGQBg29HU<L&17J3ruOZ2$?(S~7kD$4^ zB?`m+<k2Hb8HUV50I~x}x3RZh-PqWm2t<mCifB$w4haklgq4*QIx;dsSc&krFS@$A zK0GuBL&L*8W|KM3WHy1*;n?+@(+0g>SXh9}%uLA7&j+zs48Fd;+;29U4Q6I$CfnQF zKdP^<?>>}Zety2kZnx*5ro?Ksa^9`4uX7QgcMuT~K?@2BNPK)e_4D)No_k9f<sHTf ze5Nn<5$N^$9zLI+XS3VM)3r6QT9@dPCr*O-;k?Yv&80G#j0lB7iom-Btbw~4Wq$Qg z0z4$@?CiWPkw{K!w9`aySOmE=juOfco6Qb<z8_>{WKh(dJx5o}^JGpl3=xT0G+8QR zpZ$ykc?S}pmTbZ#9UUF*a=Bc3e|!S^2S*_~`UEJ>o`y-yB*;=_5Ed53HJX0(M;L9p z3NE(?6qR4WORr?HIqE@z*A67W(cpuJ<*lu)Eh#A}iTwj=a{0=q@P7Gww5X_%%+Ah1 zY-|h!2M2R<=!R8vyz@)q+Va4;OW)9x)O3ObKVS}CKac<u#>1+3xv{bFhEys|cDvoA zx3?EC;k2-@km&UfAr&JC2?^n}*Q&p#_q*x{13pObEj=koVw0>w2i`n10+c8YH7+SH zFIT3erG?=*fX&TKV0WW&5fT$6AQFkVveopr!LPTk!zKgpM(s_Aj*SDIPIn7u*;^Wo z#<P!rU06Llj3hKXJUm&UP*j$bl$;L@4duC9E;2Va2kGhQoJ8!o$^P%?bYBx8JRxLV ztf!A{j+LgSraF~MRfo~99a^UB!bI`0qQY_3oGmUcuF1~MmSJ~8Qc@BG1qE?AcsSlq zb(#lHf3vKQXm$FZu*uX8hhq^VUd4!+BMEkLLa?#~0RaJ#SXCFWxjw)i5MeL4arQhI z92~qeJw1H~@Bcth8~a(sec#Cb%WpEu#u5dfRFZ^*gnXmXcz1buc@}5VV+7qm`Iw{5 oANyYg60swehZlpMGRHmlCx4C@H=EWiNB{r;07*qoM6N<$f(i08Qvd(} literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/inventory-maintenance-icon.png b/src/com/inventory/ui/images/inventory-maintenance-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3ddd1e4286292563c89ac98d4482f279e35e66d2 GIT binary patch literal 3358 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/loginMember.png b/src/com/inventory/ui/images/loginMember.png new file mode 100644 index 0000000000000000000000000000000000000000..60a1eaafcc332f5f72ce713d6a0bbc10b72873ed GIT binary patch literal 13103 zcma)DQ*<Uwko{uYwrx!8WMZ2WXJXs7?M!Ujwr$(SxBoux%RW@sOLbMB+o!wg)IAlU zC@+Zsiwg??01%|5#FYQj{{Jh`kpHcN0!EVn0PBmin6Rq*#<dTWH@f&I(CyW8TF)~G zJRZ{%OSRYy8Kj;p@*3mP+M~Lkn3Pitf?iY6FHjl%oB;fsS}J8{;q$q{treKj?JG@8 z3=|@sJ#B1l>}>61d-Oh~VVj*|Ei1arOsC5U;O%Hoh4R15z5v+gs1N{ZoGQTjT;yE< zZ8PPFfK{GlkUic~UV!fD|I5gE8`N;Jg`lvxQeDR6;GnJLdc({1#<l2F=JZ@<&IQaL z!OzBACNjztHTC+$fd`7!_SLXlbs_t(O|bQLt6lw{BBP+k%hgQ%A>j!hV_K;~oX#6v z&S_@8H7;Os)z&P>Rfo^$4B5oN*RMo*U88bY;=J%VJT^u=nGse!3S;EKF*z+Yv8kl4 zsmkVi;dpX|{qMSGxlA>~-|c@frGB+Ht5wcz{{VN7wUamrViTD%k-QFwo5%^HiwcZs zZjlR@`Bbv2l9Hk|@uK9Y!lWrev?&9J`y>hB{SEY2oOmE2I1|v=^pr`HX06v-Z=bi; zrZUfoD(15UZLdG|*`w1Qp@>&r(^6sDNdC9JA2BX#)!IA9gcj5jcvb4<AJl3S!PEps z9r{RrlQE6!v5g1*gvcOd$UvYmi5J93)~rWxmw>~t64tXmFt<jjhPT#tZri5AOElmZ zvSjT$uQkpdA64mfn@v|V;bqn+Sr@@G=rlPZ5iQiJ2NkS<7_PiNVlPZ-nK%fC4qJ4| z!S@JS9&=f-Td`oAJF8HmBcuHLedI`8<m|7DfJP=6FdQNR2jvzl^m?aHNLeuyp2Q** z{}}&(kKL+LMvQbDFnHs?Y!kR`MPX>qZNs^l+WvS_eYWj)_fRsKnv3o8>QkdM2-#Na z{H;sB3=8nS-{u>!ZLAoAU#w(j@=8}Py8b=n?o%!c+pG=IEFn777Tn~FQmhRM@S*3< zfTSE#{BvOF*hW&94mGo?`<=2+>K~riFo(uG6sb3t5VLP%=rLg67$XB!!N?sJ1dV_= z6wlY=^m?O~4ORI78|Aw?I;5S&HEX}?G<sL5&#T)EczYN%5OWpPA}f*Eo;Be>K&!uE zC@z`62}N;kjb_d(>CmMN;^PEC_2J8QWRS&=VqKWv;ZpE`FgSbx@katBPUMKLWex6b z)gG%HW8fR2&re~Vi_{G_B8YFhj(5KjV0PalB_<A~<azSn=f@1{Z!_8%fT;Yn<v#h~ za=Bu*D{vvdn%*g)o3gN90n&Hn5rtD!p!-jWwxf|y!2o6u>5xB{(v{Rxuh@}B=`iNP zX=B0^ru@H4adI>s-_)yH+aAh)WX*0^pZ#J+4wmtcXGeRxCt&MgV3+g#@>dLZr`AGZ zCxlD3#rtDRrx_PjhKV#Dq#+Zo35iOYkS%}ObN$P;%BAg1t@HJ(+j1@Z7k4gpB9fr} ztQrYH4K?6|QICuj6SMft#Q38Tag%tV;dA5K6@#N=$_%cWuXb2oyPaJ?+^~b25{5A$ z`s@!DH<l5*5wF^LGK&ar;Jq*N8_tae1WD)J1hf&Kx2(C(D7<u?0P`IGEV4vWDY5}5 zYblP*41C5UJWT?!Dz4(W5RfV%JU@Q2ERvRihDMLeZ-1cKVf;DG(H5Q4a%1W7P4rcd zg{x5l<Zg3A5PKn2tA27l#f=Awn&P0pIC4{)K|eH0&Me@Z5o>;3nP;t-eJtrh6gNqV zd$MmjL0zJavdNjKk>7XZGhh#<#aF?!dKU^7e4!`u&LIzm=f%z@9NkbfpwBZdBql@y zB0icK5wEz#aSR`FjE9Wp6tfu2rzIO8T%;^gqTI%f^?Ev?X048b&jhsI4d{hJ#F@Eg zoOzsjleCiM{qlqAdk}O**&N4UK&uBcY=kG4*aVag;)v?-Y*!6cxH{<HTWXy5i&KfB zrpXR<<(_F3YDm)+!n=NEOnts~xe-}BdkaB;mk0$D?1_R*wn_JU6g)K%`FG_qtBB1s z2B;G$f>dE)f)Ll~n>GFisWSkYoZ%rL2peoj$a&DxDUd5w#EKzcOCORY1yNNkUW5k2 zQOuHK4rNxH6vI4^-^=y-pkz{=risN`vwq25^l;?HJkR|NNQce%3&8o)p104(XL%gE zlD*Bz%_y^JK#sX>(X2U)nH15cjET%7Gj}OZsyn&tV1I@hVWHr!OdFVeF((BX#=LP2 zW8O9DhYuPEYb68#MOh8LXRU{Fu!2c!QYPtzJRmtr{uPd}AGke^`l>|B%&vMHCIiA* zxV#9A^tRl`#X|%SqywQ>t<a*EUz?chOFKbhP8Qi`M`mt=$X6`l<kb#aTeIlE+M2TK z{q&Xo#Iw`-zO3!d#b)&`w*DG?HE<PuXaMZRfk|R>jf&HhB<g3^J1dHK4+t$(BvoUg z(Ti2-&|?PdH=)8;;fF+OwmCb*TR0C5lR{z~#u~C46>rYkLtD1ytrwg_BZF%T@}CUG zmC%QAQ$&&cHBKNTLz?uXxyMx}VjP|qp_7ThFLq4XGn$)#iS(u<{#aKeuG^o&Qj;ng z@PL&F8V_htX1jV{N5+B6cSH|z;gNdpIuY{rhEGgH4UU;hnAT~jV%H*=R4_mN8@Dj3 z$)?@pEa*Nv=Ep$5hy&O}BE*Q`tD&TgX(4h*fJD3e!ps^bZB+(~ZE_CVM#Q>LBM8=M zufp|cz;=foTo$_;PEe;d@gNE!)#-R$BOra*PKb^JfZYCux(>`2%RkkOLxYilJoF?N zCBxFt`nUUnZge`%nvPEo62MBl@!gS!V0kWEQZ0ZFUZ{8yH6XmFL6!^x*$DPNtd9NQ zxKBS8x{)avEmJhtN<zjds;f(nigt*MhlWt1Y(!5@t@-`<1!0Z4fLl%OlC;@m$u|4# z7TZQH+OPpwYcm2nbmsj7L-Xue!IA0fS#5?~o=(~179Hu@;ZU5S;-G$lvd>*BoS+J) zUoM`QEevneL4EZ1XXP9Q<@`qRq?2qm1T?4?kWPFk>Q9UvMJUBXmwT2J`QZ@xm^#1z zu(!B;YF{x1uU<nz7|u=n(|wT3oB(5<-)E>KwE+drv`8kj2dus2MFRyL(ct0?gX0lH zJwC<g&vb(1twE1K#Z!gFVIe+NEKdoKSP{i43CJvt;N7k_I=sD{fd6;=%k}1?(JoIP zzrLC;!_G|YH?JxjV6){fQ9^REbFWPG#boC;ZRsFl*fi}^=)6A5#SQ-PpSRKKK&=YO zvJ^788<K<W2Q1hr$vTct7q9%~&y3p>A7y{4i=Z~Oqd?*vh{2dhkBi`XF<fS0Q5F#h zf2aI{(Edfy#R`b0XDFHaqgroGkM=!ZNHM>%F>~*!XFT6%DC5*N@2b_hKVt~a{?hbj z-cx4aFvN%uAZXxFm$xS2V^LA))V)KYi|vq_un+mi6ZSzPA(|;-05F2J1!Uy16xgu{ z1Yy`*w~wg|7pC5q5vcL;ai~-V0|()(0&PIsZO><>sa$rOEF%h6Q$|cM2w|HPf*tdu z!%~UAUZGH6w74h)63bv1Mlj6!=Pc9~JJKP?n|F;)87(w(9(uqABI8U1b_lk#600%` z-%Rp`QJq5__ZXX)vSJ)xKB~wS$XfN;vS!3S7lk?;z#R7PoBO(SvJ?Fu+G=JQY<579 z@$RIzaj(=?d=#IBSaDRcebd&(z&dM|qG5zCY`Llk_6+!v5HdJPBDomqTY1BYj+OJC zR13;TA?jFo);b^Vn3N*4P&{f~#WCv9>B$YAz(uUr;>D_953o=8(-fp{lBt)TGSwm| z&-cU9R@X)rs&ZZk`)FX(!^)!2*`oH|EX|14&wh{ZZ#hY{>nHX#);*)aWY}CFP635V zFRm*TWOJl&)<<UiO25f*kMWg&seixx8k1Urd85%t9sm%91IEgZy}<Avl+>);EFL>7 z=x9n+(UBxmC=fb6)X-Ae3=X7nRQ+Z0_r(uE2aH+%PCK!nn%uuULMfpGp;M6SV8n!( z$P^vaoYmjUhpvVc=nxMCr}3p?R)s5-^O*(hcEJt_Jy^N8UNv_Gx}#RA^xQni0VS&j zUUGcqH(MWhJ}>X)IMZ3rjo6dHhLKE>YRJQs1=X2IUS)G$Bdh@?k#;*&xe#D81U0+m zGj5+V^SK5<o`mUGf$74z>hhii@9#Pms81(Z`>5nVa_DO+WE+r!fTjqH!+MnSW!lpK z6-sY;a{mY^^b856aJ!M(#*BQ%G~`(d{gZ(tunSR{EEn(`x|aRR=k<7N9O`Cmsj(Q4 zZ>GpQcoAJ0KcJYY-imKw%Y<DoktEiv68rBMVG(coEyT}^dL+Szvw4%zmu*fP&3n5j ztj-FRou~&;eb0OG`>NU=nRGVuo2pa>R!H36QAQN5ec8$sy7lE2$6&%1X|$KOVjyUB zE20S8T-W<>;a;~p#}DgZ#rdp_2u$z_VVXngnWcyAnBLtd_>tN0e`I3r1V0pN8H958 z?S-_hhP-B*h&?m94RKCu#`|x>;Pw-f%*T@jD)|?V!NT7|cBa|enoXTkW<RWsd5$)x z=0+|e!c$e*p}#{ZE}PlFbp|yY_}*lM`w}8`TCV9c({9BV$r(@&5A%~Fe&2W)Uh$8{ z66|u>oXs5!|4vnnddETl$S4RrR=IzSE<Wx0ync7`dv1N?*9U7>s^j@GY77t<5HYBE z*9j7kU@|f}$G$%aqOk+OLi6I@NfP@GorO>Bjlce$tDTG*I~h$Vj5>@=piJs9l_7rc zvJga*WToSpg_xeLGU5(;QsuPTw1>FL<~ZRWlVTNHk^T%PG9&ff0#!!FBg|PEoanVV zmQ>%nD0JZN+~ipb!^2bOrN}ug;O5Mgr2EA9i0IL5ncf40e9N|*Z50>~X0F91#UKt~ z9-C#__Y;78EVjS^Fr5!1Y|SpK<47wuU?M=s^5QAuYAUXjX4n1u*|OEO*HqWTAz`kh zv#%He^@2?F7=}3yVcxQ9PHPri!j$$6c$3dXyatwyXHyTsw6$F}(S@GOeRs}86|Vpo zns5OHfSN!M+CenP|6(_#jPB+~AkbE;k(r2*_x^dLIZ~dLC?|!?)@BA|$T$l^1S}be z_o^$MEr=MH?)Ylw1hI`cicwsUB#j4sLpCW8+sO8J_M2;d=){L1f%>!heeRRqg|!s? z#TQK{iaMi?VX$5(2G-~|x|;6(fH|&IX^-pCGcmQ3ofRpVGqVZ2Yf9S$DL_LL(lXEn z$EfbSrg9gPQx)b$BjIv-$KUHC6N`~D3#`W8mj~yA=hOD(nhc#0N?W8?RIn4_xuP3= z|Bzx2vlgbO?3~{16No9dqQM%&^&O0)Cs<l6^U+@6NGfD9yN&a3M{w9BxDzX#gXs+z z5eiu#5wqMSQt*u+RvK9L*tl{DWH^Ds9(Y?s>@ucC4t^klGUx;RcYVa>{2vnbNRtAu z1XW_YuCwMDCq$fmK@UuxZ3|-!K6~4pu!gC~|6pOFYcht!0W0X-H=Z)4UK@MW_&=W( ziFTK&H$_dwAp&{RM=3~YSU}1hcRoRBQ^AP$28#igP{Lwy`9$C|j&Sv0x^2Lg4@KI6 zUzjr|nk;svoD&grCkbfhgHi*$p=Ex##HYv<2lE{TnANz}5xw*kP4w&UoL9fhhRR9l zs)E5Vxln+l4*vVH(2wA0F>d`THX^T_^JiO>TZs7{nr*C5rxVk2rL+Z#)}SMQ@`pcP znta$uWJ^V-1ioohQL2NILNM_^zLA<xPhpG&GnTFkhkNBR1e{K;-rj<*a{0Zq{eIp{ ze_vq!teSu<3IY?qUoN#O#*-+0Hp`5P5{4l>@`dr8-ktxDpCdCouxcy92%I$bEWj|m zzCr4J-DLe*<EO_CQ-`vFP%j%I-QuXy_Ye3)Ofk7m6=9}@bUgryR6TXX_S}PUfEZ}A zGrgTwFLDIJsS_01?&YdTprg%UBrA=Chy26+)1!c^s3g%v>{SlN-#Jv^5-Q)edt-01 zV|NP9C1;=jo}y1DM$AU?4dd%@TMa%!ck=yB)x!<8gXNuQZEtw`K`^!#OG-%zSuWOL z`*Rq_B=}}=A<3KbqdQ9&{Qk%o^PUC)$n)jRNuXA{indfi+x5Erw!`C;y4BH^S^{C& zIr(iX)XB|(F2Ll^nsH<Ku9a7h8IOGTit4EbB1)?%`z1`l;~|;|O9KOIybsm*8<-@j zeJyA{Mcv#P9E+Eg^#ad2R~aBNZp<E~K`Kwyea1R35IXpdd6fDqJlO$RiS#vaY1NT~ z73s*HM4W06L5#z4IkE0@8WSrv!8?bv4}(S=nPy0Y9F1<wH@L~3X|Y>7!Jp7ukvnmM zmL&9gW%o5->7DS*g_oR)Vy~|sEQ+#+|2*Zx(sG?(!>#G->v7AEgZQZy<nEfwfK9m^ z-XkO=(EyWPDwp@UD6h%NC9NURI6cRfUWHxMs~f&4lKSu*J8KRBRuEexkhu#%<cvWD z<vX(?rBFY*^<h?$XV^8H+}EujfXp@#dK!0ZKD<kX4DC=kqNS%%3^$vOVphN;Op_D? z8=DC141+!s*}nX!@KGR0CTNfc6FY)SbejvMS;bquK5bus1<7EQLrKdvFO;2Icdh3U z8g<4tP`(IN)yh|Rr$zc!)|Zl(_e3);mp{h9`)9p3mi%KC@aD1)8XEeyzABt2D~Dmb z<*!aq>3`LTdAsV$gra&Rt8tp`idlYhWJo$YiMFY;koel(wK76m)E%oJr%bSC@$m)v zvUz@tJA5g0<Jj-9?%;Q2rRLk}NNVT?2Kj8t#1mQ0uqRJPa`E5sgcNAbo-Q<5Qi&p! zNo$gf1G@G8j&XK;!MN_efHoiHzA2Bo(>*PzSEev|8gXM0KJFQhv+i=DXs!%d$uL9$ zZS11ePAY{A$K%i-QOn~C4*0{ET*D|>*gv1I-`fX2pQB$_j%$l@5@@j8kYUC;1@)?X zaedzPc8`JmR0v}N5~HNj4C2vW2ii=gD?Ej6YN+$#yIul?FJoFsXdz+)LuVyYQOeLh z@L0boIOWsBjoA}1`@{E)G?^YD=yt)<W;a?<fUkGwq})JVNQ6T%8yos$8IPH#Su;K} z_KY7whtZsnc~Ab=Ej9(cRH*_#2!FxXE7L1^Dy3DzeV&pMimKr7po2ov;dZA}-Z*R) z<JkHtzRZrWQ+EnjV_dS3XJ`zm3?`#4GE-wBXm%M=V-DluGA4byv<;p$>A#c-n1i~Q zno#5NRTF#ze7IeOD*BofYT^)Lu;|z@(6adM3E)jdI~2|_kDvhjBmU9{gt{v&xb|*v z+!#ntpJay@q+LNHcAVBG>)nDnuee<K*hBZm^(hs5PqI`^-!GFiOiA}~HJ7u!0Im{J zv%poK$2W;5K9P;h(cAL6cCr_d4FW#NFfU87X#4GJe#GBUH6F7ng`OD|#3;=TA?%lU zefOo~J8t-%jP_HZL{MB3;VAI@W?!R$!e_f)z*7u=S*bVfX#yg6X*e;e#{guG9WI4{ zIPTNx$#AEXpHZ-&@xaquA8odq`B4U-*H3#CWIqL%A@IjXi!|=nVqO7ng-4;`Bom|L ztw47oW$&xeekBvX-@L^Be^$3U-CEhpi5YauWF@}ezrDi!Z2GW{`aey;f^Cfi=J@e_ z@qHPt_`10sdge|)cGT9Pb=JU<{fg}jZ@005*aF*8-lufMKCi*KSU1lhiSKdid!39S z5A^u#RIY;}T_OEJP?QSZr`>^58u}GHfUoz{Jgv}!#3^GJzMHd^6J;V5$uucHOf7q> zZDr;m2qKP$mm{v-T;;nHYo=9vfa}dhN{ZKs?mrqzjMwKgbk`X9n|vJtJwoO3u0!I2 z5h{qj9&th83gyEduUi>kpM#@7>5SSHd_c?fT87J2-@dH53|aK0pUPUZqDe{Y4}S=5 zx^E$1?PG9N@xs~NeG6>7RyJMrPJZQ*1InLav&H<o*~g7?lNn3_{!(k-li-nwNxUN$ z9YAO98(p@h$@hF@G7cmIxVKV*)Ok#<RCWJ)MFz0f0swxONaBBw+AGM#&Vb*e3Bb57 zg|qI2+sdo=ly1R>5IuOkGp!%%gm<KANsFFY4Ljcl&^<H@<HGwXl{l(iSpaj%e;&`{ zs<q5x^Cp}rIr>DuJ0NEkneR1Tb>gjEigNUW%`@GfSG|Cm_G5bz4a&i-tVijtQ?Wjw zcj@BVeOS1YhLoj(g6GIH-Rrusp-Qayv`&T-D0cCehX|%psUR6)1V$;ibXfcKkjm^a zi3d{cV0J*0T0r265-H!NX6)(frqYQ$)J+M0IM;Bvy@F51T<sp!hUEPTN!DD@yQfo# zn-EoSefDNht^7tk^(u|C7{vq*UoxfmF1g2EZxi0zcM;+h{WIhx`+WGFHyTf7f;XlX zzI(t?i5Gm-e7Q28<bne$rWQkTe5AMt4<(U9JnQdy4#qVYiZXwmMiRA(ySE}F%HB+l zcEg8Y+$IoTDgbk8vMH{MbX%#{FTa>Rv(}<bPc%dvekszaomELWCSsEq9C1!0)+YKD z7Yvgr1N;@tM~h-J5|cn#&(3!268yV4gPpxpH=S|jo^ss0FO!i<sIL6Cf8F3Ttc2gK z?Z^x!@nU^_36j|@pye`{o1PW*wL_6TI^1W+^ob??r*88gNo>$koc49?W1ng}S`zQ_ zkd&oR2Cj++JrWl};+vKpoaw<&E4jENgo5Z-v$rgVQE0B@G-7j6{9~@nb%|3`7sR6k z=d=Ufh~HdU4ig8$nTd$L_uS$SIHC{T@9G?~m~b7o&wDrIgtObk;-}O2+2o=IZi<G^ z9jKcRvc>rFQ#aIuIWdL7GgKF~$^d-b7rHI*KS=!cb`N+-yL9fC%ec;9GypNaJT2nI z!<X1;PzM`!_Nx{-iR4brY);3uHAyn~`4??#u@3b>3uS3R*TlULAAC-9kGkR_xO!M= zp`rO_pBD5^`&o55+{<E%T9Z4YUlh5Ylabw!grgHVZ}pXd%sG;^F|K?&{{3(4cC&{~ zY@}1;p?C6~Nusj|oU#_M(J~K=jKX;er8@K1W{wO2fWxfRZ2O<G@er?98Ro8B^gQI` zIbfegE=n<9vhR6Kh;sRpQO;<9G2BNjTcHlUWj#U;xQ%gk<GuTrKQt^#P)RHG{W1;W zEgB3fOVIF~X6;ah26=xWAE^>FGM-e<*=HEu>x#*p6d8_ZJSz?~vd$UB+chRe!?gTX z$4q29S0ytszsy-o@smaZ#=6cbOpu{l9AN_AeRmuztAS_De-Dj<PNH;{Z*Y>OPTX^k zuexruHJKzd{E$GLv1>_$v8gT&aebabUUsMk>b5m$AB?mIE6?R10v_WJYJGeHc?!0V z%F$b8Uv%ecnu#|Z0_O?uohcO!;l{aG9y*TM71#bKp*DG<`mR?B3fSd1OIr`9YZ{bb zb{$H5#651gCY$AUw>s{a3(m&K1n7ageI~5-N{G_Y`;m)#bF*?f^oK$@SnV|@Ns|BH zCj_N{RQXYs5jz^R1vc9SI6#RQNb5rrio%alC{t(o9D^1@hAd?=uu+uK+hr;OqdPg> zc`e2mDvoI*3R&`r0|GIJ{<pc*qFXvXzJzVV{*E)tjZIk}Gbz8$&{!QuoPTQ&rrtB3 zXBDfVJ`+DLg(Sp;Fo+><6P`pAK`R1I{MU?R9%k3WmdbzsV@wus%xbI7=mdpy#*-a( zrlSDk<s?>lNSd$Cy$g<EJ}sFCq<SnyISqQYS#=K>yUCKrTos`Y={Mwt){TCsV`aax z*C%=zb#MAg9Ss}|ueDn?-nx~TYSW66<ifdAi?bL)(ev7zKs7pIQevP4>?s*L?ca>Z zz>^gwksWxfMH-V=kcTUQyL_lrH(8WX@TN1n_|+3QJ~;BOErv^F_0XWgOC^ZZ!l|>X zf!tobfbONlegK%M$ux4=4IgThy|>vQxrQu*y|`ls?M5f=?*-6Ko>z<?d=Ys`W%bXI zDXRWHo$o^8(>+!+{IXNbZ=VPO+B6!m*XuzR)7;OEIBx03h0K%nci=+_oL7vLahSf< zxY6T|T7$iBhywbK@I|HDQNBH2r955_ao(Buzs06O48Q+PYh7<P&G0GC6zFuH`IpGh zU2Ru~1PeEbqxtBbp**Rtx?_sF5<<rI4>Byj9j8P1VLG}ucW=>woP`rxMl^-wFg6<> zv?zBiO9#Xuazhy6Q$Tyxl%U&PHSD{P7Shz^?y80+#GtqFjC%ncf}j>(GwyAm_%AB4 zzuZ)42xk-v#ha)N*OVX^WU`x@vBk*tb0v(crd|x~V8ZI<Ff0<#Yfdf0R-U$pMLx!3 z>p{`J0c%+%LrdEw?lnP(e^m-W0h;b*@RhTg_b)M4^nB+-T8&T{dM3map(n96XpRw9 zx}F=9N8NDcY2$wD^I>JVH_xhLTiT)e<Hk*7R;CxeR2SAmYbkb;>a7;+a!asaddV-C zIt8?|;zkZQkWbestoPkWk9kBu_y6FU4vo>OX3aDwtiNlc;1@9bt1|yG-r_x!q`pd` z6xl9mGw|+}N$22S29CxOe`AXiVk#LUme<K#Q%z{qPR|@AMQP?xI2TNWh<zvZn_?x` z=^(j31X9VkAkmDV?w|)#+oA;C?1m*DPYH($ZCeUq&M*8z(|aHi1VL@c2^ntnlS{Es zu0aC(xo8B9AoAb7*`gad>}(sGC>&lr)(K$?^vGt=-=c(k7075Is`i)fTvB9&pib>` z7&M9jr!p4vx;18N1)jo)4!n#4(P-^Zl_5q=`!#<}V?dnkzX8Evd3t`!L56bJElmTm zsV^R7!+z4l*{sB33p}QNE~x4=p%=Z2a+b$g)+VZR+asXg@vpi}%@*h3Mkt-j_=G~Z zBWnYgds$fdqA81!{2w3X25LaAd({b`&Um^bLJp6^`w*Q<Vs?ZE1TcsBxSpyzgaWY{ z#cbSf)QJ4VQrM2W*?3*Y?Xk6^9JVY8&;46FkepPrk*=IPBYZUTkP@DP@hE~7F)T9M z0!I>_(ioe8$4Yot0=EqM5tD!u(rjJ1u-@D8pccWJ5CTdGCJLHNq*kR6O*X7~?(o+_ z#qtr3TT=|$gD>}N__TSrk<`+7U246)#G-kJZhCKPd>NLTroKsvF}zj9Z~z~hE6T5s z9!Z%R6*aM-gb#LAG7brd%IVk`s_Eh?#zd|>Z4!$@V0TIx?L`Saxyur}cA#sy)mK+7 zzFgsOTYG|hc;(k|K8UzF79_`fp=pHx!2i31lUsoxbopi|AH+vx*VE2w=TTuLA6&D` zczLL)xR}dP3*#dMI{+Q<OFkJIj)h%LH7T+=UiQ&KVu32E+rl=r4CQ1mZJm^=o>?mD zUSeww$Qh#n`?x2cwlVLYT?(IH>CPUl28$sD#w9xXO#P@*_$PdY)~JPtPPeo;IWnXR zpY#R;LBet$ZClmxJIRhxy_u`lGe%?#DF@t(xD#L9+&wQun^NNOPc<NZi`6&*j~m1p z_h7J8GKnw#v%Dj}hSViyHhE3S!U3ipm6w!YG2*&NZG7Lp!#?~d39|Oz1;$$1-{4$* zs*haU%=QwqY|4vT=`Pp^PqjYCH3f2^_x^4Bd+<9^$bUUN$KPFPxr7Ez0L?b{^C9r= zpBUqI!a-hkI4OY9Mcd?Y&Mq-3%xJR32-#xF^U}KuNB0erjhdx)d%_VC@;zjhY8PYG z3rZpuZuReo*J=Q56$LqJh|61BusAW@3-5xL=xx+gP+r9c()Je!$B*~><JD{$aQnwR zw8H=D8jmD(++lQVzr5D0JLmP{adrv+KR)`6;x}EAd8V`Ue<?Hz7DH7lWLfE%rojul zN4mxLBMY#Xw;WZla_;b&Q>3i#Nk->4Fv;}a#-6N4r_`mxacA;k6WLov3>`M2pQn!g zf+(sH!AZ_SMj9n1!`A_xa5>qbvtJU$$T0E1|0;THBxdWES1sE{4m8W@yR*HUfJa}6 zMZ^T&e+GmPulk`f^Zdh{RiB=a3%Hy^dT!eZUn4`~5O&Ld`1-=~X2uTSPh>q7Io-`v zfv{6GvZHKiRIuNfR02n<3I#<0&I(?jemT4layowur_#L=^L*})11)bA%6R~?zJ6Az zOVj2uc&#F>S)FQH(Qp_`ow;#Lh;wL!z|qgtxN>ZyaG}h&aI~ZCA8~5$)px^eqdh%u zF-#m_A!a{B!553ykLh;$T$|wT4$&zVAy)Vu5c~#a1QwDiBJ}dPLTiXj8S6-k=jz7_ zH?!Fypz{_d=WA$j7Gvt`s3;SxFSxbz4~O*}@uFOnD(#IZgYC~QUt26~2`n=4Si<BV zDOvfEzJTvUA_Aaue;S*>e`oGW%t%SePEJ49qnv4d*JbkC@?*ZyM<*;|f{hz}?bJ(P z`A{3Z`aF2~wj9A~y^UIaWxPV(^1||j4^<2C{ngj&TgPQ9NFFPQ+-krgvCAagRsWG2 zS^t?EIZC(-<O?v_?e1YOsbh_rF(4w{b?G4Ajmh~%8RK;oF;Lr^uH^)1yWC+(%=7)q zt!W}|UouxsT3bq9qO_CCe$tV#ij=5UA0&?%@QRw^cHf{ZgSnMR!?=g`DoJiaL?NR` z9q;U(47mqg-OG!F3yMHn!G&K5WEPy>q_~FL4P`>l28}{#+;MVddawm{>qX5-V~$Z6 z8+{q>27G4`VzW^u@zICbsH;jM{dgTDC8|t)Lm@Uy{dlTR%fS~souMf#oS;LW?ulwE zpV57JGP1TM+%rV<GYh9ty)`338YgIK>UWnB8;H=phy1$1=BJ_IfiWii_@Q0gZ@z`? zLSyua#_|_ha87h@k~v!Z+*u}d-|cYN!H{uJ#?iCy7{F?NP}no~jz$6q8Me7aFbh6< zwQ3xc-*8%(k{Z2Zkv=wfZFydHudlC5+7fw4N_!hOg!QP9|08OT52jDn%!t71M;<XS z@9%)|?gi{DD^#mTxw&HGFdVzyH}<|?Owc1MsVo(Uj-Hw4dU~2<{nx2Ff8yn)knygI z99$rP9B{s^Kn6jM=ZEme_C1_sf&ev05c)5FjCvq90lEQ(>Bum|4?!g80Qdz|3in4& z+?|s^5$V+*4W8TX+Z_kIm0ANq$D^@<5I8LTB@sD|L@NXUA?|D4+1q?kH{~CB&D<Sg zJ=yOAm2AW~KYi$=bqdWdXb^vy0U-+0kY_XZ-HU`SzZmU6|3b&KI#B64Oz&!XF$nNw zA!Gn7PZUg%m<2hVh^#aF5-vy2_sixh8yj2i#Zvj=x?ZQNp1sRVWyF60sSyZSRd+hX zC$-#mTvmOavi#)_!hGsg0zG=uy!0es0cjdnjlt^<xCyn-Uc>)pFVJ$;G%>%tb^9<L zeTXP!VS@qwH$>N^LZ@YiQu5(glr~qpy?)!*tw?^n930PA`NBaA2EOm&)fe9tYJl|j zb*!n{-mk=usU!sgi>;>m)Yujbp&$nXY{Qn0Ajmug)U)KOy1n4rB9Z>vk$4}YcDFx_ zns7hE2tiI@5Qnp;hbqL*e;G#yuVM33?*<YX<YOlZ*)8_?d3bn$(L}&M<Iy;a*4tEO z)))Y4e&E3GgNMXKpa8q=RwoP$j6JH^EYH6|1w8mbDI{DkXA*NrTpX2pwD2!<oB=h! z;ip8jVR2+StTM4a)yPl*Vwqma+<9=m(kodUAFJ!*iQHuvQg65Ye4&AL%nnkCHWWZ6 zhu0;-_afrnugP}v9}mJ1{T_z96HC0o#Cs3h9t7YS@?fbjzxGxqGnNu|qJ3;;Wl!6O zWCx&mOFC-@pHxWb1UWwhNC_WK=kog*wd>(AGAo_QnZ4O)Z&W}34p&|k@H|-uM!o>M z-OlKkdLOKfl~L(Af3<8}9ENdFk~mNHKGFYuo~Ok`#SBQjJ@xd}5(`48+QD#c-@8O5 zT-FNMi7-blNfeb>n)#1gbdAP#_!Om~p)rR-0eY=yVBPu|FsRaj2wCps7d-fOdoo;Y zl}r+UXr+*1McuxR9*WhFU0IXK9Kg)Q7UYB9J<#^@;R9sD36Qa&h|fb|Q2BPZ!6EFZ z2>n6L8rSW2zh7eoT(8!0M+t!n<Hwrimom!L5Pe}Pf=0c0-*REA20nkCthzlL9D_hg z9IBbEW7w`9S=k8{YtcjeWMa1r6bVrnjtsW5pSgS?Sz+!jgjfpO@JT<OnepV(KjxRP zPN#Aj_geN_Prq8uR-^Q@Uag9>;Q%r|ABgc>mP_^<{vcpPNl7c`N@aCDO(;JCMsPZ* z0@@6)-W4NE;IJ_me_Qsb4!W%NY8YXglyfODdof)r39MIZzMo5g-ET6Ejxw&cwlfsf z(_YO=)sTHUN&lEDHL9h$Z)>~|i<f>cFU*i=I70SpUxAz=`U*->n1t9n2|ktwQ?p3Q z%07R;X+YU!Q}?H@KuWo%F~24HF#fW;3POrTjTnN0Lcsl#&2c%YUHM9v+{wAv7Dj}& zIentx`Etd<!oZIJp8)>(ezN8=gsbVKNo$s$S`PvvwB4)x`)KOOFt0PZEl$A&OZ3lp zD5Ff+RpaRv+D`V}*}v&5b$9~aD*N%oVU6RoKBf>WegL)0%@T#}(BIZutCcQ~Oo>X6 ztR-l;S7{?BPr+ZmrEB3+074nfurNZdLE1EPQjY3xRn|(rB<fX~ET`42yAu^Ldfixs z)}R0+fw%Cs;yOcbpzn97X_E~|IK`M!bKi_fi~oLULgN4*z%N*_y}IyTUdOLOK6*1V zy}yHCfD0LkklXp>o{F$jrCjxAu@?w9<l6Q2kqiG3%BXdQWW?gIm{WY-`!;cFvRH2r zx6!39j(D!WXajYf+59XeHr}>_np@_PO90%R|8#Et?n`&fU$%1CyZyd#``7h&w(?g; z10IL3*#5ksWHtH>iRPtQ*shx+M6cU%eVfb{@7|Aq*A09&(lEv@LQr7?0x-8OA(PQ6 z8IBu{$-78JP8qK}`r*hPf3(=_;c#+<L$B9ybowgjE!b!>DsS#~+tVV}n^%JaP`ubK z&FlKz8GE_ub~VSr!UIzgjBdlEh^FI@MQLhvL<$103aXjCkLoXfezEEww5`hMj`*wP z@2ubXahimT=|Ygt=L_3R?)NnZ#mBd^9LV0a^ld|w->2za8A=hRTj#MEvoQ-F%(Mgb zDhYG$3+zGw|Aw9o0tA4^%~}+P@7Nq-zSm^Z)%$r`gQ-Th+3{zuU(_*`K}VYo%Ckar z6&*nReEmykr(Uk}`R``yW#&#D2s_L;_a8+VG_LbtW#0Z|PY_N<Xn(O7>=<-Yk!Vj_ zSHzVX{Z5a8A(%KS3W}WZ$;nPiUhj%RYec}U{Ja16-+88>2!^`16T)qhR2dR^t3Wo2 z>^TNmVId0tK_Vn6t9&O`I8h@`3%i30jLN@BJ08|Y|1k@$aRi@+Feu;69koCa=V=gs zW#A9k@iy;nTaQ}Sir(VFVnKw05MwC@um2xoCIGhqy^vKhwy{$z@^+*3CnJ5jAaIiC z<m+xGo<!6s97Xf;^Mgrjl^h`OWr*8pF+b2>B)Q$*b}6?_oETnEz6u^fc}t4WM3-K4 z4_f?QN^`}GE3@zDsQGnykUf4YPguTEhID#zf?Mm%V-;8<4N$~ow+Qe0lxwZBTWpbA zJxcylW^!nVbqTt^zJwO85uxaQ0)23JSnqxBIF<2uXno09^XahXFU&)y&e&^)(5u*C z26A^^%C>HRIYY#E(!&xJp#z=U^wRc3X&>x-EcKV7PK$w>mVV^Gz;~1Dc#y`;04daf zTCWk1&+dH2>~Wjhz1nKK-C?aOg5OksA7B1FaD>5g*`IMJiHwC62H|vS@`BU|Y&5^k zH6X<QRJ?C(>}~(|zj6P8-0efDtT$V)M*A90t+iKgwqVNsBtvpRhj5}}K{r}Q!bLFy zOW!+7<?=ZH>211}LPOV#6ZTe|WkLc<bUJn`u)Tn5dN>T3t@&(`g=nbACG&fGKi|dA zqsGID7;guYv!mb5ueGLP#^?-M4R0Nm-^o^FfSD|F+%6OhjF6#Vv46hbAH=rAI`Ia~ zFZ&KivsN2jG@A9;s2TX7iN;3bD{7M(*B+16Ft1#e3rETNrLAa}L=+_y&ciA_nRMAp z7mNp$IDjefY$X2CIT$i_S3w#Y97{{fwJr~pr74^|U{1n3Ux@s%WBc|1s%>Y>?a&j> zV%}!c`>RK_b~7WT>?=A3#zNoh7{<sO?LrEH!P%FZxCR;^-HOn_LV?T^r(6uSL<S~C zBC64RHarg>xD-Vu5j$lwN35sWGb57z^%*L6`os29zd6QGsz#d<Q^RK1xEWls?yZV* z$kZgs5myV_feYwUO+?(*;39a>t~*RlUK*Me1R853QO0mMOWZ~rQr)djWh|af1K-&k z`H7GPjyy<0A5-uRs1bCB4cig{Wr&TyX-qAFaXh;}^0=JNYin(9++W>pd5?k$e6C#c z@1J8FNw<P(Abq_aq_Ip*1(AniZh8)sy5+Cx!+b4?>^d>PY$R~mPS@*9`5fNATC%dy zXRk4MZUWCwNlb~4?SG0`1ry&B;GgnIp&2>#FtBT|^<V(1Bi@)8IMeD4ELiomvIA0n zZ~LRO5$5)XR746{?S}ndJV*H7*h17Q{u4MS!raiLi@8=`OsL3x7?AxbphBioK(5Vq za&Zfu_03SE+s9sD_rpzD0vX}>^fZsy%>45e)6kccguxZ1SWyuvbqzPP6)qs5S}-}H zFx=-)M+b44EJ1LO4yRpzAWe~E%!hw5+&Cuh5#B_y6pJrQR%fL15$5|0ZYdoMK(L6` z#NE`e4c$^PBaB$aZjSi*sa(Y@kufYy*f(-%J|*J)g1LniAokPCnw39tZUyKYW;O^W zwwN)edaDIV`3+jnL}2x$X4WiuadW{8G%gl8`>cW1i{TV<(e_az<~F#jo#H5VCIS2h zW6JqUR6ShHFFfL>oRoGCH4lI+$Koj)C=(W-!umaL7Oag{+s`ybY4Nr?7HE(X;@5-e zR}Ltvc>KrO+tYDMdkGiry^B#)Sx<H6XdCYC`X{6E;tPhq1{ON40YoEUtu`7)WAJl! zwC*AnOt)-ULv82L1w_NOhF3YL_MkoCoK8jq7jQZ`83GwG(^@;jCR*M>=7GgV>b{H! zP%9OwVb_zP7jn5RpMWg8;C|rq%e7wS_gkJ@hV}PL+MU$<cfovLVeYJ^x(QHJIj(Gm o@7C;C0a291%KyJ}B_Dod6R1$sK*z2B24Miw;__lOB8Gwg15!NxAOHXW literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/logout-icon.png b/src/com/inventory/ui/images/logout-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..077e68eef798e250a110e06b056d050c53fb4e6e GIT binary patch literal 2818 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 U$Czz4)&Kwi07*qoM6N<$f@l~T#sB~S literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/logoutLarge.png b/src/com/inventory/ui/images/logoutLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..bb478fd50879b7aeebdb19c7d37728a26c2cfd23 GIT binary patch literal 2783 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/logoutSmall.png b/src/com/inventory/ui/images/logoutSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..532ab100f6a03d1887cf6e62e7ff622f97b80540 GIT binary patch literal 1041 zcmV+s1n&EZP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv000BnNkl<Zc-pnp zdrVVT90&04y}kFgrM0$&p@Pf;hGh>B2R@P|OP1}QCB!YdW&6hviE%IYM8ycSR3!)- z8~kBhbdE4GWplWUu`y8u=X7jNF~h_Og_=NZ3(|3U^o8|$Zm9*dw{_Wel3(xXNzU(c z&+puGDE!Zjx={3_@NW{Vs=P$S1gL~1aQnO?wJp8-nz{!2$hbcgzI*z2!$ZPN=K3B8 z-~$XYva>KY>O||s!J48kF8}nO0l)89DU41{BRxfr1sSWr+XrB|;cCk(KeI0uK<4^Z zS9M1Rj7F2N_GS~(lQp1ZEYzu)@OviU92vH(+1{ET6G-naMlZ@yjffD{u<KPp_xBY7 zEC>(kGM~ob`eqa#zxq@(;EjqT-vRv%5CD=u*S2h7WRjF9X%^sgi*e-CRT#g!CJpSz z+hDNUlxu?dh*=u=wQz+nGBJ&`xqvniji;}{*xVZ#_ylhv4ke}>BPfbO*&pV}8$eb@ zo&R8kFg)&`2e1nh@O5V&OyBq24}6H%pux`4oMMdmdBn^0pa~*EG(`vdG$q5Z*NN({ zYC)ZQKTB|mz!LQ=pozz^pZihPVwn$AU^DdCR+>`+r^f-F0RG#=CB<QA8Vtoi!6>1V zYr)biDvy2)>g>CjK_GQ5pw^-3oE7FD`e%VX*n~v9XU;8yb#eebu0Jsqm;y%<aWXMD z(&vKxg`5V<)T#KWk*wg%J5LBso&bwgVSrI-(PjmT>N+B>AkXkThTKEAEd=gME`}xu z7*O#g+4;_`j|+C*htx$gz<D7HIZ7LP6uH=1QYE<uFE3vYetHZ`Rmr40EGY>Sj9_0j z)8E}tIdjl5EDbP(fGf9BfH51aibqj-s4?nSRPflwV8VmPKbJnqpB26&u(pdZB*ujY zWeOF(9n_-wXq)6YP}jzlOe)-kZ)I)4{%;OSpMw)y9uaIVFP6;(<VyT_*@>zSn<S9` z$_sk8;cWl0G*|SK+`2hK7#j89;fIvrL7G#b^Dh_5PYp=|H8nMX_^#UVjn7!4-$gB( zmJ`5>lmx{rz;gJ-!lS(17WFP7bA5Srmgu)>bAFoO;Qj7J8a7-bn&I%<^>OSyZGZNj z#NJT2NlcQt-gWf@(E;(NenUz&$Iu;0j@AYNnG6>Or?98po=g7TA`u8Z@5VHViBJeJ z0kM6$E@`z+#h#Qiv_`yFx@~ThwL6}R0ElmYJ@ky(<}I&o{n7%JoH@)f6nY#Ul%8~K zn3G&A%>W7OgCvd!i0#me$*+@@9I)K<Vdn{ZK`6QSAzliV<{z~?ic8%_{~&5f00000 LNkvXXu0mjfamntg literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/menu.png b/src/com/inventory/ui/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..47bad65b0da6ac58ae56ea2b88f83413e797dd8a GIT binary patch literal 3206 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/printLarge.png b/src/com/inventory/ui/images/printLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..c503f1a5a8f942e64ae52094178860829f32311f GIT binary patch literal 2357 zcmV-53Ci|~P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000R5Nkl<Zc-p<1 zdrZ_<7RS%M^ZE@>VW=o5pt5e=wJxoQ^3Zl`u?P`0Md&KliiNl?ifdX~1iR4+t+D&Z zvPqj1kd>E+7;4vzp{Yetp;SQAG+Se$8(+K1OF-Vt+`H%gm;r_vvqgT)O$hfl{C>ZC zKlgmkx#!%0z$Dv|BS-jTpP5X{%E}^>xqnhOTL3&gy<x$EKroqx<<A%cpcI~~FPciF zhP!v~K}*X6#{jHY5do`LzbY)j$Gzuy`|@>TV>79)KJOTS;Na!(=9_OYY?gJzHHGKx zqcte2tNV`D)Ld{3z$>q;fVFE^Gn2`r2!KkZVppy-&`X!TaTGuZ0z`77(Wr=o)M_=k zdbOThy!fqS0G2KdfvBiRHatA6hy^qn4ZD1~p4Qen2;k+HmqT>)8*FH3ND%<7R*Mq) z4khF;A6SMGTEhni2NjW!PNyTawRPn3<r>ET1O<gaOiU!}>+4g*0(!k3El`INy67kg zEkg+jfPO^)BuSDb<S+}Y3Jrsmum2V$z!loa2)S|X8u{nfUn>JpTwMGv#`rMKxifB7 zT&JP%W2+I){@60)r#HrUdCZvUJ?jN#G%B|bbhJI8ZSAc+w|i*CvH&k#^e>#Df6xd7 za}Gkt5N>u2Zf<TTHf-21@JxWh!oocdA3pr6J*eEqF7Ws9!ZoL0G?@VRfT>K{3P4;V z1jYRTG%5=J{?B9hG;S$)xJY1RT#N<x?%e~7dSEaZvXhgOvuptJ^767DJ$iH?Ha3<o zS+WEsn%n916j;A;9Z0S&L|A2tva!j9My?40sLAP)GXAgfW8iCWwR-0E?b}dZUQRqc zJxh1(+Lbs8aOTXJ7jNFY`BP$IBKZ0Ffk<*JD?|xlXhSLhewP>ruI_G@6hcu8j0{CU zt<|uCzZKA?!b1=^*V`)JLK)Gnt}e*U&BbhZLFAS#TfUJ2^7Hd6F_gWvdGlsWkxf<u z2msU}m0o=hQvbLE+zp=0WHe42fCe|UoXn%Nx%eYkIA@kkzJ*eQbLY;%{rmSD&<ZPL z01;W%uU`*~7cZ9eHW2`yqPmqk;J~3YFnAl#d8ZFRr_-{1DOvP-@nQI-pO0m%(R+lS zpg(X7G(<$KQ2<<hK5yPUj`@w1M#WoIYBg7fZ-+nU>;o@vFJc@vPKyr+07<VSsoT=| z52e|#(0?|;`B*(809spH3Hq!xKte(S4-5<>!qX>OK&{bGEn48<M|))pFcYJ)IO#}T zHI@GOYXP7|3#27w(B`7U@M6Gh%(sSZEPwzEWlyaD;^X7_{Q2{30kGJ>Tt${pmZJc6 zWYDI+AA&{x-mHJn7NEVoofQ-mSOdhx#c}j(yAsk#64ykagtGS`fCD7-ZaQy1aaaJ5 zfgz)fgxcEL$noRHttGT+(<b2q#0+31A$%!Dp%h5}Fcp0Oop^Y<!YHQJIz9W~_gVD& zf`bS!n+@2J5CSmVbZspV5D;J&z{y#n`qy^CuCyfZc)<h1==ALaLPFUGj?t@MWWcZd zW+8ylt`8Iy6<Gsp+_+JWLS`QrlMqVNRj=btk*TmX>1}XvcOwWeO%f6okjUqM`HWxu zY(M<kZ#GKEHVUB+5SuWHNs?U&iN3qLJM~<f3aegQ3Ep!sHjk8&idz8p8^9uoRg_lJ zdlespvtG-LCT3ScB_$=+7Ql^6me9l~B>J9i&h$XuSMd4SOArzo!X%wUF;i6*0Miw; zEc|f2nJx64NiXES4;>v(Y@QJS9UUF4w6xS3KqPSpU=xKzA1}Cvr#l?{;!DUscZGEK z^>Y;=ib{y#ifA<|h>Zv$h5NViuHJqOuiWMtkxC!{DJv_pme9I&>$tzazbqkpF<aa? z!_^5?m~4TZpAdy5gn7DJ1$=0jb@udA6DGX&=3xe4n3Y;vASNb;&z(D02EfG?3qnVh zf2?o0HV>}24_Ny4#<uh=5;}eQv^79<bTpqcXAU<fb9PNP!Ti%u4~+HAS@AO^ge8Er zgrcINxUa9TO%xL4o`;7AZE0x%8A8+w!mO6xX8S&O-_GB};WZX5(9_dnb9g2!@Z`x8 zR#jDHZGkmw*2n<k(`oTetwzI=wr{6By}dGkc>mDQARQbWntCoI&IE7@;##ZKQc03V zB_t-Am!Hoxm`IMVQN$dusIdiDwQ3b$GRMY8Atxs%__C@>n2Y0HATI*~lBL1HlRnM( zIqk;v>x`JA8?HX!oXC4ADZJ<D)6qEzFf4sZb#?WagfKCx#07Z^{Q#bh+$__&xVS)Z zNeR1DQ$qy|t_<|{_OZ~gP@0*Usp#o+c6K&xZfZue6S=@27#M&hFTKR}?A=SdySqo9 zadviw+S*#Ub?X+40*IOz3+A7Yn4u#>e}6y0$#Ma3^5jYK?S%`nHH1I)_4bp{@G!D} z{|CGe_X8!ISg)7Jv16Z-rp6|myhw=%7XU#)LF5mqsaybv4>7IhsDC(r{yfEqIaU*! zt&ojL(t+UMU|6(hkzC55E(Iz3@ZdpeFc@S%6BY;y52G0we^T^h?@6ai!lh`)7q zcEawoG!_;bDqBNX>CT-yw7$L`+}zyCcJAD{#j+Bk4HKk2ckkY{doI-S__4@AFamV4 z@Q82($WZWXRAQfef&kYVfl$Kz{QQWkt1E;oUoJ~p#3eDdaAu5%IY~)LnU-g5oUyX9 zQiRfN<4@-FdcAx)_K&a5#<sMy86s9jfbap7nqn5n$;qLO2q03dP4V#s_?d(YB*vA; z#-9e1^a;$_o_#X+|JvIL33c7wPeV~c0)QicLO!4;=)^==0P6ubRZ;P?=QSySZSTC( z(AwG-Vg^w33l0&51b|M`LHVgujsZ~eD<+2kY)wqO(caeno3My*Swc#F$tNTvd_bB` zfRyCq_a8iba40M++-W*Cvc~VP^|{Y*JA0z2c=NOXSei&Z1b~uXbPE8D#z~)^zHa~~ z(WU~R=)W2W3Aww^^x3^T<-ZOAh>J@AbNxK!CU*SF%2VLu<1Zy8Z5?z7fFd)W&?fu+ bm}vh4l>upsRnUoj00000NkvXXu0mjfe@|iA literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/printSmall.png b/src/com/inventory/ui/images/printSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..efbf12df3cdea411754252e365bd004000535156 GIT binary patch literal 889 zcmV-<1BU#GP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0009(Nkl<Zc-pO% z%TH5L5QpcUwzrR4pt{q9n4k$Hl8_Mp2N4C0#E4O2G^vJ1!SYhVD?AFDB3%dzyHVo? z<AaJp<4QKJ+?b#VEZngoF^YY+_Z(;L?QLpkn~OL%&B>hG&Ubz@bEXoMu>Ssj0sFA| z`FW|>zEtW51PBI$rh*R)4E#GlRn@Y=Ef&kc0I5`pqs#D9xEjXncKg8q$z-xDz~OKl z4DerS(A(Q9Tdme4`4aA|$Bt}Dnb--%r7)FqQBDDxNG9U&o6B2gJUg|y))T0#G7tzv zrDCT&c4HdOo;wZ6M8XJG5<tG)VVBlFev-Z|_3cq5QSh;`F{rAl0?t)Dk_8&NgW&DB z3W<0kcb=S9V>K-2Qyrc!ufqHL*FbT*w9R-t4&&qFpaEuQXGtqZW3nvs#=8%or|%Yv z?nb$u2MJ#aZmb5(@STbio;_J%5&tFbMu5r%!<56|;GhnenwkQe&4%$+Y&!>U^e;fS z|0av)07OT5Jiki#2z+wB26(!{Ui;d(yTS!nH710Bk&zJ{KvD=GP=QNv@CIK9ym#6e zrpR0koDO)gyvAPnFY*dS(E#+4Qm+9<M@NAq(cvm9U2ycuG+b_Pg-j}Ks!eUO3@ecj z@MWO`EEtDMLkcD*Cw0K^@GxC@tp<nOE<XAAEj)bp8Pg@3QjpGM;liooEPU@e|M4?Q zz0RoLXJ%$}z|hc8KD}gzD;2QHR=rEi7#3Y*RM`0y)m;ou@#f~{bb#OQ*SZJ?8}oQP zJd@3mMwZEBOevuBN*KV3S=im(%`3orpaXn9p9WCeZZ;bTP;fei$>aZRSWkk`4Tn%D zqyf~HmKIi5R|ig~6R2gsZfrnv^Lg;~beIadv=oNbH!tC2eLYM}OlX&EYikQ4kq9?N z1#fC<lB%n#Ash~CfR@%a=<M|JSS(gHMT(+u1TX{O^?G4@dmGl))&!=A<?}#FAU6mQ zAQ=E0*JS}XCJF&YTTpNdK#_4xAOx@+0MhC5cL7IBVT!mBxS+xI0%*UcrdC3L$Y!%; z$2E44K!Ei9`=%&7c}aj_i;Is0DKJ~)uCCkr`$t0nRo7*T0FXdH(eM5N@eRk8zRi@& P00000NkvXXu0mjfyH=Vm literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/productLarge.png b/src/com/inventory/ui/images/productLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..f9da0e0f92bd82f3c82f25853973954e7bd55e92 GIT binary patch literal 3621 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/productSmall.png b/src/com/inventory/ui/images/productSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..766fdd996afbf31185dad7bf55f743fa9747a26b GIT binary patch literal 1290 zcmV+l1@-!gP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv000EhNkl<Zc-pm= zTWl0n7=ZtOF1tI^z3;ZWZCTn)%PkGDMJQINQ3yT=New>mf;S*#@e&YX>H|KQAP^I4 zgosE9lK7$l6p|9Pf|`bu27^Qi<z@qDX`!^c+wQh|nK|e8%<^C&WNA(OlQaL!nREVc z{@ckQ{Lg|@U3hp)z3kQ$yM*XgRXMZrz232D1G;xC2x+>$SwcC22tGvgixoZ~@G(v< zPNYea3YzA4r*7lP52g*cuy;i)5U$=Q$qLA_3X)=JF@%<+`&xj3<+E$t%Xc1`HsDIf zs^-Y7`fg!_h^%+wf=EETu+Ew!;w0wwlsvP0%d`PqJDQz~8yCeD)u9Me7N$TEM)5w; z0u(6cUC*{J`cFw7KHmD9?()vJjB(Db?-mY_(7fOQ=gdMH*_;t5U)_<m_S`zLRjF!e zH>U&`_-gGzw>P*>7%PNGKnM#S2mmiY#4Qugu)K8jp&!#fytN)3-kp+S?*MMLYfHAr zivs#TZ`tTCtN4@(c6lM@%rtOpbOc=ffCUjV0*><gx=jv>x2=li21O5|WYd!f{9|Iq zNBYut#~uo}eBikTZy<c$WCWulakzKmD!6C@t`DZ5?)ldsG580d7Jzs%MHR|0M#D}} z9VMWMA=%v^IXqTj4DnoQfos{WyAJ?HPPD!>FfJV)R%XG~3ughZ{{$7a<>;q0R6ey1 zaz=)HO>dxK7<9Am7o52EJ<anb!R^#gvFpMyb;Mx2CAex|&jTI|AAPYFdH%dC%PtJo z!Kkwldb>}<t&@9TR=@^HH3ZF@_d~R9A#kh6#Gdq60&f0(2H1^Gs0m^}adTyO&6n36 z$U)EUC2DnL=@|)mqa>>&t12oEH?U9>4JHt;{CXB@n_qxvO${kvBG<!2i5qzP$N?xl z_b0`dDOjSxrplL(?|*2LziX>;RE0cyoSxtY#by^>YZKn8LaUTk!l-$}Amv4YkV%jo z#e8rn;Yc4E!&hMZive;s>!?=iv9edYJ}X*9m)jp-uep33HoF4_1O~>D2IE<Lvatau zCklh*2r_X|ETWniLvAt{{d$P}RSIIgD;8dV>JflXo{mbYqaRrgG~EqH&)$K#)d6T+ zv=Ath05T>4vx)mXA%@kA_r4i`pjQG|>f2Pl;dF7p#l6d-PLH=gGnv8hbPg{6HAb_m z%5Yx86F`%r!1HMlB2n&EH(0&G7z`b|NkKbDTu~OQZ2h@7pl5eeG#K>tGn1ofaEOm( z$m4P1%=t@zChh{|Qv^8?H*tO!&L{!6-Ft`JehKXnEf$G&7YB5<&7Bbmd2VI$;_JW$ zBC??BB~UE@EHzjN5#&<;gh&9y!30PKn4E2@e*H{wfF<4Aqia!i9K1In*>#(PLZKj5 z&2IvjybC;+CdyBUBs1XvM`oJ9jXV*{qhYdG^v#|}11ve!Hgh=x$FYndyF=yWIHzGT zfJiRSrikYzkTdIyG6ld807LW_696MNXIt;o0G4#UJ>#)Fvvmf-k;*ysjle_|8R;aL znMpA61{j7(rpbm(&ih10E&;Ja3)*@wP8ndyw_7V_`a@NnrIFe|HkItlXC^P1rg6z& z)Hj^W^|kCemngP>N`Dm}zA{_hcK8~b%G!U+-xV2oH{b%Y4FCWD07*qoM6N<$g0AyU AX#fBK literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/reload.png b/src/com/inventory/ui/images/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..f439296d90da5eda75193b71e78a510040f36d0e GIT binary patch literal 1528 zcmV<U1qb?xP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU%nn^@KRCwCNS6gTtRT%!x?CfPWyPNGM zYqtqW+9qwl^r9Apilv1LmKH^!6~qVopkRG!U!-7ZNKjG`p%1<k`_R6qP@!UNiC9Fj zC|(|VZ#TUqO_OYPH`&|lZLa=jc9Q0@xzS(;zMa{B{_~yh{O3RaIm1lT#M8Xk(-t5; z@dz%m|0e?MC-xHE-XOd}@DaAyuPzg0!X?64!r#j(fL&l)>DJTe7PoJydj^fZdN@Tl zB$v;6Us7Z!S{cJ~6910HF;v#LkdFy}KCu9Hj`c)b!r^Tz8?d^5HOj>V)Y2FXy$ns2 zD|6`dL2$U?^whyEh0&kv$M2)Vh$+S~dVPeTFIfOP%N%t3w!<gx-MOX%hL%S$KMY+h z%sU!~(+jDl0fJbAU;1z0dQRh0vTr^S)diekpKb^^KY4ZCW|U~ua(bX*X9B#wRdBik z1ixid%Q-?81$hLfX;?O2umv89#>G2Va6PMjZcoYL1hB8!*07uXv9F^8S~-JkX0Sr) zUu6;BO~i0Noy9=5G6gLGAJzr~XbVRyp>l4-vIlCLAi8Vu-HjWFm(6W<k}g8PY4+=$ z*2wl%J{QvC4=vk@Pzwsohx5_<nRKz(Nv2-&Ju_<ix6^G`P?Ea#w6Cr8nle)3m52pH z&4|ege!Lg^jsEUfPyjp0Hr9C@SKoPY17gEbsA>tp6%ELt2H#)3d%-Zx{pR~-Vj988 z$vO}g7(4amrncRF<dIGd!|C)O($J1?{<)5^lD>(2uFVu6O#7!|&$>_mxm*T?LJ7L= zfJ>^!`O6Rb4aM9$vva%61QOhb`|>utE$84|oRf1;@twqU0Sb0C1pLTkQna=KPfZB7 zAH`8FXkVBI%wp9nQl_EEeQynp(rT!)I5-#Q<lHlSEzFESyVvE0EEg#JB!DtK`Y_Gy zy>qU;*`w<18_dA%_E{XcTmhVu?9Wz<fH-3`AqIv*Q3Fp6#zc&dmjMGqa|%#qS%!EU z-d3RwR80ftB){5)HzSp5jb@;%RuWTH^@>tsp6a8{vT*s(h=)%B>}T?GRck&o2NL<b zLJ1^T>T~%b{4OWAH_jUY1ziMl0(BnHAT*1EgFkcIR3E#|tSN}ed8Ju59n{dkcuGbj zBq5blcG24}=a~Xt8_>S4_GoKM00Ipwk<3_~^NT-keW3}4!3PD5#!Dyq?j<^_EyHWp z{E;r6K#4IK;W`PTDI8=6nY2I>c1CYzx}$w*j3%;(#WNNM$IwU$L>~5-RRQ)5rU6 zCqA5O8UCD%lK?@q=C7m}NK?seTT|Q0RGeWSvG4-Ru=C!nTz7m#hgb4JHw25P#_OZ9 z?!nC~<HuryxkFRiOs|9=FqbF_1DjtCMTSO`n0OTm5?N71e>9g;6upZ~KbT*c59~J8 z;?mW)#(OkSFMv~Mc?SmW$e&SCA6a-W*v}3(wt0J8K@*wW<J#k|al<c3NRE_|jjOc# zQLdjd8TrqZo?VgE(osQR7<o|WrfxbHw;8?5T-4~VrVTaEl|_Zh>EngY$-G_{6&aeM zK?ff7WElC+cSPv2@109K54_FVoKE3Vc)hezl~hZ_OfP@hhuHBPBj4pYlrlDrh|%%0 zS#Yv*{$}S!Z$v~{*Ql!LR3l7UPA0r@3F9XU!jgJ>Yt}es3E)2tdwDWEPp97o9AF|l z<PHlVu~vXXVjyAA?=xgimpn`8-n46~j@KUxnJR$UrP*V{Iawzf;YTZWl641J)|0d# zp$QiVi@OZFT9j;P*j*7ZRRHgd*Xsa31lebQ(T>WKT-Hjoza3J9tW^PCtL!jhl@Mw6 zDb`rVFEGRA)a+-|>@}<Az(f>y*>&6bupANKotODeY1cqwvfnDJK$rryOc9uf?gTJP ez|*?^6JP)u_tzB+WKVkl0000<MNUMnLSTZC>(i+K literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/saleLarge.png b/src/com/inventory/ui/images/saleLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..e107e26376f7fae2ae6f3f5f2cb76eb7a2725fe3 GIT binary patch literal 2314 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�H@N@67Y1s89|69SiyMwOKA1| zX#Lf%*Vf(%x8flIkf}O7y%<BO5CYW1vgtc8Y*6vj7$fh#e*XNGXQg<^0L<gY>9FXz zr6nX5e1uTvgAMu>W|);|@srP5@sI(?RGF6cb}YmEQQ^@ipYtu0S}?PG(9H9n{p9jx zDHNH{6@W}9Q&S7k3o8(W2E(Ko72nh$iks)u)j30z^+Ev1^ht8Enjyp}QrfWe>Q&)I kDBdRk-zEAUz>B8;0imuOcSDMPw*UYD07*qoM6N<$g5KJ5&j0`b literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/saleSmall.png b/src/com/inventory/ui/images/saleSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..d941063a6372934ba7025841bd02c0c4d53f1796 GIT binary patch literal 1046 zcmV+x1nK*UP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv000BsNkl<Zc-pm8 zZ%k8H6hG&_(w0#RSgLl@L4`&d*_4t1(Xl@*iA3FpEel`VqSFt=8C{IS5SInEu@IN( z7EOqWR%0fa+YDRy)0r&tfhA*12s0#Nx>{i^qpgc;%b&Kq=e@hHDMo2a(YTYGmwWF! z=lst7opUb2|19_<P7TGySy_ZArX?wQ@y;Fg)BsLdEc#tVMIQ->`}j7StH^blYj{B! zW7qRLJC8gTz%jEq`+&)G_!))bDBo%qCCC=9C+FtgD!Y2MGb6xWqmdjfE#0kGsXpP` z=N1J_3&7>i)|)rWzH~apv;e=^Y;`3X&2hebG1Cp@sI!!Yl!zLxf_yeDiU*7iM|%=L z&(^KwRXW}0d|8_!yOcNZ&d;B08yjnUb=9h}H`c5fP$1^;^T0W`yW|1Dxr&PCUpE+9 z5ph?-5tjlG6$%h4Dv%5gvfimF%ezBEf5_*)ojZRah%d=@BBh^Ui`ksJuc+vll8}Rm z&d4mAHbHi6EkwGyK$@5U5{uc-j*lOFrJ$g?bj1n>w@}Mw6d;6C+qeJ9*VP${hTNDj zem#Nrp{lYH1e*<5G>TGpHxpg1#VN#nLzMo2f7R8^a?Y~T0VH@qMR769+O`cN?d|dZ zE8E&2aQ-~1s;e0r90clgKH__yvDkM$Um0GvT2DNyR31(TpsKG2&Lv7$t}tD5Gv2e? zndJ9_+F}8%)r!-XE-}gDN%9Sd;>q%B*N)(OB_%6ASijz-1jt{wpO~8qq_7ak=qThh zG=LZk0$aBZqMY;G{riF5y$g}cmqEOJJ7tOH8T;q-#Ds~@K``D$eKj?WCbjx_Jd1(? zrrom#qAnNC_VuxR&NVM860esrwHl+ny-XY*Pmq_oX0BN5{nz^YPcIxo{o1wa)(snO zsSyi>)vH0<)C6p11{69S%sL!E<U#7`SyqFEDINLL>8$+L>y;h=$kJI=^|nQ$`C86` zm`ot4RG7D82a9xc01b!nemI<V&=R!F`z7g2hu7P3#_bM1Y!DZ#UXQ0XZXC)%EEjkU za%?t?3=cDr_c<&v$vjPZkJ9fQfxw3!kBuc2<&mf2?B>ljYhK>ZxQthp&jtKTY5zbd z)OhH|jo;JRB?TI(sc~otsY_Ep<R8X)zBM{G*R*?hxGPg4NdRqT^9yh4^&|XA6dneU z1M?Tt?~cV<E_gilZl6zDPSI0RF|cKeT}Q~?g?$uY=5I+l@y+Dq7Z*LAndJmt65x>0 zXn4n9=+6Qu3^I1%N58-ME4SPCIDwZ0kmY5aj^qe}@~1!``Xqrf0z57G4-BoHrHE+) QTmS$707*qoM6N<$f~th}Gynhq literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/supplierLarge.png b/src/com/inventory/ui/images/supplierLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..b54e2cf5e309ceee2dd79b03c6800a1f1c3e8a16 GIT binary patch literal 4077 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/supplierSmall.png b/src/com/inventory/ui/images/supplierSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..915a5db33e47fdd209abbb38e9ae8a32eed7b427 GIT binary patch literal 844 zcmV-S1GD^zP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0009MNkl<Zc-o~? zTS!zv82)DOy6v**UQE0B5TcN#L`G?s2cZm6iyo9TD?=lw7rQ_#X%t00L>3XTLH1G) zMm<DIxs@e|fv^vf>t(ySUUv1^p7rdW-Su3WJ&-9q_QNp4%s1cn&Bs3k|5@bEqN%CL z83+U}E-WmhYPH%I-QC>>mjeq63tQ6D(=W-gY$1e1=zPTOcE4OAsHmurjYcD8XJ^4M z3^Fq_e|Wv#4aqZ|PM4rVrc1reW>fG~Btk`2DFnH>xt7+})?cNirC>uLT)lP;{r&wb ztWrW{G&eV6dU_fI0|RJpZzoF*`uh50$_kcc(b?IF#>Pfa%NQCOf^U2rue-Wri^W3f z>+6$_6oIz3w!Z`}m+NCN7%Yi!947q!L`O%5KDqyyD*1dqct=KfdMTx@t`2Io8l$75 zD+#FLO`hk^O-)T9V?&0&YJb&QK@gy!V2{TmN5kxJ@K-3$ZnuLvfkvZw;B-1qDFj7V zids(EPTunS{fI`R$j{Hmm!DrmHLq63VzFc{($?^p%D1r?G<~F*S7Em%^mLc=ZY|Nb z==V^L_jf99W8b=R#a_=hH~L?B!1yMRbP*1R(Og}E{IXhDtyU!iuICwMU6-E|!+FDu zF)hWhxo8ctjA>Z(u7hTL8_EmU0|_3YC@NtxvKiXBPdK!AA2Kf>Iupm(n-G!?<m@dD zWI0SQ!vvwL5=D7AIKHnKDLO4wDiu;wQ_(v-fnLu~REsVYL_a`^3HbVs1u<MOjHn3N z<j69S9F)TFV<&2=_9DZc4mG_j3KB*p0tj&tL?R+g@hKb~I|I%iLvWZ^99U=u4O*SL zA!o6?V7sFdRr`0qp0*nCMG?~si^(7ZF3Ka3kic;ws_&OUr6G(Y$XChoZmYTc@Sbh8 z`SjrfCG<&Fgd;Ib&dp;oFptmzx11omco5%Le5Pa_yZ&T{UaNDPO=f*TUN&)9O<-6K zfjJgTh(kOsfp*S^>&MIX{_`9E)Wt_{Es`WPq!@H(;|XEo5|Ch!w!pm`C(0f#$NvT+ WUs!y;x1hHG0000<MNUMnLSTY!y?t>2 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/theme-icon.png b/src/com/inventory/ui/images/theme-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5a7534627395b195aa634427ec382e01a52765 GIT binary patch literal 1496 zcmV;}1t<E6P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv000G_Nkl<Zc-noI zdu$X{7{$+>$L<zd=wm4o7D3ZOtw2n`7*YusqKOHbnv$R(R6=WjAPA<0_<$e=f?A+K zMceuU|5GC|L5aqSmRF2~KdKl-qhcwPZMUy|ba!U%_1xLrCJH#|w=+9?@A-Y_yRQn| z<hpoKR;1Hd=s2jB0>wr(AT0i%_$NF_`~(Bupb7gz0SY=RjmqC{q$B?OLY_{~0qpJH zr}3~C5&?sPA^@24K*3xaKh7~Snum-U%`AZZnGIv7VbuJ1Q-JzHJ)s=+rhq6omH>uL zAjB|36ko!|!JGr6A;s5lks`w7OAn7?Jd{#N32TF8JoLeJ0Qr$yFEZx)80521_#`M0 zx3d7NfPe?tIFtvB!V{lUI!Tl+mxDUKEB5{HQw3KW#_}U$0C{xpEL>{r5+fxxOa;l3 zd}s>{v*sbz#T-XK9UB+q0Vx7LrgV}Hqz_odr(%Y7qujy_j!m6w)Gq%e3)ubqry{el z7MWXs009(kBVbSiL=Lcu4aemHNxD2tsYGrRTr?6=!ccr8JR9mY`>3&P$0H)OZ_n+) z?(ScO^Asn<ERJs$aL^Kn@vh5mj%W5yGREft2?E~s0ZtCEiBal*b07wYecASeoHA3$ zEt}SgbfO)ZXDEJ$5AZ1bswvQ?2btZCLW*x@@UDD7oUxy!p#!1o?BZEQn4tlP5we{w zM(su+>+73^NN<Jv0>$ry9s`$vT@=4&WC2=OY@_l7T~C7|LyX-%!0`vt!wyC{0n%_G z`aOsy12UoZ3#YEG&9dAEC3jJL4ur`e<K%yifGZjxwF8R3M4=L9?^s-DF#=vBAg&7n zlTUjHn8I)^ieK|!ZZ_Zyd+owmy0q0YGmX;Q3uWE~gBfH9*h=vp-a{URi<sssj8cLe zT1P*li7~>Q4Ij|VhzKsd00CD#1lAKU;<bs<B}-a^rqk%iW+-Dm0cjtwk+r?d^`IR< z0}fEUOfOpv=%b5G{GuHguqb|zF-@=SpoHl0P|#=~IZQyZrlz%k4pOp(sV*QOfi#8J z(ZSz@ggli6yuo`|mx!wmQ9{=H0GIh|z*~%48R?)RK%!_3*U_+Q6N&lrTF22r+<To4 zYG8;F0)PfWE@^<P2ba-`EFhBuh=wdcX$J~zY(HJE0y@BDiPCxlLn8zX&Yj&h(a1Cm zdWSdzG$8IfSc5DeNPy6@r(HYHV-Vm}?d7ioi0l|><U4#bU5|lwa9JU|itA`Zwu|1G zl?TdAXLD52q_`I*JB`w6J;ncGry%z-p&h)NEm3xmd-<@I_hHT(%P-M;Olk(-rb7gD zD@-Eb+K_A!e@vgYZiek0iaKqyyU+)u*kPq<;LouValbiC>yz?>d=*0P9f}Tw32t3D z!ald@68Qk2{4o>1$K(cad`ekWk%0?Eg)Kr^_i$FTL~OV*l|;9a2yl?~LJRC;Axd)& zR1}`%G*t;Y;0`17$~Q2TcUPC_ibQflO2w~cs{PHbc;dt_m(?x1KN6V+hew!{65n=q zA|8)(R&k!2CaPyw!?G=ZtMFVG(P*#VPUW`b@^BcIW%*nGXexzoI!=7m8;w4YKM&@u zT>bbDk;qh}c~0t%r%#?lA`dW3RL!h{ZR_%IuW~&CVt%{)RZ4(KfKDcnNT}myPTuYG z^_?3#a8|5Xv1Rh)$@@Id^C4%?p8c1D%F0R~pf8sW`uqF;1t=>kLm&|F+s9(Dr#m`2 zTCO`XYinzp!r|~<S{0ov5i@}h!tYd3QQ?<>$0BqR6!D*Z5w>A+8mNYbhMG>DI@NsB zLx1t&#fzBD&aSSmMJd)&i{A(^FfcF%(BBIS3r{ei9p}%V|L%YPtH@s^B_#`3lKc2r yMZkneB;uDUFUU+aV3_eU6FJe-({tuVI{yGLEYHl=xHuO80000<MNUMnLSTaTVXtTa literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/theme-small-icon.png b/src/com/inventory/ui/images/theme-small-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..468c2b23921ca0133a8479ad890bea0ab7e52925 GIT binary patch literal 893 zcmV-@1A_dCP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0009-Nkl<Zc-mEy zZ)g-p7{;HO-MhU_?ljHCG#(nyN)k$;w2(#={1AwuqE(?yMJm01Pz%)%G{tJ8h*e8b z#DAasU{nMtt)d7eX-qZYpqA2r{ZQmAO8;0%s&~!Z?cQ!~cgN=vB09`2vorJl=6RoY zR^Wve{2t7`Yhk17V6mEmSJ2E!#V+ncVC?@e%sY*UelthD{_jkTm>H<+UP?)M?3Zd0 z&rbrOB%rlSuldNJjE4w8$5K_y>OhZ_>-(Mqf(!O$5ttX@0+%(wm4Mkqz%qiVz!zya zxCajbQhe($IImJtZn+>--|7bS_ksIDy%R0#3Vnuv#h}O=fLt}5LLmCd{*6P4kBO?G z9`y$-Y)>?aVCM%tLfdu}<#u=xg_B`{yhp&>l=t2Y;0h-3D?c=J6ID}@dRK!w;_nv0 zM{BN%(AEvWT9m^IhnQflOh6m=rz-gg_VYaR4$lvvm#DblhMyGFm*wliU%zZnhPyf{ z$2q!>&*{N`C4~s{7dt4RtW(5kh7B|K2)-5`UeyV>O>cVLA>nnrHK2udtqAZTY|TX% z4IHx-jCN|@OMq>%jE8C6k38SRDb^%mdeHi5_GjKr;VfA+VCcJ7xM~Y*S;SVU@Yn*3 z4gwAmU{zB=F9CxHqY7tPiNq`)<~5+u<KGndHyeJ4>U)+K)ehJqixdm{h-EOAD~PX{ zXR!j<15XUFc-1&Zz`U9O=667Gr#~c~G{vsP#lCe}zk3R>i5~n@q=J<J)G<EAD9zYK z1>e(wC@v8&pMco65>L1LH$-|a_AZF_9=1cDu>M(Wn{@EF;3Lv5pzmj?tSSV-A(Yjv zDFr7qfy8WHv>QGi^;r8VH?eWusx_ImwxveCkjL$G8u>y2b@g>v)bbjG6|&iJSXKd= z)X-2DM^%-HzaIQK**|!zdFm>^yXpN;n;RFLDcL2Yhlf$90BYk{n5+N-<gyd6xh6G< zczr#Luz|5`u4{Ox|Mc^psk5`QI}(W;866!pCnhFPTU(1{GC2*%<={9DbX`X*7IR$J z{bFQf<oHW}W2LpWwziCqk8duON^P^*5{U$S-=9*%puDDOKYN~cDU-?En~8Y_kppNQ T9y$Nh00000NkvXXu0mjf+a{!G literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/userLarge.png b/src/com/inventory/ui/images/userLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..88398d99b4d364182c1463dd0691bc013c0081a5 GIT binary patch literal 4478 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 QPyhe`07*qoM6N<$g7)=;>Hq)$ literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/images/userSmall.png b/src/com/inventory/ui/images/userSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d4413aead3fec900cee317905c370a3d1136dd GIT binary patch literal 1635 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 literal 0 HcmV?d00001 diff --git a/src/com/inventory/ui/ims-logo.png b/src/com/inventory/ui/ims-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..422732b633e17612706a590fd0a296789a919682 GIT binary patch literal 8025 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 b_}>8lJxEy0H!`w$00000NkvXXu0mjf6cA6l literal 0 HcmV?d00001 diff --git a/src/inventorymangagementsystem/InventoryManagementSystem.java b/src/inventorymangagementsystem/InventoryManagementSystem.java new file mode 100644 index 0000000..0655b93 --- /dev/null +++ b/src/inventorymangagementsystem/InventoryManagementSystem.java @@ -0,0 +1,67 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package inventorymangagementsystem; + +import com.inventory.ui.LoginDialog; +import com.jtattoo.plaf.hifi.HiFiLookAndFeel; +import java.util.Properties; +import javax.swing.JFrame; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +/** + * + * @author ADMIN + */ +public class InventoryManagementSystem { + + /** + * @param args the command line arguments + */ + public InventoryManagementSystem(int a){ + /* if(a==1){ + try{ + Properties p=new Properties(); + p.put("logoString","IMS"); + HiFiLookAndFeel.setCurrentTheme(p); + UIManager.setLookAndFeel("com.jtattoo.plaf.hifi.HiFiLookAndFeel"); + }catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e){ + e.printStackTrace(); + } + }else if(a==2){ + try{ + Properties p=new Properties(); + p.put("logoString","IMS"); + GraphiteLookAndFeel.setCurrentTheme(p); + UIManager.setLookAndFeel("com.jtattoo.plaf.graphite.GraphiteLookAndFeel"); + }catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e){ + e.printStackTrace(); + } + } */ + } + + public static void main(String[] args) { + // f.setIconImage(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("/images/addPeople.png"))); + try{ + Properties p=new Properties(); + p.put("logoString","IMS"); + HiFiLookAndFeel.setCurrentTheme(p); + //UIManager.setLookAndFeel("com.jtattoo.plaf.hifi.HiFiLookAndFeel"); + UIManager.setLookAndFeel("com.jtattoo.plaf.acryl.AcrylLookAndFeel"); + }catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e){ + e.printStackTrace(); + } + + + LoginDialog ld=new LoginDialog(); + ld.setLocationRelativeTo(null); + ld.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + ld.setVisible(true); + //com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel + } + +} diff --git a/test/desktop.ini b/test/desktop.ini new file mode 100644 index 0000000..64a4af2 --- /dev/null +++ b/test/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=This folder is shared online. +IconFile=C:\Program Files\Google\Drive\googledrivesync.exe +IconIndex=12 + \ No newline at end of file