web-dev-qa-db-ja.com

commerce-order-total:amountを介してユーザーポイントを付与するときに小数を削除するにはどうすればよいですか?

チェックアウトプロセスを完了した後、アワードユーザーが欲しいです。このタスクでは、このモジュール(Commerce、UserPoints、Commerce Credits)を使用します。

15ドルの価格で商品を作成し、チェックアウトが完了した後にユーザーに報酬を与えるルールを作成します。チェックアウトが完了すると、ルールは正常に機能しますが、代わりにユーザーに1500ユーザーポイントが与えられます。15。コマースから小数を削除するモジュール(Commerce Price Decimals Formatter、Commerce Extra Price Formatters)を使用してみました。また、インターネットからいくつかのコードを使用してみましたが、すべて私の問題は解決しません。

誰かがこの問題の解決策を知っていますか?

それは私がインターネットで見つけたコードです:

<?php
/**
 * Implements hook_commerce_currency_info_alter().
 */
function Zero_commerce_currency_info_alter(&$currencies, $langcode) {
  $currencies['USD']['format_callback'] = 'Zero_rub_currency_format';
}

 /**
 * Currency format callback.
 */
function Zero_rub_currency_format($amount, $currency, $object) {
  $round_amount = commerce_currency_round(abs($amount), $currency);
  $price = number_format($round_amount, 0, $currency['decimal_separator'], $currency['thousands_separator']);

  $replacements = array(
    '@code_before' => $currency['code_placement'] == 'before' ? $currency['code'] : '',
    '@symbol_before' => $currency['symbol_placement'] == 'before' ? $currency['symbol'] : '',
    '@price' => $price,
    '@symbol_after' => $currency['symbol_placement'] == 'after' ? $currency['symbol'] : '',
    '@code_after' => $currency['code_placement'] == 'after' ? $currency['code'] : '',
    '@negative' => $amount < 0 ? '-' : '',
    '@symbol_spacer' => $currency['symbol_spacer'],
    '@code_spacer' => $currency['code_spacer'],
  );

  return trim(t('@code_before@code_spacer@negative@symbol_before@price@symbol_spacer@symbol_after@code_spacer@code_after', $replacements));
}

それは私のルールです:

{ "rules_grantpointaftercheckout" : {
"LABEL" : "GrantPointAfterCheckOut",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "userpoints_rules", "commerce_checkout" ],
"ON" : { "commerce_checkout_complete" : [] },
"DO" : [
  { "data_convert" : {
      "USING" : {
        "type" : "integer",
        "value" : [ "commerce-order:commerce-order-total:amount" ],
        "rounding_behavior" : "down"
      },
      "PROVIDE" : { "conversion_result" : { "conversion_result" : "Conversion result" } }
    }
  },
  { "userpoints_action_grant_points" : {
      "user" : [ "site:current-user" ],
      "points" : [ "conversion-result" ],
      "tid" : "0",
      "entity" : [ "site:current-cart-order" ],
      "operation" : "bla bla bla",
      "display" : "1",
      "moderate" : "approved"
    }
  }
]
}
}
1
NashGC

Drupal Commerce に関する問題をご覧ください 価格金額の値の処理方法を改訂してください "。特にコメントnr37には、次のように記載されています。

価格フィールドには、価格の金額が整数として格納されます。

したがって、1500ドルセントの金額を四捨五入すると...まだ1500ですよね?そして、それはあなたが付与しているユーザーポイントの量です。そのため、ルールは実装されたとおりに機能します。付与されるユーザーポイントの量として1500という値を使用しています。

明らかに、次に行う必要があるのは、ルールを拡張して、最初に価格を100で割ることです(丸める前に)。使用しない場合は、その方法を知っていると思います このリンク ...ボーナスヒント:「 すべてのアイテムを合計する方法」の回答に含まれているルールの例をご覧くださいルールを使用したフィールドコレクションフィールドの例? "、特に「値の計算」ルールアクション。

1
Pierre.Vriens