Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

[JS] 목재 쇼핑몰에서 사용할 재단 계산 스크립트

2012-03-19 by 편리
<script type=”text/javascript”>
var per_cost = parseInt(“<?php echo $cost; ?>”);
var max_size = parseInt(“<?php echo $max_size; ?>”);
$(function() {
    $(‘#InsertRow’).click(function() {
        $(‘#item_cut_form li.cut_option:last’).after(‘<li class=”cut_option”><div class=”cut_length”><input type=”text” name=”length[]” class=”CutLength” value=”0″ /> mm</div><div class=”cut_quantity”><div><input type=”text” name=”quantity[]” class=”CutQuantity” value=”1″ /> 개</div><div class=”DeleteRow”></div></div></li>’);
    });

    $(‘#item_cut_form li.cut_option div.DeleteRow’).live(‘click’, function() {
        $(this).closest(“.cut_option”).remove();
        CutLengthCalculate();
        CutCostCalculate();
    });

    $(‘#cut_cross’).click(function() {
        if(confirm(“재단 설정을 반영하지 않고 창을 닫으시겠습니까?”)) {
            $(‘input[name=it_cut]:nth(0)’).attr(“checked”, true);
            $(‘input[name=ct_qty]’).val(1).removeAttr(“readonly”);
            $(‘input[name=it_cut_memo]’).val(“”);
            $(‘input[name=it_cut_cost]’).val(0);
            $(‘#item_cut_form’).hide();
            $(‘#item_cut_cost’).hide();
            PriceCalculate();
        }
    });

    $(‘input.CutLength’).live(‘focusout’, function() {
        var len = parseInt($(this).val());
        if(isNaN(len)) {
        //    alert(“재단길이를 숫자로 입력해 주십시오.”);
            return false;
        } else {
            if(len <= 0) {
                alert(“길이는 0보다 큰 수로 입력해 주십시오.”);
                return false;
            } else if(len > max_size) {
                $(this).val(0);
                alert(“재단 길이는 “+max_size+”mm 이하로 입력해 주십시오.”);
                return false;
            } else {
                CutLengthCalculate();
                CutCostCalculate();
            }
        }
    });

    $(‘input.CutQuantity’).live(‘keyup’, function() {
        var qty = parseInt($(this).val());
        if(isNaN(qty)) {
        //    alert(“수량을 숫자로 입력해 주십시오.”);
            return false;
        } else {
            if(qty <= 0) {
                alert(“수량은 0보다 큰 수로 입력해 주십시오.”);
                return false;
            } else {
                CutLengthCalculate();
                CutCostCalculate();
            }
        }
    });

    $(‘#CutOK’).click(function() {
        CutMemoSubmit();
    });
});

function CutLengthCalculate()
{
    try {
        var qty = 0;
        var remain = 0;
        var Rest = new Array();
        var Len = new Array();
        var Cnt = new Array();
        $(‘input.CutLength’).each(function() {
            var val = parseInt($(this).val());
            if(isNaN(val) || val <=0) {
                val = 0;
            }

            Len.push(val);
        });

        $(‘input.CutQuantity’).each(function() {
            var val = parseInt($(this).val());
            if(isNaN(val) || val <=0) {
                val = 0;
            }

            Cnt.push(val);
        });

        if(Len.length != Cnt.length) {
            alert(“길이와 수량을 올바르게 입력해 주십시오.”);
            return false;
        }

        for(i = 0; i < Len.length; i++) {
            if(Len[i] > 0 && Cnt[i] > 0) {
                remain = 0;
                for(c = 0; c < Cnt[i]; c++) {
                    if(Rest.length > 0) {
                        for(r = 0; r < Rest.length; r++) {
                            if(Rest[r] < Len[i]) {
                                rc++;
                                continue;
                            } else {
                                remain = Rest[r] – Len[i];
                                Rest[r] = remain;
                                rc = 0;
                                break;
                            }
                        }

                        if(rc > 0) {
                            qty += 1;
                            remain = max_size – Len[i];

                            if(remain > 0) {
                                Rest.push(remain);
                            }
                        }
                    } else {
                        qty += 1;
                        remain = max_size – Len[i];

                        if(remain > 0) {
                            Rest.push(remain);
                        }
                    }
                }
            }
        }

        $(‘input[name=ct_qty]’).val(qty);
        PriceCalculate();

        // 자투리
        if(Rest.length > 0) {
            var Double = new Array();

            for(j = 0; j < Rest.length; j++) {
                for(k = 0; k < Rest.length; k++) {
                    if(Rest[k] > 0) {
                        if(Rest[j] != Rest[k]) {
                            continue;
                        } else {
                            Double.push(Rest[j]); // 중복되는 길이 배열에 저장
                        }
                    } else {
                        continue;
                    }
                }

                // 중복값 배열과 원래 배열 비교해서 중복되는 개수 구하기
                if(Double.length > 0) {
                    var msg = “자투리 :”;
                    for(d = 0; d < Double.length; d++) {
                        var Dbl = 0;
                        for(g = 0; g < Rest.length; g++) {
                            if(Double[d] != Rest[g]) {
                                continue;
                            } else {
                                Dbl++;
                            }

                            msg += ” ” + Double[d] + “mm : ” + Dbl + “EA”;
                        }
                    }
                }
            }

        //    alert(msg);
        }
    }
    finally {
        Len = Cnt = Rest = Double = null;
        qty = rc = remain = checkDbl =  null;
    }
}

