영카트 주문상태 변경시 배송비 재계산
본문
안녕하세요
영카트 주문상태 변경시 배송비 재계산 되지않도록 하고싶은데.
예를 들어 배송비 가 2000원이였다가 3000원으로 변경하면,
변경이전 주문시점 주문내역 상태를 변경하면 배송비가 재계산되는 문제가 발생합니다.
배송비 재계산되지 않도록 하려면 어느파일어디를 수정해야할까요 ? 다찾아봤는데 아무리 찾아도없어서요 ㅠㅠ
답변 2
주문 내역 테이블에 ‘고정배송비’ 컬럼을 추가하여
기존 주문은 배송비 계산 로직을 통해 주문 당시의 배송비를 해당 컬럼에 입력하고,
주문 생성 시 현재의 배송비를 계산해 ‘고정배송비’ 컬럼에 저장함으로써
이후 주문의 다른 정보와 함께 기록되도록 ~
주문상태 변경 로직에서는 기존에 저장된 ‘고정배송비’ 값이 존재할 경우 이를 재사용~
배송비 재계산 함수에 해당 값이 이미 설정되었으면 재계산 생략 조건문을 추가하시면~
아래는 DB 스키마 수정과 주문 생성 및 주문 상태 변경 시
고정 배송비를 적용하는 예시 코드~
-- 1. DB 스키마: 주문 테이블에 주문 생성 시, 계산된 고정 배송비를 저장할 컬럼 추가ALTER TABLE `g5_shop_order`
ADD COLUMN `od_fixed_shipping_fee` INT(11) NOT NULL DEFAULT 0 COMMENT '주문 시 계산된 고정 배송비';
-- 2. 주문 생성 , 예) adm/shop_admin/orderform.php
<?php
// 주문 생성 시 필요한 데이터 준비
$order_data = $_POST; // 예: 폼에서 전달된 주문 데이터
$order_id = generate_order_id(); // 주문 ID 생성 함수
$customer_id = $_SESSION['customer_id'];
// 현재 배송비 계산 (기존 로직)
$shipping_fee = calculate_shipping_fee($order_data);
// 주문 생성 SQL (계산된 배송비를 고정배송비 컬럼에 저장)
$sql = "INSERT INTO `g5_shop_order`
(order_id, customer_id, ..., shipping_fee, od_fixed_shipping_fee)
VALUES ('{$order_id}', '{$customer_id}', ..., '{$shipping_fee}', '{$shipping_fee}')";
mysql_query($sql);
?>
-- 3. 주문 상태 및 수정 로직 수정 예) adm/shop_admin/orderformupdate.php
<?php
// 주문 정보 조회
$order = get_order_info($order_id);
// 고정배송비가 기록되어 있으면 재계산 생략
if (isset($order['od_fixed_shipping_fee']) && $order['od_fixed_shipping_fee'] > 0) {
$shipping_fee = $order['od_fixed_shipping_fee'];
} else {
// 고정배송비가 없는 경우(legacy 주문)에는 기존 계산 로직 수행
$shipping_fee = calculate_shipping_fee($order);
}
// 주문 상태 업데이트 (배송비 업데이트 포함)
$sql = "UPDATE `g5_shop_order`
SET order_status = '{$new_status}', shipping_fee = '{$shipping_fee}'
WHERE order_id = '{$order_id}'";
mysql_query($sql);
?>
-- 4. 배송비 계산 함수 수정 예) lib/shop.lib.php
function get_sendcost($od_id) {
$order = get_order_info($od_id);
// 주문 생성 시 저장된 고정배송비가 있으면 사용
if (isset($order['od_fixed_shipping_fee']) && $order['od_fixed_shipping_fee'] > 0) {
return $order['od_fixed_shipping_fee'];
}
// 그렇지 않으면 기존 계산 로직 수행
return calculate_shipping_fee($order);
}
※ 주문 상세보기 페이지 등에서 배송비 표시 시,
od_fixed_shipping_fee 컬럼의 값을 그대로 보여주셔야 합니다.
다찾아봤는데 아무리 찾아도없어서요<===어떤 부분을 찾아보았다는 것인지....
상태변경 ==> orderformcartupdate.php 이 화일에 보면 배송비 변경하는 부분이 나오잖아요?
$info = get_order_info($od_id);
~
update {$g5['g5_shop_order_table']}
~
od_send_cost = '{$info['od_send_cost']}',
get_order_info 함수를 봐야겠죠
lib/shop.lib.php에서 찾아보면 get_order_info 함수에 아래 코드가 나옵니다
// 배송비
$send_cost = get_sendcost($od_id); <== 다시 get_sendcost 함수를 찾아가면 됩니다
영카트 로직을 완전히 이해하지 못하고 있으면 배송비 계산하는 코드를 찾아도
수정이 가능할지 의문입니다
---------------------------------------------
질문처럼 단순히 상태 변경시 배송비 변경이 안되도록 하는 것은
예전 배송비가 유지되도록만 해주면 되니 간단한데 관리자가 주문수량 변경을 하는 경우에도
배송비 재계산이 안되니 문제가 됩니다
이것은 단순히 해결될 문제는 아니고 주문당시 기본 배송비 설정값을 저장해두고
주문변경시에는 $default['de_send_cost_list'] 값을 저장해둔 값으로 변경 설정하는 처리가 필요합니다
--------------------------------
상태 변경시 배송비 변경이 안되게 하기(관리자가 주문 수량 변경을 해도 배송비 변경이 안됨)
get_order_info 함수에서
// 배송비
//$send_cost = get_sendcost($od_id); <===== 주석처리
$send_cost =$od['od_send_cost']; <==추가 :: 기존 배송비 그대로 사용