pdf invoice generation scaffolding

This commit is contained in:
Peter Papp
2021-04-26 17:03:17 +02:00
parent 644fbaede4
commit 7cf193abb7
99 changed files with 390 additions and 325 deletions

View File

@@ -66,20 +66,16 @@ class InvoiceController extends Controller
$client = $this->getOrStoreClient($request);
$invoice = Invoice::create([
'user_id' => $request->user()->id,
'client_id' => $client->id ?? null,
'invoice_type' => $request->invoice_type,
'invoice_number' => $request->invoice_number,
'user_id' => $request->user()->id,
'client_id' => $client->id ?? null,
'invoice_type' => $request->invoice_type,
'invoice_number' => $request->invoice_number,
'variable_number' => $request->variable_number,
'delivery_at' => $request->delivery_at,
'discount_type' => $request->discount_type ?? null,
'discount_rate' => $request->discount_rate ?? null,
'items' => $request->items,
'client' => [
'discount_type' => $request->discount_type ?? null,
'discount_rate' => $request->discount_rate ?? null,
'items' => $request->items,
'client' => [
'email' => $client->email ?? $request->client_email,
'name' => $client->name ?? $request->client_name,
'address' => $client->address ?? $request->client_address,
@@ -92,14 +88,18 @@ class InvoiceController extends Controller
],
]);
// Generate PDF
\PDF::loadView('oasis.invoices.invoice', [
'invoice' => Invoice::find($invoice->id),
'user' => $request->user(),
])
->save(storage_path() . "/app/faktura-{$invoice->id}.pdf");
->setPaper('a4')
->setOrientation('portrait')
->save(
storage_path("/app/files/{$request->user()->id}/invoice-{$invoice->id}.pdf")
);
if ($request->send_invoice && $invoice->client['email']) {
Notification::route('mail', $invoice->client['email'])
->notify(new InvoiceDeliveryNotification($request->user()));
}

View File

@@ -2,6 +2,32 @@
use Laravel\Cashier\Cashier;
/**
* @param $name
* @return bool
*/
function is_route($name)
{
return Route::currentRouteName() === $name;
}
/**
* @param $filepath
* @return string
*/
function get_storage_path($filepath)
{
if (is_null($filepath)) {
return null;
}
if (! Storage::exists($filepath)) {
return null;
}
return 'data:' . Storage::mimeType($filepath) . ';base64,' . base64_encode(Storage::get($filepath));
}
/**
* Get only tax for single invoice item
*

View File

@@ -7,6 +7,9 @@ namespace App\Services\Oasis;
use App\Models\Oasis\Client;
use App\Models\Oasis\Invoice;
use App\Models\User;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Factories\Sequence;
class OasisDevService
@@ -48,4 +51,14 @@ class OasisDevService
'invoice_type' => 'advance-invoice'
]);
}
/**
* @return Application|Factory|View
*/
public function get_invoice_view()
{
return view('oasis.invoices.invoice')
->with('invoice', Invoice::first())
->with('user', User::whereEmail('howdy@hi5ve.digital')->first());
}
}

View File

@@ -32,15 +32,18 @@ return [
| The environment variables to set while running the wkhtmltopdf process.
|
*/
'pdf' => [
'enabled' => true,
'binary' => app_path() . '/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64',
'binary' => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf'),
'timeout' => false,
'options' => [],
'options' => [
'enable-local-file-access' => true,
'encoding' => 'UTF-8'
],
'env' => [],
],
'image' => [
'enabled' => true,
'binary' => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage'),
@@ -48,5 +51,4 @@ return [
'options' => [],
'env' => [],
],
];

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
public/chunks/oasis/invoices.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/chunks/oasis/invoices/list.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{oBQg:function(e,t,r){"use strict";r.r(t);var n=r("L2JU");function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i={name:"SetupWizard",computed:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){c(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},Object(n.b)(["config"])),mounted:function(){"setup-done"===this.config.installation&&this.$router.push({name:"SignIn"})}},u=r("KHd+"),p=Object(u.a)(i,(function(){var e=this.$createElement;return(this._self._c||e)("router-view")}),[],!1,null,null,null);t.default=p.exports}}]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{oBQg:function(e,t,r){"use strict";r.r(t);var n=r("L2JU");function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i={name:"SetupWizard",computed:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){c(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},Object(n.b)(["config"])),mounted:function(){"setup-done"===this.config.installation&&this.$router.push({name:"SignIn"})}},u=r("KHd+"),p=Object(u.a)(i,(function(){var e=this.$createElement;return(this._self._c||e)("router-view")}),[],!1,null,null,null);t.default=p.exports}}]);

View File

