diff --git a/app/Http/Controllers/Oasis/InvoiceProfileController.php b/app/Http/Controllers/Oasis/InvoiceProfileController.php index 5b2b661b..dbc272e2 100644 --- a/app/Http/Controllers/Oasis/InvoiceProfileController.php +++ b/app/Http/Controllers/Oasis/InvoiceProfileController.php @@ -3,38 +3,72 @@ namespace App\Http\Controllers\Oasis; use App\Http\Controllers\Controller; -use App\Http\Resources\Oasis\InvoiceProfileCollection; +use App\Http\Resources\Oasis\InvoiceProfileResource; +use App\Models\Oasis\InvoiceProfile; +use App\Models\Setting; +use Illuminate\Contracts\Foundation\Application; +use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Http\Request; +use Illuminate\Http\Response; class InvoiceProfileController extends Controller { + /** + * @param Request $request + * @return Application|ResponseFactory|Response + */ public function store(Request $request) { - $profile = \Auth::user() - ->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, - ]); + $profile = InvoiceProfile::create([ + 'user_id' => $request->user()->id, + '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 + new InvoiceProfileResource($profile), 201 ); } + + /** + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function update(Request $request) + { + // Store image if exist + if ($request->hasFile($request->name)) { + + // Find and update image path + $request->user() + ->invoiceProfile() + ->update([ + $request->name => store_avatar($request, $request->name) + ]); + + return response('Done', 204); + } + + $request->user() + ->invoiceProfile() + ->update(make_single_input($request)); + + return response('Done', 204); + } } diff --git a/app/Http/Resources/Oasis/InvoiceProfileCollection.php b/app/Http/Resources/Oasis/InvoiceProfileCollection.php index 7fd72a9d..245bad95 100644 --- a/app/Http/Resources/Oasis/InvoiceProfileCollection.php +++ b/app/Http/Resources/Oasis/InvoiceProfileCollection.php @@ -12,10 +12,12 @@ class InvoiceProfileCollection extends ResourceCollection * Transform the resource collection into an array. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Support\Collection + * @return array */ public function toArray($request) { - return $this->collection; + return [ + 'data' => $this->collection, + ]; } } diff --git a/app/Http/Resources/Oasis/InvoiceProfileResource.php b/app/Http/Resources/Oasis/InvoiceProfileResource.php index 83169a4e..d17ca06d 100644 --- a/app/Http/Resources/Oasis/InvoiceProfileResource.php +++ b/app/Http/Resources/Oasis/InvoiceProfileResource.php @@ -3,7 +3,6 @@ namespace App\Http\Resources\Oasis; use Illuminate\Http\Resources\Json\JsonResource; -use Laravel\Cashier\Cashier; class InvoiceProfileResource extends JsonResource { diff --git a/routes/oasis.php b/routes/oasis.php index c5035759..4b21ade0 100644 --- a/routes/oasis.php +++ b/routes/oasis.php @@ -32,6 +32,7 @@ Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () { Route::post('/', [InvoiceController::class, 'store']); Route::post('/profile', [InvoiceProfileController::class, 'store']); + Route::patch('/profile', [InvoiceProfileController::class, 'update']); }); // Clients diff --git a/tests/Feature/Admin/LanguageEditorTest.php b/tests/Feature/Admin/LanguageEditorTest.php index 2fb7ca75..a40c1e64 100644 --- a/tests/Feature/Admin/LanguageEditorTest.php +++ b/tests/Feature/Admin/LanguageEditorTest.php @@ -12,7 +12,7 @@ use Tests\TestCase; class LanguageEditorTest extends TestCase { - //use DatabaseMigrations; + use DatabaseMigrations; protected $setup; diff --git a/tests/Feature/Oasis/OasisClientTest.php b/tests/Feature/Oasis/OasisClientTest.php index b5e078be..a36ae730 100644 --- a/tests/Feature/Oasis/OasisClientTest.php +++ b/tests/Feature/Oasis/OasisClientTest.php @@ -142,7 +142,7 @@ class OasisClientTest extends TestCase 'id' => $client->id, ])->assertStatus(200); - $this->getJson('/api/oasis/clients/search?query=info') + $this->getJson('/api/oasis/clients/search?query=inf') ->assertJsonFragment([ 'id' => $client->id, ])->assertStatus(200); diff --git a/tests/Feature/Oasis/OasisInvoiceProfileTest.php b/tests/Feature/Oasis/OasisInvoiceProfileTest.php index 11b5772f..f8ef457d 100644 --- a/tests/Feature/Oasis/OasisInvoiceProfileTest.php +++ b/tests/Feature/Oasis/OasisInvoiceProfileTest.php @@ -48,7 +48,10 @@ class OasisInvoiceProfileTest extends TestCase 'bank' => 'Fio Banka', 'iban' => 'SK20000054236423624', 'swift' => 'FIOZXXX', - ])->assertStatus(201); + ])->assertStatus(201) + ->assertJsonFragment([ + 'company' => 'VueFileManager Inc.', + ]); $this->assertDatabaseHas('invoice_profiles', [ 'user_id' => $user->id, @@ -61,4 +64,58 @@ class OasisInvoiceProfileTest extends TestCase Storage::disk('local')->assertExists($profile->logo); Storage::disk('local')->assertExists($profile->stamp); } + + /** + * @test + */ + public function user_update_invoice_profile_column() + { + $user = User::factory(User::class) + ->create(['role' => 'user']); + + InvoiceProfile::factory(InvoiceProfile::class) + ->create(['user_id' => $user->id]); + + Sanctum::actingAs($user); + + $this->patchJson('/api/oasis/invoices/profile', [ + 'name' => 'company', + 'value' => 'VueFileManager Inc.', + ])->assertStatus(204); + + $this->assertDatabaseHas('invoice_profiles', [ + 'user_id' => $user->id, + 'company' => 'VueFileManager Inc.', + ]); + } + + /** + * @test + */ + public function user_update_invoice_profile_logo() + { + $user = User::factory(User::class) + ->create(['role' => 'user']); + + InvoiceProfile::factory(InvoiceProfile::class) + ->create(['user_id' => $user->id]); + + Sanctum::actingAs($user); + + $image = UploadedFile::fake() + ->image('fake-image.jpg'); + + $this->patchJson('/api/oasis/invoices/profile', [ + 'name' => 'logo', + 'logo' => $image, + ])->assertStatus(204); + + $this->assertDatabaseMissing('invoice_profiles', [ + 'logo' => null, + ]); + + Storage::disk('local')->assertExists( + InvoiceProfile::first()->logo + ); + } }