From eae212ac5d7bd043bba66e4e3126c284ff3e1a79 Mon Sep 17 00:00:00 2001 From: Peter Papp Date: Wed, 21 Apr 2021 16:53:39 +0200 Subject: [PATCH] - Invoice listing in frontend --- app/Console/Commands/SetupDevEnvironment.php | 4 ++ .../Controllers/Oasis/ClientController.php | 9 +++- .../Controllers/Oasis/InvoiceController.php | 18 ++++++- .../Oasis/OasisInvoiceCollection.php | 21 ++++++++ .../Resources/Oasis/OasisInvoiceResource.php | 28 ++++++++++ app/Http/custom-helpers.php | 11 ++++ app/Models/Oasis/Invoice.php | 12 ++++- app/Services/Oasis/OasisDevService.php | 51 +++++++++++++++++++ app/Traits/Oasis.php | 9 +++- database/factories/Oasis/InvoiceFactory.php | 10 +--- ...021_04_21_060812_create_invoices_table.php | 2 +- public/mix-manifest.json | 23 ++------- .../js/Oasis/Modules/Invoices/Invoices.vue | 6 ++- .../components/InvoiceActionsMobile.vue | 9 +++- .../Invoices/components/InvoiceBrowser.vue | 26 ---------- .../components/InvoiceDesktopToolbar.vue | 8 ++- .../components/InvoiceFilterMobile.vue | 38 ++++---------- .../Invoices/components/InvoiceItem.vue | 2 +- resources/js/store/modules/oasisInvoices | 6 +-- routes/oasis.php | 13 +++++ tests/Feature/Oasis/OasisClientTest.php | 24 +++++++++ tests/Feature/Oasis/OasisInvoiceTest.php | 48 +++++++++++++++++ 22 files changed, 279 insertions(+), 99 deletions(-) create mode 100644 app/Http/Resources/Oasis/OasisInvoiceCollection.php create mode 100644 app/Http/Resources/Oasis/OasisInvoiceResource.php create mode 100644 app/Services/Oasis/OasisDevService.php diff --git a/app/Console/Commands/SetupDevEnvironment.php b/app/Console/Commands/SetupDevEnvironment.php index 40407af1..80eb0bd3 100644 --- a/app/Console/Commands/SetupDevEnvironment.php +++ b/app/Console/Commands/SetupDevEnvironment.php @@ -6,6 +6,7 @@ use App\Models\File; use App\Models\Folder; use App\Models\Share; use App\Services\HelperService; +use App\Services\Oasis\OasisDevService; use App\Services\SetupService; use App\Models\Setting; use App\Models\User; @@ -77,6 +78,9 @@ class SetupDevEnvironment extends Command '--stop-when-empty' => true, ]); + // Oasis demo content generator + resolve(OasisDevService::class)->create_demo_content(); + $this->info('Everything is done, congratulations! 🥳🥳🥳'); } diff --git a/app/Http/Controllers/Oasis/ClientController.php b/app/Http/Controllers/Oasis/ClientController.php index cb25cc05..2aecacc9 100644 --- a/app/Http/Controllers/Oasis/ClientController.php +++ b/app/Http/Controllers/Oasis/ClientController.php @@ -3,9 +3,16 @@ namespace App\Http\Controllers\Oasis; use App\Http\Controllers\Controller; +use Auth; use Illuminate\Http\Request; class ClientController extends Controller { - // + /** + * @return mixed + */ + public function index() + { + return response(Auth::user()->clients, 200); + } } diff --git a/app/Http/Controllers/Oasis/InvoiceController.php b/app/Http/Controllers/Oasis/InvoiceController.php index 87de31aa..c6ff5c31 100644 --- a/app/Http/Controllers/Oasis/InvoiceController.php +++ b/app/Http/Controllers/Oasis/InvoiceController.php @@ -3,9 +3,25 @@ namespace App\Http\Controllers\Oasis; use App\Http\Controllers\Controller; +use App\Http\Resources\Oasis\OasisInvoiceCollection; +use Auth; use Illuminate\Http\Request; class InvoiceController extends Controller { - // + /** + * @return mixed + */ + public function get_all_regular_invoices() + { + return response(new OasisInvoiceCollection(Auth::user()->regularInvoices), 200); + } + + /** + * @return mixed + */ + public function get_all_advance_invoices() + { + return response(new OasisInvoiceCollection(Auth::user()->advanceInvoices), 200); + } } diff --git a/app/Http/Resources/Oasis/OasisInvoiceCollection.php b/app/Http/Resources/Oasis/OasisInvoiceCollection.php new file mode 100644 index 00000000..c1a1fe78 --- /dev/null +++ b/app/Http/Resources/Oasis/OasisInvoiceCollection.php @@ -0,0 +1,21 @@ +collection; + } +} diff --git a/app/Http/Resources/Oasis/OasisInvoiceResource.php b/app/Http/Resources/Oasis/OasisInvoiceResource.php new file mode 100644 index 00000000..6eefc5d0 --- /dev/null +++ b/app/Http/Resources/Oasis/OasisInvoiceResource.php @@ -0,0 +1,28 @@ + $this->id, + 'name' => $this->client['name'] . ' ' . format_to_currency($this->total_net, $this->currency), + 'invoiceNumber' => $this->invoice_number, + 'total' => format_to_currency($this->total_net, $this->currency), + 'file_url' => '', + 'clientName' => $this->client['name'], + 'mimetype' => 'pdf', + 'created_at' => format_date($this->created_at, '%d. %B. %Y'), + ]; + } +} \ No newline at end of file diff --git a/app/Http/custom-helpers.php b/app/Http/custom-helpers.php index 201f00e3..a91f1a3c 100644 --- a/app/Http/custom-helpers.php +++ b/app/Http/custom-helpers.php @@ -70,4 +70,15 @@ function invoice_total_tax($invoice, $format = false) } return $total; +} + +/** + * @param $value + * @param $currency + * @param string $locale + * @return string + */ +function format_to_currency($value, $currency, $locale = 'cs') +{ + return Cashier::formatAmount(($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 7a3ad79b..523ef667 100644 --- a/app/Models/Oasis/Invoice.php +++ b/app/Models/Oasis/Invoice.php @@ -3,6 +3,7 @@ namespace App\Models\Oasis; use App\Models\User; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; @@ -37,8 +38,15 @@ class Invoice extends Model { parent::boot(); - static::creating(function ($order) { - $order->id = Str::uuid(); + static::creating(function ($invoice) { + $invoice->id = Str::uuid(); + + $invoice->delivery_at = $invoice->created_at; + $invoice->due_at = Carbon::parse($invoice->created_at)->addWeeks(2); + + $invoice->total_discount = invoice_total_discount($invoice); + $invoice->total_net = invoice_total_net($invoice); + $invoice->total_tax = invoice_total_tax($invoice); }); } } diff --git a/app/Services/Oasis/OasisDevService.php b/app/Services/Oasis/OasisDevService.php new file mode 100644 index 00000000..da97b24b --- /dev/null +++ b/app/Services/Oasis/OasisDevService.php @@ -0,0 +1,51 @@ +first(); + + $clients = Client::factory(Client::class) + ->count(6) + ->create(['user_id' => $user->id]); + + Invoice::factory(Invoice::class) + ->state(new Sequence( + ['client_id' => $clients[0]->id], + ['client_id' => $clients[1]->id], + ['client_id' => $clients[2]->id], + ['client_id' => $clients[3]->id], + ['client_id' => $clients[4]->id], + ['client_id' => $clients[5]->id], + ))->count(14) + ->create([ + 'user_id' => $user->id, + 'invoice_type' => 'regular_invoice' + ]); + + Invoice::factory(Invoice::class) + ->count(14) + ->state(new Sequence( + ['client_id' => $clients[0]->id], + ['client_id' => $clients[1]->id], + ['client_id' => $clients[2]->id], + ['client_id' => $clients[3]->id], + ['client_id' => $clients[4]->id], + ['client_id' => $clients[5]->id], + ))->create([ + 'user_id' => $user->id, + 'invoice_type' => 'advance_invoice' + ]); + } +} \ No newline at end of file diff --git a/app/Traits/Oasis.php b/app/Traits/Oasis.php index 39dc0e12..03d68843 100644 --- a/app/Traits/Oasis.php +++ b/app/Traits/Oasis.php @@ -23,8 +23,13 @@ trait Oasis return $this->hasMany(Client::class); } - public function createdInvoices() + public function regularInvoices() { - return $this->hasMany(Invoice::class); + return $this->hasMany(Invoice::class)->whereInvoiceType('regular_invoice'); + } + + public function advanceInvoices() + { + return $this->hasMany(Invoice::class)->whereInvoiceType('advance_invoice'); } } diff --git a/database/factories/Oasis/InvoiceFactory.php b/database/factories/Oasis/InvoiceFactory.php index 6b52e908..37a3886a 100644 --- a/database/factories/Oasis/InvoiceFactory.php +++ b/database/factories/Oasis/InvoiceFactory.php @@ -28,7 +28,7 @@ class InvoiceFactory extends Factory 'id' => $this->faker->uuid, 'user_id' => $this->faker->uuid, 'client_id' => $this->faker->uuid, - 'invoice_type' => $this->faker->randomElement(['invoice', 'advance_invoice']), + 'invoice_type' => $this->faker->randomElement(['regular_invoice', 'advance_invoice']), 'invoice_number' => $this->faker->numberBetween(2120001, 2120999), 'variable_number' => $this->faker->numberBetween(2120001, 2120999), 'currency' => $this->faker->randomElement(['CZK', 'EUR']), @@ -94,10 +94,6 @@ class InvoiceFactory extends Factory public function configure() { return $this->afterCreating(function (Invoice $invoice) { - - $invoice->delivery_at = $invoice->created_at; - $invoice->due_at = Carbon::parse($invoice->created_at)->addWeeks(2); - if ($invoice->discount_type === 'percent') { $invoice->discount_rate = $this->faker->randomElement([2, 5, 10, 15, 20]); } @@ -106,10 +102,6 @@ class InvoiceFactory extends Factory $invoice->discount_rate = $this->faker->randomElement([20, 10]); } - $invoice->total_discount = invoice_total_discount($invoice); - $invoice->total_net = invoice_total_net($invoice); - $invoice->total_tax = invoice_total_tax($invoice); - $invoice->save(); }); } diff --git a/database/migrations/oasis/2021_04_21_060812_create_invoices_table.php b/database/migrations/oasis/2021_04_21_060812_create_invoices_table.php index dc42b33c..f349d31b 100644 --- a/database/migrations/oasis/2021_04_21_060812_create_invoices_table.php +++ b/database/migrations/oasis/2021_04_21_060812_create_invoices_table.php @@ -18,7 +18,7 @@ class CreateInvoicesTable extends Migration $table->uuid('user_id')->index(); $table->uuid('client_id')->index(); - $table->enum('invoice_type', ['invoice', 'advance_invoice']); + $table->enum('invoice_type', ['regular_invoice', 'advance_invoice']); $table->text('invoice_number')->nullable(); $table->text('variable_number')->nullable(); diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 42d88713..4b06c49e 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -52,8 +52,8 @@ "/chunks/invoices.js": "/chunks/invoices.js?id=1deb187f6d3eb1e81ad0", "/chunks/not-found-shared.js": "/chunks/not-found-shared.js?id=7fc7f9b6f10bdfac770e", "/chunks/oasis/homepage.js": "/chunks/oasis/homepage.js?id=a1885dd8814f9eb63a1c", - "/chunks/oasis/invoices.js": "/chunks/oasis/invoices.js?id=468f5d8b279884496332", - "/chunks/oasis/invoices/list.js": "/chunks/oasis/invoices/list.js?id=5fc965d6fde96ed7ef00", + "/chunks/oasis/invoices.js": "/chunks/oasis/invoices.js?id=acaee920d77bcc1daca2", + "/chunks/oasis/invoices/list.js": "/chunks/oasis/invoices/list.js?id=7aab0c285898e97a29d8", "/chunks/oasis/invoices~chunks/platform~chunks/shared.js": "/chunks/oasis/invoices~chunks/platform~chunks/shared.js?id=9ad184d8e96c7d04941c", "/chunks/oasis/platba.js": "/chunks/oasis/platba.js?id=53d9f2a31b1dd5dad85e", "/chunks/oasis/platba~chunks/oasis/upgrade-billing~chunks/oasis/upgrade-plan~chunks/upgrade-billing~ch~6880400b.js": "/chunks/oasis/platba~chunks/oasis/upgrade-billing~chunks/oasis/upgrade-plan~chunks/upgrade-billing~ch~6880400b.js?id=0c8d1c3cca084baa177f", @@ -107,22 +107,5 @@ "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5ccfc07.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5ccfc07.js?id=2b62263afbefba53c9c6", "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~f0e94b19.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~f0e94b19.js?id=d57479525cd6baaf09f3", "/vendors~chunks/files~chunks/oasis/invoices~chunks/platform~chunks/shared~chunks/shared-files~chunks/~9b82b04f.js": "/vendors~chunks/files~chunks/oasis/invoices~chunks/platform~chunks/shared~chunks/shared-files~chunks/~9b82b04f.js?id=548bff41ffa0385b8f01", - "/vendors~chunks/oasis/invoices~chunks/platform~chunks/shared.js": "/vendors~chunks/oasis/invoices~chunks/platform~chunks/shared.js?id=03d3cf785cbafa4d31f0", - "/chunks/oasis/invoices.525fb5fc3996fd479e64.hot-update.js": "/chunks/oasis/invoices.525fb5fc3996fd479e64.hot-update.js", - "/chunks/oasis/invoices/list.f8b68fed096730458e93.hot-update.js": "/chunks/oasis/invoices/list.f8b68fed096730458e93.hot-update.js", - "/chunks/oasis/invoices.5bd21dc572fc69a3cc77.hot-update.js": "/chunks/oasis/invoices.5bd21dc572fc69a3cc77.hot-update.js", - "/js/main.0837bfb2fd90932547ee.hot-update.js": "/js/main.0837bfb2fd90932547ee.hot-update.js", - "/js/main.0905d00a6c5a085b2fe7.hot-update.js": "/js/main.0905d00a6c5a085b2fe7.hot-update.js", - "/js/main.16fd33b90c3edcb8b122.hot-update.js": "/js/main.16fd33b90c3edcb8b122.hot-update.js", - "/js/main.c4585c2affb9ad7faa80.hot-update.js": "/js/main.c4585c2affb9ad7faa80.hot-update.js", - "/js/main.cc9d6a982ece49bfd227.hot-update.js": "/js/main.cc9d6a982ece49bfd227.hot-update.js", - "/js/main.6973dc93adfa40ca5718.hot-update.js": "/js/main.6973dc93adfa40ca5718.hot-update.js", - "/js/main.178d7e57e604f65f98b2.hot-update.js": "/js/main.178d7e57e604f65f98b2.hot-update.js", - "/chunks/oasis/invoices/list.8578178491ad6c3c565f.hot-update.js": "/chunks/oasis/invoices/list.8578178491ad6c3c565f.hot-update.js", - "/chunks/oasis/invoices.0522bbd02c490c945440.hot-update.js": "/chunks/oasis/invoices.0522bbd02c490c945440.hot-update.js", - "/chunks/oasis/invoices/list.0522bbd02c490c945440.hot-update.js": "/chunks/oasis/invoices/list.0522bbd02c490c945440.hot-update.js", - "/chunks/oasis/invoices.722ea2e34cc7e8e95915.hot-update.js": "/chunks/oasis/invoices.722ea2e34cc7e8e95915.hot-update.js", - "/chunks/oasis/invoices.884a13144310550d496d.hot-update.js": "/chunks/oasis/invoices.884a13144310550d496d.hot-update.js", - "/chunks/oasis/invoices/list.31d8fd28372c5ca4c59f.hot-update.js": "/chunks/oasis/invoices/list.31d8fd28372c5ca4c59f.hot-update.js", - "/chunks/oasis/invoices/list.f2da41474e486bd5b136.hot-update.js": "/chunks/oasis/invoices/list.f2da41474e486bd5b136.hot-update.js" + "/vendors~chunks/oasis/invoices~chunks/platform~chunks/shared.js": "/vendors~chunks/oasis/invoices~chunks/platform~chunks/shared.js?id=03d3cf785cbafa4d31f0" } diff --git a/resources/js/Oasis/Modules/Invoices/Invoices.vue b/resources/js/Oasis/Modules/Invoices/Invoices.vue index a762845f..fbfd085e 100644 --- a/resources/js/Oasis/Modules/Invoices/Invoices.vue +++ b/resources/js/Oasis/Modules/Invoices/Invoices.vue @@ -91,13 +91,13 @@ } }, methods: { - goTo(category) { + goTo(location) { let routes = { 'invoices': 'getInvoices', 'advance-invoices': 'getAdvanceInvoices', 'clients': 'getClients', } - this.$store.dispatch(routes[category]) + this.$store.dispatch(routes[location]) } }, mounted() { @@ -105,6 +105,8 @@ events.$on('fileItem:deselect', () => this.isScaledDown = false) events.$on('mobile-menu:hide', () => this.isScaledDown = false) + + this.$store.dispatch('getInvoices') } } diff --git a/resources/js/Oasis/Modules/Invoices/components/InvoiceActionsMobile.vue b/resources/js/Oasis/Modules/Invoices/components/InvoiceActionsMobile.vue index aeccfbdd..097f48f8 100644 --- a/resources/js/Oasis/Modules/Invoices/components/InvoiceActionsMobile.vue +++ b/resources/js/Oasis/Modules/Invoices/components/InvoiceActionsMobile.vue @@ -4,7 +4,7 @@
- {{ $route.meta.title }} + {{ directoryName }} Create @@ -32,8 +32,13 @@ }, computed: { ...mapGetters([ - // + 'currentFolder' ]), + directoryName() { + return this.currentFolder + ? this.currentFolder.name + : 'Invoices' + }, }, data() { return { diff --git a/resources/js/Oasis/Modules/Invoices/components/InvoiceBrowser.vue b/resources/js/Oasis/Modules/Invoices/components/InvoiceBrowser.vue index 59ff0d0d..73a4c4d5 100644 --- a/resources/js/Oasis/Modules/Invoices/components/InvoiceBrowser.vue +++ b/resources/js/Oasis/Modules/Invoices/components/InvoiceBrowser.vue @@ -144,32 +144,6 @@ id: undefined, location: 'invoices', }) - - this.$store.commit('LOADING_STATE', { - isLoading: false, - data: [ - { - id: 'c2fa9df5-se64-499b-b001-94691ccb14e2', - name: 'Nitex s.r.o. - 3260,00 EUR', - invoiceNumber: '2021001', - total: '3260,00 EUR', - created_at: '12. April. 2021', - clientName: 'Nitex s.r.o.', - file_url: 'http://192.168.1.198:8000/file/9ti6r4481cqtuk36-190001-FMkuIZM5TYWjp0TpxoTPjSYj96a5qMtM.pdf', - mimetype: 'pdf', - }, - { - id: 'c3fa9df5-ee64-499b-b001-94691ccb14e1', - name: 'VueFileManager s.r.o. - 220,00 EUR', - invoiceNumber: '2021002', - total: '220,00 EUR', - created_at: '9. April. 2021', - clientName: 'VueFileManager s.r.o.', - file_url: 'http://192.168.1.198:8000/file/9ti6r4481cqtuk36-190001-FMkuIZM5TYWjp0TpxoTPjSYj96a5qMtM.pdf', - mimetype: 'pdf', - }, - ], - }) } } diff --git a/resources/js/Oasis/Modules/Invoices/components/InvoiceDesktopToolbar.vue b/resources/js/Oasis/Modules/Invoices/components/InvoiceDesktopToolbar.vue index d655b293..38f17c77 100644 --- a/resources/js/Oasis/Modules/Invoices/components/InvoiceDesktopToolbar.vue +++ b/resources/js/Oasis/Modules/Invoices/components/InvoiceDesktopToolbar.vue @@ -6,7 +6,7 @@ - Invoices + {{ directoryName }}
@@ -90,8 +90,14 @@ computed: { ...mapGetters([ 'isVisibleSidebar', + 'currentFolder', 'clipboard', ]), + directoryName() { + return this.currentFolder + ? this.currentFolder.name + : this.homeDirectory.name + }, canActiveInView() { let locations = [ 'invoices', diff --git a/resources/js/Oasis/Modules/Invoices/components/InvoiceFilterMobile.vue b/resources/js/Oasis/Modules/Invoices/components/InvoiceFilterMobile.vue index daa4ba4f..b17e67d2 100644 --- a/resources/js/Oasis/Modules/Invoices/components/InvoiceFilterMobile.vue +++ b/resources/js/Oasis/Modules/Invoices/components/InvoiceFilterMobile.vue @@ -2,11 +2,11 @@ - - @@ -34,31 +34,13 @@ export default { }, methods: { showLocation(location) { - - }, - flushBrowseHistory() { - this.$store.commit('FLUSH_FOLDER_HISTORY') - }, - goToFiles() { - this.$store.dispatch('getFolder', [{folder: this.homeDirectory, back: false, init: true}]) - this.flushBrowseHistory() - }, - goToLatest() { - this.$store.dispatch('getLatest') - this.flushBrowseHistory() - }, - goToTrash() { - this.$store.dispatch('getTrash') - this.flushBrowseHistory() - }, - goToShared() { - this.$store.dispatch('getShared', [{back: false, init: false}]) - this.flushBrowseHistory() - }, - goToParticipantUploads() { - this.$store.dispatch('getParticipantUploads') - this.flushBrowseHistory() - } + let routes = { + 'invoices': 'getInvoices', + 'advance-invoices': 'getAdvanceInvoices', + 'clients': 'getClients', + } + this.$store.dispatch(routes[location]) + } } } diff --git a/resources/js/Oasis/Modules/Invoices/components/InvoiceItem.vue b/resources/js/Oasis/Modules/Invoices/components/InvoiceItem.vue index 04494441..1f2cc888 100644 --- a/resources/js/Oasis/Modules/Invoices/components/InvoiceItem.vue +++ b/resources/js/Oasis/Modules/Invoices/components/InvoiceItem.vue @@ -357,7 +357,7 @@ export default { width: 100%; display: flex; align-items: center; - padding: 7px 7px 7px 15px; + padding: 12px 7px 12px 15px; &.is-dragenter { border-radius: 8px; diff --git a/resources/js/store/modules/oasisInvoices b/resources/js/store/modules/oasisInvoices index 77daef70..4375c501 100644 --- a/resources/js/store/modules/oasisInvoices +++ b/resources/js/store/modules/oasisInvoices @@ -15,7 +15,7 @@ const actions = { }) axios - .get(`${getters.api}/invoices/invoice`) + .get('/api/oasis/invoices/regular') .then(response => { commit('LOADING_STATE', {loading: false, data: response.data}) }) @@ -36,7 +36,7 @@ const actions = { }) axios - .get(`${getters.api}/invoices/advance-invoice`) + .get('/api/oasis/invoices/advance') .then(response => { commit('LOADING_STATE', {loading: false, data: response.data}) }) @@ -57,7 +57,7 @@ const actions = { }) axios - .get(`${getters.api}/invoices/clients`) + .get('/api/oasis/invoices/clients') .then(response => { commit('LOADING_STATE', {loading: false, data: response.data}) }) diff --git a/routes/oasis.php b/routes/oasis.php index ef92c8f1..e4fc9f1a 100644 --- a/routes/oasis.php +++ b/routes/oasis.php @@ -1,6 +1,8 @@ 'api', 'prefix' => '/api/oasis'], function () { @@ -18,6 +20,17 @@ Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () { Route::get('/{order}', [SubscriptionController::class, 'get_subscription_request']); Route::get('/{order}/setup-intent', [SubscriptionController::class, 'get_setup_intent']); }); + + // Invoices + Route::group(['prefix' => 'invoices'], function () { + Route::get('/regular', [InvoiceController::class, 'get_all_regular_invoices']); + Route::get('/advance', [InvoiceController::class, 'get_all_advance_invoices']); + }); + + // Clients + Route::group(['prefix' => 'clients'], function () { + Route::get('/', [ClientController::class, 'index']); + }); }); // Web routes diff --git a/tests/Feature/Oasis/OasisClientTest.php b/tests/Feature/Oasis/OasisClientTest.php index dfb364e8..59983128 100644 --- a/tests/Feature/Oasis/OasisClientTest.php +++ b/tests/Feature/Oasis/OasisClientTest.php @@ -3,7 +3,9 @@ namespace Tests\Feature\Oasis; use App\Models\Oasis\Client; +use App\Models\User; use Illuminate\Foundation\Testing\DatabaseMigrations; +use Laravel\Sanctum\Sanctum; use Tests\TestCase; class OasisClientTest extends TestCase @@ -22,4 +24,26 @@ class OasisClientTest extends TestCase 'name' => $client->name, ]); } + + /** + * @test + */ + public function it_get_all_clients() + { + $user = User::factory(User::class) + ->create(['role' => 'user']); + + Sanctum::actingAs($user); + + $client = Client::factory(Client::class) + ->create([ + 'user_id' => $user->id, + ]); + + $this->getJson('/api/oasis/clients') + ->assertJsonFragment([ + 'id' => $client->id, + 'user_id' => $user->id, + ])->assertStatus(200); + } } diff --git a/tests/Feature/Oasis/OasisInvoiceTest.php b/tests/Feature/Oasis/OasisInvoiceTest.php index 27a302b7..d7c5987b 100644 --- a/tests/Feature/Oasis/OasisInvoiceTest.php +++ b/tests/Feature/Oasis/OasisInvoiceTest.php @@ -3,7 +3,9 @@ namespace Tests\Feature\Oasis; use App\Models\Oasis\Invoice; +use App\Models\User; use Illuminate\Foundation\Testing\DatabaseMigrations; +use Laravel\Sanctum\Sanctum; use Tests\TestCase; class OasisInvoiceTest extends TestCase @@ -124,4 +126,50 @@ class OasisInvoiceTest extends TestCase $this->assertEquals(40, invoice_total_tax($invoice)); $this->assertEquals('40,00 Kč', invoice_total_tax($invoice, true)); } + + /** + * @test + */ + public function it_get_all_user_regular_invoices() + { + $user = User::factory(User::class) + ->create(['role' => 'user']); + + Sanctum::actingAs($user); + + $invoice = Invoice::factory(Invoice::class) + ->create([ + 'user_id' => $user->id, + 'invoice_type' => 'regular_invoice' + ]); + + $response = $this->getJson('/api/oasis/invoices/regular') + ->assertJsonFragment([ + 'id' => $invoice->id, + ])->assertStatus(200); + + dd(json_decode($response->content(), true)); + } + + /** + * @test + */ + public function it_get_all_user_advance_invoices() + { + $user = User::factory(User::class) + ->create(['role' => 'user']); + + Sanctum::actingAs($user); + + $invoice = Invoice::factory(Invoice::class) + ->create([ + 'user_id' => $user->id, + 'invoice_type' => 'advance_invoice' + ]); + + $this->getJson('/api/oasis/invoices/advance') + ->assertJsonFragment([ + 'id' => $invoice->id, + ])->assertStatus(200); + } }