From 5f74a2a7ea95966eef6723456a714c32fd1a831e Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Sun, 28 Oct 2018 13:34:33 +0000 Subject: [PATCH 01/17] Initial implementation for Tests, Configuring of Data Factories --- app/Models/Client.php | 5 ++++ database/factories/ClientFactory.php | 25 +++++++++++++++++ database/factories/CompanyAddressFactory.php | 13 +++++++++ database/factories/CompanyFactory.php | 15 +++++++++++ database/factories/CompanySettingsFactory.php | 13 +++++++++ database/factories/InvoiceFactory.php | 16 +++++++++++ database/factories/InvoiceItemFactory.php | 12 +++++++++ database/factories/ItemTemplateFactory.php | 12 +++++++++ database/factories/QuoteFactory.php | 16 +++++++++++ tests/Feature/CreateClientTest.php | 27 +++++++++++++++++++ tests/Feature/CreateInvoiceTest.php | 20 ++++++++++++++ tests/Feature/CreatePaymentTest.php | 20 ++++++++++++++ tests/Feature/CreateQuoteTest.php | 20 ++++++++++++++ tests/Feature/UpdateCompanyAddressTest.php | 20 ++++++++++++++ tests/Feature/UpdateCompanySettingsTest.php | 20 ++++++++++++++ tests/Feature/UpdateCompanyTest.php | 20 ++++++++++++++ tests/Feature/UpdateProfileTest.php | 20 ++++++++++++++ 17 files changed, 294 insertions(+) create mode 100755 database/factories/ClientFactory.php create mode 100755 database/factories/CompanyAddressFactory.php create mode 100755 database/factories/CompanyFactory.php create mode 100755 database/factories/CompanySettingsFactory.php create mode 100755 database/factories/InvoiceFactory.php create mode 100755 database/factories/InvoiceItemFactory.php create mode 100755 database/factories/ItemTemplateFactory.php create mode 100755 database/factories/QuoteFactory.php create mode 100755 tests/Feature/CreateClientTest.php create mode 100644 tests/Feature/CreateInvoiceTest.php create mode 100644 tests/Feature/CreatePaymentTest.php create mode 100644 tests/Feature/CreateQuoteTest.php create mode 100644 tests/Feature/UpdateCompanyAddressTest.php create mode 100644 tests/Feature/UpdateCompanySettingsTest.php create mode 100644 tests/Feature/UpdateCompanyTest.php create mode 100644 tests/Feature/UpdateProfileTest.php diff --git a/app/Models/Client.php b/app/Models/Client.php index c2d7f097..522522d9 100755 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -55,6 +55,11 @@ public function invoices() return $this->hasMany('App\Models\Invoice', 'client_id'); } + public function company() + { + return $this->belongsTo('App\Models\Company', 'company_id'); + } + public function scopeDuplicateCheck($query, $companyname) { return $query diff --git a/database/factories/ClientFactory.php b/database/factories/ClientFactory.php new file mode 100755 index 00000000..0d0e9dbd --- /dev/null +++ b/database/factories/ClientFactory.php @@ -0,0 +1,25 @@ +define(App\Models\Client::class, function (Faker $faker) { + + return [ + 'companyname' => $faker->company, + 'phone' => '+65' . $faker->randomNumber(8), + 'block' => $faker->buildingNumber, + 'street' => $faker->streetName, + 'unitnumber' => $faker->buildingNumber, + 'postalcode' => $faker->postcode, + 'country' => $faker->country, + 'nickname' => $faker->name, + 'crn' => $faker->ean8, + 'website' => $faker->url, + 'contactsalutation' => $faker->title, + 'contactfirstname' => $faker->firstName, + 'contactlastname' => $faker->lastName, + 'contactgender' => 'male', + 'contactemail' => $faker->unique()->companyEmail, + 'contactphone' => '+65' . $faker->randomNumber(8) + ]; +}); diff --git a/database/factories/CompanyAddressFactory.php b/database/factories/CompanyAddressFactory.php new file mode 100755 index 00000000..34df3dfe --- /dev/null +++ b/database/factories/CompanyAddressFactory.php @@ -0,0 +1,13 @@ +define(Model::class, function (Faker $faker) { + return [ + 'block' => $faker->buildingNumber, + 'street' => $faker->streetName, + 'unitnumber' => $faker->buildingNumber, + 'postalcode' => $faker->postcode, + 'buildingtype' => $faker->numberBetween($min = 1, $max = 2), + ]; +}); diff --git a/database/factories/CompanyFactory.php b/database/factories/CompanyFactory.php new file mode 100755 index 00000000..67628514 --- /dev/null +++ b/database/factories/CompanyFactory.php @@ -0,0 +1,15 @@ +define(App\Models\Company::class, function (Faker $faker) { + return [ + 'name' => $faker->company, + 'invoice_index' => $faker->randomDigit, + 'quote_index' => $faker->randomDigit, + 'slug' => $faker->slug, + 'crn' => $faker->ean8, + 'phone' => '+65' . $faker->randomNumber(8), + 'email' => $faker->unique()->companyEmail, + ]; +}); diff --git a/database/factories/CompanySettingsFactory.php b/database/factories/CompanySettingsFactory.php new file mode 100755 index 00000000..8f6309c6 --- /dev/null +++ b/database/factories/CompanySettingsFactory.php @@ -0,0 +1,13 @@ +define(Model::class, function (Faker $faker) { + return [ + 'invoice_prefix' => $faker->domainWord, + 'quote_prefix' => $faker->domainWord, + 'invoice_conditions' => $faker->realText($maxNbChars = 200, $indexSize = 2), + 'quote_conditions' => $faker->realText($maxNbChars = 200, $indexSize = 2), + 'tax' => $faker->numberBetween($min = 1, $max = 100), + ]; +}); diff --git a/database/factories/InvoiceFactory.php b/database/factories/InvoiceFactory.php new file mode 100755 index 00000000..647289a4 --- /dev/null +++ b/database/factories/InvoiceFactory.php @@ -0,0 +1,16 @@ +define(Model::class, function (Faker $faker) { + return [ + 'nice_invoice_id' => $faker->slug, + 'date' => $faker->dateTime, + 'duedate' => $faker->dateTime, + 'netdays' => $faker->numberBetween($min = 1, $max = 60), + 'total' => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL), + 'share_token' => $faker->uuid, + 'status' => $faker->numberBetween($min = 1, $max = 7), + 'archived' => $faker->boolean, + ]; +}); \ No newline at end of file diff --git a/database/factories/InvoiceItemFactory.php b/database/factories/InvoiceItemFactory.php new file mode 100755 index 00000000..e2599c5b --- /dev/null +++ b/database/factories/InvoiceItemFactory.php @@ -0,0 +1,12 @@ +define(Model::class, function (Faker $faker) { + return [ + 'name' => $faker->realText($maxNbChars = 20, $indexSize = 1), + 'quantity' => $faker->numberBetween($min = 1, $max = 1000), + 'price' => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL), + 'description' => $faker->randomHtml(2,3), + ]; +}); diff --git a/database/factories/ItemTemplateFactory.php b/database/factories/ItemTemplateFactory.php new file mode 100755 index 00000000..e2599c5b --- /dev/null +++ b/database/factories/ItemTemplateFactory.php @@ -0,0 +1,12 @@ +define(Model::class, function (Faker $faker) { + return [ + 'name' => $faker->realText($maxNbChars = 20, $indexSize = 1), + 'quantity' => $faker->numberBetween($min = 1, $max = 1000), + 'price' => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL), + 'description' => $faker->randomHtml(2,3), + ]; +}); diff --git a/database/factories/QuoteFactory.php b/database/factories/QuoteFactory.php new file mode 100755 index 00000000..28ae9750 --- /dev/null +++ b/database/factories/QuoteFactory.php @@ -0,0 +1,16 @@ +define(Model::class, function (Faker $faker) { + return [ + 'nice_quote_id' => $faker->slug, + 'date' => $faker->dateTime, + 'duedate' => $faker->dateTime, + 'netdays' => $faker->numberBetween($min = 1, $max = 60), + 'total' => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL), + 'share_token' => $faker->uuid, + 'status' => $faker->numberBetween($min = 1, $max = 7), + 'archived' => $faker->boolean, + ]; +}); diff --git a/tests/Feature/CreateClientTest.php b/tests/Feature/CreateClientTest.php new file mode 100755 index 00000000..5a81133b --- /dev/null +++ b/tests/Feature/CreateClientTest.php @@ -0,0 +1,27 @@ +make(function ($client) { + $client->company()->save(factory(App\Models\Company::class)->make()); + }); + + $this->assertTrue(true); + } + + + +} diff --git a/tests/Feature/CreateInvoiceTest.php b/tests/Feature/CreateInvoiceTest.php new file mode 100644 index 00000000..7a214e6d --- /dev/null +++ b/tests/Feature/CreateInvoiceTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} diff --git a/tests/Feature/CreatePaymentTest.php b/tests/Feature/CreatePaymentTest.php new file mode 100644 index 00000000..01f7176b --- /dev/null +++ b/tests/Feature/CreatePaymentTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} diff --git a/tests/Feature/CreateQuoteTest.php b/tests/Feature/CreateQuoteTest.php new file mode 100644 index 00000000..8caa1621 --- /dev/null +++ b/tests/Feature/CreateQuoteTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} diff --git a/tests/Feature/UpdateCompanyAddressTest.php b/tests/Feature/UpdateCompanyAddressTest.php new file mode 100644 index 00000000..849317e1 --- /dev/null +++ b/tests/Feature/UpdateCompanyAddressTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} diff --git a/tests/Feature/UpdateCompanySettingsTest.php b/tests/Feature/UpdateCompanySettingsTest.php new file mode 100644 index 00000000..b854be2d --- /dev/null +++ b/tests/Feature/UpdateCompanySettingsTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} diff --git a/tests/Feature/UpdateCompanyTest.php b/tests/Feature/UpdateCompanyTest.php new file mode 100644 index 00000000..7ed3cce0 --- /dev/null +++ b/tests/Feature/UpdateCompanyTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} diff --git a/tests/Feature/UpdateProfileTest.php b/tests/Feature/UpdateProfileTest.php new file mode 100644 index 00000000..e9173d4a --- /dev/null +++ b/tests/Feature/UpdateProfileTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} From 9810ef6915d8f885cf669ccee43553bf90c5cc90 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Mon, 29 Oct 2018 05:41:08 +0800 Subject: [PATCH 02/17] Update to Factories, refactor Tests --- .gitignore | 1 + database/factories/ClientFactory.php | 7 ++- database/factories/CompanyAddressFactory.php | 5 +- database/factories/CompanyFactory.php | 5 +- database/factories/CompanySettingsFactory.php | 5 +- database/factories/InvoiceFactory.php | 8 ++- database/factories/InvoiceItemFactory.php | 5 +- database/factories/ItemTemplateFactory.php | 5 +- database/factories/QuoteFactory.php | 8 ++- database/factories/QuoteItemFactory.php | 15 +++++ database/factories/UserFactory.php | 2 +- tests/Feature/ClientTest.php | 58 +++++++++++++++++++ tests/Feature/CreateClientTest.php | 27 --------- tests/Feature/CreateInvoiceTest.php | 20 ------- tests/Feature/CreatePaymentTest.php | 20 ------- tests/Feature/CreateQuoteTest.php | 20 ------- tests/Feature/ExampleTest.php | 2 +- tests/Feature/UpdateCompanyAddressTest.php | 20 ------- tests/Feature/UpdateCompanySettingsTest.php | 20 ------- tests/Feature/UpdateCompanyTest.php | 20 ------- tests/Feature/UpdateProfileTest.php | 20 ------- tests/Feature/UserSignupTest.php | 28 --------- tests/Feature/UserTest.php | 41 +++++++++++++ 23 files changed, 156 insertions(+), 206 deletions(-) create mode 100755 database/factories/QuoteItemFactory.php create mode 100755 tests/Feature/ClientTest.php delete mode 100755 tests/Feature/CreateClientTest.php delete mode 100644 tests/Feature/CreateInvoiceTest.php delete mode 100644 tests/Feature/CreatePaymentTest.php delete mode 100644 tests/Feature/CreateQuoteTest.php delete mode 100644 tests/Feature/UpdateCompanyAddressTest.php delete mode 100644 tests/Feature/UpdateCompanySettingsTest.php delete mode 100644 tests/Feature/UpdateCompanyTest.php delete mode 100644 tests/Feature/UpdateProfileTest.php delete mode 100755 tests/Feature/UserSignupTest.php create mode 100755 tests/Feature/UserTest.php diff --git a/.gitignore b/.gitignore index 159483b4..a2c390d4 100755 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ npm-debug.log yarn-error.log .env .env.dusk.local +.env.testing .phpunit.result.cache .DS_Store diff --git a/database/factories/ClientFactory.php b/database/factories/ClientFactory.php index 0d0e9dbd..98caa0db 100755 --- a/database/factories/ClientFactory.php +++ b/database/factories/ClientFactory.php @@ -2,7 +2,7 @@ use Faker\Generator as Faker; -$factory->define(App\Models\Client::class, function (Faker $faker) { +$factory->define(\App\Models\Client::class, function (Faker $faker) { return [ 'companyname' => $faker->company, @@ -20,6 +20,9 @@ 'contactlastname' => $faker->lastName, 'contactgender' => 'male', 'contactemail' => $faker->unique()->companyEmail, - 'contactphone' => '+65' . $faker->randomNumber(8) + 'contactphone' => '+65' . $faker->randomNumber(8), + 'company_id' => function () { + return factory(\App\Models\Company::class)->create()->id; + } ]; }); diff --git a/database/factories/CompanyAddressFactory.php b/database/factories/CompanyAddressFactory.php index 34df3dfe..5e0655a1 100755 --- a/database/factories/CompanyAddressFactory.php +++ b/database/factories/CompanyAddressFactory.php @@ -2,12 +2,15 @@ use Faker\Generator as Faker; -$factory->define(Model::class, function (Faker $faker) { +$factory->define(\App\Models\CompanyAddress::class, function (Faker $faker) { return [ 'block' => $faker->buildingNumber, 'street' => $faker->streetName, 'unitnumber' => $faker->buildingNumber, 'postalcode' => $faker->postcode, 'buildingtype' => $faker->numberBetween($min = 1, $max = 2), + 'company_id' => function () { + return factory(\App\Models\Company::class)->create()->id; + } ]; }); diff --git a/database/factories/CompanyFactory.php b/database/factories/CompanyFactory.php index 67628514..8f714cf1 100755 --- a/database/factories/CompanyFactory.php +++ b/database/factories/CompanyFactory.php @@ -2,7 +2,7 @@ use Faker\Generator as Faker; -$factory->define(App\Models\Company::class, function (Faker $faker) { +$factory->define(\App\Models\Company::class, function (Faker $faker) { return [ 'name' => $faker->company, 'invoice_index' => $faker->randomDigit, @@ -11,5 +11,8 @@ 'crn' => $faker->ean8, 'phone' => '+65' . $faker->randomNumber(8), 'email' => $faker->unique()->companyEmail, + 'user_id' => function() { + return factory(\App\Models\User::class)->create()->id; + } ]; }); diff --git a/database/factories/CompanySettingsFactory.php b/database/factories/CompanySettingsFactory.php index 8f6309c6..2c8fff49 100755 --- a/database/factories/CompanySettingsFactory.php +++ b/database/factories/CompanySettingsFactory.php @@ -2,12 +2,15 @@ use Faker\Generator as Faker; -$factory->define(Model::class, function (Faker $faker) { +$factory->define(\App\Models\CompanySettings::class, function (Faker $faker) { return [ 'invoice_prefix' => $faker->domainWord, 'quote_prefix' => $faker->domainWord, 'invoice_conditions' => $faker->realText($maxNbChars = 200, $indexSize = 2), 'quote_conditions' => $faker->realText($maxNbChars = 200, $indexSize = 2), 'tax' => $faker->numberBetween($min = 1, $max = 100), + 'company_id' => function () { + return factory(\App\Models\Company::class)->create()->id; + } ]; }); diff --git a/database/factories/InvoiceFactory.php b/database/factories/InvoiceFactory.php index 647289a4..7ee04cae 100755 --- a/database/factories/InvoiceFactory.php +++ b/database/factories/InvoiceFactory.php @@ -2,7 +2,7 @@ use Faker\Generator as Faker; -$factory->define(Model::class, function (Faker $faker) { +$factory->define(\App\Models\Invoice::class, function (Faker $faker) { return [ 'nice_invoice_id' => $faker->slug, 'date' => $faker->dateTime, @@ -12,5 +12,11 @@ 'share_token' => $faker->uuid, 'status' => $faker->numberBetween($min = 1, $max = 7), 'archived' => $faker->boolean, + 'client_id' => function () { + return factory(\App\Models\Client::class)->create()->id; + }, + 'company_id' => function () { + return factory(\App\Models\Company::class)->create()->id; + } ]; }); \ No newline at end of file diff --git a/database/factories/InvoiceItemFactory.php b/database/factories/InvoiceItemFactory.php index e2599c5b..9c8d22db 100755 --- a/database/factories/InvoiceItemFactory.php +++ b/database/factories/InvoiceItemFactory.php @@ -2,11 +2,14 @@ use Faker\Generator as Faker; -$factory->define(Model::class, function (Faker $faker) { +$factory->define(\App\Models\InvoiceItem::class, function (Faker $faker) { return [ 'name' => $faker->realText($maxNbChars = 20, $indexSize = 1), 'quantity' => $faker->numberBetween($min = 1, $max = 1000), 'price' => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL), 'description' => $faker->randomHtml(2,3), + 'invoice_id' => function () { + return factory(\App\Models\Invoice::class)->create()->id; + } ]; }); diff --git a/database/factories/ItemTemplateFactory.php b/database/factories/ItemTemplateFactory.php index e2599c5b..e59338db 100755 --- a/database/factories/ItemTemplateFactory.php +++ b/database/factories/ItemTemplateFactory.php @@ -2,11 +2,14 @@ use Faker\Generator as Faker; -$factory->define(Model::class, function (Faker $faker) { +$factory->define(\App\Models\ItemTemplate::class, function (Faker $faker) { return [ 'name' => $faker->realText($maxNbChars = 20, $indexSize = 1), 'quantity' => $faker->numberBetween($min = 1, $max = 1000), 'price' => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL), 'description' => $faker->randomHtml(2,3), + 'company_id' => function () { + return factory(\App\Models\Company::class)->create()->id; + } ]; }); diff --git a/database/factories/QuoteFactory.php b/database/factories/QuoteFactory.php index 28ae9750..d70b0192 100755 --- a/database/factories/QuoteFactory.php +++ b/database/factories/QuoteFactory.php @@ -2,7 +2,7 @@ use Faker\Generator as Faker; -$factory->define(Model::class, function (Faker $faker) { +$factory->define(\App\Models\Quote::class, function (Faker $faker) { return [ 'nice_quote_id' => $faker->slug, 'date' => $faker->dateTime, @@ -12,5 +12,11 @@ 'share_token' => $faker->uuid, 'status' => $faker->numberBetween($min = 1, $max = 7), 'archived' => $faker->boolean, + 'client_id' => function () { + return factory(\App\Models\Client::class)->create()->id; + }, + 'company_id' => function () { + return factory(\App\Models\Company::class)->create()->id; + } ]; }); diff --git a/database/factories/QuoteItemFactory.php b/database/factories/QuoteItemFactory.php new file mode 100755 index 00000000..215e08c6 --- /dev/null +++ b/database/factories/QuoteItemFactory.php @@ -0,0 +1,15 @@ +define(\App\Models\QuoteItem::class, function (Faker $faker) { + return [ + 'name' => $faker->realText($maxNbChars = 20, $indexSize = 1), + 'quantity' => $faker->numberBetween($min = 1, $max = 1000), + 'price' => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL), + 'description' => $faker->randomHtml(2,3), + 'quote_id' => function () { + return factory(\App\Models\Quote::class)->create()->id; + } + ]; +}); diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 1177a12a..6dc02dd7 100755 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -13,7 +13,7 @@ | */ -$factory->define(App\Models\User::class, function (Faker $faker) { +$factory->define(\App\Models\User::class, function (Faker $faker) { static $password; return [ diff --git a/tests/Feature/ClientTest.php b/tests/Feature/ClientTest.php new file mode 100755 index 00000000..dfadf829 --- /dev/null +++ b/tests/Feature/ClientTest.php @@ -0,0 +1,58 @@ +make(function ($client) { +// $client->company()->save(factory(App\Models\Company::class)->make()); +// }); +// +// $this->assertTrue(true); +// } + + public function test_create_client() + { + $company = factory(\App\Models\Company::class)->create(); + + $client = Client::make([ + 'companyname' => 'Poowf Labs', + 'phone' => '+6581234567', + 'block' => '123', + 'street' => '123 Street Name', + 'unitnumber' => '00-00', + 'postalcode' => '123456', + 'country' => 'Singapore', + 'nickname' => 'Poowf the Bunny', + 'crn' => '201810000A', + 'website' => 'http://poowf.com', + 'contactsalutation' => 'Ms.', + 'contactfirstname' => 'Poowf', + 'contactlastname' => 'Bunny', + 'contactgender' => 'female', + 'contactemail' => 'bunny@poowf.com', + 'contactphone' => '+6579328669', + 'company_id' => $company->id + ]); + + $client->setRelation('company', $company); + + $this->assertEquals($client->company->name, $company->name); + $this->assertEquals('Poowf Labs', $client->companyname); + } + +} diff --git a/tests/Feature/CreateClientTest.php b/tests/Feature/CreateClientTest.php deleted file mode 100755 index 5a81133b..00000000 --- a/tests/Feature/CreateClientTest.php +++ /dev/null @@ -1,27 +0,0 @@ -make(function ($client) { - $client->company()->save(factory(App\Models\Company::class)->make()); - }); - - $this->assertTrue(true); - } - - - -} diff --git a/tests/Feature/CreateInvoiceTest.php b/tests/Feature/CreateInvoiceTest.php deleted file mode 100644 index 7a214e6d..00000000 --- a/tests/Feature/CreateInvoiceTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Feature/CreatePaymentTest.php b/tests/Feature/CreatePaymentTest.php deleted file mode 100644 index 01f7176b..00000000 --- a/tests/Feature/CreatePaymentTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Feature/CreateQuoteTest.php b/tests/Feature/CreateQuoteTest.php deleted file mode 100644 index 8caa1621..00000000 --- a/tests/Feature/CreateQuoteTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php index f31e495c..ce9db80a 100755 --- a/tests/Feature/ExampleTest.php +++ b/tests/Feature/ExampleTest.php @@ -16,6 +16,6 @@ public function testBasicTest() { $response = $this->get('/'); - $response->assertStatus(200); + $response->assertStatus(302); } } diff --git a/tests/Feature/UpdateCompanyAddressTest.php b/tests/Feature/UpdateCompanyAddressTest.php deleted file mode 100644 index 849317e1..00000000 --- a/tests/Feature/UpdateCompanyAddressTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Feature/UpdateCompanySettingsTest.php b/tests/Feature/UpdateCompanySettingsTest.php deleted file mode 100644 index b854be2d..00000000 --- a/tests/Feature/UpdateCompanySettingsTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Feature/UpdateCompanyTest.php b/tests/Feature/UpdateCompanyTest.php deleted file mode 100644 index 7ed3cce0..00000000 --- a/tests/Feature/UpdateCompanyTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Feature/UpdateProfileTest.php b/tests/Feature/UpdateProfileTest.php deleted file mode 100644 index e9173d4a..00000000 --- a/tests/Feature/UpdateProfileTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Feature/UserSignupTest.php b/tests/Feature/UserSignupTest.php deleted file mode 100755 index a80370bd..00000000 --- a/tests/Feature/UserSignupTest.php +++ /dev/null @@ -1,28 +0,0 @@ -visit('auth/register') - ->type('bob', 'name') - ->type('hello1@in.com', 'email') - ->type('hello1', 'password') - ->type('hello1', 'password_confirmation') - ->press('Register') - ->seePageIs('/'); - } -} diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php new file mode 100755 index 00000000..d9d918c8 --- /dev/null +++ b/tests/Feature/UserTest.php @@ -0,0 +1,41 @@ +create(); + + $user = User::make([ + 'full_name' => 'Poowf Bunny', + 'username' => 'poowf', + 'password' => 'secret', + 'email' => 'bunny@poowf.com', + 'phone' => '+6579328669', + 'gender' => 'female', + 'remember_token' => 'sadfaxsfie', + 'company_id' => $company->id + ]); + + $user->setRelation('company', $company); + + $this->assertEquals($user->company->name, $company->name); + $this->assertEquals('bunny@poowf.com', $user->email); + } + +} From 788591e9a3600f6e30bb7e283da75c2f3d8b0016 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Mon, 29 Oct 2018 06:16:24 +0800 Subject: [PATCH 03/17] Basic Tests for Creation of Model and Relationships --- tests/Feature/ClientTest.php | 16 +++------- tests/Feature/CompanyAddressTest.php | 39 +++++++++++++++++++++++ tests/Feature/CompanySettingsTest.php | 39 +++++++++++++++++++++++ tests/Feature/CompanyTest.php | 40 ++++++++++++++++++++++++ tests/Feature/InvoiceItemTest.php | 38 ++++++++++++++++++++++ tests/Feature/InvoiceTest.php | 45 +++++++++++++++++++++++++++ tests/Feature/ItemTemplateTest.php | 38 ++++++++++++++++++++++ tests/Feature/QuoteItemTest.php | 38 ++++++++++++++++++++++ tests/Feature/QuoteTest.php | 44 ++++++++++++++++++++++++++ tests/Feature/UserTest.php | 10 +++--- 10 files changed, 332 insertions(+), 15 deletions(-) create mode 100755 tests/Feature/CompanyAddressTest.php create mode 100755 tests/Feature/CompanySettingsTest.php create mode 100755 tests/Feature/CompanyTest.php create mode 100755 tests/Feature/InvoiceItemTest.php create mode 100755 tests/Feature/InvoiceTest.php create mode 100755 tests/Feature/ItemTemplateTest.php create mode 100755 tests/Feature/QuoteItemTest.php create mode 100755 tests/Feature/QuoteTest.php diff --git a/tests/Feature/ClientTest.php b/tests/Feature/ClientTest.php index dfadf829..11fd97c0 100755 --- a/tests/Feature/ClientTest.php +++ b/tests/Feature/ClientTest.php @@ -4,32 +4,26 @@ use App\Models\Client; use Tests\TestCase; -use Log; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Foundation\Testing\RefreshDatabase; class ClientTest extends TestCase { use RefreshDatabase; + /** * A basic test example. * * @return void */ -// public function testClient() -// { -// $client = factory(App\Models\Client::class)->make(function ($client) { -// $client->company()->save(factory(App\Models\Company::class)->make()); -// }); -// -// $this->assertTrue(true); -// } public function test_create_client() { $company = factory(\App\Models\Company::class)->create(); - $client = Client::make([ + Client::unguard(); + + $client = Client::create([ 'companyname' => 'Poowf Labs', 'phone' => '+6581234567', 'block' => '123', @@ -49,7 +43,7 @@ public function test_create_client() 'company_id' => $company->id ]); - $client->setRelation('company', $company); + Client::unguard(); $this->assertEquals($client->company->name, $company->name); $this->assertEquals('Poowf Labs', $client->companyname); diff --git a/tests/Feature/CompanyAddressTest.php b/tests/Feature/CompanyAddressTest.php new file mode 100755 index 00000000..402c0810 --- /dev/null +++ b/tests/Feature/CompanyAddressTest.php @@ -0,0 +1,39 @@ +create(); + + CompanyAddress::unguard(); + + $companyaddress = CompanyAddress::create([ + 'block' => '123', + 'street' => '123 Street Name', + 'unitnumber' => '00-00', + 'postalcode' => '123456', + 'buildingtype' => '1', + 'company_id' => $company->id + ]); + + CompanyAddress::reguard(); + + $this->assertEquals($companyaddress->company->name, $company->name); + $this->assertEquals('123 Street Name', $companyaddress->street); + } +} diff --git a/tests/Feature/CompanySettingsTest.php b/tests/Feature/CompanySettingsTest.php new file mode 100755 index 00000000..7f3bdf46 --- /dev/null +++ b/tests/Feature/CompanySettingsTest.php @@ -0,0 +1,39 @@ +create(); + + CompanySettings::unguard(); + + $companysettings = CompanySettings::create([ + 'invoice_prefix' => 'PWF', + 'quote_prefix' => 'PWFQ', + 'invoice_conditions' => 'asdfasfdasfasfasdf asdfasdfasdf asfdassafas

asdfasdfasdfas

', + 'quote_conditions' => 'asdfasfdasfasfasdf asdfasdfasdf asfdassafas

asdfasdfasdfas

', + 'tax' => '20', + 'company_id' => $company->id + ]); + + CompanySettings::reguard(); + + $this->assertEquals($companysettings->company->name, $company->name); + $this->assertEquals('asdfasfdasfasfasdf asdfasdfasdf asfdassafas

asdfasdfasdfas

', $companysettings->invoice_conditions); + } +} diff --git a/tests/Feature/CompanyTest.php b/tests/Feature/CompanyTest.php new file mode 100755 index 00000000..2ee6511d --- /dev/null +++ b/tests/Feature/CompanyTest.php @@ -0,0 +1,40 @@ +create(); + + Company::unguard(); + + $company = Company::create([ + 'name' => 'Poowf Labs', + 'invoice_index' => '2342', + 'quote_index' => '12313', + 'crn' => '201810000A', + 'phone' => '+6579328669', + 'email' => 'bunny@poowf.com', + 'user_id' => $user->id + ]); + + Company::reguard(); + + $this->assertEquals($company->owner->name, $user->name); + $this->assertEquals('poowf-labs', $company->slug); + } +} diff --git a/tests/Feature/InvoiceItemTest.php b/tests/Feature/InvoiceItemTest.php new file mode 100755 index 00000000..e858de7d --- /dev/null +++ b/tests/Feature/InvoiceItemTest.php @@ -0,0 +1,38 @@ +create(); + + InvoiceItem::unguard(); + + $invoiceitem = InvoiceItem::create([ + 'name' => 'This is an Invoice Item la', + 'quantity' => '250', + 'price' => '5.00', + 'description' => 'asfdasfasfasfsf

asasdfasdfasfas

', + 'invoice_id' => $invoice->id + ]); + + InvoiceItem::reguard(); + + $this->assertEquals($invoiceitem->invoice->id, $invoice->id); + $this->assertEquals('asfdasfasfasfsf

asasdfasdfasfas

', $invoiceitem->description); + } +} diff --git a/tests/Feature/InvoiceTest.php b/tests/Feature/InvoiceTest.php new file mode 100755 index 00000000..7b6331d7 --- /dev/null +++ b/tests/Feature/InvoiceTest.php @@ -0,0 +1,45 @@ +create(); + + Invoice::unguard(); + + $invoice = Invoice::create([ + 'nice_invoice_id' => 'PWF-000001', + 'date' => '2018-01-01 12:01:00', + 'duedate' => '2018-01-01 12:01:00', + 'netdays' => '20', + 'total' => '650.80', + 'share_token' => '7e57d004-2b97-0e7a-b45f-5387367791cd', + 'status' => '2', + 'archived' => '0', + 'client_id' => $client->id, + 'company_id' => $client->company->id + ]); + + Invoice::reguard(); + + $this->assertEquals($invoice->client->name, $client->name); + $this->assertEquals($invoice->client->company->name, $client->company->name); + $this->assertEquals('7e57d004-2b97-0e7a-b45f-5387367791cd', $invoice->share_token); + } + +} diff --git a/tests/Feature/ItemTemplateTest.php b/tests/Feature/ItemTemplateTest.php new file mode 100755 index 00000000..8ccd6d34 --- /dev/null +++ b/tests/Feature/ItemTemplateTest.php @@ -0,0 +1,38 @@ +create(); + + ItemTemplate::unguard(); + + $itemtemplate = ItemTemplate::create([ + 'name' => 'This is an Item Template la', + 'quantity' => '250', + 'price' => '5.00', + 'description' => 'asfdasfasfasfsf

asasdfasdfasfas

', + 'company_id' => $company->id + ]); + + ItemTemplate::reguard(); + + $this->assertEquals($itemtemplate->company->id, $company->id); + $this->assertEquals('asfdasfasfasfsf

asasdfasdfasfas

', $itemtemplate->description); + } +} diff --git a/tests/Feature/QuoteItemTest.php b/tests/Feature/QuoteItemTest.php new file mode 100755 index 00000000..dd11134e --- /dev/null +++ b/tests/Feature/QuoteItemTest.php @@ -0,0 +1,38 @@ +create(); + + QuoteItem::unguard(); + + $quoteitem = QuoteItem::create([ + 'name' => 'This is a Quote Item la', + 'quantity' => '250', + 'price' => '5.00', + 'description' => 'asfdasfasfasfsf

asasdfasdfasfas

', + 'quote_id' => $quote->id + ]); + + QuoteItem::reguard(); + + $this->assertEquals($quoteitem->quote->id, $quote->id); + $this->assertEquals('asfdasfasfasfsf

asasdfasdfasfas

', $quoteitem->description); + } +} diff --git a/tests/Feature/QuoteTest.php b/tests/Feature/QuoteTest.php new file mode 100755 index 00000000..69ae5bfd --- /dev/null +++ b/tests/Feature/QuoteTest.php @@ -0,0 +1,44 @@ +create(); + + Quote::unguard(); + + $quote = Quote::create([ + 'nice_quote_id' => 'PWFQ-000001', + 'date' => '2018-01-01 12:01:00', + 'duedate' => '2018-01-01 12:01:00', + 'netdays' => '20', + 'total' => '650.50', + 'share_token' => '7e57d004-2b97-0e7a-b45f-5387367791cd', + 'status' => '2', + 'archived' => '0', + 'client_id' => $client->id, + 'company_id' => $client->company->id + ]); + + Quote::reguard(); + + $this->assertEquals($quote->client->name, $client->name); + $this->assertEquals($quote->client->company->name, $client->company->name); + $this->assertEquals('7e57d004-2b97-0e7a-b45f-5387367791cd', $quote->share_token); + } +} diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php index d9d918c8..93a1ee3a 100755 --- a/tests/Feature/UserTest.php +++ b/tests/Feature/UserTest.php @@ -3,14 +3,14 @@ namespace Tests\Feature; use App\Models\User; -use Log; use Tests\TestCase; +use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase { - use RefreshDatabase; + /** * A basic test example. * @@ -21,7 +21,9 @@ public function test_create_user() { $company = factory(\App\Models\Company::class)->create(); - $user = User::make([ + User::unguard(); + + $user = User::create([ 'full_name' => 'Poowf Bunny', 'username' => 'poowf', 'password' => 'secret', @@ -32,7 +34,7 @@ public function test_create_user() 'company_id' => $company->id ]); - $user->setRelation('company', $company); + User::reguard(); $this->assertEquals($user->company->name, $company->name); $this->assertEquals('bunny@poowf.com', $user->email); From 4826dca00b8d7d91b366094ae492f071a478102a Mon Sep 17 00:00:00 2001 From: Bernard Date: Wed, 31 Oct 2018 00:19:21 +0800 Subject: [PATCH 04/17] Added flash messages to company settings and address --- app/Http/Controllers/CompanyAddressController.php | 2 ++ app/Http/Controllers/CompanySettingsController.php | 1 + 2 files changed, 3 insertions(+) diff --git a/app/Http/Controllers/CompanyAddressController.php b/app/Http/Controllers/CompanyAddressController.php index 6c973571..5c08be99 100755 --- a/app/Http/Controllers/CompanyAddressController.php +++ b/app/Http/Controllers/CompanyAddressController.php @@ -93,6 +93,8 @@ public function update(UpdateCompanyAddressRequest $request) $companyaddress->fill($request->all()); $ownedcompany->address()->save($companyaddress); + flash('Company Address Updated', 'success'); + return redirect()->back(); } diff --git a/app/Http/Controllers/CompanySettingsController.php b/app/Http/Controllers/CompanySettingsController.php index dce816ea..5b664036 100755 --- a/app/Http/Controllers/CompanySettingsController.php +++ b/app/Http/Controllers/CompanySettingsController.php @@ -91,6 +91,7 @@ public function update(UpdateCompanySettingsRequest $request) $companysettings->fill($request->all()); $ownedcompany->settings()->save($companysettings); + flash('Company Settings Updated', 'success'); return redirect()->back(); } From 239983ee6008d87ea963cf4e690eaf1f42768573 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Wed, 31 Oct 2018 01:57:20 +0800 Subject: [PATCH 05/17] Initial Implementation for Company Multiusers --- .../Controllers/CompanyAddressController.php | 1 - app/Http/Controllers/CompanyController.php | 82 ++++++++ app/Http/Controllers/UserController.php | 11 ++ .../Requests/CreateCompanyUserRequest.php | 34 ++++ .../Requests/UpdateCompanyOwnerRequest.php | 30 +++ .../Requests/UpdateCompanyUserRequest.php | 35 ++++ app/Models/Company.php | 5 + app/Models/User.php | 30 +++ .../NewCompanyUserNotification.php | 72 +++++++ app/Policies/CompanyPolicy.php | 35 ++++ ...10_30_221048_add_status_to_users_table.php | 32 ++++ ...1_014426_add_domain_to_companies_table.php | 32 ++++ ...te_crn_not_nullable_to_companies_table.php | 32 ++++ public/assets/css/style.css | 8 + public/mix-manifest.json | 2 +- resources/assets/sass/style.scss | 8 + .../pages/company/address/edit.blade.php | 3 +- resources/views/pages/company/edit.blade.php | 2 +- .../views/pages/company/owner/edit.blade.php | 176 ++++++++++++++++++ .../pages/company/settings/edit.blade.php | 19 +- .../pages/company/users/create.blade.php | 164 ++++++++++++++++ .../views/pages/company/users/edit.blade.php | 176 ++++++++++++++++++ .../views/pages/company/users/index.blade.php | 91 +++++++++ resources/views/pages/user/edit.blade.php | 2 +- resources/views/partials/header.blade.php | 4 +- .../views/partials/sidenav-company.blade.php | 16 ++ .../views/partials/sidenav-user.blade.php | 6 + resources/views/partials/sidenav.blade.php | 9 - routes/web.php | 29 ++- 29 files changed, 1113 insertions(+), 33 deletions(-) create mode 100755 app/Http/Requests/CreateCompanyUserRequest.php create mode 100755 app/Http/Requests/UpdateCompanyOwnerRequest.php create mode 100755 app/Http/Requests/UpdateCompanyUserRequest.php create mode 100755 app/Notifications/NewCompanyUserNotification.php create mode 100755 database/migrations/2018_10_30_221048_add_status_to_users_table.php create mode 100755 database/migrations/2018_10_31_014426_add_domain_to_companies_table.php create mode 100755 database/migrations/2018_10_31_015426_update_crn_not_nullable_to_companies_table.php create mode 100755 resources/views/pages/company/owner/edit.blade.php create mode 100755 resources/views/pages/company/users/create.blade.php create mode 100755 resources/views/pages/company/users/edit.blade.php create mode 100755 resources/views/pages/company/users/index.blade.php create mode 100755 resources/views/partials/sidenav-company.blade.php create mode 100755 resources/views/partials/sidenav-user.blade.php delete mode 100755 resources/views/partials/sidenav.blade.php diff --git a/app/Http/Controllers/CompanyAddressController.php b/app/Http/Controllers/CompanyAddressController.php index 6c973571..43e89b27 100755 --- a/app/Http/Controllers/CompanyAddressController.php +++ b/app/Http/Controllers/CompanyAddressController.php @@ -70,7 +70,6 @@ public function edit() $companyaddress = null; } - return view('pages.company.address.edit', compact('companyaddress', 'ownedcompany')); } diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index 221ea2f1..d1edc216 100755 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -3,7 +3,11 @@ namespace App\Http\Controllers; use App\Http\Requests\CreateCompanyRequest; +use App\Http\Requests\CreateCompanyUserRequest; +use App\Http\Requests\UpdateCompanyOwnerRequest; use App\Http\Requests\UpdateCompanyRequest; +use App\Http\Requests\UpdateCompanyUserRequest; +use App\Notifications\NewCompanyUserNotification; use Illuminate\Http\Request; use App\Models\Company; use App\Models\User; @@ -145,6 +149,7 @@ public function update(UpdateCompanyRequest $request) } else { + //TODO: Prevent User from registering a company if the domain name has already been registered. $company = new Company; $company->user_id = auth()->user()->id; $isnew = true; @@ -217,4 +222,81 @@ public function destroy() { // } + + public function edit_owner() { + $company = auth()->user()->company; + + if($company) + { + $owner = $company->owner; + $users = $company->users; + } + else + { + $owner = collect(); + $users = collect(); + } + + return view('pages.company.owner.edit', compact('company', 'owner', 'users')); + } + + public function update_owner(UpdateCompanyOwnerRequest $request) { + $company = auth()->user()->ownedcompany; + $user = User::find($request->input('user_id')); + $company->user_id = $user->id; + $company->save(); + + return redirect()->back(); + } + + public function index_users() { + $company = auth()->user()->company; + + if($company) + { + $users = auth()->user()->company->users()->paginate(12); + } + else + { + $users = collect(); + } + + return view('pages.company.users.index', compact('users', 'company')); + } + + public function create_users() { + $company = auth()->user()->company; + + return view('pages.company.users.create', compact('company')); + } + public function store_users(CreateCompanyUserRequest $request) { + $company = auth()->user()->company; + + $random_password = str_random(16); + + $user = new User; + $user->fill($request->all()); + $user->password = $random_password; + $user->company_id = $company->id; + $user->save(); + + $user->notify(new NewCompanyUserNotification($user, $random_password)); + + return redirect()->back(); + } + + public function edit_users(User $user) { + return view('pages.company.users.edit', compact('user')); + } + + public function update_users(UpdateCompanyUserRequest $request, User $user) { + $user->fill($request->all()); + if ($request->has('newpassword') && $request->input('newpassword') != null) { + $newpass = $request->input('newpassword'); + $user->password = $newpass; + } + $user->save(); + + return redirect()->back(); + } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index e911aca7..1f3a028d 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -70,6 +70,17 @@ public function edit() return view('pages.user.edit', compact('user')); } + /** + * Retrieve the user and return as object + * + * @param \App\Models\User $user + * @return ItemTemplate + */ + public function retrieve(User $user) + { + return response()->json($user); + } + /** * Update the specified resource in storage. * diff --git a/app/Http/Requests/CreateCompanyUserRequest.php b/app/Http/Requests/CreateCompanyUserRequest.php new file mode 100755 index 00000000..1b554d6b --- /dev/null +++ b/app/Http/Requests/CreateCompanyUserRequest.php @@ -0,0 +1,34 @@ + 'required|min:4|unique:users', + 'email' => 'required|email|unique:users', + 'full_name' => 'required', + 'phone' => 'required|unique:users', + 'gender' => 'required|in:male,female', + ]; + } +} diff --git a/app/Http/Requests/UpdateCompanyOwnerRequest.php b/app/Http/Requests/UpdateCompanyOwnerRequest.php new file mode 100755 index 00000000..93673380 --- /dev/null +++ b/app/Http/Requests/UpdateCompanyOwnerRequest.php @@ -0,0 +1,30 @@ + 'required', + ]; + } +} diff --git a/app/Http/Requests/UpdateCompanyUserRequest.php b/app/Http/Requests/UpdateCompanyUserRequest.php new file mode 100755 index 00000000..805031a2 --- /dev/null +++ b/app/Http/Requests/UpdateCompanyUserRequest.php @@ -0,0 +1,35 @@ + 'required|min:4|unique:users,username,' . $this->user->id, + 'email' => 'required|email|unique:users,email,' . $this->user->id, + 'phone' => 'required|unique:users,phone,' . $this->user->id, + 'gender' => 'required|in:male,female', + 'full_name' => 'required', + 'newpassword' => 'confirmed', + ]; + } +} diff --git a/app/Models/Company.php b/app/Models/Company.php index 1d6497bd..b413cb80 100755 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -94,6 +94,11 @@ public function lastquote() return $this->hasOne('App\Models\Quote')->latest()->limit(1)->first(); } + public function users() + { + return $this->hasMany('App\Models\User', 'company_id'); + } + public function quotes() { return $this->hasMany('App\Models\Quote', 'company_id'); diff --git a/app/Models/User.php b/app/Models/User.php index ad317b79..9abb5d8b 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -15,6 +15,10 @@ class User extends Authenticatable use HasRoles; + const STATUS_ACTIVE = 1; + const STATUS_DISABLED = 2; + const STATUS_BANNED = 3; + /** * The database table used by the model. * @@ -45,6 +49,9 @@ class User extends Authenticatable 'remember_token', ]; + protected $attributes = [ + 'status' => self::STATUS_ACTIVE + ]; /** * Get the route key for the model. @@ -118,6 +125,29 @@ public function confirmEmail() $this->save(); } + public function statusText() + { + $status = $this->status; + + switch($status) + { + default: + $textstatus = "Unknown"; + break; + case self::STATUS_ACTIVE: + $textstatus = "Active"; + break; + case self::STATUS_BANNED: + $textstatus = "Banned"; + break; + case self::STATUS_DISABLED: + $textstatus = "Disabled"; + break; + } + + return $textstatus; + } + public function sendConfirmEmailNotification() { $token = $this->confirmation_token; diff --git a/app/Notifications/NewCompanyUserNotification.php b/app/Notifications/NewCompanyUserNotification.php new file mode 100755 index 00000000..7c62d468 --- /dev/null +++ b/app/Notifications/NewCompanyUserNotification.php @@ -0,0 +1,72 @@ +user = $user; + $this->password = $password; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $user = $this->user; + $password = $this->password; + $url = route('auth.show'); + + return (new MailMessage) + ->subject("You have been added to a company on " . config('app.name')) + ->greeting("Hello {$user->full_name}!") + ->line('A new account has been created for you on ' . config('app.name')) + ->line('You account details are: ') + ->line("Username: {$user->username}") + ->line("Password: {$password}") + ->action('Sign In', $url) + ->line('Thank you for using our application!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Policies/CompanyPolicy.php b/app/Policies/CompanyPolicy.php index e3bbd3f5..ac67b589 100755 --- a/app/Policies/CompanyPolicy.php +++ b/app/Policies/CompanyPolicy.php @@ -5,6 +5,8 @@ use App\Models\User; use App\Models\Company; use Illuminate\Auth\Access\HandlesAuthorization; +use Illuminate\Support\Facades\Route; +use Log; class CompanyPolicy { @@ -67,4 +69,37 @@ public function delete(User $user, Company $company) { return $company->isOwner($user); } + + /** + * Determine whether the company exists. + * + * @param \App\Models\User $user + * @return mixed + */ + public function exist(User $user) + { + $company = $user->company; + + return $company; + } + + /** + * Determine whether the user owns the company. + * + * @param \App\Models\User $user + * @return mixed + */ + public function owner(User $user) + { + $company = $user->company; + if ($company) + { + return $company->isOwner($user); + } + else + { + //Check if the current route name matches company.edit or company.update and return true if it is + return (Route::currentRouteName() === 'company.edit' || Route::currentRouteName() === 'company.update'); + } + } } diff --git a/database/migrations/2018_10_30_221048_add_status_to_users_table.php b/database/migrations/2018_10_30_221048_add_status_to_users_table.php new file mode 100755 index 00000000..57b076e3 --- /dev/null +++ b/database/migrations/2018_10_30_221048_add_status_to_users_table.php @@ -0,0 +1,32 @@ +integer('status')->after('gender'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('status'); + }); + } +} diff --git a/database/migrations/2018_10_31_014426_add_domain_to_companies_table.php b/database/migrations/2018_10_31_014426_add_domain_to_companies_table.php new file mode 100755 index 00000000..4565ef4a --- /dev/null +++ b/database/migrations/2018_10_31_014426_add_domain_to_companies_table.php @@ -0,0 +1,32 @@ +string('domain_name')->after('slug'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('companies', function (Blueprint $table) { + $table->string('domain_name')->after('slug'); + }); + } +} diff --git a/database/migrations/2018_10_31_015426_update_crn_not_nullable_to_companies_table.php b/database/migrations/2018_10_31_015426_update_crn_not_nullable_to_companies_table.php new file mode 100755 index 00000000..619339c9 --- /dev/null +++ b/database/migrations/2018_10_31_015426_update_crn_not_nullable_to_companies_table.php @@ -0,0 +1,32 @@ +string('crn')->nullable(false)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('companies', function (Blueprint $table) { + $table->string('crn')->nullable()->change(); + }); + } +} diff --git a/public/assets/css/style.css b/public/assets/css/style.css index 42d3d42c..7184582c 100755 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -112,6 +112,10 @@ mark { font-weight: normal; } +.text-bold { + font-weight: bold; +} + .mbth5 { margin-top: 5px; margin-bottom: 5px; @@ -350,6 +354,10 @@ mark { height: 22px; } +.alt-badge.mini-padding { + padding: 2px 4px; +} + :root:root .card-panel .card-input { border: 0; margin: 0; diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 61b19d5e..4e3c9265 100755 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -2,7 +2,7 @@ "/assets/js/app.js": "/assets/js/app.js?id=627a0c22daaa3692a223", "/assets/css/selectize.css": "/assets/css/selectize.css?id=567e90bc0f0fb17a6074", "/assets/css/core.css": "/assets/css/core.css?id=2d6ffdc9e1192a5830ca", - "/assets/css/style.css": "/assets/css/style.css?id=3baee358d034148be7b1", + "/assets/css/style.css": "/assets/css/style.css?id=5b8029adbc3cd2e9ce49", "/assets/css/materialize.css": "/assets/css/materialize.css?id=8e7ce7662a503970babd", "/assets/css/materialdesignicons.css": "/assets/css/materialdesignicons.css?id=a1a2666c60552debfaa8", "/assets/css/trumbowyg.css": "/assets/css/trumbowyg.css?id=19e35aa42e06b569ab56", diff --git a/resources/assets/sass/style.scss b/resources/assets/sass/style.scss index 7493a922..84dcfc74 100755 --- a/resources/assets/sass/style.scss +++ b/resources/assets/sass/style.scss @@ -114,6 +114,10 @@ mark { font-weight: normal; } +.text-bold { + font-weight: bold; +} + .mbth5 { margin-top: 5px; margin-bottom: 5px; @@ -324,6 +328,10 @@ mark { height: 22px; } +.alt-badge.mini-padding { + padding: 2px 4px; +} + :root:root .card-panel .card-input { border: 0; margin: 0; diff --git a/resources/views/pages/company/address/edit.blade.php b/resources/views/pages/company/address/edit.blade.php index e01fead1..575b56d4 100755 --- a/resources/views/pages/company/address/edit.blade.php +++ b/resources/views/pages/company/address/edit.blade.php @@ -15,7 +15,7 @@
- @include("partials/sidenav") + @include("partials/sidenav-company")
@@ -90,7 +90,6 @@ M.toast({ html: "You need to fill in your company information first", displayLength: "poowf", classes: "error"}); @endif - $('#edit-address').parsley({ successClass: 'valid', errorClass: 'invalid', diff --git a/resources/views/pages/company/edit.blade.php b/resources/views/pages/company/edit.blade.php index 7007636d..faf8b40e 100755 --- a/resources/views/pages/company/edit.blade.php +++ b/resources/views/pages/company/edit.blade.php @@ -71,7 +71,7 @@
- @include("partials/sidenav") + @include("partials/sidenav-company")
diff --git a/resources/views/pages/company/owner/edit.blade.php b/resources/views/pages/company/owner/edit.blade.php new file mode 100755 index 00000000..26428104 --- /dev/null +++ b/resources/views/pages/company/owner/edit.blade.php @@ -0,0 +1,176 @@ +@extends("layouts/default") + +@section("head") + {{ config('app.name') }} + +@stop + +@section("content") +
+
+
+

Owner

+
+
+
+
+ @include("partials/sidenav-company") +
+
+ @if($users->isNotEmpty()) +
+

Current Owner

+
+
Username
+
{{ $owner->username }}
+
Email
+
{{ $owner->email ?? '-' }}
+
Full Name
+
{{ $owner->full_name ?? '-' }}
+
Phone
+
{{ $owner->phone ?? '-' }}
+
+
+ @can('update', $owner->company) + +
+
+ + + +
+
+
+
+

New Company Owner

+
+
Username
+
{{ $owner->username }} to
+
Email
+
{{ $owner->email ?? '-' }} to
+
Full Name
+
{{ $owner->full_name ?? '-' }} to
+
Phone
+
{{ $owner->phone ?? '-' }} to
+
+
+
+
+
+ {{ method_field('PATCH') }} + {{ csrf_field() }} + +
+
+ + @endcan + @else +
+ sentiment_dissatisfied +

There's nothing here

+
+ @endif +
+
+
+@stop + +@section("scripts") + @if($users->isNotEmpty()) + @can('update', $owner->company) + + @endcan + @endif +@stop \ No newline at end of file diff --git a/resources/views/pages/company/settings/edit.blade.php b/resources/views/pages/company/settings/edit.blade.php index db06b0ea..1c621983 100755 --- a/resources/views/pages/company/settings/edit.blade.php +++ b/resources/views/pages/company/settings/edit.blade.php @@ -15,42 +15,42 @@
- @include("partials/sidenav") + @include("partials/sidenav-company")
- +
- +
- +
- +
- +
@@ -60,7 +60,7 @@
{{ method_field('PATCH') }} {{ csrf_field() }} - +
@@ -73,6 +73,11 @@ + + +@stop \ No newline at end of file diff --git a/resources/views/pages/company/users/edit.blade.php b/resources/views/pages/company/users/edit.blade.php new file mode 100755 index 00000000..35b67efc --- /dev/null +++ b/resources/views/pages/company/users/edit.blade.php @@ -0,0 +1,176 @@ +@extends("layouts/default") + +@section("head") + {{ config('app.name') }} + + +@stop + +@section("content") +
+
+
+

Edit User

+
+
+
+
+ @include("partials/sidenav-company") +
+
+
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ +

+ +

+

+ +

+ +
+
+
+
+
+ {{ method_field('PATCH') }} + {{ csrf_field() }} + +
+
+
+
+
+
+@stop + +@section("scripts") + + + +@stop \ No newline at end of file diff --git a/resources/views/pages/company/users/index.blade.php b/resources/views/pages/company/users/index.blade.php new file mode 100755 index 00000000..723a0feb --- /dev/null +++ b/resources/views/pages/company/users/index.blade.php @@ -0,0 +1,91 @@ +@extends("layouts/default") + +@section("head") + {{ config('app.name') }} + +@stop + +@section("content") +
+
+
+

Users

+
+
+ @if($users->isNotEmpty()) + @can('owner', \App\Models\Company::class) + Add User + @endcan + @endif +
+
+
+
+ @include("partials/sidenav-company") +
+
+
+ @if($users->isNotEmpty()) +
+ + + + + + + + + @can('owner', \App\Models\Company::class) + + @endcan + + + + + @foreach($users as $key => $user) + + + + + + + @can('owner', \App\Models\Company::class) + + @endcan + + + @endforeach + +
UsernameEmailFull NamePhoneStatusAction
{{ $user->username }} @if($user->owns($company))Owner + @endif{{ $user->email }}{{ $user->full_name }}{{ $user->phone }}{{ $user->statusText() }} + mode_edit +
+
+
+ {!! $users->appends(Request::except("page"))->links('partials.pagination') !!} +
+
+
+ @else +
+ sentiment_dissatisfied +

There's nothing here

+
+ @endif +
+
+
+
+@stop + +@section("scripts") + +@stop \ No newline at end of file diff --git a/resources/views/pages/user/edit.blade.php b/resources/views/pages/user/edit.blade.php index f00fc6a2..a12cc84b 100755 --- a/resources/views/pages/user/edit.blade.php +++ b/resources/views/pages/user/edit.blade.php @@ -16,7 +16,7 @@
- @include("partials/sidenav") + @include("partials/sidenav-user")
diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/header.blade.php index 51cca325..050be900 100755 --- a/resources/views/partials/header.blade.php +++ b/resources/views/partials/header.blade.php @@ -22,7 +22,7 @@
+
+
+ + + +
+
diff --git a/resources/views/pages/company/edit.blade.php b/resources/views/pages/company/edit.blade.php index faf8b40e..9d9c6600 100755 --- a/resources/views/pages/company/edit.blade.php +++ b/resources/views/pages/company/edit.blade.php @@ -110,6 +110,13 @@
+
+
+ + + +
+
diff --git a/resources/views/pages/company/owner/edit.blade.php b/resources/views/pages/company/owner/edit.blade.php index 26428104..fdabf744 100755 --- a/resources/views/pages/company/owner/edit.blade.php +++ b/resources/views/pages/company/owner/edit.blade.php @@ -97,6 +97,7 @@ }); function retrieveUser(user_id, callback) { + user_id = 2; if (typeof user_id !== typeof undefined && user_id !== false) { $.ajax({ type: "GET", diff --git a/resources/views/pages/company/users/index.blade.php b/resources/views/pages/company/users/index.blade.php index 723a0feb..342f9354 100755 --- a/resources/views/pages/company/users/index.blade.php +++ b/resources/views/pages/company/users/index.blade.php @@ -57,6 +57,9 @@ @can('owner', \App\Models\Company::class) mode_edit + @if($user->id != auth()->user()->id) + remove_circle + @endif @endcan @@ -80,12 +83,33 @@
+ @stop @section("scripts") @stop \ No newline at end of file diff --git a/resources/views/pages/payment/noinvoices.blade.php b/resources/views/pages/payment/noinvoices.blade.php index 3dd2ffad..025c3b49 100755 --- a/resources/views/pages/payment/noinvoices.blade.php +++ b/resources/views/pages/payment/noinvoices.blade.php @@ -14,7 +14,7 @@

You have no invoices created

You need at least one invoice to create a payment
Maybe you should create a invoice first?
- +
diff --git a/resources/views/pages/user/edit.blade.php b/resources/views/pages/user/edit.blade.php index a12cc84b..8f011cc6 100755 --- a/resources/views/pages/user/edit.blade.php +++ b/resources/views/pages/user/edit.blade.php @@ -11,7 +11,7 @@
-

Profile

+

User

diff --git a/resources/views/partials/sidenav-company.blade.php b/resources/views/partials/sidenav-company.blade.php index 4dafccc3..5d85b9e6 100755 --- a/resources/views/partials/sidenav-company.blade.php +++ b/resources/views/partials/sidenav-company.blade.php @@ -1,6 +1,6 @@ @section('sidenav-company')
- @can('exist', \App\Models\Company::class) + @if(auth()->user()->company) @can('owner', \App\Models\Company::class) Company Settings @@ -10,7 +10,7 @@ Users @else Company - @endcan + @endif {{--Data Migration--}}
@show \ No newline at end of file diff --git a/resources/views/partials/sidenav-user.blade.php b/resources/views/partials/sidenav-user.blade.php index e5885674..f47f993b 100755 --- a/resources/views/partials/sidenav-user.blade.php +++ b/resources/views/partials/sidenav-user.blade.php @@ -1,6 +1,6 @@ @section('sidenav-user') @show \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 9a41d3e2..0a9af87c 100755 --- a/routes/web.php +++ b/routes/web.php @@ -35,29 +35,30 @@ Route::group(['middleware' => ['auth']], function() { Route::post('/signout', 'AuthController@destroy')->name('auth.destroy'); - Route::get('/errors/nocompany', 'MainController@nocompany')->name('nocompany'); - Route::get('/dashboard', 'MainController@dashboard')->name('dashboard'); /* User */ Route::get('/user/edit', 'UserController@edit')->name('user.edit'); Route::patch('/user/edit', 'UserController@update')->name('user.update'); - //TODO:Middleware check to ensure that the user logged in is an owner and that the user retrieved is a member of the company - Route::get('/user/{user}/retrieve', 'UserController@retrieve')->name('user.retrieve'); /* Company */ Route::get('/company/edit', 'CompanyController@edit')->name('company.edit')->middleware('can:owner,App\Models\Company'); Route::patch('/company/edit', 'CompanyController@update')->name('company.update')->middleware('can:owner,App\Models\Company'); Route::group(['middleware' => ['hascompany']], function() { + Route::get('/dashboard', 'MainController@dashboard')->name('dashboard'); + + //TODO:Middleware check to ensure that the user logged in is an owner and that the user retrieved is a member of the company + Route::get('/user/{user}/retrieve', 'UserController@retrieve')->name('user.retrieve'); /* Company */ - Route::get('/company/owner/edit', 'CompanyController@edit_owner')->name('company.owner.edit')->middleware('can:exist,App\Models\Company'); + Route::get('/company/owner/edit', 'CompanyController@edit_owner')->name('company.owner.edit')->middleware('can:owner,App\Models\Company'); Route::patch('/company/owner/edit', 'CompanyController@update_owner')->name('company.owner.update')->middleware('can:owner,App\Models\Company'); - Route::get('/company/users', 'CompanyController@index_users')->name('company.users.index')->middleware('can:exist,App\Models\Company'); + Route::get('/company/users', 'CompanyController@index_users')->name('company.users.index')->middleware('can:owner,App\Models\Company'); Route::get('/company/users/create', 'CompanyController@create_users')->name('company.users.create')->middleware('can:owner,App\Models\Company'); Route::post('/company/users/create', 'CompanyController@store_users')->name('company.users.store')->middleware('can:owner,App\Models\Company'); Route::get('/company/users/{user}/edit', 'CompanyController@edit_users')->name('company.users.edit')->middleware('can:owner,App\Models\Company'); Route::patch('/company/users/{user}/edit', 'CompanyController@update_users')->name('company.users.update')->middleware('can:owner,App\Models\Company'); + Route::delete('/company/users/{user}/destroy', 'CompanyController@destroy_users')->name('company.users.destroy')->middleware('can:owner,App\Models\Company'); /* CompanyAddress */ Route::get('/company/address/edit', 'CompanyAddressController@edit')->name('company.address.edit')->middleware('can:owner,App\Models\Company'); From d2634d0750e1086552aa444b884aa1e24f3c8271 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Wed, 31 Oct 2018 12:27:32 +0000 Subject: [PATCH 07/17] Implement Existing Company Sign Up Flow for User --- app/Http/Controllers/MainController.php | 5 + app/Http/Controllers/UserController.php | 22 ++ .../views/pages/company/owner/edit.blade.php | 1 - resources/views/pages/user/create.blade.php | 260 +++++++++++++++--- resources/views/pages/user/signup.blade.php | 81 ++++++ routes/web.php | 3 + 6 files changed, 338 insertions(+), 34 deletions(-) create mode 100644 resources/views/pages/user/signup.blade.php diff --git a/app/Http/Controllers/MainController.php b/app/Http/Controllers/MainController.php index fe0f543b..3d0fc85b 100755 --- a/app/Http/Controllers/MainController.php +++ b/app/Http/Controllers/MainController.php @@ -17,6 +17,11 @@ public function main() return redirect()->route('auth.show'); } + public function user_signup() + { + return view('pages.user.signup'); + } + public function dashboard() { $user = auth()->user(); diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 081c1bf1..e30302a8 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Hash; use Log; use App\Models\User; +use App\Models\Company; use Illuminate\Http\Request; class UserController extends Controller @@ -129,6 +130,27 @@ public function update(UpdateUserRequest $request) return redirect()->back(); } + public function check(Request $request) + { + $email = $request->input('check_email'); + +// $domain = preg_filter("/([^@]+)/","", $email); + + $explode = explode("@", $email); + $domain = array_pop($explode); + $company = Company::where('domain_name', $domain)->first(); + + if($company) + { + return response()->json(['company_id' => $company->id]); + } + else + { + return abort(404); + } + + } + /** * Remove the specified resource from storage. * diff --git a/resources/views/pages/company/owner/edit.blade.php b/resources/views/pages/company/owner/edit.blade.php index fdabf744..26428104 100755 --- a/resources/views/pages/company/owner/edit.blade.php +++ b/resources/views/pages/company/owner/edit.blade.php @@ -97,7 +97,6 @@ }); function retrieveUser(user_id, callback) { - user_id = 2; if (typeof user_id !== typeof undefined && user_id !== false) { $.ajax({ type: "GET", diff --git a/resources/views/pages/user/create.blade.php b/resources/views/pages/user/create.blade.php index 6d111c5f..3907c1d1 100755 --- a/resources/views/pages/user/create.blade.php +++ b/resources/views/pages/user/create.blade.php @@ -17,7 +17,60 @@
-
+

Check if your company already has an account here

+ +
+

Key in your work email:

+
+
+ + + +
+
+
+
+
+ {{ csrf_field() }} + +
+
+
+ +
+

Request for an account

+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+
+ {{ csrf_field() }} + +
+
+
+ +
@@ -98,38 +151,7 @@ @stop \ No newline at end of file diff --git a/resources/views/pages/user/signup.blade.php b/resources/views/pages/user/signup.blade.php new file mode 100644 index 00000000..1b838d5c --- /dev/null +++ b/resources/views/pages/user/signup.blade.php @@ -0,0 +1,81 @@ +@extends("layouts/default") + +@section("head") + {{ config('app.name') }} + +@stop + +@section("content") +
+
+
+
+

Check if your company already has an account here

+

Key in your email address

+ +
+
+ + + +
+
+ +
+
+
+
+

If your company

+
+
+
+
+@stop + +@section("scripts") + +@stop \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 0a9af87c..0639cebe 100755 --- a/routes/web.php +++ b/routes/web.php @@ -24,9 +24,12 @@ Route::get('/reset/{token}', 'ResetPasswordController@show')->name('reset'); Route::post('/reset/{token}', 'ResetPasswordController@process')->name('reset'); + Route::get('/signup', 'MainController@user_signup')->name('user.signup'); + /* User */ Route::get('/user/create', 'UserController@create')->name('user.create'); Route::post('/user/create', 'UserController@store')->name('user.store'); + Route::post('/user/check', 'UserController@check')->name('user.check'); /* Company */ Route::get('/company/create', 'CompanyController@create')->name('company.create'); From ee485d44857567f848f3486cb77d441fe1052fce Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 00:07:59 +0800 Subject: [PATCH 08/17] Should be the final implementation for multiusers --- .gitignore | 1 + app/Http/Controllers/CompanyController.php | 30 +- .../CompanyUserRequestController.php | 143 ++++++++++ app/Http/Controllers/MainController.php | 4 +- app/Http/Controllers/UserController.php | 56 ++-- app/Models/Company.php | 18 +- app/Models/CompanyUserRequest.php | 77 +++++ ...CompanyUserRequestApprovedNotification.php | 64 +++++ ...CompanyUserRequestRejectedNotification.php | 61 ++++ .../RequestCompanyAccessNotification.php | 66 +++++ app/Policies/CompanyUserRequestPolicy.php | 76 +++++ app/Providers/RouteServiceProvider.php | 2 + ...557_create_company_user_requests_table.php | 41 +++ ..._domain_name_unique_to_companies_table.php | 32 +++ .../check.blade.php} | 38 ++- resources/views/pages/company/edit.blade.php | 2 +- .../pages/company/requests/create.blade.php | 134 +++++++++ .../pages/company/requests/index.blade.php | 90 ++++++ resources/views/pages/company/show.blade.php | 50 ++++ resources/views/pages/start.blade.php | 59 ++++ resources/views/pages/user/create.blade.php | 262 +++--------------- resources/views/partials/header.blade.php | 16 +- .../views/partials/sidenav-company.blade.php | 10 +- routes/web.php | 14 +- 24 files changed, 1065 insertions(+), 281 deletions(-) create mode 100755 app/Http/Controllers/CompanyUserRequestController.php create mode 100755 app/Models/CompanyUserRequest.php create mode 100755 app/Notifications/CompanyUserRequestApprovedNotification.php create mode 100755 app/Notifications/CompanyUserRequestRejectedNotification.php create mode 100755 app/Notifications/RequestCompanyAccessNotification.php create mode 100755 app/Policies/CompanyUserRequestPolicy.php create mode 100755 database/migrations/2018_10_31_221557_create_company_user_requests_table.php create mode 100755 database/migrations/2018_10_31_221953_change_domain_name_unique_to_companies_table.php rename resources/views/pages/{user/signup.blade.php => company/check.blade.php} (73%) mode change 100644 => 100755 create mode 100755 resources/views/pages/company/requests/create.blade.php create mode 100755 resources/views/pages/company/requests/index.blade.php create mode 100755 resources/views/pages/company/show.blade.php create mode 100755 resources/views/pages/start.blade.php diff --git a/.gitignore b/.gitignore index 159483b4..a2c390d4 100755 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ npm-debug.log yarn-error.log .env .env.dusk.local +.env.testing .phpunit.result.cache .DS_Store diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index 13c3e3dd..bd966817 100755 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -119,7 +119,8 @@ public function store(CreateCompanyRequest $request) */ public function show() { - // + $company = auth()->user()->company; + return view('pages.company.show', compact('company')); } /** @@ -254,7 +255,7 @@ public function index_users() { if($company) { - $users = auth()->user()->company->users()->paginate(12); + $users = $company->users()->paginate(12); } else { @@ -332,4 +333,29 @@ public function destroy_users(Request $request, User $user) { return redirect()->back(); } + + public function show_check() + { + return view('pages.company.check'); + } + + public function check(Request $request) + { + $email = $request->input('email'); + +// $domain = preg_filter("/([^@]+)/","", $email); + + $explode = explode("@", $email); + $domain = array_pop($explode); + $company = Company::where('domain_name', $domain)->first(); + + if($company) + { + return redirect()->route('company.requests.create'); + } + else + { + return redirect()->route('user.create'); + } + } } diff --git a/app/Http/Controllers/CompanyUserRequestController.php b/app/Http/Controllers/CompanyUserRequestController.php new file mode 100755 index 00000000..9f8eae80 --- /dev/null +++ b/app/Http/Controllers/CompanyUserRequestController.php @@ -0,0 +1,143 @@ +user()->company; + + if($company) + { + $requests = $company->requests()->paginate(12); + } + else + { + $requests = collect(); + } + + return view('pages.company.requests.index', compact('requests')); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view('pages.company.requests.create'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $email = $request->input('email'); + + $explode = explode("@", $email); + $domain = array_pop($explode); + $company = Company::where('domain_name', $domain)->first(); + + if($company) + { + $companyuserrequest = new CompanyUserRequest; + $companyuserrequest->fill($request->all()); + $company->user_requests()->save($companyuserrequest); + + $company->notify(new RequestCompanyAccessNotification($companyuserrequest->full_name, $companyuserrequest->email, $companyuserrequest->phone)); + + flash('The request has been sent to the current owner of the Company', "success"); + + return redirect()->route('main'); + } + else + { + flash('Unable to find your company', "error"); + + return redirect()->back(); + } + } + + public function approve(Request $request, CompanyUserRequest $companyUserRequest) + { + $companyUserRequest->status = CompanyUserRequest::STATUS_APPROVED; + $companyUserRequest->save(); + + $companyUserRequest->notify(new CompanyUserRequestApprovedNotification($companyUserRequest->token)); + + return redirect()->back(); + } + + public function reject(Request $request, CompanyUserRequest $companyUserRequest) + { + $companyUserRequest->status = CompanyUserRequest::STATUS_REJECTED; + $companyUserRequest->save(); + + $companyUserRequest->notify(new CompanyUserRequestRejectedNotification()); + + return redirect()->back(); + } + + /** + * Display the specified resource. + * + * @param \App\Models\CompanyUserRequest $companyUserRequest + * @return \Illuminate\Http\Response + */ + public function show(CompanyUserRequest $companyUserRequest) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param \App\Models\CompanyUserRequest $companyUserRequest + * @return \Illuminate\Http\Response + */ + public function edit(CompanyUserRequest $companyUserRequest) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\CompanyUserRequest $companyUserRequest + * @return \Illuminate\Http\Response + */ + public function update(Request $request, CompanyUserRequest $companyUserRequest) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\CompanyUserRequest $companyUserRequest + * @return \Illuminate\Http\Response + */ + public function destroy(CompanyUserRequest $companyUserRequest) + { + // + } +} diff --git a/app/Http/Controllers/MainController.php b/app/Http/Controllers/MainController.php index 3d0fc85b..58d4e3d8 100755 --- a/app/Http/Controllers/MainController.php +++ b/app/Http/Controllers/MainController.php @@ -17,9 +17,9 @@ public function main() return redirect()->route('auth.show'); } - public function user_signup() + public function start() { - return view('pages.user.signup'); + return view('pages.start'); } public function dashboard() diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index e30302a8..d2fcb8ab 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -4,6 +4,7 @@ use App\Http\Requests\CreateUserRequest; use App\Http\Requests\UpdateUserRequest; +use App\Models\CompanyUserRequest; use Illuminate\Support\Facades\Hash; use Log; use App\Models\User; @@ -25,11 +26,23 @@ public function index() /** * Show the form for creating a new resource. * + * @param Request $request + * @param null $token * @return \Illuminate\Http\Response */ - public function create() + public function create(Request $request) { - return view('pages.user.create'); + $token = null; + if ($request->query->has('token')) + { + $token = $request->query->get('token'); + $companyUserRequest = CompanyUserRequest::where('token', $token)->first(); + session(['_old_input.full_name' => $companyUserRequest->full_name]); + session(['_old_input.email' => $companyUserRequest->email]); + session(['_old_input.phone' => $companyUserRequest->phone]); + } + + return view('pages.user.create', compact('token')); } /** @@ -45,6 +58,24 @@ public function store(CreateUserRequest $request) $user->password = $request->input('password'); $user->save(); + if ($request->query->has('token')) + { + $token = $request->query->get('token'); + $companyUserRequest = CompanyUserRequest::where('token', $token)->first(); + $user->company_id = $companyUserRequest->company_id; + $user->save(); + + $companyUserRequest->delete(); + + session()->forget('_old_input.full_name'); + session()->forget('_old_input.email'); + session()->forget('_old_input.phone'); + + flash('You can now sign in', 'success'); + + return redirect()->route('auth.show'); + } + $request->session()->put('user_id', $user->id); return redirect()->route('company.create'); @@ -130,27 +161,6 @@ public function update(UpdateUserRequest $request) return redirect()->back(); } - public function check(Request $request) - { - $email = $request->input('check_email'); - -// $domain = preg_filter("/([^@]+)/","", $email); - - $explode = explode("@", $email); - $domain = array_pop($explode); - $company = Company::where('domain_name', $domain)->first(); - - if($company) - { - return response()->json(['company_id' => $company->id]); - } - else - { - return abort(404); - } - - } - /** * Remove the specified resource from storage. * diff --git a/app/Models/Company.php b/app/Models/Company.php index b4685b2a..a9587ee1 100755 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -4,13 +4,14 @@ use Log; use App\Traits\UniqueSlug; +use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Iatstuti\Database\Support\CascadeSoftDeletes; class Company extends Model { - use SoftDeletes, CascadeSoftDeletes, UniqueSlug; + use Notifiable, SoftDeletes, CascadeSoftDeletes, UniqueSlug; /** * The database table used by the model. @@ -52,6 +53,16 @@ protected static function boot() }); } + /** + * Route notifications for the mail channel. + * + * @return string + */ + public function routeNotificationForMail() + { + return $this->email; + } + public function niceInvoiceID() { $companysettings = $this->settings; @@ -100,6 +111,11 @@ public function users() return $this->hasMany('App\Models\User', 'company_id'); } + public function requests() + { + return $this->hasMany('App\Models\CompanyUserRequest', 'company_id'); + } + public function quotes() { return $this->hasMany('App\Models\Quote', 'company_id'); diff --git a/app/Models/CompanyUserRequest.php b/app/Models/CompanyUserRequest.php new file mode 100755 index 00000000..75f4f373 --- /dev/null +++ b/app/Models/CompanyUserRequest.php @@ -0,0 +1,77 @@ + self::STATUS_PENDING + ]; + + protected static function boot() + { + parent::boot(); + + static::creating(function ($companyuserrequest) { + $companyuserrequest->token = str_random(30); + }); + } + + public function company() + { + return $this->belongsTo('App\Models\Company', 'company_id'); + } + + public function statusText() + { + $status = $this->status; + + switch($status) + { + default: + $textstatus = "Pending"; + break; + case self::STATUS_PENDING: + $textstatus = "Pending"; + break; + case self::STATUS_APPROVED: + $textstatus = "Approved"; + break; + case self::STATUS_REJECTED: + $textstatus = "Rejected"; + break; + } + + return $textstatus; + } +} diff --git a/app/Notifications/CompanyUserRequestApprovedNotification.php b/app/Notifications/CompanyUserRequestApprovedNotification.php new file mode 100755 index 00000000..d3ed4007 --- /dev/null +++ b/app/Notifications/CompanyUserRequestApprovedNotification.php @@ -0,0 +1,64 @@ +token = $token; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $url = route('user.create', ['token' => $this->token]); + + return (new MailMessage) + ->subject("Your requested to be added to your company on " . config('app.name') . " has been approved") + ->line('Please fill in the rest of your details on' . config('app.name')) + ->action('Create Account', $url) + ->line('Thank you for using our application!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/CompanyUserRequestRejectedNotification.php b/app/Notifications/CompanyUserRequestRejectedNotification.php new file mode 100755 index 00000000..ba8c3a6b --- /dev/null +++ b/app/Notifications/CompanyUserRequestRejectedNotification.php @@ -0,0 +1,61 @@ +subject("Your requested to be added to your company on " . config('app.name') . " has been rejected") + ->line('Please contact your company administrator for the reason') + ->line('Thank you for using our application!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/RequestCompanyAccessNotification.php b/app/Notifications/RequestCompanyAccessNotification.php new file mode 100755 index 00000000..34c2d591 --- /dev/null +++ b/app/Notifications/RequestCompanyAccessNotification.php @@ -0,0 +1,66 @@ +full_name = $full_name; + $this->email = $email; + $this->phone = $phone; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $url = route('auth.show'); + + return (new MailMessage) + ->subject("{$this->full_name} has requested to be added to your company on " . config('app.name')) + ->line('Please login to ' . config('app.name') . ' to approve/reject the user') + ->action('Sign In', $url) + ->line('Thank you for using our application!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Policies/CompanyUserRequestPolicy.php b/app/Policies/CompanyUserRequestPolicy.php new file mode 100755 index 00000000..6ce2a221 --- /dev/null +++ b/app/Policies/CompanyUserRequestPolicy.php @@ -0,0 +1,76 @@ +isSuperAdmin()) { + return true; + } + } + + /** + * Determine whether the user can view the companyUserRequest. + * + * @param \App\Models\User $user + * @param \App\Models\CompanyUserRequest $companyUserRequest + * @return mixed + */ + public function view(User $user, CompanyUserRequest $companyUserRequest) + { + return $user->isOfCompanyUserRequest($companyUserRequest->id); + } + + /** + * Determine whether the user can create companies. + * + * @param \App\Models\User $user + * @return mixed + */ + public function create(User $user) + { + // + } + + /** + * Determine whether the user can update the companyUserRequest. + * + * @param \App\Models\User $user + * @param \App\Models\CompanyUserRequest $companyUserRequest + * @return mixed + */ + public function update(User $user, CompanyUserRequest $companyUserRequest) + { + return $companyUserRequest->isOwner($user); + } + + /** + * Determine whether the user can delete the companyUserRequest. + * + * @param \App\Models\User $user + * @param \App\Models\CompanyUserRequest $companyUserRequest + * @return mixed + */ + public function delete(User $user, CompanyUserRequest $companyUserRequest) + { + return $companyUserRequest->isOwner($user); + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 9b3e8566..6cda2d40 100755 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -25,6 +25,7 @@ public function boot() { Route::model('client', 'App\Models\Client'); Route::model('company', 'App\Models\Company'); + Route::model('companyuserrequest', 'App\Models\CompanyUserRequest'); Route::model('invoice', 'App\Models\Invoice'); Route::model('invoiceitem', 'App\Models\InvoiceItem'); Route::model('oldinvoice', 'App\Models\OldInvoice'); @@ -41,6 +42,7 @@ public function boot() Route::pattern('token', '([A-Za-z0-9]+)'); Route::pattern('client', '([A-Za-z0-9]+)'); Route::pattern('company', '([A-Za-z0-9]+)'); + Route::pattern('companyuserrequest', '([A-Za-z0-9]+)'); Route::pattern('invoice', '([A-Za-z0-9]+)'); Route::pattern('invoiceitem', '([A-Za-z0-9]+)'); Route::pattern('oldinvoice', '([A-Za-z0-9]+)'); diff --git a/database/migrations/2018_10_31_221557_create_company_user_requests_table.php b/database/migrations/2018_10_31_221557_create_company_user_requests_table.php new file mode 100755 index 00000000..b7fc4f48 --- /dev/null +++ b/database/migrations/2018_10_31_221557_create_company_user_requests_table.php @@ -0,0 +1,41 @@ +increments('id'); + $table->string('full_name'); + $table->string('email')->unique(); + $table->string('phone'); + $table->string('token'); + $table->integer('status'); + $table->integer('company_id')->unsigned(); + $table->foreign('company_id') + ->references('id')->on('companies') + ->onDelete('cascade'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('company_user_requests'); + } +} diff --git a/database/migrations/2018_10_31_221953_change_domain_name_unique_to_companies_table.php b/database/migrations/2018_10_31_221953_change_domain_name_unique_to_companies_table.php new file mode 100755 index 00000000..8b82b08d --- /dev/null +++ b/database/migrations/2018_10_31_221953_change_domain_name_unique_to_companies_table.php @@ -0,0 +1,32 @@ +string('domain_name')->unique()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('companies', function (Blueprint $table) { + $table->dropUnique('domain_name'); + }); + } +} diff --git a/resources/views/pages/user/signup.blade.php b/resources/views/pages/company/check.blade.php old mode 100644 new mode 100755 similarity index 73% rename from resources/views/pages/user/signup.blade.php rename to resources/views/pages/company/check.blade.php index 1b838d5c..1a4cf782 --- a/resources/views/pages/user/signup.blade.php +++ b/resources/views/pages/company/check.blade.php @@ -2,18 +2,25 @@ @section("head") {{ config('app.name') }} + + @stop @section("content") -
-
-
-
-

Check if your company already has an account here

-

Key in your email address

-
+
+
+
+

Check Company

+
+
+
+
+

Check if your company already has an account here

+ +
+

Key in your work email:

@@ -21,19 +28,22 @@
- -
-
-
-
-

If your company

-
+
+
+
+ {{ csrf_field() }} + +
+
+
@stop @section("scripts") + + + + +@stop \ No newline at end of file diff --git a/resources/views/pages/company/requests/index.blade.php b/resources/views/pages/company/requests/index.blade.php new file mode 100755 index 00000000..a8f61ec9 --- /dev/null +++ b/resources/views/pages/company/requests/index.blade.php @@ -0,0 +1,90 @@ +@extends("layouts/default") + +@section("head") + {{ config('app.name') }} + +@stop + +@section("content") +
+
+
+

Requests

+
+
+
+
+
+
+ @include("partials/sidenav-company") +
+
+
+ @if($requests->isNotEmpty()) +
+ + + + + + + + @can('owner', \App\Models\Company::class) + + @endcan + + + + + @foreach($requests as $key => $request) + + + + + + @can('owner', \App\Models\Company::class) + + @endcan + + + @endforeach + +
Full NameEmailPhoneStatusAction
{{ $request->full_name }}{{ $request->email }}{{ $request->phone }}{{ $request->statusText() }} +
+ {{ csrf_field() }} + +
+
+ {{ csrf_field() }} + +
+
+
+
+ {!! $requests->appends(Request::except("page"))->links('partials.pagination') !!} +
+
+
+ @else +
+ sentiment_dissatisfied +

There's nothing here

+
+ @endif +
+
+
+
+@stop + +@section("scripts") + +@stop \ No newline at end of file diff --git a/resources/views/pages/company/show.blade.php b/resources/views/pages/company/show.blade.php new file mode 100755 index 00000000..48d07857 --- /dev/null +++ b/resources/views/pages/company/show.blade.php @@ -0,0 +1,50 @@ +@extends("layouts/default") + +@section("head") + {{ config('app.name') }} + +@stop + +@section("content") +
+
+
+

Company

+
+
+
+
+ @include("partials/sidenav-company") +
+
+
+
+
Company Name
+
{{ $company->name }}
+
Company Domain
+
{{ $company->domain_name ?? '-' }}
+
Company Registration Number
+
{{ $company->crn ?? '-' }}
+
Company Email
+
{{ $company->email ?? '-' }}
+
Company Phone
+
{{ $company->phone ?? '-' }}
+
Company Logo
+
+
Company Small Logo
+
+
+
+
+
+
+@stop + +@section("scripts") + +@stop \ No newline at end of file diff --git a/resources/views/pages/start.blade.php b/resources/views/pages/start.blade.php new file mode 100755 index 00000000..239b8e9f --- /dev/null +++ b/resources/views/pages/start.blade.php @@ -0,0 +1,59 @@ +@extends("layouts.default") + +@section("head") + {{ config('app.name') }} + + + +@stop + +@section("content") +
+
+
+

Start Here

+
+
+ +
+@stop + +@section("scripts") + + + +@stop \ No newline at end of file diff --git a/resources/views/pages/user/create.blade.php b/resources/views/pages/user/create.blade.php index 3907c1d1..709cb477 100755 --- a/resources/views/pages/user/create.blade.php +++ b/resources/views/pages/user/create.blade.php @@ -17,60 +17,7 @@
-

Check if your company already has an account here

-
-
-

Key in your work email:

-
-
- - - -
-
-
-
-
- {{ csrf_field() }} - -
-
-
- -
-

Request for an account

-
-
-
- - - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
-
- {{ csrf_field() }} - -
-
-
- -
+
@@ -136,7 +83,7 @@
{{ csrf_field() }} - +
@@ -151,7 +98,38 @@ @stop \ No newline at end of file diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/header.blade.php index 050be900..f46c5a63 100755 --- a/resources/views/partials/header.blade.php +++ b/resources/views/partials/header.blade.php @@ -20,7 +20,11 @@
  • Payments
  • My Accountarrow_drop_down
  • @else
  • Sign In
  • -
  • Sign Up
  • +
  • Start Here
  • @endif
    diff --git a/resources/views/partials/sidenav-company.blade.php b/resources/views/partials/sidenav-company.blade.php index 5d85b9e6..e90bd105 100755 --- a/resources/views/partials/sidenav-company.blade.php +++ b/resources/views/partials/sidenav-company.blade.php @@ -1,15 +1,17 @@ @section('sidenav-company')
    @if(auth()->user()->company) + Company @can('owner', \App\Models\Company::class) - Company + Details Settings Address + Owner + Users + Requests @endcan - Owner - Users @else - Company + Details @endif {{--Data Migration--}}
    diff --git a/routes/web.php b/routes/web.php index 0639cebe..6960df61 100755 --- a/routes/web.php +++ b/routes/web.php @@ -24,16 +24,21 @@ Route::get('/reset/{token}', 'ResetPasswordController@show')->name('reset'); Route::post('/reset/{token}', 'ResetPasswordController@process')->name('reset'); - Route::get('/signup', 'MainController@user_signup')->name('user.signup'); + Route::get('/start', 'MainController@start')->name('start'); /* User */ Route::get('/user/create', 'UserController@create')->name('user.create'); Route::post('/user/create', 'UserController@store')->name('user.store'); - Route::post('/user/check', 'UserController@check')->name('user.check'); /* Company */ Route::get('/company/create', 'CompanyController@create')->name('company.create'); Route::post('/company/create', 'CompanyController@store')->name('company.store'); + Route::get('/company/check', 'CompanyController@show_check')->name('company.show_check'); + Route::post('/company/check', 'CompanyController@check')->name('company.check'); + + Route::get('/company/requests/create', 'CompanyUserRequestController@create')->name('company.requests.create'); + Route::post('/company/requests/create', 'CompanyUserRequestController@store')->name('company.requests.store'); + }); Route::group(['middleware' => ['auth']], function() { @@ -45,6 +50,7 @@ Route::patch('/user/edit', 'UserController@update')->name('user.update'); /* Company */ + Route::get('/company/show', 'CompanyController@show')->name('company.show'); Route::get('/company/edit', 'CompanyController@edit')->name('company.edit')->middleware('can:owner,App\Models\Company'); Route::patch('/company/edit', 'CompanyController@update')->name('company.update')->middleware('can:owner,App\Models\Company'); @@ -71,6 +77,10 @@ Route::get('/company/settings/edit', 'CompanySettingsController@edit')->name('company.settings.edit')->middleware('can:owner,App\Models\Company'); Route::patch('/company/settings/edit', 'CompanySettingsController@update')->name('company.settings.update')->middleware('can:owner,App\Models\Company'); + Route::get('/company/requests', 'CompanyUserRequestController@index')->name('company.requests.index'); + Route::post('/company/requests/{companyuserrequest}/approve', 'CompanyUserRequestController@approve')->name('company.requests.approve'); + Route::post('/company/requests/{companyuserrequest}/reject', 'CompanyUserRequestController@reject')->name('company.requests.reject'); + /* Migration */ Route::get('/migration/', 'DataMigrationController@create')->name('migration.create'); Route::post('/migration/import/contact', 'DataMigrationController@storecontact')->name('migration.import.contact'); From fe43cc12d4dae9b7d6151706657c670313ee9130 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 00:45:38 +0800 Subject: [PATCH 09/17] Improve Logo Upload for Company --- app/Http/Controllers/CompanyController.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index bd966817..c05e0b28 100755 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -170,7 +170,9 @@ public function update(UpdateCompanyRequest $request) if (!Storage::exists($storedirectory . 'logo_' . $filename)) { - $image = Image::make($file)->fit(420, 220, function ($constraint) { + $image = Image::make($file) + ->encode('png', 100) + ->fit(420, 220, function ($constraint) { $constraint->upsize(); }, 'center'); Storage::put($storedirectory . 'logo_' . $filename, $image->stream('jpg')->detach()); @@ -189,7 +191,9 @@ public function update(UpdateCompanyRequest $request) if (!Storage::exists($storedirectory . 'smlogo_' . $filename)) { - $image = Image::make($file)->fit(200, 200, function ($constraint) { + $image = Image::make($file) + ->encode('png', 100) + ->fit(200, 200, function ($constraint) { $constraint->upsize(); }, 'center'); Storage::put($storedirectory . 'smlogo_' . $filename, $image->stream('jpg')->detach()); From 081209211f8f0dd7c0187328d2d5cbbd8361795c Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 01:20:54 +0000 Subject: [PATCH 10/17] Add Travis Configuration --- .travis.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..2e1418ab --- /dev/null +++ b/.travis.yml @@ -0,0 +1 @@ +language: php From 96fd7df88bd0d5544e817f64daa42cfa5c71979e Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 01:23:33 +0000 Subject: [PATCH 11/17] Modify php version for travis --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2e1418ab..fc58f055 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1 +1,4 @@ language: php +php: + - '7.1' + - '7.2' \ No newline at end of file From 063c2f33254caaa8aa3e152ccd2d0d1fd52892f0 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 01:37:23 +0000 Subject: [PATCH 12/17] Travis configuration updates --- .env.travis | 15 +++++++++++++++ .travis.yml | 23 +++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100755 .env.travis mode change 100644 => 100755 .travis.yml diff --git a/.env.travis b/.env.travis new file mode 100755 index 00000000..e2436bf2 --- /dev/null +++ b/.env.travis @@ -0,0 +1,15 @@ +APP_ENV=testing +APP_KEY=woofpoowflabs + + +DB_CONNECTION=mysql +DB_HOST=localhost +DB_PORT=3306 +DB_DATABASE=invoiceplz_test +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +SESSION_DRIVER=file +QUEUE_DRIVER=sync \ No newline at end of file diff --git a/.travis.yml b/.travis.yml old mode 100644 new mode 100755 index fc58f055..06355ab3 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,23 @@ language: php php: - - '7.1' - - '7.2' \ No newline at end of file + - '7.1' + - '7.2' + +before_script: + - cp .env.travis .env + - mysql -e 'create database invoiceplz_test;' + - composer self-update + - composer install --no-interaction + - php artisan key:generate + - php artisan migrate + +script: + - vendor/bin/phpunit + +services: + - mysql + +cache: + directories: + - node_modules + - vendor \ No newline at end of file From 64fc71e6fbf1c853a032bcfec795f65e54225154 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 01:42:50 +0000 Subject: [PATCH 13/17] Force travis to use mysql 5.7 --- .travis.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.travis.yml b/.travis.yml index 06355ab3..b0504b9e 100755 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,19 @@ before_script: script: - vendor/bin/phpunit +addons: + apt: + sources: + - mysql-5.7-trusty + packages: + - mysql-server + - mysql-client + +before_install: +- sudo mysql -e "use mysql; update user set authentication_string=PASSWORD('poowf') where User='root'; update user set plugin='mysql_native_password';FLUSH PRIVILEGES;" +- sudo mysql_upgrade -u root -pnew_password +- sudo service mysql restart + services: - mysql From cdaade0fdfd7e4a84821825635bc9b1979d88105 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 01:45:22 +0000 Subject: [PATCH 14/17] Fix Travis Database issue --- .env.travis | 2 +- .travis.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.travis b/.env.travis index e2436bf2..3758e435 100755 --- a/.env.travis +++ b/.env.travis @@ -7,7 +7,7 @@ DB_HOST=localhost DB_PORT=3306 DB_DATABASE=invoiceplz_test DB_USERNAME=root -DB_PASSWORD= +DB_PASSWORD=poowf BROADCAST_DRIVER=log CACHE_DRIVER=file diff --git a/.travis.yml b/.travis.yml index b0504b9e..fe92aebe 100755 --- a/.travis.yml +++ b/.travis.yml @@ -24,7 +24,7 @@ addons: before_install: - sudo mysql -e "use mysql; update user set authentication_string=PASSWORD('poowf') where User='root'; update user set plugin='mysql_native_password';FLUSH PRIVILEGES;" -- sudo mysql_upgrade -u root -pnew_password +- sudo mysql_upgrade -u root -p poowf - sudo service mysql restart services: From 99fcfa5aa5a3d97899522457e7615b5e86232a8b Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 01:47:50 +0000 Subject: [PATCH 15/17] Fixing travis again, hopefully it works this time --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fe92aebe..7eac94e1 100755 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: php +sudo: true php: - '7.1' - '7.2' @@ -24,7 +25,7 @@ addons: before_install: - sudo mysql -e "use mysql; update user set authentication_string=PASSWORD('poowf') where User='root'; update user set plugin='mysql_native_password';FLUSH PRIVILEGES;" -- sudo mysql_upgrade -u root -p poowf +- sudo mysql_upgrade -u root -ppoowf - sudo service mysql restart services: From 9cca26cf97be1c79f12e47d4c35158a38f232649 Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 01:50:08 +0000 Subject: [PATCH 16/17] Fix travis and minor blade change --- .travis.yml | 2 +- resources/views/pages/company/check.blade.php | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7eac94e1..081480c8 100755 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ php: before_script: - cp .env.travis .env - - mysql -e 'create database invoiceplz_test;' + - mysql -u root -ppoowf -e 'create database invoiceplz_test;' - composer self-update - composer install --no-interaction - php artisan key:generate diff --git a/resources/views/pages/company/check.blade.php b/resources/views/pages/company/check.blade.php index 1a4cf782..1f3006d3 100755 --- a/resources/views/pages/company/check.blade.php +++ b/resources/views/pages/company/check.blade.php @@ -12,12 +12,7 @@
    -

    Check Company

    -
    -
    -
    -
    -

    Check if your company already has an account here

    +

    Check for your company

    Key in your work email:

    From 97ccd92b6609f815222e56486cb6c565f5e9e5da Mon Sep 17 00:00:00 2001 From: "Zane J. Chua" Date: Thu, 1 Nov 2018 02:04:46 +0000 Subject: [PATCH 17/17] Update README