From 3183186d4d1f5d5b2083fb77020386a95d25c662 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 29 Mar 2021 21:19:30 +1100 Subject: [PATCH] Working on subscriptions --- app/Services/Subscription/SubscriptionService.php | 11 +++++++---- app/Transformers/RecurringInvoiceTransformer.php | 1 + ...201148_add_price_column_to_subscriptions_table.php | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index 512356906a6e..ac4981a210fd 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -67,6 +67,7 @@ class SubscriptionService public function startTrial(array $data) { // Redirects from here work just fine. Livewire will respect it. + $client_contact = ClientContact::find($data['contact_id']); if(!$this->subscription->trial_enabled) return new \Exception("Trials are disabled for this product"); @@ -76,20 +77,22 @@ class SubscriptionService $subscription_repo = new SubscriptionRepository(); $recurring_invoice = RecurringInvoiceFactory::create($this->subscription->company_id, $this->subscription->user_id); + $recurring_invoice->client_id = $client_contact->client_id; $recurring_invoice->line_items = $subscription_repo->generateLineItems($this->subscription, true); $recurring_invoice->subscription_id = $this->subscription->id; $recurring_invoice->frequency_id = $this->subscription->frequency_id; $recurring_invoice->date = now(); - $recurring_invoice->next_send_date = now()->addSeconds($this->subscription->trial_duration)->addDays(1); + $recurring_invoice->next_send_date = now()->addSeconds($this->subscription->trial_duration); $recurring_invoice->remaining_cycles = -1; + $recurring_invoice->backup = 'is_trial'; - if(strlen($data['coupon']) >=1 && ($data['coupon'] == $this->subscription->promo_code) && $this->subscription->promo_discount > 0) + if(array_key_exists('coupon', $data) && ($data['coupon'] == $this->subscription->promo_code) && $this->subscription->promo_discount > 0) { $recurring_invoice->discount = $this->subscription->promo_discount; $recurring_invoice->is_amount_discount = $this->subscription->is_amount_discount; } - $recurring_invoice = $recurring_invoice_repo->save($data, $invoice); + $recurring_invoice = $recurring_invoice_repo->save($data, $recurring_invoice); /* Start the recurring service */ $recurring_invoice->service() @@ -102,7 +105,7 @@ class SubscriptionService if(strlen($this->subscription->webhook_configuration->post_purchase_url) >=1) return redirect($this->subscription->webhook_configuration->post_purchase_url); - return redirect('/client/subscription/'.$cs->hashed_id); + return redirect('/client/recurring_invoices/'.$recurring_invoice->hashed_id); } public function createInvoice($data): ?\App\Models\Invoice diff --git a/app/Transformers/RecurringInvoiceTransformer.php b/app/Transformers/RecurringInvoiceTransformer.php index 73f4d3f7d8d5..790696118810 100644 --- a/app/Transformers/RecurringInvoiceTransformer.php +++ b/app/Transformers/RecurringInvoiceTransformer.php @@ -139,6 +139,7 @@ class RecurringInvoiceTransformer extends EntityTransformer 'auto_bill_enabled' => (bool) $invoice->auto_bill_enabled, 'due_date_days' => (string) $invoice->due_date_days ?: '', 'paid_to_date' => (float) $invoice->paid_to_date, + 'subscription_id' => (string)$this->encodePrimaryKey($invoice->subscription_id), ]; } } diff --git a/database/migrations/2021_03_26_201148_add_price_column_to_subscriptions_table.php b/database/migrations/2021_03_26_201148_add_price_column_to_subscriptions_table.php index ffa8f5923208..1514d8c75f32 100644 --- a/database/migrations/2021_03_26_201148_add_price_column_to_subscriptions_table.php +++ b/database/migrations/2021_03_26_201148_add_price_column_to_subscriptions_table.php @@ -17,6 +17,10 @@ class AddPriceColumnToSubscriptionsTable extends Migration $table->decimal('price', 20, 6)->default(0); $table->decimal('promo_price', 20, 6)->default(0); }); + + Schema::table('recurring_invoices', function (Blueprint $table) { + $table->unsignedInteger('subscription_id')->nullable(); + }); } /**