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 @@