HEX
Server: Apache/2.2.15 (CentOS)
System: Linux ip-10-0-2-146.eu-west-1.compute.internal 2.6.32-754.35.1.el6.centos.plus.x86_64 #1 SMP Sat Nov 7 11:33:42 UTC 2020 x86_64
User: root (0)
PHP: 5.6.40
Disabled: NONE
Upload Files
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;
}