いつもお世話になっております。色々調べたり模索してみましたがどうにも動きません。
javascript初心者のため、基本的なところが誤っているのかもしれません。
ご教授いただけますと大変ありがたいです。
【参考URL】
見積書を作成するアプリを作っています。
初期費用と月額費用のサブテーブルが独立して存在しているため、テーブル1、テーブル2と複数のサブテーブルが存在しています。
また、別のテーブル3に1、2の統計が反映されるようにしたいです。
初期・月額の片方のサブテーブルが空欄になる場合があるため、計算エラーを回避すべく、javascriptで計算をしたいと思っています。
【項目】
初期費用テーブル:Table_1
初期費用 単価:price_1
初期費用 数量:num_1
初期費用 小計(フィールド名:初期費用):sales_1
月額費用テーブル:Table_2
月額費用 単価:price_2
月額費用 数量:num_2
月額費用 小計(フィールド名:月額費用):sales_2
合計金額テーブル:Table_3
初期費用 統計(フィールド名:初期費用小計):total_1
月額費用 統計(フィールド名:月額費用小計):total_2
※小計の部分が紛らわしくてすみません。
=======================
(function () {
“use strict”;
// 桁区切り→数値
var number = function (numberFormatStr) {
if (typeof numberFormatStr === ‘string’) {
return parseInt(numberFormatStr.replace(/,/g, ‘’), 10);
} else {
return numberFormatStr;
}
}
// 計算する数値フィールドを編集不可にする
var events1 = [
“app.record.create.show”, “app.record.edit.show”,
“app.record.create.change.Table_1”, “app.record.edit.change.Table_1”,
“app.record.create.change.Table_2”, “app.record.edit.change.Table_2”,
];
kintone.events.on(events1, function (event) {
var table_1 = event.record.Table_1.value;
for (var i = 0, l = table_1.length; i < l; i++) {
table_1[i].value.sales_1.disabled = true;
}
event.record.total_1.disabled = true;
return event;
});
kintone.events.on(events1, function (event) {
var table_2 = event.record.Table_2.value;
for (var i = 0, l = table_2.length; i < l; i++) {
table_2[i].value.sales_2.disabled = true;
}
event.record.total_2.disabled = true;
return event;
});
// 小計、総計の計算
var events2 = [
“app.record.edit.show”, “app.record.create.show”,
“app.record.create.change.Table_1”, “app.record.edit.change.Table_1”,
“app.record.create.change.price_1”, “app.record.edit.change.price_1”,
“app.record.create.change.num_1”, “app.record.edit.change.num_1”,
“app.record.create.change.sales_1”, “app.record.edit.change.sales_1”,
“app.record.create.change.total_1”, “app.record.edit.change.total_1”,
“app.record.create.change.Table_2”, “app.record.edit.change.Table_2”,
“app.record.create.change.price_2”, “app.record.edit.change.price_2”,
“app.record.create.change.num_2”, “app.record.edit.change.num_2”,
“app.record.create.change.sales_2”, “app.record.edit.change.sales_2”,
“app.record.create.change.total_2”, “app.record.edit.change.total_2”,
];
//テーブル1を計算する
kintone.events.on(events2, function (event) {
var table_1 = record.Table_1.value;
var total_1 = 0;
for (var i = 0, l = table_1.length; i < l; i++) {
var row_1 = table_1[i].value; // テーブルの1行
// 小計を計算
if (row_1.price_1.value && row_1.num_1.value) {
var sales_1 = number(row_1.price_1.value) * number(row_1.num_1.value);
row_1.sales_1.value = sales_1.toLocaleString();
total_1 += sales_1;
} else {
// priceかnumが空の場合はnull
row_1.sales_1.value = null;
}
row_1.price_1.value = row_1.price_1.value ? number(row_1.price_1.value).toLocaleString() : ‘’;
}
record.total_1.value = total_1;
return event;
});
//テーブル2を計算する
kintone.events.on(events2, function (event) {
var table_2 = record.Table_2.value;
var total_2 = 0;
for (var i = 0, l = table_2.length; i < l; i++) {
var row_2 = table_2[i].value; // テーブルの1行
// 小計を計算
if (row_2.price_2.value && row_2.num_2.value) {
var sales_2 = number(row_2.price_2.value) * number(row_2.num_2.value);
row_2.sales_2.value = sales_2.toLocaleString();
total_2 += sales_2;
} else {
// priceかnumが空の場合はnull
row_2.sales_2.value = null;
}
row_2.price_2.value = row_2.price_2.value ? number(row_2.price_2.value).toLocaleString() : ‘’;
}
record.total_2.value = total_2;
return event;
});
})();
以上です。よろしくお願いします。