diff --git a/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php b/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php index f8bcbb29e283..aa829ef457e0 100644 --- a/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php +++ b/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php @@ -35,7 +35,7 @@ class SubscriptionPlanSwitchController extends Controller ->service() ->calculateUpgradePriceV2($recurring_invoice, $target); - nlog("upgrade amoutn = {$amount}"); + nlog("payment amount = {$amount}"); /** * Null value here is a proxy for * denying the user a change plan option @@ -44,6 +44,9 @@ class SubscriptionPlanSwitchController extends Controller render('subscriptions.denied'); } + + $amount = max(0,$amount); + return render('subscriptions.switch', [ 'subscription' => $recurring_invoice->subscription, 'recurring_invoice' => $recurring_invoice, diff --git a/app/Http/Livewire/BillingPortalPurchasev2.php b/app/Http/Livewire/BillingPortalPurchasev2.php index fae6115ec79a..8ff7b6114434 100644 --- a/app/Http/Livewire/BillingPortalPurchasev2.php +++ b/app/Http/Livewire/BillingPortalPurchasev2.php @@ -121,7 +121,7 @@ class BillingPortalPurchasev2 extends Component * * @var array */ - public $request_data; + public $request_data = []; /** * Instance of company. @@ -130,7 +130,13 @@ class BillingPortalPurchasev2 extends Component */ public $company; - public $db; + + /** + * Instance of company. + * + * @var string + */ + public string $db; /** * Campaign reference. diff --git a/app/Http/Livewire/CreditsTable.php b/app/Http/Livewire/CreditsTable.php index b347e6486c6e..afdc66545d73 100644 --- a/app/Http/Livewire/CreditsTable.php +++ b/app/Http/Livewire/CreditsTable.php @@ -13,6 +13,7 @@ namespace App\Http\Livewire; use App\Libraries\MultiDB; +use App\Models\Company; use App\Models\Credit; use App\Utils\Traits\WithSorting; use Livewire\Component; @@ -23,26 +24,31 @@ class CreditsTable extends Component use WithPagination; use WithSorting; - public $per_page = 10; + public int $per_page = 10; - public $company; + public Company $company; + + public string $db; + + public int $company_id; public function mount() { - MultiDB::setDb($this->company->db); + MultiDB::setDb($this->db); + + $this->company = Company::find($this->company_id); } public function render() { $query = Credit::query() - ->where('client_id', auth()->guard('contact')->user()->client_id) ->where('company_id', $this->company->id) + ->where('client_id', auth()->guard('contact')->user()->client_id) ->where('status_id', '<>', Credit::STATUS_DRAFT) ->where('is_deleted', 0) ->where(function ($query) { $query->whereDate('due_date', '>=', now()) ->orWhereNull('due_date'); - //->orWhere('due_date', '=', ''); }) ->orderBy($this->sort_field, $this->sort_asc ? 'asc' : 'desc') ->withTrashed() diff --git a/app/Http/Livewire/DocumentsTable.php b/app/Http/Livewire/DocumentsTable.php index e5748d80e3a8..60b3b761dde9 100644 --- a/app/Http/Livewire/DocumentsTable.php +++ b/app/Http/Livewire/DocumentsTable.php @@ -14,6 +14,7 @@ namespace App\Http\Livewire; use App\Libraries\MultiDB; use App\Models\Client; +use App\Models\Company; use App\Models\Credit; use App\Models\Document; use App\Models\Expense; @@ -31,21 +32,27 @@ class DocumentsTable extends Component { use WithPagination, WithSorting; - public $client; + public Company $company; - public $per_page = 10; + public Client $client; - public $company; + public int $client_id; + + public int $per_page = 10; public string $tab = 'documents'; + public string $db; + protected $query; - public function mount($client) + public function mount() { - MultiDB::setDb($this->company->db); + MultiDB::setDb($this->db); - $this->client = $client; + $this->client = Client::with('company')->find($this->client_id); + + $this->company = $this->client->company; $this->query = $this->documents(); } diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index 0453e5fd5040..05b17e08b085 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -100,6 +100,7 @@ class SubscriptionService //update the invoice and attach to the recurring invoice!!!!! $invoice = Invoice::find($payment_hash->fee_invoice_id); $invoice->recurring_id = $recurring_invoice->id; + $invoice->is_proforma = false; $invoice->save(); //execute any webhooks @@ -253,6 +254,7 @@ class SubscriptionService } nlog("{$target->price} - {$refund} - {$outstanding_credit}"); + return $target->price - $refund - $outstanding_credit; } @@ -346,7 +348,7 @@ class SubscriptionService $pro_rata_refund = round((($days_in_frequency - $days_of_subscription_used)/$days_in_frequency) * $invoice->amount ,2); - return $pro_rata_refund; + return max(0, $pro_rata_refund); } @@ -472,6 +474,7 @@ class SubscriptionService $pro_rata_charge_amount = 0; $pro_rata_refund_amount = 0; $is_credit = false; + $credit = false; /* Get last invoice */ $last_invoice = Invoice::where('subscription_id', $recurring_invoice->subscription_id) @@ -483,9 +486,8 @@ class SubscriptionService ->orderBy('id', 'desc') ->first(); - // $pro_rata_refund_amount = $this->calculateProRataRefund($last_invoice, $old_subscription); - - $credit = $this->createCredit($last_invoice, $target_subscription, false); + if($this->calculateProRataRefundForSubscription($last_invoice) > 0) + $credit = $this->createCredit($last_invoice, $target_subscription, false); $new_recurring_invoice = $this->createNewRecurringInvoice($recurring_invoice); @@ -513,12 +515,7 @@ class SubscriptionService $response = $this->triggerWebhook($context); - if($credit){ - return '/client/invoices/'.$invoice->hashed_id; - } - else{ - return '/client/invoices'; - } + return '/client/recurring_invoices/'.$new_recurring_invoice->hashed_id; } @@ -783,9 +780,6 @@ class SubscriptionService $credit->discount = $last_invoice->discount; $credit->is_amount_discount = $last_invoice->is_amount_discount; - // $line_items = $subscription_repo->generateLineItems($target, false, true); - - // $credit->line_items = array_merge($line_items, $this->calculateProRataRefundItems($last_invoice, $last_invoice_is_credit)); $credit->line_items = $this->calculateProRataRefundItems($last_invoice, true); $data = [ @@ -816,6 +810,7 @@ class SubscriptionService $invoice->subscription_id = $target->id; $invoice->line_items = array_merge($subscription_repo->generateLineItems($target), $this->calculateProRataRefundItems($last_invoice)); + $invoice->is_proforma = true; $data = [ 'client_id' => $client_id, @@ -848,6 +843,7 @@ class SubscriptionService $invoice->subscription_id = $target->id; $invoice->line_items = $subscription_repo->generateLineItems($target); + $invoice->is_proforma = true; $data = [ 'client_id' => $client_id, @@ -914,6 +910,7 @@ class SubscriptionService $invoice = InvoiceFactory::create($this->subscription->company_id, $this->subscription->user_id); $invoice->line_items = $subscription_repo->generateLineItems($this->subscription); $invoice->subscription_id = $this->subscription->id; + $invoice->is_proforman = true; if(strlen($data['coupon']) >=1 && ($data['coupon'] == $this->subscription->promo_code) && $this->subscription->promo_discount > 0) { @@ -925,7 +922,6 @@ class SubscriptionService $invoice->is_amount_discount = $this->subscription->is_amount_discount; } - return $invoice_repo->save($data, $invoice); } @@ -1247,8 +1243,6 @@ class SubscriptionService }); - - return $this->handleRedirect('client/subscriptions'); } diff --git a/config/ninja.php b/config/ninja.php index b085afa20f0d..4f6803a6734c 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -190,7 +190,7 @@ return [ 'ninja_stripe_client_id' => env('NINJA_STRIPE_CLIENT_ID', null), 'ninja_default_company_id' => env('NINJA_COMPANY_ID', null), 'ninja_default_company_gateway_id' => env('NINJA_COMPANY_GATEWAY_ID', null), - 'ninja_hosted_secret' => env('NINJA_HOSTED_SECRET', null), + 'ninja_hosted_secret' => env('NINJA_HOSTED_SECRET', ''), 'ninja_hosted_header' =>env('NINJA_HEADER',''), 'internal_queue_enabled' => env('INTERNAL_QUEUE_ENABLED', true), 'ninja_apple_api_key' => env('APPLE_API_KEY', false), diff --git a/resources/views/portal/ninja2020/credits/index.blade.php b/resources/views/portal/ninja2020/credits/index.blade.php index b485339c7a2e..c5b5e43c896c 100644 --- a/resources/views/portal/ninja2020/credits/index.blade.php +++ b/resources/views/portal/ninja2020/credits/index.blade.php @@ -13,6 +13,6 @@ @section('body')
- @livewire('credits-table', ['company' => $company]) + @livewire('credits-table', ['company_id' => $company->id, 'db' => $company->db])
@endsection \ No newline at end of file diff --git a/resources/views/portal/ninja2020/credits/show.blade.php b/resources/views/portal/ninja2020/credits/show.blade.php index 0d802adc7d79..c8cccc0f7c82 100644 --- a/resources/views/portal/ninja2020/credits/show.blade.php +++ b/resources/views/portal/ninja2020/credits/show.blade.php @@ -34,7 +34,6 @@ @include('portal.ninja2020.components.entity-documents', ['entity' => $credit]) @include('portal.ninja2020.components.pdf-viewer', ['entity' => $credit, 'invitation' => $invitation]) - @endsection @@ -45,18 +44,5 @@ var clipboard = new ClipboardJS('.btn'); - // clipboard.on('success', function(e) { - // console.info('Action:', e.action); - // console.info('Text:', e.text); - // console.info('Trigger:', e.trigger); - - // e.clearSelection(); - // }); - - // clipboard.on('error', function(e) { - // console.error('Action:', e.action); - // console.error('Trigger:', e.trigger); - // }); - @endsection diff --git a/resources/views/portal/ninja2020/documents/index.blade.php b/resources/views/portal/ninja2020/documents/index.blade.php index 61fc9a649808..09d40bcb2aac 100644 --- a/resources/views/portal/ninja2020/documents/index.blade.php +++ b/resources/views/portal/ninja2020/documents/index.blade.php @@ -14,5 +14,5 @@ @csrf - @livewire('documents-table', ['client' => $client, 'company' => $company]) + @livewire('documents-table', ['client_id' => $client->id, 'db' => $company->db]) @endsection