장바구니를 이용한 견적서 출력기능 만들기 (2023-01-27 13:37 수정) > 영카트5 팁자료실

영카트5 팁자료실

장바구니를 이용한 견적서 출력기능 만들기 (2023-01-27 13:37 수정) 정보

장바구니를 이용한 견적서 출력기능 만들기 (2023-01-27 13:37 수정)

본문

[주] 이후 강좌수정내용의 업데이트가 안될수 있습니다.

본 강좌의 최신업데이트는 https://www.happyjung.com/lecture/3188 에서 확인가능합니다.

가급적 동일한 내용을 유지하려고 노력하지만, 우선 작업은 위 링크입니다.

 

 

https://sir.kr/yc5_tip/829 내용을 최신 php 와 mysql 에 맞도록 수정하였습니다

 




프로그램 설명 
  1) 견적상품은 장바구니에 담긴 상품을 사용합니다. 
      (1) 선택옵션을 1개(1단계)만 사용합니다. 선택옵션이 2단 이상일 경우 오작동 할 수 있음. 
      (2) 추가옵션은 사용하지 않습니다. 추가옵션이 있는 경우 오작동 할 수 있음. 
  2) 장바구니(cart.php)에 견적서출력 버튼을 생성(주문하기 버튼 옆) 
  3) 버튼 클릭으로 자바스크립트 함수를 실행 
      (1) ajax방식으로 상품정보를 세션에 저장 
      (2) 팝업으로 견적서인쇄 페이지를 띄움 
  4) 견적서인쇄 페이지에서 세션값을 검사하여 상품정보DB 조회후 화면에 표시함 
  *) 견적자료는 DB에 저장하거나 별도로 전송하지 않습니다.


영카트5
  ├ shop
  │    ├ eyoom_admin (이윰빌더)
  │    │       └ core
  │    │             └ shop
  │    │                    ├ configform.php  ( Edit )
  │    │                    └ configformupdate.php  ( Edit )
  │    ├ ajax.cartprint.php  ( New )
  │    ├ cart.php  ( Edit )
  │    └ cartprint.php  ( New )
  └ theme
         └ eyoom_basic (이윰빌더)
                └ skin
                     └ shop
                           └ basic
                                 └ cart.skin.html.php  ( Edit )


1. 디비 컬럼 추가
g5_shop_default 테이블에 2개 컬럼을 추가합니다
사업자등록증의 업태와 종목 컬럼이며, 견적서 출력서 상단 정보로 사용됩니다
업태  de_admin_company_saupja_type1    varcha(50)
종목  de_admin_company_saupja_type2   varcha(50)

phpMyAdmin 의 쿼리창에서 아래에 정보를 넣고 등록합니다
UPDATE `g5_shop_default` SET de_admin_company_saupja_type1 = '업태내용', de_admin_company_saupja_type2 = '종목내용'



2. adm / shop_admin / configform.php
영카트 환경설정 페이지에 적당하게 업태와 종목을 제어하는 내용을 추가하세요



3. adm / shop_admin / configformupdate.php
업태와 종목을 저장하는 쿼리를 추가하세요



4. shop / ajax.cartprint.php  생성해서 아래 내용 저장
<?php
include_once('./_common.php');

if(empty($_POST)) {
    die('정보가 넘어오지 않았습니다.');
}

$dt_data = serialize($_POST);
set_session("cartprint", $dt_data);

die('');



5. shop / cartprint.php  생성해서 아래 내용 저장
<?php
include_once('./_common.php');
include_once(G5_PATH.'/head.sub.php');

//print_r($_GET); echo "<br>1<br><br>";
//print_r($_POST); echo "<br>2<br><br>";

// 세션데이터에서 장바구니 전송값을 가져온다. ---------------------------------------------------
// [cart.php -> ajax.cartprint.php 세션저장한 값]
$tmp_data = get_session("cartprint");
if($tmp_data) {
    $array = unserialize($tmp_data);
}
//print_r($array); echo "<br>3<br><br>";

// 장바구니 데이터 검사 --------------------------------------------------------------------------
if(is_array($array) && is_array($array['it_id']) && is_array($array['ct_chk'])) {
    // 장바구니 전송됨
} else {
    // 장바구니 전송안됨
    echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
    include_once(G5_PATH.'/tail.sub.php');
    exit;
}


// 장바구니 no 가공 ---------------------------------------------------------------------------
/* 장바구니 상품번호와 체크여부(ct_chk)를 비교하여 견적할 제품번호만 남긴다. */
foreach($array['it_id'] as $key=>$val) {
    if(isset($array['ct_chk'][$key]) && $array['ct_chk'][$key]=="1") {
        $TMP['it'][] = $val;
    } else {
        continue;
    }
}

//print_r($TMP['it']); echo "<br>4<br><br>";

if(is_array($TMP['it']) && is_array($TMP['it'])) {
    // 견적할 제품이 있음
} else {
    // 견적할 제품이 없음
    echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
    include_once(G5_PATH.'/tail.sub.php');
    exit;
}


