diff --git a/app/Http/Controllers/Oasis/ClientController.php b/app/Http/Controllers/Oasis/ClientController.php index c55fa878..c8fe251b 100644 --- a/app/Http/Controllers/Oasis/ClientController.php +++ b/app/Http/Controllers/Oasis/ClientController.php @@ -73,10 +73,8 @@ class ClientController extends Controller */ public function destroy(Client $client) { - if ($client->user_id === Auth::id()) { - $client->delete(); + $client->delete(); - return response('Done', 204); - } + return response('Done', 204); } } diff --git a/app/Http/Controllers/Oasis/InvoiceController.php b/app/Http/Controllers/Oasis/InvoiceController.php index 21bc69e4..2dd89149 100644 --- a/app/Http/Controllers/Oasis/InvoiceController.php +++ b/app/Http/Controllers/Oasis/InvoiceController.php @@ -127,6 +127,17 @@ class InvoiceController extends Controller ); } + /** + * @param Invoice $invoice + * @throws \Exception + */ + public function destroy(Invoice $invoice) + { + $invoice->delete(); + + return response('Done', 204); + } + /** * @param StoreInvoiceRequest $request * @return mixed diff --git a/app/Http/custom-helpers.php b/app/Http/custom-helpers.php index 39dafe83..8224b6bd 100644 --- a/app/Http/custom-helpers.php +++ b/app/Http/custom-helpers.php @@ -85,7 +85,7 @@ function invoice_total_discount($invoice, $format = false) // Percent discount if ($invoice['discount_type'] === 'percent') { - $discount = (invoice_total_net($invoice) + invoice_total_tax($invoice)) * ($invoice['discount_rate'] / 100); + $discount = (int) (invoice_total_net($invoice) + invoice_total_tax($invoice)) * ($invoice['discount_rate'] / 100); if ($format) { return Cashier::formatAmount($discount * 100, $invoice['currency'], 'cs'); @@ -153,5 +153,5 @@ function invoice_total_tax($invoice, $format = false) */ function format_to_currency($value, $currency = 'CZK', $locale = 'cs') { - return Cashier::formatAmount(($value * 100), $currency, $locale); + return Cashier::formatAmount(((int) $value * 100), $currency, $locale); } \ No newline at end of file diff --git a/app/Models/Oasis/Invoice.php b/app/Models/Oasis/Invoice.php index 78d9ee0a..2f9ddbfd 100644 --- a/app/Models/Oasis/Invoice.php +++ b/app/Models/Oasis/Invoice.php @@ -7,6 +7,7 @@ use Auth; use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Laravel\Scout\Searchable; use TeamTNT\TNTSearch\Indexer\TNTIndexer; @@ -70,5 +71,9 @@ class Invoice extends Model $invoice->currency = 'CZK'; }); + + static::deleting(function ($invoice) { + Storage::delete(invoice_path($invoice)); + }); } } diff --git a/routes/oasis.php b/routes/oasis.php index 1f686e52..7eab00a5 100644 --- a/routes/oasis.php +++ b/routes/oasis.php @@ -30,6 +30,7 @@ Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () { Route::get('/search', [InvoiceController::class, 'search']); Route::post('/', [InvoiceController::class, 'store']); + Route::delete('/{invoice}', [InvoiceController::class, 'destroy']); Route::get('/profile', [InvoiceProfileController::class, 'show']); Route::post('/profile', [InvoiceProfileController::class, 'store']); diff --git a/tests/Feature/Oasis/OasisClientTest.php b/tests/Feature/Oasis/OasisClientTest.php index 37159c48..f0483bc3 100644 --- a/tests/Feature/Oasis/OasisClientTest.php +++ b/tests/Feature/Oasis/OasisClientTest.php @@ -125,6 +125,10 @@ class OasisClientTest extends TestCase $this->deleteJson("/api/oasis/clients/$client->id") ->assertStatus(204); + $this->assertDatabaseMissing('clients', [ + 'id' => $client->id + ]); + Storage::disk('local') ->assertMissing('avatar/fake-image.jpg'); } diff --git a/tests/Feature/Oasis/OasisInvoiceTest.php b/tests/Feature/Oasis/OasisInvoiceTest.php index c6529031..056fd9e4 100644 --- a/tests/Feature/Oasis/OasisInvoiceTest.php +++ b/tests/Feature/Oasis/OasisInvoiceTest.php @@ -494,6 +494,53 @@ class OasisInvoiceTest extends TestCase Notification::assertTimesSent(1, InvoiceDeliveryNotification::class); } + /** + * @test + */ + public function user_delete_invoice() + { + $user = User::factory(User::class) + ->create(['role' => 'user']); + + Sanctum::actingAs($user); + + $profile = InvoiceProfile::factory(InvoiceProfile::class) + ->create(['user_id' => $user->id]); + + $invoice = Invoice::factory(Invoice::class) + ->create([ + 'user_id' => $user->id, + 'invoice_type' => 'regular-invoice', + 'user' => $profile->toArray(), + ]); + + \PDF::loadView('oasis.invoices.invoice', [ + 'invoice' => Invoice::find($invoice->id), + 'user' => $user, + ]) + ->setPaper('a4') + ->setOrientation('portrait') + ->save( + storage_path("app/files/{$invoice->user_id}/invoice-{$invoice->id}.pdf") + ); + + Storage::disk('local') + ->assertExists( + invoice_path($invoice) + ); + + $this->delete("/api/oasis/invoices/$invoice->id"); + + $this->assertDatabaseMissing('invoices', [ + 'id' => $invoice->id + ]); + + Storage::disk('local') + ->assertMissing( + invoice_path($invoice) + ); + } + /** * @test */