条件つきの自動計算

こんにちは。

条件つきで自動で計算ができるようにプログラムを組んでいます。

既存のデータにも適応させたいので、できれば一括で更新したいです。

自分で作成してみたのですが、動作せず。。。

どなたかご教示いただけないでしょうか。

<やりたいこと>

・『通貨単位(ラジオボタン、6種類)』に応じてレート計算し、日本円に直して『日本円(数値)』に計算結果を入れる

・既存のデータ(約1200件)にも適応させたいので、一括更新したい

 

(function() {
   “use strict”;
   kintone.events.on(“app.record.index.show”, function(event) {
       if (document.getElementById(‘my_index_button’) != null) {
           return;
       }
       var myIndexButton = document.createElement(‘button’);
       myIndexButton.id = ‘my_index_button’;
       myIndexButton.innerHTML = ‘レート計算’;
      
       var jpmoney = kintone.app.getFieldElements(‘日本円’);
       var comoney = kintone.app.getFieldElements(‘現地売価’);
       var tanni = kintone.app.getFieldElements(‘通貨単位’);
       //ボタンクリック後の処理
       myIndexButton.onclick = function() {
           var appId = kintone.app.getId();
           var param = {
               app: appId,
               query: ‘’,
               fields: [‘$id’, ‘日本円’, ‘現地売価’, ‘通貨単位’],
               totalCount: true,
               isGuest: false
           };
    kintoneUtility.rest.getAllRecordsByQuery(param).then(function(resp) {
        /////////空更新オブジェクトの生成
        var param = {
            “app”: appId,
            “records”: [],
            isGuest: false
        };
        //レコード更新
        resp.records.forEach(function(record) {
            var newRec = {};
            switch (record[‘通貨単位’][‘value’]) {
            case “円”:
              newRec[‘日本円’] = { value: Number[‘現地売価’][‘value’] * 1.0 };
              break;
            case “US$”:
              newRec[‘日本円’] = { value: Number[‘現地売価’][‘value’] * 105.0 };
              break;
            case “THB”:
              newRec[‘日本円’] = { value: Number[‘現地売価’][‘value’] * 3.0 };
              break;
            case “Rp”:
              newRec[‘日本円’] = { value: Number[‘現地売価’][‘value’] * 0.008 };
              break;
            case “RMB”:
              newRec[‘日本円’] = { value: Number[‘現地売価’][‘value’] * 15.5 };
              break;
            case “TWD”:
              newRec[‘日本円’] = { value: Number[‘現地売価’][‘value’] * 3.3 };
              break;
            default:
              newRec[‘日本円’] = { value: “” };
              break;
            param.records.push({
                “id”: record[‘$id’][‘value’],
                “record”: newRec
            });
            }
        });
        kintoneUtility.rest.putAllRecords(param).then(function(resp) {
            //success
            console.log(resp);
        }, function(error) {
            //error
            console.log(param);
            console.log(error);
        });
    });
       }
       kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
       return event;
   });
})();

ぱっと見た感じ、2点問題がありそうです。

 

・各金額の計算式のvalueの部分の構文が違っている

newRec[‘日本円’] = { value:Number(record[‘現地売価’][‘value’]) *1.0 };

 

・newRecをpushする箇所がswitchの中に入ってしまっている

 

            param.records.push({
                “id”: record[‘$id’][‘value’],
                “record”: newRec
            });

あと、細かいことを言いますと、javascriptで小数点の計算をすると誤差が発生するので、

それも考慮しておいたほうが良いかと思われます。

https://knowledge-capsule.site/javascript/javascript-float-calculate-error-bignumber-js/

PV 様

ご返答ありがとうございます。

再度構文を調べ直し、ご指摘通りpushする位置を変えて組み直しました。うまくいきそうです。

また、小数点の計算に関することも教えていただきありがとうございます。

それも踏まえプログラムを書き換えます。

プログラム経験が無く手さぐり状態で勉強しているので、大変助かりました。