//예약하기 protected void Button2_Click(object sender, EventArgs e) { List <Tuple <string, string> > TryBookingSeats = new List <Tuple <string, string> >(); #region 예매정보없거나 지정한 인원와 다르면 리턴 if (SelectedMovieID == "" || SelectedPlayDate == "" || SelectedTheater == "") { return; } //원래 chkbox에 changed on 일때 remainTicket의 값을 변동해서 0인지 검사하려고했지만 //동적으로 생성된 컨트롤에대해 이벤트를 받는게 해결이 되지 않아 임시방편으로 //enable상태이면서 checked숫자로 비교한다. int checkedBoxCount = 0; foreach (TableRow tableRow in Table1.Rows) { foreach (TableCell tableCell in tableRow.Cells) { if (tableCell.Controls.Count == 1) { CheckBox chkBox = (CheckBox)tableCell.Controls[0]; if (chkBox.Enabled && chkBox.Checked) { checkedBoxCount++; string[] RowAndNumber = chkBox.ID.Split(new char[] { '열', '번' }); TryBookingSeats.Add(new Tuple <string, string>(RowAndNumber[0], RowAndNumber[1])); } } } } //checkbox가 더 많거나 적으므로 예매를 취소하고 확인해달라는 메시지를 보내야함. if (remainTicket != checkedBoxCount) { return; } #endregion //TODO : 예약 객체 생성시 점검사항들 // 1. 포인트가 사람수만큼 결제가능한지 확인합니다. // 2. 예약하는동안 선택한 좌석(들)이 예매가 되었는지 확인. // 3. 관람등급과 고객나이 확인 // 4. 예매객체 생성 // 5. 포인트 사용내역 객체 생성 // 6. Seat의 예약상태를 True로 변경한다. // 7. 예약할경우 MovieSchedule의 RemainSeat값도 줄여줘야함. string Command = ""; List <Tuple <string, object> > Params; SqlDataReader reader; List <Movie> SelcetedMovieObject = null; int LastlyRemaindPoint = 0; #region 1 Command = "SELECT * FROM Point WHERE ID=@id ORDER BY Occuredatetime DESC"; Params = new List <Tuple <string, object> >(); Params.Add(new Tuple <string, object>("@id", LoginedMember.ID)); reader = dbManager.GetDataList(Command, Params); List <dataSet.Point> points = dataSet.Point.SqlDataReaderToMember(reader); if (points == null || points.Count == 0) { return; } int totalPrice = remainTicket * Constant.MoviePrice; if (Convert.ToInt32(points[0].Remainvalue) < totalPrice) { return; } LastlyRemaindPoint = Convert.ToInt32(points[0].Remainvalue); Params.Clear(); #endregion #region 2 Command = "Select * From Seat Where " + "TheaterID = @TheaterID AND Playtime = @Playtime AND Seatrow = @Seatrow AND Seatnumber = @Seatnumber"; foreach (Tuple <string, string> TryBookingSeat in TryBookingSeats) { Params.Add(new Tuple <string, object>("@TheaterID", SelectedTheater)); Params.Add(new Tuple <string, object>("@Playtime", SelectedPlayDate)); Params.Add(new Tuple <string, object>("@Seatrow", TryBookingSeat.Item1)); Params.Add(new Tuple <string, object>("@Seatnumber", TryBookingSeat.Item2)); reader = dbManager.GetDataList(Command, Params); List <Seat> seat = Seat.SqlDataReaderToSeat(reader); if (seat == null || seat.Count == 0 || seat[0].Isbooked == "True") { return; } Params.Clear(); } #endregion #region 3 Command = "Select * From Movie Where MovieID = @MovieID"; Params.Add(new Tuple <string, object>("@MovieId", SelectedMovieID)); reader = dbManager.GetDataList(Command, Params); SelcetedMovieObject = Movie.SqlDataReaderToMember(reader); if (SelcetedMovieObject == null || SelcetedMovieObject.Count == 0) { return; } if (Convert.ToInt32(LoginedMember.Age) < Convert.ToInt32(SelcetedMovieObject[0].Viewingclass)) { return; } Params.Clear(); #endregion #region 4 Command = "insert into Booking(ID, MovieID, TheaterID, Playdatetime, Seatrow, Seatnumber, Moviename, Bookedcount, Viewingclass)" + "values(@ID, @MovieID, @TheaterID, @Playdatetime, @Seatrow, @Seatnumber, @Moviename, @Bookedcount, @Viewingclass)"; foreach (Tuple <string, string> TryBookingSeat in TryBookingSeats) { Params.Add(new Tuple <string, object>("@ID", LoginedMember.ID.Trim())); Params.Add(new Tuple <string, object>("@MovieID", SelectedMovieID.Trim())); Params.Add(new Tuple <string, object>("@TheaterID", SelectedTheater.Trim())); Params.Add(new Tuple <string, object>("@Playdatetime", SelectedPlayDate)); Params.Add(new Tuple <string, object>("@Seatrow", TryBookingSeat.Item1)); Params.Add(new Tuple <string, object>("@Seatnumber", TryBookingSeat.Item2)); Params.Add(new Tuple <string, object>("@Moviename", SelcetedMovieObject[0].Moviename)); Params.Add(new Tuple <string, object>("@Bookedcount", remainTicket)); Params.Add(new Tuple <string, object>("@Viewingclass", SelcetedMovieObject[0].Viewingclass)); if (!dbManager.DoCommand(Command, Params)) { ;//TODO : 예약 실패 로직(미완성). } Params.Clear(); } #endregion #region 5 Command = "insert into Point(ID, Occuredatetime, Usedvalue, Rechargedvalue, Remainvalue)" + "values(@ID, @Occuredatetime, @Usedvalue, @Rechargedvalue, @Remainvalue)"; Params.Add(new Tuple <string, object>("@ID", LoginedMember.ID)); Params.Add(new Tuple <string, object>("@Occuredatetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); Params.Add(new Tuple <string, object>("@Usedvalue", remainTicket * Constant.MoviePrice)); Params.Add(new Tuple <string, object>("@Rechargedvalue", 0)); Params.Add(new Tuple <string, object>("@Remainvalue", LastlyRemaindPoint - remainTicket * Constant.MoviePrice)); if (!dbManager.DoCommand(Command, Params)) { ;//TODO : 예약 실패 로직(미완성). } Params.Clear(); #endregion #region 6 Command = Command = "Update Seat Set Isbooked = @Isbooked " + "Where TheaterID = @TheaterID AND Seatrow = @Seatrow AND Seatnumber = @Seatnumber AND Playtime = @Playtime"; foreach (Tuple <string, string> TryBookingSeat in TryBookingSeats) { Params.Add(new Tuple <string, object>("@Isbooked", "True")); Params.Add(new Tuple <string, object>("@TheaterID", SelectedTheater)); Params.Add(new Tuple <string, object>("@Seatrow", TryBookingSeat.Item1)); Params.Add(new Tuple <string, object>("@Seatnumber", TryBookingSeat.Item2)); Params.Add(new Tuple <string, object>("@Playtime", SelectedPlayDate)); if (!dbManager.DoCommand(Command, Params)) { ;//TODO : 예약 실패 로직(미완성). } Params.Clear(); } #endregion #region 7 //일단 기존남은 좌석 데이터를 가져와야함. int RemainSeatCount = 0; Command = "Select * From Movieschedule " + "Where MovieID = @MovieId AND TheaterID = @TheaterID AND Playtime = @Playtime"; Params.Add(new Tuple <string, object>("@MovieId", SelectedMovieID)); Params.Add(new Tuple <string, object>("@TheaterID", SelectedTheater)); Params.Add(new Tuple <string, object>("@Playtime", SelectedPlayDate)); reader = dbManager.GetDataList(Command, Params); List <Movieschedule> movieschedule = Movieschedule.SqlDataReaderToMember(reader); if (movieschedule == null || movieschedule.Count != 1) { return; } RemainSeatCount = Convert.ToInt32(movieschedule[0].Seatremained); if (RemainSeatCount == 0) { return; } Params.Clear(); Command = "Update Movieschedule Set Seatremained = @Seatremained " + "Where MovieID = @MovieId AND TheaterID = @TheaterID AND Playtime = @Playtime"; Params.Add(new Tuple <string, object>("@Seatremained", RemainSeatCount - remainTicket)); Params.Add(new Tuple <string, object>("@MovieId", SelectedMovieID)); Params.Add(new Tuple <string, object>("@TheaterID", SelectedTheater)); Params.Add(new Tuple <string, object>("@Playtime", SelectedPlayDate)); if (!dbManager.DoCommand(Command, Params)) { ;//TODO : 예약 실패 로직(미완성). } else { Response.Redirect("BookingList.aspx"); } #endregion }
//페이지로드 protected void Page_Load(object sender, EventArgs e) { SelectedTheater = DropDownList_Theater.SelectedValue.Trim(); LoginedMember = (Member)Session["MEMBER"]; dbManager = (DBManager)Session["DBAdmin"]; //사용자가 아무 영화를 클릭하지 않은 초기화 상태라면 if (DropDownList_MovieName.SelectedValue == "") { String Command = "Select * From Movie"; SqlDataReader reader = dbManager.GetDataList(Command, new List <Tuple <string, object> >()); List <Movie> Movies = Movie.SqlDataReaderToMember(reader); DropDownList_MovieName.DataTextField = "Moviename"; DropDownList_MovieName.DataValueField = "MovieID"; DropDownList_MovieName.DataSource = Movies; DropDownList_MovieName.DataBind(); } //영화를 선택하였으니 해당 영화에 맞는 시간을 보여줌. else { SelectedMovieID = DropDownList_MovieName.SelectedValue.Trim(); String Command = "Select * From Movieschedule Where MovieID = @MovieID"; List <Tuple <string, object> > Params = new List <Tuple <string, object> >(); Params.Add(new Tuple <string, object>("@MovieID", SelectedMovieID)); SqlDataReader reader = dbManager.GetDataList(Command, Params); List <Movieschedule> PlayTimes = Movieschedule.SqlDataReaderToMember(reader); DropDownList_PlayDate.DataTextField = "Playtime"; DropDownList_PlayDate.DataValueField = "Playtime"; DropDownList_PlayDate.DataSource = PlayTimes; DropDownList_PlayDate.DataBind(); Params.Clear(); //상영관을 선택하지 않았음. if (DropDownList_PlayDate.SelectedValue == "") { ; } //상영관을 선택하였으면 관이랑 남은 좌석수 표시 else { SelectedPlayDate = DropDownList_PlayDate.SelectedValue.Trim(); DropDownList_Theater.DataTextField = "RemaindSeatMent"; DropDownList_Theater.DataValueField = "TheaterID"; DropDownList_Theater.DataSource = PlayTimes; DropDownList_Theater.DataBind(); Params.Clear(); if (TextBox_TicketCount.Text != "") { remainTicket = Convert.ToInt32(TextBox_TicketCount.Text); } if (remainTicket != 0) { if (SelectedMovieID == "" || SelectedPlayDate == "" || SelectedTheater == "") { return; } SetTable(); } } } }
//페이지로드 protected void Page_Load(object sender, EventArgs e) { //세션 로드 LoginedMember = (Member)Session["MEMBER"]; dbManager = (DBManager)Session["DBAdmin"]; //preSelectedValue input SelectedMovieID = DropDownList_MovieName.SelectedValue.Trim(); SelectedPlayDate = DropDownList_PlayDate.SelectedValue.Trim(); SelectedTheater = DropDownList_Theater.SelectedValue.Trim(); //사용자가 아무 영화를 클릭하지 않은 초기화 상태라면 if (DropDownList_MovieName.SelectedValue == "" || DropDownList_MovieName.SelectedValue == NotSelected) { String Command = "Select * From Movie"; SqlDataReader reader = dbManager.GetDataList(Command, new List <Tuple <string, object> >()); List <Movie> Movies = Movie.SqlDataReaderToMember(reader); Movie notSelectValue = new Movie(); notSelectValue.Moviename = NotSelected; notSelectValue.MovieID = NotSelected; Movies.Add(notSelectValue); DropDownList_MovieName.DataTextField = "Moviename"; DropDownList_MovieName.DataValueField = "MovieID"; DropDownList_MovieName.DataSource = Movies; DropDownList_MovieName.DataBind(); DropDownList_MovieName.SelectedValue = NotSelected; } //영화를 선택하였으니 해당 영화에 맞는 시간을 보여줌. else { SelectedMovieID = DropDownList_MovieName.SelectedValue.Trim(); string Command = "Select * From Movieschedule Where MovieID = @MovieID"; List <Tuple <string, object> > Params = new List <Tuple <string, object> >(); Params.Add(new Tuple <string, object>("@MovieID", SelectedMovieID)); SqlDataReader reader = dbManager.GetDataList(Command, Params); List <Movieschedule> PlayTimes = Movieschedule.SqlDataReaderToMember(reader); Movieschedule notSelectValue = new Movieschedule(); notSelectValue.Playtime = NotSelected; PlayTimes.Add(notSelectValue); //상영날짜 선택하지 않았음. if (SelectedPlayDate == "" || SelectedPlayDate == NotSelected) { DropDownList_PlayDate.DataTextField = "Playtime"; DropDownList_PlayDate.DataValueField = "Playtime"; DropDownList_PlayDate.DataSource = PlayTimes; DropDownList_PlayDate.DataBind(); DropDownList_PlayDate.SelectedValue = NotSelected; Params.Clear(); } //상영날짜를 선택하였으면 관이랑 남은 좌석수 표시 else { //날짜별 영화관중에서 선택한 날짜의 영화관만 도시한다. List <Movieschedule> PlayTheaters = new List <Movieschedule>(); foreach (Movieschedule playTime in PlayTimes) { if (playTime.Playtime == SelectedPlayDate) { PlayTheaters.Add(playTime); } } DropDownList_Theater.DataTextField = "RemaindSeatMent"; DropDownList_Theater.DataValueField = "TheaterID"; if (PlayTheaters.Count == 0) { ; } else { DropDownList_Theater.DataSource = PlayTheaters; } DropDownList_Theater.DataBind(); Params.Clear(); //예약인원이 정해져있는 상태이면서 예약내용이 모두 null값이 아닐경우 좌석배치표를 생성한다. if (TextBox_TicketCount.Text != "") { remainTicket = Convert.ToInt32(TextBox_TicketCount.Text); } if (remainTicket != 0) { if (SelectedMovieID == "" || SelectedPlayDate == "" || SelectedTheater == "" || SelectedMovieID == NotSelected || SelectedPlayDate == NotSelected || SelectedTheater == NotSelected) { return; } SetTable(); } } } }