瀧ヶ平さま
ご連絡ありがとうございます。
現在御社のプリントクリエイターを利用しており、業務で活用せていただいております。
今回活用方法の一つとして見積書アプリを新たに作りたいと考えています。
現状試作アプリでは、数値フィールドで初期値0で構成しているため、印刷時0だらけの見積書となっています。
アプリ内にはテーブルで構成された商品の入力欄があり、先日URLをお付けした方法で成功しております。
今回はテーブル以外での計算項目が複数あり、ご回答いただいた、通常のフィールドに置き換える方法がわかりません。
テーブルのサンプルをみて何とか自分のアプリに置き換えることくらいはできそうなのですが、
サンプル等が掲示されているページをご存知でしたらご教願いたいです。
フィールドのイメージは下記のような感じで考えています。
文字フィールド(フィールドコード:単価A) × 数値フィールド(フィールドコード:数量A) = 文字フィールド(フィールドコード:合価A)
文字フィールド(フィールドコード:単価B) × 数値フィールド(フィールドコード:数量B) = 文字フィールド(フィールドコード:合価B)
テーブルで使用しているJSは、下記のものを使用しています。
/**
* テーブル:Table
* 単価:price(文字列フィールド)
* 個数:num(数値フィールド)
* 小計:sales(文字列フィールド)
*
* 総計:total(数値フィールド)
*/
(function () {
“use strict”;
function loadJS(src) {
document.write(‘<script type=“text/javascript” src="’ + src + ‘"></script>’);
}
// jQuery の JavaScript ファイル
loadJS(“https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js”);
// 数値→桁区切り
var numberFormat = function (num) {
if (typeof num === ‘number’) {
return num.toString().replace(/^\d+[^.]/, function (t) {
return t.replace(/([\d]+?)(?=(?:\d{3})+$)/g, function (t) {
return t + ‘,’;
});
});
} else {
return num;
}
}
// 桁区切り→数値
var number = function (numberFormatStr) {
if (typeof numberFormatStr === ‘string’) {
return parseInt(numberFormatStr.replace(‘,’, ‘’), 10);
} else {
return numberFormatStr;
}
}
/**
* 計算処理
*/
var myCalculate = function (record) {
var table = record.Table.value;
var total = 0;
for (var i = 0, l = table.length; i < l; i++) {
var row = table[i].value; // テーブルの1行
// 小計を計算
var price = number(row.price.value);
var num = row.num.value;
if (price && num) {
var sales = price * num;
row.sales.value = numberFormat(sales);
total += sales;
} else {
// priceかnumが空の場合はnull
row.sales.value = null;
}
row.price.value = numberFormat(price);
}
record.total.value = total;
};
// イベント
kintone.events.on([“app.record.edit.show”, “app.record.create.show”], function (event) {
// 編集時に計算するイベント
$(document.body).on(‘change’, “input[type=‘text’]”, function () {
var record = kintone.app.record.get();
myCalculate(record.record);
kintone.app.record.set(record);
});
// 無理やりDOM操作で編集不可に
$(document).on(‘click’, ‘.add-row-image-gaia’, function () {
var ele = $(‘.value-139700’).children(); // 小計のclass
ele.addClass(‘disabled-cybozu’);
ele.children(‘input’).attr(‘disabled’, ‘disabled’);
});
// 無理やりDOM操作で行削除イベント
$(document).on(‘click’, ‘.remove-row-image-gaia’, function () {
var record = kintone.app.record.get();
myCalculate(record.record);
kintone.app.record.set(record);
});
return event;
});
// 計算する数値フィールドを編集不可にする
kintone.events.on([“app.record.edit.show”, “app.record.create.show”], function (event) {
var table = event.record.Table.value;
for (var i = 0, l = table.length; i < l; i++) {
table[i].value.sales.disabled = true;
}
event.record.total.disabled = true;
return event;
});
// 登録、編集時の処理
kintone.events.on([“app.record.edit.submit”, “app.record.create.submit”], function (event) {
myCalculate(event.record);
return event;
});
})();
以上、よろしくお願いいたします。