invoice frontend improvements

This commit is contained in:
Peter Papp
2021-05-04 17:43:42 +02:00
parent c65414f0c4
commit 62820c8ddb
6 changed files with 121 additions and 45 deletions
@@ -28,8 +28,8 @@ class StoreInvoiceRequest extends FormRequest
'variable_number' => 'required|string', 'variable_number' => 'required|string',
'client' => 'required', 'client' => 'required',
'items' => 'required|string', 'items' => 'required|string',
'discount_type' => 'nullable|string', 'discount_type' => 'sometimes|string',
'discount_rate' => 'nullable|integer', 'discount_rate' => 'sometimes|integer',
'delivery_at' => 'required|date', 'delivery_at' => 'required|date',
]; ];
} }
+54 -3
View File
@@ -56,10 +56,10 @@
"/chunks/oasis/invoices/client-detail.js": "/chunks/oasis/invoices/client-detail.js?id=775aa4205c9189fcf6bc", "/chunks/oasis/invoices/client-detail.js": "/chunks/oasis/invoices/client-detail.js?id=775aa4205c9189fcf6bc",
"/chunks/oasis/invoices/client-invoices.js": "/chunks/oasis/invoices/client-invoices.js?id=b9aed08d93a606918d22", "/chunks/oasis/invoices/client-invoices.js": "/chunks/oasis/invoices/client-invoices.js?id=b9aed08d93a606918d22",
"/chunks/oasis/invoices/create-client.js": "/chunks/oasis/invoices/create-client.js?id=2416e9a56896fedb15b7", "/chunks/oasis/invoices/create-client.js": "/chunks/oasis/invoices/create-client.js?id=2416e9a56896fedb15b7",
"/chunks/oasis/invoices/create-invoice.js": "/chunks/oasis/invoices/create-invoice.js?id=389c9aafcd4e462bb4b9", "/chunks/oasis/invoices/create-invoice.js": "/chunks/oasis/invoices/create-invoice.js?id=b9a7dbd7cdb79616338c",
"/chunks/oasis/invoices/list.js": "/chunks/oasis/invoices/list.js?id=a622e568efb24e955520", "/chunks/oasis/invoices/list.js": "/chunks/oasis/invoices/list.js?id=a622e568efb24e955520",
"/chunks/oasis/invoices/profile.js": "/chunks/oasis/invoices/profile.js?id=06b0487a934116de2f95", "/chunks/oasis/invoices/profile.js": "/chunks/oasis/invoices/profile.js?id=06b0487a934116de2f95",
"/chunks/oasis/invoices~chunks/platform~chunks/shared.js": "/chunks/oasis/invoices~chunks/platform~chunks/shared.js?id=a53a01abf7a98a9c2d15", "/chunks/oasis/invoices~chunks/platform~chunks/shared.js": "/chunks/oasis/invoices~chunks/platform~chunks/shared.js?id=02d307d644549673764b",
"/chunks/oasis/platba.js": "/chunks/oasis/platba.js?id=9a20bc7c6b8570f936a1", "/chunks/oasis/platba.js": "/chunks/oasis/platba.js?id=9a20bc7c6b8570f936a1",
"/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/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/sign-up.js": "/chunks/oasis/sign-up.js?id=e53eeb48ebabae259f9c",
@@ -334,5 +334,56 @@
"/chunks/oasis/invoices/create-invoice.245181c4fb62c1df4375.hot-update.js": "/chunks/oasis/invoices/create-invoice.245181c4fb62c1df4375.hot-update.js", "/chunks/oasis/invoices/create-invoice.245181c4fb62c1df4375.hot-update.js": "/chunks/oasis/invoices/create-invoice.245181c4fb62c1df4375.hot-update.js",
"/chunks/oasis/invoices/create-invoice.0a8e0c76914a1c00d6f7.hot-update.js": "/chunks/oasis/invoices/create-invoice.0a8e0c76914a1c00d6f7.hot-update.js", "/chunks/oasis/invoices/create-invoice.0a8e0c76914a1c00d6f7.hot-update.js": "/chunks/oasis/invoices/create-invoice.0a8e0c76914a1c00d6f7.hot-update.js",
"/chunks/oasis/invoices/create-invoice.258f3eb33557ccbac3ea.hot-update.js": "/chunks/oasis/invoices/create-invoice.258f3eb33557ccbac3ea.hot-update.js", "/chunks/oasis/invoices/create-invoice.258f3eb33557ccbac3ea.hot-update.js": "/chunks/oasis/invoices/create-invoice.258f3eb33557ccbac3ea.hot-update.js",
"/chunks/oasis/invoices/create-invoice.cb8ab124d3248115bbeb.hot-update.js": "/chunks/oasis/invoices/create-invoice.cb8ab124d3248115bbeb.hot-update.js" "/chunks/oasis/invoices/create-invoice.cb8ab124d3248115bbeb.hot-update.js": "/chunks/oasis/invoices/create-invoice.cb8ab124d3248115bbeb.hot-update.js",
"/js/main.e5cb54ffa973f245f788.hot-update.js": "/js/main.e5cb54ffa973f245f788.hot-update.js",
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~30c3eb1b.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~30c3eb1b.js?id=d47268e349bd2772cd71",
"/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~b2b17caf.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~b2b17caf.js?id=55d2b5e5a0fdda04fe42",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~2e1d0044.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~2e1d0044.js?id=15bd59d080c7feb21c94",
"/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~e9fdda75.js": "/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/dashboard-oasis~chunks/invoices~chun~e9fdda75.js?id=62ce022b3544cd69a5bd",
"/chunks/oasis/invoices/create-invoice.e5cb54ffa973f245f788.hot-update.js": "/chunks/oasis/invoices/create-invoice.e5cb54ffa973f245f788.hot-update.js",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~031a0bf8.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~031a0bf8.js?id=e5355666d39ae3c90ece",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~6b50d93b.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~6b50d93b.js?id=bcb779faea92dfb55517",
"/chunks/oasis/invoices/create-invoice.29f5dac0d6de4c926c48.hot-update.js": "/chunks/oasis/invoices/create-invoice.29f5dac0d6de4c926c48.hot-update.js",
"/js/main.7762a0cb7c8f081da7a8.hot-update.js": "/js/main.7762a0cb7c8f081da7a8.hot-update.js",
"/chunks/oasis/invoices/create-invoice.7762a0cb7c8f081da7a8.hot-update.js": "/chunks/oasis/invoices/create-invoice.7762a0cb7c8f081da7a8.hot-update.js",
"/chunks/oasis/invoices/create-invoice.bf2ff3653cab334dd3db.hot-update.js": "/chunks/oasis/invoices/create-invoice.bf2ff3653cab334dd3db.hot-update.js",
"/chunks/oasis/invoices/create-invoice.6f4ae4ca5c84af0df008.hot-update.js": "/chunks/oasis/invoices/create-invoice.6f4ae4ca5c84af0df008.hot-update.js",
"/chunks/oasis/invoices/create-invoice.f4f34464008780d72ad1.hot-update.js": "/chunks/oasis/invoices/create-invoice.f4f34464008780d72ad1.hot-update.js",
"/chunks/oasis/invoices/create-invoice.011d114f24bd5b37350a.hot-update.js": "/chunks/oasis/invoices/create-invoice.011d114f24bd5b37350a.hot-update.js",
"/chunks/oasis/invoices/create-invoice.e058013474e665ca119c.hot-update.js": "/chunks/oasis/invoices/create-invoice.e058013474e665ca119c.hot-update.js",
"/chunks/oasis/invoices/create-invoice.d2cbe8ce58839c982b9d.hot-update.js": "/chunks/oasis/invoices/create-invoice.d2cbe8ce58839c982b9d.hot-update.js",
"/chunks/oasis/invoices/create-invoice.279ac49a07287b29d2cf.hot-update.js": "/chunks/oasis/invoices/create-invoice.279ac49a07287b29d2cf.hot-update.js",
"/chunks/oasis/invoices/create-invoice.482e4cff79206d07edf1.hot-update.js": "/chunks/oasis/invoices/create-invoice.482e4cff79206d07edf1.hot-update.js",
"/chunks/oasis/invoices/create-invoice.03d98fd51456fc637a30.hot-update.js": "/chunks/oasis/invoices/create-invoice.03d98fd51456fc637a30.hot-update.js",
"/chunks/oasis/invoices/create-invoice.2894a5ee466b17d1234b.hot-update.js": "/chunks/oasis/invoices/create-invoice.2894a5ee466b17d1234b.hot-update.js",
"/chunks/oasis/invoices/create-invoice.2a0de71c8b320487afd1.hot-update.js": "/chunks/oasis/invoices/create-invoice.2a0de71c8b320487afd1.hot-update.js",
"/chunks/oasis/invoices/create-invoice.cbf489a83cf22e685f7c.hot-update.js": "/chunks/oasis/invoices/create-invoice.cbf489a83cf22e685f7c.hot-update.js",
"/chunks/oasis/invoices/create-invoice.5e9c8a6932ad21fd98b8.hot-update.js": "/chunks/oasis/invoices/create-invoice.5e9c8a6932ad21fd98b8.hot-update.js",
"/chunks/oasis/invoices/create-invoice.4056339805bc2fcb0814.hot-update.js": "/chunks/oasis/invoices/create-invoice.4056339805bc2fcb0814.hot-update.js",
"/chunks/oasis/invoices/create-invoice.4a782e5e6431091e7b7d.hot-update.js": "/chunks/oasis/invoices/create-invoice.4a782e5e6431091e7b7d.hot-update.js",
"/chunks/oasis/invoices/create-invoice.919da996ed767dc806c8.hot-update.js": "/chunks/oasis/invoices/create-invoice.919da996ed767dc806c8.hot-update.js",
"/chunks/oasis/invoices/create-invoice.f2783372014898e929a8.hot-update.js": "/chunks/oasis/invoices/create-invoice.f2783372014898e929a8.hot-update.js",
"/chunks/oasis/invoices/create-invoice.fde87c4bb7f4554a47d9.hot-update.js": "/chunks/oasis/invoices/create-invoice.fde87c4bb7f4554a47d9.hot-update.js",
"/chunks/oasis/invoices/create-invoice.50f75fc9769aecc1fb29.hot-update.js": "/chunks/oasis/invoices/create-invoice.50f75fc9769aecc1fb29.hot-update.js",
"/chunks/oasis/invoices/create-invoice.8f56747ce20f0b9d7956.hot-update.js": "/chunks/oasis/invoices/create-invoice.8f56747ce20f0b9d7956.hot-update.js",
"/chunks/oasis/invoices/create-invoice.3f6153328dc2ba36bcc1.hot-update.js": "/chunks/oasis/invoices/create-invoice.3f6153328dc2ba36bcc1.hot-update.js",
"/chunks/oasis/invoices/create-invoice.3bdd19e4193a8de87ad7.hot-update.js": "/chunks/oasis/invoices/create-invoice.3bdd19e4193a8de87ad7.hot-update.js",
"/chunks/oasis/invoices/create-invoice.db47f93f14bfc6f04685.hot-update.js": "/chunks/oasis/invoices/create-invoice.db47f93f14bfc6f04685.hot-update.js",
"/chunks/oasis/invoices/create-invoice.9956c96c2cda88f23bd2.hot-update.js": "/chunks/oasis/invoices/create-invoice.9956c96c2cda88f23bd2.hot-update.js",
"/chunks/oasis/invoices/create-invoice.4caf6e9d79c129da92da.hot-update.js": "/chunks/oasis/invoices/create-invoice.4caf6e9d79c129da92da.hot-update.js",
"/js/main.a5081e80b89d37b1116b.hot-update.js": "/js/main.a5081e80b89d37b1116b.hot-update.js",
"/chunks/oasis/invoices/create-invoice.6ed906a233d8a6d43d46.hot-update.js": "/chunks/oasis/invoices/create-invoice.6ed906a233d8a6d43d46.hot-update.js",
"/chunks/oasis/invoices/create-invoice.893de38e56ccda6a9180.hot-update.js": "/chunks/oasis/invoices/create-invoice.893de38e56ccda6a9180.hot-update.js",
"/chunks/oasis/invoices/create-invoice.f0016d27590db786f0b3.hot-update.js": "/chunks/oasis/invoices/create-invoice.f0016d27590db786f0b3.hot-update.js",
"/chunks/oasis/invoices/create-invoice.1473ee40a2a35b9dd2f4.hot-update.js": "/chunks/oasis/invoices/create-invoice.1473ee40a2a35b9dd2f4.hot-update.js",
"/chunks/oasis/invoices/create-invoice.c27a1232a6a26a349bf5.hot-update.js": "/chunks/oasis/invoices/create-invoice.c27a1232a6a26a349bf5.hot-update.js",
"/chunks/oasis/invoices/create-invoice.fdab71ae2a37e6b67b72.hot-update.js": "/chunks/oasis/invoices/create-invoice.fdab71ae2a37e6b67b72.hot-update.js",
"/chunks/oasis/invoices/create-invoice.65f83636e0b15f04c6d4.hot-update.js": "/chunks/oasis/invoices/create-invoice.65f83636e0b15f04c6d4.hot-update.js",
"/chunks/oasis/invoices/create-invoice.ae596a136746dd5286da.hot-update.js": "/chunks/oasis/invoices/create-invoice.ae596a136746dd5286da.hot-update.js",
"/chunks/oasis/invoices/create-invoice.f389c93ef6cabe4d1e91.hot-update.js": "/chunks/oasis/invoices/create-invoice.f389c93ef6cabe4d1e91.hot-update.js",
"/chunks/oasis/invoices/create-invoice.c00976946212f8d36ead.hot-update.js": "/chunks/oasis/invoices/create-invoice.c00976946212f8d36ead.hot-update.js",
"/chunks/oasis/invoices~chunks/platform~chunks/shared.3ffceeeff18e2ce02137.hot-update.js": "/chunks/oasis/invoices~chunks/platform~chunks/shared.3ffceeeff18e2ce02137.hot-update.js",
"/chunks/oasis/invoices~chunks/platform~chunks/shared.4b0bec00b34ee2363921.hot-update.js": "/chunks/oasis/invoices~chunks/platform~chunks/shared.4b0bec00b34ee2363921.hot-update.js",
"/chunks/oasis/invoices~chunks/platform~chunks/shared.3d4177546e680e5b6588.hot-update.js": "/chunks/oasis/invoices~chunks/platform~chunks/shared.3d4177546e680e5b6588.hot-update.js",
"/chunks/oasis/invoices/create-invoice.11bad75bf12b98b8ce07.hot-update.js": "/chunks/oasis/invoices/create-invoice.11bad75bf12b98b8ce07.hot-update.js"
} }
@@ -15,7 +15,7 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>Invoice Number:</label> <label>Invoice Number:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="invoice_number" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="invoice_number" rules="required" v-slot="{ errors }">
<input v-model.number="invoice.invoice_number" placeholder="" type="number" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model.number="invoice.invoice_number" placeholder="Type invoice number..." type="number" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<small v-if="latestInvoiceNumber" class="input-help"> <small v-if="latestInvoiceNumber" class="input-help">
Recommendation based on your latest invoice number {{ latestInvoiceNumber }} Recommendation based on your latest invoice number {{ latestInvoiceNumber }}
</small> </small>
@@ -26,7 +26,7 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>Variable Number:</label> <label>Variable Number:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="variable_number" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="variable_number" rules="required" v-slot="{ errors }">
<input v-model.number="invoice.variable_number" placeholder="" type="number" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model.number="invoice.variable_number" placeholder="Type variable number..." type="number" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<small v-if="latestInvoiceNumber" class="input-help"> <small v-if="latestInvoiceNumber" class="input-help">
Recommendation based on your invoice number Recommendation based on your invoice number
</small> </small>
@@ -36,8 +36,8 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>Delivery At:</label> <label>Delivery At:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="variable_number" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="delivery_at" rules="required" v-slot="{ errors }">
<input v-model="invoice.delivery_at" placeholder="" type="date" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.delivery_at" type="date" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -49,7 +49,7 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>Client:</label> <label>Client:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="invoice_type" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client" rules="required" v-slot="{ errors }">
<SelectInput v-model="invoice.client" :options="clients" placeholder="Create new or select existing client..." :isError="errors[0]" /> <SelectInput v-model="invoice.client" :options="clients" placeholder="Create new or select existing client..." :isError="errors[0]" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
@@ -59,7 +59,7 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>ICO:</label> <label>ICO:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_ico" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_ico" rules="required" v-slot="{ errors }">
<input v-model="invoice.client_ico" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_ico" placeholder="Type client ICO..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -67,7 +67,7 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>DIC:</label> <label>DIC:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_dic" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_dic" rules="required" v-slot="{ errors }">
<input v-model="invoice.client_dic" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_dic" placeholder="Type client DIC..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -76,7 +76,7 @@
<div v-if="isNewClient" class="block-wrapper"> <div v-if="isNewClient" class="block-wrapper">
<label>IC DPH (optional):</label> <label>IC DPH (optional):</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_ic_dph" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_ic_dph" v-slot="{ errors }">
<input v-model="invoice.client_ic_dph" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_ic_dph" placeholder="Type client IC DHP..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -84,7 +84,7 @@
<div v-if="isNewClient" class="block-wrapper"> <div v-if="isNewClient" class="block-wrapper">
<label>Company name:</label> <label>Company name:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_name" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_name" rules="required" v-slot="{ errors }">
<input v-model="invoice.client_name" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_name" placeholder="Type client company name..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -92,7 +92,7 @@
<div v-if="isNewClient" class="block-wrapper"> <div v-if="isNewClient" class="block-wrapper">
<label>Address:</label> <label>Address:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_address" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_address" rules="required" v-slot="{ errors }">
<input v-model="invoice.client_address" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_address" placeholder="Type client address..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -101,7 +101,7 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>City:</label> <label>City:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_city" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_city" rules="required" v-slot="{ errors }">
<input v-model="invoice.client_city" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_city" placeholder="Type client city..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -109,7 +109,7 @@
<div class="block-wrapper"> <div class="block-wrapper">
<label>Postal Code:</label> <label>Postal Code:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_postal_code" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_postal_code" rules="required" v-slot="{ errors }">
<input v-model="invoice.client_postal_code" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_postal_code" placeholder="Type client postal code..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -118,7 +118,7 @@
<div v-if="isNewClient" class="block-wrapper"> <div v-if="isNewClient" class="block-wrapper">
<label>Country:</label> <label>Country:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_country" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_country" rules="required" v-slot="{ errors }">
<SelectInput v-model="invoice.client_country" :default="invoice.client_country" :options="countries" placeholder="" :isError="errors[0]" /> <SelectInput v-model="invoice.client_country" :default="invoice.client_country" :options="countries" placeholder="Select client country" :isError="errors[0]" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -126,7 +126,7 @@
<div v-if="isNewClient" class="block-wrapper"> <div v-if="isNewClient" class="block-wrapper">
<label>Phone (optional):</label> <label>Phone (optional):</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_phone_number" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_phone_number" v-slot="{ errors }">
<input v-model="invoice.client_phone_number" placeholder="" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_phone_number" placeholder="Type client's phone number..." type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -134,7 +134,7 @@
<div v-if="isNewClient" class="block-wrapper"> <div v-if="isNewClient" class="block-wrapper">
<label>Email (optional):</label> <label>Email (optional):</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_email" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="client_email" v-slot="{ errors }">
<input v-model="invoice.client_email" placeholder="" type="email" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model="invoice.client_email" placeholder="Type client's email address..." type="email" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -153,7 +153,7 @@
<div class="duplicator"> <div class="duplicator">
<div class="plan-item duplicator-item" v-for="(item, index) in invoice.items" :key="index++"> <div class="plan-item duplicator-item" v-for="(item, index) in invoice.items" :key="index++">
<x-icon @click="removeRow(item)" v-if="index !== 0" size="22" class="delete-item hover-text-theme" /> <x-icon @click="removeRow(item)" v-if="index !== 1" size="22" class="delete-item hover-text-theme" />
<div class="block-wrapper"> <div class="block-wrapper">
<label>Description:</label> <label>Description:</label>
@@ -190,7 +190,7 @@
</div> </div>
</div> </div>
<ButtonBase @click.native="addRow" class="duplicator-add-button" button-style="theme" style="width: 100%"> <ButtonBase @click.native="addRow" class="duplicator-add-button" button-style="theme">
Add New Item Add New Item
</ButtonBase> </ButtonBase>
</div> </div>
@@ -201,7 +201,7 @@
<FormLabel icon="credit-card">Discount</FormLabel> <FormLabel icon="credit-card">Discount</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="email" v-slot="{ errors }"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Apply discount:</label> <label class="input-label">Apply discount:</label>
@@ -209,13 +209,13 @@
</div> </div>
<SwitchInput v-model="isDiscount" class="switch" :state="isDiscount" /> <SwitchInput v-model="isDiscount" class="switch" :state="isDiscount" />
</div> </div>
</ValidationProvider> </div>
</div> </div>
<div v-if="isDiscount" class="block-wrapper"> <div v-if="isDiscount" class="block-wrapper">
<label>Discount Type:</label> <label>Discount Type:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="discount_type" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="discount_type" rules="required" v-slot="{ errors }">
<SelectInput v-model="invoice.discount_type" :default="invoice.discount_type" :options="discountTypeList" placeholder="" :isError="errors[0]" /> <SelectInput v-model="invoice.discount_type" :default="invoice.discount_type" :options="discountTypeList" placeholder="Select discount type" :isError="errors[0]" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -223,7 +223,7 @@
<div v-if="isDiscount" class="block-wrapper"> <div v-if="isDiscount" class="block-wrapper">
<label>Discount Rate:</label> <label>Discount Rate:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="discount_rate" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="discount_rate" rules="required" v-slot="{ errors }">
<input v-model.number="invoice.discount_rate" placeholder="" max="100" min="0" type="number" :class="{'is-error': errors[0]}" class="focus-border-theme" /> <input v-model.number="invoice.discount_rate" placeholder="Type discount rate..." max="100" min="0" type="number" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
@@ -234,7 +234,7 @@
<FormLabel icon="settings">Others</FormLabel> <FormLabel icon="settings">Others</FormLabel>
<div v-if="isNewClient && invoice.client_email" class="block-wrapper"> <div v-if="isNewClient && invoice.client_email" class="block-wrapper">
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="email" v-slot="{ errors }"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Store client for future use:</label> <label class="input-label">Store client for future use:</label>
@@ -242,11 +242,11 @@
</div> </div>
<SwitchInput v-model="invoice.send_invoice" class="switch" :state="invoice.send_invoice" /> <SwitchInput v-model="invoice.send_invoice" class="switch" :state="invoice.send_invoice" />
</div> </div>
</ValidationProvider> </div>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="email" v-slot="{ errors }"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Send invoice on client's email:</label> <label class="input-label">Send invoice on client's email:</label>
@@ -254,7 +254,7 @@
</div> </div>
<SwitchInput v-model="invoice.send_invoice" class="switch" :state="invoice.send_invoice" /> <SwitchInput v-model="invoice.send_invoice" class="switch" :state="invoice.send_invoice" />
</div> </div>
</ValidationProvider> </div>
</div> </div>
</PageTabGroup> </PageTabGroup>
</PageTab> </PageTab>
@@ -511,22 +511,22 @@
isVatPayer: false, isVatPayer: false,
clients: [], clients: [],
latestInvoiceNumber: undefined, latestInvoiceNumber: undefined,
_invoice: { invoice: {
invoice_type: '', invoice_type: '',
invoice_number: '', invoice_number: '',
variable_number: '', variable_number: '',
delivery_at: '', delivery_at: '',
items: [ items: [
{ {
id: 1, id: Math.floor(Math.random() * 10000000),
description: '', description: '',
amount: 1, amount: 1,
tax_rate: undefined, tax_rate: 21,
price: undefined, price: undefined,
} }
], ],
discount_type: null, discount_type: undefined,
discount_rate: null, discount_rate: undefined,
client: '', client: '',
client_avatar: '', client_avatar: '',
client_name: '', client_name: '',
@@ -542,7 +542,7 @@
send_invoice: true, send_invoice: true,
store_client: true, store_client: true,
}, },
invoice: { /*invoice: {
invoice_type: 'regular-invoice', invoice_type: 'regular-invoice',
invoice_number: undefined, invoice_number: undefined,
variable_number: undefined, variable_number: undefined,
@@ -564,7 +564,7 @@
client_ic_dph: 'SK2023489457', client_ic_dph: 'SK2023489457',
send_invoice: false, send_invoice: false,
store_client: true, store_client: true,
}, },*/
invoiceTypeList: [ invoiceTypeList: [
{ {
label: 'Regular Invoice', label: 'Regular Invoice',
@@ -605,6 +605,7 @@
if (!isValid) { if (!isValid) {
this.isError = true this.isError = true
this.errorMessage = 'There is probably an error, please check it and fix it.'
return return
} }
@@ -620,7 +621,8 @@
if (key === 'items') { if (key === 'items') {
formData.append(key, JSON.stringify(this.invoice[key])) formData.append(key, JSON.stringify(this.invoice[key]))
} else { } else {
formData.append(key, this.invoice[key]) if (this.invoice[key])
formData.append(key, this.invoice[key])
} }
}) })
@@ -677,7 +679,7 @@
id: Math.floor(Math.random() * 10000000), id: Math.floor(Math.random() * 10000000),
description: '', description: '',
amount: 1, amount: 1,
tax_rate: lastTaxRate?.tax_rate || 20, tax_rate: lastTaxRate?.tax_rate || 21,
price: 1, price: 1,
}) })
@@ -685,8 +687,19 @@
}, },
removeRow(item) { removeRow(item) {
this.invoice.items = this.invoice.items.filter(obj => obj.id !== item.id) if (this.invoice.items.length > 1)
this.invoice.items = this.invoice.items.filter(obj => obj.id !== item.id)
}, },
get_recommended_delivery_date() {
let now = new Date(),
delivery_time = now.setDate(now.getDate() + 2 * 7)
let year = new Intl.DateTimeFormat('en', {year: 'numeric'}).format(delivery_time),
month = new Intl.DateTimeFormat('en', {month: '2-digit'}).format(delivery_time),
day = new Intl.DateTimeFormat('en', {day: 'numeric'}).format(delivery_time)
this.invoice.delivery_at = `${year}-${month}-${day}`
}
}, },
mounted() { mounted() {
this.invoice.invoice_type = this.$route.query.type this.invoice.invoice_type = this.$route.query.type
@@ -703,6 +716,8 @@
this.invoice.invoice_number = response.data.recommendedInvoiceNumber this.invoice.invoice_number = response.data.recommendedInvoiceNumber
this.latestInvoiceNumber = response.data.latestInvoiceNumber this.latestInvoiceNumber = response.data.latestInvoiceNumber
this.get_recommended_delivery_date()
}) })
.finally(() => { .finally(() => {
this.isLoadingPage = false this.isLoadingPage = false
@@ -734,6 +749,7 @@
.summary-list { .summary-list {
box-shadow: 0 7px 20px 5px hsla(220, 36%, 16%, 0.06); box-shadow: 0 7px 20px 5px hsla(220, 36%, 16%, 0.06);
border-radius: 8px; border-radius: 8px;
min-width: 300px;
position: sticky; position: sticky;
padding: 25px; padding: 25px;
top: 85px; top: 85px;
@@ -806,6 +822,13 @@
} }
} }
.duplicator {
.wrapper-inline {
margin-bottom: 0 !important;
}
}
@media only screen and (max-width: 970px) { @media only screen and (max-width: 970px) {
.content-page { .content-page {
grid-template-columns: 1fr; grid-template-columns: 1fr;
@@ -251,10 +251,12 @@ export default {
} }
#pdf-wrapper { #pdf-wrapper {
overflow-y: scroll; border-radius: 8px;
box-shadow: $light_mode_popup_shadow;
overflow-y: scroll;
margin: 0 auto; margin: 0 auto;
position: absolute; position: absolute;
top: 0; top: 20px;
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
+2 -2
View File
@@ -65,7 +65,7 @@
.duplicator { .duplicator {
.duplicator-add-button { .duplicator-add-button {
//width: 100%; width: 100%;
} }
.duplicator-item { .duplicator-item {
@@ -109,7 +109,7 @@
border-radius: 0; border-radius: 0;
padding: 0 0 8px; padding: 0 0 8px;
&:focus { &:focus, &.is-error {
border-top-color: transparent !important; border-top-color: transparent !important;
border-left-color: transparent !important; border-left-color: transparent !important;
border-right-color: transparent !important; border-right-color: transparent !important;
@@ -61,7 +61,7 @@
<!--Supplier--> <!--Supplier-->
<section> <section>
<div class="supplier"> <div class="supplier">
<div class="box"> <div class="box" style="width: 500px;">
<h3>Odberateľ:</h3> <h3>Odberateľ:</h3>
<p>{{ $invoice->client['name'] }}</p> <p>{{ $invoice->client['name'] }}</p>
<p>{{ $invoice->client['address'] }}, {{ $invoice->client['city'] }}</p> <p>{{ $invoice->client['address'] }}, {{ $invoice->client['city'] }}</p>