Untitled

mail@pastecode.io avatar
unknown
java
2 years ago
16 kB
2
Indexable
Never
package gui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

import dao.ConnectionUtils;
import models.donhang;
import models.donhangModel;
import models.khachhang;
import models.khachhangModel;
import models.laptop;
import models.laptopModel;

import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.sql.Date;
import java.util.List;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class JFrm_ThongTinDonHang extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField txtSoDH;
	private JTextField txtKH;
	private JTextField txtDiaChi;
	private JTextField txtDienThoai;
	private JFormattedTextField txtNgay;
	private JTable table;
	static DateFormat format = new SimpleDateFormat("dd/MM/yyyy");

	private JButton btnThoat = new JButton("Thoát");
	private JButton btnSua = new JButton("Sửa");
	private JButton btnXoa = new JButton("Xóa");
	private JButton btnThem = new JButton("Thêm");
	private JButton btnTim = new JButton("Tìm");
	private JComboBox<String> cmbKH = new JComboBox<String>();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JFrm_ThongTinDonHang frame = new JFrm_ThongTinDonHang();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 * 
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public JFrm_ThongTinDonHang() throws ClassNotFoundException, SQLException {
		setTitle("Thông tin Đơn hàng");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 760, 585);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JPanel panel_input = new JPanel();
		panel_input.setLayout(null);
		panel_input.setBounds(10, 11, 724, 122);
		contentPane.add(panel_input);

		JLabel lblSnHng = new JLabel("Số đơn hàng:");
		lblSnHng.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblSnHng.setBounds(10, 11, 110, 19);
		panel_input.add(lblSnHng);

		JLabel lblHngSnXut = new JLabel("Khách Hàng:");
		lblHngSnXut.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblHngSnXut.setBounds(10, 36, 110, 19);
		panel_input.add(lblHngSnXut);

		JLabel lblMT = new JLabel("Địa chỉ:");
		lblMT.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblMT.setBounds(10, 61, 188, 19);
		panel_input.add(lblMT);

		txtSoDH = new JTextField();
		txtSoDH.setColumns(10);
		txtSoDH.setBounds(130, 12, 182, 20);
		panel_input.add(txtSoDH);

		txtKH = new JTextField();
		txtKH.setEditable(false);
		txtKH.setColumns(10);
		txtKH.setBounds(322, 37, 392, 20);
		panel_input.add(txtKH);

		txtDiaChi = new JTextField();
		txtDiaChi.setColumns(10);
		txtDiaChi.setBounds(130, 62, 584, 20);
		panel_input.add(txtDiaChi);

		JLabel lblNewLabel_2_1_1 = new JLabel("Điện thoại:");
		lblNewLabel_2_1_1.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblNewLabel_2_1_1.setBounds(10, 91, 110, 19);
		panel_input.add(lblNewLabel_2_1_1);

		txtDienThoai = new JTextField();
		txtDienThoai.setColumns(10);
		txtDienThoai.setBounds(130, 91, 182, 20);
		panel_input.add(txtDienThoai);

		JLabel lblSnHng_1 = new JLabel("Ngày:");
		lblSnHng_1.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblSnHng_1.setBounds(475, 11, 47, 19);
		panel_input.add(lblSnHng_1);

		txtNgay = new JFormattedTextField(format);
		txtNgay.setColumns(10);
		txtNgay.setBounds(532, 12, 182, 20);
		txtNgay.setText(format.format(new java.util.Date()));
		panel_input.add(txtNgay);

		cmbKH.setBounds(130, 36, 182, 22);
		panel_input.add(cmbKH);
		load_data_cmbKH(cmbKH);
		cmbKH.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				String maKH = String.valueOf(cmbKH.getSelectedItem());
				Connection conn;
				try {
					conn = ConnectionUtils.getConnection();
					khachhang kh = khachhangModel.load_khachhang_by_maKH(conn, maKH);
					bind_data_KH(kh);
				} catch (ClassNotFoundException | SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 144, 724, 333);
		contentPane.add(scrollPane);

		table = new JTable();
		table.setCellSelectionEnabled(true);
		initTableData();

		scrollPane.setViewportView(table);

		JPanel panel_button = new JPanel();
		panel_button.setLayout(null);
		panel_button.setBounds(10, 488, 724, 47);
		contentPane.add(panel_button);

		btnThoat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setVisible(false);
			}
		});

		btnThoat.setBounds(625, 11, 89, 23);
		panel_button.add(btnThoat);

		btnSua.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (btnSua.getText() == "Sửa") {
					// Bật edit
					txtNgay.setEditable(true);
					txtDiaChi.setEditable(true);
					txtDienThoai.setEditable(true);
					cmbKH.setEnabled(true);
					table.setEnabled(true);
					// Đổi chức năng btnSua
					btnSua.setText("Lưu");
				} else {
					// Lưu lại
					try {
						String soDH = txtSoDH.getText();
						String maKH = cmbKH.getSelectedItem().toString();
						String diaChi = txtDiaChi.getText();
						String dienThoai = txtDienThoai.getText();
						Date ngayMua = new Date(format.parse(txtNgay.getText()).getTime());
						donhang dh = new donhang(soDH, maKH, diaChi, dienThoai, ngayMua);


						Connection conn = ConnectionUtils.getConnection();
						// delete chitiet_donhang
						// Vì không có ràng buộc unique(SoDH, maSoLaptop) trong bảng chitiet_donhang
						// Nên thay update bằng cách xóa và insert lại
						donhangModel.delete_chitiet_donhang(conn, soDH);
						
						// Update donhang
						donhangModel.update_donhang(conn, dh);

						// Insert chitiet_donhang
						for (int iRow = 0; iRow < table.getRowCount() - 1; iRow++) {
							String maSo = table.getValueAt(iRow, 1).toString();
							float donGia = Float.parseFloat(table.getValueAt(iRow, 2).toString());
							int soLuong = Integer.parseInt(table.getValueAt(iRow, 3).toString());
							float thanhTien = Float.parseFloat(table.getValueAt(iRow, 4).toString());
							donhangModel.insert_chitiet_donhang(conn, soDH, maSo, donGia, soLuong, thanhTien);
						}

						JOptionPane.showMessageDialog(null, "Lưu đơn hàng '" + soDH + "' thành công!");
						resetText();
					} catch (Exception e2) {
						// TODO: handle exception
						e2.printStackTrace();
					}

				}
			}
		});
		btnSua.setBounds(526, 11, 89, 23);
		panel_button.add(btnSua);

		btnXoa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String soDH = txtSoDH.getText();
				int opt = JOptionPane.showConfirmDialog(null, "Bạn thật sự muốn xóa Đơn hàng: '" + soDH + "' ?");
				if (opt == 0) {
					try {
						Connection conn = ConnectionUtils.getConnection();
						donhangModel.delete_donhang(conn, soDH);
						JOptionPane.showMessageDialog(null, "Xóa thành công đơn hàng '" + soDH + "'");
						resetText();
					} catch (ClassNotFoundException | SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});
		btnXoa.setBounds(427, 11, 89, 23);
		panel_button.add(btnXoa);

		btnThem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (btnThem.getText() == "Thêm") {
					if (isValidInput()) {
						try {
							String soDH = txtSoDH.getText();
							String maKH = cmbKH.getSelectedItem().toString();
							String diaChi = txtDiaChi.getText();
							String dienThoai = txtDienThoai.getText();
							Date ngayMua = new Date(format.parse(txtNgay.getText()).getTime());
							donhang dh = new donhang(soDH, maKH, diaChi, dienThoai, ngayMua);
							Connection conn = ConnectionUtils.getConnection();

							if (donhangModel.insert_donhang(conn, dh)) {
								for (int iRow = 0; iRow < table.getRowCount() - 1; iRow++) {
									String maSo = table.getValueAt(iRow, 1).toString();
									float donGia = Float.parseFloat(table.getValueAt(iRow, 2).toString());
									int soLuong = Integer.parseInt(table.getValueAt(iRow, 3).toString());
									float thanhTien = Float.parseFloat(table.getValueAt(iRow, 4).toString());
									donhangModel.insert_chitiet_donhang(conn, soDH, maSo, donGia, soLuong, thanhTien);
								}

								JOptionPane.showMessageDialog(null, "Thêm đơn hàng '" + soDH + "' thành công!");
								resetText();
							}
						} catch (Exception e2) {
							// TODO: handle exception
							e2.printStackTrace();
						}
					} else {
						JOptionPane.showMessageDialog(null, "Dữ liệu nhập vào không hợp lệ!");
					}
				} else {
					try {
						resetText();
					} catch (ClassNotFoundException | SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});
		btnThem.setBounds(328, 11, 89, 23);
		panel_button.add(btnThem);

		btnTim.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String soDH = txtSoDH.getText();
				if (soDH.isBlank() || soDH.isEmpty())
					JOptionPane.showMessageDialog(null, "Vui lòng nhập số đơn hàng trước!");
				else {
					try {
						Connection conn = ConnectionUtils.getConnection();
						donhang dh = donhangModel.load_donhang_by_soDH(conn, soDH);
						if (dh == null) {
							JOptionPane.showMessageDialog(null, "Không tìm thấy đơn hàng '" + soDH + "'");
							resetText();
						} else {
							Object[][] chitiet_donhangData = donhangModel.load_chitiet_donhang_by_soDH(conn, soDH);
							initTableData(chitiet_donhangData);
							// Đổi chức năng button
							btnThem.setText("Tạo mới");
						}
					} catch (ClassNotFoundException | SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});
		btnTim.setBounds(229, 11, 89, 23);
		panel_button.add(btnTim);
	}

	private void initTableData() throws ClassNotFoundException, SQLException {
		Object[][] data = null;
		initTableData(data);
	}

	private void initTableData(Object[][] data) throws ClassNotFoundException, SQLException {
		// TODO Auto-generated method stub
		String[] colNameStrings = new String[] { "STT", "Hàng hóa", "Đơn giá", "Số lượng", "Thành tiền" };

		DefaultTableModel dfModel;
		if (data == null) { // load data
			dfModel = new DefaultTableModel(new Object[][] {}, colNameStrings);

			Object[] newRow = new Object[] { 1, "", "", "", "" };
			dfModel.addRow(newRow);
			// Đặt trạng thái các button
			btnSua.setEnabled(false);
			// Cho sửa đơn hàng khi load
			txtSoDH.setEditable(true);
			txtNgay.setEditable(true);
			txtDiaChi.setEditable(true);
			txtDienThoai.setEditable(true);
			cmbKH.setEnabled(true);
			table.setEnabled(true);
			// Đổi chức năng button
			btnThem.setText("Thêm");
		} else { // search
			dfModel = new DefaultTableModel(data, colNameStrings);
			// Đặt trạng thái các button
			btnSua.setEnabled(true);
			// Không cho sửa đơn hàng khi tìm thấy
			txtSoDH.setEditable(false);
			txtNgay.setEditable(false);
			txtDiaChi.setEditable(false);
			txtDienThoai.setEditable(false);
			cmbKH.setEnabled(false);
			table.setEnabled(false);
		}
		table.setModel(dfModel);

		// Cột hàng hóa
		TableColumn HangHoaCol = table.getColumnModel().getColumn(1);
		JComboBox<String> cmbHH = new JComboBox<>();
		load_data_cmbHH(cmbHH);

		HangHoaCol.setCellEditor(new DefaultCellEditor(cmbHH));

		table.getModel().addTableModelListener(new TableModelListener() {
			@Override
			public void tableChanged(TableModelEvent e) {
				try {
					// Thay đổi giá hoặc số lượng thì update thành tiền
					if (e.getColumn() == 2 || e.getColumn() == 3) {
						int row = e.getFirstRow();
						float giaBan = Float.valueOf((String) table.getValueAt(row, 2));
						int soLuong = Integer.valueOf((String) table.getValueAt(row, 3));
						if (giaBan >= 0 && soLuong >= 0) {
							float thanhtien = giaBan * soLuong;
							table.setValueAt(String.format("%.0f", thanhtien), row, 4);
						}
					} else if (e.getColumn() == 1) {
						// Thay đổi mã hàng hóa thì update đơn giá
						int row = e.getFirstRow();
						int col = e.getColumn();
						String maLT = (String) table.getValueAt(row, col);
						Connection conn;
						try {
							conn = ConnectionUtils.getConnection();
							float gia = laptopModel.load_laptop_by_maLT(conn, maLT).getGiaBan();
							table.setValueAt(String.format("%.0f", gia), row, 2);
						} catch (ClassNotFoundException | SQLException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
						// Nếu thay đổi hàng cuối thì tự thêm hàng mới
						if (e.getFirstRow() == table.getRowCount() - 1)
							dfModel.addRow(new Object[] { table.getRowCount() + 1, "", "", "", "" });
					}
				} catch (Exception e2) {
					// TODO: handle exception
				}
			}
		});

		// Set text mặc định các button
		btnSua.setText("Sửa");
		btnThem.setText("Thêm");
		btnThoat.setText("Thoát");
		btnTim.setText("Tìm");
		btnXoa.setText("Xóa");
	}

	private void bind_data_KH(khachhang kh) {
		txtKH.setText(kh.getTenKH());
		txtDiaChi.setText(kh.getDiaChi());
		txtDienThoai.setText(kh.getDienthoai());
	}

	private void load_data_cmbKH(JComboBox<String> cmb) throws ClassNotFoundException, SQLException {
		// TODO Auto-generated method stub
		Connection conn = ConnectionUtils.getConnection();
		List<khachhang> listKH = khachhangModel.load_khachhang(conn);
		for (khachhang kh : listKH) {
			cmb.addItem(kh.getMaKH());
		}
		bind_data_KH(listKH.get(0));
	}

	private void load_data_cmbHH(JComboBox<String> cmb) throws ClassNotFoundException, SQLException {
		// TODO )Auto-generated method stub
		Connection conn = ConnectionUtils.getConnection();
		List<laptop> listHH = laptopModel.load_laptop(conn);
		for (laptop hh : listHH) {
			cmb.addItem(hh.getMaLT());
		}
	}

	private boolean isValidInput() {
		if (txtSoDH.getText().isBlank() || txtSoDH.getText().isEmpty())
			return false;
		else if (txtDiaChi.getText().isBlank() || txtDiaChi.getText().isEmpty())
			return false;
		else if (txtDienThoai.getText().isBlank() || txtDienThoai.getText().isEmpty())
			return false;
		return true;
	}

	private void resetText() throws ClassNotFoundException, SQLException {
		initTableData();
		txtSoDH.setText("");
		txtSoDH.grabFocus();
	}
}