예약 게시판 관련 질문 드립니다.
본문
안녕하세요
한가지 물어 볼게 있어서요
http://youngst.or.kr/bbs/board.php?bo_table=test
여기서 예약을 하는데요
마시멜로 직찍 과 회의실이 각각 시간이 주어진 상태에서 시간 단위로 예약을 하게 되어 있습니다.
예시
여러모로 회의실
11:00 ~ 12:00 (0) 12:00 ~ 13:00 (0) 13:00 ~ 14:00 (0) 14:00 ~ 15:00 (0) 15:00 ~ 16:00 (0) 16:00 ~ 17:00 (0) 17:00 ~ 18:00 (0) 18:00 ~ 19:00 (0) 19:00 ~ 20:00 (0) 20:00 ~ 21:00 (0)
마시멜로 직찍
11:00 ~ 12:00 (0) 12:00 ~ 13:00 (0) 13:00 ~ 14:00 (0) 14:00 ~ 15:00 (0) 15:00 ~ 16:00 (0) 16:00 ~ 17:00 (0) 17:00 ~ 18:00 (0) 18:00 ~ 19:00 (0) 19:00 ~ 20:00 (0) 20:00 ~ 21:00 (0)
위 처럼 이렇게 예약을 하게 되어 있고 그리고 설정으로는 1명만 중복으로 예약이 가능 하게 되어 있습니다. 마시멜로 특정 시간 선택 및 여러므로 회의실 특 정시간 예약을 하게 되면 그 예약한 곳에는 더이상 예약이 안되게 처리가 되어 있는데요 물론 1명만 2명은 불가로 되어 있구요
그런데 위 모든 시간이 다 찼을 때 예약 마감이 나와야 하는데 몇개 안했는데 예약 마감이 나오는 난감한 상태 입니다.
혹시 이거 어떻게 해야 하는지 아시는 분은 답변 좀 부탁을 드려도 될까요?
제발 도와 주세요
혹시 몰라서 일단 소스는 올려 놓기는 하는데 맞는지는 모르겠습니다. 혹시 잘 알기가 힘드시면 말씀 해주세요 그럼제가 파일은 공유해드리도록 하겠습니다.
$office_no = ($office_no)? $office_no:$_SESSION['ss_office_no'];
$select = ($select)? $select:$_SESSION['ss_select'];
// 게시판아이디체크
if(!$office_no) {
alert("정비업체를 선택하지 않으셨습니다.");
}
if(!$select) {
alert("예약 날짜를 선택하지 않으셨습니다.");
}
include_once($board_skin_path . '/company_info.php');
include_once($board_skin_path.'/skin.function.php'); // 함수모음
// URL에서 직접 입력하고 접속시 휴무일인지 체크 ($booking_holiday = 업체휴무일 배열, $select = 달력상의 날짜.);
$office_yoil = closed_Day($booking_holiday, $select); // 휴무일이면 0~6 반환, 휴무일이 아니면 X 반환
if($office_yoil!="X") {
//alert("선택한 날짜는 정기 휴무일입니다.\\n예약가능한 날짜를 선택해 주세요.", G5_BBS_URL."/board.php?bo_table=booking&office_no={$office_no}");
exit;
}
// 임시공휴일인지 체크
$chk = holiday_check($select);
if($chk == 'true') {
alert("[ ".$select." ]은 임시휴일이므로 예약을 하실 수 없습니다.");
}
// 선택한 날짜가 예약가능한 날짜인가를 체크
$booking_min = date("Y-m-d", strtotime("{$start_date} day")); //예약 시작 일자.
$booking_max = date("Y-m-d", strtotime("{$end_date} day")); // 예약 마감일자.
// 오늘날짜가 예약가능한날짜 사이에 있는지 체크
if($select < $booking_min || $select > $booking_max) {
alert("선택한 날짜는 예약할 수 없습니다.\\n달력에서 예약가능한 날짜를 선택해 주세요.", G5_BBS_URL."/board.php?bo_table={$bo_table}&office_no={$office_no}");
}
## 기타작업
$jobs_01_sub = "청춘 공간";
$jobs_01 = "여러모로 회의실|마시멜로 직찍";
<div class="panel panel-default">
<div class="panel-body">
<div class="req_hdlines">
<div class="req_hleft"><font color="#0c4ca3">* 필수정보</font></div>
<div class="req_hrig2">
<li>청춘정거장은 취‧창업과 커뮤니티 활동을 지원하고 함께 공유하는 공간입니다. 뒷정리도 깔끔히! 청춘이니까!^^</li>
<li>대관신청은 홈페이지에 대관예약 탭에 들어가셔서 신청하시고 </li>
<li>대관내용에 문제가 있거나 확인이 필요할 경우에 사무실에서 전화 드리겠습니다.</li>
</div>
</div>
<div class="req_box">
<div class="col-xs-12 col-md-6">
<div class="req_capt req_capt_2 col-md-3 norigbord2">
<font color="#0c4ca3">*</font>예약장소<strong class="sr-only">필수</strong>
</div>
<div class="req_inp req_nums col-md-9">
<div style="line-height:3em;">
<?php echo $off['office_name']; ?>
(<i class='fa fa-phone-square' aria-hidden='true'></i><?php echo $off['office_tel'];?>)
</div>
</div>
</div>
<div class="col-xs-12 col-md-6">
<div class="req_capt col-md-3 req_capt_2"><font color="#0c4ca3">*</font> 예약일자</div>
<div class="req_inp req_inp_2 col-md-9">
<div style="line-height:3em;">
<?php echo ($write['wr_1'])? $write['wr_1']:$toDay; ?>
<input type="hidden" name="wr_1" class="wr_1" value="<?php echo ($write['wr_1'])? $write['wr_1']:$select; ?>" readonly />
</div>
</div>
</div>
</div>
<div class="req_box">
<div class="col-xs-12">
<div class="req_capt reqc_zip col-md-3"><font color="#0c4ca3">*</font>청춘공간</div>
<div class="req_inp col-md-9">
<?php echo $jobs_01_sub?><br>
<li>※ 사용하실 공간을 선택하여 주세요</li><br>
<li><?php echo checkBox_booking($jobs_01,$jobs_01,$write['wr_5'],'jobs[]','jobs1',1)?></li>
</div>
</div>
</div>
<div class="req_box">
<div class="col-xs-12">
<div class="req_capt reqc_zip col-md-3"><font color="#0c4ca3">*</font>예약시간</div>
<div class="req_inp col-md-9">
<?php if($time_person > 0) { //시간대별 예약인원 제한일경우.. ?>
<li>※ 예약 시간대별 최대 예약가능한 인원은 <span style="color:red;"><?php echo $time_person;?></span>명입니다.</li>
<li>※ 예약시간 옆 괄호안의 숫자는 현재 예약 수 입니다.</li>
<li>※ 이용을 하고자 하는 시간대를 모두 선택하시면 됩니다.</li>
<?php } ?>
<div id="admin_kk" style="display:none;">여러모로 회의실<br>
<?php
$am = booking_time($bo_table, $select); // 예약가능한시간대별리스트
echo check_time($am, $am, $write['wr_2'], 'time[]', 'time');
?>
</div>
<div id="admin_kk1" style="display:none;">마시멜로 직찍<br>
<?php
$am = booking_time($bo_table, $select); // 예약가능한시간대별리스트
echo check_time_1($am, $am, $write['wr_2'], 'time[]', 'time2');
?>
</div>
</div>
<script>
function c_bo(){
var chk = document.getElementsByName("jobs[]"); // 체크박스객체를 담는다
var len = chk.length; //체크박스의 전체 개수
var checkRow = ''; //체크된 체크박스의 value를 담기위한 변수
var checkCnt = 0; //체크된 체크박스의 개수
var checkLast = ''; //체크된 체크박스 중 마지막 체크박스의 인덱스를 담기위한 변수
var rowid = ''; //체크된 체크박스의 모든 value 값을 담는다
var cnt = 0;
for(var i=0; i<len; i++){
if(chk[i].checked == true){
checkCnt++; //체크된 체크박스의 개수
checkLast = i; //체크된 체크박스의 인덱스
}
}
if(checkCnt>1){
document.getElementById("admin_kk").style.display="";
document.getElementById("admin_kk1").style.display="";
}
else{
if(checkLast==0){
document.getElementById("admin_kk").style.display="";
document.getElementById("admin_kk1").style.display="none";
}
else{
document.getElementById("admin_kk").style.display="none";
document.getElementById("admin_kk1").style.display="";
}
}
}
</script>
</div>
</div>
답변 3
로직만 개념적으로 말씀드립니다.
기본적으로 예약기능을 체크하려면
로직영역에서
1. 기간범위의 각예약상황을 체크
2. 일자별 예약인원/가용인원 체크
3. 일자 - 시간 또는
일자 - 장소(대상)
---
skin영역에서
1. 표현할 기간
2. (일자별) 예약/가능상황표현
3. (일자중) 오늘날짜 체크
(표현다르게)
4. (일자중) 표현일자별 가용여부 표현
- 로직2번의 예약상황을 표현
5. 일자별 여러가지 조건인경우 각가표현
들여쓰기를 해드린건
상위의 개념안에 포함되는 것을 나타냅니다.
--------------
위에 나열할 소스는 스킨의 일부분같아 보입니다.
일자별 가용인원 체크로직이 없네요
오늘일자에 가용인원(시간별)이 다 찬경우 예약완료를 표현할수있는 체크사항이 있어야 합니다.
개념을 알고 나서 다시 질문 하도록 하겠습니다. 죄송합니다.
모두들 답변 주셔서 감사 드립니다.
혹시
// 시간대별 예약시간을 라디오버튼으로 변경
function check_time_1($data1,$data2,$db_data,$name,$id_v) {
global $g5, $write, $board, $office_no, $select, $time_person;
// 시간대별 예약자 추출
$sql = "select
wr_2,
count(wr_2) as cnt
from
".$g5['write_prefix'].$board['bo_table']."
where
wr_1 = '$select' and ca_name = '$office_no' and wr_5='마시멜로 직찍'
group by
wr_2 ";
$result = sql_query($sql, true);
$person=array();
while($res=sql_fetch_array($result)) {
$wr2 = explode("|", $res['wr_2']);
for($i=0; $i < count($wr2); $i++) {
//$tr = $wr_2[$i];
$ps[] = $wr2[$i]; // 예약시간대 배열 생성.
}
}
$ps = array_count_values($ps);
foreach ($ps as $key => $value) {
$tr = $key."|".$value;
$person[$tr] = $key;
}
$data1=explode("|",$data1);
$data2=explode("|",$data2);
for($i=0; $i < count($data1); $i++){$dataA[$i]=$data1[$i];}
for($i=0; $i < count($data2); $i++){$dataB[$i]=$data2[$i];}
$check=explode("|",$db_data);
$wr_five = array();
for($i=0;$i<count($check);$i++) {
$wr_five[] = $check[$i];
}
$result = "";
for($i=0; $i < (count($data2)-1); $i++) {
$db = array_search($dataB[$i],$wr_five);
if($dataB[$i]==$wr_five[$db]) {
$checked="checked";
$span="color:#FF0080;";
} else {
$checked="";
$span="";
}
// 시간대별 예약가능한 최대인원수에 해당하는 시간대별배열.
$closed = array_search($dataB[$i],$person);
$cnt = explode("|",$closed);
//echo print_r2($time_person);
// 시간대별 예약 최대 인원수에 도달한 시간일경우 선택 못하게 disabled 시킨다.
if($cnt[0] == $dataB[$i] && $cnt[1] >= $time_person ) {
$disabled = "disabled='disabled'";
$color = "color:red";
}
$result .= "<span class='chkBox'>";
$result .= "<input type='checkbox' value='$dataB[$i]' name='${name}' {$checked} {$disabled} class='hand' id='${id_v}[$i]'/>";
$result .= "<label for='${id_v}[$i]' style='{$color}'> {$dataA[$i]} ~ {$dataA[$i+1]} (".number_format($cnt[1]).")</label>";
//$result .= "<input type='checkbox' name='${name}' id='${id_v}[$i]' class='hand' value='{$dataB[$i]}' $checked {$disabled}>";
//$result .= "<label for='${id_v}[$i]' style='{$color}'> {$dataA[$i]} (".number_format($cnt[1]).")</label>";
$result .= "</span>";
unset($disabled);
unset($color);
}
return($result);
}