@@ -1 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{"2wZp":function(t,e,n){"use strict";var i=n("Mlra");n.n(i).a},"6Rdq":function(t,e,n){"use strict";var i=n("9Q3x"),r=n("yMep"),o=n("c4kp"),s=n("2QtR"),a=n("L2JU"),c=n("xCqy");function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function p(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var d={name:"FilesView",components:{DesktopSortingAndPreview:i.a,DesktopToolbar:r.a,FileBrowser:o.a,ContextMenu:s.a},computed:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?l(Object(n),!0).forEach((function(e){p(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},Object(a.b)(["config"])),methods:{contextMenu:function(t,e){c.a.$emit("contextMenu:show",t,e)}}},u=(n("2wZp"),n("KHd+")),f=Object(u.a)(d,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"files-view"},on:{"!contextmenu":function(e){return e.preventDefault(),t.contextMenu(e,void 0)}}},[n("ContextMenu"),t._v(" "),n("DesktopSortingAndPreview"),t._v(" "),n("DesktopToolbar"),t._v(" "),n("FileBrowser")],1)}),[],!1,null,null,null);e.a=f.exports},CoTS:function(t,e,n){"use strict";n.r(e);var i=n("6Rdq"),r=n("LtV2"),o=n("hXay"),s=n("CjXH"),a={name:"FilesView",components:{ContentFileView:i.a,ContentSidebar:r.a,ContentGroup:o.a,LinkIcon:s.H,UsersIcon:s.hb},methods:{getShared:function(){this.$store.dispatch("getShared",[{back:!1,init:!1}])},getParticipantUploads:function(){this.$store.dispatch("getParticipantUploads")}},mounted:function(){this.getShared()}},c=n("KHd+"),l=Object(c.a)(a,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{attrs:{id:"viewport"}},[n("ContentSidebar",[n("ContentGroup",{attrs:{title:t.$t("sidebar.locations_title")}},[n("div",{staticClass:"menu-list-wrapper vertical"},[n("li",{staticClass:"menu-list-item link",class:{"is-active":t.$isThisLocation(["shared"])},on:{click:t.getShared}},[n("div",{staticClass:"icon text-theme"},[n("link-icon",{attrs:{size:"17"}})],1),t._v(" "),n("div",{staticClass:"label text-theme"},[t._v("\n "+t._s(t.$t("sidebar.my_shared"))+"\n ")])]),t._v(" "),n("li",{staticClass:"menu-list-item link",class:{"is-active":t.$isThisLocation(["participant_uploads"])},on:{click:t.getParticipantUploads}},[n("div",{staticClass:"icon text-theme"},[n("users-icon",{attrs:{size:"17"}})],1),t._v(" "),n("div",{staticClass:"label text-theme"},[t._v("\n "+t._s(t.$t("sidebar.participant_uploads"))+"\n ")])])])])],1),t._v(" "),n("ContentFileView")],1)}),[],!1,null,"4b1985f4",null);e.default=l.exports},Mlra:function(t,e,n){var i=n("Q8SN");"string"==typeof i&&(i=[[t.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n("aET+")(i,r);i.locals&&(t.exports=i.locals)},Q8SN:function(t,e,n){(t.exports=n("I1BE")(!1)).push([t.i,"#files-view {\n font-family: 'Nunito', sans-serif;\n font-size: 16px;\n width: 100%;\n height: 100%;\n position: relative;\n min-width: 320px;\n overflow-x: hidden;\n padding-left: 15px;\n padding-right: 15px;\n overflow-y: hidden;\n}\n@media only screen and (max-width: 690px) {\n#files-view {\n padding-left: 0;\n padding-right: 0;\n}\n}\n",""])}}]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{"2wZp":function(t,e,n){"use strict";var i=n("Mlra");n.n(i).a},"6Rdq":function(t,e,n){"use strict";var i=n("yMep"),s=n("c4kp"),a=n("2QtR"),o=n("xCqy"),r={name:"FilesView",components:{DesktopToolbar:i.a,FileBrowser:s.a,ContextMenu:a.a},methods:{contextMenu:function(t,e){o.a.$emit("contextMenu:show",t,e)}}},l=(n("2wZp"),n("KHd+")),c=Object(l.a)(r,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"files-view"},on:{"!contextmenu":function(e){return e.preventDefault(),t.contextMenu(e,void 0)}}},[n("DesktopToolbar"),t._v(" "),n("ContextMenu"),t._v(" "),n("FileBrowser")],1)}),[],!1,null,null,null);e.a=c.exports},CoTS:function(t,e,n){"use strict";n.r(e);var i=n("6Rdq"),s=n("LtV2"),a=n("hXay"),o=n("CjXH"),r={name:"FilesView",components:{ContentFileView:i.a,ContentSidebar:s.a,ContentGroup:a.a,LinkIcon:o.J,UsersIcon:o.jb},methods:{getShared:function(){this.$store.dispatch("getShared",[{back:!1,init:!1}])},getParticipantUploads:function(){this.$store.dispatch("getParticipantUploads")}},mounted:function(){this.getShared()}},l=n("KHd+"),c=Object(l.a)(r,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{attrs:{id:"viewport"}},[n("ContentSidebar",[n("ContentGroup",{attrs:{title:t.$t("sidebar.locations_title")}},[n("div",{staticClass:"menu-list-wrapper vertical"},[n("li",{staticClass:"menu-list-item link",class:{"is-active":t.$isThisLocation(["shared"])},on:{click:t.getShared}},[n("div",{staticClass:"icon text-theme"},[n("link-icon",{attrs:{size:"17"}})],1),t._v(" "),n("div",{staticClass:"label text-theme"},[t._v("\n "+t._s(t.$t("sidebar.my_shared"))+"\n ")])]),t._v(" "),n("li",{staticClass:"menu-list-item link",class:{"is-active":t.$isThisLocation(["participant_uploads"])},on:{click:t.getParticipantUploads}},[n("div",{staticClass:"icon text-theme"},[n("users-icon",{attrs:{size:"17"}})],1),t._v(" "),n("div",{staticClass:"label text-theme"},[t._v("\n "+t._s(t.$t("sidebar.participant_uploads"))+"\n ")])])])])],1),t._v(" "),n("ContentFileView")],1)}),[],!1,null,"4b1985f4",null);e.default=c.exports},Mlra:function(t,e,n){var i=n("Q8SN");"string"==typeof i&&(i=[[t.i,i,""]]);var s={hmr:!0,transform:void 0,insertInto:void 0};n("aET+")(i,s);i.locals&&(t.exports=i.locals)},Q8SN:function(t,e,n){(t.exports=n("I1BE")(!1)).push([t.i,"#files-view {\n font-family: 'Nunito', sans-serif;\n font-size: 16px;\n width: 100%;\n height: 100%;\n position: relative;\n min-width: 320px;\n overflow-x: hidden;\n padding-left: 15px;\n padding-right: 15px;\n overflow-y: hidden;\n}\n@media only screen and (max-width: 690px) {\n#files-view {\n padding-left: 0;\n padding-right: 0;\n}\n}\n",""])}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
public/css/oasis-invoice.css vendored Normal file
View File

@@ -0,0 +1 @@
*{outline:0;margin:0;padding:0;box-sizing:border-box;color:#1b2539}*,b,body,h1,h2,h3,h4,html,p,span,strong{font-family:Nunito,serif}html{font-size:100%}.row{display:-webkit-flex;-webkit-flex-wrap:nowrap;width:100%}.row.spaces{margin:0 -15px}.row.spaces div[class^=col-]{padding:0 15px}.row div[class^=col-]{-webkit-flex-grow:1}.row div[class^=col-].align-right{text-align:right}.row .col-left,.row .col-right{width:49%}.row.align-center div[class^=col-]{-webkit-align-self:center}.row.align-bottom div[class^=col-]{-webkit-align-self:flex-end}.invoice-header .col-left,.invoice-header .col-right{display:inline-block}.invoice-header .logo{margin-bottom:5px;display:block;width:260px}.invoice-header .email,.invoice-header .phone{display:block;font-size:.7em;font-weight:400;margin-bottom:2px}.invoice-header h1{line-height:1;padding-bottom:5px;font-size:1.6em}.invoice-header h2{color:#bc30fd;font-weight:600;font-size:1.1em}.invoice-header h4{color:#1b2539;font-weight:600;font-size:.7em}.supplier{float:right;max-width:600px}.supplier .box{background:#f4f5f6;border-radius:15px;padding:20px}.supplier .dates{margin-top:10px}.supplier .dates p{text-align:right;font-size:.9em}.special-wrapper{padding-bottom:25px;border-bottom:1px dashed #d8d8d8;margin:0 -5px 25px}.special-wrapper .special-item{background:#f4f5f6;border-radius:8px;display:inline-block;width:20.9%;margin:0 5px}.special-wrapper .special-item:first-child{width:31.5%}.special-wrapper .special-item .padding{padding:10px 15px}.special-wrapper b{color:#bc30fd;font-size:.9em;font-weight:600;margin-bottom:5px;display:block}.special-wrapper span{font-size:1em;font-weight:600;word-break:break-word;overflow-wrap:break-word;width:100%;display:block}.table{table-layout:fixed;border-collapse:collapse;width:100%}.table .table-row:nth-child(2n){background-color:#f4f5f6;border-radius:12px}.table .table-row .table-cell{text-align:left;word-break:break-word;padding:5px}.table .table-row .table-cell a,.table .table-row .table-cell span{word-break:break-word}.table .table-row .table-cell:first-child{width:280px;padding-left:15px;padding-right:15px}.table .table-row .table-cell:last-child{text-align:right;padding-right:15px}.table tbody .table-row{padding:5px 0}.table thead{background-color:#fff!important;padding-bottom:15px;border-bottom:0}.table thead .table-cell span{color:#bc30fd;font-weight:600;font-size:.9em;white-space:nowrap}.table .table-cell{word-break:break-all}.table .table-cell a,.table .table-cell span{vertical-align:middle;font-weight:500;font-size:.9em}.summary{max-width:300px;margin:20px 0 20px auto;text-align:right}.summary li{padding:2px 0;display:block}.summary li b,.summary li span{white-space:nowrap}.summary li .col-full{width:50%;display:inline-block}.summary span{font-size:1em}.summary b{font-size:1.3em;font-weight:600}.notes{padding-top:25px;border-top:1px dashed #d8d8d8}.invoice-author{display:-webkit-flex;-webkit-justify-content:space-between;-webkit-align-items:flex-end;padding-bottom:25px}.invoice-author .sign{text-align:right}.invoice-author img{max-width:240px;display:block;margin:0 0 0 auto}.invoice-footer{padding-top:15px;border-top:1px dashed #d8d8d8;text-align:center}.invoice-footer p{font-size:1em}.invoice-footer a,h3{color:#bc30fd}h3{font-weight:600;padding-bottom:8px}h3,p,span{font-size:1em}p,span{font-weight:400;padding-bottom:4px;color:#1b2539}.highlight{color:#bc30fd}header,section{border-bottom:1px dashed #d8d8d8;padding-bottom:25px;margin-bottom:25px}.address,.number{display:block;font-weight:600}.content-box{padding-bottom:15px}.thank-you{text-align:center;font-size:22px;margin-top:20px;margin-bottom:60px}footer .stamp{max-width:200px;display:block;margin:0 0 0 auto}footer div{align-self:flex-end}footer h3{display:inline-block}

2
public/js/main.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -1,132 +1,112 @@
{
"/js/main.js": "/js/main.js",
"/css/app.css": "/css/app.css",
"/css/oasis-invoice.css": "/css/oasis-invoice.css",
"/chunks/admin.js": "/chunks/admin.js?id=f04f25ec5019fc635b41",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=99e4bc1829f4c32e0ea9",
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~21912951.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~21912951.js?id=84bf937bfaa5c73a85b2",
"/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~062c965c.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~062c965c.js?id=b69ee3724f30c6177e0c",
"/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~129c344f.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~129c344f.js?id=3b41709a92e18700e276",
"/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/sh~f205bd67.js": "/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/sh~f205bd67.js?id=e806d7d9ae79ebf2fecb",
"/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/settings~chunks/sh~8ea3b78d.js": "/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/settings~chunks/sh~8ea3b78d.js?id=69d68623a5e8b2807fb7",
"/chunks/admin~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform.js": "/chunks/admin~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform.js?id=47d552d69a8d061d193a",
"/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=b13b7055620f500e2ea1",
"/chunks/admin~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/shared.js?id=2e25475b875a24096af0",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=609139bd1b95953a7358",
"/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=6149bfd368ab35ba5fee",
"/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=5b92fd206aa3bfc731b1",
"/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=8fe6728d72e9e74669f6",
"/chunks/app-billings.js": "/chunks/app-billings.js?id=f7eb5f2f630fe6139baa",
"/chunks/app-email.js": "/chunks/app-email.js?id=225921d245ce0aeb8165",
"/chunks/app-index.js": "/chunks/app-index.js?id=cddf941cd7bacd81ab6e",
"/chunks/app-language.js": "/chunks/app-language.js?id=c5f0f8da6575de72d7b2",
"/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~4af92edf.js": "/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~4af92edf.js?id=10c4d397e319504e0244",
"/chunks/app-language~chunks/dashboard~chunks/dashboard-oasis~chunks/files~chunks/invoices~chunks/oasi~c6e9de01.js": "/chunks/app-language~chunks/dashboard~chunks/dashboard-oasis~chunks/files~chunks/invoices~chunks/oasi~c6e9de01.js?id=9fb9bccb687f7ad8ae15",
"/chunks/app-others.js": "/chunks/app-others.js?id=e01ae7fb7aba236f84d3",
"/chunks/app-payments.js": "/chunks/app-payments.js?id=c7ed1614a065ffebfa5b",
"/chunks/app-settings.js": "/chunks/app-settings.js?id=323018995f04cb3e296f",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=eb42beb8489daf56c73d",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=4b0b92130ae1038b1f84",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=40bd788d763871ed6ecf",
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js?id=870f0e3657b4e80cdf7f",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=7bb5dd94039c2a73555f",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=d4d64fc93f039c77b949",
"/chunks/dashboard-oasis.js": "/chunks/dashboard-oasis.js?id=335dad3b44c8d7cc68cb",
"/chunks/dashboard~chunks/dashboard-oasis.js": "/chunks/dashboard~chunks/dashboard-oasis.js?id=300dd9ae1e17cd7bad47",
"/chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chunks/oasis/users~chunks/pages~chunks/plan-~3f2e756e.js": "/chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chunks/oasis/users~chunks/pages~chunks/plan-~3f2e756e.js?id=a6bce7b86b5ab04f8e8c",
"/chunks/database.js": "/chunks/database.js?id=5829c80b23a1cc2bc9e1",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=0b0f4d3b0e97dc45a0fb",
"/chunks/dynamic-page~chunks/oasis/homepage.js": "/chunks/dynamic-page~chunks/oasis/homepage.js?id=de77f3e48d60dd663b1e",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=ce0951dc166ca2fd6a58",
"/chunks/files.js": "/chunks/files.js?id=1f0a31c05213d4eae684",
"/chunks/files~chunks/oasis/invoices/list~chunks/oasis/platba~chunks/settings-subscription~chunks/shar~d6675e1e.js": "/chunks/files~chunks/oasis/invoices/list~chunks/oasis/platba~chunks/settings-subscription~chunks/shar~d6675e1e.js?id=d80c4ddf029bf712fc68",
"/chunks/files~chunks/oasis/invoices/list~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/oasis/invoices/list~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js?id=bf606a5103bb0af088c7",
"/chunks/files~chunks/oasis/invoices/list~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/oasis/invoices/list~chunks/shared-files~chunks/shared/file-browser.js?id=4a385b11660015662bde",
"/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~707bd579.js": "/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~707bd579.js?id=73fef15be6c932484cff",
"/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~87b39a8d.js": "/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~87b39a8d.js?id=22b10ba55ad2f57b2cea",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.js?id=530648cdb02f95edeff6",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js?id=36fcaa1fe4506e2bbc24",
"/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=2eb49a41527070f19c23",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=d88da60337e6ac265d2b",
"/chunks/homepage.js": "/chunks/homepage.js?id=95f3057c0f83e9b0c251",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=f7279e60df73ed7bc173",
"/chunks/invoices.js": "/chunks/invoices.js?id=461e80020af0c4cd0da5",
"/chunks/not-found-shared.js": "/chunks/not-found-shared.js?id=016d6291abb70a88abc0",
"/chunks/oasis/homepage.js": "/chunks/oasis/homepage.js?id=696005351ecbf69d6d74",
"/chunks/oasis/invoices.js": "/chunks/oasis/invoices.js?id=78a0383dca783323d877",
"/chunks/oasis/invoices/list.js": "/chunks/oasis/invoices/list.js?id=832361f08d99d5aed43b",
"/chunks/oasis/invoices~chunks/oasis/invoices/list.js": "/chunks/oasis/invoices~chunks/oasis/invoices/list.js?id=9f3c4d725cb951b34fae",
"/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=578bf5642b029e717403",
"/chunks/oasis/platba.js": "/chunks/oasis/platba.js?id=909ca6ba2ba353b78fbd",
"/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=18801fc890bfd763f121",
"/chunks/oasis/sign-up.js": "/chunks/oasis/sign-up.js?id=21f57c764d549476d275",
"/chunks/oasis/upgrade-billing.js": "/chunks/oasis/upgrade-billing.js?id=458a1792b1ec2907aa36",
"/chunks/oasis/upgrade-plan.js": "/chunks/oasis/upgrade-plan.js?id=74e1208baf62d8cc820a",
"/chunks/oasis/user-create.js": "/chunks/oasis/user-create.js?id=5492551da6ce21c61a5c",
"/chunks/oasis/users.js": "/chunks/oasis/users.js?id=50aed33eb6752340bde6",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=db036f8386f2416cf2ee",
"/chunks/pages.js": "/chunks/pages.js?id=81740f35ce6535a3faf4",
"/chunks/plan.js": "/chunks/plan.js?id=607c25915cb2461ff665",
"/chunks/plan-create.js": "/chunks/plan-create.js?id=870d80f19428a156e312",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=95b1fe8648138d2409f5",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=42aa033cf148c757e722",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=a52231bab7629f4e333b",
"/chunks/plans.js": "/chunks/plans.js?id=5f4ac06baeb09bc53277",
"/chunks/platform.js": "/chunks/platform.js?id=3434b6fcf2b4f137b9c9",
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=a5d248a690f125193c04",
"/chunks/profile.js": "/chunks/profile.js?id=079e3bc71dff6cbf8370",
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=a4ab67fed5364d7c5367",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=8df541398cde4a3f2024",
"/chunks/settings.js": "/chunks/settings.js?id=54c7b204fe2e7be28764",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=11b8f30b30c583abe178",
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=1bb8a4d971fcbe310f4e",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=10b4d04de7a71ab4a326",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=eeca3501b0928636b660",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=e81f06cbd438a5ef77f0",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=a52debbc017ad8b24d7d",
"/chunks/admin.js": "/chunks/admin.js?id=ca6495e1c589f24145e2",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=37099f3ee65bc2a4ecc6",
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~21912951.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~21912951.js?id=c84c0a0b4cdd0f73d621",
"/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~062c965c.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~062c965c.js?id=515118382f7ad5724a54",
"/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~129c344f.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~129c344f.js?id=4bbef035191de1ef475f",
"/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/sh~f205bd67.js": "/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/sh~f205bd67.js?id=94e67ef1eef94f3de4a7",
"/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/settings~chunks/sh~8ea3b78d.js": "/chunks/admin~chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/settings~chunks/sh~8ea3b78d.js?id=5c713b78eab271be9d39",
"/chunks/admin~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform.js": "/chunks/admin~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform.js?id=8a43df56801fc2065bcb",
"/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~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",
"/chunks/app-email.js": "/chunks/app-email.js?id=c578a85112c6a4b1ed0e",
"/chunks/app-index.js": "/chunks/app-index.js?id=5bf1c4a8df85876205a0",
"/chunks/app-language.js": "/chunks/app-language.js?id=215973b4b78ca36053be",
"/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~4af92edf.js": "/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~4af92edf.js?id=bd0094801b7c8baf27ca",
"/chunks/app-language~chunks/dashboard~chunks/dashboard-oasis~chunks/files~chunks/invoices~chunks/oasi~c6e9de01.js": "/chunks/app-language~chunks/dashboard~chunks/dashboard-oasis~chunks/files~chunks/invoices~chunks/oasi~c6e9de01.js?id=f9af3b7905bb7c35023d",
"/chunks/app-others.js": "/chunks/app-others.js?id=9156adba3b1697a8bf3e",
"/chunks/app-payments.js": "/chunks/app-payments.js?id=7e1a982c90174f568fb2",
"/chunks/app-settings.js": "/chunks/app-settings.js?id=acc6ba7a93681f0d5d64",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=0170cfec241f69324b73",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=f896743bb3f276942d14",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=214c834b6427a82f40e7",
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js?id=22bd5db44c72e8de5f5b",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=48dc53ccbd502c2739ec",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=55a783975e40f9dcf31b",
"/chunks/dashboard-oasis.js": "/chunks/dashboard-oasis.js?id=8b37095a96ece7d6c1d8",
"/chunks/dashboard~chunks/dashboard-oasis.js": "/chunks/dashboard~chunks/dashboard-oasis.js?id=bdef93a4198d207bf236",
"/chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chunks/oasis/users~chunks/pages~chunks/plan-~3f2e756e.js": "/chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chunks/oasis/users~chunks/pages~chunks/plan-~3f2e756e.js?id=5fd4ce01482798a86b8c",
"/chunks/database.js": "/chunks/database.js?id=8f6f77cf18d03f450fdd",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=17cbd34e8c621c7a93e5",
"/chunks/dynamic-page~chunks/oasis/homepage.js": "/chunks/dynamic-page~chunks/oasis/homepage.js?id=9840011d02134efd9210",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=fafc8cd18dc7300c9f15",
"/chunks/files.js": "/chunks/files.js?id=ee5b19530d832c6f9f34",
"/chunks/files~chunks/oasis/invoices/list~chunks/oasis/platba~chunks/settings-subscription~chunks/shar~d6675e1e.js": "/chunks/files~chunks/oasis/invoices/list~chunks/oasis/platba~chunks/settings-subscription~chunks/shar~d6675e1e.js?id=effef49b99446fdaee0b",
"/chunks/files~chunks/oasis/invoices/list~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/oasis/invoices/list~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js?id=c777877000f1e219a748",
"/chunks/files~chunks/oasis/invoices/list~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/oasis/invoices/list~chunks/shared-files~chunks/shared/file-browser.js?id=a35f0d58f42da919a182",
"/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~707bd579.js": "/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~707bd579.js?id=3c49df5afaf5bb1f42f3",
"/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~87b39a8d.js": "/chunks/files~chunks/oasis/invoices~chunks/oasis/invoices/list~chunks/platform~chunks/shared~chunks/s~87b39a8d.js?id=c226fe89b510c599615f",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.js?id=14b259c05259260985ec",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js?id=06665bebae33953fed87",
"/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=44899a3c3880630dbcd9",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=877a9289b77ac3885042",
"/chunks/homepage.js": "/chunks/homepage.js?id=1a86b7f0efa95ad65c4a",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=e8f47d23afd3d797f334",
"/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~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/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",
"/chunks/oasis/upgrade-billing.js": "/chunks/oasis/upgrade-billing.js?id=b9cb16fc974049e52dea",
"/chunks/oasis/upgrade-plan.js": "/chunks/oasis/upgrade-plan.js?id=178d0ff676d80a801283",
"/chunks/oasis/user-create.js": "/chunks/oasis/user-create.js?id=3870c14d43c6839ef713",
"/chunks/oasis/users.js": "/chunks/oasis/users.js?id=d15e1dd3ad4aa6cd8a77",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=4c04e9f1bbecd8d1d9ba",
"/chunks/pages.js": "/chunks/pages.js?id=92fb357054e594b5495f",
"/chunks/plan.js": "/chunks/plan.js?id=ac3046761e9083aa3053",
"/chunks/plan-create.js": "/chunks/plan-create.js?id=b966184a7aa84bdd297e",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=f193816778245ea66d02",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=66123f72696b47a986a2",
"/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/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",
"/chunks/settings.js": "/chunks/settings.js?id=fcc97a29894164e2977c",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=88849e6ddce9226d49a5",
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=444b9bbc310647ddd297",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=46961d5c0fc91f4ad638",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=3bc709a228c0849a6f62",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=0c243c68b17ca976d05a",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=22e5c49d5b0a154e1a28",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=c6b88005b133268ed88f",
"/chunks/shared.js": "/chunks/shared.js?id=41fba5f1718082ddbeda",
"/chunks/shared-files.js": "/chunks/shared-files.js?id=1129538411ac1c5c6246",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=bbde4f771fe547c3c74c",
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=43ed44a0f2772176d283",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=397b4433c32ef4576098",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=29137bc8fb06e2ed374b",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=230f884b2ca601431c5f",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=e74559b3e99a57c1e8cd",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=7b4773335cdeae05969c",
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=c8f8dc612426b7050f52",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=ea692111d6e9979c2030",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=ad38efd88a8aa202dfde",
"/chunks/user.js": "/chunks/user.js?id=60e539efbc33c9c82059",
"/chunks/user-create.js": "/chunks/user-create.js?id=abf60fed012aecc19584",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=766a4d944f69a74d6058",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=c99b973c744355ec1b36",
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=66a0abeb70885486c626",
"/chunks/user-password.js": "/chunks/user-password.js?id=f89726ec7c8514d03baa",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=86e678f25fcd7c0fedb8",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=d143404a61cb1f5b703a",
"/chunks/users.js": "/chunks/users.js?id=ce0fcd416f1e7a51688e",
"/chunks/shared.js": "/chunks/shared.js?id=df4e059dc1a64631449b",
"/chunks/shared-files.js": "/chunks/shared-files.js?id=8d6ff3bdf8b295fde3d0",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=3d5c7754d438830a4204",
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=f46e9dc63c1313bc2256",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=e8aedb75df7fe227d693",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=1d2f0d12e71a2eae51f1",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=ce15b1156cf37c0a9703",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=64b25ff5fc21872e65cd",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=1d77583cf573b739bf3c",
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=4d93776ddf0f1316227d",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=cc5cee225c9b991e6639",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=35179531a8241da128e9",
"/chunks/user.js": "/chunks/user.js?id=3090bfd5b85dd1b200ec",
"/chunks/user-create.js": "/chunks/user-create.js?id=e1e6127d661c7edf0793",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=8dfec8efd3019616377b",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=b9b70e43cf551a574443",
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=6c4d0e9e058be11dc1f7",
"/chunks/user-password.js": "/chunks/user-password.js?id=a4b4ab4f4af11533eb4d",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=4aec2d7b60ec0bc35fb9",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=99efdd410910267db66e",
"/chunks/users.js": "/chunks/users.js?id=178dc8d8c83a43d6e77f",
"/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=a65f7c48170789f223e5",
"/js/main.612f3c8d1593292bb604.hot-update.js": "/js/main.612f3c8d1593292bb604.hot-update.js",
"/js/main.c40070c67217a9577042.hot-update.js": "/js/main.c40070c67217a9577042.hot-update.js",
"/js/main.5a637a89edb738712213.hot-update.js": "/js/main.5a637a89edb738712213.hot-update.js",
"/js/main.0defa764bc20be54df0b.hot-update.js": "/js/main.0defa764bc20be54df0b.hot-update.js",
"/js/main.f4334448f6705547cb65.hot-update.js": "/js/main.f4334448f6705547cb65.hot-update.js",
"/js/main.6e0bc21a639e2bdced62.hot-update.js": "/js/main.6e0bc21a639e2bdced62.hot-update.js",
"/js/main.47040e23d2d2e087e7a3.hot-update.js": "/js/main.47040e23d2d2e087e7a3.hot-update.js",
"/js/main.c2a38b7b9d4d7d457b95.hot-update.js": "/js/main.c2a38b7b9d4d7d457b95.hot-update.js",
"/js/main.0d5dcf9c19bf0c9c2178.hot-update.js": "/js/main.0d5dcf9c19bf0c9c2178.hot-update.js",
"/js/main.3b2f44e5700539c3263a.hot-update.js": "/js/main.3b2f44e5700539c3263a.hot-update.js",
"/js/main.13037464882bfb6a04ad.hot-update.js": "/js/main.13037464882bfb6a04ad.hot-update.js",
"/js/main.5d89c09ba04fc5493126.hot-update.js": "/js/main.5d89c09ba04fc5493126.hot-update.js",
"/js/main.93a5212e152926daeaf8.hot-update.js": "/js/main.93a5212e152926daeaf8.hot-update.js",
"/js/main.40c9f15d7b9e2819c284.hot-update.js": "/js/main.40c9f15d7b9e2819c284.hot-update.js",
"/js/main.852c3168f53a4c6a0a55.hot-update.js": "/js/main.852c3168f53a4c6a0a55.hot-update.js",
"/js/main.30f0091baf9429fcf66f.hot-update.js": "/js/main.30f0091baf9429fcf66f.hot-update.js",
"/js/main.0ea3443cfcd4927b7c36.hot-update.js": "/js/main.0ea3443cfcd4927b7c36.hot-update.js",
"/js/main.a56d6a0c56954df55bd1.hot-update.js": "/js/main.a56d6a0c56954df55bd1.hot-update.js",
"/js/main.ca7092be5e816da9afdd.hot-update.js": "/js/main.ca7092be5e816da9afdd.hot-update.js"
"/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"
}

BIN
public/stamp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,30 @@
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <http://feross.org>
* @license MIT
*/
/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */
/**
* @licstart The following is the entire license notice for the
* Javascript code in this page
*
* Copyright 2020 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @licend The above is the entire license notice for the
* Javascript code in this page
*/

View File

@@ -8,10 +8,6 @@ $border-radius: 15px;
font-size:(($size*1.6)/16) + 0em;
}
body {
padding: 25px;
}
* {
outline: 0;
margin: 0;
@@ -31,8 +27,9 @@ html {
}
.row {
display: flex;
flex-wrap: nowrap;
display: -webkit-flex;
-webkit-flex-wrap: nowrap;
width: 100%;
&.spaces {
margin: 0 -15px;
@@ -43,7 +40,7 @@ html {
}
div[class^='col-'] {
flex-grow: 1;
-webkit-flex-grow: 1;
&.align-right {
text-align: right;
@@ -51,19 +48,23 @@ html {
}
.col-left, .col-right {
width: 50%;
width: 49%;
}
&.align-center div[class^='col-'] {
align-self: center;
-webkit-align-self: center;
}
&.align-bottom div[class^='col-'] {
align-self: flex-end;
-webkit-align-self: flex-end;
}
}
.invoice-header {
.col-left, .col-right {
display: inline-block;
}
.logo {
margin-bottom: 5px;
display: block;
@@ -117,16 +118,20 @@ html {
}
.special-wrapper {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: 20px;
padding-bottom: 25px;
border-bottom: 1px dashed $border-color;
margin-bottom: 25px;
margin: 0 -5px 25px;
.special-item {
background: $background-color;
border-radius: 8px;
display: inline-block;
width: 20.9%;
margin: 0 5px;
&:nth-child(1) {
width: 31.5%;
}
.padding {
padding: 10px 15px;
@@ -152,10 +157,11 @@ html {
}
.table {
table-layout: fixed;
border-collapse: collapse;
width: 100%;
.table-row {
display: flex;
&:nth-child(even) {
background-color: $background-color;
@@ -163,17 +169,16 @@ html {
}
.table-cell {
flex: 1 1 100%;
text-align: left;
min-width: 50px;
word-break: break-word;
padding: 5px;
span, a {
word-break: break-word;
}
&:first-child {
flex: 0 0 280px;
width: 280px;
padding-left: 15px;
padding-right: 15px;
}
@@ -195,7 +200,6 @@ html {
background-color: white !important;
padding-bottom: 15px;
border-bottom: 0;
display: block;
.table-cell {
@@ -209,7 +213,7 @@ html {
}
.table-cell {
align-self: center;
word-break: break-all;
span, a {
vertical-align: middle;
@@ -226,16 +230,15 @@ html {
li {
padding: 2px 0;
display: block;
.col-full:first-child {
b, span {
white-space: nowrap;
}
b, span {
white-space: nowrap;
}
.col-full {
width: 50%;
display: inline-block;
}
}
@@ -255,9 +258,9 @@ html {
}
.invoice-author {
display: flex;
justify-content: space-between;
align-items: flex-end;
display: -webkit-flex;
-webkit-justify-content: space-between;
-webkit-align-items: flex-end;
padding-bottom: 25px;
.sign {

View File

@@ -1,28 +1,34 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="Pragma" content="no-cache">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@300;400;600;700;900&display=swap" rel="stylesheet">
<link href="{{ mix('css/oasis-invoice.css') }}?v={{ get_version() }}" rel="stylesheet">
@if(is_route('invoice-debug'))
<link rel="stylesheet" href="{{ mix('css/oasis-invoice.css') }}">
<style>
body {
padding: 25px;
}
</style>
@else
<link rel="stylesheet" href="{{ public_path('css/oasis-invoice.css') }}">
@endif
<title>Invoice</title>
</head>
<body>
@php
//dd($invoice->user);
@endphp
{{--Invoice header--}}
<header class="invoice-header">
<div class="row">
<div class="col-left">
{{--TODO: klientske logo--}}
<img class="logo" src="{{ get_setting('app_logo_horizontal') }}">
<img class="logo" src="{{ get_storage_path('system/5YDehSGh-vuefilemanager-horizontal-logo.svg') }}">
<b class="email">{{ $user->email }}</b>
<b class="phone">{{ $user->settings->phone_number }}</b>
@@ -144,6 +150,8 @@
<td class="table-cell">
<span>Celkom</span>
</td>
{{--TODO: zmenit dph z klienta na usera--}}
@if($invoice->client['ic_dph'])
<td class="table-cell">
<span>Sadzba DPH</span>
@@ -203,82 +211,58 @@
@if($invoice->discount_type)
<li class="row">
<div class="col-full">
<span>Zlava za doklad:</span>
</div>
<div class="col-full">
<!-- -32,64-->
<span>-{{ invoice_total_discount($invoice, true) }}</span>
</div>
<span>Zlava za doklad:</span>
<!-- -32,64-->
<span>-{{ invoice_total_discount($invoice, true) }}</span>
</li>
@endif
{{--VAT Payer--}}
@if($invoice->client['ic_dph'] && ! $invoice->discount_type)
<li class="row">
<div class="col-full">
<span>Cena bez DPH:</span>
</div>
<div class="col-full">
<span>{{ format_to_currency($invoice->total_net) }}</span>
</div>
<span>Cena bez DPH:</span>
<span>{{ format_to_currency($invoice->total_net) }}</span>
</li>
<li class="row">
<div class="col-full">
<span>DPH:</span>
</div>
<div class="col-full">
<span>{{ format_to_currency($invoice->total_tax) }}</span>
</div>
<span>DPH:</span>
<span>{{ format_to_currency($invoice->total_tax) }}</span>
</li>
@endif
{{--VAT Payer with Discount--}}
@if($invoice->client['ic_dph'] && $invoice->discount_type)
<li class="row">
<div class="col-full">
<span>Cena bez DPH:</span>
</div>
<div class="col-full">
<span>
@if($invoice->discount_type === 'percent')
<!--244,80-->
{{ format_to_currency($invoice->total_net * ((100 - $invoice->discount_rate) / 100)) }}
@endif
@if($invoice->discount_type === 'value')
<!--263,67-->
{{ format_to_currency(($invoice->total_net + invoice_total_tax($invoice)) / ((100 - $invoice->discount_rate) / 100)) }}
@endif
</span>
</div>
</li>
<li class="row">
<div class="col-full">
<span>DPH:</span>
</div>
<div class="col-full">
<span>Cena bez DPH:</span>
<span>
@if($invoice->discount_type === 'percent')
<!--48,96-->
<span>{{ format_to_currency(invoice_total_tax($invoice) * ((100 - $invoice->discount_rate) / 100)) }}</span>
<!--244,80-->
{{ format_to_currency($invoice->total_net * ((100 - $invoice->discount_rate) / 100)) }}
@endif
@if($invoice->discount_type === 'value')
<!--52,73-->
<!--263,67-->
{{ format_to_currency(($invoice->total_net + invoice_total_tax($invoice)) / ((100 - $invoice->discount_rate) / 100)) }}
@endif
</div>
</span>
</li>
<li class="row">
<span>DPH:</span>
@if($invoice->discount_type === 'percent')
<!--48,96-->
<span>{{ format_to_currency(invoice_total_tax($invoice) * ((100 - $invoice->discount_rate) / 100)) }}</span>
@endif
@if($invoice->discount_type === 'value')
<!--52,73-->
@endif
</li>
@endif
<li class="row">
<div class="col-full">
<b>Spolu k úhrade:</b>
</div>
<div class="col-full">
@if($invoice->client['ic_dph'])
<b>{{ format_to_currency(invoice_total_net($invoice) + invoice_total_tax($invoice)) }}</b>
@else
<b>{{ format_to_currency(invoice_total_net($invoice)) }}</b>
@endif
</div>
<b>Spolu k úhrade:</b>
@if($invoice->client['ic_dph'])
<b>{{ format_to_currency(invoice_total_net($invoice) + invoice_total_tax($invoice)) }}</b>
@else
<b>{{ format_to_currency(invoice_total_net($invoice)) }}</b>
@endif
</li>
</ul>
@@ -295,8 +279,10 @@
@endif
</div>
<div class="sign">
@if(is_route('invoice-debug'))
<img src="{{ asset('/stamp.png') }}">
@endif
{{--<img src="{{ public_path('/stamp.png') }}">--}}
<img src="{{ asset('/stamp.png') }}">
<span class="highlight">Faktúru vystavil:</span> {{ $invoice->user['name'] }}
</div>
</div>

View File

@@ -4,6 +4,7 @@ use App\Http\Controllers\Oasis\AdminController;
use App\Http\Controllers\Oasis\ClientController;
use App\Http\Controllers\Oasis\InvoiceController;
use App\Http\Controllers\Oasis\SubscriptionController;
use App\Services\Oasis\OasisDevService;
Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () {
@@ -43,3 +44,8 @@ Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () {
Route::group(['middleware' => 'web', 'prefix' => 'oasis'], function () {
Route::post('/subscribe/{order}/set-password', [SubscriptionController::class, 'set_password']);
});
// Debug routes
Route::group(['middleware' => 'web', 'prefix' => 'oasis/debug'], function () {
Route::get('/invoice', [OasisDevService::class, 'get_invoice_view'])->name('invoice-debug');
});

View File

@@ -6,12 +6,6 @@ use App\Http\Controllers\App\AppFunctionsController;
use App\Http\Controllers\Sharing\BrowseShareController;
use App\Http\Controllers\Subscription\StripeWebhookController;
Route::get('/invoice', function () {
return view('oasis.invoices.invoice')
->with('invoice', \App\Models\Oasis\Invoice::first())
->with('user', \App\Models\User::whereEmail('howdy@hi5ve.digital')->first());
});
Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook']);
Route::post('/admin-setup', [SetupWizardController::class, 'create_admin_account']);

View File

@@ -25,13 +25,13 @@ class OasisInvoiceTest extends TestCase
$this->items = [
[
'description' => 'Test 1',
'description' => "No, I've made up my mind about it; if I'm Mabel, I'll stay.",
'amount' => 1,
'tax_rate' => 20,
'price' => 200,
],
[
'description' => 'Test 2',
'description' => "I only knew the right words,' said poor Alice, who felt.",
'amount' => 3,
'tax_rate' => 20,
'price' => 500,
@@ -204,8 +204,8 @@ class OasisInvoiceTest extends TestCase
public function user_create_new_invoice_with_storing_new_client()
{
Notification::fake();
Storage::fake('local');
//Storage::fake('local');
//PDF::fake();
$avatar = UploadedFile::fake()
->image('fake-image.jpg');
@@ -213,6 +213,16 @@ class OasisInvoiceTest extends TestCase
$user = User::factory(User::class)
->create(['role' => 'user']);
$user->settings()->update([
'ic_dph' => 'SK2023489457',
'dic' => '2023489457',
'ico' => '46530045',
'bank_name' => 'Fio a.s.',
'iban' => 'SK7583300000002000476497',
'swift' => 'FIOZSKBAXXX',
'registration_notes' => 'Registrácia na OR SR Bratislava I. oddiel: Sro vl. č 91906',
]);
Sanctum::actingAs($user);
$this->postJson('/api/oasis/invoices', [
@@ -258,6 +268,11 @@ class OasisInvoiceTest extends TestCase
Client::first()->getRawOriginal('avatar')
);
Storage::disk('local')
->assertExists(
'files/' . $user->id . '/invoice-' . Invoice::first()->id . '.pdf'
);
Notification::assertTimesSent(1, InvoiceDeliveryNotification::class);
}

4
webpack.mix.js vendored
View File

@@ -15,9 +15,9 @@ mix.js('resources/js/main.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css/app.css', {
implementation: require('node-sass')
})
.sass('resources/sass/oasis/invoice.scss', 'public/css/oasis-invoice.css', {
/*.sass('resources/sass/oasis/invoice.scss', 'public/css/oasis-invoice.css', {
implementation: require('node-sass')
})
})*/
.webpackConfig({
resolve: {
alias: {