Source of file OrdersMigrationTask.php
Size: 4,865 Bytes - Last Modified: 2021-12-23T10:24:32+00:00
/var/www/docs.ssmods.com/process/src/src/tasks/OrdersMigrationTask.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | <?php namespace SilverCommerce\OrdersAdmin\Tasks; use SilverStripe\ORM\DB; use SilverStripe\Control\Director; use SilverStripe\Dev\MigrationTask; use SilverStripe\ORM\DatabaseAdmin; use SilverStripe\Control\Controller; use SilverCommerce\GeoZones\Model\Zone; use SilverStripe\SiteConfig\SiteConfig; use SilverStripe\Subsites\Model\Subsite; use SilverCommerce\OrdersAdmin\Model\Invoice; use SilverCommerce\OrdersAdmin\Model\Estimate; use SilverCommerce\OrdersAdmin\Model\LineItem; use SilverCommerce\OrdersAdmin\Model\LineItemCustomisation; /** * Task to handle migrating orders/items to newer versions */ class OrdersMigrationTask extends MigrationTask { /** * Should this task be invoked automatically via dev/build? * * @config * * @var bool */ private static $run_during_dev_build = true; private static $segment = 'OrdersMigrationTask'; protected $description = "Upgrade Orders/Items"; /** * Run this task * * @param HTTPRequest $request The current request * * @return void */ public function run($request) { if ($request->getVar('direction') == 'down') { $this->down(); } else { $this->up(); } } /** * {@inheritdoc} */ public function up() { // Migrate estimate/invoice numbers to new ref field $this->log('- Migrating estimate/invoice numbers'); $total = 0; if (class_exists(Subsite::class)) { $items = Subsite::get_from_all_subsites(Estimate::class); } else { $items = Estimate::get(); } $count = false; if ($items) { $this->log('- '.$items->count().' items to convert.'); $count = $items->count(); } $i = 0; foreach ($items as $item) { if ($item->Number !== null) { $config = SiteConfig::current_site_config(); $inv_prefix = $config->InvoiceNumberPrefix; $est_prefix = $config->EstimateNumberPrefix; $number = $item->Number; // Strip off current prefix and convert to a ref if ($item instanceof Invoice) { $ref = str_replace($inv_prefix . "-", "", $number); $ref = str_replace('-', '', $ref); $item->Ref = (int)$ref; $item->Prefix = $inv_prefix; } else { $ref = str_replace($est_prefix . "-", "", $number); $ref = str_replace('-', '', $ref); $item->Ref = (int)$ref; $item->Prefix = $est_prefix; } $item->Number = null; $item->write(); } $i++; $this->log('- '.$i.'/'.$count.' items migrated.', true); } unset($items); // Change price/tax on line items to use new fields from extension $items = LineItem::get(); $count = $items->count(); $this->log("Migrating {$count} Line Items"); $i = 0; foreach ($items as $item) { $write = false; if ((int)$item->Price && (int)$item->BasePrice == 0) { $item->BasePrice = $item->Price; $write = true; } if ($item->TaxID != 0 && $item->TaxRateID == 0) { $item->TaxRateID = $item->TaxID; $write = true; } if ($write) { $item->write(); $i++; } } unset($items); $this->log("Migrated {$i} Line Item Customisations"); // Change price/tax on line items to use new fields from extension $items = LineItemCustomisation::get(); $count = $items->count(); $this->log("Migrating {$count} Line Items"); $i = 0; foreach ($items as $item) { $write = false; if ((int)$item->Price && (int)$item->BasePrice == 0) { $item->BasePrice = $item->Price; $write = true; } if ($write) { $item->write(); $i++; } } unset($items); $this->log("Migrated {$i} Line Items"); } /** * {@inheritdoc} */ public function down() { $zones = Zone::get(); $this->log('No Downgrade Required'); } /** * @param string $text */ protected function log($text) { if (Controller::curr() instanceof DatabaseAdmin) { DB::alteration_message($text, 'obsolete'); } elseif (Director::is_cli()) { echo $text . "\n"; } else { echo $text . "<br/>"; } } } |