Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timezones #32 #33

Merged
merged 10 commits into from
Mar 5, 2021
23 changes: 23 additions & 0 deletions database/factories/TimezoneFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace Tipoff\Addresses\Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use Tipoff\Addresses\Models\Timezone;

class TimezoneFactory extends Factory
{
protected $model = Timezone::class;

public function definition()
{
return [
'name' => $this->faker->timezone,
'title' => $this->faker->timezone,
'php' => $this->faker->timezone,
'is_daylight_saving' => $this->faker->boolean
];
}
}
22 changes: 22 additions & 0 deletions database/migrations/2014_01_01_100000_create_timezones_table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTimezonesTable extends Migration
{
public function up()
{
Schema::create('timezones', function (Blueprint $table) {
$table->id();
$table->string('name')->unique(); // Abbreviation
$table->string('title')->unique();
$table->string('php')->unique(); // Supported PHP Timezone: https://www.php.net/manual/en/timezones.php
$table->boolean('is_daylight_saving')->default(1); // Just for reference, Carbon has this.
$table->decimal('dst', 4, 2)->nullable(); // Just for reference, Carbon has this.
$table->decimal('standard', 4, 2)->nullable(); // Just for reference, Carbon has this.
});
}
}
92 changes: 92 additions & 0 deletions database/migrations/2014_01_01_110000_add_timezones.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<?php

declare(strict_types=1);

use Illuminate\Database\Migrations\Migration;
use Tipoff\Addresses\Models\Timezone;