function CutCostCalculate()
{
    try {
        var cut = 0;
        var total_cost = 0;
        var Len = new Array();
        var Cnt = new Array();
        $(‘input.CutLength’).each(function() {
            var val = parseInt($(this).val());
            if(isNaN(val) || val <=0) {
                val = 0;
            }

            Len.push(val);
        });

        $(‘input.CutQuantity’).each(function() {
            var val = parseInt($(this).val());
            if(isNaN(val) || val <=0) {
                val = 0;
            }

            Cnt.push(val);
        });

        if(Len.length != Cnt.length) {
            alert(“길이와 수량을 올바르게 입력해 주십시오.”);
            return false;
        }

        for(i = 0; i < Len.length; i++) {
            cut = 0; // 컷팅 수
            if(Len[i] > 0 && Cnt[i] > 0) {
                var split = Math.floor(max_size / Len[i]); // 재단 길이에 따른 각재 1개의 최대 컷팅수

                if((max_size % Len[i]) == 0) { // 최대 길이가 재단길이의 배수일 때
                    var cst = Math.floor(Cnt[i] / split); // 최대 컷팅수로 재단된 각재 수
                    cut = ((split – 1) * cst) + (Cnt[i] – (split * cst)); // (기본컷팅수 * 각재수 ) + (요청수 – (컷팅 수))
                } else {
                    cut = Cnt[i];
                }
            }

            total_cost += per_cost * cut;
        }

        $(‘input[name=it_cut_cost]’).val(total_cost);
    }
    finally {
        Len = Cnt = null;
        cst = cost = total_cost = null;
    }
}

function CutMemoSubmit()
{
    try {
        var cut_memo = “”;
        var sp = 0;
        var Len = new Array();
        var Cnt = new Array();
        $(‘input.CutLength’).each(function() {
            var val = parseInt($(this).val());
            if(isNaN(val) || val <=0) {
                val = 0;
            }

            Len.push(val);
        });

        $(‘input.CutQuantity’).each(function() {
            var val = parseInt($(this).val());
            if(isNaN(val) || val <=0) {
                val = 0;
            }

            Cnt.push(val);
        });

        if(Len.length != Cnt.length) {
            alert(“길이와 수량을 올바르게 입력해 주십시오.”);
            return false;
        }

        for(i = 0; i < Len.length; i++) {
            if(Len[i] > 0 && Cnt[i] > 0) {
                if(sp > 0) {
                    cut_memo += “, “;
                }
                cut_memo += Len[i] + “mm : ” + Cnt[i] + “EA”;
                sp++;
            }
        }

        if(sp < 1) {
            alert(“재단길이와 수량을 올바르게 입력해 주십시오.”);
            return false;
        }

        $(‘input[name=it_cut_memo]’).val(cut_memo);
        $(‘#item_cut_form’).hide();
    }
    finally {
        Len = Cnt = null;
        cut_memo = sp = null;
    }
}
</script>

목재 쇼핑몰 작업 중에 만든 각재 재단 관련 스크립트이다. 재단 길이를 입력하면 필요한 각재 수량과 재단비가 자동
계산되는 것인데.. 이거 제대로 한 건지 아직은 확신이 없다. 얼추 해보니 제대로 되는 것 같긴 한데 말이다. 하~
각재에는 각각 최대 길이가 미리 정해져 있어야 한다. 자투리도 출력되는데 요건 일단 나오지 않도록 주석처리 중.. ㅋ

덧, 자투리 계산부분은 확실히 오류가 있구나.. 이건 다시 수정해봐야 겠다. 근데 이거 언제 다시 하지.. ㅋ

Post navigation

Previous Post:

갤럭시 넥서스 손전등 어플

Next Post:

마음대로 되는 게 정말 없나 보다

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes