package windowsform;
import javax.swing.*;
import javax.swing.event.InternalFrameEvent;
import javax.swing.table.DefaultTableModel;
import core.business.AvailableService;
import core.business.Customer;
import core.business.Reservation;
import core.business.ReservationDetail;
import core.business.ReservationDetailService;
import core.business.Room;
import core.datechooser.*;
import core.formcontroller.MDIDesktopPane;
import java.awt.*;
import java.awt.event.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ReservationForm extends JInternalFrame{
/**
*
*/
private int roomID = 0;
private int custID = 0;
private int resrvID = 0;
private int resDetailID = 0;
MDIDesktopPane desktop;
JInternalFrame owner;
DefaultTableModel tblModelAvailable;
DefaultTableModel tblModelService;
DefaultTableModel tblModelRes;
private boolean isReservation = false;
private static final long serialVersionUID = 1L;
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JLabel jLabel1 = new JLabel();
JTextField txtCustomerName = new JTextField();
JButton btnCustomerChoose = new JButton();
JTextField txtPhone = new JTextField();
JTextField txtAddress = new JTextField();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JLabel jLabel7 = new JLabel();
JLabel jLabel8 = new JLabel();
JSpinner spNumOfAdult = new JSpinner();
JSpinner spNumOfChild = new JSpinner();
JDateChooser dateCheckin = new JDateChooser();
JDateChooser dateCheckout = new JDateChooser();
JButton btnRoomChoose = new JButton();
JLabel jLabel9 = new JLabel();
//JDateChooser dateCheckin = new JDateChooser();
JTable tblAvailableService;
JTable tblExtraService = new JTable();
JTextField txtRoom = new JTextField();
JTextField txtTotalCost = new JTextField();
JLabel jLabel10 = new JLabel();
JLabel jLabel11 = new JLabel();
JButton btnAddMoreService = new JButton();
JTable tblReservation;// = new JTable();
GridLayout gridLayout1 = new GridLayout();
JButton btnSearch = new JButton();
JButton btn = new JButton();
JButton btnNew = new JButton();
JLabel jLabel12 = new JLabel();
JTextField txtIDCardNumber = new JTextField();
JScrollPane scrAvailable;// = new JScrollPane(tblAvailableService);
JScrollPane scrExtra;// = new JScrollPane(tblExtraService);
JScrollPane scrRes;// = new JScrollPane(tblReservation);
public ReservationForm(JInternalFrame owner, MDIDesktopPane desktop, boolean isReservation, int resrvID) {
try {
this.owner = owner;
this.isReservation = isReservation;
this.resrvID = resrvID;
this.desktop = desktop;
jbInit();
this.setClosable(true);
this.setMaximizable(true);
this.setVisible(true);
this.setSize(800, 600);
this.setResizable(true);
}
catch(Exception e) {
e.printStackTrace();
}
}
public ReservationForm(JInternalFrame owner, MDIDesktopPane desktop, int roomID, boolean isReservation, int resrvID){
try {
this.owner = owner;
this.desktop = desktop;
this.isReservation = isReservation;
this.resrvID = resrvID;
jbInit();
this.setClosable(true);
this.setMaximizable(true);
this.setVisible(true);
this.setSize(800, 600);
this.setResizable(true);
if(resrvID == 0)
loadRoomDetail(roomID);
else
loadReservation();
}
catch(Exception e) {
System.out.println("Ha: " + e.getMessage());
e.printStackTrace();
}
}
public void loadReservation(){
if(this.resrvID != 0){//load reservation
System.out.println(resrvID);
ResultSet rs = Reservation.getReservationInfo(resrvID);
try {
while(rs.next()){
this.custID = rs.getInt("customerID");
this.spNumOfAdult.setValue(rs.getInt("numberOfAdult"));
this.spNumOfChild.setValue(rs.getInt("numberOfChild"));
try {
String dStrCheckin = rs.getString("resDate");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//MM/dd/yyyy HH:mm:ss
Date dayCheckin = df.parse(dStrCheckin);
this.dateCheckin.setDate(dayCheckin);
String dStrCheckout = rs.getString("resLeaveDate");
DateFormat dfout = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//MM/dd/yyyy HH:mm:ss
Date dayCheckout = dfout.parse(dStrCheckout);
this.dateCheckout.setDate(dayCheckout);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//java.sql.Date dStr = rs.getDate("resDate");
//Date d = new Date(dStr);
this.txtTotalCost.setText(rs.getDouble("preTotalCost") + "");
roomID = rs.getInt("roomID");
}
//load customer
loadCustomer(custID);
//load reservation detail room, service
loadRoomDetailOfRes(roomID);
loadExtraService(resrvID);
//load
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void loadCustomer(int custID){
Customer cust = new Customer(custID);
this.txtCustomerName.setText(cust.getCustName());
this.txtAddress.setText(cust.getCustAddress());
this.txtIDCardNumber.setText(cust.getCustPassport());
this.txtPhone.setText(cust.getCustPhone());
}
private void loadRoomDetailOfRes(int roomID){
Room room = new Room(roomID);
this.roomID = roomID;
this.txtRoom.setText(room.getRoomName());
ResultSet rs = AvailableService.getAvailableServiceByRoom(roomID);
try {
int i=0;
while(rs.next()){
tblModelAvailable.insertRow(i++, new Object[]{rs.getInt("serviceID"), rs.getString("serviceName"), rs.getDouble("serviceAmount")});
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void loadExtraService(int resID){
try{
ResultSet rs = ReservationDetailService.getExtraServices(resID);
int i = 0;
while(rs.next()){
tblModelService.insertRow(i++, new Object[]{rs.getInt("serviceID"), rs.getString("serviceName"), rs.getDouble("serviceAmount")});
}
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
private void loadRoomDetail(int roomID){
//load room detail
Room room = new Room(roomID);
this.roomID = roomID;
this.txtRoom.setText(room.getRoomName());
//load available service
ResultSet rs = AvailableService.getAvailableServiceByRoom(roomID);
try {
int i=0;
double totalService = 0;
while(rs.next()){
totalService += rs.getDouble("serviceAmount");
tblModelAvailable.insertRow(i++, new Object[]{rs.getInt("serviceID"), rs.getString("serviceName"), rs.getDouble("serviceAmount")});
}
totalService += room.getRoomFee();
this.txtTotalCost.setText(totalService+"");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void jbInit() throws Exception {
//String dataEmpty[][] = {{}};
String col[] = {"Service ID", "Service Name", "Service Amt"};
String colRes[] = {"Reservation ID", "Customer", "Address", "Phone", "Passport/ID", "Room", "From", "To"};
tblModelAvailable = new DefaultTableModel(null, col);
tblModelService = new DefaultTableModel(null, col);
tblModelRes = new DefaultTableModel(null, colRes);
this.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() {
public void internalFrameClosing(InternalFrameEvent e) {
////////////// update
if(owner != null){
((RoomStatusForm)owner).updateRoomLayout();
}
}
});
this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setTitle(isReservation?"Reservation":"Checkin");
this.setPreferredSize(new Dimension(800, 600));
this.getContentPane().setLayout(borderLayout1);
jPanel1.setBorder(BorderFactory.createLineBorder(Color.black));
jPanel1.setPreferredSize(new Dimension(10, 450));
jPanel1.setLayout(null);
jPanel2.setBorder(BorderFactory.createLineBorder(Color.black));
jPanel2.setLayout(gridLayout1);
jLabel1.setText("Customer");
jLabel1.setBounds(new Rectangle(32, 31, 65, 24));
txtCustomerName.setText("");
txtCustomerName.setBounds(new Rectangle(171, 32, 233, 21));
btnCustomerChoose.setBounds(new Rectangle(410, 32, 45, 21));
btnCustomerChoose.setText("...");
btnCustomerChoose.addActionListener(new ReservationForm_btnCustomerChoose_actionAdapter(this));
txtPhone.setBounds(new Rectangle(171, 84, 233, 21));
txtPhone.setText("");
txtAddress.setBounds(new Rectangle(170, 110, 233, 21));
txtAddress.setText("");
jLabel2.setText("Phone");
jLabel2.setBounds(new Rectangle(31, 82, 68, 22));
jLabel3.setBounds(new Rectangle(30, 108, 77, 22));
jLabel3.setText("Address");
jLabel4.setRequestFocusEnabled(true);
jLabel4.setText("Check-in Date");
jLabel4.setBounds(new Rectangle(30, 128, 119, 35));
jLabel5.setText("Number of Adult");
jLabel5.setBounds(new Rectangle(458, 56, 98, 22));
jLabel6.setText("Number of Children");
jLabel6.setBounds(new Rectangle(455, 83, 99, 22));
jLabel7.setText("Leave Date");
jLabel7.setBounds(new Rectangle(29, 162, 109, 22));
jLabel8.setText("Pre-Total Cost");
jLabel8.setBounds(new Rectangle(29, 225, 106, 22));
spNumOfAdult.setBounds(new Rectangle(566, 56, 59, 20));
spNumOfChild.setBounds(new Rectangle(566, 79, 59, 20));
//dateCheckin.setBounds(new Rectangle(171, 110, 233, 21));
//dateCheckin.setText("");
dateCheckout.setBounds(new Rectangle(170, 167, 233, 21));
//dateCheckout.setText("");
btnRoomChoose.setText("...");
btnRoomChoose.addActionListener(new ReservationForm_btnRoomChoose_actionAdapter(this));
btnRoomChoose.setBounds(new Rectangle(409, 195, 45, 21));
jLabel9.setBounds(new Rectangle(30, 192, 65, 24));
jLabel9.setText("Room");
//dateCheckin.setText("");
dateCheckin.setBounds(new Rectangle(169, 137, 233, 21));
tblAvailableService = new JTable(tblModelAvailable){
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int rowIndex, int colIndex) {
return false; //Disallow the editing of any cell
}};
scrAvailable = new JScrollPane(tblAvailableService);
//tblAvailableService.setBounds(new Rectangle(168, 278, 234, 103));
scrAvailable.setBounds(new Rectangle(168, 278, 234, 103));
tblExtraService = new JTable(tblModelService){
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int rowIndex, int colIndex) {
return false; //Disallow the editing of any cell
}};
scrExtra = new JScrollPane(tblExtraService);
//tblExtraService.setBounds(new Rectangle(433, 278, 234, 103));
scrExtra.setBounds(new Rectangle(433, 278, 234, 103));
tblReservation = new JTable(tblModelRes){
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int rowIndex, int colIndex) {
return false; //Disallow the editing of any cell
}};
scrRes = new JScrollPane(tblReservation);
txtRoom.setBounds(new Rectangle(170, 194, 233, 21));
txtRoom.setText("");
txtTotalCost.setText("");
txtTotalCost.setBounds(new Rectangle(170, 225, 233, 21));
jLabel10.setBounds(new Rectangle(169, 250, 114, 24));
jLabel10.setText("Available Services");
jLabel11.setText("Extra Services");
jLabel11.setBounds(new Rectangle(432, 250, 114, 24));
btnAddMoreService.setBounds(new Rectangle(568, 251, 98, 21));
btnAddMoreService.setText("Add More...");
btnAddMoreService.addActionListener(new ReservationForm_btnAddMoreService_actionAdapter(this));
btnSearch.setBounds(new Rectangle(168, 389, 82, 21));
btnSearch.setToolTipText("");
btnSearch.setText("Search");
btnSearch.addActionListener(new ReservationForm_btnSearch_actionAdapter(this));
btn.setBounds(new Rectangle(336, 390, 66, 21));
//////////////////xx
btn.setText(isReservation?"Save":"Checkin");
btn.addActionListener(new ReservationForm_btn_actionAdapter(this));
btnNew.setBounds(new Rectangle(263, 390, 62, 21));
btnNew.setText("New");
btnNew.addActionListener(new ReservationForm_btnNew_actionAdapter(this));
jLabel12.setBounds(new Rectangle(32, 57, 68, 22));
jLabel12.setText("ID/Passport");
txtIDCardNumber.setBounds(new Rectangle(170, 58, 233, 21));
txtIDCardNumber.setText("");
this.getContentPane().add(jPanel2, BorderLayout.CENTER);
//jPanel2.add(tblReservation, null);//////////////////////////
//jPanel2.setLayout(new )
jPanel2.add(scrRes, BorderLayout.CENTER);
this.getContentPane().add(jPanel1, BorderLayout.NORTH);
jPanel1.add(jLabel1, null);
jPanel1.add(txtCustomerName, null);
jPanel1.add(btnCustomerChoose, null);
jPanel1.add(jLabel5, null);
jPanel1.add(jLabel6, null);
jPanel1.add(spNumOfAdult, null);
jPanel1.add(spNumOfChild, null);
jPanel1.add(txtAddress, null);
jPanel1.add(jLabel3, null);
jPanel1.add(jLabel4, null);
jPanel1.add(dateCheckin, null);
jPanel1.add(dateCheckout, null);
jPanel1.add(jLabel7, null);
jPanel1.add(jLabel9, null);
jPanel1.add(jLabel8, null);
jPanel1.add(txtRoom, null);
jPanel1.add(txtTotalCost, null);
jPanel1.add(btnRoomChoose, null);
//jPanel1.add(tblAvailableService, null);//////////////////
jPanel1.add(scrAvailable, null);
jPanel1.add(jLabel10, null);
jPanel1.add(jLabel11, null);
//jPanel1.add(tblExtraService, null);//////////////////
jPanel1.add(scrExtra, null);
jPanel1.add(btnAddMoreService, null);
jPanel1.add(btnSearch, null);
jPanel1.add(txtPhone, null);
jPanel1.add(jLabel2, null);
jPanel1.add(jLabel12, null);
jPanel1.add(txtIDCardNumber, null);
jPanel1.add(btn, null);
jPanel1.add(btnNew, null);
jPanel1.add(dateCheckin, null);
}
//private void formatTable(){
//tblAvailableService.getColumn("Amount").setCellRenderer(new RightTableCellRenderer());
//}
void btnCustomerChoose_actionPerformed(ActionEvent e) {
//Customer Choose
CustomerFrom cus = new CustomerFrom(desktop, this);
desktop.add(cus);
}
void btnRoomChoose_actionPerformed(ActionEvent e) {
//Room choose
RoomStatusForm rst = new RoomStatusForm(desktop, this);
desktop.add(rst);
}
void btnAddMoreService_actionPerformed(ActionEvent e) {
ServiceChoose sc = new ServiceChoose(this, true);
try{
desktop.add(sc);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
void btnSearch_actionPerformed(ActionEvent e) {
//serach reservation
tblModelRes.getDataVector().removeAllElements();
try {
ResultSet rs = Reservation.searchReservation(txtCustomerName.getText());
int i = 0;
while(rs.next()){
// String colRes[] = {"Reservation ID", "Customer", "Address", "Phone", "Passport/ID", "Room", "From", "To"};
tblModelRes.insertRow(i++, new Object[]{rs.getInt("resID"), rs.getString("custName"), rs.getString("custAddress"), rs.getString("custPhone"), rs.getString("custPassport"), rs.getString("roomName"), rs.getString("resDate"), rs.getString("resLeaveDate")});
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//select * from Reservation res join Customer cus on res.customerID = cus.custID
//left join ReservationDetail resDet on res.resID = resDet.resID
//where cus.custName like "%Bao%" and resDet.roomID = (select ro.roomID from Room ro where ro.roomName like "103" limit 1)
}
void btnNew_actionPerformed(ActionEvent e) {
//new- clear all
}
void btn_actionPerformed(ActionEvent e) {
try{
if(resrvID==0)//create res
{
//create new customer if code = 0
if(custID == 0){
Customer cus = new Customer(0, txtCustomerName.getText(), txtAddress.getText(), txtPhone.getText(), "", txtIDCardNumber.getText());
custID = cus.addNewCustomer();
}
//add reservation -> code
//public Reservation(int resID, int customerID, Date resDate, Date resLeaveDate, double preTotalCost, int numberOfAdult, int numberOfChild, int resStatus)
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String checkin = dateFormat.format(dateCheckin.getDate());
String checkout = dateFormat.format(dateCheckout.getDate());
resrvID = Reservation.addReservationStat(custID, checkin, checkout, Double.parseDouble(txtTotalCost.getText()), Integer.parseInt(spNumOfAdult.getValue().toString()), Integer.parseInt(spNumOfChild.getValue().toString()), 1, isReservation?0:1);//0:reservation, 1 checkin
//add reservation detail-> code
//public ReservationDetail(int resID, int roomID)
ReservationDetail resDet = new ReservationDetail(resrvID, roomID);
resDetailID = resDet.addReservationDetail();
//add resevation detail service
int rowCount = tblExtraService.getModel().getRowCount();
for(int i=1; i<rowCount; i++){
ReservationDetailService reDetSer = new ReservationDetailService(resDetailID, Integer.parseInt(tblExtraService.getModel().getValueAt(i, 0).toString()), 1);
reDetSer.addReservationServiceDetail();
}
//update room status
Room.updateStatus(roomID, isReservation?2:3);//2: reserv. 3. checked in
Room.updateReservationOcc(roomID, resrvID);
System.out.println("ok las");
if(isReservation)
JOptionPane.showMessageDialog(null,"New Reservation added");
else
JOptionPane.showMessageDialog(null,"New checkin made");
}else//update thanh check in.
{
Reservation.makeCheckin(resrvID);
Room.updateStatus(roomID, 3);//2: reserv. 3. checked in
JOptionPane.showMessageDialog(null,"Checkin made from reservation");
}
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
public void updateCustomerInfo(int custID, String custName, String custAddress, String custPhone, String custPassport, String email){
this.custID = custID;
txtCustomerName.setText(custName);
txtAddress.setText(custAddress);
txtIDCardNumber.setText(custPassport);
txtPhone.setText(custPhone);
}
public void updateRoomInfo(int roomID){
this.roomID = roomID;
loadRoomDetail(roomID);
}
}
class ReservationForm_btnCustomerChoose_actionAdapter implements java.awt.event.ActionListener {
ReservationForm adaptee;
ReservationForm_btnCustomerChoose_actionAdapter(ReservationForm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnCustomerChoose_actionPerformed(e);
}
}
class ReservationForm_btnRoomChoose_actionAdapter implements java.awt.event.ActionListener {
ReservationForm adaptee;
ReservationForm_btnRoomChoose_actionAdapter(ReservationForm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnRoomChoose_actionPerformed(e);
}
}
class ReservationForm_btnAddMoreService_actionAdapter implements java.awt.event.ActionListener {
ReservationForm adaptee;
ReservationForm_btnAddMoreService_actionAdapter(ReservationForm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnAddMoreService_actionPerformed(e);
}
}
class ReservationForm_btnSearch_actionAdapter implements java.awt.event.ActionListener {
ReservationForm adaptee;
ReservationForm_btnSearch_actionAdapter(ReservationForm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnSearch_actionPerformed(e);
}
}
class ReservationForm_btnNew_actionAdapter implements java.awt.event.ActionListener {
ReservationForm adaptee;
ReservationForm_btnNew_actionAdapter(ReservationForm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnNew_actionPerformed(e);
}
}
class ReservationForm_btn_actionAdapter implements java.awt.event.ActionListener {
ReservationForm adaptee;
ReservationForm_btn_actionAdapter(ReservationForm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btn_actionPerformed(e);
}
}