本文共 40276 字,大约阅读时间需要 134 分钟。
1.erp.sold.base.js
/**
* 売上管理ベースJavaScript * * @date 2011-03-14 */ (function( window, $ ) {// 必要性JSファイルチェックする
if ( typeof $ == "undefined" ) { throw 'jQuery loading failed, Please first to included jQuery js file'; }if ( typeof NumberFormat == "undefined" ) {
throw 'NumberFormat loading failed, Please to included number.format.js file'; }// String-Object extend contains method
if ( !String.prototype.contains ) { String.prototype.contains = function( s ) { return this.indexOf( s ) != -1; }; }/**
* ネームスペースを創造する * * @param {String} name * ネームスペース名 * @param {Object} module * ネームスペース対象 * @param {Object} owner * ターゲット環境対象 */ function createModule( name, module, owner ) { var packages = name.split( '.' ), len = packages.length - 1, packageName, i = 0;function packageNameCheck( pname ) {
return new RegExp( '^[a-zA-Z_\$][a-zA-Z0-9_\$]*$' ).test( pname ); }function throwErr2InvaildPackageName( pname ) {
if ( !packageNameCheck( pname ) ) { throw 'Package Name is invalid.'; } }// ownerが存在しない場合,現在のスコープを探して,そしてスコープからパラメタが存在しない,ウィンドウで創造される。
if ( !owner ) { try { throwErr2InvaildPackageName( packages[ 0 ] );owner = eval( packages[ 0 ] );
i = 1; } catch ( e ) { owner = window; } }for ( ; i < len; i++ ) {
packageName = packages[ i ];throwErr2InvaildPackageName( packageName );
if ( !owner[ packageName ] ) {
owner[ packageName ] = {}; } owner = owner[ packageName ]; }if ( !owner[ packages[ len ] ] ) {
owner[ packages[ len ] ] = module; }}
/**
* StringBuffer 定義する */ function StringBuffer() { this.__string__ = new Array();this.append = function( str ) {
this.__string__.push( str ); return this; };this.toString = function( sqlit ) {
if ( sqlit && typeof sqlit == 'string' ) { return this.__string__.join( sqlit ); } else { return this.__string__.join( '' ); } }; this.empty = function() { this.__string__.length = 0; return this; }; }var
// window alias w = window, // ロハス パッケージ名 _package = "Erp", // 売上 ネームスペース _namespace = "Sold",// ツール対象
Util = { /** * Arrayにオブジェクトを変換する [ [k1, v1], [k2, v2], .... ] => { k1 : v1, .... } * * @param {Array} arr * @return {Object} */ arr2Object : function( arr ) { var classStructure = {}; if ( !arr || !$.isArray( arr ) ) return classStructure; for ( var i = 0; i < arr.length; i++ ) { classStructure[ arr[ i ][ 0 ] ] = arr[ i ][ 1 ] || {}; } return classStructure; } },Sole = {
/** * 厳格な数字 * * @param {String} n * @param {Boolean} pos trueの場合、「.」を保持する */ getNum : function( n, pos ) { var reg = pos ? /[^\d\.-]/g : /[^\d-]/g, n = n || 0, num = $.trim( n ).replace( reg, '' ), num = Number( num ); return isNaN( num ) ? 0 : num; }, /** * 数字フォマット * * @param {Number} n 数字 * @param {Boolean} isSymbole 「¥」かどうか追加 * @param {Boolean} isCommas 「,」かどうか追加 * @param {Number} fixedSize 小数長さ */ numberFormat : function( n, isSymbole, isCommas, fixedSize ) { n = typeof fixedSize == 'number' ? n.toFixed( fixedSize ) : n; if ( !isCommas && !isSymbole ) { return Number(n); } //n = isCommas ? NumberFormat.addCommas( n ).replace( /0*$/, '' ).replace( /\.$/, '' ) : n; n = isCommas ? NumberFormat.addCommas( n ) : n; n = isSymbole ? '¥' + n : n; return n; }, // debug メソッド log : function(o) { typeof console != "undefined" && typeof console.debug != "undefined" ? console.log( o ) : alert( '[DEBUG] ' + o ); }, /** * 計算時機イベント * * @param {Object} jObj * * @param {Function} fn * callback */ bindEvent : function( jObj, fn) { // if the obj is jQuery Object, not constructed jObj = jObj.jquery ? jObj : $( jObj ); return jObj.bind( 'focus blur', function( event ) { var btn = $( this ), v = btn.val(); switch ( event.type ) { case 'focus' : btn.data( "oldValue", v ); break; case 'blur' : var newVal = btn.val(); if ( btn.data( 'oldValue' ) == newVal ) { break; } if ( $.isFunction( fn ) ) { fn(); } break; } }); }, // 非表示項目正規表示式。(例えば:<input type="hidden" name="sold[0].name">) hiddenNameReg : /^([a-zA-Z]+?)(?=\[)/, // 支払区分 payDiv : { // TODO cash : { name : '現金', value : 0 }, credit : { name : 'クレジット', value : 1 }, bank : { name : '銀行振込', value : 2 } }, // 課税区分 taxDiv : { // TODO exclusive : 0, // 外税 inclusive : 1 // 内税 }, // 文字数 maxlength : { price_limit : 6, qty_limit : 4 } };var _alias = _package + "." + _namespace;
// Exposed to the global object, window.Erp
createModule( _package, { "createModule" : createModule, "StringBuffer" : StringBuffer, "$sb" : StringBuffer // short alias, #sb -> StringBuffer }, w );// Exposed to the global object, window.Erp.Sold
createModule( _alias, Sole, w );// Exposed to the global object, window.Erp.Sold.Util
createModule( _alias + ".Util", Util, w );})( window, window[ "jQuery" ] );
#####################################
2.erp.sold.studio.member.js
/**
* 売上管理・スタジオ売上・会員 * * @daate 2011-04-25 */ (function( window, $ ) {// Erp.Sold
if ( typeof Erp.Sold == "undefined" ) { throw 'Erp.Sold loading failed, Please to included erp.sold.base.js file'; } // 商品選択JSファイル if ( typeof Product == "undefined" ) { throw 'Product loading failed, Please to included Product.js file'; }// 全て選択、全て未選択ボタンなど共通処理
if ( typeof Selector == "undefined" ) { throw 'Selector loading failed, Please to included Selector.js file'; }// 消費税額
if ( typeof Common == 'undefined' ) { throw 'Common.Compute loading failed, Please to included compute.js file'; } if ( !Erp.Sold.Studio ) { Erp["createModule"]( 'Studio', {}, Erp.Sold ); }var // 厳格な数字を取れる getNumeric = Erp.Sold.getNum, // 数字フォマット numberFormat = Erp.Sold.numberFormat, // debug メソッド log = Erp.Sold.log, // alias setTimeout setTimeout = window.setTimeout, evenLineClass = 'evenLine', stringTrueReg = /^true$/i;
/** * クラス売上入力関連JS処理 * * @param sessionTax * セッションから諸費税率 */ var Member = function( sessionTax ) { return new Member.fn._init( sessionTax ); }, bindEvent = function( this_, o, options ) { return Erp.Sold.bindEvent( o, function() { setTimeout(function() { Member.fn.calculate.call( this_, options || {} ); }, 20); }).number(); };
Member.fn = Member.prototype = {
_init : function( sessionTax ) {
// 全て選択ボタンID this._selectAll = '#_selectAll'; // 全て未選択ボタンID this._unSelectAll = '#_unSelectAll'; // 削除ボタンID this._deleteSelected = '#_deleteSelected'; // 商品選択ボタン this._chooseBtn = ".chooseBtn"; // 割引プルダウン this._discountDivPullDown = '._discountDivPullDown'; // データ元 this._soldDataSource = "#_soldDataSource"; // 合計表示 this._soldDataDisplay = "#_soldDataDisplay"; // tr カウント数(最後の商品選択行が除く) this._globalCount = $( this._soldDataSource ).find( 'tr' ).length - 1; // セッションから消費税率 Member.fn.sessionTax = getNumeric( sessionTax, true ); }, /** * 割引プルダウンHTML * * @return {String} */ _discountDivOptionsHtml : function() { var html = new Erp.$sb(); for ( var key in Member.fn.discountDiv ) { var v = Member.fn.discountDiv[key]; html.append( '<option value="' + key + '">' + v.name + '</option>'); } Member.fn._discountDivOptionsHtml = function() { return html.toString(); }; return Member.fn._discountDivOptionsHtml(); },// 支払区分
payDiv : Erp.Sold.payDiv, // 課税区分 taxDiv : Erp.Sold.taxDiv, //TODO // 割引区分 discountDiv : { 0 : { name : '割引無', discountRate : { setVal : 0, setDisable : true }, discountAmt : { setVal : 0, setDisable : true } }, 1 : { name : '割引率', discountRate : { setVal : 0, setDisable : false, discountAmtCalculate : function( qty, price, rate ) { return Math.floor( ( qty * price ) * ( rate * 0.01 ) ); } }, discountAmt : { setVal : 0, setDisable : true } }, 2 : { name : '割引額', discountRate : { setVal : 0, setDisable : true }, discountAmt : { setVal : 0, setDisable : false } } } }; /** * ボタンイベント * * @return {Member} */ Member.fn.buttonEvent = function() { var this_ = this; // 全て選択 $( this._selectAll ).click( Selector.selectAll );// 全て未選択
$( this._unSelectAll ).click( Selector.unselectAll ); // 削除ボタン $( this._deleteSelected ).click(function() {$( "input.ck:checked" ).each(function() {
$( this ).parent( 'td' ).parent( 'tr' ).remove(); });Member.fn.calculate.call( this_, {
isRefreshBgColor : true, isRefreshLineNo : true, isCalculate : true }); }); // 割引区分プルダウン this.changePullDown( this._discountDivPullDown ); return this; }; /** * 割引区分プルダウン * * @param {jQuery} target * @return {jQuery} */ Member.fn.changePullDown = function( target ) { var this_ = this; // 割引区分プルダウン return $( target ).live( 'change', function() { var select = $(this); obj = Member.fn.discountDiv[ select.val() ]; rateEle = select.parent().next( 'td' ).find( 'input:text' ), amtEle = rateEle.parent().next( 'td' ).find( 'input:text' ); rateEle.val( obj.discountRate.setVal ).prop( 'disabled', obj.discountRate.setDisable ); amtEle.val( obj.discountAmt.setVal ).prop( 'disabled', obj.discountAmt.setDisable ); Member.fn.calculate.call( this_, {} ); }); }; /** * 画面で全ての入力テキストボックスを入力制限に設定する。 * * @return {Member} */ Member.fn.restrictInput = function() { bindEvent( this, $( this._soldDataSource ).find( 'input:text' ) ); return this; }; /** * 商品選択 * * @return {Member} */ Member.fn.chooseProduct = function() { var this_ = this; $( this_._chooseBtn ).bind( 'click', function() { Product.windowOpen( 'sold', undefined, undefined, function( o ) { var count = this_._globalCount++, index = count - 1, lineNo = $( this_._soldDataSource ).find( 'tr' ).slice(1, -1).length + 1, htmlStr = new Erp.$sb(), hasClass = index % 2 == 0, classStr = hasClass ? ' class="' + evenLineClass + '"' : ''; htmlStr .append( '<tr' + classStr + '>' ) .append( '<td style="display: none;">' ) .append( '<input type="hidden" name="ptsBean.soldDtlList[' + index + '].productTicketFlg" value="product" />' ) .append( '<input type="hidden" name="ptsBean.soldDtlList[' + index + '].productCd" value="' + o.productCd + '" />' ) .append( '<input type="hidden" name="ptsBean.soldDtlList[' + index + '].productDisplayName" value="' + o.productDisplayName + '" />' ) .append( '<input type="hidden" name="ptsBean.soldDtlList[' + index + '].productTaxDiv" value="' + o.taxDiv + '" />' ) .append( '<input type="hidden" name="ptsBean.soldDtlList[' + index + '].productTaxDivName" value="' + o.taxDivDisplayName + '" />' ) .append( '<input type="hidden" name="ptsBean.soldDtlList[' + index + '].tradeQty" value="0" />' ) .append( '<input type="hidden" name="ptsBean.soldDtlList[' + index + '].tradeUnitPrice" value="' + o.price + '" />' ) .append( '</td>' ) .append( '<td class="alignRight">' + lineNo + '</td>' ) .append( '<td class="alignCenter"><input type="checkbox" class="ck" name="ptsBean.soldDtlList[' + index + '].ck" value="true" /></td>' ) .append( '<td>' + o.productCd + '</td>' ) .append( '<td>' + o.productDisplayName + '</td>' ) .append( '<td>' + o.taxDivDisplayName + '</td>' ) .append( '<td class="alignRight">¥ <input type="text" size="7" maxlength="' + Erp.Sold.maxlength.price_limit + '" name="ptsBean.soldDtlList[' + index + '].tradeUnitPriceStr" value="' + o.price + '" /></td>' ) .append( '<td class="alignRight"><input type="text" size="3" maxlength="' + Erp.Sold.maxlength.qty_limit + '" name="ptsBean.soldDtlList[' + index + '].tradeQtyStr" value="0" /></td>' ) .append( '<td class="alignCenter">' ) .append( '<select class="' + this_._discountDivPullDown.replace( /.|#/, '' ) + '" name="ptsBean.soldDtlList[' + index + '].discountDiv" >' ) .append( this_._discountDivOptionsHtml() ) .append( '</select>' ) .append( '</td>' ) .append( '<td class="alignRight"><input type="text" size="2" maxlength="3" name="ptsBean.soldDtlList[' + index + '].discountRateStr" />%</td>' ) .append( '<td class="alignRight">¥ <input type="text" size="2" maxlength="' + Erp.Sold.maxlength.price_limit + '" name="ptsBean.soldDtlList[' + index + '].discountPriceStr" /></td>' ) .append( '<td class="alignRight">¥ 0</td>' ) .append( '</tr>' ); // convert to jQuery Object var html = $( htmlStr.toString() ); // bind the event and to be triggered. TODO live event, binding? /* this_.changePullDown( html.find( this_._discountDivPullDown ) ).trigger( 'change' ); */ html.find( this_._discountDivPullDown ).trigger( 'change' ); // bind calculate event bindEvent( this_, html.find( 'input:text' ) ); // append to table var last = $( this_._soldDataSource ).find( 'tr:last' ).before( html ); // 商品選択行 hasClass ? last.removeAttr( 'class' ) : last.attr( 'class', evenLineClass ); last.find( 'td:eq(1)' ).text( lineNo + 1 ); }); // 商品コードが重複性チェック Product.currentSelectProductCds = []; $( this_._soldDataSource ).find( 'tr' ).find( 'td' ).find( 'input:hidden[name$="productCd"]' ).each(function( i, n ) { Product.currentSelectProductCds.push( $(n).val() ); }); }); return this_; }; /** * 計算する * * @param {Object} options * @return {Member} */ Member.fn.calculate = function( options ) { var setting = { isRefreshBgColor : false, isRefreshLineNo : false, isCalculate : true }, this_ = this; setting = $.extend( setting, options ); var // 計算データ(テーブルヘッダが除く) trs = $( this._soldDataSource ).find( 'tr' ).slice( 1 ), // 合計数量 sumQty = 0, // 割引前合計金額 exceptDiscountSumPrice = 0, // 合計割引額 sumDiscountPrice = 0, // 合計金額 sumPrice = 0, // 消費税額 sumTaxPrice = 0, // 総額(税込) sumTaxIncludedPrice = 0; for ( var i = 0; i < trs.length; i++ ) { var tr = $( trs[i] ), tds = tr.find( 'td' ); if ( setting.isRefreshLineNo ) { $( tds[1] ).text( i + 1 ); } if ( setting.isRefreshBgColor ) { ( i + 1 ) % 2 != 0 ? tr.removeAttr( 'class' ) : tr.attr( 'class', evenLineClass ); } if ( !setting.isCalculate ) { continue; } // is last element if ( i == trs.length - 1) { continue; } var // 商品チケット判断 productTicketFlg = stringTrueReg.test( $.trim( $( tds[0] ).find( '[name$="productTicketFlg"]' ).val() ) ), // 課税区分 taxDiv = $.trim( $( tds[0] ).find( '[name$="productTaxDiv"]' ).val() ), // 単価 tradeUnitPrice = getNumeric( $( tds[6] ).find( 'input:text' ).val() ), // 数量 tradeQty = getNumeric( $( tds[7] ).find( 'input:text' ).val() ), // 割引区分 discountDiv = $( tds[8] ).find( 'select' ).val(), // 割引率 discountRate = getNumeric( $( tds[9] ).find( 'input:text' ).val() ), // 割引額 discountAmt = getNumeric( $( tds[10] ).find( 'input:text' ).val() ), // 明細行合計金額 unitSumPriceExcludeDiscountPrice = 0; // 割引区分は割引率の場合 var fn = Member.fn.discountDiv[ discountDiv ].discountRate.discountAmtCalculate; if ( fn ) { discountAmt = fn( tradeQty, tradeUnitPrice, discountRate ); $( tds ).eq( -2 ).find( 'input:text' ).val( numberFormat( discountAmt, false, false ) + '' ); } // 明細行合計金額 unitSumPriceExcludeDiscountPrice = Math.floor( Math.floor( tradeUnitPrice * tradeQty ) - discountAmt ); // 合計数量 sumQty += tradeQty; // 割引前合計金額 exceptDiscountSumPrice += Math.floor( tradeUnitPrice * tradeQty ); // 合計割引額 sumDiscountPrice += discountAmt; // 総額(税込) 全ての明細の「合計金額」を加算する sumTaxIncludedPrice += unitSumPriceExcludeDiscountPrice; $( tds ).last().text( numberFormat( unitSumPriceExcludeDiscountPrice, true, false ) + '' ); } // 消費税額:総額(税込)x セッションから消費税率/(1+セッションから消費税率) sumTaxPrice = Common.Compute.taxMoneyCompute( sumTaxIncludedPrice ); // 合計金額 sumPrice = sumTaxIncludedPrice - sumTaxPrice; // 合計 var trs = $( this_._soldDataDisplay ).find( 'tr' ); tr0 = $( trs[0] ), tr1 = $( trs[1] ); tr0.find( 'td:eq(0)' ).text( numberFormat( sumQty, false, false ) + '' ); tr0.find( 'td:eq(1)' ).text( numberFormat( exceptDiscountSumPrice, true, false ) + '' ); tr0.find( 'td:eq(2)' ).text( numberFormat( sumDiscountPrice, true, false ) + '' ); tr1.find( 'td:eq(0)' ).text( numberFormat( sumPrice, true, false ) + '' ); tr1.find( 'td:eq(1)' ).text( numberFormat( sumTaxPrice, true, false ) + '' ); tr1.find( 'td:eq(2)' ).text( numberFormat( sumTaxIncludedPrice, true, false ) + '' ); return this_; }; Member.fn._init.prototype = Member.fn;// Erp.Sold.Studio.Class
Erp.createModule( 'Member', Member, Erp.Sold.Studio );})( window, window['jQuery'] );
############################################
3.erp.sold.company.js
/**
* 売上物販管理 * * @date 2011-03-14 */ (function( window, $ ) {// 必要性JSファイルチェックする
// 商品選択JSファイル if ( typeof Product == "undefined" ) { throw 'Product loading failed, Please to included Product.js file'; }// Erp.Sold
if ( typeof Erp.Sold == "undefined" ) { throw 'Erp.Sold loading failed, Please to included erp.sold.base.js file'; }// 全て選択、全て未選択ボタンなど共通処理
if ( typeof Selector == "undefined" ) { throw 'Selector loading failed, Please to included Selector.js file'; } // 消費税額 if ( typeof Common == 'undefined' ) { throw 'Common.Compute loading failed, Please to included compute.js file'; }var
// window alias w = window,// document alias, Use the correct document
document = window.document,// 売上物販 ネームスペース
_ns = "Company", // alias setTimeout setTimeout = window.setTimeout,// 物販
Company = { // データ元 dataTableId : "#dataFromTableId", // データ先 resultShowId : "#dataToTableId",// 全て選択ボタンID
selectAll : "#selectAll", // 全て未選択ボタンID unSelectAll : "#unSelectAll", // 削除ボタンID deleteAll : "#deleteAll", // 商品選択ボタン chooseBtn : ".chooseBtn",globalCount : 0
}, bindEvent = function( o ) {return Erp.Sold.bindEvent( o, function() {
setTimeout(function() { Company.calculate(); }, 80); }).number(); };/**
* 全て選択、全て未選択ボタンなど共通処理 * */ Company.init = function() { // 全て選択 $( Company.selectAll ).click( Selector.selectAll );// 全て未選択
$( Company.unSelectAll ).click( Selector.unselectAll );// 削除ボタン
$( Company.deleteAll ).click(function() {$( "input.ck:checked" ).each(function() {
$( this ).parent( 'td' ).parent( 'tr' ).remove(); });Company.countLine();
Company.calculate(); Company.refreshBgColor(); });// 入力テキストボックスイベント
bindEvent( $( 'table' + Company.dataTableId ).find( 'tr' ).slice( 2 ).find( 'input:text' ) );// tr count
Company.globalCount = $( 'table' + Company.dataTableId ).find( 'tr' ).slice( 2 ).length; return this; };/**
* 物販入力画面で商品選択 * */ Company.chooseProduct = function() {$( Company.chooseBtn ).bind('click', function() {
Product.windowOpen('sold', undefined, undefined, function( o ) {var
index = Company.globalCount++, payDivQtyHtml = new Erp.$sb(), html = new Erp.$sb(); payDivQtyHtml .append( '<td class="alignRight"><input type="text" maxlength="' + Erp.Sold.maxlength.qty_limit + '" size="3" value="0" name="soldHdrBean.soldDtlList[' + index + '].cashQty" /></td>' ) .append( '<td class="alignRight"><input type="text" maxlength="' + Erp.Sold.maxlength.qty_limit + '" size="3" value="0" name="soldHdrBean.soldDtlList[' + index + '].creditQty" /></td>' ) .append( '<td class="alignRight"><input type="text" maxlength="' + Erp.Sold.maxlength.qty_limit + '" size="3" value="0" name="soldHdrBean.soldDtlList[' + index + '].bankQty" /></td>' );html
.append( '<tr>' ) .append( '<td style="display: none;">' ) .append( '<input type="hidden" name="soldHdrBean.soldDtlList[' + index + '].productCd" value="' + o.productCd + '" />' ) .append( '<input type="hidden" name="soldHdrBean.soldDtlList[' + index + '].productDisplayName" value="' + o.productDisplayName + '" />' ) .append( '<input type="hidden" name="soldHdrBean.soldDtlList[' + index + '].productTaxDivName" value="' + o.taxDivDisplayName + '" />' ) .append( '<input type="hidden" name="soldHdrBean.soldDtlList[' + index + '].productTaxDiv" value="' + o.taxDiv + '" />' ) .append( '<input type="hidden" name="soldHdrBean.soldDtlList[' + index + '].transferDtlQty" value="" />' ) .append( '</td>' ) .append( '<td class="alignRight lineNo"></td>' ) .append( '<td class="alignCenter"><input name="soldHdrBean.soldDtlList[' + index + '].ck" class="ck" type="checkbox" value="true" /></td>' ) .append( '<td class="productCd">' + o.productCd + '</td>' ) .append( '<td class="productDisplayName">' + o.productDisplayName + '</td>' ) .append( '<td class="alignCenter taxDivName">' + o.taxDivDisplayName + '</td>' ) .append( '<td class="alignRight tradeUnitPrice">¥ <input type="text" maxlength="' + Erp.Sold.maxlength.price_limit + '" size="6" name="soldHdrBean.soldDtlList[' + index + '].tradeUnitPriceStr" value="' + o.price + '"/></td>' ) .append( payDivQtyHtml.toString() ). append( '<td class="alignRight">¥0</td>' ) .append( '</tr>' );bindEvent( $( 'table' + Company.dataTableId ).find( 'tr:last' ).before( html.toString() ).prev().find( 'input:text' ) );
Company.refreshBgColor(); Company.countLine(); }); // 商品コードが重複性チェック Product.currentSelectProductCds = []; $( 'table' + Company.dataTableId ).find( 'tr' ).find( 'td' ).find( 'input:hidden[name$="productCd"]' ).each(function( i, n ) { Product.currentSelectProductCds.push( $(n).val() ); }); }); };/**
* 背景色をリフレッシュする(パラメタ指定しない場合、全て背景色をリフレッシュする) * * @param {Object} n tr * @param {Number} i * */ Company.refreshBgColor = function( n, i ) {function toggleClass_( i, n ) {
var evenClass_ = 'evenLine';( i + 1 ) % 2 != 0 ? $( n ).removeAttr( 'class' ) : $( n ).removeAttr( 'class' ).attr( 'class', evenClass_ );
}arguments.length == 0 ? $( 'table' + Company.dataTableId ).find( 'tr' ).slice( 2 ).each( toggleClass_ ) : toggleClass_( i, n );
};/**
* 行番号計算 * * @param {Object} n tr * @param {Number} i */ Company.countLine = function( n, i ) {function count_( i, n ) {
$( n ).text( i + 1 ); }arguments.length == 0 ? $( "td.lineNo" ).each( count_ ) : count_( i, $( n ).find( 'td.lineNo' ) );
};/**
* 金額計算する * * @param {Boolean} isRefresh trueの場合、背景色と行番号を再び計算する */ Company.calculate = function( isRefresh ) {// Dom対象にJSONを変換する。
function dom2JSON( trs ) { var json = [], fn = Erp.Sold.getNum;$.each( trs, function( i, n ) {
if ( isRefresh ) { Company.refreshBgColor( n, i ); Company.countLine( n, i ); }var tr = $( n );
json[ i ] = { soldDtlNo : $.trim( tr.find( 'td.lineNo' ).eq( 0 ).html() ), // 売上DTL行番号 productCd : $.trim( tr.find( 'td.productCd' ).eq( 0 ).html() ), // 商品cd productDisplayName : $.trim( tr.find( 'td.productDisplayName' ).eq( 0 ).html() ), // 商品名 taxDivName : $.trim( tr.find( 'td.taxDivName' ).eq( 0 ).html() ), // 課税区分名 tradeUnitPrice : fn( tr.find( 'td.tradeUnitPrice' ).find( 'input:text' ).eq( 0 ).val(), false ), // 単価 payDivQtyList : { cash : fn( tr.find( 'input:text[name$="cashQty"]' ).eq( 0 ).val() ), // 現金数量 credit : fn( tr.find( 'input:text[name$="creditQty"]' ).eq( 0 ).val() ), // クレジット数量 bank : fn( tr.find( 'input:text[name$="bankQty"]' ).eq( 0 ).val() )// 銀行振込数量 }, productSum : 0 // 毎件商品総金額 }; });return json;
}function calculate( dtlList, dataFromTrs, dataTo ) {
// セッションに設定されている消費税率 var taxRate = Erp.Sold.getNum( $( '#currentTaxRate' ).val(), true );result = {
cashSum : 0, // 現金総額 creditSum : 0, // クレジット総額 bankSum : 0, // 銀行振込総額 qtySum : 0, // 数量総数 moneySum : 0, // 総額(税込) taxSumPrice : 0, // 消費税額 taxIncludedSumPrice : 0 // 合計金額 };for ( var i = 0; i < dtlList.length; i++ ) {
var dtl = dtlList[ i ];// 現金金額
result.cashSum += dtl.payDivQtyList.cash * dtl.tradeUnitPrice;// クレジット金額
result.creditSum += dtl.payDivQtyList.credit * dtl.tradeUnitPrice;// 銀行金額
result.bankSum += dtl.payDivQtyList.bank * dtl.tradeUnitPrice;// 単一物品数量総数
var productCount = 0; for ( var j in dtl.payDivQtyList ) { // 総数 result.qtySum += dtl.payDivQtyList[ j ]; productCount += dtl.payDivQtyList[ j ]; }// 単一物品合計金額
dtl.productSum = productCount * dtl.tradeUnitPrice; }// 総額(税込)
result.moneySum = result.cashSum + result.creditSum + result.bankSum; // 消費税額 result.taxSumPrice = Common.Compute.taxMoneyCompute(result.moneySum); // 合計金額 result.taxIncludedSumPrice = result.moneySum - result.taxSumPrice;// 結果表示
fillResult( result, dtlList, dataFromTrs, dataTo ); }function fillResult( result, dtl, dataFromTrs, dataTo ) {
// 明細行表示される
$( dataFromTrs ).each(function( i, n ) { var txt = Erp.Sold.numberFormat( dtl[ i ].productSum, true, true );if ( !$( n ).find( 'input.chooseBtn' )[ 0 ] ) {
$( n ).find( 'td:last' ).text( txt + '' ); } });// 摘要行表示される
for ( var r in result ) { var txt = r != 'qtySum' ? Erp.Sold.numberFormat( result[ r ], true, true) : Erp.Sold.numberFormat( result[ r ], false, false); dataTo.find( 'td.' + r ).text( txt + '' ); } }if ( $( 'table' + Company.dataTableId ).find( 'tr' ).find( Company.chooseBtn ).length > 0 ) { // 計算される行を取得する(テーブルヘッダーが除く)。 var dataFromTrs = $( 'table' + Company.dataTableId ).find( 'tr' ).slice( 2, -1 ); } else { // 計算される行を取得する(テーブルヘッダーが除く)。 var dataFromTrs = $( 'table' + Company.dataTableId ).find( 'tr' ).slice( 2 ); } var // convert to JSON soldDtlJSON = dom2JSON( dataFromTrs ),
// 計算結果
resultJSON = calculate( soldDtlJSON, dataFromTrs, $( Company.resultShowId ) );// console.log(resultJSON);
};// Exposed to the global object, window.Erp.Sold
Erp[ "createModule" ]( _ns, Company, Erp.Sold ); })( window, window[ "jQuery" ] );###############################
4.stock_transfer.js
(function($){
var StockTransfer = { Params : { prifix : "", index : 0 }, /** * 移動一覧 */ Search : { selectProduct : function(prefix) { StockTransfer.Params.prifix = prefix; Product.windowOpen( 'other', '', '', function(jsonObj) { $("#"+StockTransfer.Params.prifix +"ProductCd").val(jsonObj.productCd) ; $("#"+StockTransfer.Params.prifix +"ProductDisplayName").val(jsonObj.productDisplayName); } ); }, detail : function(transferNo,formId,url) { $('#'+formId).find('#transferNo').val(transferNo); $('#'+formId).attr('action',url); $('#'+formId).submit(); } }, /** * 移動出庫 */ Out : { init : function() { $("#transferDivPulldown").trigger("change"); StockTransfer.Common.init(); }, transferDivChanged : function(dom) { var val = parseInt($(dom).val()); if(val == 0){ //移動区分が「社内間移動」の場合 //all option append var optionHtml = $("#facilityHidden").html(); $('#facilityPulldown').empty().append(optionHtml); //移動先(有効) $('#clientPulldown').removeAttr('disabled'); }else if (val == 1 || val == 2){ //移動区分が「持ち出し」or「その他」の場合 //移動元(有効):本社 or 自スタジオ only one option var firstOption = $("#facilityHidden option:first"); $('#facilityPulldown').empty().append($('<option />').text(firstOption.text()).attr("value",firstOption.val())); //移動先(無効):ブランク $('#clientPulldown option:first').prop('selected',true); $('#clientPulldown').attr('disabled','true'); } }, selectProduct : function() { Product.windowOpen('move', $('#facilityPulldown').val().split("_")[0], '', this.callBack); StockTransfer.Common.setExistentProductCds(); }, callBack : function(jsonObj) { var $tr = $("#productTemplate tr").clone(true); // set value of visible params $tr.find("span.productCd").text(jsonObj.productCd); $tr.find("span.productDisplayName").text(jsonObj.productDisplayName); $tr.find("span.taxDiv").text(jsonObj.taxDivDisplayName); $tr.find("span.unitPrice").text(jsonObj.price); $tr.find("span.activeQty").text(jsonObj.activeStockQty); $tr.find("span.surplusQty").text(jsonObj.activeStockQty-1); $tr.find("span.sumPrice").text(NumberFormat.addCommas(jsonObj.price)); $tr.find("input.transferQty").val(1); // set name of hidden params $tr.find(".ck").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].checkFlg"); $tr.find("input.productCd").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].productCd"); $tr.find("input.productDisplayName").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].productDisplayName"); $tr.find("input.taxDiv").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].taxDiv"); $tr.find("input.unitPrice").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].amt"); $tr.find("input.activeQty").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].activeQty"); $tr.find("input.transferQty").next().attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].qtyStr"); StockTransfer.Params.index++; // set value of hidden params $tr.find("input.productCd").val(jsonObj.productCd); $tr.find("input.productDisplayName").val(jsonObj.productDisplayName); $tr.find("input.taxDiv").val(jsonObj.taxDiv); $tr.find("input.unitPrice").val(jsonObj.price); $tr.find("input.activeQty").val(jsonObj.activeStockQty); $tr.find("input.transferQty").next().val(1); $tr.find("input.sumPrice").val(jsonObj.price); $tr.find("input.transferQty").eq(0).bind("focusout",function(){StockTransfer.Out.subtotal(this);}); $("#productTable tr:last").before($tr); StockTransfer.Common.resetLineNo(); StockTransfer.Common.resetLineCss(); //合計計算 StockTransfer.Common.total(); }, subtotal : function(dom) { var $currLine = $(dom).parents("tr") , transferQty = Number($(dom).val()) || 0 , unitPrice = Number($currLine.find('input.unitPrice').eq(0).val()), activeQty = Number($currLine.find('input.activeQty').eq(0).val()); transferQty = transferQty < 0 ? 0 : transferQty; var sumPrice = unitPrice*transferQty; //合計金額 $currLine.find('span.sumPrice').text(NumberFormat.addCommas(sumPrice)); $currLine.find('input.sumPrice').val(sumPrice); //移動後在庫数量 $currLine.find('span.surplusQty').text(activeQty - transferQty); //移動数量 //移動数量Hidden $(dom).val() == "" ? $(dom).next().val("") : $(dom).next().val(transferQty); //合計計算 StockTransfer.Common.total(); } }, In : { transferDivChanged : function(dom) { //revert to initial value each time $('span.transferNo').text(""); $('input.transferNo').val(""); $('#facilityPulldown').removeAttr('disabled'); $('#clientPulldown').removeAttr('disabled'); $('#facilityPulldown option:first').prop("selected",'true'); $('#clientPulldown option:first').prop("selected",'true'); $('#barcode').removeAttr('disabled').val(""); $('#ok').removeAttr('disabled'); $('#selectAll').removeAttr('disabled'); //「全て選択」ボタン $('#unselectAll').removeAttr('disabled'); //「全て未選択」ボタン $('#deleteBtn').removeAttr('disabled'); //「削除」ボタン $('#selectProduct').removeAttr('disabled'); //「商品選択」ボタン Selector.selectAll(); StockTransfer.Common.deleteSelected(); $("#transferDiv").val($(dom).val()); var value = parseInt($(dom).val()); if(value == 0 ){ //移動区分が「社内間移動」の場合 //下記表示項目を非活性に設定する $('#facilityPulldown').attr('disabled','true'); //「移動元」項目 $('#clientPulldown').attr('disabled','true'); //「移動先」項目 $('#selectAll').attr('disabled','true'); //「全て選択」ボタン $('#unselectAll').attr('disabled','true'); //「全て未選択」ボタン $('#deleteBtn').attr('disabled','true'); //「削除」ボタン $('.ck').each(function(){ //「削除選択」チェックボックス $(this).attr('disabled','true'); }); $('input.transferQty').each(function(){ //「数量」項目 $(this).attr('disabled','true'); }); $('#selectProduct').attr('disabled','true');//「商品選択」ボタン //下記表示項目を有効に設定する $('#barcode').removeAttr('disabled'); //「移動伝票バーコード」項目 $('#ok').removeAttr('disabled'); //「OK」ボタン alert("移動伝票バーコードを入力してください。"); }else if (value == 1) { //移動区分が「その他」の場合 //下記表示項目を非活性に設定する $('#facilityPulldown').attr('disabled','true'); //「移動元」項目 $('#barcode').attr('disabled','true'); //「移動伝票バーコード」項目 $('#ok').attr('disabled','true'); //「OK」ボタン //下記表示項目を有効に設定する $('#clientPulldown').removeAttr('disabled'); //「移動先」項目 $('#selectAll').removeAttr('disabled'); //「全て選択」ボタン $('#unselectAll').removeAttr('disabled'); //「全て未選択」ボタン $('#deleteBtn').removeAttr('disabled'); //「削除」ボタン $('.ck').each(function(){ //「削除選択」チェックボックス $(this).removeAttr('disabled'); }); $('input.transferQty').each(function(){ //「数量」項目 $(this).removeAttr('disabled'); }); $('#selectProduct').removeAttr('disabled'); //「商品選択」ボタン }else if (value == 2){ //移動区分が「持ち出し」の場合 //下記表示項目を非活性に設定する $('#facilityPulldown').attr('disabled','true'); //「移動元」項目 $('#clientPulldown').attr('disabled','true'); //「移動先」項目 $('#selectAll').attr('disabled','true'); //「全て選択」ボタン $('#unselectAll').attr('disabled','true'); //「全て未選択」ボタン $('#deleteBtn').attr('disabled','true'); //「削除」ボタン $('.ck').each(function(){ //「削除選択」チェックボックス $(this).attr('disabled','true'); }); $('#selectProduct').attr('disabled','true');//「商品選択」ボタン //下記表示項目を有効に設定する $('#barcode').removeAttr('disabled'); //「移動伝票バーコード」項目 $('#ok').removeAttr('disabled'); //「OK」ボタン $('input.transferQty').each(function(){ //「数量」項目 $(this).removeAttr('disabled'); }); alert("移動伝票バーコードを入力してください。"); } }, selectProduct : function() { Product.windowOpen('move', $("#clientPulldown").val().split("_")[0], '', this.callBack); StockTransfer.Common.setExistentProductCds(); }, callBack : function(jsonObj) { var $tr = $("#productTemplate tr").clone(true); // set value of visible params $tr.find("span.productCd").text(jsonObj.productCd); $tr.find("span.productDisplayName").text(jsonObj.productDisplayName); $tr.find("span.taxDiv").text(jsonObj.taxDivDisplayName); $tr.find("span.unitPrice").text(jsonObj.price); $tr.find("span.sumPrice").text(NumberFormat.addCommas(jsonObj.price)); $tr.find("input.transferQty").val(1); // set name of hidden params $tr.find(".ck").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].checkFlg"); $tr.find("input.productCd").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].productCd"); $tr.find("input.productDisplayName").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].productDisplayName"); $tr.find("input.taxDiv").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].taxDiv"); $tr.find("input.unitPrice").attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].amt"); $tr.find("input.transferQty").next().attr('name',StockTransfer.Params.prifix+"["+StockTransfer.Params.index+"].qtyStr"); StockTransfer.Params.index++; // set value of hidden params $tr.find("input.productCd").val(jsonObj.productCd); $tr.find("input.productDisplayName").val(jsonObj.productDisplayName); $tr.find("input.taxDiv").val(jsonObj.taxDiv); $tr.find("input.unitPrice").val(jsonObj.price); $tr.find("input.transferQty").next().val(1); $tr.find("input.sumPrice").val(jsonObj.price); $tr.find("input.transferQty").eq(0).bind("focusout",function(){StockTransfer.In.subtotal(this);}); $("#productTable tr:last").before($tr); StockTransfer.Common.resetLineNo(); StockTransfer.Common.resetLineCss(); //合計計算 StockTransfer.Common.total(); }, subtotal : function(dom) { var $currLine = $(dom).parents("tr") , transferQty = Number($(dom).val()) || 0 , unitPrice = Number($currLine.find('input.unitPrice').eq(0).val()), activeQty = Number($currLine.find('input.activeQty').eq(0).val()); transferQty = transferQty < 0 ? 0 : transferQty; var sumPrice = unitPrice*transferQty; //合計金額 $currLine.find('span.sumPrice').text(NumberFormat.addCommas(sumPrice)); $currLine.find('input.sumPrice').val(sumPrice); //移動数量Hidden $(dom).val() == "" ? $(dom).next().val("") : $(dom).next().val(transferQty); //合計計算 StockTransfer.Common.total(); } }, Common : { resetLineNo : function() { $("#productTable tr").each(function(i){ $(this).find("span.lineNo").text(i); }); }, resetLineCss : function(){ $("#productTable tr:odd").removeClass("evenLine"); $("#productTable tr:even").addClass("evenLine"); }, init : function() { this.resetLineNo(); this.resetLineCss(); $("input.transferQty").number(); StockTransfer.Params.prifix = "transferHdr.transferDtlList"; if($("#productTable tr").size()>2){ StockTransfer.Params.index = $("#productTable tr").size() - 2; } }, setExistentProductCds : function() { var productCds = new Array(); $("#productTable span.productCd").each(function(i){ productCds[i] = $(this).text(); }); Product.currentSelectProductCds = productCds; }, deleteSelected : function() { Selector.delSelected(); this.resetLineNo(); this.resetLineCss(); //合計計算 this.total(); }, total : function() {var totalQty = 0,totalAmt = 0,totalTax = 0,amtWithOutTax = 0;
$("#productTable").find("input.transferQty").each(function(){ totalQty += Number($(this).val()); }); $("#productTable").find("input.sumPrice").each(function(){ totalAmt +=Number($(this).val()); }); totalTax = Common.Compute.taxMoneyCompute(totalAmt); amtWithOutTax = Common.Compute.totalMoneyCompute(totalAmt,totalTax); //移動数量 $("span.qty").text(totalQty); //総額(税込) $("span.sumAmt").text(NumberFormat.addCommas(totalAmt)); //合計金額 $("span.amt").text(NumberFormat.addCommas(amtWithOutTax)); //消費税額 $("span.taxAmt").text(NumberFormat.addCommas(totalTax));}
} }; window.StockTransfer = StockTransfer; })(jQuery);######################
ticket.js
/**
* チケット管理 * * @date 2010-04-20 * @author */ var TicketControl = { //仕入払出区分 mode : { INPUT : { name : "仕入", value : 1 }, OUTPUT : { name : "払出", value : 2 } }, //期限月日区分 discountDiv : { DiscountNo : { name : "月", value : 0 }, Discount : { name : "日", value : 1 } }, // 期限月日区分場合によって 期限月日変化 dateChange : function(){ var temp = $('#startDay').val(); if(TicketControl.mode.INPUT.value == $('#modeType').val()){ $('input.inDay').val(temp); }else if(TicketControl.mode.OUTPUT.value == $('#modeType').val()){ $('input.outDay').val(temp); } }, // 期限月日区分 radioChange : function(value) { if (TicketControl.discountDiv.DiscountNo.value == value) { $('#month').show(); $('#day').val(''); $('#day').hide();} else if (TicketControl.discountDiv.Discount.value == value) {
$('#month').val(''); $('#month').hide(); $('#day').show(); }},
// 仕入払出区分によって、画面項目動態処理 changeMode : function(mode) { if (mode == TicketControl.mode.INPUT.value) { $('#inputDay').show(); $('#outDay').hide(); $('#from_list').val(''); $('#to_list').val(''); $('#FromL').hide(); $('#TOL').hide(); $("#from_list").attr("disabled", "disabled"); $("#to_list").attr("disabled", "disabled");} else if (mode == TicketControl.mode.OUTPUT.value) {
$('#outDay').show(); $('#inputDay').hide(); $('#FromL').show(); $('#TOL').show(); $("#from_list").removeAttr("disabled", ""); $("#to_list").removeAttr("disabled", ""); }},
// 仕入後枚数= 在庫枚数 + 仕入枚数 add : function(element) { var reNum = /^[0-9]+$/; var _parentTr = $(element).parent('td').parent('tr'); amt = _parentTr.find('.amt').val(); inAmt = _parentTr.find('.inAmt').val(); if (undefined == inAmt || '' == inAmt || !reNum.test(inAmt)) { inAmt = 0; } outAmt = parseInt(amt, 10) + parseInt(inAmt, 10); _parentTr.find('input.outAmt').val(outAmt); _parentTr.find('span.outAmt').html(outAmt);},
// チケット管理:チケット分配入力の分配後枚数変化 minus : function(element) { var reNum = /^[0-9]+$/; var _parentTr = $(element).parent('td').parent('tr'); var amt = _parentTr.find('input.amt1').val(); var inAmt = _parentTr.find('input.inAmt1').val(); if (undefined == inAmt || '' == inAmt || !reNum.test(inAmt)) { inAmt = 0; } // 分配元:分配後枚数 = 在庫枚数-分配枚数 var outAmt = parseInt(amt, 10) - parseInt(inAmt, 10); _parentTr.find('input.outAmt1').val(outAmt); _parentTr.find('span.outAmt1').text(outAmt);var amt2 = _parentTr.find('input.amt2').val();
if (undefined == amt2 || '' == amt2 || !reNum.test(amt2)) { amt2 = 0; } // 分配先:分配後枚数 = 在庫枚数+分配枚数 var outAmt1 = parseInt(amt2, 10) + parseInt(inAmt, 10); _parentTr.find('input.amt3').val(outAmt1); _parentTr.find('span.amt3').text(outAmt1); }, clear : function(formId) {$('#' + formId).find('input[type="text"]').val('');
$('#' + formId).find('input[type="checkbox"]').attr('checked', '');
$('#' + formId).find('select').attr('value', '');
},
checkInput : function(callbackFunction) {var passThrough = true;
var reNum = /^[0-9]+$/; var modeType = $('.modeType').val(); if (passThrough) { callbackFunction(); }},
submit : function() { commonForm.Submit('ticketGroupInput', $('#toAddConfirmUrl').val()); commonForm.Submit('ticketGroupInput', $('#toEditConfirmUrl').val()); }, // 券種マスタ:追加:小カテゴリによって、期限月日区分の変化 doNotDisable : function() { var ticketName = $("#smallFixture").find("option:selected").text(); if (ticketName != "チケット") { $(".dayMonth").each(function() { $(this).attr("checked", "checked"); var temp = $(this)[0]; temp.checked = false; temp = null; }); $(".monthDay").val(''); $(".dayMonth").attr("disabled", true); $(".monthDay").attr("disabled", true); } else { $(".dayMonth").removeAttr("disabled", ""); $(".monthDay").removeAttr("disabled", ""); } }};
/** * 6.画面要素名:会員選択 */ var MemberSearch = { f1 : function(){ Member.Search.windowOpen(this.f2); }, f2 : function(jsonVal){ $("#mid").text(jsonVal.id); $("#memberIdT").val(jsonVal.id); $("#mName").text(jsonVal.fullNameKanji); } };var CancelButton = {
submit : function(formid , url){ var useDate = $("#userDate").val(); var useDateTemp = useDate.replace(new RegExp("/","g"),""); var d = new Date(); var year = d.getFullYear(); var month = d.getMonth()+1+""; if (month.length < 2){ month = "0" + month; } var date = d.getDate(); if (date.length < 2){ date = "0" + date; } var sysTime = year + '' +month + '' + date; if(useDateTemp < sysTime){ var answer = confirm("表示されているチケットは期限切となりますが、よろしいですか?"); if (answer){ commonForm.Submit(formid,url); } } else { commonForm.Submit(formid,url); } } };$(function() {
/* 券種マスタ:追加 check */ $('#largeFixtureName').val($('#largeFixture option:selected').text()); $('#midiumFixtureName').val($('#midiumFixture option:selected').text()); $('#smallFixtureName').val($('#smallFixture option:selected').text()); $('#times,#ticketPrice,#localTicketPrice,#addSoldAmt,#saleDiv,#sort').number(); $('#facilityFromName').val($('#from_list option:selected').text()); $('#facilityToName').val($('#to_list option:selected').text()); $('#inputAmt').each(function() { $(this).find('.inAmt').number(); }); $('#inputAmt1').each(function() { $(this).find('.inAmt1').number(); });});
转载地址:http://ljebi.baihongyu.com/