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

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

QA

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

본문

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

 

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

 

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

 

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

 

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

 

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

답변을 작성하시기 전에 로그인 해주세요.
전체 63
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT