mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-05-03 20:55:59 +00:00
Billing profile implementation
This commit is contained in:
@@ -4,9 +4,12 @@ namespace App\Console\Commands;
|
||||
|
||||
use App\Models\Oasis\Client;
|
||||
use App\Models\Oasis\Invoice;
|
||||
use App\Models\Setting;
|
||||
use App\Models\User;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Database\Eloquent\Factories\Sequence;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class SetupOasisEnvironment extends Command
|
||||
{
|
||||
@@ -44,6 +47,7 @@ class SetupOasisEnvironment extends Command
|
||||
$this->info('Setting up Oasis environment');
|
||||
|
||||
$this->create_demo_content();
|
||||
$this->set_oasis_data();
|
||||
|
||||
$this->info('Dispatching jobs...');
|
||||
$this->call('queue:work', [
|
||||
@@ -58,6 +62,33 @@ class SetupOasisEnvironment extends Command
|
||||
$user = User::whereEmail('howdy@hi5ve.digital')
|
||||
->first();
|
||||
|
||||
$hash = Str::random(12);
|
||||
|
||||
// Get invoice logo and stamp
|
||||
Storage::putFileAs("system", storage_path("demo/app/logo-horizontal.svg"), "{$hash}-logo-horizontal.svg", "private");
|
||||
Storage::putFileAs("system", storage_path("demo/oasis/stamp.png"), "{$hash}-stamp.png", "private");
|
||||
|
||||
$profile = $user->invoiceProfile()->create([
|
||||
'company' => 'VueFileManager Inc.',
|
||||
'registration_notes' => 'Registrácia na OR SR Bratislava I. oddiel: Sro vl. č. 91906',
|
||||
'logo' => "system/{$hash}-logo-horizontal.svg",
|
||||
'ico' => '46530045',
|
||||
'dic' => '2023489457',
|
||||
'ic_dph' => 'SK2023489457',
|
||||
'address' => 'Does 11',
|
||||
'state' => 'Slovakia',
|
||||
'city' => 'Bratislava',
|
||||
'postal_code' => '04001',
|
||||
'country' => 'SK',
|
||||
'bank' => 'Fio Banka',
|
||||
'iban' => 'SK20000054236423624',
|
||||
'swift' => 'FIOZXXX',
|
||||
'phone' => '+421950123456',
|
||||
'email' => 'howdy@hi5ve.digital',
|
||||
'author' => 'John Doe',
|
||||
'stamp' => "system/{$hash}-stamp.png",
|
||||
]);
|
||||
|
||||
$clients = Client::factory(Client::class)
|
||||
->count(6)
|
||||
->create(['user_id' => $user->id]);
|
||||
@@ -72,8 +103,10 @@ class SetupOasisEnvironment extends Command
|
||||
['client_id' => $clients[5]->id],
|
||||
))->count(2)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'invoice_type' => 'regular-invoice'
|
||||
'user_id' => $user->id,
|
||||
'invoice_type' => 'regular-invoice',
|
||||
'discount_type' => null,
|
||||
'user' => $profile->toArray(),
|
||||
]);
|
||||
|
||||
$advance_invoices = Invoice::factory(Invoice::class)
|
||||
@@ -89,6 +122,7 @@ class SetupOasisEnvironment extends Command
|
||||
'user_id' => $user->id,
|
||||
'invoice_type' => 'advance-invoice',
|
||||
'discount_type' => null,
|
||||
'user' => $profile->toArray(),
|
||||
]);
|
||||
|
||||
// Generate PDF
|
||||
@@ -109,4 +143,13 @@ class SetupOasisEnvironment extends Command
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public function set_oasis_data()
|
||||
{
|
||||
Setting::updateOrCreate([
|
||||
'name' => 'app_color'
|
||||
], [
|
||||
'value' => '#ae5fec'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Oasis\InvoiceProfileResource;
|
||||
use App\Models\Oasis\InvoiceProfile;
|
||||
use App\Models\Setting;
|
||||
use Auth;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -13,6 +14,15 @@ use Illuminate\Http\Response;
|
||||
|
||||
class InvoiceProfileController extends Controller
|
||||
{
|
||||
/**
|
||||
* @return Application|ResponseFactory|Response
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return response(
|
||||
new InvoiceProfileResource(Auth::user()->invoiceProfile), 200
|
||||
);
|
||||
}
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return Application|ResponseFactory|Response
|
||||
@@ -21,8 +31,8 @@ class InvoiceProfileController extends Controller
|
||||
{
|
||||
$profile = InvoiceProfile::create([
|
||||
'user_id' => $request->user()->id,
|
||||
'logo' => store_avatar($request, 'logo') ?? null,
|
||||
'stamp' => store_avatar($request, 'stamp') ?? null,
|
||||
'logo' => store_system_image($request, 'logo') ?? null,
|
||||
'stamp' => store_system_image($request, 'stamp') ?? null,
|
||||
'company' => $request->company,
|
||||
'email' => $request->email,
|
||||
'ico' => $request->ico,
|
||||
@@ -59,7 +69,7 @@ class InvoiceProfileController extends Controller
|
||||
$request->user()
|
||||
->invoiceProfile()
|
||||
->update([
|
||||
$request->name => store_avatar($request, $request->name)
|
||||
$request->name => store_system_image($request, $request->name)
|
||||
]);
|
||||
|
||||
return response('Done', 204);
|
||||
|
||||
+14
-6
@@ -290,14 +290,22 @@ function store_avatar($request, $name)
|
||||
// Store avatar
|
||||
$image_path = Str::random(16) . '-' . $image->getClientOriginalName();
|
||||
|
||||
// Create intervention image
|
||||
$img = Image::make($image->getRealPath());
|
||||
if (in_array($image->getClientMimeType(), ['image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/webp'])) {
|
||||
|
||||
// Generate thumbnail
|
||||
$img->fit('150', '150')->stream();
|
||||
// Create intervention image
|
||||
$img = Image::make($image->getRealPath());
|
||||
|
||||
// Store thumbnail to disk
|
||||
Storage::put("avatars/$image_path", $img);
|
||||
// Generate thumbnail
|
||||
$img->fit('150', '150')->stream();
|
||||
|
||||
// Store thumbnail to disk
|
||||
Storage::put("avatars/$image_path", $img);
|
||||
}
|
||||
|
||||
if ($image->getClientMimeType() === 'image/svg+xml') {
|
||||
|
||||
Storage::putFileAs("avatars", $image, $image_path);
|
||||
}
|
||||
|
||||
// Return path to image
|
||||
return "avatars/$image_path";
|
||||
|
||||
@@ -21,7 +21,9 @@ class Invoice extends Model
|
||||
'client' => 'array',
|
||||
];
|
||||
|
||||
public $guarded = ['id'];
|
||||
public $guarded = [
|
||||
'id'
|
||||
];
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
|
||||
@@ -25,11 +25,15 @@ class InvoiceFactory extends Factory
|
||||
'id' => $this->faker->uuid,
|
||||
'user_id' => $this->faker->uuid,
|
||||
'client_id' => $this->faker->uuid,
|
||||
'invoice_type' => $this->faker->randomElement(['regular-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']),
|
||||
'user' => null,
|
||||
'currency' => $this->faker->randomElement([
|
||||
'CZK', 'EUR'
|
||||
]),
|
||||
'user' => [],
|
||||
'client' => [
|
||||
'name' => $this->faker->company,
|
||||
'email' => $this->faker->email,
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"/chunks/admin~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js?id=a0543d93d8f11a2a5962",
|
||||
"/chunks/admin~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/shared.js?id=5f29df56a2d5925c40c9",
|
||||
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=b4e2d99a172f06a1d312",
|
||||
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=1ae1e65bb6a5ed7c3e10",
|
||||
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=2feb3390febba02cc5f0",
|
||||
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=f9f637ff26a13d7beb5d",
|
||||
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~b9e5655a.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~b9e5655a.js?id=04f0cd9719723459b685",
|
||||
"/chunks/app-billings.js": "/chunks/app-billings.js?id=82133cc16f55222bbbe6",
|
||||
@@ -52,10 +52,10 @@
|
||||
"/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=fd5e7aca8897f59cd625",
|
||||
"/chunks/oasis/invoices/list.js": "/chunks/oasis/invoices/list.js?id=7e67f5fdd3306971f5e4",
|
||||
"/chunks/oasis/invoices.js": "/chunks/oasis/invoices.js?id=d43eb767e75676b3709f",
|
||||
"/chunks/oasis/invoices/list.js": "/chunks/oasis/invoices/list.js?id=a5ade7590b36f3793415",
|
||||
"/chunks/oasis/invoices~chunks/oasis/invoices/list.js": "/chunks/oasis/invoices~chunks/oasis/invoices/list.js?id=045d3dd7ce573cb7ed11",
|
||||
"/chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js": "/chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js?id=750a1e714440c4f03c2f",
|
||||
"/chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js": "/chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js?id=c69c0503d09d1588f14a",
|
||||
"/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",
|
||||
"/chunks/oasis/sign-up.js": "/chunks/oasis/sign-up.js?id=e53eeb48ebabae259f9c",
|
||||
@@ -72,7 +72,7 @@
|
||||
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=08e2056bc3744b2ea8f9",
|
||||
"/chunks/plans.js": "/chunks/plans.js?id=5e1c668e35d2f04973b7",
|
||||
"/chunks/platform.js": "/chunks/platform.js?id=f463eed74ce0e6852b6d",
|
||||
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=7e96470b4052320d20b0",
|
||||
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=ec633fb6ff41c34084c8",
|
||||
"/chunks/profile.js": "/chunks/profile.js?id=1c1c666004fb44b1c404",
|
||||
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=d0a44ee2cc3e9882c14a",
|
||||
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=a1e46acc22ce82b2a61b",
|
||||
@@ -108,5 +108,96 @@
|
||||
"/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/oasis/invoices/list~chunks/platform~chunks/shared~~c9df84c5.js": "/vendors~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~~c9df84c5.js?id=4d042d0c0d8477a4f7ac",
|
||||
"/vendors~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js": "/vendors~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js?id=11378342c3b6251c133e"
|
||||
"/vendors~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js": "/vendors~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared.js?id=11378342c3b6251c133e",
|
||||
"/chunks/oasis/invoices/list.522cccf189442f3c8df9.hot-update.js": "/chunks/oasis/invoices/list.522cccf189442f3c8df9.hot-update.js",
|
||||
"/js/main.79ac1678fa87cb40e4cd.hot-update.js": "/js/main.79ac1678fa87cb40e4cd.hot-update.js",
|
||||
"/js/main.6ff7dfdc1dd89702fe6a.hot-update.js": "/js/main.6ff7dfdc1dd89702fe6a.hot-update.js",
|
||||
"/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~d4164210.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~d4164210.js?id=e3ee9bacf6ea805729dc",
|
||||
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~d0bdaad8.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~d0bdaad8.js?id=20fd8e1ff0fbbb883a9e",
|
||||
"/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~d23b1aac.js": "/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~d23b1aac.js?id=01ab356d3c9ba1175149",
|
||||
"/chunks/oasis/invoices/profile.js": "/chunks/oasis/invoices/profile.js?id=ebd70d658c5b32c14826",
|
||||
"/chunks/oasis/invoices/profile~chunks/profile~chunks/settings-password.js": "/chunks/oasis/invoices/profile~chunks/profile~chunks/settings-password.js?id=5f7a7e52edee7c45c2fe",
|
||||
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~12116e2d.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~12116e2d.js?id=1f7ca53e6cba768de852",
|
||||
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~8cdffba1.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~8cdffba1.js?id=f35fc78322dc4eb27c4e",
|
||||
"/chunks/oasis/invoices/profile.86cce368832399c14f2c.hot-update.js": "/chunks/oasis/invoices/profile.86cce368832399c14f2c.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.90535b42202f6ccfb4d4.hot-update.js": "/chunks/oasis/invoices/profile.90535b42202f6ccfb4d4.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.46b1c604b9cf2d07c83b.hot-update.js": "/chunks/oasis/invoices/profile.46b1c604b9cf2d07c83b.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.d4dc7257e82ccc72c998.hot-update.js": "/chunks/oasis/invoices/profile.d4dc7257e82ccc72c998.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.99eed22926ecbbbef068.hot-update.js": "/chunks/oasis/invoices/profile.99eed22926ecbbbef068.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.c0ae9ad0cf7b1958a080.hot-update.js": "/chunks/oasis/invoices/profile.c0ae9ad0cf7b1958a080.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.4e52b194c26ba587fe50.hot-update.js": "/chunks/oasis/invoices/profile.4e52b194c26ba587fe50.hot-update.js",
|
||||
"/chunks/oasis/invoices.8695612ce80a082bf0f3.hot-update.js": "/chunks/oasis/invoices.8695612ce80a082bf0f3.hot-update.js",
|
||||
"/chunks/oasis/invoices.a54b0b63a9fe6e30370b.hot-update.js": "/chunks/oasis/invoices.a54b0b63a9fe6e30370b.hot-update.js",
|
||||
"/chunks/oasis/invoices/list.8f7344b731f052fffd1e.hot-update.js": "/chunks/oasis/invoices/list.8f7344b731f052fffd1e.hot-update.js",
|
||||
"/js/main.a8f461a7be41a863060e.hot-update.js": "/js/main.a8f461a7be41a863060e.hot-update.js",
|
||||
"/chunks/app-language~chunks/dashboard~chunks/dashboard-oasis~chunks/files~chunks/invoices~chunks/oasi~be89c0bb.js": "/chunks/app-language~chunks/dashboard~chunks/dashboard-oasis~chunks/files~chunks/invoices~chunks/oasi~be89c0bb.js?id=b3e30c8dd757237db0e2",
|
||||
"/chunks/files~chunks/oasis/platba~chunks/settings-subscription~chunks/shared-files~chunks/shared/file~9d1352fd.js": "/chunks/files~chunks/oasis/platba~chunks/settings-subscription~chunks/shared-files~chunks/shared/file~9d1352fd.js?id=4030b241faac6b31341f",
|
||||
"/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js?id=6808db2deb2d07287ce9",
|
||||
"/chunks/oasis/invoices.a8f461a7be41a863060e.hot-update.js": "/chunks/oasis/invoices.a8f461a7be41a863060e.hot-update.js",
|
||||
"/chunks/oasis/invoices/list.a8f461a7be41a863060e.hot-update.js": "/chunks/oasis/invoices/list.a8f461a7be41a863060e.hot-update.js",
|
||||
"/chunks/platform~chunks/shared.a8f461a7be41a863060e.hot-update.js": "/chunks/platform~chunks/shared.a8f461a7be41a863060e.hot-update.js",
|
||||
"/js/main.54fd2076f822088606df.hot-update.js": "/js/main.54fd2076f822088606df.hot-update.js",
|
||||
"/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/settings~chunks/shared-files~chunks/shared/fi~41abd910.js": "/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/settings~chunks/shared-files~chunks/shared/fi~41abd910.js?id=c804f9bf9138c4da52e9",
|
||||
"/chunks/admin~chunks/oasis/invoices~chunks/platform.js": "/chunks/admin~chunks/oasis/invoices~chunks/platform.js?id=022bd4e56166d844c3b0",
|
||||
"/chunks/admin~chunks/oasis/invoices~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/oasis/invoices~chunks/platform~chunks/shared.js?id=073522656c63224e16a6",
|
||||
"/chunks/files~chunks/oasis/invoices~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/f~9f6a6eef.js": "/chunks/files~chunks/oasis/invoices~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/f~9f6a6eef.js?id=9bc0d89f45dff1feb308",
|
||||
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.54fd2076f822088606df.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.54fd2076f822088606df.hot-update.js",
|
||||
"/chunks/oasis/invoices.54fd2076f822088606df.hot-update.js": "/chunks/oasis/invoices.54fd2076f822088606df.hot-update.js",
|
||||
"/chunks/oasis/invoices/list.54fd2076f822088606df.hot-update.js": "/chunks/oasis/invoices/list.54fd2076f822088606df.hot-update.js",
|
||||
"/chunks/oasis/invoices~chunks/platform~chunks/shared.js": "/chunks/oasis/invoices~chunks/platform~chunks/shared.js?id=9ad184d8e96c7d04941c",
|
||||
"/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.a23d9da8da43103742b3.hot-update.js": "/chunks/oasis/invoices.a23d9da8da43103742b3.hot-update.js",
|
||||
"/chunks/oasis/invoices.fc81410f7429e93506c0.hot-update.js": "/chunks/oasis/invoices.fc81410f7429e93506c0.hot-update.js",
|
||||
"/chunks/oasis/invoices.e6a621e89dc3de2ba13c.hot-update.js": "/chunks/oasis/invoices.e6a621e89dc3de2ba13c.hot-update.js",
|
||||
"/chunks/oasis/invoices.5c5267f5589e3ec325ad.hot-update.js": "/chunks/oasis/invoices.5c5267f5589e3ec325ad.hot-update.js",
|
||||
"/chunks/oasis/invoices.c0d206d920b5666aa893.hot-update.js": "/chunks/oasis/invoices.c0d206d920b5666aa893.hot-update.js",
|
||||
"/chunks/oasis/invoices.6f84b681c95b116f15e8.hot-update.js": "/chunks/oasis/invoices.6f84b681c95b116f15e8.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.54653bbde50307d4acdd.hot-update.js": "/chunks/oasis/invoices/profile.54653bbde50307d4acdd.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.e6e1c5c2c9c578939b3a.hot-update.js": "/chunks/oasis/invoices/profile.e6e1c5c2c9c578939b3a.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.7d5c568e572fdd809de7.hot-update.js": "/chunks/oasis/invoices/profile.7d5c568e572fdd809de7.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.5385474bafa8440580b1.hot-update.js": "/chunks/oasis/invoices/profile.5385474bafa8440580b1.hot-update.js",
|
||||
"/js/main.2cd9e691a1a4a8a3d1e1.hot-update.js": "/js/main.2cd9e691a1a4a8a3d1e1.hot-update.js",
|
||||
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~f15e904d.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~f15e904d.js?id=8671a04a21b80c7402e7",
|
||||
"/chunks/oasis/invoices/profile.2cd9e691a1a4a8a3d1e1.hot-update.js": "/chunks/oasis/invoices/profile.2cd9e691a1a4a8a3d1e1.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.620a14906d7efd74eaff.hot-update.js": "/chunks/oasis/invoices/profile.620a14906d7efd74eaff.hot-update.js",
|
||||
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~d0bdaad8.0c58113c8bbca8307549.hot-update.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~d0bdaad8.0c58113c8bbca8307549.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.9cf6026da2e8b2c3b666.hot-update.js": "/chunks/oasis/invoices/profile.9cf6026da2e8b2c3b666.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.0bfeeb37c7b3b92be57d.hot-update.js": "/chunks/oasis/invoices/profile.0bfeeb37c7b3b92be57d.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.d45f2c43faa9e43965d7.hot-update.js": "/chunks/oasis/invoices/profile.d45f2c43faa9e43965d7.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.8f15a13976da18e6418f.hot-update.js": "/chunks/oasis/invoices/profile.8f15a13976da18e6418f.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.f9299e662088ba4afc0b.hot-update.js": "/chunks/oasis/invoices/profile.f9299e662088ba4afc0b.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.5987dbe6cb626274da0b.hot-update.js": "/chunks/oasis/invoices/profile.5987dbe6cb626274da0b.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.2b32fc92da7ccad31cab.hot-update.js": "/chunks/oasis/invoices/profile.2b32fc92da7ccad31cab.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.f0869e8dad717c3f5842.hot-update.js": "/chunks/oasis/invoices/profile.f0869e8dad717c3f5842.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.67560b729a910765a019.hot-update.js": "/chunks/oasis/invoices/profile.67560b729a910765a019.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.c8fe1ce298f0408305d6.hot-update.js": "/chunks/oasis/invoices/profile.c8fe1ce298f0408305d6.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.3f3f8be5f2dbf23d91ec.hot-update.js": "/chunks/oasis/invoices/profile.3f3f8be5f2dbf23d91ec.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.8ef6f820eb0a067689e3.hot-update.js": "/chunks/oasis/invoices/profile.8ef6f820eb0a067689e3.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.f7fc6f6fb390e73cff06.hot-update.js": "/chunks/oasis/invoices/profile.f7fc6f6fb390e73cff06.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.0ea4b3a214661f4bfa4f.hot-update.js": "/chunks/oasis/invoices/profile.0ea4b3a214661f4bfa4f.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.0047dd8c27475df0e683.hot-update.js": "/chunks/oasis/invoices/profile.0047dd8c27475df0e683.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.51e7c6d11c7be967eb6b.hot-update.js": "/chunks/oasis/invoices/profile.51e7c6d11c7be967eb6b.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.1c6b58e987107cd5de6d.hot-update.js": "/chunks/oasis/invoices/profile.1c6b58e987107cd5de6d.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.cdc9250d77e3b26e3f60.hot-update.js": "/chunks/oasis/invoices/profile.cdc9250d77e3b26e3f60.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.d9bb7ff6f390d2f9b3e0.hot-update.js": "/chunks/oasis/invoices/profile.d9bb7ff6f390d2f9b3e0.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.a03e6c76ad49af4faec7.hot-update.js": "/chunks/oasis/invoices/profile.a03e6c76ad49af4faec7.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.095bcb3870fe3096695a.hot-update.js": "/chunks/oasis/invoices/profile.095bcb3870fe3096695a.hot-update.js",
|
||||
"/js/main.35316e692f00610c86cf.hot-update.js": "/js/main.35316e692f00610c86cf.hot-update.js",
|
||||
"/js/main.a9a52e8275a61b77c250.hot-update.js": "/js/main.a9a52e8275a61b77c250.hot-update.js",
|
||||
"/js/main.d50196048f568d3defd5.hot-update.js": "/js/main.d50196048f568d3defd5.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.d50196048f568d3defd5.hot-update.js": "/chunks/oasis/invoices/profile.d50196048f568d3defd5.hot-update.js",
|
||||
"/js/main.5522a02081083adb5775.hot-update.js": "/js/main.5522a02081083adb5775.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.5522a02081083adb5775.hot-update.js": "/chunks/oasis/invoices/profile.5522a02081083adb5775.hot-update.js",
|
||||
"/chunks/oasis/invoices.051e05374113f97f6aa5.hot-update.js": "/chunks/oasis/invoices.051e05374113f97f6aa5.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.16dddd982ffc415c461e.hot-update.js": "/chunks/oasis/invoices/profile.16dddd982ffc415c461e.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.3cca96e2c03d207f9511.hot-update.js": "/chunks/oasis/invoices/profile.3cca96e2c03d207f9511.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.f53a5794b742383f9272.hot-update.js": "/chunks/oasis/invoices/profile.f53a5794b742383f9272.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.6b30ee6b601643e547c8.hot-update.js": "/chunks/oasis/invoices/profile.6b30ee6b601643e547c8.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.310066790e74c0b9cee6.hot-update.js": "/chunks/oasis/invoices/profile.310066790e74c0b9cee6.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.8f961ce3a0a773d1a530.hot-update.js": "/chunks/oasis/invoices/profile.8f961ce3a0a773d1a530.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.19871652d7a72470542f.hot-update.js": "/chunks/oasis/invoices/profile.19871652d7a72470542f.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.cb81c09128a52a34d332.hot-update.js": "/chunks/oasis/invoices/profile.cb81c09128a52a34d332.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.5b768298ff09de647a58.hot-update.js": "/chunks/oasis/invoices/profile.5b768298ff09de647a58.hot-update.js",
|
||||
"/chunks/oasis/invoices/profile.e846a41b96190f8daccf.hot-update.js": "/chunks/oasis/invoices/profile.e846a41b96190f8daccf.hot-update.js"
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 375 KiB |
@@ -0,0 +1,267 @@
|
||||
<template>
|
||||
<div id="single-page">
|
||||
<MobileHeader :title="$router.currentRoute.meta.title" />
|
||||
<PageHeader :title="$router.currentRoute.meta.title" />
|
||||
|
||||
<div id="page-content" class="medium-width">
|
||||
<div class="content-page">
|
||||
<PageTab :is-loading="! profile">
|
||||
<PageTabGroup>
|
||||
<div class="form block-form">
|
||||
<FormLabel>Company & Logo</FormLabel>
|
||||
<InfoBox>
|
||||
Here you can set your <b class="text-theme">billing profile</b> which will be paste to your every newly generated invoice.
|
||||
</InfoBox>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Logo (optional):</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="logo" v-slot="{ errors }">
|
||||
<ImageInput @input="$updateImage('/oasis/invoices/profile', 'logo', profile.logo)" :image="$getImage(profile.logo)" v-model="profile.logo" :error="errors[0]" />
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Company name:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="company" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'company', profile.company)" v-model="profile.company" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Registration Notes (optional):</label>
|
||||
<div class="input-wrapper">
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="registration_notes" rules="required" v-slot="{ errors }">
|
||||
<textarea
|
||||
rows="2"
|
||||
@input="$updateText('/oasis/invoices/profile', 'registration_notes', profile.registration_notes)"
|
||||
v-model="profile.registration_notes"
|
||||
placeholder=""
|
||||
:class="{'is-error': errors[0]}"
|
||||
class="focus-border-theme"
|
||||
/>
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup>
|
||||
<div class="form block-form">
|
||||
<FormLabel>Company Details</FormLabel>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>ICO:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="ico" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'ico', profile.ico)" v-model="profile.ico" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>DIC:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="dic" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'dic', profile.dic)" v-model="profile.dic" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>IC DPH (optional):</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="ic_dph" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'ic_dph', profile.ic_dph)" v-model="profile.ic_dph" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
</div>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup>
|
||||
<div class="form block-form">
|
||||
<FormLabel>Company Address</FormLabel>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Address:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="address" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'address', profile.address)" v-model="profile.address" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>City:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="city" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'city', profile.city)" v-model="profile.city" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Postal Code:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="postal_code" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'postal_code', profile.postal_code)" v-model="profile.postal_code" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Country:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="country" rules="required" v-slot="{ errors }">
|
||||
<SelectInput @input="$updateText('/oasis/invoices/profile', 'country', profile.country)" v-model="profile.country" :default="profile.country" :options="countries" placeholder="" :isError="errors[0]"/>
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
</div>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup>
|
||||
<div class="form block-form">
|
||||
<FormLabel>Bank Info</FormLabel>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Bank Name:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="bank" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'bank', profile.bank)" v-model="profile.bank" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Iban:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="iban" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'iban', profile.iban)" v-model="profile.iban" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Swift code:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="swift" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'swift', profile.swift)" v-model="profile.swift" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
</div>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup>
|
||||
<div class="form block-form">
|
||||
<FormLabel>Author</FormLabel>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Phone (optional):</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="phone" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'phone', profile.phone)" v-model="profile.phone" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Email (optional):</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="email" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'email', profile.email)" v-model="profile.email" placeholder="" type="email"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Author name:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="author" rules="required" v-slot="{ errors }">
|
||||
<input @input="$updateText('/oasis/invoices/profile', 'author', profile.author)" v-model="profile.author" placeholder="" type="text"
|
||||
:class="{'is-error': errors[0]}" class="focus-border-theme" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Stamp:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="stamp" v-slot="{ errors }">
|
||||
<ImageInput @input="$updateImage('/oasis/invoices/profile', 'stamp', profile.stamp)" :image="$getImage(profile.stamp)" v-model="profile.stamp" :error="errors[0]" />
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
</div>
|
||||
</PageTabGroup>
|
||||
</PageTab>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
|
||||
import PageTabGroup from '@/components/Others/Layout/PageTabGroup'
|
||||
import SelectInput from '@/components/Others/Forms/SelectInput'
|
||||
import ImageInput from '@/components/Others/Forms/ImageInput'
|
||||
import FormLabel from '@/components/Others/Forms/FormLabel'
|
||||
import MobileHeader from '@/components/Mobile/MobileHeader'
|
||||
import ButtonBase from '@/components/FilesView/ButtonBase'
|
||||
import PageTab from '@/components/Others/Layout/PageTab'
|
||||
import PageHeader from '@/components/Others/PageHeader'
|
||||
import ThemeLabel from '@/components/Others/ThemeLabel'
|
||||
import InfoBox from '@/components/Others/Forms/InfoBox'
|
||||
import {required} from 'vee-validate/dist/rules'
|
||||
import {mapGetters} from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'BillingProfile',
|
||||
props: [
|
||||
'user'
|
||||
],
|
||||
components: {
|
||||
ValidationProvider,
|
||||
ValidationObserver,
|
||||
PageTabGroup,
|
||||
MobileHeader,
|
||||
SelectInput,
|
||||
ImageInput,
|
||||
PageHeader,
|
||||
ButtonBase,
|
||||
ThemeLabel,
|
||||
FormLabel,
|
||||
required,
|
||||
InfoBox,
|
||||
PageTab,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([
|
||||
'countries',
|
||||
'config',
|
||||
]),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isLoading: false,
|
||||
profile: undefined,
|
||||
}
|
||||
},
|
||||
methods: {},
|
||||
created() {
|
||||
axios.get('/api/oasis/invoices/profile')
|
||||
.then(response => {
|
||||
this.profile = response.data.data.attributes
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '@assets/vuefilemanager/_variables';
|
||||
@import '@assets/vuefilemanager/_mixins';
|
||||
@import '@assets/vuefilemanager/_forms';
|
||||
|
||||
.block-form {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -14,7 +14,50 @@
|
||||
<MobileNavigation />
|
||||
<SidebarNavigation />
|
||||
|
||||
<router-view :class="{'is-scaled-down': isScaledDown}" />
|
||||
<div id="viewport">
|
||||
|
||||
<!--Sidebar navigation-->
|
||||
<ContentSidebar>
|
||||
<ContentGroup title="Invoices" class="navigator menu-list-wrapper vertical">
|
||||
<a @click="goTo('regular-invoice')" :class="{'is-active': $isThisLocation(['regular-invoice']) && $route.name === 'InvoicesList'}" class="menu-list-item link">
|
||||
<div class="icon text-theme">
|
||||
<file-text-icon size="17" />
|
||||
</div>
|
||||
<div class="label text-theme">
|
||||
Invoices
|
||||
</div>
|
||||
</a>
|
||||
<a @click="goTo('advance-invoice')" :class="{'is-active': $isThisLocation(['advance-invoice']) && $route.name === 'InvoicesList'}" class="menu-list-item link">
|
||||
<div class="icon text-theme">
|
||||
<clock-icon size="17" />
|
||||
</div>
|
||||
<div class="label text-theme">
|
||||
Advance Invoices
|
||||
</div>
|
||||
</a>
|
||||
</ContentGroup>
|
||||
<ContentGroup title="Others" class="navigator menu-list-wrapper vertical">
|
||||
<a @click="goTo('clients')" :class="{'is-active': $isThisLocation(['clients']) && $route.name === 'InvoicesList'}" class="menu-list-item link">
|
||||
<div class="icon text-theme">
|
||||
<users-icon size="17" />
|
||||
</div>
|
||||
<div class="label text-theme">
|
||||
Clients
|
||||
</div>
|
||||
</a>
|
||||
<router-link :to="{name: 'InvoicesProfile'}" class="menu-list-item link">
|
||||
<div class="icon text-theme">
|
||||
<edit2-icon size="17" />
|
||||
</div>
|
||||
<div class="label text-theme">
|
||||
Billing Profile
|
||||
</div>
|
||||
</router-link>
|
||||
</ContentGroup>
|
||||
</ContentSidebar>
|
||||
|
||||
<router-view :class="{'is-scaled-down': isScaledDown}" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -25,7 +68,7 @@
|
||||
import ClientMobileMenu from '@/Oasis/Modules/Invoices/components/ClientMobileMenu'
|
||||
import InvoiceCreateMenu from '@/Oasis/Modules/Invoices/components/InvoiceCreateMenu'
|
||||
|
||||
import {UsersIcon, FileTextIcon, ClockIcon} from 'vue-feather-icons'
|
||||
import {UsersIcon, FileTextIcon, ClockIcon, Edit2Icon} from 'vue-feather-icons'
|
||||
import SidebarNavigation from '@/components/Sidebar/SidebarNavigation'
|
||||
import MobileNavigation from '@/components/Others/MobileNavigation'
|
||||
import ContentSidebar from '@/components/Sidebar/ContentSidebar'
|
||||
@@ -53,6 +96,7 @@
|
||||
FileTextIcon,
|
||||
ContentGroup,
|
||||
FilePreview,
|
||||
Edit2Icon,
|
||||
UsersIcon,
|
||||
ClockIcon,
|
||||
},
|
||||
@@ -68,14 +112,21 @@
|
||||
'advance-invoice': 'getAdvanceInvoices',
|
||||
'clients': 'getClients',
|
||||
}
|
||||
|
||||
if (this.$route.name !== 'InvoicesList') {
|
||||
this.$router.push({name: 'InvoicesList'})
|
||||
}
|
||||
|
||||
this.$store.dispatch(routes[location])
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
events.$on('mobile-menu:show', () => this.isScaledDown = true)
|
||||
|
||||
events.$on('fileItem:deselect', () => this.isScaledDown = false)
|
||||
events.$on('mobile-menu:hide', () => this.isScaledDown = false)
|
||||
|
||||
this.$store.dispatch('getRegularInvoices')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
<template>
|
||||
<section id="viewport">
|
||||
|
||||
<!--Sidebar navigation-->
|
||||
<ContentSidebar>
|
||||
<ContentGroup title="Invoices" class="navigator menu-list-wrapper vertical">
|
||||
<a @click="goTo('regular-invoice')" :class="{'is-active': $isThisLocation(['regular-invoice'])}" class="menu-list-item link">
|
||||
<div class="icon text-theme">
|
||||
<file-text-icon size="17" />
|
||||
</div>
|
||||
<div class="label text-theme">
|
||||
Invoices
|
||||
</div>
|
||||
</a>
|
||||
<a @click="goTo('advance-invoice')" :class="{'is-active': $isThisLocation(['advance-invoice'])}" class="menu-list-item link">
|
||||
<div class="icon text-theme">
|
||||
<clock-icon size="17" />
|
||||
</div>
|
||||
<div class="label text-theme">
|
||||
Advance Invoices
|
||||
</div>
|
||||
</a>
|
||||
</ContentGroup>
|
||||
<ContentGroup title="Others" class="navigator menu-list-wrapper vertical">
|
||||
<a @click="goTo('clients')" :class="{'is-active': $isThisLocation(['clients'])}" class="menu-list-item link">
|
||||
<div class="icon text-theme">
|
||||
<users-icon size="17" />
|
||||
</div>
|
||||
<div class="label text-theme">
|
||||
Clients
|
||||
</div>
|
||||
</a>
|
||||
</ContentGroup>
|
||||
</ContentSidebar>
|
||||
|
||||
<ContentInvoiceView />
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ContentInvoiceView from '@/Oasis/Modules/Invoices/ContentInvoiceView'
|
||||
import InvoiceSortingMobile from '@/Oasis/Modules/Invoices/components/InvoiceSortingMobile'
|
||||
import InvoiceFilterMobile from '@/Oasis/Modules/Invoices/components/InvoiceFilterMobile'
|
||||
import InvoiceMobileMenu from '@/Oasis/Modules/Invoices/components/InvoiceMobileMenu'
|
||||
import ClientMobileMenu from '@/Oasis/Modules/Invoices/components/ClientMobileMenu'
|
||||
import InvoiceCreateMenu from '@/Oasis/Modules/Invoices/components/InvoiceCreateMenu'
|
||||
|
||||
import {UsersIcon, FileTextIcon, ClockIcon} from 'vue-feather-icons'
|
||||
import SidebarNavigation from '@/components/Sidebar/SidebarNavigation'
|
||||
import MobileNavigation from '@/components/Others/MobileNavigation'
|
||||
import ContentSidebar from '@/components/Sidebar/ContentSidebar'
|
||||
import FilePreview from '@/components/FilesView/FilePreview'
|
||||
import ContentGroup from '@/components/Sidebar/ContentGroup'
|
||||
import {mapGetters} from 'vuex'
|
||||
import {events} from '@/bus'
|
||||
|
||||
export default {
|
||||
name: 'Settings',
|
||||
computed: {
|
||||
...mapGetters([
|
||||
'config'
|
||||
]),
|
||||
},
|
||||
components: {
|
||||
ContentInvoiceView,
|
||||
InvoiceSortingMobile,
|
||||
InvoiceFilterMobile,
|
||||
InvoiceCreateMenu,
|
||||
InvoiceMobileMenu,
|
||||
SidebarNavigation,
|
||||
ClientMobileMenu,
|
||||
MobileNavigation,
|
||||
ContentSidebar,
|
||||
FileTextIcon,
|
||||
ContentGroup,
|
||||
FilePreview,
|
||||
UsersIcon,
|
||||
ClockIcon,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isScaledDown: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
goTo(location) {
|
||||
let routes = {
|
||||
'regular-invoice': 'getRegularInvoices',
|
||||
'advance-invoice': 'getAdvanceInvoices',
|
||||
'clients': 'getClients',
|
||||
}
|
||||
this.$store.dispatch(routes[location])
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
events.$on('mobile-menu:show', () => this.isScaledDown = true)
|
||||
|
||||
events.$on('fileItem:deselect', () => this.isScaledDown = false)
|
||||
events.$on('mobile-menu:hide', () => this.isScaledDown = false)
|
||||
|
||||
this.$store.dispatch('getRegularInvoices')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '@assets/vuefilemanager/_mixins';
|
||||
|
||||
@media only screen and (max-width: 690px) {
|
||||
|
||||
.is-scaled-down {
|
||||
@include transform(scale(0.95));
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="page-tab">
|
||||
<div id="loader" v-show="isLoading">
|
||||
<div id="loader" v-if="isLoading">
|
||||
<Spinner></Spinner>
|
||||
</div>
|
||||
<slot v-show="! isLoading"></slot>
|
||||
<slot v-if="! isLoading"></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
Vendored
+11
-1
@@ -86,11 +86,21 @@ const routesOasis = [
|
||||
name: 'InvoicesList',
|
||||
path: '/invoice/invoices',
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "chunks/oasis/invoices/list" */ './Oasis/Modules/Invoices/Invoices'),
|
||||
import(/* webpackChunkName: "chunks/oasis/invoices/list" */ './Oasis/Modules/Invoices/InvoicesView'),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: 'Invoices'
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'InvoicesProfile',
|
||||
path: '/invoice/profile',
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "chunks/oasis/invoices/profile" */ './Oasis/Modules/Invoices/BillingProfile'),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: 'Billing Profile'
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -27,8 +27,10 @@
|
||||
<div class="row">
|
||||
<div class="col-left">
|
||||
|
||||
{{--TODO: klientske logo--}}
|
||||
<img class="logo" src="{{ base64_from_storage_image('system/5YDehSGh-vuefilemanager-horizontal-logo.svg') }}">
|
||||
{{--TODO: pridat textove logo--}}
|
||||
@if($user->invoiceProfile->logo)
|
||||
<img class="logo" src="{{ base64_from_storage_image($user->invoiceProfile->logo) }}">
|
||||
@endif
|
||||
|
||||
<b class="email">{{ $user->invoiceProfile->email }}</b>
|
||||
<b class="phone">{{ $user->invoiceProfile->phone }}</b>
|
||||
@@ -275,10 +277,14 @@
|
||||
@endif
|
||||
</div>
|
||||
<div class="sign">
|
||||
@if(is_route('invoice-debug'))
|
||||
<img src="{{ asset('/stamp.png') }}">
|
||||
@if(is_route('invoice-debug') && $user->invoiceProfile->stamp)
|
||||
<img src="{{ $user->invoiceProfile->stamp }}">
|
||||
@endif
|
||||
{{--<img src="{{ public_path('/stamp.png') }}">--}}
|
||||
|
||||
@if(! is_route('invoice-debug') && $user->invoiceProfile->stamp)
|
||||
<img src="{{ base64_from_storage_image($user->invoiceProfile->stamp) }}">
|
||||
@endif
|
||||
|
||||
<span class="highlight">Faktúru vystavil:</span> {{ $invoice->user['author'] }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -31,6 +31,7 @@ Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () {
|
||||
|
||||
Route::post('/', [InvoiceController::class, 'store']);
|
||||
|
||||
Route::get('/profile', [InvoiceProfileController::class, 'show']);
|
||||
Route::post('/profile', [InvoiceProfileController::class, 'store']);
|
||||
Route::patch('/profile', [InvoiceProfileController::class, 'update']);
|
||||
});
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 326 KiB |
@@ -14,6 +14,26 @@ class OasisInvoiceProfileTest extends TestCase
|
||||
{
|
||||
use DatabaseMigrations;
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_get_user_invoice_profile()
|
||||
{
|
||||
$user = User::factory(User::class)
|
||||
->create(['role' => 'user']);
|
||||
|
||||
$profile = InvoiceProfile::factory(InvoiceProfile::class)
|
||||
->create(['user_id' => $user->id]);
|
||||
|
||||
Sanctum::actingAs($user);
|
||||
|
||||
$this->getJson('/api/oasis/invoices/profile')
|
||||
->assertStatus(200)
|
||||
->assertJsonFragment([
|
||||
'company' => $profile->company,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
@@ -30,24 +50,28 @@ class OasisInvoiceProfileTest extends TestCase
|
||||
Sanctum::actingAs($user);
|
||||
|
||||
$this->postJson('/api/oasis/invoices/profile', [
|
||||
'logo' => $image,
|
||||
'stamp' => $image,
|
||||
'company' => 'VueFileManager Inc.',
|
||||
'email' => 'howdy@hi5ve.digital',
|
||||
'registration_notes' => 'Some registration notes',
|
||||
'logo' => $image,
|
||||
|
||||
'ico' => '11111111',
|
||||
'dic' => '11111111',
|
||||
'ic_dph' => 'SK20002313123',
|
||||
'registration_notes' => 'Some registration notes',
|
||||
'author' => 'John Doe',
|
||||
|
||||
'address' => 'Does 11',
|
||||
'state' => 'Slovakia',
|
||||
'city' => 'Bratislava',
|
||||
'postal_code' => '04001',
|
||||
'country' => 'SK',
|
||||
'phone' => '+421950123456',
|
||||
|
||||
'bank' => 'Fio Banka',
|
||||
'iban' => 'SK20000054236423624',
|
||||
'swift' => 'FIOZXXX',
|
||||
|
||||
'phone' => '+421950123456',
|
||||
'email' => 'howdy@hi5ve.digital',
|
||||
'author' => 'John Doe',
|
||||
'stamp' => $image,
|
||||
])->assertStatus(201)
|
||||
->assertJsonFragment([
|
||||
'company' => 'VueFileManager Inc.',
|
||||
|
||||
@@ -292,16 +292,15 @@ class OasisInvoiceTest extends TestCase
|
||||
Sanctum::actingAs($user);
|
||||
|
||||
$this->postJson('/api/oasis/invoices', [
|
||||
'invoice_type' => 'regular-invoice',
|
||||
'invoice_number' => '2120001',
|
||||
'variable_number' => '2120001',
|
||||
'items' => $this->items,
|
||||
'discount_type' => 'percent',
|
||||
'discount_rate' => 10,
|
||||
'delivery_at' => Carbon::now()->addWeek(),
|
||||
'store_client' => true,
|
||||
'send_invoice' => true,
|
||||
|
||||
'invoice_type' => 'regular-invoice',
|
||||
'invoice_number' => '2120001',
|
||||
'variable_number' => '2120001',
|
||||
'items' => $this->items,
|
||||
'discount_type' => 'percent',
|
||||
'discount_rate' => 10,
|
||||
'delivery_at' => Carbon::now()->addWeek(),
|
||||
'store_client' => true,
|
||||
'send_invoice' => true,
|
||||
'client' => 'others',
|
||||
'client_avatar' => null,
|
||||
'client_name' => 'VueFileManager Inc.',
|
||||
@@ -350,16 +349,15 @@ class OasisInvoiceTest extends TestCase
|
||||
Sanctum::actingAs($user);
|
||||
|
||||
$this->postJson('/api/oasis/invoices', [
|
||||
'invoice_type' => 'regular-invoice',
|
||||
'invoice_number' => '2120001',
|
||||
'variable_number' => '2120001',
|
||||
'items' => $this->items,
|
||||
'discount_type' => 'percent',
|
||||
'discount_rate' => 10,
|
||||
'delivery_at' => Carbon::now()->addWeek(),
|
||||
'store_client' => false,
|
||||
'send_invoice' => false,
|
||||
|
||||
'invoice_type' => 'regular-invoice',
|
||||
'invoice_number' => '2120001',
|
||||
'variable_number' => '2120001',
|
||||
'items' => $this->items,
|
||||
'discount_type' => 'percent',
|
||||
'discount_rate' => 10,
|
||||
'delivery_at' => Carbon::now()->addWeek(),
|
||||
'store_client' => false,
|
||||
'send_invoice' => false,
|
||||
'client' => 'others',
|
||||
'client_avatar' => null,
|
||||
'client_name' => 'VueFileManager Inc.',
|
||||
@@ -409,16 +407,15 @@ class OasisInvoiceTest extends TestCase
|
||||
Sanctum::actingAs($user);
|
||||
|
||||
$this->postJson('/api/oasis/invoices', [
|
||||
'invoice_type' => 'regular-invoice',
|
||||
'invoice_number' => '2120001',
|
||||
'variable_number' => '2120001',
|
||||
'items' => $this->items,
|
||||
'discount_type' => 'percent',
|
||||
'discount_rate' => 10,
|
||||
'delivery_at' => Carbon::now()->addWeek(),
|
||||
'store_client' => false,
|
||||
'send_invoice' => true,
|
||||
|
||||
'invoice_type' => 'regular-invoice',
|
||||
'invoice_number' => '2120001',
|
||||
'variable_number' => '2120001',
|
||||
'items' => $this->items,
|
||||
'discount_type' => 'percent',
|
||||
'discount_rate' => 10,
|
||||
'delivery_at' => Carbon::now()->addWeek(),
|
||||
'store_client' => false,
|
||||
'send_invoice' => true,
|
||||
'client' => 'others',
|
||||
'client_name' => 'VueFileManager Inc.',
|
||||
'client_email' => 'howdy@hi5ve.digital',
|
||||
|
||||
Reference in New Issue
Block a user