diff --git a/app/Http/Controllers/Oasis/AdminController.php b/app/Http/Controllers/Oasis/AdminController.php index ae9ae7fc..484e1b5e 100644 --- a/app/Http/Controllers/Oasis/AdminController.php +++ b/app/Http/Controllers/Oasis/AdminController.php @@ -34,13 +34,21 @@ class AdminController extends Controller return response($result[0], 200); } + /** + * Register new client and send email with payment details + * + * @param Request $request + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response + */ public function register_new_client(Request $request) { + // Create user $newbie = User::create([ 'email' => $request->email, 'password' => Hash::make(Str::random()), ]); + // Store user settings $newbie ->settings() ->create([ @@ -53,10 +61,19 @@ class AdminController extends Controller 'country' => $request->country, 'phone_number' => $request->phone_number, 'timezone' => '1.0', + ]); + + // Store subscription request + $newbie + ->subscriptionRequest() + ->create([ 'requested_plan' => $request->plan, ]); - $newbie->notify(new PaymentRequiredNotification()); + // Send notification with payment details + $newbie->notify(new PaymentRequiredNotification( + $newbie->subscriptionRequest + )); return response( new UserResource($newbie), 201 diff --git a/app/Models/Oasis/SubscriptionRequest.php b/app/Models/Oasis/SubscriptionRequest.php new file mode 100644 index 00000000..88cfed23 --- /dev/null +++ b/app/Models/Oasis/SubscriptionRequest.php @@ -0,0 +1,29 @@ +id = (string)Str::uuid(); + }); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index c3a8c014..a4704bf7 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Notifications\ResetPassword; use App\Services\HelperService; use App\Services\StripeService; +use App\Traits\Oasis; use ByteUnits\Metric; use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -20,6 +21,8 @@ class User extends Authenticatable { use Notifiable, Billable, Sortable, HasFactory, HasApiTokens; + use Oasis; + protected $guarded = [ 'id', 'role' diff --git a/app/Notifications/Oasis/PaymentRequiredNotification.php b/app/Notifications/Oasis/PaymentRequiredNotification.php index 76b7429f..80b07fda 100644 --- a/app/Notifications/Oasis/PaymentRequiredNotification.php +++ b/app/Notifications/Oasis/PaymentRequiredNotification.php @@ -14,11 +14,11 @@ class PaymentRequiredNotification extends Notification /** * Create a new notification instance. * - * @return void + * @param $order */ - public function __construct() + public function __construct($order) { - // + $this->order = $order; } /** @@ -40,10 +40,13 @@ class PaymentRequiredNotification extends Notification */ public function toMail($notifiable) { + $url = url("/platba/{$this->order['id']}"); + return (new MailMessage) - ->line('The introduction to the notification.') - ->action('Notification Action', url('/')) - ->line('Thank you for using our application!'); + ->subject('🏝 Platobne instrukcie pre zakupenie balicka a aktivaciu Vasho konta') + ->line('🏝 Platobne instrukcie pre zakupenie balicka a aktivaciu Vasho konta') + ->action('Prejst na platbu', $url) + ->line('Dakujeme za zaujem o nase sluzby!'); } /** diff --git a/app/Traits/Oasis.php b/app/Traits/Oasis.php new file mode 100644 index 00000000..ceea98af --- /dev/null +++ b/app/Traits/Oasis.php @@ -0,0 +1,18 @@ +hasOne(SubscriptionRequest::class); + } +} diff --git a/database/migrations/oasis/2021_03_22_074425_add_items_to_user_settings_table.php b/database/migrations/oasis/2021_03_22_074425_add_items_to_user_settings_table.php index 4d9c3a85..56ceef40 100644 --- a/database/migrations/oasis/2021_03_22_074425_add_items_to_user_settings_table.php +++ b/database/migrations/oasis/2021_03_22_074425_add_items_to_user_settings_table.php @@ -15,9 +15,7 @@ class AddItemsToUserSettingsTable extends Migration { Schema::table('user_settings', function (Blueprint $table) { $table->boolean('payment_activation')->after('storage_capacity')->default(0); - $table->string('ico')->after('phone_number')->nullable(); - $table->string('requested_plan')->nullable(); }); } diff --git a/database/migrations/oasis/2021_03_22_094908_create_subscription_requests_table.php b/database/migrations/oasis/2021_03_22_094908_create_subscription_requests_table.php new file mode 100644 index 00000000..a0c6000d --- /dev/null +++ b/database/migrations/oasis/2021_03_22_094908_create_subscription_requests_table.php @@ -0,0 +1,34 @@ +uuid('id')->primary()->index(); + $table->uuid('user_id')->index(); + $table->string('requested_plan'); + $table->enum('status', ['requested', 'payed', 'cancelled'])->default('requested'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('subscription_requests'); + } +} diff --git a/tests/Feature/Oasis/OasisAdminTest.php b/tests/Feature/Oasis/OasisAdminTest.php index c3f52f9f..1d0d09e9 100644 --- a/tests/Feature/Oasis/OasisAdminTest.php +++ b/tests/Feature/Oasis/OasisAdminTest.php @@ -86,6 +86,11 @@ class OasisAdminTest extends TestCase 'plan' => 'virtualni-sanon-basic', ])->assertStatus(201); + $this->assertDatabaseHas('subscription_requests', [ + 'requested_plan' => 'virtualni-sanon-basic', + 'status' => 'requested', + ]); + $this->assertDatabaseHas('users', [ 'email' => 'john@doe.com', ]); @@ -93,7 +98,6 @@ class OasisAdminTest extends TestCase $this->assertDatabaseHas('user_settings', [ 'ico' => '08995281', 'payment_activation' => 0, - 'requested_plan' => 'virtualni-sanon-basic', ]); $newbie = User::whereEmail('john@doe.com')