From de99ed2ba48abd5fcd5e8773970f30450ff4d5af Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 29 Mar 2021 21:00:22 +1100 Subject: [PATCH 1/2] Fixes for quote numbering --- app/Http/Requests/Quote/StoreQuoteRequest.php | 5 ++++- app/Utils/HtmlEngine.php | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Http/Requests/Quote/StoreQuoteRequest.php b/app/Http/Requests/Quote/StoreQuoteRequest.php index c75e571c9d..cdb5be52f0 100644 --- a/app/Http/Requests/Quote/StoreQuoteRequest.php +++ b/app/Http/Requests/Quote/StoreQuoteRequest.php @@ -16,6 +16,7 @@ use App\Http\ValidationRules\Quote\UniqueQuoteNumberRule; use App\Models\Quote; use App\Utils\Traits\CleanLineItems; use App\Utils\Traits\MakesHash; +use Illuminate\Validation\Rule; class StoreQuoteRequest extends Request { @@ -48,7 +49,9 @@ class StoreQuoteRequest extends Request $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; } - $rules['number'] = new UniqueQuoteNumberRule($this->all()); + $rules['number'] = ['nullable',Rule::unique('quotes')->where('company_id', auth()->user()->company()->id)]; + + // $rules['number'] = new UniqueQuoteNumberRule($this->all()); $rules['line_items'] = 'array'; return $rules; diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php index 004ef0d1dc..60d5657475 100644 --- a/app/Utils/HtmlEngine.php +++ b/app/Utils/HtmlEngine.php @@ -160,8 +160,8 @@ class HtmlEngine $data['$invoice.subtotal'] = &$data['$subtotal']; if ($this->entity->partial > 0) { - $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->client) ?: ' ', 'label' => ctrans('texts.partial_due')]; - $data['$balance_due_raw'] = ['value' => $this->entity->partial, 'label' => ctrans('texts.partial_due')]; + $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->client) ?: ' ', 'label' => ctrans('texts.balance_due')]; + $data['$balance_due_raw'] = ['value' => $this->entity->partial, 'label' => ctrans('texts.balance_due')]; } else { $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->balance, $this->client) ?: ' ', 'label' => ctrans('texts.balance_due')]; $data['$balance_due_raw'] = ['value' => $this->entity->balance, 'label' => ctrans('texts.balance_due')]; From 3183186d4d1f5d5b2083fb77020386a95d25c662 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 29 Mar 2021 21:19:30 +1100 Subject: [PATCH 2/2] 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 512356906a..ac4981a210 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 73f4d3f7d8..7906961188 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 ffa8f59232..1514d8c75f 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(); + }); } /**