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';