미채택 완료

영카트 배송비 관련 추가 질문드립니다.

2017-10-23 (월) 18:05:16 3,619

안녕하세요 sir 회원님들

아까 물어본 내용이 모호한 부분이 있어서 정리를하고 

문제 해결에 필요한 sql문을 수정하기위해 도움을 요청하고자 한번더 죄송하지만 질문올립니다;

현재 제작중인 쇼핑몰은 해외배송(해외상품을 배송)과 국내배송 2가지가 있고

배송정책으로는 

1) 해외배송은 무조건 8,900원 부과(수량상관없이 ex: 해외배송3개 주문시 배송비는 8900원)

2) 국내배송은 기본배송비 2,500원, 3만원 이상 구매시 무료배송

2가지 정책으로 운영될 예정입니다.

여기서 1차로 정리를하자면 

1)번 

-> 해결 : 쇼핑몰 기본 설정 의 금액별차등옵션을 이용해 배송비 상한가를 천만원으로 높이고

배송비를 8,900원으로 하는 방법을 우회적으로 이용하여 1번문제 해결


2)번

-> 미해결 : 국내배송 카테고리(분류)에 있는 상품들을 조건부 무료배송 처리를 통해 문제를 해결하려했으나 영카트 조건부 무료배송 옵션은 개별상품​ 배송비설정으로 적용이 되서 문제를 해결하지 못했습니다.

(ex: 국내배송 A ,B제품을 시킬시 total은 3만원이 넘으나 개별상품 배송비설정적용으로 2500*2= 5000 으로 계산되는 상황입니다.)


문제를 해결하기 위해 배송비를 구하는 함수 부분과 SQL문을 찾아보니 다음과 같습니다. 



Copy
// 배송비 구함function get_sendcost($cart_id, $selected=1){    global $default, $g5;    $send_cost = 0;    $total_price = 0;    $total_send_cost = 0;    $diff = 0;    $sql = " select distinct it_id                from {$g5['g5_shop_cart_table']}                where od_id = '$cart_id'                  and ct_send_cost = '0'                  and ct_status IN ( '쇼핑', '주문', '입금', '준비', '배송', '완료' )                  and ct_select = '$selected' ";    $result = sql_query($sql);    for($i=0; $sc=sql_fetch_array($result); $i++) {        // 합계        $sql = " select SUM(IF(io_type = 1, (io_price * ct_qty), ((ct_price + io_price) * ct_qty))) as price,                        SUM(ct_qty) as qty                    from {$g5['g5_shop_cart_table']}                    where it_id = '{$sc['it_id']}'                      and od_id = '$cart_id'                      and ct_status IN ( '쇼핑', '주문', '입금', '준비', '배송', '완료' )                      and ct_select = '$selected'";        $sum = sql_fetch($sql);        $send_cost = get_item_sendcost($sc['it_id'], $sum['price'], $sum['qty'], $cart_id);        if($send_cost > 0)            $total_send_cost += $send_cost;        if($default['de_send_cost_case'] == '차등' && $send_cost == -1) {            $total_price += $sum['price'];            $diff++;        }    }    $send_cost = 0;    if($default['de_send_cost_case'] == '차등' && $total_price >= 0 && $diff > 0) {        // 금액별차등 : 여러단계의 배송비 적용 가능        $send_cost_limit = explode(";", $default['de_send_cost_limit']);        $send_cost_list  = explode(";", $default['de_send_cost_list']);        $send_cost = 0;        for ($k=0; $k<count($send_cost_limit); $k++) {            // 총판매금액이 배송비 상한가 보다 작다면            if ($total_price < preg_replace('/[^0-9]/', '', $send_cost_limit[$k])) {                $send_cost = preg_replace('/[^0-9]/', '', $send_cost_list[$k]);                break;            }        }    }    return ($total_send_cost + $send_cost);}

위의 SQL문의 결과는 상품코드를 리턴합니다.(상품3개 주문시 3개의 상품코드 리턴)

Copy
function get_item_sendcost($it_id, $price, $qty, $cart_id){    global $g5, $default;    $sql = " select it_id, it_sc_type, it_sc_method, it_sc_price, it_sc_minimum, it_sc_qty                from {$g5['g5_shop_cart_table']}                where it_id = '$it_id'                  and od_id = '$cart_id'                order by ct_id                limit 1 ";    $ct = sql_fetch($sql);    if(!$ct['it_id'])        return 0;    if($ct['it_sc_type'] > 1) {        if($ct['it_sc_type'] == 2) { // 조건부무료            if($price >= $ct['it_sc_minimum'])                $sendcost = 0;            else                $sendcost = $ct['it_sc_price'];        } else if($ct['it_sc_type'] == 3) { // 유료배송            $sendcost = $ct['it_sc_price'];        } else { // 수량별 부과            if(!$ct['it_sc_qty'])                $ct['it_sc_qty'] = 1;            $q = ceil((int)$qty / (int)$ct['it_sc_qty']);            $sendcost = (int)$ct['it_sc_price'] * $q;        }    } else if($ct['it_sc_type'] == 1) { // 무료배송        $sendcost = 0;    } else {        $sendcost = -1;    }    return $sendcost;}

위의 SQL문의 결과는 상품코드,배송비 유형, 상품 배송비결제,상품 배송비,상품 배송비 무료 최소금액,주문수량 

을 리턴합니다.



//////////////////


SQL문을 고치고 함수를 수정해서 조건부 무료배송을 설정한  국내배송상품들의 total값이 3만원을 넘으면

무료배송으로(배송비: 0 ) 처리를해야하는데 


이부분에서 개인적으로 해결에 어려움을 겪고 있습니다.


제작의뢰를 맡기라는 의견을 주신분도 있으나 현실적으로 정말 그부분은 어려움이 있어서 이렇게 

죄송스럽게도 질문글을 올립니다.

코드로 조언및 도움 부탁드립니다..


|

답변 1개

간략하게 설명 드리면

카트에 담긴 상품 테이블을 조회해서 $it[ca_id] 기준으로 국내상품인지 비교해서

국내 상품일 경우는 위에 얘기하신 조건을 넣으면 됩니다.

다만 여기서 문제는 해외상품과 국내상품을 같이 장바구니에 담았을 경우인거 같습니다.

그럴 경우는 비용을 합산해야 하니깐요 ^^;;

그리고 관리자에서도 합산으로 들어온건지에 대한 내역도 보여줘야 하니깐..

위에 어떤 분이 조언하시는 것처럼 제작의뢰로 넘기시는게 좋으실꺼 같습니다 ^^;;

답변을 작성하려면 로그인이 필요합니다.