From 5183a825e627117714dc316986c44999eaf3619f Mon Sep 17 00:00:00 2001
From: Mohit Panjwani
Date: Thu, 3 Mar 2022 20:39:44 +0530
Subject: [PATCH 1/6] New Crowdin updates (#815)
* New translations en.json (Romanian)
* New translations en.json (Slovak)
* New translations en.json (Hindi)
* New translations en.json (Latvian)
* New translations en.json (Croatian)
* New translations en.json (Persian)
* New translations en.json (Indonesian)
* New translations en.json (Portuguese, Brazilian)
* New translations en.json (Vietnamese)
* New translations en.json (Chinese Traditional)
* New translations en.json (Turkish)
* New translations en.json (Swedish)
* New translations en.json (Slovenian)
* New translations en.json (Russian)
* New translations en.json (French)
* New translations en.json (Portuguese)
* New translations en.json (Polish)
* New translations en.json (Dutch)
* New translations en.json (Lithuanian)
* New translations en.json (Japanese)
* New translations en.json (Italian)
* New translations en.json (Finnish)
* New translations en.json (Greek)
* New translations en.json (German)
* New translations en.json (Czech)
* New translations en.json (Arabic)
* New translations en.json (Spanish)
* New translations en.json (Serbian (Latin))
---
resources/scripts/locales/ar.json | 1 +
resources/scripts/locales/cs.json | 1 +
resources/scripts/locales/de.json | 1 +
resources/scripts/locales/el.json | 1 +
resources/scripts/locales/es.json | 1 +
resources/scripts/locales/fa.json | 1 +
resources/scripts/locales/fi.json | 1 +
resources/scripts/locales/fr.json | 1 +
resources/scripts/locales/hi.json | 1 +
resources/scripts/locales/hr.json | 1 +
resources/scripts/locales/id.json | 1 +
resources/scripts/locales/it.json | 1 +
resources/scripts/locales/ja.json | 1 +
resources/scripts/locales/lt.json | 1 +
resources/scripts/locales/lv.json | 1 +
resources/scripts/locales/nl.json | 1 +
resources/scripts/locales/pl.json | 1 +
resources/scripts/locales/pt.json | 1 +
resources/scripts/locales/ro.json | 1 +
resources/scripts/locales/ru.json | 1 +
resources/scripts/locales/sk.json | 1 +
resources/scripts/locales/sl.json | 1 +
resources/scripts/locales/sr.json | 1 +
resources/scripts/locales/sv.json | 1 +
resources/scripts/locales/tr.json | 1 +
resources/scripts/locales/vi.json | 1 +
resources/scripts/locales/zh.json | 1 +
27 files changed, 27 insertions(+)
diff --git a/resources/scripts/locales/ar.json b/resources/scripts/locales/ar.json
index a52680c9..d8eb7589 100644
--- a/resources/scripts/locales/ar.json
+++ b/resources/scripts/locales/ar.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/cs.json b/resources/scripts/locales/cs.json
index 40157379..9516fe64 100644
--- a/resources/scripts/locales/cs.json
+++ b/resources/scripts/locales/cs.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Opakující se faktura úspěšně naklonována",
"clone_invoice": "Naklonovat opakující se fakturu",
"confirm_clone": "Tato opakující se faktura bude naklonována do nové opakující se faktury",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Název položky",
"description": "Popis",
diff --git a/resources/scripts/locales/de.json b/resources/scripts/locales/de.json
index 15797cdd..31ba594e 100644
--- a/resources/scripts/locales/de.json
+++ b/resources/scripts/locales/de.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Serienrechnung erfolgreich kopiert",
"clone_invoice": "Serienrechnung kopieren",
"confirm_clone": "Diese Serienrechnung wird in eine neue Serienrechnung kopiert",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Titel des Artikels",
"description": "Beschreibung",
diff --git a/resources/scripts/locales/el.json b/resources/scripts/locales/el.json
index 74451ab5..9ca13e1a 100644
--- a/resources/scripts/locales/el.json
+++ b/resources/scripts/locales/el.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Επαναλαμβανόμενο τιμολόγιο κλωνοποιήθηκε επιτυχής",
"clone_invoice": "Δημιουργία Επαναλαμβανόμενου Τιμολογίου",
"confirm_clone": "Αυτό το επαναλαμβανόμενο τιμολόγιο θα κλωνοποιηθεί σε ένα νέο επαναλαμβανόμενο τιμολόγιο",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Τίτλος Προϊόντος",
"description": "Περιγραφή",
diff --git a/resources/scripts/locales/es.json b/resources/scripts/locales/es.json
index 1abab66e..591b2329 100644
--- a/resources/scripts/locales/es.json
+++ b/resources/scripts/locales/es.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Factura recurrente clonada con éxito",
"clone_invoice": "Clonar factura recurrente",
"confirm_clone": "Esta factura recurrente será clonada en una nueva factura recurrente",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Título del artículo",
"description": "Descripción",
diff --git a/resources/scripts/locales/fa.json b/resources/scripts/locales/fa.json
index 843e9adb..e87aba8a 100644
--- a/resources/scripts/locales/fa.json
+++ b/resources/scripts/locales/fa.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/fi.json b/resources/scripts/locales/fi.json
index 1632a936..fccc2bc6 100644
--- a/resources/scripts/locales/fi.json
+++ b/resources/scripts/locales/fi.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/fr.json b/resources/scripts/locales/fr.json
index d1816b7d..32f13358 100644
--- a/resources/scripts/locales/fr.json
+++ b/resources/scripts/locales/fr.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Facture récurrente clonée",
"clone_invoice": "Dupliquer",
"confirm_clone": "Cette facture récurrente sera clonée dans une nouvelle facture récurrente",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Nom",
"description": "Description",
diff --git a/resources/scripts/locales/hi.json b/resources/scripts/locales/hi.json
index 5229ea05..2ad144af 100644
--- a/resources/scripts/locales/hi.json
+++ b/resources/scripts/locales/hi.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/hr.json b/resources/scripts/locales/hr.json
index a4b9c49e..cc7da58b 100644
--- a/resources/scripts/locales/hr.json
+++ b/resources/scripts/locales/hr.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/id.json b/resources/scripts/locales/id.json
index 5520454f..6560d08d 100644
--- a/resources/scripts/locales/id.json
+++ b/resources/scripts/locales/id.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Faktur Berulang berhasil digandakan",
"clone_invoice": "Gandakan Faktur Berulang",
"confirm_clone": "Faktur Berulang ini akan digandakan menjadi Faktur Berulang yang baru",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Judul item",
"description": "Deskripsi",
diff --git a/resources/scripts/locales/it.json b/resources/scripts/locales/it.json
index 30c5411b..767abd42 100644
--- a/resources/scripts/locales/it.json
+++ b/resources/scripts/locales/it.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Fattura copiata con successo",
"clone_invoice": "Duplica Fattura Ricorrente",
"confirm_clone": "Questa fattura ricorrente verrà clonata in una nuova fattura ricorrente",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Titolo Articolo",
"description": "Descrizione",
diff --git a/resources/scripts/locales/ja.json b/resources/scripts/locales/ja.json
index 107db1a6..8b3313cf 100644
--- a/resources/scripts/locales/ja.json
+++ b/resources/scripts/locales/ja.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/lt.json b/resources/scripts/locales/lt.json
index 4e77664a..ad637127 100644
--- a/resources/scripts/locales/lt.json
+++ b/resources/scripts/locales/lt.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/lv.json b/resources/scripts/locales/lv.json
index 466deebb..ffc1ece6 100644
--- a/resources/scripts/locales/lv.json
+++ b/resources/scripts/locales/lv.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/nl.json b/resources/scripts/locales/nl.json
index b54eeab9..4ca4583b 100644
--- a/resources/scripts/locales/nl.json
+++ b/resources/scripts/locales/nl.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Terugkerende factuur succesvol gekopieerd",
"clone_invoice": "Kopieer periodieke factuur",
"confirm_clone": "Deze periodieke factuur wordt gekopieerd naar een nieuwe periodieke factuur",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item titel",
"description": "Beschrijving",
diff --git a/resources/scripts/locales/pl.json b/resources/scripts/locales/pl.json
index 001d9728..97cf2e7f 100644
--- a/resources/scripts/locales/pl.json
+++ b/resources/scripts/locales/pl.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Faktura Cykliczna sklonowana pomyślnie",
"clone_invoice": "Klonuj Fakturę Cykliczną",
"confirm_clone": "Ta faktura cykliczna zostanie sklonowana do nowej faktury cyklicznej",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Tytuł pozycji",
"description": "Opis",
diff --git a/resources/scripts/locales/pt.json b/resources/scripts/locales/pt.json
index 16fb4db3..5c224428 100644
--- a/resources/scripts/locales/pt.json
+++ b/resources/scripts/locales/pt.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/ro.json b/resources/scripts/locales/ro.json
index 5f0fddb6..8445b6b3 100644
--- a/resources/scripts/locales/ro.json
+++ b/resources/scripts/locales/ro.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/ru.json b/resources/scripts/locales/ru.json
index e037cf6a..b83779c6 100644
--- a/resources/scripts/locales/ru.json
+++ b/resources/scripts/locales/ru.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/sk.json b/resources/scripts/locales/sk.json
index f2e0f9b5..0e036b32 100644
--- a/resources/scripts/locales/sk.json
+++ b/resources/scripts/locales/sk.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/sl.json b/resources/scripts/locales/sl.json
index 2013b288..094feb90 100644
--- a/resources/scripts/locales/sl.json
+++ b/resources/scripts/locales/sl.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/sr.json b/resources/scripts/locales/sr.json
index 2e62717b..f0d198f1 100644
--- a/resources/scripts/locales/sr.json
+++ b/resources/scripts/locales/sr.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/sv.json b/resources/scripts/locales/sv.json
index eb54f4c8..4ecd968e 100644
--- a/resources/scripts/locales/sv.json
+++ b/resources/scripts/locales/sv.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/tr.json b/resources/scripts/locales/tr.json
index d0323445..65932a41 100644
--- a/resources/scripts/locales/tr.json
+++ b/resources/scripts/locales/tr.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/vi.json b/resources/scripts/locales/vi.json
index c40938b6..a7cb1a3a 100644
--- a/resources/scripts/locales/vi.json
+++ b/resources/scripts/locales/vi.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
diff --git a/resources/scripts/locales/zh.json b/resources/scripts/locales/zh.json
index c63bba96..0767a61d 100644
--- a/resources/scripts/locales/zh.json
+++ b/resources/scripts/locales/zh.json
@@ -526,6 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
+ "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
"item": {
"title": "Item Title",
"description": "Description",
From 6552c4edd6fa02bdce91abe7df144f9b65bd01bf Mon Sep 17 00:00:00 2001
From: Mohit Panjwani
Date: Thu, 3 Mar 2022 23:10:11 +0530
Subject: [PATCH 2/6] New translations en.json (Finnish) (#816)
---
resources/scripts/locales/fi.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/scripts/locales/fi.json b/resources/scripts/locales/fi.json
index fccc2bc6..1d04524e 100644
--- a/resources/scripts/locales/fi.json
+++ b/resources/scripts/locales/fi.json
@@ -526,7 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
- "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
+ "add_customer_email": "Ole hyvä ja lisää sähköpostiosoite tälle asiakkaalle voidaksesi lähettää laskut automaattisesti.",
"item": {
"title": "Item Title",
"description": "Description",
From c07e44520a97c2bed54918996f61fa7b402c426e Mon Sep 17 00:00:00 2001
From: David Wheatley
Date: Fri, 4 Mar 2022 03:51:17 +0100
Subject: [PATCH 3/6] typo: somthing -> something (#820)
---
resources/scripts/components/notifications/NotificationItem.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/scripts/components/notifications/NotificationItem.vue b/resources/scripts/components/notifications/NotificationItem.vue
index 246b7c0b..2a61b6ef 100644
--- a/resources/scripts/components/notifications/NotificationItem.vue
+++ b/resources/scripts/components/notifications/NotificationItem.vue
@@ -83,7 +83,7 @@
? notification.message
: success
? 'Successful'
- : 'Somthing went wrong'
+ : 'Something went wrong'
}}
From f6771dafd321ef213c74ef2d3379cb72fc02f28c Mon Sep 17 00:00:00 2001
From: asift798
Date: Fri, 4 Mar 2022 15:00:56 +0530
Subject: [PATCH 4/6] fixed search filter is not working
---
.../scripts/admin/components/modal-components/BackupModal.vue | 2 +-
.../components/modal-components/ExchangeRateProviderModal.vue | 4 +++-
.../scripts/admin/components/modal-components/ItemModal.vue | 4 ++--
.../admin/components/modal-components/disks/DoSpacesDisk.vue | 1 +
.../admin/views/installation/Step8CompanyPreferences.vue | 4 ++--
resources/scripts/admin/views/settings/AccountSetting.vue | 2 +-
resources/scripts/admin/views/settings/BackupSetting.vue | 2 +-
resources/scripts/admin/views/settings/PreferencesSetting.vue | 4 ++--
resources/scripts/admin/views/users/Create.vue | 1 +
resources/scripts/components/base/BaseItemSelect.vue | 2 +-
10 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/resources/scripts/admin/components/modal-components/BackupModal.vue b/resources/scripts/admin/components/modal-components/BackupModal.vue
index c3376f69..88e6fc04 100644
--- a/resources/scripts/admin/components/modal-components/BackupModal.vue
+++ b/resources/scripts/admin/components/modal-components/BackupModal.vue
@@ -51,7 +51,7 @@
label="name"
value-prop="id"
:placeholder="$t('settings.disk.select_disk')"
- track-by="id"
+ track-by="name"
object
/>
diff --git a/resources/scripts/admin/components/modal-components/ExchangeRateProviderModal.vue b/resources/scripts/admin/components/modal-components/ExchangeRateProviderModal.vue
index 01b21ca5..b466ca64 100644
--- a/resources/scripts/admin/components/modal-components/ExchangeRateProviderModal.vue
+++ b/resources/scripts/admin/components/modal-components/ExchangeRateProviderModal.vue
@@ -38,6 +38,7 @@
label="key"
:searchable="true"
:invalid="v$.currentExchangeRate.driver.$error"
+ track-by="key"
@update:modelValue="resetCurrency"
@input="v$.currentExchangeRate.driver.$touch()"
/>
@@ -60,6 +61,7 @@
:options="serverOptions"
:invalid="v$.currencyConverter.type.$error"
label="value"
+ track-by="value"
@update:modelValue="resetCurrency"
/>
@@ -104,8 +106,8 @@
:invalid="v$.currentExchangeRate.currencies.$error"
label="code"
track-by="code"
+ open-direction="top"
@input="v$.currentExchangeRate.currencies.$touch()"
- openDirection="top"
/>
diff --git a/resources/scripts/admin/components/modal-components/ItemModal.vue b/resources/scripts/admin/components/modal-components/ItemModal.vue
index 5270394a..3bd55096 100644
--- a/resources/scripts/admin/components/modal-components/ItemModal.vue
+++ b/resources/scripts/admin/components/modal-components/ItemModal.vue
@@ -50,7 +50,7 @@
:can-clear="false"
:placeholder="$t('items.select_a_unit')"
searchable
- track-by="id"
+ track-by="name"
/>
@@ -67,7 +67,7 @@
:can-deselect="false"
:can-clear="false"
searchable
- track-by="id"
+ track-by="name"
object
/>
diff --git a/resources/scripts/admin/components/modal-components/disks/DoSpacesDisk.vue b/resources/scripts/admin/components/modal-components/disks/DoSpacesDisk.vue
index c6bdb80b..0dd83e4c 100644
--- a/resources/scripts/admin/components/modal-components/disks/DoSpacesDisk.vue
+++ b/resources/scripts/admin/components/modal-components/disks/DoSpacesDisk.vue
@@ -35,6 +35,7 @@
searchable
label="name"
:can-deselect="false"
+ track-by="name"
@update:modelValue="onChangeDriver(data)"
/>
diff --git a/resources/scripts/admin/views/installation/Step8CompanyPreferences.vue b/resources/scripts/admin/views/installation/Step8CompanyPreferences.vue
index b0e03781..ad40e60e 100644
--- a/resources/scripts/admin/views/installation/Step8CompanyPreferences.vue
+++ b/resources/scripts/admin/views/installation/Step8CompanyPreferences.vue
@@ -48,7 +48,7 @@
value-prop="code"
:placeholder="$tc('settings.preferences.select_language')"
class="w-full"
- track-by="code"
+ track-by="name"
:searchable="true"
:invalid="v$.currentPreferences.language.$error"
/>
@@ -95,7 +95,7 @@
label="key"
value-prop="value"
:placeholder="$tc('settings.preferences.select_time_zone')"
- track-by="value"
+ track-by="key"
:searchable="true"
:invalid="v$.currentPreferences.time_zone.$error"
/>
diff --git a/resources/scripts/admin/views/settings/AccountSetting.vue b/resources/scripts/admin/views/settings/AccountSetting.vue
index b7fdeede..3b7b8262 100644
--- a/resources/scripts/admin/views/settings/AccountSetting.vue
+++ b/resources/scripts/admin/views/settings/AccountSetting.vue
@@ -75,7 +75,7 @@
:options="globalStore.config.languages"
label="name"
value-prop="code"
- track-by="code"
+ track-by="name"
open-direction="top"
/>
diff --git a/resources/scripts/admin/views/settings/BackupSetting.vue b/resources/scripts/admin/views/settings/BackupSetting.vue
index a7ad76ef..f62e348b 100644
--- a/resources/scripts/admin/views/settings/BackupSetting.vue
+++ b/resources/scripts/admin/views/settings/BackupSetting.vue
@@ -23,7 +23,7 @@
v-model="filters.selected_disk"
:content-loading="isFetchingInitialData"
:options="getDisksOptions"
- track-by="id"
+ track-by="name"
:placeholder="$t('settings.disk.select_disk')"
label="name"
:searchable="true"
diff --git a/resources/scripts/admin/views/settings/PreferencesSetting.vue b/resources/scripts/admin/views/settings/PreferencesSetting.vue
index 71914be7..6c46f645 100644
--- a/resources/scripts/admin/views/settings/PreferencesSetting.vue
+++ b/resources/scripts/admin/views/settings/PreferencesSetting.vue
@@ -40,7 +40,7 @@
label="name"
value-prop="code"
class="w-full"
- track-by="code"
+ track-by="name"
:searchable="true"
:invalid="v$.language.$error"
/>
@@ -79,7 +79,7 @@
:options="globalStore.dateFormats"
label="display_date"
value-prop="carbon_format_value"
- track-by="carbon_format_value"
+ track-by="display_date"
searchable
:invalid="v$.carbon_date_format.$error"
class="w-full"
diff --git a/resources/scripts/admin/views/users/Create.vue b/resources/scripts/admin/views/users/Create.vue
index 41d91650..e909601f 100644
--- a/resources/scripts/admin/views/users/Create.vue
+++ b/resources/scripts/admin/views/users/Create.vue
@@ -70,6 +70,7 @@
searchable
:can-deselect="false"
class="w-full"
+ track-by="name"
/>
diff --git a/resources/scripts/components/base/BaseItemSelect.vue b/resources/scripts/components/base/BaseItemSelect.vue
index 21ec5726..e5955a54 100644
--- a/resources/scripts/components/base/BaseItemSelect.vue
+++ b/resources/scripts/components/base/BaseItemSelect.vue
@@ -30,7 +30,7 @@
v-model="itemSelect"
:content-loading="contentLoading"
value-prop="id"
- track-by="id"
+ track-by="name"
:invalid="invalid"
preserve-search
:initial-search="itemData.name"
From 2cadcad48565961eb42b0d3bc4d871cafecb1ef8 Mon Sep 17 00:00:00 2001
From: Thomas Calemark
Date: Sun, 6 Mar 2022 05:23:31 +0100
Subject: [PATCH 5/6] Fix currency settings error (#821)
* Fixed issue with currency error on change after transactions
* organized imports
---
.../UpdateCompanySettingsController.php | 8 ++-
tests/Feature/Admin/CompanySettingTest.php | 61 +++++++++++++++++++
2 files changed, 67 insertions(+), 2 deletions(-)
diff --git a/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php
index 128be75e..2589e4f8 100644
--- a/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php
+++ b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php
@@ -6,6 +6,7 @@ use Crater\Http\Controllers\Controller;
use Crater\Http\Requests\UpdateSettingsRequest;
use Crater\Models\Company;
use Crater\Models\CompanySetting;
+use Illuminate\Support\Arr;
class UpdateCompanySettingsController extends Controller
{
@@ -20,10 +21,13 @@ class UpdateCompanySettingsController extends Controller
$company = Company::find($request->header('company'));
$this->authorize('manage company', $company);
- $companyCurrency = CompanySetting::getSetting('currency', $request->header('company'));
$data = $request->settings;
- if ($companyCurrency !== $data['currency'] && $company->hasTransactions()) {
+ if (
+ Arr::exists($data, 'currency') &&
+ (CompanySetting::getSetting('currency', $company->id) !== $data['currency']) &&
+ $company->hasTransactions()
+ ) {
return response()->json([
'success' => false,
'message' => 'Cannot update company currency after transactions are created.'
diff --git a/tests/Feature/Admin/CompanySettingTest.php b/tests/Feature/Admin/CompanySettingTest.php
index 04b22550..613dd6bd 100644
--- a/tests/Feature/Admin/CompanySettingTest.php
+++ b/tests/Feature/Admin/CompanySettingTest.php
@@ -3,6 +3,9 @@
use Crater\Http\Controllers\V1\Admin\Settings\CompanyController;
use Crater\Http\Requests\CompanyRequest;
use Crater\Http\Requests\ProfileRequest;
+use Crater\Models\Invoice;
+use Crater\Models\InvoiceItem;
+use Crater\Models\Tax;
use Crater\Models\User;
use Illuminate\Support\Facades\Artisan;
use Laravel\Sanctum\Sanctum;
@@ -120,6 +123,64 @@ test('update settings', function () {
}
});
+test('update settings without currency setting', function () {
+
+ $settings = [
+ 'notification_email' => 'noreply@crater.in',
+ ];
+
+ $response = postJson('/api/v1/company/settings', ['settings' => $settings]);
+
+ $response->assertOk()
+ ->assertJson([
+ 'success' => true,
+ ]);
+
+ foreach ($settings as $key => $value) {
+ $this->assertDatabaseHas('company_settings', [
+ 'option' => $key,
+ 'value' => $value,
+ ]);
+ }
+});
+
+test('update currency settings after company has currency and transactions is not allowed', function () {
+ $settings = [
+ 'currency' => 1,
+ ];
+
+ $response = postJson('/api/v1/company/settings', ['settings' => $settings]);
+
+ $response->assertOk()
+ ->assertJson([
+ 'success' => true,
+ ]);
+
+ Invoice::factory()
+ ->raw([
+ 'taxes' => [Tax::factory()->raw()],
+ 'items' => [InvoiceItem::factory()->raw()],
+ ]);
+
+ $settings = [
+ 'currency' => 2,
+ ];
+
+ $response = postJson('/api/v1/company/settings', ['settings' => $settings]);
+
+ $response->assertOK()
+ ->assertJson([
+ 'success' => false,
+ 'message' => 'Cannot update company currency after transactions are created.'
+ ]);
+
+
+ $this->assertDatabaseHas('company_settings', [
+ 'option' => 'currency',
+ 'value' => 1,
+ ]);
+});
+
test('get notification email settings', function () {
$data['settings'] = [
'currency',
From f6c59b74239396c2f77445f8438c06182be2a489 Mon Sep 17 00:00:00 2001
From: Mohit Panjwani
Date: Sun, 6 Mar 2022 10:05:31 +0530
Subject: [PATCH 6/6] New Crowdin updates (#817)
* New translations en.json (Finnish)
* New translations en.json (Italian)
* New translations en.json (Vietnamese)
---
resources/scripts/locales/fi.json | 228 +++++++++++++++---------------
resources/scripts/locales/it.json | 2 +-
resources/scripts/locales/vi.json | 2 +-
3 files changed, 116 insertions(+), 116 deletions(-)
diff --git a/resources/scripts/locales/fi.json b/resources/scripts/locales/fi.json
index 1d04524e..d2f40766 100644
--- a/resources/scripts/locales/fi.json
+++ b/resources/scripts/locales/fi.json
@@ -4,7 +4,7 @@
"customers": "Asiakkaat",
"items": "Tuotteet",
"invoices": "Laskut",
- "recurring-invoices": "Recurring Invoices",
+ "recurring-invoices": "Toistuvat laskut",
"expenses": "Kulut",
"estimates": "Tarjoukset",
"payments": "Maksut",
@@ -12,7 +12,7 @@
"settings": "Asetukset",
"logout": "Kirjaudu ulos",
"users": "Käyttäjät",
- "modules": "Modules"
+ "modules": "Moduulit"
},
"general": {
"add_company": "Lisää Yritys",
@@ -29,9 +29,9 @@
"to_date": "Päivään",
"from": "Lähettäjä",
"to": "Vastaanottaja",
- "ok": "Ok",
- "yes": "Yes",
- "no": "No",
+ "ok": "OK",
+ "yes": "Kyllä",
+ "no": "Ei",
"sort_by": "Järjestä",
"ascending": "Nouseva",
"descending": "Laskeva",
@@ -39,7 +39,7 @@
"body": "Sisältö",
"message": "Viesti",
"send": "Lähetä",
- "preview": "Preview",
+ "preview": "Esikatselu",
"go_back": "Palaa takaisin",
"back_to_login": "Takaisin sisäänkirjautumiseen?",
"home": "Koti",
@@ -65,7 +65,7 @@
"sent": "Lähetetty",
"all": "Kaikki",
"select_all": "Valitse kaikki",
- "select_template": "Select Template",
+ "select_template": "Valitse Malli",
"choose_file": "Klikkaa tästä valitaksesi tiedoston",
"choose_template": "Valitse pohja",
"choose": "Valitse",
@@ -76,7 +76,7 @@
"are_you_sure": "Oletko varma?",
"list_is_empty": "Lista on tyhjä.",
"no_tax_found": "Verokantoja ei löytynyt!",
- "four_zero_four": "404",
+ "four_zero_four": "404 - Sivua ei löydy",
"you_got_lost": "Oho! Taisit eksyä!",
"go_home": "Palaa kotisivulle",
"test_mail_conf": "Testi sähköposti asetukset",
@@ -92,12 +92,12 @@
"choose_note": "Valitse viesti",
"no_note_found": "Viestejä ei löytynyt",
"insert_note": "Lisää viesti",
- "copied_pdf_url_clipboard": "Copied PDF url to clipboard!",
- "copied_url_clipboard": "Copied url to clipboard!",
- "docs": "Docs",
- "do_you_wish_to_continue": "Do you wish to continue?",
- "note": "Note",
- "pay_invoice": "Pay Invoice",
+ "copied_pdf_url_clipboard": "Kopioitu PDF url leikepöydälle!",
+ "copied_url_clipboard": "URL-osoite kopioitu leikepöydälle!",
+ "docs": "Asiakirjat",
+ "do_you_wish_to_continue": "Haluatko jatkaa?",
+ "note": "Viesti",
+ "pay_invoice": "Maksa Lasku",
"login_successfully": "Logged in successfully!",
"logged_out_successfully": "Logged out successfully",
"mark_as_default": "Mark as default"
@@ -421,7 +421,7 @@
"select_invoice": "Valitse lasku",
"no_matching_invoices": "Vastaavia laskuja ei ole!",
"mark_as_sent_successfully": "Lasku merkitty lähetetyksi onnistuneesti",
- "invoice_sent_successfully": "Invoice sent successfully",
+ "invoice_sent_successfully": "Lasku lähetettiin onnistuneesti",
"cloned_successfully": "Lasku kopioitu onnistuneesti",
"clone_invoice": "Kopioi lasku",
"confirm_clone": "Tämä lasku kopioidaan uudeksi laskuksi",
@@ -447,57 +447,57 @@
"marked_as_sent_message": "Lasku merkittiin lähetetyksi onnistuneesti",
"something_went_wrong": "jotain meni vikaan",
"invalid_due_amount_message": "Laskun summa ei voi olla pienempi kuin maksettu summa laskusta. Päivitä lasku tai poista linkitetty maksusuoritus jatkaaksesi.",
- "mark_as_default_invoice_template_description": "If enabled, the selected template will be automatically selected for new invoices."
+ "mark_as_default_invoice_template_description": "Jos käytössä, valittu malli valitaan automaattisesti uusille laskuille."
},
"recurring_invoices": {
- "title": "Recurring Invoices",
- "invoices_list": "Recurring Invoices List",
- "days": "{days} Days",
- "months": "{months} Month",
- "years": "{years} Year",
- "all": "All",
- "paid": "Paid",
- "unpaid": "Unpaid",
- "viewed": "Viewed",
- "overdue": "Overdue",
- "active": "Active",
- "completed": "Completed",
- "customer": "CUSTOMER",
- "paid_status": "PAID STATUS",
- "ref_no": "REF NO.",
- "number": "NUMBER",
- "amount_due": "AMOUNT DUE",
- "partially_paid": "Partially Paid",
- "total": "Total",
- "discount": "Discount",
- "sub_total": "Sub Total",
- "invoice": "Recurring Invoice | Recurring Invoices",
- "invoice_number": "Recurring Invoice Number",
- "next_invoice_date": "Next Invoice Date",
- "ref_number": "Ref Number",
- "contact": "Contact",
- "add_item": "Add an Item",
- "date": "Date",
- "limit_by": "Limit by",
- "limit_date": "Limit Date",
- "limit_count": "Limit Count",
- "count": "Count",
- "status": "Status",
- "select_a_status": "Select a status",
- "working": "Working",
- "on_hold": "On Hold",
- "complete": "Completed",
- "add_tax": "Add Tax",
- "amount": "Amount",
- "action": "Action",
- "notes": "Notes",
- "view": "View",
- "basic_info": "Basic Info",
- "send_invoice": "Send Recurring Invoice",
- "auto_send": "Auto Send",
- "resend_invoice": "Resend Recurring Invoice",
- "invoice_template": "Recurring Invoice Template",
- "conversion_message": "Recurring Invoice cloned successful",
+ "title": "Toistuvat laskut",
+ "invoices_list": "Toistuvien laskujen luettelo",
+ "days": "{days} Päivät",
+ "months": "{months} Kuukaudet",
+ "years": "{years} Vuodet",
+ "all": "Kaikki",
+ "paid": "Maksettu",
+ "unpaid": "Maksamattomat",
+ "viewed": "Katsottu",
+ "overdue": "Erääntyneet",
+ "active": "Aktiivinen",
+ "completed": "Valmis",
+ "customer": "Asiakas",
+ "paid_status": "MAKSUN TILA",
+ "ref_no": "Viitteemme",
+ "number": "NUMERO",
+ "amount_due": "AVOIN SAATAVA",
+ "partially_paid": "Osittain maksettu",
+ "total": "Yhteensä",
+ "discount": "Alennus",
+ "sub_total": "Välisumma",
+ "invoice": "Toistuva Lasku - Toistuvat Laskut",
+ "invoice_number": "Toistuva Laskun Numero",
+ "next_invoice_date": "Seuraava Laskun Päivämäärä",
+ "ref_number": "Asiakkaan viite",
+ "contact": "Yhteyshenkilö",
+ "add_item": "Lisää tuote",
+ "date": "Päiväys",
+ "limit_by": "Rajoita",
+ "limit_date": "Rajoita Päivämäärä",
+ "limit_count": "Rajoita määrää",
+ "count": "Määrä",
+ "status": "Tila",
+ "select_a_status": "Valitse tila",
+ "working": "Käynnissä",
+ "on_hold": "Pidossa",
+ "complete": "Valmis",
+ "add_tax": "Lisää Verokanta",
+ "amount": "Määrä",
+ "action": "Toiminta",
+ "notes": "Viesti",
+ "view": "Katsele",
+ "basic_info": "Perustiedot",
+ "send_invoice": "Lähetä Toistuva Lasku",
+ "auto_send": "Automaattinen Lähetys",
+ "resend_invoice": "Lähetä Uudelleen Toistuva Lasku",
+ "invoice_template": "Toistuva Laskun Malli",
+ "conversion_message": "Toistuva lasku kopioitu onnistuneesti",
"template": "Template",
"mark_as_sent": "Mark as sent",
"confirm_send_invoice": "This recurring invoice will be sent via email to the customer",
@@ -553,11 +553,11 @@
"confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices",
"created_message": "Recurring Invoice created successfully",
"updated_message": "Recurring Invoice updated successfully",
- "deleted_message": "Recurring Invoice deleted successfully | Recurring Invoices deleted successfully",
- "marked_as_sent_message": "Recurring Invoice marked as sent successfully",
- "user_email_does_not_exist": "User email does not exist",
- "something_went_wrong": "something went wrong",
- "invalid_due_amount_message": "Total Recurring Invoice amount cannot be less than total paid amount for this Recurring Invoice. Please update the invoice or delete the associated payments to continue."
+ "deleted_message": "Toistuva lasku poistettiin onnistuneesti. Toistuvien laskujen poistaminen onnistui",
+ "marked_as_sent_message": "Toistuva lasku merkitty lähetetyksi onnistuneesti",
+ "user_email_does_not_exist": "Käyttäjän sähköposti ei ole määritetty",
+ "something_went_wrong": "jotain meni vikaan",
+ "invalid_due_amount_message": "Toistuvan laskun kokonaissumma ei voi olla pienempi kuin tälle toistuvalle laskulle maksettu summa. Päivitä lasku tai poista niihin liittyvät maksut jatkaaksesi."
},
"payments": {
"title": "Maksut",
@@ -582,8 +582,8 @@
"update_payment": "Päivitä maksu",
"payment": "Maksu | Maksut",
"no_payments": "Ei tallennettuja maksuja!",
- "not_selected": "Not selected",
- "no_invoice": "No invoice",
+ "not_selected": "Ei valittu",
+ "no_invoice": "Ei laskua",
"no_matching_payments": "Vastaavia maksuja ei ole!",
"list_of_payments": "Tämä osio sisältää luettelon maksuista.",
"select_payment_mode": "Valitse maksutapa",
@@ -603,7 +603,7 @@
"select_a_customer": "Valitse asiakas",
"expense_title": "Otsikko",
"customer": "Asiakas",
- "currency": "Currency",
+ "currency": "Valuutta",
"contact": "Yhteyshenkilö",
"category": "Luokka",
"from_date": "Päivästä",
@@ -613,7 +613,7 @@
"receipt": "Kuitti",
"amount": "Summa",
"action": "Toiminta",
- "not_selected": "Not selected",
+ "not_selected": "Ei valittu",
"note": "viesti",
"category_id": "Luokan tunnus",
"date": "Päivämäärä",
@@ -658,48 +658,48 @@
"retype_password": "Kirjoita salasana uudelleen"
},
"modules": {
- "buy_now": "Buy Now",
- "install": "Install",
- "price": "Price",
- "download_zip_file": "Download ZIP file",
- "unzipping_package": "Unzipping Package",
- "copying_files": "Copying Files",
- "deleting_files": "Deleting Unused files",
- "completing_installation": "Completing Installation",
- "update_failed": "Update Failed",
- "install_success": "Module has been installed successfully!",
- "customer_reviews": "Reviews",
- "license": "License",
- "faq": "FAQ",
- "monthly": "Monthly",
- "yearly": "Yearly",
- "updated": "Updated",
- "version": "Version",
- "disable": "Disable",
- "module_disabled": "Module Disabled",
- "enable": "Enable",
- "module_enabled": "Module Enabled",
- "update_to": "Update To",
- "module_updated": "Module Updated Successfully!",
- "title": "Modules",
- "module": "Module | Modules",
- "api_token": "API token",
- "invalid_api_token": "Invalid API Token.",
- "other_modules": "Other Modules",
- "view_all": "View All",
- "no_reviews_found": "There are no reviews for this module yet!",
- "module_not_purchased": "Module Not Purchased",
- "module_not_found": "Module Not Found",
+ "buy_now": "Osta Nyt",
+ "install": "Asenna",
+ "price": "Hinta",
+ "download_zip_file": "Lataa ZIP tiedosto",
+ "unzipping_package": "Puretaan pakettia",
+ "copying_files": "Kopioidaan tiedostoja",
+ "deleting_files": "Käyttämättömiä tiedostoja poistetaan",
+ "completing_installation": "Viimeistellään Asennusta",
+ "update_failed": "Päivitys epäonnistui",
+ "install_success": "Moduuli on asennettu onnistuneesti!",
+ "customer_reviews": "Arvostelut",
+ "license": "Lisenssi",
+ "faq": "UKK",
+ "monthly": "Kuukausittain",
+ "yearly": "Vuosittain",
+ "updated": "Päivitetty",
+ "version": "Versio",
+ "disable": "Poista käytöstä",
+ "module_disabled": "Moduuli poistettu käytöstä",
+ "enable": "Ota käyttöön",
+ "module_enabled": "Moduuli on käytössä",
+ "update_to": "Päivitä ohjelma",
+ "module_updated": "Moduulin päivitys onnistui!",
+ "title": "Moduulit",
+ "module": "Moduuli · Moduulit",
+ "api_token": "API tunnus",
+ "invalid_api_token": "Virheellinen API-tunnus.",
+ "other_modules": "Muut Moduulit",
+ "view_all": "Näytä kaikki",
+ "no_reviews_found": "Tällä modulilla ei ole vielä arvosteluita!",
+ "module_not_purchased": "Moduulia ei ostettu",
+ "module_not_found": "Moduulia ei löydy",
"version_not_supported": "This module version doesn't support the current version of Crater",
- "last_updated": "Last Updated On",
- "connect_installation": "Connect your installation",
- "api_token_description": "Login to {url} and connect this installation by entering the API Token. Your purchased modules will show up here after the connection is established.",
- "view_module": "View Module",
- "update_available": "Update Available",
- "purchased": "Purchased",
- "installed": "Installed",
- "no_modules_installed": "No Modules Installed Yet!",
- "disable_warning": "All the settings for this particular will be reverted.",
+ "last_updated": "Viimeksi päivitetty",
+ "connect_installation": "Yhdistä asennuksesi",
+ "api_token_description": "Kirjaudu sisään {url} ja yhdistä tämä asennus syöttämällä API tunnus. Ostetut moduulit näkyvät täällä kun yhteys on luotu.",
+ "view_module": "Näytä Moduuli",
+ "update_available": "Päivitys saatavilla",
+ "purchased": "Ostetut",
+ "installed": "Asennetut",
+ "no_modules_installed": "Ei Asennettuja Moduuleja!",
+ "disable_warning": "Kaikki tämän nimenomaisen asetuksen tiedot peruutetaan.",
"what_you_get": "What you get"
},
"users": {
diff --git a/resources/scripts/locales/it.json b/resources/scripts/locales/it.json
index 767abd42..30ae05d4 100644
--- a/resources/scripts/locales/it.json
+++ b/resources/scripts/locales/it.json
@@ -526,7 +526,7 @@
"cloned_successfully": "Fattura copiata con successo",
"clone_invoice": "Duplica Fattura Ricorrente",
"confirm_clone": "Questa fattura ricorrente verrà clonata in una nuova fattura ricorrente",
- "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
+ "add_customer_email": "Inserisci una E-Mail per inviare automaticamente fatture al cliente.",
"item": {
"title": "Titolo Articolo",
"description": "Descrizione",
diff --git a/resources/scripts/locales/vi.json b/resources/scripts/locales/vi.json
index a7cb1a3a..3cf5054a 100644
--- a/resources/scripts/locales/vi.json
+++ b/resources/scripts/locales/vi.json
@@ -526,7 +526,7 @@
"cloned_successfully": "Recurring Invoice cloned successfully",
"clone_invoice": "Clone Recurring Invoice",
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
- "add_customer_email": "Please add an email address for this customer to send invoices automatically.",
+ "add_customer_email": "Thêm một địa chỉ email cho khách hàng này để gửi hóa đơn tự động.",
"item": {
"title": "Item Title",
"description": "Description",