Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117758670
MigratePrices.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
MigratePrices.php
View Options
<?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/x-php
Expires
Sat, Apr 4, 9:54 AM (4 w, 1 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
cf/97/3f7ef988d9db636292a68086ca86
Default Alt Text
MigratePrices.php (5 KB)
Attached To
Mode
rK kolab
Attached
Detach File
Event Timeline