I have an odd problem (again).
I’ve made a custom orders table. In the table I have some decimal fields to hold order total and subtotal.
Here’s an excerpt of the schema for those fields:
<field key="total" dbtype="decimal" precision="6,2" default="0" phptype="double" null="false"/>
<field key="subtotal" dbtype="decimal" precision="6,2" default="0" phptype="double" null="false"/>
Here’s the relevant extract from the mysql mapping class:
'total' =>
array (
'dbtype' => 'decimal',
'precision' => '6,2',
'phptype' => 'double',
'null' => false,
'default' => 0,
),
'subtotal' =>
array (
'dbtype' => 'decimal',
'precision' => '6,2',
'phptype' => 'double',
'null' => false,
'default' => 0,
),
I’ve written a migration script that pulls in the values in a legacy orders table using a pdo connection and creates new order objects for the new table. This works fine, both the total and subtotal values are entered correctly.
However, if I create an order object in a snippet or processor or indeed in the order class itself, the decimal values are getting truncated - the number after the decimal point is being stripped.
For example I do
$modNewOrder = $modx->newObject('rdOrder');
$oar = array(
'user_id' => 52327,
'vendor_id' => 72846,
'started' => '2020-03-14 22:15:57',
'completed' => '2020-03-14 22:15:57',
'total' => 588.9,
'subtotal' => 565,
'handling_charge' => 17.77,
'transaction_fee_percentage' => 0.04,
'transaction_id' => '1584224174904216',
'legacy_id' => 127695
);
$modNewOrder->fromArray($oar);
$modNewOrder->save();
All the decimal values are truncated, so 588 is saved for the total value and 17 for the handling charge.
Anyone got any ideas what’s going on here. I can’t see the difference between running the import script (which runs externally to MODX) and the snippet here - the code is the same.
In the import script I’m initiating MODX as:
define('MODX_CORE_PATH', '/home/user/dev/core/');
require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
$modx= new modX();
$modx->initialize('web');
$modx->runSnippet('migrate-orders');
I’ve seen another post mentioning an issue with locales/date formats which can produce this problem (https://forums.modx.com/thread/85069/xpdo-doesn-t-take-floats) but the actual issue in the old MODX issue tracker no longer exists so I can’t check it.