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

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

QA

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

답변 1

본문

안녕하세요 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문을 찾아보니 다음과 같습니다. 




// 배송비 구함
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개의 상품코드 리턴)


 


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] 기준으로 국내상품인지 비교해서

 

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

 

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

 

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

 

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

 

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 68
© SIRSOFT
현재 페이지 제일 처음으로