diff --git a/app/Http/Controllers/Oasis/InvoiceProfileController.php b/app/Http/Controllers/Oasis/InvoiceProfileController.php new file mode 100644 index 00000000..5b2b661b --- /dev/null +++ b/app/Http/Controllers/Oasis/InvoiceProfileController.php @@ -0,0 +1,40 @@ +invoiceProfile() + ->create([ + 'logo' => store_avatar($request, 'logo') ?? null, + 'stamp' => store_avatar($request, 'stamp') ?? null, + 'company' => $request->company, + 'email' => $request->email, + 'ico' => $request->ico, + 'dic' => $request->dic, + 'ic_dph' => $request->ic_dph, + 'registration_notes' => $request->registration_notes, + 'author' => $request->author, + 'address' => $request->address, + 'state' => $request->state, + 'city' => $request->city, + 'postal_code' => $request->postal_code, + 'country' => $request->country, + 'phone' => $request->phone, + 'bank' => $request->bank, + 'iban' => $request->iban, + 'swift' => $request->swift, + ]); + + return response( + new InvoiceProfileCollection($profile), 201 + ); + } +} diff --git a/app/Http/Requests/Oasis/StoreInvoiceProfileRequest.php b/app/Http/Requests/Oasis/StoreInvoiceProfileRequest.php new file mode 100644 index 00000000..3aaef3f4 --- /dev/null +++ b/app/Http/Requests/Oasis/StoreInvoiceProfileRequest.php @@ -0,0 +1,47 @@ + 'sometimes|file', + 'stamp' => 'sometimes|file', + 'company' => 'required|string', + 'email' => 'required|email', + 'ico' => 'sometimes|string|nullable', + 'dic' => 'sometimes|string|nullable', + 'ic_dph' => 'sometimes|string|nullable', + 'registration_notes' => 'sometimes|string|nullable', + 'author' => 'required|string', + 'address' => 'required|string', + 'state' => 'required|string', + 'city' => 'required|string', + 'postal_code' => 'required|string', + 'country' => 'required|string', + 'phone' => 'required|string', + 'bank' => 'required|string', + 'iban' => 'required|string', + 'swift' => 'required|string', + ]; + } +} diff --git a/app/Http/Resources/Oasis/InvoiceProfileCollection.php b/app/Http/Resources/Oasis/InvoiceProfileCollection.php new file mode 100644 index 00000000..7fd72a9d --- /dev/null +++ b/app/Http/Resources/Oasis/InvoiceProfileCollection.php @@ -0,0 +1,21 @@ +collection; + } +} diff --git a/app/Http/Resources/Oasis/InvoiceProfileResource.php b/app/Http/Resources/Oasis/InvoiceProfileResource.php new file mode 100644 index 00000000..83169a4e --- /dev/null +++ b/app/Http/Resources/Oasis/InvoiceProfileResource.php @@ -0,0 +1,45 @@ + [ + 'id' => $this->id, + 'type' => 'invoice-profile', + 'attributes' => [ + 'logo' => $this->logo, + 'stamp' => $this->stamp, + 'company' => $this->company, + 'email' => $this->email, + 'ico' => $this->ico, + 'dic' => $this->dic, + 'ic_dph' => $this->ic_dph, + 'registration_notes' => $this->registration_notes, + 'author' => $this->author, + 'address' => $this->address, + 'state' => $this->state, + 'city' => $this->city, + 'postal_code' => $this->postal_code, + 'country' => $this->country, + 'phone' => $this->phone, + 'bank' => $this->bank, + 'iban' => $this->iban, + 'swift' => $this->swift, + ], + ], + ]; + } +} diff --git a/routes/oasis.php b/routes/oasis.php index 90493086..c5035759 100644 --- a/routes/oasis.php +++ b/routes/oasis.php @@ -3,6 +3,7 @@ use App\Http\Controllers\Oasis\AdminController; use App\Http\Controllers\Oasis\ClientController; use App\Http\Controllers\Oasis\InvoiceController; +use App\Http\Controllers\Oasis\InvoiceProfileController; use App\Http\Controllers\Oasis\SubscriptionController; use App\Services\Oasis\OasisDevService; @@ -23,12 +24,14 @@ Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () { }); // Invoices - Route::group(['prefix' => 'invoices'], function () { + Route::group(['middleware' => 'auth:sanctum', 'prefix' => 'invoices'], function () { Route::get('/regular', [InvoiceController::class, 'get_all_regular_invoices']); Route::get('/advance', [InvoiceController::class, 'get_all_advance_invoices']); Route::get('/search', [InvoiceController::class, 'search']); Route::post('/', [InvoiceController::class, 'store']); + + Route::post('/profile', [InvoiceProfileController::class, 'store']); }); // Clients diff --git a/tests/Feature/Oasis/OasisInvoiceProfileTest.php b/tests/Feature/Oasis/OasisInvoiceProfileTest.php new file mode 100644 index 00000000..11b5772f --- /dev/null +++ b/tests/Feature/Oasis/OasisInvoiceProfileTest.php @@ -0,0 +1,64 @@ +image('fake-image.jpg'); + + $user = User::factory(User::class) + ->create(['role' => 'user']); + + Sanctum::actingAs($user); + + $this->postJson('/api/oasis/invoices/profile', [ + 'logo' => $image, + 'stamp' => $image, + 'company' => 'VueFileManager Inc.', + 'email' => 'howdy@hi5ve.digital', + 'ico' => '11111111', + 'dic' => '11111111', + 'ic_dph' => 'SK20002313123', + 'registration_notes' => 'Some registration notes', + 'author' => 'John Doe', + 'address' => 'Does 11', + 'state' => 'Slovakia', + 'city' => 'Bratislava', + 'postal_code' => '04001', + 'country' => 'SK', + 'phone' => '+421950123456', + 'bank' => 'Fio Banka', + 'iban' => 'SK20000054236423624', + 'swift' => 'FIOZXXX', + ])->assertStatus(201); + + $this->assertDatabaseHas('invoice_profiles', [ + 'user_id' => $user->id, + 'company' => 'VueFileManager Inc.', + 'email' => 'howdy@hi5ve.digital', + ]); + + $profile = InvoiceProfile::first(); + + Storage::disk('local')->assertExists($profile->logo); + Storage::disk('local')->assertExists($profile->stamp); + } +}