class AddTimezones extends Migration
{
public function up()
{

if (class_exists(Timezone::class)) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

foreach ([
[
'id' => 1,
'name' => 'EST',
'title' => 'Eastern',
'php' => 'America/New_York',
'is_daylight_saving' => 1,
'dst' => '-4.00',
'standard' => '-5.00',
],
[
'id' => 2,
'name' => 'CST',
'title' => 'Central',
'php' => 'America/Chicago',
'is_daylight_saving' => 1,
'dst' => '-5.00',
'standard' => '-6.00',
],
[
'id' => 3,
'name' => 'MST',
'title' => 'Mountain',
'php' => 'America/Denver',
'is_daylight_saving' => 1,
'dst' => '-6.00',
'standard' => '-7.00',
],
[
'id' => 4,
'name' => 'MDT',
'title' => 'Mountain no DST',
'php' => 'America/Phoenix',
'is_daylight_saving' => 0,
'dst' => '-7.00',
'standard' => '-8.00',
],
[
'id' => 5,
'name' => 'PST',
'title' => 'Pacific',
'php' => 'America/Los_Angeles',
'is_daylight_saving' => 1,
'dst' => '-8.00',
'standard' => '-8.00',
],
[
'id' => 6,
'name' => 'AKST',
'title' => 'Alaska',
'php' => 'America/Anchorage',
'is_daylight_saving' => 1,
'dst' => '-8.00',
'standard' => '-9.00',
],
[
'id' => 7,
'name' => 'HAST',
'title' => 'Hawaii–Aleutian',
'php' => 'America/Adak',
'is_daylight_saving' => 1,
'dst' => '-9.00',
'standard' => '-10.00',
],
[
'id' => 8,
'name' => 'HADT',
'title' => 'Hawaii no DST',
'php' => 'Pacific/Honolulu',
'is_daylight_saving' => 0,
'dst' => '-9.00',
'standard' => '-9.00',
]
] as $timezone) {
Timezone::firstOrCreate($timezone);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,19 @@

use Tipoff\Authorization\Permissions\BasePermissionsMigration;

class AddCustomerPermissions extends BasePermissionsMigration
class AddAddressesPermissions extends BasePermissionsMigration
{
public function up()
{
$permissions = [
'view customers',
'create customers',
'update customers'
'update customers',
'view timezones',
'create timezones',
'update timezones',
];

$this->createPermissions($permissions);
}
}
}
3 changes: 3 additions & 0 deletions src/AddressesServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
namespace Tipoff\Addresses;

use Tipoff\Addresses\Models\Customer;
use Tipoff\Addresses\Models\Timezone;
use Tipoff\Addresses\Policies\CustomerPolicy;
use Tipoff\Addresses\Policies\TimezonePolicy;
use Tipoff\Support\TipoffPackage;
use Tipoff\Support\TipoffServiceProvider;

Expand All @@ -16,6 +18,7 @@ public function configureTipoffPackage(TipoffPackage $package): void
$package
->hasPolicies([
Customer::class => CustomerPolicy::class,
Timezone::class => TimezonePolicy::class,
])
->hasNovaResources([
\Tipoff\Addresses\Nova\Customer::class,
Expand Down
29 changes: 29 additions & 0 deletions src/Models/Timezone.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace Tipoff\Addresses\Models;

use Tipoff\Support\Models\BaseModel;
use Tipoff\Support\Traits\HasCreator;
use Tipoff\Support\Traits\HasPackageFactory;
use Tipoff\Support\Traits\HasUpdater;

class Timezone extends BaseModel
{
use HasPackageFactory;
use HasCreator;
use HasUpdater;

public $timestamps = false;

public function markets()
{
return $this->belongsToMany(app('market'));
}

public function locations()
{
return $this->belongsToMany(app('location'));
}
}
49 changes: 49 additions & 0 deletions src/Policies/TimezonePolicy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

declare(strict_types=1);

namespace Tipoff\Addresses\Policies;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! I couldn't see the problem right in front of me!


use Illuminate\Auth\Access\HandlesAuthorization;
use Tipoff\Addresses\Models\Timezone;
use Tipoff\Support\Contracts\Models\UserInterface;

class TimezonePolicy
{
use HandlesAuthorization;

public function viewAny(UserInterface $user): bool
{
return $user->hasPermissionTo('view timezones') ? true : false;
}

public function view(UserInterface $user, Timezone $timezone): bool
{
return $user->hasPermissionTo('view timezones') ? true : false;
}

public function create(UserInterface $user): bool
{
return $user->hasPermissionTo('create timezones') ? true : false;
}

public function update(UserInterface $user, Timezone $timezone): bool
{
return $user->hasPermissionTo('update timezones') ? true : false;
}

public function delete(UserInterface $user, Timezone $timezone): bool
{
return false;
}

public function restore(UserInterface $user, Timezone $timezone): bool
{
return false;
}

public function forceDelete(UserInterface $user, Timezone $timezone): bool
{
return false;
}
}
32 changes: 32 additions & 0 deletions tests/Unit/Migrations/PermissionsMigrationTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace Tipoff\Adddresses\Tests\Unit\Migrations;

use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Schema;
use Spatie\Permission\Models\Permission;
use Tipoff\Addresses\Tests\TestCase;

class PermissionsMigrationTest extends TestCase
{
use DatabaseTransactions;

/** @test */
public function permissions_seeded()
{
$this->assertTrue(Schema::hasTable('permissions'));

$seededPermissions = app(Permission::class)->whereIn('name', [
'view customers',
'create customers',
'update customers',
'view timezones',
'create timezones',
'update timezones',
])->pluck('name');

$this->assertCount(6, $seededPermissions);
}
}
34 changes: 34 additions & 0 deletions tests/Unit/Migrations/TimezonesMigrationTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

declare(strict_types=1);

namespace Tipoff\Addresses\Tests\Unit\Migrations;

use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Schema;
use Tipoff\Addresses\Models\Timezone;
use Tipoff\Addresses\Tests\TestCase;

class TimezonesMigrationTest extends TestCase
{
use DatabaseTransactions;

/** @test */
public function timezones_seeded()
{
$this->assertTrue(Schema::hasTable('timezones'));

$seededTimezones = Timezone::whereIn('name', [
'EST',
'CST',
'MST',
'MDT',
'PST',
'AKST',
'HAST',
'HADT',
])->pluck('name');

$this->assertCount(8, $seededTimezones);
}
}
21 changes: 21 additions & 0 deletions tests/Unit/Models/TimezoneModelTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

declare(strict_types=1);

namespace Tipoff\Addresses\Tests\Unit\Models;

use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tipoff\Addresses\Models\Timezone;
use Tipoff\Addresses\Tests\TestCase;

class TimezoneModelTest extends TestCase
{
use DatabaseTransactions;

/** @test */
public function create()
{
$model = Timezone::factory()->create();
$this->assertNotNull($model);
}
}