Package Sales

Source Code of Sales.SalePane

package Sales;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.Timer;
import java.awt.event.*;
import Inventory.GBPane;

import Expense.ExpensePane;
import Inventory.InventoryPane;
import Login.Button;
import Login.DBHandler;
import Login.MainFrame;
import User.UserPane;
import Inventory.GBPane;

public class SalePane extends JPanel implements FocusListener, KeyListener,
    ItemListener, ActionListener, MouseMotionListener, MouseListener {
  private DBHandler db;
  private JPanel parent, debtPane;
  private CardLayout cards;
  private BufferedImage bg, panel1, panel2, panel3, panel4;
  private JFrame frame;
  private int userType, curPanel;
  private String error;
  private Button salesBtn, inBtn, expBtn, usBtn, logBtn, viewSales, createIn,
      updIn, custBal;
  private JButton insert, reset, prevDay, prev, nextDay, next, delete;
  private JTextField soldToBox, inNumBox, customerName, totalBox, balanceBox;
  private Timer time;
  private JComboBox dayBox, yearBox, monthBox, invoiceBox;
  private Date date;
  private JLabel d, m, y;
  private JLabel soldTo, inNum, day, month, year, customer, total, balance,
      limit;
  private JPanel viewPane;
  private JScrollPane scrollPane, scrollPane2, scrollPane3;
  private ArrayList<Invoice> Invoices;
  private ArrayList<JTextField> quantityBoxes, unitBoxes, prodBoxes,
      priceBoxes, newQuans, newPrices;
  private ArrayList<JComboBox> addUnits, addProd;
  private Inventory.GBPane newSales;
  private JTextField enterQuan, enterPrice, limitBox;
  private JComboBox enterUnit, enterProd;
  private Invoice selected;

  public SalePane(DBHandler db, JPanel parent, CardLayout cards, BufferedImage bg, JFrame frame, int userType){
    this.db=db;
    this.parent=parent;
    this.cards=cards;
    this.bg=bg;
    this.frame=frame;
    this.userType=userType;
    this.setLayout(null);
    error=""
    curPanel=0;
    showButtons();
    viewSales.setCurImg(1);
    error=""
    date=new Date();
   
    Invoices=getDBItems("SELECT * from Invoice where dateofReceipt=CurDate();");
    viewPane=new JPanel();
   
    day = new JLabel("Day :");
    month = new JLabel("Month :");
    year = new JLabel("Year :");
    d=new JLabel((date.getDate())+"");
    customer = new JLabel("Customer Name:");
    total= new JLabel("Total:");
    balance = new JLabel("Balance:");
    soldTo =  new JLabel("Sold To:");
    inNum = new JLabel("Invoice No.: ");
    limit = new JLabel("Limit: ");
   
    soldTo.setVisible(false);
    inNum.setVisible(false);
    dayBox=new JComboBox();
    monthBox=new JComboBox();
    yearBox=new JComboBox();
    invoiceBox = new JComboBox();
    prevDay=new JButton("Previous Day");
    prev= new JButton("Previous");
    nextDay= new JButton("Next Day");
    next= new JButton("Next");
    soldToBox = new JTextField();
    inNumBox = new JTextField();
    reset=new JButton("Reset");
    insert = new JButton("Insert");
    limitBox = new JTextField("5000");
    delete = new JButton("Delete");
    try{
      setComboBoxItems(monthBox);
      setComboBoxItems(yearBox);
      addInvoicestoCombobox();
    } catch(SQLException SqlEx){}
   
    if(Invoices.size()>0){
            selected=Invoices.get(0);
            customerName=new JTextField(selected.getCustomerName());
          totalBox=new JTextField(selected.getTotal()+"");
          balanceBox=new JTextField(selected.getBalance()+"");
         
    }
        else {
            customerName=new JTextField(5);
            totalBox=new JTextField(5);
            balanceBox=new JTextField(5);
        }

    recordPaneConfig(0,false);
   
    limitBox.addKeyListener(this);
    limitBox.addFocusListener(this);
    String s="";
    switch(date.getMonth()){
    case 0: s="January"; break;
    case 1: s="February"; break;
    case 2: s="March"; break;
    case 3: s="April"; break;
    case 4: s="May"; break;
    case 5: s="June"; break;
    case 6: s="July"; break;
    case 7: s="August"; break;
    case 8: s="September"; break;
    case 9: s="October"; break;
    case 10: s="November"; break;
    case 11: s="December"; break;
    }
    m=new JLabel(s);
    y=new JLabel((date.getYear()+1900)+"");
   
    dayBox.setBounds(280, 185, 45, dayBox.getPreferredSize().height);
    monthBox.setBounds(375, 185, 100, monthBox.getPreferredSize().height);
    yearBox.setBounds(523, 185, 70, yearBox.getPreferredSize().height);
    day.setBounds(248, 169, 50, 50);
    month.setBounds(335, 169, 70, 50);
    year.setBounds(475, 169, 70, 50);
    invoiceBox.setBounds(310, 225, 190, 26);
    d.setBounds(298, 187, 50, d.getPreferredSize().height);
    m.setBounds(385, 187, 100, m.getPreferredSize().height);
    y.setBounds(523, 187, 50, y.getPreferredSize().height);

    prevDay.setBounds(135, 180, prevDay.getPreferredSize().width,
        prevDay.getPreferredSize().height);
    prev.setBounds(205, 225, prev.getPreferredSize().width,
        prev.getPreferredSize().height);
    nextDay.setBounds(615, 180, nextDay.getPreferredSize().width,
        nextDay.getPreferredSize().height);
    next.setBounds(524, 225, next.getPreferredSize().width,
        next.getPreferredSize().height);
    customer.setBounds(143, 259, 100, 30);
    customerName.setBounds(250, 264, 180, customerName.getPreferredSize().height);
    total.setBounds(538, 431, 50, 20);
    balance.setBounds(538, 451, 70, 20);
    totalBox.setBounds(587, 429, 125, 20);
    balanceBox.setBounds(587, 451, 125, 20);
    soldTo.setBounds(146, 213, 50, 20);
    inNum.setBounds(454, 213, 70, 20);
    soldToBox.setBounds(192, 211, 200, soldToBox.getPreferredSize().height;
    inNumBox.setBounds(518, 211, 150, inNumBox.getPreferredSize().height);
    reset.setBounds(385, 437, 100, 30);
    insert.setBounds(161, 437, 100, 30);
    limit.setBounds(340, 215, 50, limit.getPreferredSize().height);
    limitBox.setBounds(380, 213, 125, limitBox.getPreferredSize().height);
    delete.setBounds(161, 437, 100, 30);
   
    Font font2 = new Font("Calibri", Font.PLAIN, 15);
    dayBox.setFont(font2);
    monthBox.setFont(font2);
    yearBox.setFont(font2);
    d.setFont(font2);
    m.setFont(font2);
    y.setFont(font2);
   
   
    this.add(limit);
    this.add(limitBox);
    this.add(soldToBox);
    this.add(inNumBox);
    this.add(dayBox);
    this.add(day);
    this.add(monthBox);
    this.add(month);
    this.add(yearBox);
    this.add(year);
    this.add(invoiceBox);
    this.add(prevDay);
    this.add(prev);
    this.add(nextDay);
    this.add(next);
    this.add(d);
    this.add(m);
    this.add(y);
    this.add(customer);
    this.add(customerName);
    this.add(total);
    this.add(balance);
    this.add(totalBox);
    this.add(balanceBox);
    this.add(insert);
    this.add(reset);
    this.add(delete);
    inNumBox.setVisible(false);
    soldToBox.setVisible(false);
   
    totalBox.setEditable(false);
    setEditable(false);
    time = new Timer(300, this);
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    
    debtPane = new JPanel();

      changeDebtPane(5000);
    scrollPane3 = new JScrollPane(debtPane);
    scrollPane3.setBounds(137, 294, 554, 125);
   
    scrollPane3.setVisible(false);
   
    newSales=new Inventory.GBPane();
     
    scrollPane2 = new JScrollPane(newSales);
    scrollPane = new JScrollPane(viewPane);
    scrollPane.setBounds(137, 294, 554, 125);
   
    delete.addActionListener(this);
     delete.setVisible(false);
     AddInvoiceConfig(newSales);
    next.addActionListener(this);
    prev.addActionListener(this);
    prevDay.addActionListener(this);
    nextDay.addActionListener(this);
        customerName.addFocusListener(this);
        reset.addActionListener(this);
        insert.addActionListener(this);
        customerName.addKeyListener(this);
        totalBox.addKeyListener(this);
        balanceBox.addKeyListener(this);
        soldToBox.addKeyListener(this);
        inNumBox.addKeyListener(this);
        balanceBox.addKeyListener(this)
        inNumBox.addFocusListener(this);
     

    invoiceBox.addItemListener(this);
    dayBox.addItemListener(this);
    monthBox.addItemListener(this);
    yearBox.addItemListener(this);
    balanceBox.addFocusListener(this);
    balanceBox.addFocusListener(this);
        this.add(scrollPane);
       
    this.add(soldTo);
    this.add(inNum);
    this.add(scrollPane2);
    insert.setEnabled(false);
    reset.setVisible(false);
    limit.setVisible(false);
    limitBox.setVisible(false);
   
   
    scrollPane2.setVisible(false);
    balanceBox.setEditable(false);
    totalBox.setEditable(false);
    limitBox.addKeyListener(this);
    limitBox.addFocusListener(this);
    this.add(scrollPane3);
  }
 

  public void setInComponents(boolean b) {

    dayBox.setVisible(b);
    monthBox.setVisible(b);
    yearBox.setVisible(b);
    d.setVisible(!b);
    m.setVisible(!b);
    y.setVisible(!b);

    prevDay.setVisible(b);
    nextDay.setVisible(b);

  }

  // repaint all the other containers
    public void paintAncestors(Container C) {
      while (C.getParent() != null) {
        C.repaint();
        C = C.getParent();
      }
    }

  public void setEditable(boolean b) {
    balanceBox.setEditable(b);
  }

  public void showButtons() {
    try {
      switch (userType) {

      case 4:
        inBtn = new Button("images/b2.png", "images/b2a.png",
            "images/b2.png");
        expBtn = new Button("images/b3.png", "images/b3a.png",
            "images/b3.png");
        usBtn = new Button("images/b5.png", "images/b5a.png",
            "images/b5.png");

      case 5:
        salesBtn = new Button("images/b1a.png", "images/b1.png",
            "images/b1.png");

      }
      viewSales = new Button("images/s1.png", "images/s1a.png",
          "images/s1.png");
      createIn = new Button("images/s2.png", "images/s2a.png",
          "images/s2.png");
      updIn = new Button("images/s3.png", "images/s3a.png",
          "images/s3.png");
      custBal = new Button("images/custombal.png",
          "images/custombala.png", "images/custombal.png");
      panel1 = ImageIO.read(new File("images/viewsales.png"));
      panel2 = ImageIO.read(new File("images/createinvoice.png"));
      panel3 = ImageIO.read(new File("images/updateinvoice.png"));
      panel4 = ImageIO.read(new File("images/customerBal.png"));

      logBtn = new Button("images/b7.png", "images/b7a.png",
          "images/b7.png");
      /*
       * prevDay = new Button("images/prev.png", "images/preva.png",
       * "images/prev.png"); prev = new Button("images/prev.png",
       * "images/preva.png", "images/prev.png"); nextDay = new
       * Button("images/nextday.png", "images/nextdaya.png",
       * "images/nextday.png"); next = new Button("images/next.png",
       * "images/nextb.png", "images/next.png");
       */

    } catch (IOException e) {
      System.out.print("Image not found");
      e.printStackTrace();
    }

  }
  public ArrayList <String>getCustomerBal(String s,int i){
      ArrayList <String> L=new ArrayList();
      ResultSet RS;
 
      try{
        RS=db.MySQLSelect(s);
        while(RS.next()){
          L.add(RS.getString(i));
        }
      }catch (SQLException SQLe) {
        // TODO Auto-generated catch block
        error ="*Error: Error in Collecting Records";
      }
 
      return L;
    }
 
  public ArrayList<Invoice> getDBItems(String s) {
    ArrayList<Invoice> Records = new ArrayList<Invoice>();
    ResultSet RS, RInvoice;

    RInvoice = db.MySQLSelect(s);

    try {
      while (RInvoice.next())
        Records.add(new Invoice(RInvoice.getString(1), RInvoice
            .getString(3), RInvoice.getString(2), RInvoice
            .getDouble(4)));

      RInvoice.close();

      for (int ctr = 0; ctr < Records.size(); ctr++) {
        RS = db
            .MySQLSelect(
                "Select SaleID,Quantity, unit, productname, price from Sale,product where prCode=ProductCode AND ReceiptNum="
                    + Records.get(ctr).getReceiptNum());
        while (RS.next())
          Records.get(ctr).addSale(
              new Sale(RS.getString(1), RS.getString(4), RS
                  .getString(3), RS.getDouble(2), RS
                  .getDouble(5)));
      }
    } catch (SQLException SQLe) {
      // TODO Auto-generated catch block
      error = "*Error: Error in Collecting Records";
    }

    return Records;
  }

  // Display the Sales in the receipt
  private void recordPaneConfig(int n, boolean edit) {
    viewPane.removeAll();

    if (Invoices.size() > 0) {
      viewPane.setLayout(new GridLayout(
          Invoices.get(n).getSales().size() + 2, 4));
      viewPane.add(new JLabel("Quantity"));
      viewPane.add(new JLabel("Unit"));
      viewPane.add(new JLabel("Product"));
      viewPane.add(new JLabel("Price"));

      quantityBoxes = new ArrayList<JTextField>();
      unitBoxes = new ArrayList<JTextField>();
      prodBoxes = new ArrayList<JTextField>();
      priceBoxes = new ArrayList<JTextField>();

      Invoice I = Invoices.get(n);
      if (I != null && I.getCustomerName() != null)
        customerName.setText(I.getCustomerName() + "");
      else
        customerName.setText("");
      totalBox.setText("" + I.getTotal());
      balanceBox.setText("" + I.getBalance());

      for (int ctr = 0; ctr < I.getSales().size(); ctr++) {
        quantityBoxes.add(new JTextField(I.getSales().get(ctr)
            .getQuantity()
            + ""));
        unitBoxes.add(new JTextField(I.getSales().get(ctr).getUnit()));
        prodBoxes
            .add(new JTextField(I.getSales().get(ctr).getProduct()));
        priceBoxes.add(new JTextField(I.getSales().get(ctr).getPrice()
            + ""));

        viewPane.add(quantityBoxes.get(ctr));
        viewPane.add(unitBoxes.get(ctr));
        viewPane.add(prodBoxes.get(ctr));
        viewPane.add(priceBoxes.get(ctr));

        quantityBoxes.get(ctr).setEditable(edit);
        unitBoxes.get(ctr).setEditable(false);
        prodBoxes.get(ctr).setEditable(false);
        priceBoxes.get(ctr).setEditable(edit);

        quantityBoxes.get(ctr).addFocusListener(this);
        unitBoxes.get(ctr).addFocusListener(this);
        prodBoxes.get(ctr).addFocusListener(this);
        priceBoxes.get(ctr).addFocusListener(this);
        quantityBoxes.get(ctr).addKeyListener(this);
        priceBoxes.get(ctr).addKeyListener(this);
      }
      viewPane.add(enterQuan = new JTextField());
      viewPane.add(enterUnit = new JComboBox());
      viewPane.add(enterProd = new JComboBox());
      viewPane.add(enterPrice = new JTextField());

      enterQuan.setEditable(edit);
      enterUnit.setEnabled(edit);
      enterProd.setEnabled(edit);
      enterPrice.setEditable(edit);

      enterUnit.addActionListener(this);
      enterProd.addActionListener(this);

      try {
        setComboBoxItems(enterUnit);
        setComboBoxItems(enterProd);
      } catch (SQLException e) {
        error = "*Error: Error in collecting data";
      }

    } else
      error="*Error: No Sales Listed today";
  }

  private void ChangeViewPaneContents(String S, boolean edit) {

    customerName.setText(""); // Reset the textboxes to blanks
    totalBox.setText("");
    balanceBox.setText("");

    // get the records from the selected date
    Invoices = getDBItems(S);
    addInvoicestoCombobox();   // Set the values of the combobox containing the Invoices
    recordPaneConfig(0, edit); // Display the Sales in the receipt
    newSales.paintAncestors();
  }

  private void changeDebtPane() {
    ArrayList<String> L1 = getCustomerBal(
        "SELECT CustomerName,sum(RemainingBalance) from Invoice group by customername",
        1);
    ArrayList<String> L2 = getCustomerBal(
        "SELECT CustomerName,sum(RemainingBalance) from Invoice group by customername",
        2);
    debtPane.removeAll();
    if (L1.size() > 0) {
      debtPane.setLayout(new GridLayout(L1.size() + 1, 2));
      debtPane.add(new JLabel("Customer Name"));
      debtPane.add(new JLabel("Balance"));

      for (int ctr = 0; ctr < L1.size(); ctr++) {
        debtPane.add(new JLabel(L1.get(ctr)));
        debtPane.add(new JTextField(L2.get(ctr)));
      }

    }

  }

  private void changeDebtPane(double d) {
    ArrayList<String> L1 = getCustomerBal(
        "SELECT CustomerName,sum(RemainingBalance) from Invoice where RemainingBalance >="
            + d + "group by customername", 1);
    ArrayList<String> L2 = getCustomerBal(
        "SELECT CustomerName,sum(RemainingBalance) from Invoice where RemainingBalance >="
            + d + "group by customername", 2);
    debtPane.removeAll();
    if (L1.size() > 0) {
      debtPane.setLayout(new GridLayout(L1.size() + 1, 2));
      debtPane.add(new JLabel("Customer Name"));
      debtPane.add(new JLabel("Balance"));

      for (int ctr = 0; ctr < L1.size(); ctr++) {
        debtPane.add(new JLabel(L1.get(ctr)));
        debtPane.add(new JLabel(L2.get(ctr)));
      }

    }

  }

  public void manageViewPaneVisibility(boolean view) {

    if (invoiceBox.getItemCount() > 0)
      for (int ctr = 0; ctr < Invoices.get(invoiceBox.getSelectedIndex())
          .getSales().size(); ctr++) {
        quantityBoxes.get(ctr).setEditable(!view);
        priceBoxes.get(ctr).setEditable(!view);
      }

    customerName.setEditable(!view);
    balanceBox.setEditable(!view);
    if (enterQuan != null) {
      enterQuan.setEditable(!view);
      enterUnit.setEnabled(!view);
      enterProd.setEnabled(!view);
      enterPrice.setEditable(false);
      delete.setVisible(!view);
    }
  }

  public void setComboBoxItems(JComboBox cb) throws SQLException {
    cb.removeAllItems();
    if (cb == monthBox) {
      cb.addItem("January");
      cb.addItem("Febuary");
      cb.addItem("March");
      cb.addItem("April");
      cb.addItem("May");
      cb.addItem("June");
      cb.addItem("July");
      cb.addItem("August");
      cb.addItem("September");
      cb.addItem("October");
      cb.addItem("November");
      cb.addItem("December");

      ResultSet RS = db.MySQLSelect("Select Month(now());"), RY, RD;
      RS.first();
      cb.setSelectedIndex(RS.getInt(1) - 1);

      RY = db.MySQLSelect("Select Year(now());");
      RY.first();

      int limit, ctr;

      if (RS.getInt(1) == 1 || RS.getInt(1) == 3 || RS.getInt(1) == 5
          || RS.getInt(1) == 7 || RS.getInt(1) == 8
          || RS.getInt(1) == 10 || RS.getInt(1) == 12)
        limit = 31;
      else if (RS.getInt(1) == 2)
        if (RY.getInt(1) % 4 != 0)
          limit = 28;
        else
          limit = 29;
      else
        limit = 30;

      for (ctr = 1; ctr <= limit; ctr++)
        dayBox.addItem("" + ctr);
      RS.close();
      RY.close();

      RD = db.MySQLSelect("Select Day(now());");
      RD.first();

      dayBox.setSelectedItem(RD.getString(1));
      RD.close();

    } else if (cb == yearBox) {
      ResultSet RS = db
          .MySQLSelect("Select Year(TimeRecorded) from Inventory group by year(TimeRecorded);");

      while (RS.next())
        cb.addItem(RS.getString(1));
      cb.setSelectedIndex(cb.getItemCount() - 1);
      RS.close();
    }

    else if (cb == invoiceBox)
      addInvoicestoCombobox();
    else if ((addUnits != null && addUnits.contains(cb)) || cb == enterUnit) {
      cb.addItem("Select Unit");

      ResultSet RS = db
          .MySQLSelect("SELECT Unit from Product group by Unit;");

      while (RS.next())
        cb.addItem(RS.getString(1));
      RS.close();
    } else if ((addProd != null && addProd.contains(cb)) || cb == enterProd) {
      int i;
      ResultSet RS = null;
      cb.addItem("Select Product");
      if (cb != enterProd) {
        i = addProd.indexOf(cb);

        if (addUnits.get(i).getSelectedIndex() > 0) {
          RS = db.MySQLSelect("SELECT ProductName from Product where Unit='"
              + addUnits.get(i).getSelectedItem().toString()
              + "';");
        }
      } else if (enterUnit.getSelectedIndex() > 0)
        RS = db.MySQLSelect("SELECT ProductName from Product where Unit='"
            + enterUnit.getSelectedItem().toString() + "';");

      if (RS != null) {
        while (RS.next())
          cb.addItem(RS.getString(1));
        RS.close();
      }
    }
  }
  public void addInvoicestoCombobox() {
    if (invoiceBox.getItemCount() > 0)
      invoiceBox.removeAllItems();
    for (int ctr = 0; ctr < Invoices.size(); ctr++)
      invoiceBox.addItem(Invoices.get(ctr).getReceiptNum() + " "
          + Invoices.get(ctr).getCustomerName());
  }

  public void addSalesRow(GBPane gb, int i) {
    newQuans.add(new JTextField("", 5));
    addUnits.add(new JComboBox());
    addProd.add(new JComboBox());
    newPrices.add(new JTextField("", 5));

    try {
      setComboBoxItems(addUnits.get(i));
      setComboBoxItems(addProd.get(i));
    } catch (SQLException e) {
      // TODO Auto-generated catch block
    }

    gb.addComponent(newQuans.get(i), 0, i + 1, 1, 1, 0, 0,
        GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST);
    gb.addComponent(addUnits.get(i), 1, i + 1, 1, 1, 0, 0,
        GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST);
    gb.addComponent(addProd.get(i), 2, i + 1, 1, 1, 0, 0,
        GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST);
    gb.addComponent(newPrices.get(i), 3, i + 1, 1, 1, 0, 0,
        GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST);

    gb.paintAncestors();

    newPrices.get(i).setEditable(false);

    addUnits.get(i).addActionListener(this);
    addProd.get(i).addActionListener(this);
    newQuans.get(i).addFocusListener(this);
    newPrices.get(i).addFocusListener(this);
    newQuans.get(i).addKeyListener(this);
    newPrices.get(i).addKeyListener(this);
  }

  public void AddInvoiceConfig(GBPane gb) {
    gb.removeAll();

    gb.addComponent(new JLabel("Quantity "), 0, 0, 1, 1, 0, 0,
        GridBagConstraints.NONE, GridBagConstraints.WEST);
    gb.addComponent(new JLabel("Unit "), 1, 0, 1, 1, 0, 0,
        GridBagConstraints.NONE, GridBagConstraints.WEST);
    gb.addComponent(new JLabel("Product "), 2, 0, 1, 1, 0, 0,
        GridBagConstraints.NONE, GridBagConstraints.WEST);
    gb.addComponent(new JLabel("Price "), 3, 0, 1, 1, 0, 0,
        GridBagConstraints.NONE, GridBagConstraints.WEST);

    newQuans = new ArrayList<JTextField>();
    addUnits = new ArrayList<JComboBox>();
    addProd = new ArrayList<JComboBox>();
    newPrices = new ArrayList<JTextField>();

    addSalesRow(gb, 0);
  }

  public void ResetInsertion() {
    AddInvoiceConfig(newSales);
    soldToBox.setText("");
    totalBox.setText("");
    balanceBox.setText("");
    inNumBox.setText("");
    newSales.paintAncestors();
    insert.setEnabled(false);
    balanceBox.setEditable(false);
  }

  public void InsertReceipt(){
    String name;
    error="";
     
   
    if(soldToBox.getText().length()==0){
      name="";
      error="*Error:No  customer name";
    }
   
    else{
      name=soldToBox.getText();
      int iRec=db.MySQLInsert("Insert INTO Invoice values ('"+inNumBox.getText()+"',curDate(),'"+name+"',"+balanceBox.getText()
          +");"),cnt;
     
      if(iRec>0){
       
        ResultSet RS;
        String id="";
        for(int ctr=0;ctr<addUnits.size()-1;ctr++){
          RS=db.MySQLSelect("SELECT ProductCode from Product where unit='"+addUnits.get(ctr).getSelectedItem().toString()
            +"' AND productname='"+addProd.get(ctr).getSelectedItem().toString()+"';");
         
          try {
           
            while(RS.next())
              id=RS.getString(1);
            RS.close();
            cnt=db.MySQLInsert("INSERT into Sale values(now()+'"+ctr+"',"+newQuans.get(ctr).getText()
                +","+newPrices.get(ctr).getText()+",'"+inNumBox.getText()+"','"+id+"');");
          } catch (SQLException e) {
            // TODO Auto-generated catch block
            error="*Error: Adding incomplete";
          }
         
        }
       
        ResetInsertion();
      }
    }
  }
 

  // method that changes the DayBox based on the month
  public void dayBoxConfig(int month) {
    int limit, year = Integer.valueOf(yearBox.getSelectedItem().toString()), MaxDay = dayBox
        .getItemCount(), Day = dayBox.getSelectedIndex() + 1;
    // Determine month to determine number of days
    if (month == 0 || month == 2 || month == 4 || month == 6 || month == 7
        || month == 9 || month == 11)
      limit = 31;
    else if (month == 1)
      if (year % 4 != 0)
        limit = 28;
      else
        limit = 29;
    else
      limit = 30;

    dayBox.removeItemListener(this);
    // DayBox.setSelectedIndex(0);

    if (MaxDay < limit)
      for (int ctr = MaxDay + 1; ctr <= limit; ctr++)
        dayBox.addItem("" + ctr);
    else if (MaxDay > limit) {
      dayBox.removeAllItems();
      for (int ctr = 1; ctr <= limit; ctr++)
        dayBox.addItem("" + ctr);
      while (Day > limit)
        Day--;
      dayBox.setSelectedItem("" + Day);
    }
    monthBox.addItemListener(this);
    dayBox.addItemListener(this);
  }

  // Method that responds to the next and previous day buttons
  public void nextPrevDay(int change) {
    int month;
    if (change > 0) {
      if (dayBox.getSelectedIndex() < dayBox.getItemCount() - change)
        dayBox.setSelectedIndex(dayBox.getSelectedIndex() + change);
      else if (monthBox.getSelectedIndex() < monthBox.getItemCount()
          - change) {
        monthBox.removeItemListener(this);
        monthBox.setSelectedIndex(monthBox.getSelectedIndex() + change);
        month = monthBox.getSelectedIndex();

        dayBoxConfig(month);

        dayBox.setSelectedIndex(0);
      } else {
        yearBox.removeItemListener(this);
        yearBox.addItem(""
            + (Integer
                .valueOf(yearBox.getSelectedItem().toString()) + 1));
        yearBox.setSelectedIndex(yearBox.getItemCount() - 1);
        monthBox.setSelectedIndex(0);
        dayBox.setSelectedIndex(0);
        yearBox.addItemListener(this);

      }

    } else if (change < 0) {
      if (dayBox.getSelectedIndex() > 0)
        dayBox.setSelectedIndex(dayBox.getSelectedIndex() + change);
      else if (monthBox.getSelectedIndex() > 0) {
        monthBox.removeItemListener(this);
        monthBox.setSelectedIndex(monthBox.getSelectedIndex() + change);
        month = monthBox.getSelectedIndex();
        dayBoxConfig(month);

        dayBox.setSelectedIndex(dayBox.getItemCount() - 1);
      } else if (yearBox.getSelectedIndex() > 0)
        yearBox.setSelectedIndex(yearBox.getSelectedIndex() + change);
      else
        error = "*Error: No more record in the previous Years";
    }
  }

  private double calculateNewInvoiceCost() {
    double sum = 0;

    for (int ctr = 0; ctr < newPrices.size() - 1; ctr++)
      sum += Double.valueOf(newPrices.get(ctr).getText());
    return sum;
  }

  private double getProductCost(String Unit, String Product)
      throws SQLException {
    ResultSet RS;
    double cost = 1;
    RS = db.MySQLSelect("SELECT unitPrice from Product where unit='" + Unit
        + "' AND ProductName='" + Product + "';");
    while (RS.next())
      cost = RS.getDouble(1);

    return cost;
  }

  public void deleteSale(int i, JTextField txt) {
    if (quantityBoxes != null
        && (quantityBoxes.contains(txt) || priceBoxes.contains(txt))) {
      try {
        db.MySQLUpdate("DELETE from Sale where SaleID='"
            + selected.getSales().get(i).getID() + "';");
      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      selected.getSales().remove(i);
      recordPaneConfig(invoiceBox.getSelectedIndex(), true);
      paintAncestors(viewPane);

    } else {

      // Remove from panel
      newSales.remove(newQuans.get(i));
      newSales.remove(newPrices.get(i));
      newSales.remove(addProd.get(i));
      newSales.remove(addUnits.get(i));

      // Remove sale from list
      newQuans.remove(i);
      newPrices.remove(i);
      addUnits.remove(i);
      addProd.remove(i);

      calculateNewInvoiceCost();
      newSales.paintAncestors();
    }
  }

  @Override
  public void itemStateChanged(ItemEvent IE) {
    // TODO Auto-generated method stub
    error ="";
    if (IE.getSource() == monthBox) {
      monthBox.removeItemListener(this);
      dayBoxConfig(monthBox.getSelectedIndex());
    }

    if (IE.getSource() == invoiceBox && invoiceBox.getItemCount() > 0) {
      recordPaneConfig(invoiceBox.getSelectedIndex(),
          !monthBox.isVisible());
      paintAncestors(viewPane);
      selected = Invoices.get(invoiceBox.getSelectedIndex());
    } else if (IE.getSource() == dayBox || IE.getSource() == monthBox
        || IE.getSource() == yearBox) {

      // get the records from the selected date
      ChangeViewPaneContents(
          "SELECT * from Invoice where dateofReceipt='"
              + yearBox.getSelectedItem().toString() + "-"
              + (monthBox.getSelectedIndex() + 1) + "-"
              + dayBox.getSelectedItem().toString() + "';", false);
    }
  }

  public void deleteInvoice(){
    error = "";
    try {
      db.MySQLUpdate("DELETE from Invoice where receiptNumber='"+selected.getReceiptNum()+"';");
      Invoices.remove(selected);
      //Must only delete invoices of the current date
      ChangeViewPaneContents("SELECT * from Invoice where dateofReceipt=CurDate()",true);
    } catch (SQLException SE) {
      error="*Error: Delete failed";
    }
  }

  @Override
  public void actionPerformed(ActionEvent AE) {
    // TODO Auto-generated method stub
    repaint();
    if (scrollPane != null) {
      scrollPane.revalidate();
      scrollPane2.revalidate();
      scrollPane3.revalidate();

    }
    switch (curPanel) {

    case 0:
      viewSales.setCurImg(1);
      customerName.setEditable(false);
      break;
    case 1:
      createIn.setCurImg(1);

      break;
    case 2:
      updIn.setCurImg(1);
      customerName.setEditable(true);
      break;
    case 3:
      custBal.setCurImg(1);
      manageViewPaneVisibility(true);
      break;
    }
        if(AE.getSource()==next&&invoiceBox.getSelectedIndex()<invoiceBox.getItemCount()-1)
      invoiceBox.setSelectedIndex(invoiceBox.getSelectedIndex()+1);
    else if(AE.getSource()==prev&&invoiceBox.getSelectedIndex()>0)
      invoiceBox.setSelectedIndex(invoiceBox.getSelectedIndex()-1);
    else if(AE.getSource()==prevDay)
      nextPrevDay(-1);
    else if(AE.getSource()==nextDay)
      nextPrevDay(1);
    else if(AE.getSource()==delete)
      deleteInvoice();
    else if(AE.getSource()==enterUnit)
      try {
        error="";
        setComboBoxItems(enterProd);
      } catch (SQLException e) {
        error="*Error: No product with that unit";
      }
    else if(AE.getSource()==enterProd){
      double cost=1,q=1;
      String fid="",now=db.getMysqlNow();
      if(balanceBox!=null)
        balanceBox.setEditable(true);

            if(enterQuan.getText().length()>0)
                  try{
                      q=Double.valueOf(enterQuan.getText());
                      error="";
                  }catch(NumberFormatException NE){
                       error="Type numbers for quantity";
                       q=1;
                       enterQuan.setText(""+1);
                     }
      if(enterUnit.getSelectedIndex()>0&&enterQuan.getText().length()==0)
        enterQuan.setText(""+1);
     
      if(enterProd.getSelectedIndex()>0){
        try{
         
          ResultSet RS=db.MySQLSelect("SELECT ProductCode from Product where unit='"+enterUnit.getSelectedItem().toString()
              +"' AND productname='"+enterProd.getSelectedItem().toString()+"';");
         
          while(RS.next())
            fid=RS.getString(1);
          RS.close();
         
          if(enterQuan.getText().length()>0)
            cost=getProductCost(enterUnit.getSelectedItem().toString(), enterProd.getSelectedItem().toString())*Double.valueOf(enterQuan.getText());
          else cost=getProductCost(enterUnit.getSelectedItem().toString(), enterProd.getSelectedItem().toString());
         
         
          enterPrice.setText(""+cost);
          db.MySQLInsert("INSERT into Sale values('"+now+"', "+enterQuan.getText()
              +","+enterPrice.getText()+","+selected.getReceiptNum()+",'"+fid+"');");
          selected.getSales().add(new Sale(now, enterProd.getSelectedItem().toString(),enterUnit.getSelectedItem().toString(), Double.valueOf(enterQuan.getText()), cost, selected));
          error="";
        }catch (SQLException SE) {
          error="*Error: Price not found";
          cost=1;
        }
        enterPrice.setEditable(true);
        enterPrice.setText(""+cost)//get the cost of the sale
       
        //Change the panel containing the recipt to correspond to the database
        recordPaneConfig(invoiceBox.getSelectedIndex(), true);
     
      }
    }
    else if(addUnits!=null&&addUnits.contains(AE.getSource())){
      int i=addUnits.indexOf(AE.getSource());
      try {
        setComboBoxItems(addProd.get(i));
        error="";
      } catch (SQLException e) {
        // TODO Auto-generated catch block
        error="*Error: No Product with that unit";
      }
    }
    else if(addProd!=null&&addProd.contains(AE.getSource())){
      int i=addProd.indexOf(AE.getSource());
      double cost=0,q;

                        try{
                            q=Double.valueOf(newQuans.get(i).getText());

                        }
                        catch(NumberFormatException NE){
                            q=1;
                            newQuans.get(i).setText(""+q);
                        }

      if((newQuans.get(i).getText().length()==0||q<=0)&&addUnits.get(i).getSelectedIndex()>0)
        newQuans.get(i).setText(""+1);
     
      if(addProd.get(i).getSelectedIndex()>0){
        try{
          cost=getProductCost(addUnits.get(i).getSelectedItem().toString(), addProd.get(i).getSelectedItem().toString())*Double.valueOf(newQuans.get(i).getText());
         
        }catch (SQLException SE) {
          error="*Error: Price not found";
          cost=0;
        }
        newPrices.get(i).setEditable(true);
        newPrices.get(i).setText(""+cost)//get the cost of the sale
       
        if(i==addProd.size()-1)
          addSalesRow(newSales, i+1);
       
        totalBox.setText(""+calculateNewInvoiceCost())//Update the total
        if(inNumBox.getText().length()>0){
          insert.setEnabled(true);
          balanceBox.setEditable(true);
        }
      }
     
    }
    else if(AE.getSource()==reset)
      ResetInsertion();
    else if(AE.getSource()==insert)
      InsertReceipt();
      
    if (scrollPane != null) {
      scrollPane.revalidate();
      scrollPane2.revalidate();

      scrollPane3.revalidate();
    }
  }

  public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2D = (Graphics2D) g;
    time.start();
    g2D.drawImage(bg, 0, 0, null);

    switch (userType) {
    case 4:
      g2D.drawImage(usBtn.getCurImg(), 497, 8, null);
      g2D.drawImage(inBtn.getCurImg(), 269, 8, null);
      g2D.drawImage(expBtn.getCurImg(), 383, 8, null);

    case 5:
      g2D.drawImage(salesBtn.getCurImg(), 145, 8, null);

    }
    g2D.drawImage(logBtn.getCurImg(), 611, 8, null);

    Font font = new Font("Calibri", Font.PLAIN, 20);
    g2D.drawImage(viewSales.getCurImg(), 10, 100, null);
    g2D.drawImage(createIn.getCurImg(), 10, 200, null);
    g2D.drawImage(updIn.getCurImg(), 10, 300, null);
    g2D.drawImage(custBal.getCurImg(), 10, 400, null);

    g2D.setColor(Color.RED);
    g2D.setFont(font);

    if (curPanel == 0) {
      g2D.drawImage(panel1, 125, 105, null);
      g2D.drawString(error, 297, 167);

    }
    if (curPanel == 1) {
      g2D.drawImage(panel2, 125, 105, null);

    }
    if (curPanel == 2) {
      g2D.drawImage(panel3, 125, 105, null);

    }
    if (curPanel == 3) {
      g2D.drawImage(panel4, 125, 105, null);

    }
    Font font2 = new Font("Calibri", Font.PLAIN, 20);

    g2D.setColor(Color.RED);
    g2D.setFont(font2);

    g2D.drawString(error, 297, 167);

  }

  @Override
  public void mouseClicked(MouseEvent m) {
    // TODO Auto-generated method stubn
    switch (userType) {
    case 4:
      if (m.getX() >= 504 && m.getX() <= 581 && m.getY() >= 7
          && m.getY() <= 85)// within the boundaries of us btn
        cards.show(parent, "users");
      else if (m.getX() >= 275 && m.getX() <= 354 && m.getY() >= 7
          && m.getY() <= 88)// within the boundaries of inventory btn
        cards.show(parent, "inventory");
      else if (m.getX() >= 390 && m.getX() <= 469 && m.getY() >= 8
          && m.getY() <= 86)// within the boundaries of exp btn
        cards.show(parent, "expense");

      break;
    }
    if (m.getX() >= 617 && m.getX() <= 698 && m.getY() >= 9
        && m.getY() <= 85) {// within the boundaries of log out btn
      final JFrame frame2 = new JFrame("Confirm Action");

      JLabel label = new JLabel();
      JLabel label2 = new JLabel("Are you sure you want to log out?");
      JButton yes = new JButton("Yes");
      JButton no = new JButton("No");
      yes.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
          // TODO Auto-generated method stub
          new MainFrame();
          frame.dispose();
          frame2.dispose();
        }
      });
      yes.setIcon(new ImageIcon("Images/yes.png"));
      no.setIcon(new ImageIcon("Images/no.png"));

      no.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
          // TODO Auto-generated method stub
          frame2.dispose();
        }
      });

      label2.setFont(new Font(Font.SERIF, Font.PLAIN, 17));

      JPanel panel = new JPanel();
      ImageIcon confirm;
      confirm = new ImageIcon("Images/confirmaction.png");
      label.setIcon(confirm);

      panel.add(label);
      panel.add(label2);
      panel.add(yes);
      panel.add(no);

      label.setBounds(26, 20, 120, 120);
      label2.setBounds(145, 40, 250, 30);
      yes.setBounds(160, 105, 80, yes.getPreferredSize().height);
      no.setBounds(260, 105, 80, no.getPreferredSize().height + 2);

      panel.setLayout(null);
      frame2.add(panel);
      frame2.setVisible(true);
      frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame2.setSize(400, 200);
      frame2.setLocationRelativeTo(null);

    }

    if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 100
        && m.getY() <= 181) {// within the boundaries of view sales btn
      error = "";
      scrollPane.revalidate();
      scrollPane2.revalidate();
      curPanel = 0;
      viewSales.setCurImg(1);
      createIn.setCurImg(0);
      updIn.setCurImg(0);
      custBal.setCurImg(0);
      setInComponents(true);
      delete.setVisible(false);
      scrollPane3.setVisible(false);
      invoiceBox.setVisible(true);
      prev.setVisible(true);
      next.setVisible(true);
      customer.setVisible(true);
      customerName.setVisible(true);
      setEditable(false);
      soldTo.setVisible(false);
      inNum.setVisible(false);
      soldToBox.setVisible(false);
      inNumBox.setVisible(false);
      ChangeViewPaneContents("SELECT * from Invoice where dateofReceipt='"+
          yearBox.getSelectedItem().toString()+"-"+(monthBox.getSelectedIndex()+1)+"-"+dayBox.getSelectedItem().toString()+"';",false);
      manageViewPaneVisibility(true);insert.setVisible(false);
      reset.setVisible(false);
      scrollPane.setVisible(true);
      scrollPane2.setVisible(false);

      total.setVisible(true);
      balance.setVisible(true);
      balanceBox.setVisible(true);
      totalBox.setVisible(true);
      limit.setVisible(false);
      limitBox.setVisible(false);


    } else if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 200
        && m.getY() <= 281) {// create
   
      totalBox.setText("");
      balanceBox.setText("0.0");
      error = "";
      scrollPane2.revalidate();
      curPanel = 1;
     
      scrollPane3.setVisible(false);
      viewSales.setCurImg(0);
      createIn.setCurImg(1);
      updIn.setCurImg(0);
      custBal.setCurImg(0);

      invoiceBox.setVisible(false);
      prev.setVisible(false);
      next.setVisible(false);
      customer.setVisible(false);
      customerName.setVisible(false);
      setEditable(false);
      inNumBox.setVisible(true);
      soldToBox.setVisible(true);

      soldTo.setVisible(true);
      inNum.setVisible(true);
      scrollPane.setVisible(false);
      scrollPane2.setVisible(true);
      scrollPane2.setBounds(137, 245, 554, 175);
      insert.setVisible(true);
     
      reset.setVisible(true);
      setInComponents(false);

      delete.setVisible(false);
      total.setVisible(true);
      balance.setVisible(true);
      balanceBox.setVisible(true);
      totalBox.setVisible(true);
      limit.setVisible(false);
      limitBox.setVisible(false);
      customerName.setText(""+invoiceBox.getSelectedItem());
    }

    else if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 300
        && m.getY() <= 377) {//manage
      error = "";
      scrollPane.revalidate();
      curPanel = 2;

      scrollPane3.setVisible(false);
      insert.setVisible(false);
      viewSales.setCurImg(0);
      createIn.setCurImg(0);
      updIn.setCurImg(1);
      custBal.setCurImg(0);
      invoiceBox.setVisible(true);
      prev.setVisible(true);
      next.setVisible(true);
      customer.setVisible(true);
      customerName.setVisible(true);
      setEditable(true);

      scrollPane.setVisible(true);
      scrollPane2.setVisible(false);
      soldTo.setVisible(false);
      inNum.setVisible(false);
      soldToBox.setVisible(false);
      inNumBox.setVisible(false);
      scrollPane.setBounds(137, 294, 554, 125);
      insert.setVisible(false);
      reset.setVisible(false);

      delete.setVisible(true);
      total.setVisible(true);
      balance.setVisible(true);
      balanceBox.setVisible(true);
      totalBox.setVisible(true);
      // Must only modify sales of the current date
      ChangeViewPaneContents("SELECT * from Invoice where dateofReceipt=CurDate()",true);
      manageViewPaneVisibility(false);
      limit.setVisible(false);
      limitBox.setVisible(false);

    } else if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 399
        && m.getY() <= 478) {// customer balance
      error = "";

      delete.setVisible(false);
      scrollPane3.setVisible(true);
      curPanel = 3;
      viewSales.setCurImg(0);
      createIn.setCurImg(0);
      updIn.setCurImg(0);
      custBal.setCurImg(1);
      insert.setVisible(false);
      reset.setVisible(false);
      scrollPane.setVisible(false);
      scrollPane2.setVisible(false);
      limit.setVisible(true);
      limitBox.setVisible(true);

      manageViewPaneVisibility(false);
      inNumBox.setVisible(false);
      soldToBox.setVisible(false);
      prevDay.setVisible(false);
      nextDay.setVisible(false);
      prev.setVisible(false);
      next.setVisible(false);
      setInComponents(false);
      soldTo.setVisible(false);
      inNum.setVisible(false);
      total.setVisible(false);
      balance.setVisible(false);
      balanceBox.setVisible(false);
      totalBox.setVisible(false);
      customer.setVisible(false);
      customerName.setVisible(false);
      invoiceBox.setVisible(false);

    }

  }

  @Override
  public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }

  @Override
  public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }

  @Override
  public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }

  @Override
  public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }

  @Override
  public void mouseDragged(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }

  @Override
  public void mouseMoved(MouseEvent m) {
    // TODO Auto-generated method stub
    switch (userType) {

    case 4:
      if (m.getX() >= 275 && m.getX() <= 354 && m.getY() >= 7
          && m.getY() <= 88)// within the boundaries of inventory btn
        inBtn.setCurImg(1);
      else if (m.getX() >= 390 && m.getX() <= 469 && m.getY() >= 8
          && m.getY() <= 86)// within the boundaries of exp btn
        expBtn.setCurImg(1);
      else if (m.getX() >= 504 && m.getX() <= 581 && m.getY() >= 7
          && m.getY() <= 85)// within the boundaries of us btn
        usBtn.setCurImg(1);
      else if (m.getX() >= 617 && m.getX() <= 698 && m.getY() >= 9
          && m.getY() <= 85)// within the boundaries of log out btn
        logBtn.setCurImg(1);

      else {
        salesBtn.setCurImg(0);
        inBtn.setCurImg(0);
        expBtn.setCurImg(0);
        usBtn.setCurImg(0);
        logBtn.setCurImg(0);
      }
      break;

    case 5:

      if (m.getX() >= 617 && m.getX() <= 698 && m.getY() >= 9
          && m.getY() <= 85)// within the boundaries of log out btn
        logBtn.setCurImg(1);
      else
        salesBtn.setCurImg(0);
      logBtn.setCurImg(0);

    }
    if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 100
        && m.getY() <= 181)// within the boundaries of view sales btn
      viewSales.setCurImg(1);
    else if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 200
        && m.getY() <= 281)
      createIn.setCurImg(1);
    else if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 300
        && m.getY() <= 377)
      updIn.setCurImg(1);
    else if (m.getX() >= 17 && m.getX() <= 94 && m.getY() >= 399
        && m.getY() <= 478)
      custBal.setCurImg(1);
    else {
      viewSales.setCurImg(0);
      createIn.setCurImg(0);
      updIn.setCurImg(0);
      custBal.setCurImg(0);
    }

  }

  @Override
  public void focusGained(FocusEvent FE) {
    int i;

    if (FE.getSource() == enterQuan)
      if (enterQuan.getText().length() > 0)
        enterQuan.setToolTipText("" + enterQuan.getText());
      else
        enterQuan.setToolTipText("1");

    else if (newQuans.contains(FE.getSource())) {
      i = newQuans.indexOf(FE.getSource());
      double d;
      if (newQuans.get(i).getText().length() > 0) {
        try {
          d = Double.valueOf(newQuans.get(i).getText());

        } catch (NumberFormatException NE) {
          d = 1;
        }
        newQuans.get(i).setToolTipText("" + d);
      } else
        newQuans.get(i).setToolTipText("1");
    } else if (newPrices.contains(FE.getSource())) {
      i = newPrices.indexOf(FE.getSource());
      if (newQuans.get(i).getText().length() > 0)
        newPrices.get(i)
            .setToolTipText("" + newPrices.get(i).getText());
      else
        newPrices.get(i).setToolTipText("1");
    }
   
  }

  @Override
  public void focusLost(FocusEvent FE) {
    double cost = 1;
    int i;

    error = "";
    if (quantityBoxes != null && quantityBoxes.contains(FE.getSource())) {
      i = quantityBoxes.indexOf(FE.getSource());
      double q = selected.getSales().get(i).getQuantity();

      try {
        q = Double.valueOf(quantityBoxes.get(i).getText());
      } catch (NumberFormatException NE) {
        q = selected.getSales().get(i).getQuantity();
        quantityBoxes.get(i).setText("" + q);
      }

      if (quantityBoxes.get(i).getText().length() == 0) {
        error = "*Error: Do not put empty values on Quantity!";
        quantityBoxes.get(i).setText(
            "" + selected.getSales().get(i).getQuantity());
      } else if (q <= 0) {
        error = "*Error: Enter a number greater than 0!";
        quantityBoxes.get(i).setText(
            "" + selected.getSales().get(i).getQuantity());
      } else
        try {
          selected.getSales()
              .get(i)
              .setQuantity(
                  Double.valueOf(quantityBoxes.get(i)
                      .getText()));
          cost = getProductCost(selected.getSales().get(i).getUnit(),
              selected.getSales().get(i).getProduct())
              * Double.valueOf(quantityBoxes.get(i).getText());
          selected.getSales().get(i).setPrice(cost);
          priceBoxes.get(i).setText("" + cost);
          db.MySQLUpdate("UPDATE Sale SET Quantity="
              + quantityBoxes.get(i).getText() + ", price="
              + cost + " where SaleID='"
              + selected.getSales().get(i).getID() + "';");
          totalBox.setText("" + selected.getTotal());
        } catch (SQLException SQLEx) {
          error = "*Error: " + SQLEx;
          quantityBoxes.get(i).setText(
              selected.getSales().get(i).getQuantity() + "");
        }
    } else if (priceBoxes != null && priceBoxes.contains(FE.getSource())) {
      i = priceBoxes.indexOf(FE.getSource());
      double p = selected.getSales().get(i).getPrice();
      try {
        p = Double.valueOf(priceBoxes.get(i).getText());
      } catch (NumberFormatException NE) {
        p = selected.getSales().get(i).getPrice();
        priceBoxes.get(i).setText(
            "" + selected.getSales().get(i).getPrice());
      }

      if (priceBoxes.get(i).getText().length() == 0) {
        error = "*Error: Do not put empty values on Price!";
        priceBoxes.get(i).setText("" + p);
      } else if (p <= 0) {
        error = "*Error: Enter a number greater than 0!";
        priceBoxes.get(i).setText(
            "" + selected.getSales().get(i).getPrice());
      } else
        try {
          selected.getSales().get(i).setPrice(p);
          db.MySQLUpdate("UPDATE Sale SET Price="
              + p
              + " where SaleID='"
              + Invoices.get(invoiceBox.getSelectedIndex())
                  .getSales().get(i).getID() + "';");
          totalBox.setText("" + selected.getTotal());
        } catch (Exception SQLEx) {

          error = "*Error: " + SQLEx;
          priceBoxes.get(i).setText(
              selected.getSales().get(i).getPrice() + "");
        }
    } else if (FE.getSource() == customerName
        && invoiceBox.getItemCount() > 0) {
      try {
        selected.setCustomerName(customerName.getText());
        invoiceBox.setSelectedItem(customerName.getText());
        db.MySQLUpdate("UPDATE Invoice SET CustomerName='"
            + customerName.getText() + "' where receiptNumber='"
            + selected.getReceiptNum() + "';");
      } catch (SQLException SQLEx) {
        error = "*Error: " + SQLEx;
        customerName.setText(selected.getCustomerName());
      }
    } else if (FE.getSource() == balanceBox
        && invoiceBox.getItemCount() > 0) {
      try {
        selected.setBalance(Double.valueOf(balanceBox.getText()));
        if (Double.valueOf(balanceBox.getText()) < 0) {
          error = "*Error: Balance must not be less than zero";
          balanceBox.setText("" + selected.getBalance());
        }
        db.MySQLUpdate("UPDATE Invoice SET remainingBalance='"
            + customerName.getText() + "' where receiptNumber='"
            + selected.getReceiptNum() + "';");
      } catch (SQLException SQLEx) {
        error = "*Error: " + SQLEx;
        balanceBox.setText(0.0+"");
      }
    } else if (newQuans.contains(FE.getSource())) {
      double oldCost = 0, q = 1;
      i = newQuans.indexOf(FE.getSource());

      if (newQuans.get(i).getText().length() > 0 && q < 0) {
        newQuans.get(i).setText(
            "" + (Double.valueOf(newQuans.get(i).getText()) * -1));
        error = "*Error: No negative values for quantity";
      }
      if (newQuans.get(i).getText().length() > 0
          && addUnits.get(i).getSelectedIndex() > 0
          && addProd.get(i).getSelectedIndex() > 0) {
        try {
          cost = getProductCost(addUnits.get(i).getSelectedItem()
              .toString(), addProd.get(i).getSelectedItem()
              .toString());
          totalBox.setText(""
              + (Double.valueOf(newPrices.get(i).getText()) - oldCost)); // Reduce
                                            // the
                                            // total
        } catch (SQLException SE) {
          error = "*Error: Price not found";
          newQuans.get(i).setText("" + oldCost / cost);
          cost = oldCost;

        }
        cost *= q;
        newPrices.get(i).setText("" + cost); // get the cost of the sale
        totalBox.setText("" + calculateNewInvoiceCost()); // Update the
                                  // total
      }

    } else if (newPrices.contains(FE.getSource())) {
      double d;
      i = newPrices.indexOf(FE.getSource());

      try {
        d = Double.valueOf(newPrices.get(i).getText());
        newPrices.get(i).setText("" + d);
      } catch (NumberFormatException NE) {
        if (newPrices.get(i).getToolTipText().length() > 0) {
          d = 1;
          newPrices.get(i).setText(newPrices.get(i).getToolTipText());
        } else {
          d = 0;
          newPrices.get(i).setText("0");
        }
      }
      if (d < 0)
        newPrices.get(i).setText("" + (d * -1));
      if (newPrices.get(i).getText().length() > 0
          && newQuans.get(i).getText().length() > 0
          && addUnits.get(i).getSelectedIndex() > 0
          && addProd.get(i).getSelectedIndex() > 0) {
        try {
          cost = getProductCost(addUnits.get(i).getSelectedItem()
              .toString(), addProd.get(i).getSelectedItem()
              .toString());
        } catch (SQLException SE) {
          error = "*Error: Price not found";
          cost = 0;
        }
        try {
          cost *= Double.valueOf(newQuans.get(i).getText());
        } catch (NumberFormatException e) {
          error = "*Error: Input must be a valid number";
        }
        newPrices.get(i).setText("" + cost); // get the cost of the sale
        totalBox.setText("" + calculateNewInvoiceCost()); // Update the
                                  // total
      }
    } else if (FE.getSource() == inNumBox) {
      int Rnum = 0;
      try {
        Rnum = Integer.valueOf(inNumBox.getText());
      } catch (NumberFormatException NE) {
        Rnum = Integer.valueOf(Invoices.get(Invoices.size() - 1)
            .getReceiptNum()) + 1;
        inNumBox.setText("" + Rnum);
        error = "*Error: Enter a valid number for Receipt no.";
        inNumBox.requestFocus();
      }

      if (Rnum < 0) {
        Rnum *= -1;
        inNumBox.setText("" + Rnum);
        error = "*Error: Enter positive numbers only";
      }

    } else if (FE.getSource() == limitBox) {
      double d = 0;

      try {
        d = Double.valueOf(limitBox.getText());
        if (d < 0)
          d *= -1;
      } catch (NumberFormatException NE) {
        d = 0;

      }
      limitBox.setText("" + d);
      changeDebtPane(d);
      paintAncestors(debtPane);
    }
  }

  @Override
  public void keyPressed(KeyEvent KE) {
    // TODO Auto-generated method stub

  }

  @Override
  public void keyReleased(KeyEvent KE) {
    int i;
    error = "";
    
    if (KE.getSource() == customerName
        && KE.getKeyCode() == KeyEvent.VK_ENTER)
      totalBox.requestFocus();
    else if (KE.getSource() == totalBox
        && KE.getKeyCode() == KeyEvent.VK_ENTER)
      balanceBox.requestFocus();
    else if (KE.getSource() == balanceBox
        && KE.getKeyCode() == KeyEvent.VK_ENTER)
      customerName.requestFocus();
    else if (KE.getSource() == soldToBox) {
      if (KE.getKeyCode() == KeyEvent.VK_ENTER)
        inNumBox.requestFocus();

      if (newQuans.size() > 1)
        insert.setEnabled(true);
    } else if (KE.getSource() == inNumBox) {
      if (KE.getKeyCode() == KeyEvent.VK_ENTER)
        balanceBox.requestFocus();

      if (inNumBox.getText().length() == 0)
        insert.setEnabled(false);
      else if (newQuans.size() >1)
        insert.setEnabled(true);
    } else if (KE.getSource() == balanceBox
        && KE.getKeyCode() == KeyEvent.VK_ENTER)
      soldToBox.requestFocus();
    else if (quantityBoxes != null
        && quantityBoxes.contains(KE.getSource())) {
      i = quantityBoxes.indexOf(KE.getSource());
      if (KE.getKeyCode() == KeyEvent.VK_ENTER)
        priceBoxes.get(i).requestFocus();
      else if (quantityBoxes.get(i).isEditable()
          && KE.getKeyCode() == KeyEvent.VK_DELETE
          && priceBoxes.size() > 1)
        deleteSale(i, quantityBoxes.get(i));
    } else if (priceBoxes != null && priceBoxes.contains(KE.getSource())) {
      i = priceBoxes.indexOf(KE.getSource());

      if (KE.getKeyCode() == KeyEvent.VK_ENTER
          && i < priceBoxes.size() - 1)
        quantityBoxes.get(i + 1).requestFocus();
      else if (priceBoxes.get(i).isEditable()
          && KE.getKeyCode() == KeyEvent.VK_DELETE
          && priceBoxes.size() > 1)
        deleteSale(i, quantityBoxes.get(i));
    } else if (newQuans.contains(KE.getSource())) {
      i = newQuans.indexOf(KE.getSource());
      if (KE.getKeyCode() == KeyEvent.VK_ENTER)
        newPrices.get(i).requestFocus();
      else if (i < newQuans.size() - 1
          && KE.getKeyCode() == KeyEvent.VK_DELETE)
        deleteSale(i, newQuans.get(i));
    } else if (newPrices.contains(KE.getSource())) {
      i = newPrices.indexOf(KE.getSource());
      if (KE.getKeyCode() == KeyEvent.VK_ENTER
          && i < newPrices.size() - 1)
        newQuans.get(i + 1).requestFocus();
    }

    else if (KE.getSource() == limitBox
        && KE.getKeyCode() == KeyEvent.VK_ENTER) {
      int n = 0;
      try {
        n = Integer.parseInt(limitBox.getText());
        changeDebtPane(n);
      } catch (Exception e) {
        error = "*Error: Please enter a valid number";
      }
    }

  }

  @Override
  public void keyTyped(KeyEvent KE) {
    // TODO Auto-generated method stub

  }

}
TOP

Related Classes of Sales.SalePane

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.