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/exchange/admin/cron/update_180_day_rule.php
<?php
if (php_sapi_name() != 'cli') {
    exit();
}

$folders = explode(DIRECTORY_SEPARATOR, pathinfo(__FILE__, PATHINFO_DIRNAME));
array_pop($folders);
array_pop($folders);

include(implode(DIRECTORY_SEPARATOR, $folders) . '/Bin/init.php');
require_once(ROOT_FOLDER . 'Bin/Security.php');
include(ROOT_FOLDER . '/Bin/constants.php');
chdir(ROOT_FOLDER);

Bin_Config::requireAdminModel('MDebtor', 'MInvoice');
include_once(ROOT_FOLDER . 'admin/classes/Model/transaction_actions.php');

$db = Bin_Db::connect();

function updateOverrideRule($entityId, $overrideValue, $type = 'debtor')
{
    $db = Bin_Db::connect();
    $transaction_actions = new Transaction_actions();

    if ($type === 'debtor') {
        $history = Model_MDebtor::getOverrideRuleHistory($entityId);
        $selectEntity = "SELECT debtor_id, override_180_day_rule
        FROM debtors_detail WHERE debtor_id = :entity_id LIMIT 1";
        $updateOverrideRule = "UPDATE debtors_detail SET override_180_day_rule = :value WHERE debtor_id = :entity_id";
    } else {
        $history = Model_MTrade::getOverrideRuleHistory($entityId);
        $selectEntity = "SELECT im.invoice_id, im.override_180_day_rule, im.reserve_on, im.drp_id
        FROM invoice_master im
        JOIN debtors_detail dd ON dd.debtor_id = im.debtor_id
        WHERE im.invoice_id = :entity_id AND im.root_invoice_id > 0 AND dd.type = 'debtor' LIMIT 1";
        $updateOverrideRule = "UPDATE invoice_master SET override_180_day_rule = :value WHERE invoice_id = :entity_id";
    }


    $entity = $db->query($selectEntity, array(':entity_id' => $db->escapeValue($entityId)))->getFirstRow();
    $oldValue = (bool)$entity['override_180_day_rule'];
    $newValue = (bool)$overrideValue;

    if (empty($history)) {
        // add first history record
        $historyRecord = array(
            'type' => $type,
            'entity_id' => $db->escapeValue($entityId),
            'value' => 0, // first record has value 0
            'changed_by' => 0,
            'changed_at' => new DateTime(),
        );
        $db->builder()->insert('override_180_day_rule_history')->values($historyRecord)->execute();
    }

    if ($oldValue !== $newValue) {
        // update value
        $db->query($updateOverrideRule, array(
            ':value' => $newValue ? 1 : 0,
            ':entity_id' => $db->escapeValue($entityId),
        ));
        if ($type == 'invoice') {
            $transaction_actions->setReserves(array($entityId));
        }
        // add new history record
        $historyRecord = array(
            'type' => $type,
            'entity_id' => $db->escapeValue($entityId),
            'value' => $newValue ? 1 : 0,
            'changed_by' => 0,
            'changed_at' => new DateTime(),
        );
        $db->builder()->insert('override_180_day_rule_history')->values($historyRecord)->execute();
    }
}

$originators = array(1191, 891, 753, 1422);
$additionalDebtors = array(5688, 5786, 5697, 5456, 5467, 5457, 5468, 5469, 5470, 5471, 5466, 5472);

$selectDebtors = "SELECT dd.debtor_id FROM debtors_detail dd
JOIN debtor_relation dr ON dr.debtor_id = dd.debtor_id
JOIN organisation_details od ON od.user_id = dr.trader_id
WHERE od.organisation_id IN(:originators)";
$selectInvoices = "SELECT invoice_id FROM invoice_master WHERE root_invoice_id > 0
AND reserve_on = 0 AND debtor_id = :debtor_id";
$debtorsResult = $db->query($selectDebtors, array(
    ':originators' => implode(',', $originators),
))->getResultArray();

$debtors = array();
foreach ($debtorsResult as $debtor) {
    $debtors[] = $debtor['debtor_id'];
}
$debtors = array_merge($debtors, $additionalDebtors);

foreach ($debtors as $debtor) {
    $invoices = $db->query($selectInvoices, array(':debtor_id' => $debtor))->getResultArray();
    updateOverrideRule($debtor, true);
    foreach ($invoices as $invoice) {
        updateOverrideRule($invoice['invoice_id'], true, 'invoice');
    }
}

echo 'All entries are updated';