File: /www/exchange0old/cmws/scripts/TK79659-reallocate-trade.php
<?php
// custom script for reallocating ETR trade and re-syncing it with Credebt Machine
// list of specific TTE transactions to update (in array format)
$idListToSync = array(
'230417181264' => array(
'role' => "Debtor",
'old-credebtor' => '20200206006682',
'new-credebtor' => '20191009006452'
)
);
if (PHP_SAPI !== "cli") {
echo "The script should be run only from CLI.";
exit;
}
$memoryLimit = '1024M';
if (ini_set('memory_limit', $memoryLimit) === false) {
echo "Unable to set the required memory limit: " . $memoryLimit . ".\n";
exit;
}
if (is_null($argv)) {
echo "Please enable \$argv variable in PHP configuration.";
exit;
}
// required includes
require_once("../../exchange/Bin/constants.php");
require_once("../../exchange/Bin/init.php");
require_once(ROOT_FOLDER . "Bin/Security.php");
require_once(ROOT_FOLDER . "admin/classes/Model/base_actions.php");
require_once(ROOT_FOLDER . "admin/classes/Model/CMSync.php");
$cmSync = new CMSync(MYSQL_ENGINE_IMPROVED);
if (!$cmSync->cmSyncTransactionEnable) {
echo "Transaction Sync is disabled. Please first enable Transaction Sync in Exchange 2.0 Site Settings.\n";
exit;
}
echo $cmSync->showMemoryUsage();
if ($cmSync->initLogFile(CM_SYNC_TRANSACTION) === false) {
echo "Log File write error: Unable to create log file. Please check folder permissions.\n";
exit;
}
// script is used for specific transaction(s)
foreach ($idListToSync as $idVal => $idData) {
echo "\nChecking if transaction: ". $idVal . " exists...\n";
$basicTransactionData = $cmSync->getBasicTransactionData($idVal);
$transactionSyncList = array();
if (count($basicTransactionData) > 0) {
$transactionSyncList = $cmSync->getTransactionListForSync($basicTransactionData[0]['dataEntity'],
$basicTransactionData[0]['transactionType'], null, null, $idVal);
}
$countList = count($transactionSyncList);
$counter = 0;
echo "Record(s) to sync: " . $countList . "\n";
echo $cmSync->showMemoryUsage();
foreach ($transactionSyncList as $transactionEntry) {
$transTitle = $cmSync->getBasicTransactionTitle($basicTransactionData[0]['dataEntity'],
$basicTransactionData[0]['transactionType']);
echo "\nRe-syncing " . $transTitle .
" (type: " . $basicTransactionData[0]['transactionType'] . ") " . "transaction " . ++$counter .
" out of ". $countList . "; Ref. ID: " . $transactionEntry['exchange_ref_id'] . " \t";
$cmSync->clearSyncState();
$oldCredebtor = $cmSync->getOrganisationListForSync($idData['role'], $idData['old-credebtor']);
$newCredebtor = $cmSync->getOrganisationListForSync($idData['role'], $idData['new-credebtor']);
$db = Bin_Db::connect();
$db->query("SET autocommit = OFF");
$db->query("START TRANSACTION");
$cmSync->doDeleteTransaction($transactionEntry['exchange_ref_id']);
reallocateTrade($transactionEntry['ex20_id'], $newCredebtor[0]['ex20_id']);
$newTransactionSyncList = $cmSync->getTransactionListForSync($basicTransactionData[0]['dataEntity'],
$basicTransactionData[0]['transactionType'], null, null, $idVal);
$retVal = $cmSync->syncTransactionRecord($basicTransactionData[0]['dataEntity'],
$basicTransactionData[0]['transactionType'],
$newTransactionSyncList[0]);
if ($retVal === true) {
$db->query("COMMIT");
$db->query("SET autocommit = ON");
} else {
$db->query("ROLLBACK");
$db->query("SET autocommit = ON");
}
echo $retVal === true ? "Success\n" : "Error\n";
echo "\n" . $cmSync->showMemoryUsage();
unset($newTransactionSyncList);
}
unset($basicTransactionData, $transactionSyncList);
}
function reallocateTrade($invoiceID, $newCredebtorId) {
$db = Bin_Db::connect();
$sql = "UPDATE invoice_master SET
debtor_id = " . $newCredebtorId . "
WHERE invoice_id = " . $invoiceID;
$db->query($sql);
return true;
}