Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117902355
D2002.1775383105.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
D2002.1775383105.diff
View Options
diff --git a/src/app/Console/Commands/MigratePrices.php b/src/app/Console/Commands/MigratePrices.php
new file mode 100644
--- /dev/null
+++ b/src/app/Console/Commands/MigratePrices.php
@@ -0,0 +1,156 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+
+class MigratePrices extends Command
+{
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'migrate:prices';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Apply a new price list';
+
+ /**
+ * Execute the console command.
+ *
+ * @return mixed
+ */
+ public function handle()
+ {
+ $this->updateSKUs();
+ $this->updateEntitlements();
+ }
+
+ private function updateSKUs()
+ {
+ $bar = \App\Utils::createProgressBar($this->output, 8, "Updating SKUs");
+
+ // 1. Set the list price for the SKU 'mailbox' to 500.
+ $bar->advance();
+ $mailbox_sku = \App\Sku::where('title', 'mailbox')->first();
+ $mailbox_sku->cost = 500;
+ $mailbox_sku->save();
+
+ // 2. Set the list price for the SKU 'groupware' to 490.
+ $bar->advance();
+ $groupware_sku = \App\Sku::where('title', 'groupware')->first();
+ $groupware_sku->cost = 490;
+ $groupware_sku->save();
+
+ // 3. Set the list price for the SKU 'activesync' to 0.
+ $bar->advance();
+ $activesync_sku = \App\Sku::where('title', 'activesync')->first();
+ $activesync_sku->cost = 0;
+ $activesync_sku->save();
+
+ // 4. Set the units free for the SKU 'storage' to 5.
+ $bar->advance();
+ $storage_sku = \App\Sku::where('title', 'storage')->first();
+ $storage_sku->units_free = 5;
+ $storage_sku->save();
+
+ // 5. Set the number of units for storage to 5 for the 'lite' and 'kolab' packages.
+ $bar->advance();
+ $kolab_package = \App\Package::where('title', 'kolab')->first();
+ $kolab_package->skus()->updateExistingPivot($storage_sku, ['qty' => 5], false);
+ $lite_package = \App\Package::where('title', 'lite')->first();
+ $lite_package->skus()->updateExistingPivot($storage_sku, ['qty' => 5], false);
+
+ // 6. Set the cost for the 'mailbox' unit for the 'lite' and 'kolab' packages to 500.
+ $bar->advance();
+ $kolab_package->skus()->updateExistingPivot($mailbox_sku, ['cost' => 500], false);
+ $lite_package->skus()->updateExistingPivot($mailbox_sku, ['cost' => 500], false);
+
+ // 7. Set the cost for the 'groupware' unit for the 'kolab' package to 490.
+ $bar->advance();
+ $kolab_package->skus()->updateExistingPivot($groupware_sku, ['cost' => 490], false);
+
+ // 8. Set the cost for the 'activesync' unit for the 'kolab' package to 0.
+ $bar->advance();
+ $kolab_package->skus()->updateExistingPivot($activesync_sku, ['cost' => 0], false);
+
+ $bar->finish();
+
+ $this->info("DONE");
+ }
+
+ private function updateEntitlements()
+ {
+ $users = \App\User::all();
+
+ $bar = \App\Utils::createProgressBar($this->output, count($users), "Updating entitlements");
+
+ $groupware_sku = \App\Sku::where('title', 'groupware')->first();
+ $activesync_sku = \App\Sku::where('title', 'activesync')->first();
+ $storage_sku = \App\Sku::where('title', 'storage')->first();
+ $mailbox_sku = \App\Sku::where('title', 'mailbox')->first();
+
+ foreach ($users as $user) {
+ $bar->advance();
+
+ // 1. For every user with a mailbox, ensure that there's a minimum of 5 storage entitlements
+ // that are free of charge.
+ // A. For existing storage entitlements reduce the price to 0 until there's 5 of those.
+ // B. Do not touch the entitlement's updated_at column.
+ $mailbox = $user->entitlements()->where('sku_id', $mailbox_sku->id)->first();
+ if ($mailbox) {
+ $storage = $user->entitlements()->where('sku_id', $storage_sku->id)
+ ->orderBy('cost')->orderBy('updated_at')->get();
+
+ $num = 0;
+ foreach ($storage as $entitlement) {
+ $num++;
+ if ($num <= 5 && $entitlement->cost) {
+ $entitlement->timestamps = false;
+ $entitlement->cost = 0;
+ $entitlement->save();
+ }
+ }
+
+ if ($num < 5) {
+ $user->assignSku($storage_sku, 5 - $num);
+ }
+ }
+
+ // 2. For every user with a 'groupware' entitlement, set the price of that entitlement to 490
+ // -- without touching updated_at.
+ $entitlement = $user->entitlements()->where('sku_id', $groupware_sku->id)->first();
+ if ($entitlement) {
+ $entitlement->timestamps = false;
+ $entitlement->cost = 490;
+ $entitlement->save();
+
+ $entitlement = $user->entitlements()->where('sku_id', $mailbox_sku->id)->first();
+
+ if ($entitlement) {
+ $entitlement->timestamps = false;
+ $entitlement->cost = 500;
+ $entitlement->save();
+ }
+ }
+
+ // 3. For every user with an 'activesync' entitlement, set the price for that entitlement to 0
+ // -- without touching updated_at.
+ $entitlement = $user->entitlements()->where('sku_id', $activesync_sku->id)->first();
+ if ($entitlement) {
+ $entitlement->timestamps = false;
+ $entitlement->cost = 0;
+ $entitlement->save();
+ }
+ }
+
+ $bar->finish();
+
+ $this->info("DONE");
+ }
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 5, 9:58 AM (16 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18820036
Default Alt Text
D2002.1775383105.diff (5 KB)
Attached To
Mode
D2002: Prices migration
Attached
Detach File
Event Timeline