diff --git a/app/Http/Controllers/Oasis/InvoiceController.php b/app/Http/Controllers/Oasis/InvoiceController.php
index 4c321f67..21bc69e4 100644
--- a/app/Http/Controllers/Oasis/InvoiceController.php
+++ b/app/Http/Controllers/Oasis/InvoiceController.php
@@ -46,7 +46,7 @@ class InvoiceController extends Controller
*/
public function get_invoice(Invoice $invoice)
{
- if (! Storage::exists(invoice_path($invoice))) {
+ if (!Storage::exists(invoice_path($invoice))) {
abort(404, 'Not Found');
}
@@ -79,9 +79,10 @@ class InvoiceController extends Controller
public function store(StoreInvoiceRequest $request)
{
$client = $this->getOrStoreClient($request);
+ $user = $request->user();
$invoice = Invoice::create([
- 'user_id' => $request->user()->id,
+ 'user_id' => $user->id,
'client_id' => $client->id ?? null,
'invoice_type' => $request->invoice_type,
'invoice_number' => $request->invoice_number,
@@ -90,6 +91,7 @@ class InvoiceController extends Controller
'discount_type' => $request->discount_type ?? null,
'discount_rate' => $request->discount_rate ?? null,
'items' => $request->items,
+ 'user' => $user->invoiceProfile,
'client' => [
'email' => $client->email ?? $request->client_email,
'name' => $client->name ?? $request->client_name,
@@ -106,17 +108,17 @@ class InvoiceController extends Controller
// Generate PDF
\PDF::loadView('oasis.invoices.invoice', [
'invoice' => Invoice::find($invoice->id),
- 'user' => $request->user(),
+ 'user' => $user,
])
->setPaper('a4')
->setOrientation('portrait')
->save(
- storage_path("app/files/{$request->user()->id}/invoice-{$invoice->id}.pdf")
+ storage_path("app/files/{$user->id}/invoice-{$invoice->id}.pdf")
);
if ($request->send_invoice && $invoice->client['email']) {
Notification::route('mail', $invoice->client['email'])->notify(
- new InvoiceDeliveryNotification($request->user(), $invoice)
+ new InvoiceDeliveryNotification($user, $invoice)
);
}
diff --git a/app/Models/Oasis/Invoice.php b/app/Models/Oasis/Invoice.php
index 323a4a83..b80fc0a6 100644
--- a/app/Models/Oasis/Invoice.php
+++ b/app/Models/Oasis/Invoice.php
@@ -37,11 +37,6 @@ class Invoice extends Model
return $this->hasOne(Client::class, 'id', 'user_id');
}
- /**
- * Index file
- *
- * @return array
- */
public function toSearchableArray()
{
$array = $this->toArray();
@@ -72,24 +67,6 @@ class Invoice extends Model
$invoice->total_tax = invoice_total_tax($invoice);
$invoice->currency = 'CZK';
-
- $user = Auth::user() ?? User::find($invoice->user_id);
-
- $invoice->author_name = $user->settings->name ?? null;
- $invoice->author_stamp = ''; // TODO: doplnit
-
- $invoice->user = [
- 'name' => $user->settings->name ?? null,
- 'address' => $user->settings->address ?? null,
- 'state' => $user->settings->state ?? null,
- 'city' => $user->settings->city ?? null,
- 'postal_code' => $user->settings->postcode ?? null,
- 'country' => $user->settings->country ?? null,
- 'phone_number' => $user->settings->phoneNumber ?? null,
- 'bank_name' => $user->settings->bank_name ?? null,
- 'iban' => $user->settings->iban ?? null,
- 'swift' => $user->settings->swift ?? null,
- ];
});
}
}
diff --git a/app/Models/Oasis/InvoiceProfile.php b/app/Models/Oasis/InvoiceProfile.php
new file mode 100644
index 00000000..513a77c2
--- /dev/null
+++ b/app/Models/Oasis/InvoiceProfile.php
@@ -0,0 +1,33 @@
+hasOne(User::class, 'id', 'user_id');
+ }
+
+ protected static function boot()
+ {
+ parent::boot();
+
+ static::creating(function ($invoice) {
+ $invoice->id = (string) Str::uuid();
+ });
+ }
+}
diff --git a/app/Traits/Oasis.php b/app/Traits/Oasis.php
index 4f506df4..9883746e 100644
--- a/app/Traits/Oasis.php
+++ b/app/Traits/Oasis.php
@@ -4,20 +4,21 @@ namespace App\Traits;
use App\Models\Oasis\Client;
use App\Models\Oasis\Invoice;
+use App\Models\Oasis\InvoiceProfile;
use App\Models\Oasis\SubscriptionRequest;
trait Oasis
{
- /**
- * Get user subscription request
- *
- * @return mixed
- */
public function subscriptionRequest()
{
return $this->hasOne(SubscriptionRequest::class);
}
+ public function invoiceProfile()
+ {
+ return $this->hasOne(InvoiceProfile::class);
+ }
+
public function clients()
{
return $this->hasMany(Client::class, 'user_id', 'id');
diff --git a/database/factories/Oasis/InvoiceFactory.php b/database/factories/Oasis/InvoiceFactory.php
index dfcb10b5..0351330c 100644
--- a/database/factories/Oasis/InvoiceFactory.php
+++ b/database/factories/Oasis/InvoiceFactory.php
@@ -3,9 +3,6 @@
namespace Database\Factories\Oasis;
use App\Models\Oasis\Invoice;
-use App\Models\User;
-use Carbon\Carbon;
-use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Factories\Factory;
class InvoiceFactory extends Factory
@@ -32,7 +29,7 @@ class InvoiceFactory extends Factory
'invoice_number' => $this->faker->numberBetween(2120001, 2120999),
'variable_number' => $this->faker->numberBetween(2120001, 2120999),
'currency' => $this->faker->randomElement(['CZK', 'EUR']),
- 'author_name' => $this->faker->name,
+ 'user' => null,
'client' => [
'name' => $this->faker->company,
'email' => $this->faker->email,
@@ -47,21 +44,6 @@ class InvoiceFactory extends Factory
'dic' => $this->faker->numberBetween(11111111, 99999999),
'ic_dph' => 'CZ' . $this->faker->numberBetween(1111111111, 9999999999),
],
- 'user' => [
- 'name' => $this->faker->name,
- 'address' => $this->faker->address,
- 'state' => $this->faker->state,
- 'city' => $this->faker->city,
- 'postal_code' => $this->faker->postcode,
- 'country' => $this->faker->randomElement(
- ['SK', 'CZ', 'DE', 'FR']
- ),
- 'phone_number' => $this->faker->phoneNumber,
-
- 'bank_name' => $this->faker->randomElement(['Fio Banka', 'Tatra Banka']),
- 'iban' => $this->faker->iban('CZ'),
- 'swift' => $this->faker->swiftBicNumber,
- ],
'items' => [
[
'description' => $this->faker->realText(60),
@@ -77,7 +59,7 @@ class InvoiceFactory extends Factory
],
],
'discount_type' => $this->faker->randomElement(['percent', 'value', null]),
- 'delivery_at' => $this->faker->dateTimeBetween(
+ 'delivery_at' => $this->faker->dateTimeBetween(
$startDate = '-6 months', $endDate = 'now', $timezone = null
),
'created_at' => $this->faker->dateTimeBetween(
diff --git a/database/factories/Oasis/InvoiceProfileFactory.php b/database/factories/Oasis/InvoiceProfileFactory.php
new file mode 100644
index 00000000..e2a2dd59
--- /dev/null
+++ b/database/factories/Oasis/InvoiceProfileFactory.php
@@ -0,0 +1,51 @@
+ $this->faker->uuid,
+ 'user_id' => $this->faker->uuid,
+ 'company' => $this->faker->company,
+ 'logo' => '',
+ 'email' => $this->faker->email,
+ 'ico' => rand(11111111, 99999999),
+ 'dic' => rand(11111111, 99999999),
+ 'ic_dph' => 'SK' . rand(111111111111, 999999999999),
+ 'registration_notes' => $this->faker->realText(80),
+ 'author' => $this->faker->name,
+ 'stamp' => '',
+ 'address' => $this->faker->address,
+ 'state' => $this->faker->state,
+ 'city' => $this->faker->city,
+ 'postal_code' => $this->faker->postcode,
+ 'country' => $this->faker->randomElement([
+ 'SK', 'CZ', 'DE', 'FR'
+ ]),
+ 'phone' => $this->faker->phoneNumber,
+ 'bank' => $this->faker->randomElement([
+ 'Fio Banka', 'Tatra Banka'
+ ]),
+ 'iban' => $this->faker->iban('CZ'),
+ 'swift' => $this->faker->swiftBicNumber,
+ ];
+ }
+}
\ No newline at end of file
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 b683a0b7..4562bcdd 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,9 @@ class CreateInvoicesTable extends Migration
$table->uuid('user_id')->index();
$table->uuid('client_id')->nullable()->index();
- $table->enum('invoice_type', ['regular-invoice', 'advance-invoice']);
+ $table->enum('invoice_type', [
+ 'regular-invoice', 'advance-invoice'
+ ]);
$table->text('invoice_number')->nullable();
$table->text('variable_number')->nullable();
@@ -39,9 +41,6 @@ class CreateInvoicesTable extends Migration
$table->string('total_net')->nullable();
$table->string('total_tax')->nullable();
- $table->text('author_stamp')->nullable();
- $table->text('author_name')->nullable();
-
$table->timestamps();
});
}
diff --git a/database/migrations/oasis/2021_04_21_065756_add_bank_details_to_user_settings_table.php b/database/migrations/oasis/2021_04_21_065756_add_bank_details_to_user_settings_table.php
deleted file mode 100644
index 71fdf2cd..00000000
--- a/database/migrations/oasis/2021_04_21_065756_add_bank_details_to_user_settings_table.php
+++ /dev/null
@@ -1,39 +0,0 @@
-text('registration_notes')->nullable();
-
- $table->text('dic')->nullable();
- $table->text('ic_dph')->nullable();
-
- $table->text('bank_name')->nullable();
- $table->text('iban')->nullable();
- $table->text('swift')->nullable();
- });
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::table('user_settings', function (Blueprint $table) {
- $table->dropColumn(['bank_name','iban','swift']);
- });
- }
-}
diff --git a/database/migrations/oasis/2021_04_27_070058_create_invoice_profiles_table.php b/database/migrations/oasis/2021_04_27_070058_create_invoice_profiles_table.php
new file mode 100644
index 00000000..4aa0cd2b
--- /dev/null
+++ b/database/migrations/oasis/2021_04_27_070058_create_invoice_profiles_table.php
@@ -0,0 +1,57 @@
+uuid('id')->primary()->index();
+ $table->uuid('user_id')->index();
+
+ $table->text('company')->nullable();
+ $table->string('logo')->nullable();
+ $table->string('email')->nullable();
+ $table->string('phone')->nullable();
+
+ $table->text('address')->nullable();
+ $table->text('state')->nullable();
+ $table->text('city')->nullable();
+ $table->text('postal_code')->nullable();
+ $table->text('country')->nullable();
+
+ $table->string('ico')->nullable();
+ $table->string('dic')->nullable();
+ $table->string('ic_dph')->nullable();
+
+ $table->text('registration_notes')->nullable();
+
+ $table->text('bank')->nullable();
+ $table->string('iban')->nullable();
+ $table->string('swift')->nullable();
+
+ $table->string('author')->nullable();
+ $table->string('stamp')->nullable();
+
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('invoice_profiles');
+ }
+}
diff --git a/resources/views/oasis/invoices/invoice.blade.php b/resources/views/oasis/invoices/invoice.blade.php
index d8bd0349..bbdf4957 100644
--- a/resources/views/oasis/invoices/invoice.blade.php
+++ b/resources/views/oasis/invoices/invoice.blade.php
@@ -30,8 +30,8 @@
{{--TODO: klientske logo--}}
- {{ $user->email }}
- {{ $user->settings->phone_number }}
+ {{ $user->invoiceProfile->email }}
+ {{ $user->invoiceProfile->phone }}
{{ $user->settings->name }}
- {{ $user->settings->registration_notes }} +{{ $invoice->user['company'] }}
+ {{ $invoice->user['registration_notes'] }}{{ $user->settings->address }} {{ $user->settings->city }}
-{{ $user->settings->postal_code }}, {{ $user->settings->country }}
+{{ $invoice->user['address'] }} {{ $invoice->user['city'] }}
+{{ $invoice->user['postal_code'] }}, {{ $invoice->user['country'] }}
IČO: {{ $user->settings->ico }}
+ @isset($invoice->user['ico']) +IČO: {{ $invoice->user['ico'] }}
@endisset - @isset($user->settings->dic) -DIČ: {{ $user->settings->dic }}
+ @isset($invoice->user['dic']) +DIČ: {{ $invoice->user['dic'] }}
@endisset - @isset($invoice->supplier_ic_dph) -IČ DPH: {{ $user->settings->ic_dph }}
+ @isset($invoice->user['ic_dph']) +IČ DPH: {{ $invoice->user['ic_dph'] }}
@endisset -{{ $user->settings->bank_name }}
-IBAN: {{ $user->settings->iban }}, BIC kód/SWIFT: {{ $user->settings->swift }}
+{{ $invoice->user['bank'] }}
+IBAN: {{ $invoice->user['iban'] }}, BIC kód/SWIFT: {{ $invoice->user['swift'] }}