// 장바구니 DB 가져오기 ---------------------------------------------------------------------------
$s_cart_id = get_session('ss_cart_id');

// $s_cart_id 로 현재 장바구니 자료 쿼리
$qry = " SELECT * FROM `{$g5['g5_shop_cart_table']}` WHERE od_id = '{$s_cart_id}' AND it_id IN ( '". implode("','", $TMP['it']) ."' ) ORDER BY it_id ";
//print_r($qry); echo "<br>5<br><br>";

$res = sql_query($qry);
if(sql_num_rows($res)>0) {
    $idx = 0;
    while($row = sql_fetch_array($res)) {
        $DATA['cart'][$idx] = $row;

        // 옵션DB 가져오기
        $qry2 = " SELECT * FROM `{$g5['g5_shop_item_option_table']}` WHERE it_id = '{$row['it_id']}' AND io_id='{$row['io_id']}' AND io_type='0' ";
        //print_r($qry2); echo "<br>6<br><br>";
        $res2 = sql_query($qry2);
        if(sql_num_rows($res2)>0) {
            $DATA['opt'][$idx] = sql_fetch_array($res2);
        }

        $idx++;
    }
}

//print_r($DATA); echo "<br>7<br><br>";


// 출력화면 그리기      ---------------------------------------------------------------------------
?>
<style type="text/css">
.print-wrap { width:650px; box-sizing:border-box; margin:5px auto; }
/* 표제부 */
.table-info { border-collapse:collapse; width:100%; }
.table-info * { font-size: 12px;font-family: "돋움", "돋움체", "Tahoma", "Verdana", "Arial"; }
.table-info td { border:1px solid #09a4b6; height:20px; padding:0 5px; }
.table-info .td-row-6 { background:#06899f; color:#ffffff; text-align:center; }
.table-info .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
/* 제품리스트 */
.table-list { border-collapse:collapse; width:100%; margin:20px 0 0 0; }
.table-list * { font-size:12px; font-family:"돋움", "돋움체", "Tahoma", "Verdana", "Arial"; }
.table-list td { border:1px solid #09a4b6; height:20px; padding:5px; }
.table-list .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
.table-list .td-body { font-size:11px !important; }
/* 공통 */
.input-1 { width:174px; border:1px solid #33884E; }
.td-right { text-align:right; }
.td-center { text-align:center; }
/* 기타 */
.div-help { margin:10px 0; color:#2861c8; }
.print-button { width:600px; margin:10px auto; text-align:right; }
.print-button button { padding:4px 10px; background:#2548a5; color:#ffffff; border:0; }
@media print {
    .print-button { display:none; }
}
</style>

<div class="print-wrap">
    <table class="table-info">
        <col width="20">
        <col width="60">
        <col>
        <col width="20">
        <col width="60">
        <col width="120">
        <col width="60">
        <col width="120">
        <tr>
            <td class="td-row-6" rowspan="6">의<br>뢰<br>자</td>
            <td class="td-head">견적일</td>
            <td class="td-body"><input type="text" class="input-1" value="<?php echo date("Y-m-d"); ?>"></td>
            <td class="td-row-6" rowspan="6">공<br>급<br>자</td>
            <td class="td-head">등록번호</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_saupja_no']; ?></td>
        </tr>
        <tr>
            <td class="td-head">업체명</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">회사명</td>
            <td class="td-body"><?php echo $default['de_admin_company_name']; ?></td>
            <td class="td-head">성명</td>
            <td class="td-body"><?php echo $default['de_admin_company_owner']; ?></td>
        </tr>
        <tr>
            <td class="td-head">담당자</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">주소</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_addr']; ?></td>
        </tr>
        <tr>
            <td class="td-head">전화</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">업태</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_saupja_type1']; ?></td>
        </tr>
        <tr>
            <td class="td-head">팩스</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">종목</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_saupja_type2']; ?></td>
        </tr>
        <tr>
            <td class="td-head">E-mail</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">전화</td>
            <td class="td-body"><?php echo $default['de_admin_company_tel']; ?></td>
            <td class="td-head">팩스</td>
            <td class="td-body"><?php echo $default['de_admin_company_fax']; ?></td>
        </tr>
    </table>

    <table class="table-list">
        <col width="80">
        <col width="">
        <col width="130">
        <col width="60">
        <col width="40">
        <col width="70">
        <tr>
            <td class="td-head">제품번호</td>
            <td class="td-head">제품명</td>
            <td class="td-head">제품사양</td>
            <td class="td-head">단가</td>
            <td class="td-head">수량</td>
            <td class="td-head">가격</td>
        </tr>

        <?php
        $total_price = 0;
        $this_price = 0;
        foreach($DATA['cart'] as $key=>$val) {
            if ($val['io_type'] == '1') {
                $this_price = ($val['io_price']) * $val['ct_qty'];
                $price = $val['io_price'];
            } else {
                $this_price = ($val['ct_price']+$val['io_price']) * $val['ct_qty'];
                $price = $val['ct_price']+$val['io_price'];
            }
            $total_price += $this_price;
        ?>
        <tr>
            <td class="td-body"><?php echo $val['it_id']; ?></td>
            <td class="td-body"><?php echo $val['it_name']; ?></td>
            <td class="td-body"><?php echo $val['io_id']; ?></td>
            <td class="td-body td-right"><?php echo number_format($price); ?></td>
            <td class="td-body td-center"><?php echo number_format($val['ct_qty']); ?></td>
            <td class="td-body td-right"><?php echo number_format($this_price); ?></td>
        </tr>
        <?php
        } // end foreach;
        ?>

        <tr>
            <td class="td-body td-center" colspan="5"><strong>합계금액</strong></td>
            <td class="td-body td-right"><strong><?php echo number_format($total_price); ?></strong></td>
        </tr>
    </table>

    <div class="div-help">
        상기 견적내용은 환율에 따라 가격이 변동될 수 있으니 참고용으로만 활용하시기 바랍니다.<br>
        (견적내용 및 입력사항은 서버로 전송되지 않습니다)<br>
        자세한 견적상담을 원하시면 <?php echo $default['de_admin_company_tel']; ?>로 전화바랍니다.
    </div>

</div>

<div class="print-button">
    <button type="button" onClick="print();">인쇄</button>
    <button type="button" onClick="window.close();">닫기</button>
</div>

<?php
include_once(G5_PATH.'/tail.sub.php');



6-1. shop / cart.php  수정
<?php
include_once('./_tail.php');

위에 아래 내용 추가

<script>
// 장바구니 상품을 견적서로 출력한다. [라보텍, 2017-05-10]
function form_print() {
    //console.log("print click");
    var f = document.frmcartlist;
    var objWin = null;
    var cart_data = $(f).serialize();

    if($("input[name^=ct_chk]:checked").size() < 1) {
        alert("견적서를 출력하실 상품을 하나이상 선택해 주십시오.");
        return false;
    }

    $.ajax({
        type: "POST",
        data: cart_data,
        url: "<?php echo G5_SHOP_URL; ?>/ajax.cartprint.php",
        cache: false,
        async: false,
        success: function(data) {
            save_result = data; // ajax 결과처리는 대충넘어갑니다.
        }
    });

    objWin = window.open("<?php echo G5_SHOP_URL; ?>/cartprint.php", "WinItemPrint", "width=670,height=750,scrollbars=yes");
    if(objWin) {
        return;
    } else {
        alert("견적서 페이지를 실행하지 못하였습니다.");
        return;
    }
}
</script>



6-2. shop / cart.php  수정
        <button type="button" onclick="return form_check('buy');" class="btn_submit">주문하기</button>

아래에 내용 추가

        <button type="button" onclick="return form_print();" class="btn_submit" style="background:#1596db;">견적서출력</button>




이윰빌더

1. adm / eyoom_admin / core / shop / configform.php
영카트 환경설정 페이지에 적당하게 업태와 종목을 제어하는 내용을 추가하세요



2. adm / eyoom_admin / core / shop / onfigformupdate.php
업태와 종목을 저장하는 쿼리를 추가하세요



3-1. theme / eyoom_basic / skin / shop / basic / cart.skin.html.php 수정
아래 내용을 페이지 끝에 추가

<script>
// 장바구니 상품을 견적서로 출력한다. [라보텍, 2017-05-10]
function form_print() {
    //console.log("print click");
    var f = document.frmcartlist;
    var objWin = null;
    var cart_data = $(f).serialize();

    if($("input[name^=ct_chk]:checked").size() < 1) {
        alert("견적서를 출력하실 상품을 하나이상 선택해 주십시오.");
        return false;
    }

    $.ajax({
        type: "POST",
        data: cart_data,
        url: "<?php echo G5_SHOP_URL; ?>/ajax.cartprint.php",
        cache: false,
        async: false,
        success: function(data) {
            save_result = data; // ajax 결과처리는 대충넘어갑니다.
        }
    });

    objWin = window.open("<?php echo G5_SHOP_URL; ?>/cartprint.php", "WinItemPrint", "width=670,height=750,scrollbars=yes");
    if(objWin) {
        return;
    } else {
        alert("견적서 페이지를 실행하지 못하였습니다.");
        return;
    }
}
</script>



3-2. theme / eyoom_basic / skin / shop / basic / cart.skin.html.php 수정
        <button type="button" onclick="return form_check('buy');" class="btn-e btn-e-xxlg btn-e-red"><i class="fas fa-credit-card" aria-hidden="true"></i> 주문하기</button>
        
아래에 내용 추가

        <button type="button" onclick="return form_print();" class="btn-e btn-e-xxlg btn-e-red" style="background:#1596db;">견적서출력</button>

추천
5

댓글 3개

전체 392
영카트5 팁자료실 내용 검색

회원로그인

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