관리자 주문상세 부분취소 기능 추가
This commit is contained in:
@ -645,6 +645,9 @@ $pg_anchor = '<ul class="anchor">
|
||||
<?php if($od['od_misu'] > 0) { ?>
|
||||
<a href="./personalpayform.php?popup=yes&od_id=<?php echo $od_id; ?>" id="personalpay_add">개인결제추가</a>
|
||||
<?php } ?>
|
||||
<?php if($od['od_misu'] < 0 && ($od['od_receipt_price'] - $od['od_refund_price']) > 0 && $od['od_settle_case'] == '신용카드' || $od['od_settle_case'] == '계좌이체') { ?>
|
||||
<a href="./orderpartcancel.php?od_id=<?php echo $od_id; ?>" id="orderpartcancel"><?php echo $od['od_settle_case']; ?> 부분취소</a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
@ -850,6 +853,13 @@ $(function() {
|
||||
window.open(href, "personalpaywin", "left=100, top=100, width=700, height=650, scrollbars=yes");
|
||||
return false;
|
||||
});
|
||||
|
||||
// 부분취소창
|
||||
$("#orderpartcancel").on("click", function() {
|
||||
var href = this.href;
|
||||
window.open(href, "partcancelwin", "left=100, top=100, width=600, height=400, scrollbars=yes");
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
function form_submit(f)
|
||||
|
||||
94
adm/shop_admin/orderpartcancel.php
Normal file
94
adm/shop_admin/orderpartcancel.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?php
|
||||
$sub_menu = '400400';
|
||||
include_once('./_common.php');
|
||||
|
||||
auth_check($auth[$sub_menu], "w");
|
||||
|
||||
$sql = " select * from {$g5['g5_shop_order_table']} where od_id = '$od_id' ";
|
||||
$od = sql_fetch($sql);
|
||||
|
||||
if(!$od['od_id'])
|
||||
alert_close('주문정보가 존해하지 않습니다.');
|
||||
|
||||
if($od['od_settle_case'] == '계좌이체' && substr($od['od_receipt_time'], 0, 10) >= G4_TIME_YMD)
|
||||
alert_close('실시간 계좌이체건의 부분취소 요청은 결제일 익일에 가능합니다.');
|
||||
|
||||
if($od['od_receipt_price'] - $od['od_refund_price'] <= 0)
|
||||
alert_close('부분취소 처리할 금액이 없습니다.');
|
||||
|
||||
$g5['title'] = $od['od_settle_case'].' 부분취소';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
?>
|
||||
|
||||
<form name="forderpartcancel" method="post" action="./orderpartcancelupdate.php" onsubmit="return form_check(this);">
|
||||
<input type="hidden" name="od_id" value="<?php echo $od_id; ?>">
|
||||
|
||||
<div class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $od['od_settle_case']; ?> 부분취소</h1>
|
||||
|
||||
<table class="frm_tbl">
|
||||
<colgroup>
|
||||
<col class="grid_3">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>과세 입금금액</th>
|
||||
<td><?php echo display_price($od['od_tax_mny'] + $od['od_vat_mny']); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>비과세 입금금액</th>
|
||||
<td><?php echo display_price($od['od_free_mny']); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="mod_tax_mny">과세 취소금액</label></th>
|
||||
<td><input type="text" name="mod_tax_mny" value="" id="mod_tax_mny" class="frm_input"> 원</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="mod_free_mny">비과세 취소금액</label></th>
|
||||
<td><input type="text" name="mod_free_mny" value="" id="mod_free_mny" class="frm_input"> 원</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="mod_memo">요청사유</label></th>
|
||||
<td><input type="text" name="mod_memo" id="mod_memo" required class="required frm_input" size="50"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="btn_confirm">
|
||||
<input type="submit" value="확인" class="btn_submit" accesskey="s">
|
||||
<button type="button" onclick="self.close();">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
function form_check(f)
|
||||
{
|
||||
var max_tax_mny = parseInt(<?php echo ($od['od_tax_mny'] + $od['od_vat_mny']); ?>);
|
||||
var max_free_mny = parseInt(<?php echo $od['od_free_mny']; ?>);
|
||||
var tax_mny = parseInt(f.mod_tax_mny.value.replace("/[^0-9]/g", ""));
|
||||
var free_mny = parseInt(f.mod_free_mny.value.replace("/[^0-9]/g", ""));
|
||||
|
||||
if(!tax_mny && !free_mny) {
|
||||
alert("과세 취소금액 또는 비과세 취소금액을 입력해 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(tax_mny && tax_mny > max_tax_mny) {
|
||||
alert("과세 취소금액을 "+number_format(String(max_tax_mny))+"원 이하로 입력해 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(free_mny && free_mny > max_free_mny) {
|
||||
alert("비과세 취소금액을 "+number_format(String(max_free_mny))+"원 이하로 입력해 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
|
||||
<?php
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
?>
|
||||
233
adm/shop_admin/orderpartcancelupdate.php
Normal file
233
adm/shop_admin/orderpartcancelupdate.php
Normal file
@ -0,0 +1,233 @@
|
||||
<?php
|
||||
$sub_menu = '400400';
|
||||
include_once('./_common.php');
|
||||
|
||||
auth_check($auth[$sub_menu], "w");
|
||||
|
||||
$tax_mny = preg_replace('/[^0-9]/', '', $_POST['mod_tax_mny']);
|
||||
$free_mny = preg_replace('/[^0-9]/', '', $_POST['mod_free_mny']);
|
||||
|
||||
if(!$tax_mny && !$free_mny)
|
||||
alert('과세 취소금액 또는 비과세 취소금액을 입력해 주십시오.');
|
||||
|
||||
if(!trim($mod_memo))
|
||||
alert('요청사유를 입력해 주십시오.');
|
||||
|
||||
// 주문정보
|
||||
$sql = " select * from {$g5['g5_shop_order_table']} where od_id = '$od_id' ";
|
||||
$od = sql_fetch($sql);
|
||||
|
||||
if(!$od['od_id'])
|
||||
alert_close('주문정보가 존재하지 않습니다.');
|
||||
|
||||
if($od['od_settle_case'] == '계좌이체' && substr($od['od_receipt_time'], 0, 10) >= G4_TIME_YMD)
|
||||
alert_close('실시간 계좌이체건의 부분취소 요청은 결제일 익일에 가능합니다.');
|
||||
|
||||
// 금액비교
|
||||
if($tax_mny && $tax_mny > ($od['od_tax_mny'] + $od['od_vat_mny']))
|
||||
alert('과세 취소금액을 '.number_format(($od['od_tax_mny'] + $od['od_vat_mny'])).'원 이하로 입력해 주십시오.');
|
||||
|
||||
if($free_mny && $free_mny > $od['od_free_mny'])
|
||||
alert('비과세 취소금액을 '.number_format($od['od_free_mny']).'원 이하로 입력해 주십시오.');
|
||||
|
||||
// 취소사유의 한글깨짐 방지처리
|
||||
$def_locale = setlocale(LC_CTYPE, 0);
|
||||
$cancel_memo = iconv("utf-8", "euc-kr", $mod_memo);
|
||||
$locale_change = false;
|
||||
if(preg_match("/utf[\-]?8/i", $def_locale)) {
|
||||
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
|
||||
$locale_change = true;
|
||||
}
|
||||
|
||||
// 부분취소 실행
|
||||
if ($default['de_card_test']) {
|
||||
if ($default['de_escrow_use'] == 1) {
|
||||
// 에스크로결제 테스트
|
||||
$default['de_kcp_mid'] = "T0007";
|
||||
$default['de_kcp_site_key'] = '2.mDT7R4lUIfHlHq4byhYjf__';
|
||||
}
|
||||
else {
|
||||
// 일반결제 테스트
|
||||
$default['de_kcp_mid'] = "T0000";
|
||||
$default['de_kcp_site_key'] = '3grptw1.zW0GSo4PQdaGvsF__';
|
||||
}
|
||||
}
|
||||
else {
|
||||
$default['de_kcp_mid'] = "SR".$default['de_kcp_mid'];
|
||||
}
|
||||
|
||||
$g_conf_site_cd = $default['de_kcp_mid'];
|
||||
$g_conf_site_key = $default['de_kcp_site_key'];
|
||||
$g_conf_home_dir = G5_SHOP_PATH.'/kcp';
|
||||
$g_conf_key_dir = '';
|
||||
$g_conf_log_dir = '';
|
||||
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
|
||||
{
|
||||
$g_conf_key_dir = G5_SHOP_PATH.'/kcp/bin/pub.key';
|
||||
$g_conf_log_dir = G5_SHOP_PATH.'/kcp/log';
|
||||
}
|
||||
|
||||
if (preg_match("/^T000/", $g_conf_site_cd) || $default['de_card_test']) {
|
||||
$g_conf_gw_url = "testpaygw.kcp.co.kr";
|
||||
}
|
||||
else {
|
||||
$g_conf_gw_url = "paygw.kcp.co.kr";
|
||||
if (!preg_match("/^SR/", $g_conf_site_cd)) {
|
||||
alert("SR 로 시작하지 않는 KCP SITE CODE 는 지원하지 않습니다.");
|
||||
}
|
||||
}
|
||||
|
||||
$g_conf_log_level = "3";
|
||||
$g_conf_gw_port = "8090";
|
||||
|
||||
include G5_SHOP_PATH.'/kcp/pp_cli_hub_lib.php';
|
||||
|
||||
$tno = $od['od_tno'];
|
||||
$req_tx = 'mod';
|
||||
$mod_desc = $cancel_memo;
|
||||
$cust_ip = getenv('REMOTE_ADDR');
|
||||
$rem_mny = $od['od_receipt_price'] - $od['od_refund_price'];;
|
||||
$mod_mny = $tax_mny;
|
||||
$mod_free_mny = $free_mny;
|
||||
$mod_type = 'RN07';
|
||||
if($od['od_settle_case'] == '계좌이체')
|
||||
$mod_type = 'STPA';
|
||||
|
||||
if($od['od_tax_flag']) {
|
||||
$mod_mny = $tax_mny + $free_mny;
|
||||
}
|
||||
|
||||
$c_PayPlus = new C_PAYPLUS_CLI;
|
||||
$c_PayPlus->mf_clear();
|
||||
|
||||
if ( $req_tx == "mod" )
|
||||
{
|
||||
$tran_cd = "00200000";
|
||||
|
||||
$c_PayPlus->mf_set_modx_data( "tno" , $tno ); // KCP 원거래 거래번호
|
||||
$c_PayPlus->mf_set_modx_data( "mod_type" , $mod_type ); // 원거래 변경 요청 종류
|
||||
$c_PayPlus->mf_set_modx_data( "mod_ip" , $cust_ip ); // 변경 요청자 IP
|
||||
$c_PayPlus->mf_set_modx_data( "mod_desc" , $mod_desc ); // 변경 사유
|
||||
$c_PayPlus->mf_set_modx_data( "rem_mny" , strval($rem_mny) ); // 취소 가능 잔액
|
||||
$c_PayPlus->mf_set_modx_data( "mod_mny" , strval($mod_mny) ); // 취소 요청 금액
|
||||
|
||||
if($od['od_tax_flag'])
|
||||
{
|
||||
$mod_tax_mny = round((int)$tax_mny / 1.1);
|
||||
$mod_vat_mny = (int)$tax_mny - $mod_tax_mny;
|
||||
|
||||
$c_PayPlus->mf_set_modx_data( "tax_flag" , "TG03" ); // 복합과세 구분
|
||||
$c_PayPlus->mf_set_modx_data( "mod_tax_mny" , strval($mod_tax_mny) ); // 공급가 부분 취소 요청 금액
|
||||
$c_PayPlus->mf_set_modx_data( "mod_vat_mny" , strval($mod_vat_mny) ); // 부과세 부분 취소 요청 금액
|
||||
$c_PayPlus->mf_set_modx_data( "mod_free_mny" , $mod_free_mny ); // 비관세 부분 취소 요청 금액
|
||||
}
|
||||
}
|
||||
|
||||
if ( $tran_cd != "" )
|
||||
{
|
||||
$c_PayPlus->mf_do_tx( "", $g_conf_home_dir, $g_conf_site_cd,
|
||||
$g_conf_site_key, $tran_cd, "",
|
||||
$g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib",
|
||||
$ordr_idxx, $cust_ip, $g_conf_log_level,
|
||||
"", 0 );
|
||||
|
||||
$res_cd = $c_PayPlus->m_res_cd; // 결과 코드
|
||||
$res_msg = $c_PayPlus->m_res_msg; // 결과 메시지
|
||||
/* $res_en_msg = $c_PayPlus->mf_get_res_data( "res_en_msg" ); // 결과 영문 메세지 */
|
||||
}
|
||||
else
|
||||
{
|
||||
$c_PayPlus->m_res_cd = "9562";
|
||||
$c_PayPlus->m_res_msg = "연동 오류|Payplus Plugin이 설치되지 않았거나 tran_cd값이 설정되지 않았습니다.";
|
||||
}
|
||||
|
||||
if ($res_cd != '0000')
|
||||
{
|
||||
$res_msg = iconv("euc-kr", "utf-8", $res_msg);
|
||||
|
||||
alert("$res_cd : $res_msg");
|
||||
}
|
||||
|
||||
/* ============================================================================== */
|
||||
/* = 취소 결과 처리 = */
|
||||
/* = -------------------------------------------------------------------------- = */
|
||||
if ( $req_tx == "mod" )
|
||||
{
|
||||
if ( $res_cd == "0000" )
|
||||
{
|
||||
$tno = $c_PayPlus->mf_get_res_data( "tno" ); // KCP 거래 고유 번호
|
||||
$amount = $c_PayPlus->mf_get_res_data( "amount" ); // 원 거래금액
|
||||
$mod_mny = $c_PayPlus->mf_get_res_data( "panc_mod_mny" ); // 취소요청된 금액
|
||||
$rem_mny = $c_PayPlus->mf_get_res_data( "panc_rem_mny" ); // 취소요청후 잔액
|
||||
|
||||
// 주문 합계
|
||||
$sql = " select SUM( IF( ct_notax = 0, ( IF(io_type = 1, (io_price * ct_qty), ( (ct_price + io_price) * ct_qty) ) - cp_price ), 0 ) ) as tax_mny,
|
||||
SUM( IF( ct_notax = 1, ( IF(io_type = 1, (io_price * ct_qty), ( (ct_price + io_price) * ct_qty) ) - cp_price ), 0 ) ) as free_mny
|
||||
from {$g5['g5_shop_cart_table']}
|
||||
where od_id = '{$od['od_id']}'
|
||||
and ct_status IN ( '주문', '준비', '배송', '완료' ) ";
|
||||
$sum = sql_fetch($sql);
|
||||
|
||||
$tax_mny = $sum['tax_mny'];
|
||||
$free_mny = $sum['free_mny'];
|
||||
|
||||
// 과세, 비과세
|
||||
if($od['od_tax_flag']) {
|
||||
$tot_tax_mny = ( $tax_mny + $od['od_send_cost'] + $od['od_send_cost2'] )
|
||||
- ( $od['od_coupon'] + $od['od_send_coupon'] + $od['od_receipt_point'] );
|
||||
if($tot_tax_mny < 0) {
|
||||
$tot_tax_mny = 0;
|
||||
$free_mny += $tot_tax_mny;
|
||||
}
|
||||
} else {
|
||||
$tot_tax_mny = ( $tax_mny + $free_mny + $od['od_send_cost'] + $od['od_send_cost2'] )
|
||||
- ( $od['od_coupon'] + $od['od_send_coupon'] + $od['od_receipt_point'] );
|
||||
$free_mny = 0;
|
||||
}
|
||||
|
||||
$od_tax_mny = round($tot_tax_mny / 1.1);
|
||||
$od_vat_mny = $tot_tax_mny - $od_tax_mny;
|
||||
$od_free_mny = $free_mny;
|
||||
|
||||
// 미수
|
||||
$od_misu = ( $od['od_cart_price'] + $od['od_send_cost'] + $od['od_send_cost2'] )
|
||||
- ( $od['od_cart_coupon'] + $od['od_coupon'] + $od['od_send_coupon'] )
|
||||
- ( $od['od_receipt_price'] + $od['od_receipt_point'] - $mod_mny );
|
||||
|
||||
$shop_memo = '\\n'.$od['od_settle_case'].' 부분취소(금액: '.number_format($mod_mny).'원) - '.G5_TIME_YMDHIS;
|
||||
|
||||
$sql = " update {$g5['g5_shop_order_table']}
|
||||
set od_refund_price = od_refund_price + '$mod_mny',
|
||||
od_misu = '$od_misu',
|
||||
od_tax_mny = '$od_tax_mny',
|
||||
od_vat_mny = '$od_vat_mny',
|
||||
od_free_mny = '$od_free_mny',
|
||||
od_shop_memo = concat(od_shop_memo, \"$shop_memo\")
|
||||
where od_id = '{$od['od_id']}'
|
||||
and od_tno = '$tno' ";
|
||||
sql_query($sql);
|
||||
} // End of [res_cd = "0000"]
|
||||
|
||||
/* = -------------------------------------------------------------------------- = */
|
||||
/* = 취소 실패 결과 처리 = */
|
||||
/* = -------------------------------------------------------------------------- = */
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
if($locale_change)
|
||||
setlocale(LC_CTYPE, $def_locale);
|
||||
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
?>
|
||||
|
||||
<script>
|
||||
alert("<?php echo $od['od_settle_case']; ?> 부분취소 처리됐습니다.");
|
||||
opener.document.location.reload();
|
||||
self.close();
|
||||
</script>
|
||||
|
||||
<?php
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
?>
|
||||
@ -18,6 +18,35 @@ if ($od_receipt_time)
|
||||
alert('결제일시 오류입니다.');
|
||||
}
|
||||
|
||||
// 주문 합계
|
||||
$sql = " select SUM( IF( ct_notax = 0, ( IF(io_type = 1, (io_price * ct_qty), ( (ct_price + io_price) * ct_qty) ) - cp_price ), 0 ) ) as tax_mny,
|
||||
SUM( IF( ct_notax = 1, ( IF(io_type = 1, (io_price * ct_qty), ( (ct_price + io_price) * ct_qty) ) - cp_price ), 0 ) ) as free_mny
|
||||
from {$g5['g5_shop_cart_table']}
|
||||
where od_id = '{$od['od_id']}'
|
||||
and ct_status IN ( '주문', '준비', '배송', '완료' ) ";
|
||||
$sum = sql_fetch($sql);
|
||||
|
||||
$tax_mny = $sum['tax_mny'];
|
||||
$free_mny = $sum['free_mny'];
|
||||
|
||||
// 과세, 비과세
|
||||
if($od['od_tax_flag']) {
|
||||
$tot_tax_mny = ( $tax_mny + $od_send_cost + $od_send_cost2 )
|
||||
- ( $od['od_coupon'] + $od['od_send_coupon'] + $od_receipt_point );
|
||||
if($tot_tax_mny < 0) {
|
||||
$tot_tax_mny = 0;
|
||||
$free_mny += $tot_tax_mny;
|
||||
}
|
||||
} else {
|
||||
$tot_tax_mny = ( $tax_mny + $free_mny + $od_send_cost + $od_send_cost2 )
|
||||
- ( $od['od_coupon'] + $od['od_send_coupon'] + $od_receipt_point );
|
||||
$free_mny = 0;
|
||||
}
|
||||
|
||||
$od_tax_mny = round($tot_tax_mny / 1.1);
|
||||
$od_vat_mny = $tot_tax_mny - $od_tax_mny;
|
||||
$od_free_mny = $free_mny;
|
||||
|
||||
// 미수
|
||||
$od_misu = ( $od['od_cart_price'] + $od_send_cost + $od_send_cost2 )
|
||||
- ( $od['od_cart_coupon'] + $od['od_coupon'] + $od['od_send_coupon'] )
|
||||
@ -31,6 +60,9 @@ $sql = " update {$g5['g5_shop_order_table']}
|
||||
od_receipt_point = '$od_receipt_point',
|
||||
od_refund_price = '$od_refund_price',
|
||||
od_misu = '$od_misu',
|
||||
od_tax_mny = '$od_tax_mny',
|
||||
od_vat_mny = '$od_vat_mny',
|
||||
od_free_mny = '$od_free_mny',
|
||||
dl_id = '$dl_id',
|
||||
od_invoice = '$od_invoice',
|
||||
od_invoice_time = '$od_invoice_time',
|
||||
|
||||
@ -571,14 +571,14 @@ ob_end_clean();
|
||||
<tbody>
|
||||
<?php if($oc_cnt > 0) { ?>
|
||||
<tr>
|
||||
<th scope="row">결제할인쿠폰</th>
|
||||
<th scope="row">주문할인쿠폰</th>
|
||||
<td>
|
||||
<input type="hidden" name="od_cp_id" value="">
|
||||
<button type="button" id="od_coupon_btn" class="btn_frmline">쿠폰적용</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">결제할인금액</th>
|
||||
<th scope="row">주문할인금액</th>
|
||||
<td><span id="od_cp_price">0</span>원</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
@ -809,14 +809,14 @@ function get_intall_file()
|
||||
<tbody>
|
||||
<?php if($oc_cnt > 0) { ?>
|
||||
<tr>
|
||||
<th scope="row">결제할인쿠폰</th>
|
||||
<th scope="row">주문할인쿠폰</th>
|
||||
<td>
|
||||
<input type="hidden" name="od_cp_id" value="">
|
||||
<button type="button" id="od_coupon_btn" class="btn_frmline">쿠폰적용</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">결제할인금액</th>
|
||||
<th scope="row">주문할인금액</th>
|
||||
<td><span id="od_cp_price">0</span>원</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
Reference in New Issue
Block a user