Assign an invoie to a subscription

This commit is contained in:
David Bomba 2024-01-14 12:34:40 +11:00
parent c036c7664f
commit bc27d8b92f
3 changed files with 116 additions and 11 deletions

View File

@ -16,6 +16,7 @@ use App\Events\Subscription\SubscriptionWasCreated;
use App\Events\Subscription\SubscriptionWasUpdated;
use App\Factory\SubscriptionFactory;
use App\Filters\SubscriptionFilters;
use App\Http\Requests\Subscription\BulkSubscriptionRequest;
use App\Http\Requests\Subscription\CreateSubscriptionRequest;
use App\Http\Requests\Subscription\DestroySubscriptionRequest;
use App\Http\Requests\Subscription\EditSubscriptionRequest;
@ -466,22 +467,31 @@ class SubscriptionController extends BaseController
* ),
* )
*/
public function bulk()
public function bulk(BulkSubscriptionRequest $request)
{
/** @var \App\Models\User $user */
$user = auth()->user();
$action = request()->input('action');
$subscriptions = Subscription::withTrashed()->find($request->ids);
$ids = request()->input('ids');
$subscriptions = Subscription::withTrashed()->find($this->transformKeys($ids));
if(in_array($request->action, ['assign_invoice'])) {
$subscriptions->each(function ($subscription, $key) use ($request, $user) {
if ($user->can('edit', $subscription)) {
$this->subscription_repo->{$request->action}($subscription, $request);
}
});
$subscriptions->each(function ($subscription, $key) use ($action, $user) {
return $this->listResponse(Subscription::withTrashed()->whereIn('id', $request->ids));
}
$subscriptions->each(function ($subscription, $key) use ($request, $user) {
if ($user->can('edit', $subscription)) {
$this->subscription_repo->{$action}($subscription);
$this->subscription_repo->{$request->action}($subscription);
}
});
return $this->listResponse(Subscription::withTrashed()->whereIn('id', $this->transformKeys($ids)));
return $this->listResponse(Subscription::withTrashed()->whereIn('id', $request->ids));
}
}

View File

@ -21,6 +21,7 @@ use App\Models\InvoiceInvitation;
use App\Models\Subscription;
use App\Utils\Traits\CleanLineItems;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class SubscriptionRepository extends BaseRepository
{
@ -163,4 +164,18 @@ class SubscriptionRepository extends BaseRepository
return $item;
}
public function assign_invoice(Subscription $subscription, $request)
{
$class = "\\App\\Models\\".ucfirst(Str::camel($request->entity));
$entity = $class::withTrashed()->find($request->entity_id);
if($entity){
$entity->subscription_id = $subscription->id;
$entity->save();
}
return $subscription;
}
}

View File

@ -11,16 +11,18 @@
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Invoice;
use App\Models\Product;
use App\Models\RecurringInvoice;
use Tests\MockAccountData;
use Illuminate\Support\Str;
use App\Models\Subscription;
use App\Utils\Traits\MakesHash;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Tests\MockAccountData;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseTransactions;
/**
* @test
@ -32,6 +34,8 @@ class SubscriptionApiTest extends TestCase
use DatabaseTransactions;
use MockAccountData;
protected $faker;
protected function setUp(): void
{
parent::setUp();
@ -47,6 +51,82 @@ class SubscriptionApiTest extends TestCase
Model::reguard();
}
public function testAssignInvoice()
{
$i = Invoice::factory()
->create([
'company_id' => $this->company->id,
'user_id' => $this->user->id,
'client_id' => $this->client->id,
]);
$s = Subscription::factory()
->create([
'company_id' => $this->company->id,
'user_id' => $this->user->id,
]);
$data = [
'ids' => [$s->hashed_id],
'entity' => 'invoice',
'entity_id' => $i->hashed_id,
'action' => 'assign_invoice'
];
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->postJson('/api/v1/subscriptions/bulk', $data);
$response->assertStatus(200);
$i = $i->fresh();
$this->assertEquals($s->id, $i->subscription_id);
}
public function testAssignRecurringInvoice()
{
$i = RecurringInvoice::factory()
->create([
'company_id' => $this->company->id,
'user_id' => $this->user->id,
'client_id' => $this->client->id,
]);
$s = Subscription::factory()
->create([
'company_id' => $this->company->id,
'user_id' => $this->user->id,
]);
$data = [
'ids' => [$s->hashed_id],
'entity' => 'recurring_invoice',
'entity_id' => $i->hashed_id,
'action' => 'assign_invoice'
];
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->postJson('/api/v1/subscriptions/bulk', $data);
$response->assertStatus(200);
$i = $i->fresh();
$this->assertEquals($s->id, $i->subscription_id);
}
public function testSubscriptionFilter()
{
$response = $this->withHeaders([