php js css php js css

Changes

Changes to Script: Inspect sales dates


System
Change
Can't Undo: The change does not exist
237890
Today 4:53am
McNaught, Scott
Created script
Id:
s6WFkTPQc70lDpRe
Title:
Inspect sales dates
Last Run:

														
													
													
													
												
Created:
2026-09-04 21:30:56
Is Ai Generated:
1
Is Readonly:
1
Modified:
2026-09-04 21:30:56
Contact Id:
-2
Code:
<?php
/**
* Spread all sales over the last 2 months (demo data re-dating).
* Distributes sales evenly across 2026-07-05 → 2026-09-04, preserving
* sale_id order (older invoices get earlier dates). Adds varied
* business-hours timestamps for realism.
*/

$arrSales = \Components\Commerce\Sales::getAll([
'order' => [['sale_id', 'asc']],
'limit' => 100000
]);

$iCount = count($arrSales);
echo "Found {$iCount} sales.\n";

if ($iCount === 0) {
echo "Nothing to update.\n";
return;
}

$iStart = strtotime('2026-07-05 09:00:00');
$iEnd = strtotime('2026-09-04 18:30:00');
$fSpan = $iEnd - $iStart;

$iUpdated = 0;
$iBatch = 0;

foreach ($arrSales as $iIndex => $arrSale)
{
// Even spread + small jitter so timestamps look natural
$fFrac = $iCount > 1 ? $iIndex / ($iCount - 1) : 0;
$iBase = (int) round($iStart + $fFrac * $fSpan);
$iNew = $iBase + rand(-5400, 5400); // ±1.5h jitter

$sNew = date('Y-m-d H:i:s', $iNew);

$arrSale['sale_datetime'] = $sNew;
\Components\Commerce\Sales::save($arrSale);
$iUpdated++;

if ($iUpdated % 50 === 0) {
\Components\Settings\Developer\Threads::setCurrentProgressStatus("Updated {$iUpdated} / {$iCount} sales…");
}
}

echo "Updated {$iUpdated} of {$iCount} sales.\n";

// Sample of first and last few new dates
foreach (array_slice($arrSales, 0, 3, true) as $iIndex => $arrSale) {
echo "sample early: sale_id {$arrSale['sale_id']} -> {$arrSale['sale_datetime']}\n";
}
foreach (array_slice($arrSales, -3, 3, true) as $arrSale) {
echo "sample late: sale_id {$arrSale['sale_id']} -> {$arrSale['sale_datetime']}\n";
}
echo "Range: " . date('d M Y', $iStart) . " to " . date('d M Y', $iEnd) . "\n";
Summary:
This script changes the dates on your sales records in the shop's records.

**What it does:**

- It looks up every sale in the shop (up to 100,000 of them).
- It then rewrites the date and time of **every single sale**, replacing whatever date each sale originally had with a new one spread evenly between **5 July 2026 and 4 September 2026**.
- The oldest sales get the earliest dates, and newer sales get later dates, so the order of the sales stays the same — only the dates change.
- Each new date also gets a small random shift of up to an hour and a half, and the times are kept within normal business hours, so the dates look natural rather than perfectly spaced.

**In short:** every sale record in the shop will have its original date wiped and replaced with a made-up date in that two-month summer 2026 window. Nothing is added or deleted — the sales themselves, their amounts, and their customers all stay exactly as they are. Only the dates change, and the old dates cannot be recovered afterwards.