税込→税抜、税抜→税込の自動計算

表示させたい項目:税抜、税込

 

質問:税抜、税込どちらか一方を入力した場合に、

もう一方の料金が自動計算されるようにしたいです。

 

例:「税抜」に「100」と入力→「税込」に「110」と表示される(自動計算)

「税込」に「110」と入力→「税抜」に「100」と表示される(自動計算)

 

「計算」という項目を試しましたが、

一方通行しかできず(例えば、税抜→税込の計算だけ)

「計算」項目には数値を入力できませんでした。

 

Javascriptで実装可能でしょうか。

可能な場合、方針や、参考文献、コードなどご教授いただけると幸いです。

水田さん

お世話になっております。

仰るとおり、JavaScriptカスタマイズで実装可能です。

レコード追加画面のフィールド値変更時イベントおよびレコード編集画面のフィールド値変更時イベントフィールドの値を書き換える操作を行えばよいかと思います。

下記のチュートリアルが参考になるかと思います。
https://developer.cybozu.io/hc/ja/articles/203331050

江田さん

お世話になっております。

早速のご回答ありがとうございます。

確認させていただきます。

ひとまずお礼まで。

江田さん

お世話になっております。

先ほどの件、実装を進めていますが、

2つお聞きしたいことがありましたので、ご連絡させていただきます。

①料金を整数で表示する方法

計算後の数値(料金)が小数点以下が表示されていますので、

整数で表示したく、ご回答お願いします。

 

②再入力時の不都合解消方法

税抜、税込片方に数値を入力すると、もう一方に計算後の数値が入力されます(これは問題なし)

その後、税抜について、数値を編集しようとするも、うまくいきません。

例)税抜:100を入力→税込:110と表示される

その後、

税抜:110と編集→「税抜」:100と表示され、税込:110(変化なし)

 

予測としては、コードにおいて、

if文にて、初めに税込みに関する条件式、次に税抜に関する条件式となっている(順序)ことが原因であると考えられます。

(税込に改めて数値を入力すると正しく計算されるため)

 

この場合の対処法は、どのようなものがありますでしょうか。

税抜、税込欄を空欄(クリア)にするボタンを作成するなどでしょうか。(可能でしょうか)

以上、よろしくお願いいたします。

 

 

ーーーーー

  //税込み、税抜き自動計算

  (function () {

    “use strict”;

    kintone.events.on([‘app.record.create.change.price_notax’, 

                       ‘app.record.edit.change.price_notax’,

                       ‘app.record.create.change.price_tax’, 

                       ‘app.record.edit.change.price_tax’,

                      ], function (event){

        var record = event.record; //レコード取得

        var price_notax = record[‘price_notax’].value;

        var price_tax = record[‘price_tax’].value;

        // 税抜きに入力時税込み計算(逆もしかり)

        if (price_tax >= 0) {

          price_notax = price_tax * 10 / 11;

          record[‘price_notax’].value = price_notax;

      // 税込みに入力時税抜き計算

      } else if (price_notax >= 0) {

          price_tax = price_notax * 11 / 10;

          record[‘price_tax’].value = price_tax;

      }

        return event;
ーーーーー

水田さん

変更があった項目ごとにコードを分ければいいと思います。

 

(function () {
  “use strict”;

  // 税抜きの変動時

  kintone.events.on([‘app.record.create.change.price_notax’,
                                ‘app.record.edit.change.price_notax’], function (event){
    var record = event.record; //レコード取得
    var price_notax = record[‘price_notax’].value;
    var price_tax = price_notax * 11 / 10;
    record[‘price_tax’].value = price_tax;

  }

  // 税込みの変動時

  kintone.events.on([‘app.record.create.change.price_tax’,
                                ‘app.record.edit.change.price_tax’], function (event){
    var record = event.record; //レコード取得
    var price_tax = record[‘price_tax’].value;
    var price_notax = price_notax * 10 / 11;
    record[‘price_notax’].value = price_notax;

  }

 

cudjoさん

ありがとうございます。

早速実装していますが、値を入力しても反応なしです。

おそらく、return event;が必要なのかなと思うのですが、

ご教授いただけますでしょうか。

 

以下コードです。

ーーーーーーーーーー

(function () {

  “use strict”;

  // 税抜きの変動時

  kintone.events.on([‘app.record.create.change.price_notax’,

                     ‘app.record.edit.change.price_notax’], function (event){

    var record = event.record; //レコード取得

    var price_notax = record[‘price_notax’].value;

    var price_tax = price_notax * 11 / 10;

    record[‘price_tax’].value = price_tax;    

  });

  // 税込みの変動時

  kintone.events.on([‘app.record.create.change.price_tax’,

                     ‘app.record.edit.change.price_tax’], function (event){

    var record = event.record; //レコード取得

    var price_tax = record[‘price_tax’].value;

    var price_notax = price_tax * 10 / 11; →cudjoさんのコードを修正しています。(price_tax→price_notax)

    record[‘price_notax’].value = price_notax;

  });

})();

ーーーーーーーーーー

各位

 

こちらで正常に動作しました。

残りは、計算結果の小数点第一位自動切り上げをご教授いただきたいです。

ーーーーー

(function () {

  “use strict”;

  // 税抜きの変動時

  kintone.events.on([‘app.record.create.change.price_notax’,

                     ‘app.record.edit.change.price_notax’], function (event){

    var record = event.record; //レコード取得

    var price_notax = record[‘price_notax’].value;

    var price_tax = price_notax * 11 / 10;

    record[‘price_tax’].value = price_tax;    

    return event;

  });

  // 税込みの変動時

  kintone.events.on([‘app.record.create.change.price_tax’,

                     ‘app.record.edit.change.price_tax’], function (event){

    var record = event.record; //レコード取得

    var price_tax = record[‘price_tax’].value;

    var price_notax = price_tax * 10 / 11;

    record[‘price_notax’].value = price_notax;

    return event;

  });

})();

ーーーーー

水田さん

お世話になっております。

Mathオブジェクトのメソッドで四捨五入、切り上げ、切り捨てそれぞれ用意されています。
https://lab.syncer.jp/Web/JavaScript/Snippet/16/

江田さん

お世話になっております。

四捨五入で実装できました。

ありがとうございました。

ーーーーー

(function () {

  “use strict”;

  // 税抜きの変動時

  kintone.events.on([‘app.record.create.change.price_notax’,

                     ‘app.record.edit.change.price_notax’], function (event){

    var record = event.record; //レコード取得

    var price_notax = record[‘price_notax’].value;

    var price_tax = price_notax * 11 / 10;

    record[‘price_tax’].value = Math.round(price_tax); //四捨五入

    return event;

  });

  // 税込みの変動時

  kintone.events.on([‘app.record.create.change.price_tax’,

                     ‘app.record.edit.change.price_tax’], function (event){

    var record = event.record; //レコード取得

    var price_tax = record[‘price_tax’].value;

    var price_notax = price_tax * 10 / 11;

    record[‘price_notax’].value = Math.round(price_notax); //四捨五入

    return event;

  });

})();

ーーーーー