From b30bd01d25d7fb3d695ef993ae5978260077d771 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 15 Jul 2020 09:16:05 +0100 Subject: [PATCH 01/11] Initial bellem setup --- packages/admin-web-angular/scripts/env.ts | 4 +- .../file-uploader/file-uploader.component.ts | 2 +- .../basic-info/basic-info-form.component.ts | 17 +- .../is-available-checkbox.component.ts | 1 + .../warehouse-manage-tabs.component.ts | 7 +- .../components/footer/footer.component.html | 10 - .../theme-settings.component.html | 3 +- .../theme-settings.component.ts | 30 +- .../pages/+dashboard/dashboard.component.html | 12 +- .../order-products.component.html | 2 +- .../+products/+product/product.component.ts | 10 +- .../pages/+server-down/server-down.page.ts | 2 +- .../src/app/pages/pages.component.ts | 6 + .../src/assets/i18n/en-US.json | 8 +- .../admin-web-angular/src/assets/i18n/en.json | 3 +- .../src/assets/i18n/fr-FR.json | 1133 +++++++++++++++ .../admin-web-angular/src/assets/i18n/fr.json | 943 ++++++++++++- packages/admin-web-angular/src/favicon.ico | Bin 15086 -> 30930 bytes packages/admin-web-angular/src/favicon.png | Bin 421 -> 803 bytes .../admin-web-angular/src/favicon16x16.png | Bin 421 -> 803 bytes .../admin-web-angular/src/favicon32x32.png | Bin 655 -> 1807 bytes .../admin-web-angular/src/favicon48x48.png | Bin 875 -> 3040 bytes packages/admin-web-angular/src/index.html | 8 +- .../src/routers/order-router.service.ts | 11 + .../src/routers/user-router.service.ts | 7 - packages/common/src/entities/Order.ts | 84 +- packages/common/src/interfaces/ILanguage.ts | 12 +- packages/common/src/routers/IOrderRouter.ts | 2 + packages/core/package.json | 2 +- .../core/res/templates/about_us/en-US.hbs | 13 +- .../core/res/templates/about_us/fr-FR.hbs | 70 + packages/core/res/templates/privacy/fr-FR.hbs | 25 + .../core/res/templates/terms_of_use/fr-FR.hbs | 1242 +++++++++++++++++ .../templates/user_products_placeholder.json | 12 +- packages/core/res/views/about_us_fr.hbs | 1 + packages/core/res/views/index.hbs | 6 +- packages/core/res/views/layouts/main.hbs | 13 +- packages/core/res/views/privacy_fr.hbs | 1 + packages/core/res/views/terms_of_use_fr.hbs | 1 + packages/core/src/env.ts | 12 +- .../core/src/graphql/orders/order.resolver.ts | 7 + .../invites/InvitesRequestsService.ts | 37 +- .../core/src/services/orders/OrdersService.ts | 86 +- .../core/src/services/users/UsersService.ts | 11 +- 44 files changed, 3595 insertions(+), 261 deletions(-) create mode 100644 packages/admin-web-angular/src/assets/i18n/fr-FR.json create mode 100644 packages/core/res/templates/about_us/fr-FR.hbs create mode 100644 packages/core/res/templates/privacy/fr-FR.hbs create mode 100644 packages/core/res/templates/terms_of_use/fr-FR.hbs create mode 100644 packages/core/res/views/about_us_fr.hbs create mode 100644 packages/core/res/views/privacy_fr.hbs create mode 100644 packages/core/res/views/terms_of_use_fr.hbs diff --git a/packages/admin-web-angular/scripts/env.ts b/packages/admin-web-angular/scripts/env.ts index 65742ecdb..e87634a76 100644 --- a/packages/admin-web-angular/scripts/env.ts +++ b/packages/admin-web-angular/scripts/env.ts @@ -62,8 +62,8 @@ export const env: Env = cleanEnv( GOOGLE_MAPS_API_KEY: str({ default: '' }), - DEFAULT_LATITUDE: num({ default: 42.6459136 }), - DEFAULT_LONGITUDE: num({ default: 23.3332736 }), + DEFAULT_LATITUDE: num({ default: 4.0850277 }), + DEFAULT_LONGITUDE: num({ default: 9.7535913 }), NO_INTERNET_LOGO: str({ default: 'assets/images/ever-logo.svg' }), diff --git a/packages/admin-web-angular/src/app/@shared/file-uploader/file-uploader.component.ts b/packages/admin-web-angular/src/app/@shared/file-uploader/file-uploader.component.ts index 777abe1b2..da1072e33 100644 --- a/packages/admin-web-angular/src/app/@shared/file-uploader/file-uploader.component.ts +++ b/packages/admin-web-angular/src/app/@shared/file-uploader/file-uploader.component.ts @@ -111,7 +111,7 @@ export class FileUploaderComponent { fileItem: any, form: FormData ): any => { - form.append('upload_preset', 'everbie-products-images'); + form.append('upload_preset', 'upload_preset'); let tags = 'myphotoalbum'; diff --git a/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts b/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts index d652327bd..92b55a1b4 100644 --- a/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts +++ b/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts @@ -74,23 +74,14 @@ export class BasicInfoFormComponent implements OnInit, AfterViewInit { get usedLanguage() { const usedLanguage = this._langTranslateService.currentLang; switch (usedLanguage) { + case 'fr-Fr': + return 'fr-FR'; + case 'en-US': return 'en-US'; - case 'bg-BG': - return 'bg-BG'; - - case 'he-IL': - return 'he-IL'; - - case 'ru-RU': - return 'ru-RU'; - - case 'es-ES': - return 'es-ES'; - default: - return 'en-US'; + return 'fr-FR'; } } diff --git a/packages/admin-web-angular/src/app/@shared/render-component/store-product-is-available-checkbox/is-available-checkbox.component.ts b/packages/admin-web-angular/src/app/@shared/render-component/store-product-is-available-checkbox/is-available-checkbox.component.ts index fff43c057..3b43e9972 100644 --- a/packages/admin-web-angular/src/app/@shared/render-component/store-product-is-available-checkbox/is-available-checkbox.component.ts +++ b/packages/admin-web-angular/src/app/@shared/render-component/store-product-is-available-checkbox/is-available-checkbox.component.ts @@ -35,6 +35,7 @@ export class IsAvailableCheckBox implements ViewCell, OnInit { this.isChecked = this.rowData.isProductAvailable; this.wareHouseId = this.rowData.storeId; this.productId = this.rowData.product.id; + console.warn(this.rowData); } async clickHandler() { diff --git a/packages/admin-web-angular/src/app/@shared/warehouse/forms/warehouse-manage-tabs/warehouse-manage-tabs.component.ts b/packages/admin-web-angular/src/app/@shared/warehouse/forms/warehouse-manage-tabs/warehouse-manage-tabs.component.ts index 1f87b7a38..c0a4a65f6 100644 --- a/packages/admin-web-angular/src/app/@shared/warehouse/forms/warehouse-manage-tabs/warehouse-manage-tabs.component.ts +++ b/packages/admin-web-angular/src/app/@shared/warehouse/forms/warehouse-manage-tabs/warehouse-manage-tabs.component.ts @@ -85,7 +85,12 @@ export class WarehouseManageTabsComponent { } get validForm() { - return this.form.valid && this.paymentsSettingsForm.isPaymentValid; + return ( + this.form.valid && + this.contactInfoForm.validForm && + this.paymentsSettingsForm.isPaymentValid && + this.paymentsSettingsForm.isCashPaymentEnabled + ); } get deliveryAreas() { diff --git a/packages/admin-web-angular/src/app/@theme/components/footer/footer.component.html b/packages/admin-web-angular/src/app/@theme/components/footer/footer.component.html index bf03cc487..bed9c2564 100644 --- a/packages/admin-web-angular/src/app/@theme/components/footer/footer.component.html +++ b/packages/admin-web-angular/src/app/@theme/components/footer/footer.component.html @@ -7,21 +7,11 @@ >. {{ 'FOOTER_VIEW.ALL_RIGHTS_RESERVED' | translate }}.
- - LANGUAGE {{ lang.name }} -
+ diff --git a/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts b/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts index be8ab55c0..493c013dc 100644 --- a/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts +++ b/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts @@ -15,24 +15,12 @@ export class ThemeSettingsComponent { languages = [ { - value: 'en-US', - name: 'English', - }, - { - value: 'bg-BG', - name: 'Bulgarian', - }, - { - value: 'he-IL', - name: 'Hebrew', - }, - { - value: 'ru-RU', - name: 'Russian', + value: 'fr-FR', + name: 'Francais', }, { - value: 'es-ES', - name: 'Spanish', + value: 'en-US', + name: 'English', }, ]; @@ -64,7 +52,7 @@ export class ThemeSettingsComponent { ]; currentTheme = 'everlight'; - defaultLanguage = ''; + defaultLanguage = 'fr-FR'; constructor( protected stateService: StateService, @@ -73,17 +61,15 @@ export class ThemeSettingsComponent { ) { this.defaultLanguage = environment['DEFAULT_LANGUAGE']; - translate.addLangs(['en-US', 'bg-BG', 'he-IL', 'ru-RU', 'es-ES']); - translate.setDefaultLang('en-US'); + translate.addLangs(['en-US', 'fr-FR']); + translate.setDefaultLang('fr-FR'); const browserLang = translate.getBrowserLang(); if (this.defaultLanguage) { translate.use(this.defaultLanguage); } else { translate.use( - browserLang.match(/en-US|bg-BG|he-IL|ru-RU|es-ES/) - ? browserLang - : 'en-US' + browserLang.match(/fr-FR|en-US/) ? browserLang : 'fr-FR' ); } diff --git a/packages/admin-web-angular/src/app/pages/+dashboard/dashboard.component.html b/packages/admin-web-angular/src/app/pages/+dashboard/dashboard.component.html index 4a614c8fe..5f2306b4f 100644 --- a/packages/admin-web-angular/src/app/pages/+dashboard/dashboard.component.html +++ b/packages/admin-web-angular/src/app/pages/+dashboard/dashboard.component.html @@ -81,7 +81,7 @@

: '' " > - ${{ + XAF{{ totalInfo.revenue | myNumberWithCommas }} @@ -216,7 +216,7 @@

: '' " > - ${{ + XAF{{ todayInfo.revenue | myNumberWithCommas }} @@ -259,7 +259,8 @@

+ > + @@ -267,7 +268,8 @@

+ (selectedStoreEmitter)="onSelectStore(XAFevent)" + > +
diff --git a/packages/admin-web-angular/src/app/pages/+orders/+order/order-products/order-products.component.html b/packages/admin-web-angular/src/app/pages/+orders/+order/order-products/order-products.component.html index c732161a8..7d8a179df 100644 --- a/packages/admin-web-angular/src/app/pages/+orders/+order/order-products/order-products.component.html +++ b/packages/admin-web-angular/src/app/pages/+orders/+order/order-products/order-products.component.html @@ -66,7 +66,7 @@

{{ - 'ORDER_VIEW.ORDER_PRODUCT_INFO.THE_ORDER_IS_CANCELED' + 'ORDER_VIEW.ORDER_PRODUCT_INFO.THE_ORDER_IS_CANCEL' | translate }}

diff --git a/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts b/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts index 463084f88..0a70789a3 100644 --- a/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts +++ b/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts @@ -60,16 +60,10 @@ export class ProductComponent implements OnInit, OnDestroy { getLanguageFullName(langAbbreviation: string) { switch (langAbbreviation) { + case 'fr-FR': + return 'Francais'; case 'en-US': return 'English'; - case 'bg-BG': - return 'Български'; - case 'he-IL': - return 'עברית'; - case 'ru-RU': - return 'Русский'; - case 'es-ES': - return 'Spanish'; } } diff --git a/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts b/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts index bc22553dc..16a956891 100644 --- a/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts +++ b/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts @@ -22,7 +22,7 @@ export class ServerDownPage implements OnDestroy { private serverConnectionService: ServerConnectionService ) { const browserLang = translate.getBrowserLang(); - translate.use(browserLang.match(/en|bg|he|ru/) ? browserLang : 'en-US'); + translate.use(browserLang.match(/en|fr/) ? browserLang : 'fr-FR'); this.noInternetLogo = environment['NO_INTERNET_LOGO']; this.testConnection(); diff --git a/packages/admin-web-angular/src/app/pages/pages.component.ts b/packages/admin-web-angular/src/app/pages/pages.component.ts index addbd9605..abc3d8d44 100644 --- a/packages/admin-web-angular/src/app/pages/pages.component.ts +++ b/packages/admin-web-angular/src/app/pages/pages.component.ts @@ -23,6 +23,12 @@ export class PagesComponent { link: '/dashboard', pathMatch: 'prefix', }, + { + title: this.getTranslation('MENU_VIEW.ORDERS'), + icon: 'shopping-bag-outline', + link: '/orders', + pathMatch: 'prefix', + }, { title: this.getTranslation('MENU_VIEW.STORES'), icon: 'home-outline', diff --git a/packages/admin-web-angular/src/assets/i18n/en-US.json b/packages/admin-web-angular/src/assets/i18n/en-US.json index d3098a5a5..36a4a6935 100644 --- a/packages/admin-web-angular/src/assets/i18n/en-US.json +++ b/packages/admin-web-angular/src/assets/i18n/en-US.json @@ -17,7 +17,7 @@ "ADD_PRODUCTS": "Add products", "REMOVE_PRODUCTS": "Remove Products", "CANCEL_ORDER": "Cancel Order", - "THE_ORDER_IS_CANCELED": "The order is canceled", + "THE_ORDER_IS_CANCEL": "The order is cancel", "THE_ORDER_IS_GIVEN_TO_CARRIER": "The order is given to carrier.", "THE_ORDER_IS_DELIVERED": "The order is delivered.", "ADD_PRODUCTS_MODAL": "Add Products", @@ -118,12 +118,12 @@ }, "HEADER_VIEW": { "ADMIN": "Admin", - "EVER": "Ever", + "EVER": "Bellem", "PROFILE": "Profile", "LOG_OUT": "Log out" }, "FOOTER_VIEW": { - "COPY_RIGHT": "Copyright © 2016-present", + "COPY_RIGHT": "Copyright © 2020", "ALL_RIGHTS_RESERVED": "All rights reserved" }, "PROFILE_VIEW": { @@ -1001,6 +1001,7 @@ }, "MENU_VIEW": { "DASHBOARD": "Dashboard", + "ORDERS": "Orders", "STORES": "Stores", "PRODUCTS": { "PRODUCTS": "Products", @@ -1126,6 +1127,7 @@ "LANGUAGE": "Language", "BROWSE": "Browse", "ENGLISH": "English", + "FRENCH": "French", "HEBREW": "Hebrew", "RUSSIAN": "Russian", "BULGARIAN": "Bulgarian", diff --git a/packages/admin-web-angular/src/assets/i18n/en.json b/packages/admin-web-angular/src/assets/i18n/en.json index d3098a5a5..75797b184 100644 --- a/packages/admin-web-angular/src/assets/i18n/en.json +++ b/packages/admin-web-angular/src/assets/i18n/en.json @@ -17,7 +17,7 @@ "ADD_PRODUCTS": "Add products", "REMOVE_PRODUCTS": "Remove Products", "CANCEL_ORDER": "Cancel Order", - "THE_ORDER_IS_CANCELED": "The order is canceled", + "THE_ORDER_IS_CANCEL": "The order is cancel", "THE_ORDER_IS_GIVEN_TO_CARRIER": "The order is given to carrier.", "THE_ORDER_IS_DELIVERED": "The order is delivered.", "ADD_PRODUCTS_MODAL": "Add Products", @@ -1126,6 +1126,7 @@ "LANGUAGE": "Language", "BROWSE": "Browse", "ENGLISH": "English", + "FRENCH": "French", "HEBREW": "Hebrew", "RUSSIAN": "Russian", "BULGARIAN": "Bulgarian", diff --git a/packages/admin-web-angular/src/assets/i18n/fr-FR.json b/packages/admin-web-angular/src/assets/i18n/fr-FR.json new file mode 100644 index 000000000..af97e9ee6 --- /dev/null +++ b/packages/admin-web-angular/src/assets/i18n/fr-FR.json @@ -0,0 +1,1133 @@ +{ + "COMMON": { + "SAVE": "Sauvegarder", + "CANCEL": "Annuler", + "USA": "Etats-Unis", + "ISRAEL": "Israël", + "BULGARIA": "Bulgarie" + }, + "ORDER_VIEW": { + "ORDER_HEADER_INFO": { + "ORDER": "Commandes", + "MANAGE_ORDER": "Gérer les commandes ", + "TOTAL": "Total" + }, + "ORDER_PRODUCT_INFO": { + "ORDER_PRODUCTS": "Commannder des produits", + "ADD_PRODUCTS": "Ajouter un produit", + "REMOVE_PRODUCTS": "Supprimer des produits", + "CANCEL_ORDER": "annuler la commande", + "THE_ORDER_IS_CANCEL": "La commande est annulée", + "THE_ORDER_IS_GIVEN_TO_CARRIER": "La commande est remise au transporteur.", + "THE_ORDER_IS_DELIVERED": "La commande est livrée.", + "ADD_PRODUCTS_MODAL": "Ajouter des produits", + "ADD": "Ajouter", + "SUCCESS_TOAST": "Des produits ont été ajoutés à la commande", + "ERROR_TOAST": "Erreur, quelque chose s'est mal passé", + "SMART_TABLE": { + "NAME": "Nom", + "QTY": "QTE", + "PRICE": "Prix", + "IMAGE": "Image" + } + }, + "ORDER_SIDEBAR": { + "CONTACT_DETAILS": "Détails du contact", + "WAREHOUSE": "Entrepôt", + "CUSTOMER": "Client", + "CARRIER": "Transporteur", + "QTY": "qté" + }, + "LOCATION_INFO": { + "MAP": "Carte", + "DELIVERY_DISTANCE": "Distance de livraison:" + } + }, + "DASHBOARD_VIEW": { + "TOTAL_CUSTOMER": "Nombre total de clients", + "TOTAL_QUANTITY_OF_EXISTING_CUSTOMERS": "Quantité totale de clients existants", + "TOTAL_COMPLETED_ORDERS": "Total des commandes terminées", + "TOTAL_QUANTITY_OF_COMPLETED_ORDERS": "Quantité totale de commandes terminées", + "TOTAL_REVENUE": "Revenu total", + "TOTAL_SUM_SUM_OF_ALL_COMPLETED_ORDERS": "Somme totale de toutes les commandes terminées", + "TODAYs_CUSTOMERS": "Les clients d'aujourd'hui", + "TODAYs_QUANTITY_OF_REGISTERED_CUSTOMERS": "Nombre de clients enregistrés aujourd'hui", + "TODAYs_COMPLETED_ORDERS": "Commandes passées aujourd'hui", + "TODAYs_QUANTITY_OF_NEW_COMPLETED_ORDERS": "Commandes passées aujourd'hui", + "TODAYs_REVENUE": "Le revenu d'aujourd'hui", + "TODAYs_SUM_OF_COMPLETED_ORDERS": "Somme des commandes terminées d'aujourd'hui", + "TILL_AVERAGE": "jusqu'à la moyenne", + "BETTER_THAN_AVERAGE": "mieux que la moyenne", + "SELECT_COMPONENT": { + "STORES": "Magasins", + "CONTACT_DETAILS": "Détails du contact", + "PHONE": "Téléphone", + "EMAIL": "Email", + "ORDERS_FORWARDING_WITH": "Transfert de commandes avec", + "SELECT_STORE": "Sélectionnez un magasin" + }, + "CHARTS": { + "ORDERS": "Commandes", + "PROFIT": "Profit", + "TOTAL_ORDERS": "Total des commandes", + "TOTAL_COMPLETED_ORDERS": "Total des commandes terminées", + "TOTAL_CANCELLED_ORDERS": "Total des commandes annulées", + "TOTAL_REVENUE_ALL_ORDERS": "Revenu total de toutes les commandes", + "TOTAL_REVENUE_COMPLETED_ORDERS": "Total des revenus perdus des commandes annulées", + "TOTAL_LOST_REVENUE_CANCELLED_ORDERS": "Total des revenus perdus des commandes annulées", + "PAYMENT": "Paiement", + "CANCELED": "Annulé", + "ALL_ORDERS": "Tous les ordres", + "TODAY": "Aujourd'hui", + "LAST_WEEK": "La semaine dernière", + "LAST_MONTH": "Le mois dernier", + "CURRENT_YEAR": "Année actuelle", + "YEARS": "Par année", + "CUSTOM_PERIOD": "Période personnalisée", + "SELECT_PERIOD": "Sélectionnez la période", + "FROM": "De", + "TO": "À", + "SELECT": "Sélectionner", + "LABELS": { + "WEEK": "Semaine", + "WEEKDAYS": { + "MON": "Lun", + "TUE": "Mar", + "WED": "Mer", + "THU": "Jeu", + "FRI": "Ven", + "SAT": "Sam", + "SUN": "Dim" + }, + "MONTHS": { + "JAN": "Jan", + "FEB": "Fev", + "MAR": "Mar", + "APR": "Avr", + "MAY": "Mai", + "JUN": "Jun", + "JUL": "Jul", + "AUG": "Aout", + "SEP": "Sept", + "OCT": "Oct", + "NOV": "Nov", + "DEC": "Dec" + } + } + } + }, + "HEADER_VIEW": { + "ADMIN": "Admin", + "EVER": "Bellem", + "PROFILE": "Profil", + "LOG_OUT": "Se déconnecter" + }, + "FOOTER_VIEW": { + "COPY_RIGHT": "Copyright ©", + "ALL_RIGHTS_RESERVED": "Tous les droits sont réservés" + }, + "PROFILE_VIEW": { + "PROFILE_PAGE": "Page de profil", + "BASIC_INFO": "Informations de base", + "ACCOUNT": "Compte", + "USERNAME": "Nom d'utilisateur", + "ERROR": "Erreur", + "EMAIL": "Email", + "FIRST_NAME": "Prénom", + "FIRST_NAME_OPTIONAL": "Prénom (facultatif)", + "LAST_NAME": "Nom (facultatif)", + "PICTURE_URL": "URL de l'image (facultatif)", + "BROWSE": "Regarder", + "REMOVE": "supprimer", + "SAVE": "Save", + "OLD_PASSWORD": "Ancien mot de passe", + "NEW_PASSWORD": "Nouveau mot de passe", + "REPEAT_NEW_PASSWORD": "Répété le nouveau mot de passe", + "INVALID_EMAIL_ADDRESS": "Adresse e-mail invalide", + "INVALID_URL": "URL invalide", + "NAME_MUST_CONTAIN_ONLY_LETTERS": "Le nom ne doit contenir que des lettres", + "PASSWORDS_DO_NOT_MATCH": "Les mots de passe ne correspondent pas", + "SUCCESSFULLY_CHANGE_PASSWORD": "Changer le mot de passe avec succès" + }, + "PRODUCTS_VIEW": { + "DELETE": "SUPPRIMER", + "CREATE": "CRÉER", + "EDIT_VIEW": { + "EDIT_PRODUCT": "Modifier le produit", + "BASIC_INFO": "Informations de base", + "SAVE": "sauvegarder" + } + }, + "WAREHOUSE_MANAGE": { + "TITLE": "Gérer l'entrepôt", + "MANAGE_STORE": "Gérer le magasin", + "SAVE": "ENREGISTRER", + "NAME": "Prénom", + "USERNAME": "Nom d'utilisateur", + "PASSWORD": "Mot de passe", + "COUNTRY": "Pays", + "CITY": "Ville", + "POSTCODE": "Code postal", + "IS_ACTIVE": "C'est actif", + "PRODUCTS_MANUFACTURING": "Fabrication de produits", + "CARRIER_REQUIRED": "Transporteur requis", + "ADDRESS": "Adresse", + "RIGHT_NOW": "(maintenant)", + "CARRIERS": "Les transporteurs", + "CARRIERS_SPECIFIC": "N'utilisez que des transporteurs spécifiques", + "VALIDATION": { + "NAME": "Le nom est requis", + "USERNAME": "Nom d'utilisateur est nécessaire", + "PASSWORD": "Mot de passe requis", + "COUNTRY": "Pays requis", + "CITY": "La ville est requise", + "STREET": "La rue est requise", + "HOUSE": "Le numéro de maison est requis", + "POSTCODE": "Code postal requis" + }, + "WIZARD_TITLES": { + "DETAILS": "Details", + "ACCOUNT": "Compte", + "CONTACT_INFO": "Contact Info", + "LOCATION": "Localisation", + "DELIVERY_ZONES": "Zones de livraison" + } + }, + "WAREHOUSES_VIEW": { + "TITLE": "Entrepôts", + "DELETE_WAREHOUSES": "Supprimer la Sélection", + "DELETE": "SUPPRIMER", + "CREATE": "CREER", + "SMART_TABLE_COLUMNS": { + "IMAGE": "Image", + "NAME": "Prénom", + "EMAIL": "Email", + "PHONE": "Téléphone", + "CITY": "Ville", + "ADDRESS": "Adresse", + "ORDERS_QTY": "Commandes quantité", + "ORDERS": "Commandes" + }, + "INFO": { + "STORE_INFO": "Info de la Boutique", + "STORE_ID": "ID Boutique", + "STORE_NAME": "Nom de la boutique" + } + }, + "WAREHOUSE_VIEW": { + "ORDER": { + "CONFIRM": "Confirmer", + "START_PROCESSING": "Commencer le traitement", + "START_ALLOCATION": " Commencer le traitement", + "ALLOCATED": "Alloué", + "ALLOCATION_FAILS": "Échec de l'allocation", + "START_PACKAGING": "Commencer l'emballage", + "PACKAGED": "Emballé", + "PACKAGING_FAILS": "l'emballage échouée", + "GIVEN_TO_CARRIER": "Donné au client", + "GIVEN_TO_CUSTOMER": "Donné au client", + "ORDER": "Commande", + "CANT_PROCESSING_WITHOUT_PRODUCTS": "Impossible de traiter la commande sans les produits." + }, + "MUTATION": { + "TITLE": "Créer un nouvel entrepôt", + "NAME": "Prénom", + "LOGO": "Logo", + "PHOTO": "Photo", + "IS_ACTIVE": "C'est actif", + "PRODUCTS_MANUFACTURING": "Fabrication de produits", + "CARRIER_REQUIRED": "Transporteur requis", + "RIGHT_NOW": "Maintenant", + "PHONE": "Téléphone", + "EMAIL": "Email", + "ORDERS_PHONE": "Téléphone de la Commande", + "CONTACT_PHONE": "Téléphone", + "ORDERS_EMAIL": "Email de la Commande", + "CONTACT_EMAIL": "Email", + "FORWARD_ORDERS_WITH": "Commandes à terme avec", + "USERNAME": "Nom d'utilisateur", + "OLD_PASSWORD": "Ancien Mot de Passe", + "NEW_PASSWORD": "Nouveau Mot de Passe", + "CONFIRM_PASSWORD": "Confirmation du Mot de passe", + "PASSWORDS_DO_NOT_MATCH": "Les mots de passe ne correspondent pas", + "PASSWORD": "Mot de passe", + "COUNTRY": "Pays", + "USA": "Etats-Unis", + "ISRAEL": "Israël", + "BULGARIA": "Bulgarie", + "CITY": "Ville", + "ADDRESS": "Adresse", + "POSTCODE": "Code postal", + "COORDINATES": "Coordonnées", + "AUTO_DETECT_COORDINATES": "Détection automatique des coordonnées", + "CARRIERS": "Les transporteurs", + "USE_ONLY_SPECIFIC_CARRIERS": "N'utilisez que des transporteurs spécifiques", + "ERRORS": { + "NAME_IS_REQUIRED": "Le nom de l'entrepôt est requis", + "NAME_ATLEAST_3_CHARS": "Le nom doit comporter au moins 3 caractères", + "NAME_MORE_THAN_255_CHARS": "Le nom ne peut pas comporter plus de 255 caractères", + "LOGO_IS_REQUIRED": "Le logo est requis", + "INVALID_URL": "Entrez une URL d'image valide ou recherchez un fichier", + "PHONE_CONTAINS_ONLY_DIGIT": "Le numéro de téléphone doit contenir uniquement un chiffre", + "INVALID_EMAIL": "Email Invalide", + "ORDERS_PHONE_IS_REQUIRED": "Orders Phone is required", + "CONTACT_PHONE_IS_REQUIRED": "Contact Phone is required", + "ORDERS_EMAIL_IS_REQUIRED": "Orders Email is required", + "CONTACT_EMAIL_IS_REQUIRED": "Contact Email is required", + "USERNAME_IS_REQUIRED": "Nom d'utilisateur est nécessaire", + "PASSWORD_IS_REQUIRED": "Mot de passe requis", + "COORDINATES_ARE_REQUIRED": "Les coordonnées sont obligatoires", + "COUNTRY_IS_REQUIRED": "Pays requis" + }, + "WIZARD_TITLES": { + "BASIC_INFO": "Informations de base", + "CONTACT_INFO": "Informations de contact", + "LOCATION": "Emplacement", + "DELIVERY_ZONES": "Zones de livraison" + }, + "CONTACT_INFO_TAB": { + "ORDER_FORWARDING_EMAIL": "Email de transfert de commande", + "ORDER_FORWARDING_PHONE": "Téléphone de transfert de commande" + } + }, + "NEW_PRODUCT": { + "SELECT_FROM_PRODUCTS_CATALOG": "Sélectionnez dans le catalogue de produits", + "CREATE_NEW_PRODUCT": "Créer un nouveau produit", + "HOW_TO_ADD": "Comment ajouter", + "ADD": "Ajouter", + "SAVE": "Sauvegarder", + "ADD_PRODUCTS_TO_STORE": "Ajouter des produits au magasin", + "NOTHING_FOUND": "Rien n'a été trouvé..." + }, + "SELECT_PRODUCTS": { + "TITLE": "Titre", + "DESCRIPTION": "Description", + "DETAILS": "Détails", + "IMAGES": "Images", + "CATEGORY": "Catégorie" + }, + "SAVE": { + "PRODUCT_NAME": "Nom du produit", + "PRICE": "Prix", + "COUNT": "Compter", + "DELIVERY": "Livraison", + "TAKEAWAY": "À emporter" + }, + "PLACEHOLDER": { + "EXAMPLE": "Exemple: Domino's Pizza", + "IMAGE_URL": "Image url", + "HERE_GOES_A_SHORT_DESCRIPTION": "Voici une courte description", + "HERE_GOES_A_DETAILS_ABOUT_PRODUCT_(OPTION)": "Voici un détail sur le produit (option)", + "REMOVE_IMAGE": "Supprimer l'image" + }, + "CREATE_ORDER_MODAL": { + "TITLE": { + "CREATE_ORDER": "Créer une commande" + }, + "WIZARD_FORM": { + "BUTTON_NEXT": "Suivant", + "BUTTON_PREV": "précédent", + "BUTTON_DONE": "Terminer la commande", + "STEP1": { + "TITLE": "Choisir une option", + "SELECT_FROM_EXISTING": "Sélectionner parmi les existants", + "ADD_NEW_CUSTOMER": "Ajouter un nouveau client" + }, + "STEP2": { + "TITLE": { + "SELECT_CUSTOMER": "Sélectionnez un client", + "SELECT_ADD": "Sélectionne/Ajouter", + "ADD_NEW": "Ajouter un nouveau" + }, + "SMART_TABLE": { + "TITLES": { + "FULL_NAME": "Nom entier", + "EMAIL": "Email", + "PHONE": "Téléphone", + "ADDRESS": "Addresse" + } + } + }, + "STEP3": { + "TITLE": "Créer une commande" + } + } + }, + "PRODUCTS_TAB": { + "PRODUCTS": "Produits", + "ADD_PRODUCTS": "Ajouter des Produits", + "DELETE": "Supprimer", + "IMAGE": "Image", + "TITLE": "Titre", + "DESCRIPTION": "Description", + "DETAILS": "Détails", + "CATEGORY": "Catégorie", + "PRICE": "Prix", + "QUANTITY": "Quantité", + "CLICK_ON_PRODUCT_IMAGE_TO_INCREASE_AVAILABLE_QUANTITY": "Cliquez sur l'image du produit pour augmenter la quantité disponible" + }, + "NEW_PRODUCT_TYPE": "Nouveau type de produit", + "ADD_PRODUCTS": "Ajouter des produits", + "CREATE_ORDER": "Créer une commande", + "STATUS": "Status", + "ORDERS": "Commandes", + "WAREHOUSE": "Entrepôt", + "PRODUCT": "Produit", + "PRODUCTS": "Les produits", + "ORDER_NUMBER": "Numéro de commande", + "CANCELLED": "Annulé", + "WAREHOUSE_STATUS": "Statut d'entrepôt", + "CARRIER_STATUS": "Statut de transporteur", + "PAID": "Payé", + "CARRIER": "transporteur", + "CREATED": "Créé", + "ELAPSED": "Écoulé", + "CONTACT_DETAILS": "Contact Details", + "EMAIL": "Email", + "PHONE": "Phone", + "ORDERS_FORWARDING_DETAILS": "Détails du transfert des commandes", + "ORDERS_FORWARDING_WITH": "Transfert de commandes avec", + "MANAGE_STORE": "Gérer le magasin", + "TOP_PRODUCTS": "Top produits", + "PRODUCTS_MANUFACTURING": "Fabrication de produits", + "CARRIER_REQUIRED": "Transporteur requis", + "MANAGE_WAREHOUSE": "Gérer l'entrepôt", + "MANAGE_STORE_PRODUCTS_&_ORDERS": "Manage store products & orders" + }, + "SIMULATION_VIEW": { + "SIMULATION": "Simulation", + "PURCHASE_PRODUCTS": "Acheter des produits", + "CREATE_INVITE_REQUEST": "Créer une demande d'invitation", + "SEND": "Envoyer", + "CREATE_USER": "Créer un utilisateur", + "ORDER_CONFIRM": "Commande Confirmer", + "ORDER_CANCEL": "Commande Annuler", + "PRODUCTS": "Des produits", + "STORE": "Boutique", + "ORDER": "Ordre", + "INVITE_REQUEST": "Invitation-demande", + "INVITE_USER": "Inviter un utilisateur", + "TAB_BUTTONS": { + "PRODUCTS": "Produits", + "ORDER_HISTORY": "Historique des commandes" + }, + "USER_MUTATION": { + "TITLE": "Créer un client", + "NAME": "Prénom", + "EMAIL": "Email", + "COUNTRY": "Pays", + "CITY": "Ville", + "USA": "Etats-Unis", + "ISRAEL": "Israël", + "BULGARIA": "Bulgarie", + "ADDRESS": "Adresse", + "POSTCODE": "Code postal", + "COORDINATES": "Coordonnées", + "AUTO_DETECT_COORDINATES": "Détection automatique des coordonnées", + "ERRORS": { + "FIRST_NAME_IS_REQUIRED": "Le prénom est requis", + "LAST_NAME_IS_REQUIRED": "Le nom est requis", + "INVALID_EMAIL": "Email invalide", + "EMAIL_IS_REQUIRED": "Le courriel est requis", + "COORDINATES_ARE_REQUIRED": "Les coordonnées sont obligatoiresd" + }, + "WIZARD_TITLES": { + "ADDITIONAL_INFO": "Information additionnelle", + "LOCATION": "Emplacement" + } + }, + "SMART_TABLE": { + "TITLE": "Titre", + "ID": "Id", + "IMAGE": "Image" + }, + "ORDER_INFO": { + "STATUSES": [ + { + "TITLE": "Nous préparons la commande!", + "DETAILS": "Vous l'obtiendrez en % t minutes.", + "NOT_PAID_NOTE": "Préparez votre portefeuille (% s en espèces)." + }, + { + "TITLE": "Transporteur en route!", + "DETAILS": "Vous recevrez la commande en% t min.", + "NOT_PAID_NOTE": "Préparez votre portefeuille (% s en espèces)." + }, + { + "TITLE": "Vérifiez votre porte!", + "DETAILS": "Vous recevrez la commande en quelques secondes.", + "NOT_PAID_NOTE": "" + }, + { + "TITLE": "Order Completed!", + "DETAILS": "Thanks for using Ever", + "NOT_PAID_NOTE": "Préparez votre portefeuille (% s en espèces)." + } + ], + "DELIVERY_STATUS": { + "WE": "We", + "CARRIER": "Carrier", + "YOU": "You" + }, + "DELIVERY_WRONG": { + "DELIVERY_WRONG": "The Delivery Went Wrong!", + "PROCESSING_WRONG": "Processing Went Wrong!", + "TRY_AGAIN": "Please try again.", + "CALL_FOR_DETAILS": "Call for details" + } + }, + "INSTRUCTIONS_STEPS": { + "INSTRUTIONS": "Instructions", + "CREATE_USER_STEP": { + "CREATE_USER": "Créer un utilisateur", + "STEP_1": "Etape 1.", + "COMMANDE": "Commande", + "TO_CONTINUE_IS_REQUIRED_TO_REGISTER_IN_THE_SYSTEM": "", + "CLICK_ON_BUTTON_CREATE_USER": "Cliquez sur le bouton 'Créer un utilisateur'", + "FILL_THE_FORM_FOR_ADDITIONAL_INFO": "Remplissez le formulaire pour des informations supplémentaires (facultatif)", + "FILL_THE_FORM_FOR_LOCATION_AND_PRESS_DONE_BUTTON": "Remplissez le formulaire de localisation et appuyez sur le bouton OK" + }, + "ORDER_STEP": { + "COMMANDE": "Commande", + "STEP_2": "Étape 2.", + "CREATE_ORDER": "Créer une commande", + "CHOICE_SOME_PRODUCTS_FROM_THE_TABLE": "Choisissez certains produits dans le tableau (vous pouvez voir plus de détails sur lorsque vous appuyez sur son nom ou sur son image)", + "SELECT_PRODUCT": "Pour être sélectionné, un produit doit appuyer sur sa ligne.", + "SELECT_BUTTON_ORDER_TO_CREATE_ORDER": "Appuyez sur le bouton 'Commander' pour créer une commande avec le produit sélectionné.", + "REVIEW_ORDER_HISTORY": "Consulter l'historique des commandes:", + "ON_PRESS_ORDER_HISTORY_TAB": "En appuyant sur 'Historique des commandes' affiche toutes vos commandes ..", + "HERE_YOU_CAN_SEE_DETAILS_ABOUT_EACH_ORDER": "Ici vous pouvez voir les détails de chaque commande", + "PRESS_ON_CARRIER_ORDER_OR_PRODUCT_NAME": "Appuyez sur le nom du transporteur, de la commande ou du produit pour plus d'informations." + }, + "CONFIRM_OR_CANCEL_STEP": { + "STEP_3": "Étape 3", + "CONFIRM_CANCEL_ORDER": "Confirmer / Annuler la commande", + "REAL_TIME": "Temps réel", + "TRACK_STATUS_ON_YOUR_ORDER": "Suivre l'état de votre commande.", + "ELAPSED_TIME_FROM_CREATE_TO_DELIVERED": "Temps écoulé de la création à la livraison.", + "SHOWS_MERCHANT_LOCATION": "Affiche l'emplacement du marchand.", + "SHOWS_CARRIER_LOCATION": "Afficher l'emplacement du transporteur.", + "POSSIBILITIES": "Possibilités:", + "SLIDER_REVIEW_OF_THE_ALL_PRODUCTS": "Revue du curseur de tous les produits.", + "CAN_CANCEL_IT_WITH_ORDER_CANCEL_BUTTON": "Jusqu'à ce que la commande ne soit pas livrée, l'utilisateur l'annule avec le bouton 'Commande Annulé'.", + "AFTER_THE_ORDER_IS_DELIVER_USER_CAN_CLICK_BUTTON_ORDER_CONFIRM_TO_CONTINUE": "Une fois la commande livrée, l'utilisateur peut cliquer sur le bouton 'Confirmer la commande' pour continuer .." + }, + "INVITE_STEP": { + "TO_CONTINUE_ITs_REQUIRED_TO_BE_INVITED_IN_THE_SYSTEM": "Pour continuer, il est nécessaire d'être invité dans le système:", + "SEND_INVITE_REQUEST": "Envoyez 'Invite Request' au système à partir du formulaire qui sera ouvert après avoir appuyé sur le bouton Invite Request.", + "ALL_INVITE_REQUESTS_ARE_REVIEWED": "Toutes les demandes d'invitation sont examinées par l'administrateur et elles peuvent être invitées si le système est disponible près de votre emplacement (pour le test, vous pouvez faire immédiatement le bouton Inviter un utilisateur).", + "AFTER_YOU_GET_INVITED_BEFORE": "Après avoir reçu l'invitation, vous pouvez facilement vous connecter au système, il vous suffit de saisir votre code d'invitation, qui vous sera fourni par le système (vous le verrez ici", + "AFTER_YOU_GET_INVITED_AFTER": "code après avoir appuyé sur le bouton Inviter, et peut le saisir lorsque vous appuyez sur le bouton Créer un utilisateur)." + } + } + }, + "CUSTOMERS_VIEW": { + "TITLE": "Les clients", + "DELETE_CUSTOMERS": "Supprimer la Sélection", + "CREATE_CUSTOMER": "Créer un client", + "DELETE": "SUPPRIMER", + "CREATE": "CREER", + "BAN": "BANNI", + "UNBAN": "AUTHORISER", + "MANAGE_CUSTOMER": "Gérer le client", + "CUSTOMER": "Client", + "INVITE": "Inviter", + "ORDER": "Commandes", + "ORDERS_STATISTICS": "Statistiques de commande", + "NUMBER_OF_ORDERS": "Total des commandes", + "CANCELED_ORDERS": "Commandes rendues", + "COMPLETED_ORDERS_TOTAL": "Prix de toutes les commandes", + "CUSTOMERS_DEVICES": "Clients appareils", + "NOT_INVITED_ONLY": "Pas invité seulement", + "Order": "Commandes", + "CANCEL_ORDER": "annuler la commande", + "CATEGORY": "Catégorie", + "ORDERS_HISTORY": "Historique des commandes", + "AVAILABLE_PRODUCTS": "Produits disponibles", + "NEARBY_STORES": "Magasins à proximité", + "INVITES_REQUESTS_MANAGEMENT": "Invite la gestion des demandes", + "INVITES_MANAGEMENT": "Invite la direction", + "DESCRIPTION": "Description", + "DETAILS": "Details", + "MAKE_A_CUSTOM_ORDER": "Faire une commande personnalisée", + "PRODUCT_COUNT": "Nombre de produits", + "QUANTITY_CAN'T_BE_EMPTY": "La quantité ne peut pas être vide", + "QUANTITY_CAN'T_BE_0": "La quantité ne peut pas être 0", + "NOT_ENOUGH_PRODUCTS_AVAILABLE": "Pas assez de produits disponibles", + "ORDER_INFO": "Information sur la commande", + "ORDER_ID": "ID de la Commande", + "STORE_ID": "ID du magasin", + "CARRIER_ID": "ID du transporteur", + "NO_CARRIER": "Pas de transporteur", + "SMART_TABLE_COLUMNS": { + "IMAGE": "Image", + "NAME": "Name", + "EMAIL": "Email", + "PHONE": "Téléphone", + "ADDRESS": "Addresse", + "ORDERS_QTY": "Qté de commandes", + "COUNTRY": "Pays", + "CITY": "Ville", + "STREET_ADDRESS": "Adresse de rue", + "HOUSE": "Maison", + "APARTMENT": "Appartement", + "INVITE_CODE": "Code d'invitation", + "INVITED_DATE": "Date invitée", + "ORDER_NUMBER": "Numéro de commande", + "WAREHOUSE": "Entrepôt", + "CARRIER": "Transporteur", + "PRODUCT_LIST": "Liste de produits", + "STATS": "Statistique", + "DELIVERY_TIME": "Heure de livraison", + "CREATED": "Créer", + "ACTIONS": "Actions", + "PAID": "Payé", + "COMPLETED": "Terminé", + "CANCELLED": "Annulé", + "NOT_DELIVERED": "Non livrés", + "PRODUCT": "Produit", + "PRICE": "Prix", + "STORE": "Boutique", + "AVAILABLE_COUNT": "Nombre disponible", + "ORDER": "Commande", + "STATUS": "Statut" + }, + "EDIT": { + "EDIT_CUSTOMER": "Modifier le client", + "BASIC_INFO": "Informations de base", + "SAVE": "Sauvegarder" + }, + "DEVICE": { + "ALL_DEVICE": "Tous les appareils", + "DEVICE_ID": "ID de l'appareil", + "ID": "id", + "UPDATE": "Mettre à jour", + "LANGUAGE": "langue", + "TYPE": "type", + "TYPEU": "Type", + "UUID": "uuid", + "DEVICE_UUID": "UUID de l'appareil", + "UPDATE_DEVICE": "Mettre à jour l'appareil", + "CUSTOMERS_DEVICES": "Appareils clients", + "DELETE": "SUPPRIMER", + "CREATE": "CRÉER" + }, + "WAREHOUSE": { + "WAREHOUSE_INFO": "Informations sur l'entrepôt", + "WAREHOUSE_ID": "ID de l'entrepôt", + "WAREHOUSE_NAME": "Nom de l'entrepôt" + }, + "CUSTOMER_VIEW": { + "MANAGE_CUSTOMER": "Gérer le client", + "EDIT": "Modifier", + "CUSTOMER": "Client" + }, + "INVITES_VIEW": { + "DELETE": "Supprimer", + "INVITE": "Inviter" + } + }, + "CARRIERS_VIEW": { + "TITLE": "Les transporteurs", + "DELETE_CARRIERS": "Supprimer sélectionnée", + "CREATE_CARRIER": "Créer un transporteur", + "DELETE": "SUPPRIMER", + "CREATE_BUTTON": "CREER", + "ACTIVE_AND_AVAILABLE_ORDERS": "Commandes actives et disponibles", + "ORDERS_HISTORY": "Historique des commandes", + "TRACK": "chemin", + "SMART_TABLE_COLUMNS": { + "IMAGE": "Image", + "NAME": "Prénom", + "PHONE": "Téléphone", + "STATUS": "Statut", + "ADDRESS": "Adresse", + "DELIVERIES": "Livraisons" + }, + "CARRIER_PAGE": { + "WAREHOUSE": "Entrepôt", + "CUSTOMER": "Client", + "SAVE": "Sauvegarder", + "EDIT": "Modifier", + "CARRIER_INFO": "Informations sur le transporteur", + "CARRIER_ID": "Id transporteur", + "REGISTER_NEW_CARRIER": "Enregistrer un nouveau transporteur", + "WAREHOUSE_STATUS": "Statut de l'entrepôt", + "CARRIER_STATUS": "Statut du transporteur", + "CREATED": "créé", + "ARRIVED_TO_CUSTOMER": "Arrivé au client", + "FAILED": "Échoué", + "DELIVERED": "Livré", + "CLIENT_REFUSE_ORDER": "Ordonnance de refus du client", + "AVAIBLE_ORDER_TO_PICK_UP": "Commandes disponibles à ramasser (chaque transporteur peut ramasser plusieurs commandes)", + "ACTIVE": "Actif", + "CARRIER_CAN_BE_SHARED": "Le transporteur peut être partagé?", + "NOT_ACTIVE": "Pas actif", + "WORKING": "Travail", + "NOT_WORKING": "Ca ne fonctionne pas", + "SELECT_CARRIER": "Sélectionnez le transporteur", + "CARRIER_ORDERS_STATUS": "Statut des commandes des transporteurs", + "Start": "Début", + "PICKED_UP_ORDER": "Commande ramassée", + "CANCEL": "Annulé", + "Arrived To Client": "Arrivé au client", + "No Carrier": "Pas de transporteur", + "Order Selected For Delivery": "Commande sélectionnée pour livraison", + "Order Picked Up": "Commande ramassée", + "Order In Delivery": "Commande en livraison", + "Delivered": "Livré", + "Delivery Issues": "Problèmes de livraison", + "Client Refuse to Take Order": "Refus du client de prendre une commande", + "BAD_STATUS": "BAD_STATUS", + "Created": "créé", + "Confirmed": "Confirmé", + "Processing": "En cours", + "Allocation Started": "Allocation commencée", + "Allocation Finished": "Allocation Allocation terminée", + "Packaging Started": "Emballage commencé", + "Packaged": "Emballé", + "Given to Carrier": "Donné au transporteur", + "Allocation Failed": "Échec de l'allocation", + "Packaging Failed": "Échec de l'emballage", + "LOCATION": "Localisation", + "TIME": "Time" + }, + "EDIT": { + "EDIT_CARRIER": "Edit Carrier", + "BASIC_INFO": "Information de base", + "LOCATION": "Localisation", + "PHOTO_URL": "Lien photo", + "CONTACT_PHONE": "Téléphone du contact", + "FIRST_NAME": "Prénom", + "LAST_NAME": "Nom" + }, + "CREATE": { + "BASIC_INFO": "Informations de base", + "LOCATION": "Localisation" + }, + "TRACK_PAGE": { + "TRACK_ALL_WORKING_CARRIERS": "Suivez tous les transporteurs en activité", + "FILTER_CARRIERS": "Trier transporteur", + "PHONE": "Téléphone", + "EMAIL": "Email", + "ADDRESS": "Adresse", + "DELIVERY_COUNT": "Nombre de livraisons" + } + }, + "PRODUCT_TYPE_VIEW": { + "TITLE": "Nouveau produit", + "WIZARD_FORM": { + "VALIDATION_MESSAGES": { + "TITLE": "Titre requis", + "THE_LENGHT_OF_THE_TITLE": "The length of title should be max 255 characters long!", + "IMAGE": "L'image est requise", + "DESCRIPTION": "La description est requise", + "LANGUAGE": "La langue est requise", + "THE_LENGHT_OF_THE_DESCRIPTION": "La longueur de la description doit être de 255 caractères maximum!", + "PRICE": "Le prix est requis", + "COUNT": "Le nombre de produits est requis" + } + } + }, + "SHARED": { + "FORMS": { + "ERRORS": { + "FIRST_NAME_REQUIRED": "Le prénom est requis", + "LAST_NAME_REQUIRED": "Le nom est requis", + "USERNAME_REQUIRED": "Nom d'utilisateur est nécessaire", + "PASSWORD_REQUIRED": "Mot de passe requis", + "PHONE_REQUIRED": "Le téléphone est requis", + "LOGO_URL_REQUIRED": "L'URL du logo doit commencer par 'https'", + "IS_ACTIVE": "Est-ce que le champ actif est requis", + "COUNTRY_REQUIRED": "Pays requis", + "CITY_REQUIRED": "Pays requis", + "STREET_ADDRESS_REQUIRED": "L'adresse est requise", + "HOUSE_REQUIRED": "Le numéro de maison est requis", + "COORDINATES_REQUIRED": "Les coordonnées sont obligatoires", + "MUST_CONTAIN_ONLY_LETTERS": "Doit contenir uniquement des lettres", + "PHONE_MUST_CONTAINS_ONLY(specail_signs)AND_DIGIT_CHARACTER": "Le numéro de téléphone peut commencer par '+' ou '(certains numéros)' et doit contenir uniquement: '-,., (Espace), #' 'et les chiffres" + } + }, + "USER": { + "FORMS": { + "BASIC_INFO": { + "TITLE": "Informations de base", + "FIRST_NAME": "Prénom", + "FIRST_NAME_OPTIONAL": "Prénom (facultatif)", + "LAST_NAME_OPTIONAL": "Nom (facultatif)", + "PHOTO_URL": "URL de la photo", + "PICTURE_URL": "URL de l'image (facultatif)", + "EMAIL": "Email", + "EMAIL_OPTIONAL": "Email (facultatif)", + "ERRORS": { + "INVALID_EMAIL": "Email invalide", + "EMAIL_IS_ALREADY_IN_USE": "cet email est déjà utilisé" + } + } + } + }, + "WAREHOUSE": { + "ORDER_MODAL": { + "MAKE_ORDER": "Faire une commande", + "ONLY_AVAILABLE": "Afficher uniquement les produits disponibles", + "ORDER": "Commande", + "SMART_TABLE": { + "TITLES": { + "IMG": "Img", + "PRODUCT": "Produit", + "PRICE": "Prix", + "AVAILABLE": "Disponible", + "AMOUNT": "Montant" + } + } + } + } + }, + "MENU_VIEW": { + "DASHBOARD": "Tableau de bord", + "ORDERS": "Commandes", + "STORES": "Magasins", + "PRODUCTS": { + "PRODUCTS": "Produits", + "MANAGEMENT": "Gestion", + "CATEGORIES": "Categories" + }, + "CUSTOMERS": { + "CUSTOMERS": "Clients", + "MANAGEMENT": "Gestion", + "INVITES": "Invites" + }, + "CARRIERS": "Transporteurs", + "SIMULATION": "Simulation", + "SETUP": "Configurations" + }, + "CATEGORY_VIEW": { + "TITLE": "Titre", + "IMAGE": "Image", + "CREATE_BUTTON": "Créer", + "DELETE": "Supprimer", + "EDIT": { + "EDIT_CATEGORY": "Modifier la catégorie", + "CATEGORY_NAME": "Nom de la catégorie", + "ENTER_THE_CATEGORY_NAME": "Entrer le nom de la catégorie", + "DONE": "Fait" + }, + "CREATE": { + "CREATE_CATEGORY": "Créer une Catégorie", + "CATEGORY_NAME": "Nom de la catégorie", + "ENTER_THE_CATEGORY_NAME": "Entrer le nom de la catégorie", + "PHOTO": "Photo", + "BROWSE": "Parcourir", + "INVALID_URL": "Lien Invalide", + "REMOVE_IMAGE": "Retirer l'image", + "PHOTO_OPTIONAL": "Photo (optionnel)", + "DONE": "Fait" + } + }, + "PLACEHOLDER": { + "EXAMPLE": "Example: Domino's Pizza", + "IMAGE_URL": "Image url", + "HERE_GOES_A_SHORT_DESCRIPTION": "Voici une courte description", + "HERE_GOES_A_DETAILS_ABOUT_PRODUCT_(OPTION)": "Voici un détail sur le produit (option)", + "REMOVE_IMAGE": "Retirer l'image", + "PASSWORD": "Mot de passe", + "LATITUDE": "Latitude", + "LONGITUDE": "Longitude", + "APARTMENT": "Appartement", + "HOUSE": "Maison", + "STREET": "Rue", + "ZIP": "ZIP", + "CITY": "Ville", + "FIND_ADDRESS": "Trouver une adresse" + }, + "STATUS_TEXT": { + "Created": "Créer", + "Confirmed": "Confirmé", + "Processing": "En cours", + "Allocation Started": "Allocation commencée", + "Allocation Finished": "Allocation terminé", + "Packaging Started": "Emballage commencé", + "Packaged": "Emballé", + "Given to Carrier": "Donné au transporteur", + "Allocation Failed": "Échec de l'allocation", + "Packaging Failed": "Emballage échouée", + "No Carrier": "Aucun transporteur", + "Order Selected For Delivery": "Commande sélectionnée pour livraison", + "Order Picked Up": "Commande ramassée", + "Order In Delivery": "Commande en livraison", + "Arrived To Client": "Arrivé au client", + "Delivered": "Livré", + "Delivery Issues": "Problèmes de livraison", + "Client Refuse to Take Order": "Refus du client de prendre une commande", + "Given to Customer": "Donné au client", + "BAD_STATUS": "BAD_STATUS" + }, + "ELAPSED_TIME": { + "TITLE": "Temps écoulé" + }, + "CONFIRM_MODAL": { + "ARE_YOU_SURE": "Êtes-vous sûr?", + "ARE_YOU_SURE_YOU_WANT_TO_INCREASE": "Êtes-vous sûr de vouloir augmenter la qté de produits?", + "ARE_YOU_SURE_YOU_WANT_TO_DECREASE": "Êtes-vous sûr de vouloir diminuer la qté de produits?", + "YES": "Oui", + "NO": "Non" + }, + "NO_SERVER_VIEW": { + "NO_SERVER": "La connexion au serveur est perdue" + }, + "BUTTON_NEXT": "Suivant", + "BUTTON_PREV": "Précédent", + "BUTTON_DONE": "Fait", + "TERRAIN": "Terrain", + "SATELLITE": "Satellite", + "LOCATION": "Localisation", + "ROAD_MAP": "Carte routière", + "Manage warehouse": "Gérer les produits et les commandes d'entrepôt", + "Warehouse": "Entrepôt", + "Create Warehouse": "Créer un entrepôt", + "SIMULATION": "Simulation", + "Purchase products": "Acheter des produits", + "Manage": "Gérer", + "Orders": "Ordres", + "Confirmed": "Confirmé", + "In Delivery": "En livraison", + "Not Confirmed": "Non confirmé", + "Not paid": "Impayé", + "Create 100 warehouses": "Créer 100 entrepôts", + "Cancelled": "Annulé", + "All": "Tout", + "CANCEL": "Annuler", + "Default Settings": "Paramètres par défaut", + "Products Manufacturing": "Fabrication de produits", + "Carrier required before sale": "Transporteur requis avant la vente", + "New Product Type": "Transporteur requis avant la vente", + "Products": "Des produits", + "New Product": "Nouveau produit", + "Product": "Produit", + "Title": "Titre", + "Picture Url": "URL de la photo", + "Description": "Description", + "Details": "Details", + "Price": "Prix", + "CATEGORY": "Category", + "LANGUAGE": "Langue", + "BROWSE": "Parcourir", + "ENGLISH": "Anglais", + "FRENCH": "Francais", + "HEBREW": "Hebreux", + "RUSSIAN": "Russie", + "BULGARIAN": "Bulgarie", + "SPANISH": "Espagnol", + "SELECT": "Sélectionner", + "Name": "Nom", + "Id": "Id", + "Warehouse name is required": "Le nom de l'entrepôt est requis", + "Name must be at least 1 characters long": "Le nom doit comporter au moins 1 caractère", + "Title cannot be more than 255 characters long": "Le titre ne doit pas comporter plus de 255 caractères", + "Logo": "Logo", + "Warehouse logo is required": "Le logo de l'entrepôt est requis", + "is Active": "actif", + "right now": "maintenant", + "Unselected": "Désélectionné", + "Phone": "Téléphone", + "Email": "Email", + "Username": "Nom d'utilisateur", + "Username is required": "Nom d'utilisateur est nécessaire", + "Password": "Mot de passe", + "Country": "Pays", + "USA": "USA", + "Israel": "Israel", + "Bulgaria": "Bulgarie", + "City": "Ville", + "Address": "Adresse", + "Postcode": "Code Postal", + "Coordinates": "Coordonnées", + "Auto detect coordinates": "Détection automatique des coordonnées", + "Carriers": "Transporteurs", + "Carrier": "Transporteur", + "Use only specific carriers": "Utilisez uniquement des Transporteur spécifiques", + "Manage carrier and deliveries": "Gérer le transporteur et les livraisons", + "Register New Carrier": "Enregistrer un nouveau transporteur", + "Create User": "Créer un utilisateur", + "OPTIONAL": "facultatif", + "FAKE_DATA": { + "FAKE_DATA_GENERATOR": "Fake Data Generator", + "GENERATE_ALL": "Generate All", + "CREATE_100_USERS": "Create 100 customers", + "CREATE_100_CARRIERS": "Create 100 carriers", + "CREATE_100_WAREHOUSES": "Create 100 warehouses", + "SETUP": "SETUP", + "GENERATE_INITIAL_DATA": "Generate Initial Data", + "CREATE_INVITE": "CREATE INVITE", + "HARDCODED_DATA": "Hardcoded data", + "CLEAR_ALL": "CLEAR ALL", + "GENERATE_HARDCODED_ONLY": "Generate Hardcoded Only", + "INCLUDED_HARDCODED_DATA": "Include hardcoded data", + "CREATE_1st_INVITE": "Create 1st invite", + "CREATE_2st_INVITE": "Create 2nd invite", + "CREATE_3st_INVITE": "Create 3rd invite", + "CREATE_4st_INVITE": "Create 4rd invite", + "CREATE_CUSTOMER": "Create Customer", + "CREATE_USER": "CREATE USER", + "CREATE_1st_USER": "Create 1st user (using 1st invite)", + "CREATE_CARRIER": "CREATE CARRIER", + "CREATE_1st_CARRIER": "Create 1st carrier", + "CREATE_2nd_CARRIER": "Create 2nd carrier", + "CREATE_3rd_CARRIER": "Create 3rd carrier", + "CREATE_PRODUCT": "CREATE PRODUCT", + "CREATE_PEPERONI&MUSHROOM_PIZZA_PRODUCT": "Create Peperoni & Mushroom pizza product", + "CREATE_SUSHI&CAVIAR_PRODUCT": "Create Sushi & Caviar product", + "CREATE_SUSHI_MIX_PRODUCT": "Create Sushi mix product", + "CREATE_PASTA_PRODUCT": "Create Pasta product", + "CREATE_SUSHI_BOX_PRODUCT": "Create Sushi box product", + "CREATE_PEPERONI&TOMATO_PIZZA_PRODUCT": "Create Peperoni & Tomato pizza product", + "CREATE_WAREHOUSE": "CREATE WAREHOUSE", + "CREATE_1st_WAREHOUSE": "Create 1st warehouse", + "CREATE_2nd_WAREHOUSE": "Create 2nd warehouse", + "CREATE_3rd_WAREHOUSE": "Create 3rd warehouse", + "CREATE_WAREHOUSE_PRODUCT": "CREATE WAREHOUSE PRODUCT", + "CREATE_1st_WAREHOUSE_PRODUCTS(using_product_number_1_2_3_4_5_and_6)": "Create 1st warehouse products (using product number 1, 2, 3, 4, 5 and 6)", + "CREATE_3rd_WAREHOUSE_PRODUCTS(using_1st_product)": "Create 3rd warehouse products (using 1st product)", + "CREATE_2nd_WAREHOUSE_PRODUCTS(using_product_number_1_2_and_3": "Create 2nd warehouse products (using product number 1, 2, and 3", + "UPDATE_WAREHOUSE_GEO_LOCATION": "UPDATE WAREHOUSE GEO LOCATION", + "UPDATE_1ST_WAREHOUSE_GEO_LOCATION": "Update 1st warehouse geo location", + "CREATE_1RD_ORDER(using_1st_warehouse_1st_user_and_1st_product)": "Create 1rd order (using 1st warehouse, 1st user and 1st product)", + "CREATE_2ND_ORDER(using_1st_warehouse_1st_user_and_2nd_product)": "Create 2nd order (using 1st warehouse, 1st user and 2nd product)", + "CONFIRM_ORDER": "CONFIRM ORDER", + "CREATE_ORDER": "CREATE ORDER", + "CONFIMR_1st_ORDER": "Confirm 1st order", + "CONFIMR_2nd_ORDER": "Confirm 2nd order", + "SETUP_MERCHANTS": { + "SETUP_MERCHANTS": "Setup merchants", + "PREV": "PREV", + "NEXT": "NEXT", + "ADD": "Add", + "BACK": "Back", + "SAVE": "Save", + "SELECT": "Select", + "CREATE": "Create", + "HOW_TO_SET_UP": { + "HOW_TO_SET_UP": "How to setup" + }, + "STEPPER": { + "ACCOUNT": "Account", + "BASIC_INFO": "Basic info", + "CONTACT_INFO": "Contact info", + "LOCATION": "Location", + "PAYMENTS": "Payments", + "MANUFACTURING": "Manufacturing", + "DELIVERY_AND_TAKEAWAY_SETTINGS": "Delivery & Takeaway Settings", + "ORDERS_SETTINGS": "Orders Settings", + "PRODUCT_CATEGORIES": "Product categories", + "PRODUCTS": "Products" + }, + "ACCOUNT": { + "ACCOUNT": "Account", + "EMAIL_ADDRESS": "Email address", + "EMAIL": "Email", + "PASSWORD": "Password", + "REPEAT_PASSWORD": "Repeat password", + "EMAIL_IS_REQUIRED": "Email is required", + "INVALID_EMAIL_FORMAT": "Invalid email format", + "USERNAME": "Username", + "USERNAME_IS_REQUIRED": "Username is required", + "USERNAME_MUST_BE_AT_LEAST_3_CHARACTERS": "Username must be at least 3 characters", + "PASSWORD_IS_REQUIRED": "Password is required", + "PASSWORD_MUST_BE_AT_LEAST_4_CHARACTERS": "Password must be at least 4 characters", + "REPEAT_PASSWORD_IS_REQUIRED": "Repeat password is required", + "PASSWORDS_DO_NOT_MATCH": "Passwords do not match" + }, + "BASIC_INFO": { + "BASIC_INFO": "Basic info", + "NAME": "Name", + "NAME_IS_REQUIRED": "Name is required", + "NAME_MUST_BE_AT_LEAST_4_CHARACTERS": "Name must be at least 4 characters", + "PHOTO": "Photo", + "ENTER_A_VALID_LOGO_URL_OR_BROWSE_FROM_A_DEVICE": "Enter a valid logo URL or browse from a device", + "REMOVE": "Remove", + "PHOTO_OPTIONAL": "Photo (optional)", + "BARCODE_DATA": "Barcode Data", + "BARCODE_DATA_IS_REQUIRED": "Barcode Data is required" + }, + "CONTACT_INFO": { + "CONTACT_INFO": "Contact info", + "CONTACT_PHONE": "Contact Phone", + "INVALID_PHONE_NUMBER_FORMAT": "Invalid phone number format", + "ORDER_FORWARDING_EMAIL": "Order Forwarding Email", + "ORDER_FORWARDING_PHONE": "Order Forwarding Phone", + "ORDERS_EMAIL": "Orders Email", + "ORDERS_EMAIL_IS_REQUIRED": "Orders email is required", + "INVALID_EMAIL_FORMAT": "Invalid email format", + "ORDERS_PHONE": "Orders Phone", + "ORDERS_PHONE_IS_REQUIRED": "Orders phone is required" + }, + "LOCATION": { + "LOCATION": "Location" + }, + "PAYMENTS": { + "PAYMENTS": "Payments", + "ALLOW_ONLINE_PAYMENT": "Allow online payments?", + "STRIPE": { + "PAY_BUTTON_TEXT": "Pay Button text", + "CURRENCY": "Currency", + "PAY_BUTTON_TEXT_IS_REQUIRED": "Pay Button text is required", + "CHOOSE_CURRENCY_CODE": "Choose currency code", + "CURRENCY_TEXT_IS_REQUIRED": "Currency text is required", + "COMPANY_BRAND_LOGO": "Company brand logo", + "COMPANY_BRAND_LOGO_IS_REQUIRED": "Company brand logo is required", + "INVALID_LOGO_URL": "Invalid logo url", + "INVALID_LOGO": "Invalid logo", + "PUBLISHABLE_KEY": "Publishable key", + "PUBLISHABLE_KEY_IS_REQUIRED": "Publishable key is required", + "ALLOW_REMEMBER_ME": "Allow remember me?", + "REMOVE": "Remove" + }, + "PAYPAL": { + "MODE": "Mode", + "CHOOSE_PAYPAL_MODE": "Choose PayPal mode", + "TYPE": "type", + "CURRENCY": "Currency", + "CHOOSE_CURRENCY_CODE": "Choose currency code", + "CURRENCY_TEXT_IS_REQUIRED": "Currency text is required", + "PUBLISHABLE_KEY": "Publishable key", + "PUBLISHABLE_KEY_IS_REQUIRED": "Publishable key is required", + "SECRET_KEY": "Secret key", + "SECRET_KEY_IS_REQUIRED": "Secret key is required", + "PAYMENT_DESCRIPTION": "Payment description", + "PAYMENT_DESCRIPTION_IS_REQUIRED": "Payment description is required" + } + }, + "MANUFACTURING": { + "MANUFACTURING": "Manufacturing", + "PRODUCTS_MANUFACTURING": "Products Manufacturing" + }, + "DELIVERY_AND_TAKEAWAY_SETTINGS": { + "DELIVERY_AND_TAKEAWAY_SETTINGS": "Delivery & Takeaway Settings", + "SELECT_FROM_SHARED_CARRIERS": "Select from shared carriers", + "ADD_YOUR_CARRIER": "Add your carrier", + "EDIT_CARRIER": "Edit carrier", + "CARRIER_REQUIRED": "Carrier required", + "PRODUCTS_DELIVERY_BY_DEFAULT": "Products Delivery (by default)", + "PRODUCTS_TAKEAWAY_BY_DEFAULT": "Products Takeaway (by default)", + "USE_SELECTED_SHARED_CARRIERS": "Use selected shared carriers", + "ADD_YOUR_CARRIERS": "Add your carriers" + }, + "ORDERS_SETTINGS": { + "ORDERS_SETTINGS": "Orders Settings", + "ORDER_BARCODE_QR_CODE_TYPES": "Order Barcode/QR code types" + }, + "PRODUCT_CATEGORIES": { + "PRODUCT_CATEGORIES": "Product categories", + "ADD_OWN_PRODUCT_CATEGORY": "Add own product category" + }, + "PRODUCTS": { + "PRODUCTS": "Products", + "SELECT_FROM_PRODUCTS_CATALOG": "Select from products catalog", + "CREATE_PRODUCT": "Create product", + "EDIT_PRODUCT": "Edit product", + "ADD_PRODUCT": "Add product", + "CREATE_NEW_PRODUCT": "Create new product" + } + } + } +} diff --git a/packages/admin-web-angular/src/assets/i18n/fr.json b/packages/admin-web-angular/src/assets/i18n/fr.json index 143e15dc8..af97e9ee6 100644 --- a/packages/admin-web-angular/src/assets/i18n/fr.json +++ b/packages/admin-web-angular/src/assets/i18n/fr.json @@ -6,8 +6,162 @@ "ISRAEL": "Israël", "BULGARIA": "Bulgarie" }, + "ORDER_VIEW": { + "ORDER_HEADER_INFO": { + "ORDER": "Commandes", + "MANAGE_ORDER": "Gérer les commandes ", + "TOTAL": "Total" + }, + "ORDER_PRODUCT_INFO": { + "ORDER_PRODUCTS": "Commannder des produits", + "ADD_PRODUCTS": "Ajouter un produit", + "REMOVE_PRODUCTS": "Supprimer des produits", + "CANCEL_ORDER": "annuler la commande", + "THE_ORDER_IS_CANCEL": "La commande est annulée", + "THE_ORDER_IS_GIVEN_TO_CARRIER": "La commande est remise au transporteur.", + "THE_ORDER_IS_DELIVERED": "La commande est livrée.", + "ADD_PRODUCTS_MODAL": "Ajouter des produits", + "ADD": "Ajouter", + "SUCCESS_TOAST": "Des produits ont été ajoutés à la commande", + "ERROR_TOAST": "Erreur, quelque chose s'est mal passé", + "SMART_TABLE": { + "NAME": "Nom", + "QTY": "QTE", + "PRICE": "Prix", + "IMAGE": "Image" + } + }, + "ORDER_SIDEBAR": { + "CONTACT_DETAILS": "Détails du contact", + "WAREHOUSE": "Entrepôt", + "CUSTOMER": "Client", + "CARRIER": "Transporteur", + "QTY": "qté" + }, + "LOCATION_INFO": { + "MAP": "Carte", + "DELIVERY_DISTANCE": "Distance de livraison:" + } + }, + "DASHBOARD_VIEW": { + "TOTAL_CUSTOMER": "Nombre total de clients", + "TOTAL_QUANTITY_OF_EXISTING_CUSTOMERS": "Quantité totale de clients existants", + "TOTAL_COMPLETED_ORDERS": "Total des commandes terminées", + "TOTAL_QUANTITY_OF_COMPLETED_ORDERS": "Quantité totale de commandes terminées", + "TOTAL_REVENUE": "Revenu total", + "TOTAL_SUM_SUM_OF_ALL_COMPLETED_ORDERS": "Somme totale de toutes les commandes terminées", + "TODAYs_CUSTOMERS": "Les clients d'aujourd'hui", + "TODAYs_QUANTITY_OF_REGISTERED_CUSTOMERS": "Nombre de clients enregistrés aujourd'hui", + "TODAYs_COMPLETED_ORDERS": "Commandes passées aujourd'hui", + "TODAYs_QUANTITY_OF_NEW_COMPLETED_ORDERS": "Commandes passées aujourd'hui", + "TODAYs_REVENUE": "Le revenu d'aujourd'hui", + "TODAYs_SUM_OF_COMPLETED_ORDERS": "Somme des commandes terminées d'aujourd'hui", + "TILL_AVERAGE": "jusqu'à la moyenne", + "BETTER_THAN_AVERAGE": "mieux que la moyenne", + "SELECT_COMPONENT": { + "STORES": "Magasins", + "CONTACT_DETAILS": "Détails du contact", + "PHONE": "Téléphone", + "EMAIL": "Email", + "ORDERS_FORWARDING_WITH": "Transfert de commandes avec", + "SELECT_STORE": "Sélectionnez un magasin" + }, + "CHARTS": { + "ORDERS": "Commandes", + "PROFIT": "Profit", + "TOTAL_ORDERS": "Total des commandes", + "TOTAL_COMPLETED_ORDERS": "Total des commandes terminées", + "TOTAL_CANCELLED_ORDERS": "Total des commandes annulées", + "TOTAL_REVENUE_ALL_ORDERS": "Revenu total de toutes les commandes", + "TOTAL_REVENUE_COMPLETED_ORDERS": "Total des revenus perdus des commandes annulées", + "TOTAL_LOST_REVENUE_CANCELLED_ORDERS": "Total des revenus perdus des commandes annulées", + "PAYMENT": "Paiement", + "CANCELED": "Annulé", + "ALL_ORDERS": "Tous les ordres", + "TODAY": "Aujourd'hui", + "LAST_WEEK": "La semaine dernière", + "LAST_MONTH": "Le mois dernier", + "CURRENT_YEAR": "Année actuelle", + "YEARS": "Par année", + "CUSTOM_PERIOD": "Période personnalisée", + "SELECT_PERIOD": "Sélectionnez la période", + "FROM": "De", + "TO": "À", + "SELECT": "Sélectionner", + "LABELS": { + "WEEK": "Semaine", + "WEEKDAYS": { + "MON": "Lun", + "TUE": "Mar", + "WED": "Mer", + "THU": "Jeu", + "FRI": "Ven", + "SAT": "Sam", + "SUN": "Dim" + }, + "MONTHS": { + "JAN": "Jan", + "FEB": "Fev", + "MAR": "Mar", + "APR": "Avr", + "MAY": "Mai", + "JUN": "Jun", + "JUL": "Jul", + "AUG": "Aout", + "SEP": "Sept", + "OCT": "Oct", + "NOV": "Nov", + "DEC": "Dec" + } + } + } + }, + "HEADER_VIEW": { + "ADMIN": "Admin", + "EVER": "Bellem", + "PROFILE": "Profil", + "LOG_OUT": "Se déconnecter" + }, + "FOOTER_VIEW": { + "COPY_RIGHT": "Copyright ©", + "ALL_RIGHTS_RESERVED": "Tous les droits sont réservés" + }, + "PROFILE_VIEW": { + "PROFILE_PAGE": "Page de profil", + "BASIC_INFO": "Informations de base", + "ACCOUNT": "Compte", + "USERNAME": "Nom d'utilisateur", + "ERROR": "Erreur", + "EMAIL": "Email", + "FIRST_NAME": "Prénom", + "FIRST_NAME_OPTIONAL": "Prénom (facultatif)", + "LAST_NAME": "Nom (facultatif)", + "PICTURE_URL": "URL de l'image (facultatif)", + "BROWSE": "Regarder", + "REMOVE": "supprimer", + "SAVE": "Save", + "OLD_PASSWORD": "Ancien mot de passe", + "NEW_PASSWORD": "Nouveau mot de passe", + "REPEAT_NEW_PASSWORD": "Répété le nouveau mot de passe", + "INVALID_EMAIL_ADDRESS": "Adresse e-mail invalide", + "INVALID_URL": "URL invalide", + "NAME_MUST_CONTAIN_ONLY_LETTERS": "Le nom ne doit contenir que des lettres", + "PASSWORDS_DO_NOT_MATCH": "Les mots de passe ne correspondent pas", + "SUCCESSFULLY_CHANGE_PASSWORD": "Changer le mot de passe avec succès" + }, + "PRODUCTS_VIEW": { + "DELETE": "SUPPRIMER", + "CREATE": "CRÉER", + "EDIT_VIEW": { + "EDIT_PRODUCT": "Modifier le produit", + "BASIC_INFO": "Informations de base", + "SAVE": "sauvegarder" + } + }, "WAREHOUSE_MANAGE": { "TITLE": "Gérer l'entrepôt", + "MANAGE_STORE": "Gérer le magasin", + "SAVE": "ENREGISTRER", "NAME": "Prénom", "USERNAME": "Nom d'utilisateur", "PASSWORD": "Mot de passe", @@ -32,50 +186,70 @@ "POSTCODE": "Code postal requis" }, "WIZARD_TITLES": { - "DETAILS": "Détails", + "DETAILS": "Details", "ACCOUNT": "Compte", - "CONTACT_INFO": "Informations de contact", - "LOCATION": "Emplacement", - "PAYMENT": "Paiement", + "CONTACT_INFO": "Contact Info", + "LOCATION": "Localisation", "DELIVERY_ZONES": "Zones de livraison" } }, "WAREHOUSES_VIEW": { "TITLE": "Entrepôts", "DELETE_WAREHOUSES": "Supprimer la Sélection", - "SHOW_ON_MAP": "Afficher sur la carte", + "DELETE": "SUPPRIMER", + "CREATE": "CREER", "SMART_TABLE_COLUMNS": { + "IMAGE": "Image", "NAME": "Prénom", "EMAIL": "Email", "PHONE": "Téléphone", "CITY": "Ville", "ADDRESS": "Adresse", - "ORDERS_QTY": "Commandes quantité" - }, - "MERCHANTS": { - "TRACK_ALL_MERCHANTS": "Suivre tous les marchands", - "FILTER_MERCHANTS": "Filtrer les marchands", - "FILTER_BY_NAME": "Filtrer par nom", - "FILTER_BY_CITY": "Filtrer par ville", - "FILTER_BY_COUNTRY": "Filtrer par pays" + "ORDERS_QTY": "Commandes quantité", + "ORDERS": "Commandes" + }, + "INFO": { + "STORE_INFO": "Info de la Boutique", + "STORE_ID": "ID Boutique", + "STORE_NAME": "Nom de la boutique" } }, "WAREHOUSE_VIEW": { "ORDER": { + "CONFIRM": "Confirmer", + "START_PROCESSING": "Commencer le traitement", + "START_ALLOCATION": " Commencer le traitement", + "ALLOCATED": "Alloué", + "ALLOCATION_FAILS": "Échec de l'allocation", + "START_PACKAGING": "Commencer l'emballage", + "PACKAGED": "Emballé", + "PACKAGING_FAILS": "l'emballage échouée", "GIVEN_TO_CARRIER": "Donné au client", + "GIVEN_TO_CUSTOMER": "Donné au client", + "ORDER": "Commande", "CANT_PROCESSING_WITHOUT_PRODUCTS": "Impossible de traiter la commande sans les produits." }, "MUTATION": { "TITLE": "Créer un nouvel entrepôt", "NAME": "Prénom", "LOGO": "Logo", + "PHOTO": "Photo", "IS_ACTIVE": "C'est actif", "PRODUCTS_MANUFACTURING": "Fabrication de produits", "CARRIER_REQUIRED": "Transporteur requis", "RIGHT_NOW": "Maintenant", "PHONE": "Téléphone", "EMAIL": "Email", + "ORDERS_PHONE": "Téléphone de la Commande", + "CONTACT_PHONE": "Téléphone", + "ORDERS_EMAIL": "Email de la Commande", + "CONTACT_EMAIL": "Email", + "FORWARD_ORDERS_WITH": "Commandes à terme avec", "USERNAME": "Nom d'utilisateur", + "OLD_PASSWORD": "Ancien Mot de Passe", + "NEW_PASSWORD": "Nouveau Mot de Passe", + "CONFIRM_PASSWORD": "Confirmation du Mot de passe", + "PASSWORDS_DO_NOT_MATCH": "Les mots de passe ne correspondent pas", "PASSWORD": "Mot de passe", "COUNTRY": "Pays", "USA": "Etats-Unis", @@ -88,16 +262,6 @@ "AUTO_DETECT_COORDINATES": "Détection automatique des coordonnées", "CARRIERS": "Les transporteurs", "USE_ONLY_SPECIFIC_CARRIERS": "N'utilisez que des transporteurs spécifiques", - "SELECT_SHAPE_TO_ADD_ZONE": "Sélectionnez la forme pour ajouter une nouvelle zone", - "CIRCLE": "Cercle", - "SHAPE": "Forme", - "DRAW_SHAPE_ON_MAP": "Dessinez une forme sur la carte", - "MINIMUM_AMOUNT": "Montant minimal", - "DELIVERY_FEE": "Frais de livraison", - "CANCEL": "Annuler", - "ADD": "Ajouter", - "EDIT": "Éditer", - "ZONE_NAME": "Nom de zone", "ERRORS": { "NAME_IS_REQUIRED": "Le nom de l'entrepôt est requis", "NAME_ATLEAST_3_CHARS": "Le nom doit comporter au moins 3 caractères", @@ -105,6 +269,11 @@ "LOGO_IS_REQUIRED": "Le logo est requis", "INVALID_URL": "Entrez une URL d'image valide ou recherchez un fichier", "PHONE_CONTAINS_ONLY_DIGIT": "Le numéro de téléphone doit contenir uniquement un chiffre", + "INVALID_EMAIL": "Email Invalide", + "ORDERS_PHONE_IS_REQUIRED": "Orders Phone is required", + "CONTACT_PHONE_IS_REQUIRED": "Contact Phone is required", + "ORDERS_EMAIL_IS_REQUIRED": "Orders Email is required", + "CONTACT_EMAIL_IS_REQUIRED": "Contact Email is required", "USERNAME_IS_REQUIRED": "Nom d'utilisateur est nécessaire", "PASSWORD_IS_REQUIRED": "Mot de passe requis", "COORDINATES_ARE_REQUIRED": "Les coordonnées sont obligatoires", @@ -115,29 +284,133 @@ "CONTACT_INFO": "Informations de contact", "LOCATION": "Emplacement", "DELIVERY_ZONES": "Zones de livraison" + }, + "CONTACT_INFO_TAB": { + "ORDER_FORWARDING_EMAIL": "Email de transfert de commande", + "ORDER_FORWARDING_PHONE": "Téléphone de transfert de commande" + } + }, + "NEW_PRODUCT": { + "SELECT_FROM_PRODUCTS_CATALOG": "Sélectionnez dans le catalogue de produits", + "CREATE_NEW_PRODUCT": "Créer un nouveau produit", + "HOW_TO_ADD": "Comment ajouter", + "ADD": "Ajouter", + "SAVE": "Sauvegarder", + "ADD_PRODUCTS_TO_STORE": "Ajouter des produits au magasin", + "NOTHING_FOUND": "Rien n'a été trouvé..." + }, + "SELECT_PRODUCTS": { + "TITLE": "Titre", + "DESCRIPTION": "Description", + "DETAILS": "Détails", + "IMAGES": "Images", + "CATEGORY": "Catégorie" + }, + "SAVE": { + "PRODUCT_NAME": "Nom du produit", + "PRICE": "Prix", + "COUNT": "Compter", + "DELIVERY": "Livraison", + "TAKEAWAY": "À emporter" + }, + "PLACEHOLDER": { + "EXAMPLE": "Exemple: Domino's Pizza", + "IMAGE_URL": "Image url", + "HERE_GOES_A_SHORT_DESCRIPTION": "Voici une courte description", + "HERE_GOES_A_DETAILS_ABOUT_PRODUCT_(OPTION)": "Voici un détail sur le produit (option)", + "REMOVE_IMAGE": "Supprimer l'image" + }, + "CREATE_ORDER_MODAL": { + "TITLE": { + "CREATE_ORDER": "Créer une commande" + }, + "WIZARD_FORM": { + "BUTTON_NEXT": "Suivant", + "BUTTON_PREV": "précédent", + "BUTTON_DONE": "Terminer la commande", + "STEP1": { + "TITLE": "Choisir une option", + "SELECT_FROM_EXISTING": "Sélectionner parmi les existants", + "ADD_NEW_CUSTOMER": "Ajouter un nouveau client" + }, + "STEP2": { + "TITLE": { + "SELECT_CUSTOMER": "Sélectionnez un client", + "SELECT_ADD": "Sélectionne/Ajouter", + "ADD_NEW": "Ajouter un nouveau" + }, + "SMART_TABLE": { + "TITLES": { + "FULL_NAME": "Nom entier", + "EMAIL": "Email", + "PHONE": "Téléphone", + "ADDRESS": "Addresse" + } + } + }, + "STEP3": { + "TITLE": "Créer une commande" + } } }, + "PRODUCTS_TAB": { + "PRODUCTS": "Produits", + "ADD_PRODUCTS": "Ajouter des Produits", + "DELETE": "Supprimer", + "IMAGE": "Image", + "TITLE": "Titre", + "DESCRIPTION": "Description", + "DETAILS": "Détails", + "CATEGORY": "Catégorie", + "PRICE": "Prix", + "QUANTITY": "Quantité", + "CLICK_ON_PRODUCT_IMAGE_TO_INCREASE_AVAILABLE_QUANTITY": "Cliquez sur l'image du produit pour augmenter la quantité disponible" + }, + "NEW_PRODUCT_TYPE": "Nouveau type de produit", "ADD_PRODUCTS": "Ajouter des produits", + "CREATE_ORDER": "Créer une commande", + "STATUS": "Status", + "ORDERS": "Commandes", + "WAREHOUSE": "Entrepôt", + "PRODUCT": "Produit", "PRODUCTS": "Les produits", "ORDER_NUMBER": "Numéro de commande", "CANCELLED": "Annulé", "WAREHOUSE_STATUS": "Statut d'entrepôt", "CARRIER_STATUS": "Statut de transporteur", "PAID": "Payé", + "CARRIER": "transporteur", + "CREATED": "Créé", + "ELAPSED": "Écoulé", + "CONTACT_DETAILS": "Contact Details", + "EMAIL": "Email", + "PHONE": "Phone", + "ORDERS_FORWARDING_DETAILS": "Détails du transfert des commandes", + "ORDERS_FORWARDING_WITH": "Transfert de commandes avec", "MANAGE_STORE": "Gérer le magasin", "TOP_PRODUCTS": "Top produits", "PRODUCTS_MANUFACTURING": "Fabrication de produits", "CARRIER_REQUIRED": "Transporteur requis", - "MANAGE_WAREHOUSE": "Gérer l'entrepôt" + "MANAGE_WAREHOUSE": "Gérer l'entrepôt", + "MANAGE_STORE_PRODUCTS_&_ORDERS": "Manage store products & orders" }, "SIMULATION_VIEW": { "SIMULATION": "Simulation", "PURCHASE_PRODUCTS": "Acheter des produits", + "CREATE_INVITE_REQUEST": "Créer une demande d'invitation", + "SEND": "Envoyer", "CREATE_USER": "Créer un utilisateur", "ORDER_CONFIRM": "Commande Confirmer", "ORDER_CANCEL": "Commande Annuler", "PRODUCTS": "Des produits", + "STORE": "Boutique", "ORDER": "Ordre", + "INVITE_REQUEST": "Invitation-demande", + "INVITE_USER": "Inviter un utilisateur", + "TAB_BUTTONS": { + "PRODUCTS": "Produits", + "ORDER_HISTORY": "Historique des commandes" + }, "USER_MUTATION": { "TITLE": "Créer un client", "NAME": "Prénom", @@ -154,6 +427,7 @@ "ERRORS": { "FIRST_NAME_IS_REQUIRED": "Le prénom est requis", "LAST_NAME_IS_REQUIRED": "Le nom est requis", + "INVALID_EMAIL": "Email invalide", "EMAIL_IS_REQUIRED": "Le courriel est requis", "COORDINATES_ARE_REQUIRED": "Les coordonnées sont obligatoiresd" }, @@ -161,41 +435,283 @@ "ADDITIONAL_INFO": "Information additionnelle", "LOCATION": "Emplacement" } + }, + "SMART_TABLE": { + "TITLE": "Titre", + "ID": "Id", + "IMAGE": "Image" + }, + "ORDER_INFO": { + "STATUSES": [ + { + "TITLE": "Nous préparons la commande!", + "DETAILS": "Vous l'obtiendrez en % t minutes.", + "NOT_PAID_NOTE": "Préparez votre portefeuille (% s en espèces)." + }, + { + "TITLE": "Transporteur en route!", + "DETAILS": "Vous recevrez la commande en% t min.", + "NOT_PAID_NOTE": "Préparez votre portefeuille (% s en espèces)." + }, + { + "TITLE": "Vérifiez votre porte!", + "DETAILS": "Vous recevrez la commande en quelques secondes.", + "NOT_PAID_NOTE": "" + }, + { + "TITLE": "Order Completed!", + "DETAILS": "Thanks for using Ever", + "NOT_PAID_NOTE": "Préparez votre portefeuille (% s en espèces)." + } + ], + "DELIVERY_STATUS": { + "WE": "We", + "CARRIER": "Carrier", + "YOU": "You" + }, + "DELIVERY_WRONG": { + "DELIVERY_WRONG": "The Delivery Went Wrong!", + "PROCESSING_WRONG": "Processing Went Wrong!", + "TRY_AGAIN": "Please try again.", + "CALL_FOR_DETAILS": "Call for details" + } + }, + "INSTRUCTIONS_STEPS": { + "INSTRUTIONS": "Instructions", + "CREATE_USER_STEP": { + "CREATE_USER": "Créer un utilisateur", + "STEP_1": "Etape 1.", + "COMMANDE": "Commande", + "TO_CONTINUE_IS_REQUIRED_TO_REGISTER_IN_THE_SYSTEM": "", + "CLICK_ON_BUTTON_CREATE_USER": "Cliquez sur le bouton 'Créer un utilisateur'", + "FILL_THE_FORM_FOR_ADDITIONAL_INFO": "Remplissez le formulaire pour des informations supplémentaires (facultatif)", + "FILL_THE_FORM_FOR_LOCATION_AND_PRESS_DONE_BUTTON": "Remplissez le formulaire de localisation et appuyez sur le bouton OK" + }, + "ORDER_STEP": { + "COMMANDE": "Commande", + "STEP_2": "Étape 2.", + "CREATE_ORDER": "Créer une commande", + "CHOICE_SOME_PRODUCTS_FROM_THE_TABLE": "Choisissez certains produits dans le tableau (vous pouvez voir plus de détails sur lorsque vous appuyez sur son nom ou sur son image)", + "SELECT_PRODUCT": "Pour être sélectionné, un produit doit appuyer sur sa ligne.", + "SELECT_BUTTON_ORDER_TO_CREATE_ORDER": "Appuyez sur le bouton 'Commander' pour créer une commande avec le produit sélectionné.", + "REVIEW_ORDER_HISTORY": "Consulter l'historique des commandes:", + "ON_PRESS_ORDER_HISTORY_TAB": "En appuyant sur 'Historique des commandes' affiche toutes vos commandes ..", + "HERE_YOU_CAN_SEE_DETAILS_ABOUT_EACH_ORDER": "Ici vous pouvez voir les détails de chaque commande", + "PRESS_ON_CARRIER_ORDER_OR_PRODUCT_NAME": "Appuyez sur le nom du transporteur, de la commande ou du produit pour plus d'informations." + }, + "CONFIRM_OR_CANCEL_STEP": { + "STEP_3": "Étape 3", + "CONFIRM_CANCEL_ORDER": "Confirmer / Annuler la commande", + "REAL_TIME": "Temps réel", + "TRACK_STATUS_ON_YOUR_ORDER": "Suivre l'état de votre commande.", + "ELAPSED_TIME_FROM_CREATE_TO_DELIVERED": "Temps écoulé de la création à la livraison.", + "SHOWS_MERCHANT_LOCATION": "Affiche l'emplacement du marchand.", + "SHOWS_CARRIER_LOCATION": "Afficher l'emplacement du transporteur.", + "POSSIBILITIES": "Possibilités:", + "SLIDER_REVIEW_OF_THE_ALL_PRODUCTS": "Revue du curseur de tous les produits.", + "CAN_CANCEL_IT_WITH_ORDER_CANCEL_BUTTON": "Jusqu'à ce que la commande ne soit pas livrée, l'utilisateur l'annule avec le bouton 'Commande Annulé'.", + "AFTER_THE_ORDER_IS_DELIVER_USER_CAN_CLICK_BUTTON_ORDER_CONFIRM_TO_CONTINUE": "Une fois la commande livrée, l'utilisateur peut cliquer sur le bouton 'Confirmer la commande' pour continuer .." + }, + "INVITE_STEP": { + "TO_CONTINUE_ITs_REQUIRED_TO_BE_INVITED_IN_THE_SYSTEM": "Pour continuer, il est nécessaire d'être invité dans le système:", + "SEND_INVITE_REQUEST": "Envoyez 'Invite Request' au système à partir du formulaire qui sera ouvert après avoir appuyé sur le bouton Invite Request.", + "ALL_INVITE_REQUESTS_ARE_REVIEWED": "Toutes les demandes d'invitation sont examinées par l'administrateur et elles peuvent être invitées si le système est disponible près de votre emplacement (pour le test, vous pouvez faire immédiatement le bouton Inviter un utilisateur).", + "AFTER_YOU_GET_INVITED_BEFORE": "Après avoir reçu l'invitation, vous pouvez facilement vous connecter au système, il vous suffit de saisir votre code d'invitation, qui vous sera fourni par le système (vous le verrez ici", + "AFTER_YOU_GET_INVITED_AFTER": "code après avoir appuyé sur le bouton Inviter, et peut le saisir lorsque vous appuyez sur le bouton Créer un utilisateur)." + } } }, "CUSTOMERS_VIEW": { "TITLE": "Les clients", "DELETE_CUSTOMERS": "Supprimer la Sélection", "CREATE_CUSTOMER": "Créer un client", + "DELETE": "SUPPRIMER", + "CREATE": "CREER", + "BAN": "BANNI", + "UNBAN": "AUTHORISER", + "MANAGE_CUSTOMER": "Gérer le client", + "CUSTOMER": "Client", + "INVITE": "Inviter", + "ORDER": "Commandes", "ORDERS_STATISTICS": "Statistiques de commande", "NUMBER_OF_ORDERS": "Total des commandes", "CANCELED_ORDERS": "Commandes rendues", "COMPLETED_ORDERS_TOTAL": "Prix de toutes les commandes", - "CUSTOMERS_DEVICES": "Appareils clients", + "CUSTOMERS_DEVICES": "Clients appareils", "NOT_INVITED_ONLY": "Pas invité seulement", + "Order": "Commandes", + "CANCEL_ORDER": "annuler la commande", + "CATEGORY": "Catégorie", + "ORDERS_HISTORY": "Historique des commandes", + "AVAILABLE_PRODUCTS": "Produits disponibles", + "NEARBY_STORES": "Magasins à proximité", + "INVITES_REQUESTS_MANAGEMENT": "Invite la gestion des demandes", + "INVITES_MANAGEMENT": "Invite la direction", + "DESCRIPTION": "Description", + "DETAILS": "Details", + "MAKE_A_CUSTOM_ORDER": "Faire une commande personnalisée", + "PRODUCT_COUNT": "Nombre de produits", + "QUANTITY_CAN'T_BE_EMPTY": "La quantité ne peut pas être vide", + "QUANTITY_CAN'T_BE_0": "La quantité ne peut pas être 0", + "NOT_ENOUGH_PRODUCTS_AVAILABLE": "Pas assez de produits disponibles", + "ORDER_INFO": "Information sur la commande", + "ORDER_ID": "ID de la Commande", + "STORE_ID": "ID du magasin", + "CARRIER_ID": "ID du transporteur", + "NO_CARRIER": "Pas de transporteur", "SMART_TABLE_COLUMNS": { - "NAME": "Prénom", + "IMAGE": "Image", + "NAME": "Name", "EMAIL": "Email", "PHONE": "Téléphone", + "ADDRESS": "Addresse", + "ORDERS_QTY": "Qté de commandes", "COUNTRY": "Pays", "CITY": "Ville", - "ADDRESS": "Adresse", - "ORDERS_QTY": "Commandes quantité", - "ACTIONS": "Aactes", - "INVITED_DATE": "Date d'invitation", + "STREET_ADDRESS": "Adresse de rue", + "HOUSE": "Maison", + "APARTMENT": "Appartement", + "INVITE_CODE": "Code d'invitation", + "INVITED_DATE": "Date invitée", + "ORDER_NUMBER": "Numéro de commande", + "WAREHOUSE": "Entrepôt", + "CARRIER": "Transporteur", + "PRODUCT_LIST": "Liste de produits", + "STATS": "Statistique", + "DELIVERY_TIME": "Heure de livraison", + "CREATED": "Créer", + "ACTIONS": "Actions", + "PAID": "Payé", + "COMPLETED": "Terminé", + "CANCELLED": "Annulé", + "NOT_DELIVERED": "Non livrés", + "PRODUCT": "Produit", + "PRICE": "Prix", + "STORE": "Boutique", + "AVAILABLE_COUNT": "Nombre disponible", + "ORDER": "Commande", "STATUS": "Statut" + }, + "EDIT": { + "EDIT_CUSTOMER": "Modifier le client", + "BASIC_INFO": "Informations de base", + "SAVE": "Sauvegarder" + }, + "DEVICE": { + "ALL_DEVICE": "Tous les appareils", + "DEVICE_ID": "ID de l'appareil", + "ID": "id", + "UPDATE": "Mettre à jour", + "LANGUAGE": "langue", + "TYPE": "type", + "TYPEU": "Type", + "UUID": "uuid", + "DEVICE_UUID": "UUID de l'appareil", + "UPDATE_DEVICE": "Mettre à jour l'appareil", + "CUSTOMERS_DEVICES": "Appareils clients", + "DELETE": "SUPPRIMER", + "CREATE": "CRÉER" + }, + "WAREHOUSE": { + "WAREHOUSE_INFO": "Informations sur l'entrepôt", + "WAREHOUSE_ID": "ID de l'entrepôt", + "WAREHOUSE_NAME": "Nom de l'entrepôt" + }, + "CUSTOMER_VIEW": { + "MANAGE_CUSTOMER": "Gérer le client", + "EDIT": "Modifier", + "CUSTOMER": "Client" + }, + "INVITES_VIEW": { + "DELETE": "Supprimer", + "INVITE": "Inviter" } }, "CARRIERS_VIEW": { "TITLE": "Les transporteurs", "DELETE_CARRIERS": "Supprimer sélectionnée", "CREATE_CARRIER": "Créer un transporteur", + "DELETE": "SUPPRIMER", + "CREATE_BUTTON": "CREER", + "ACTIVE_AND_AVAILABLE_ORDERS": "Commandes actives et disponibles", + "ORDERS_HISTORY": "Historique des commandes", + "TRACK": "chemin", "SMART_TABLE_COLUMNS": { + "IMAGE": "Image", "NAME": "Prénom", "PHONE": "Téléphone", "STATUS": "Statut", "ADDRESS": "Adresse", "DELIVERIES": "Livraisons" + }, + "CARRIER_PAGE": { + "WAREHOUSE": "Entrepôt", + "CUSTOMER": "Client", + "SAVE": "Sauvegarder", + "EDIT": "Modifier", + "CARRIER_INFO": "Informations sur le transporteur", + "CARRIER_ID": "Id transporteur", + "REGISTER_NEW_CARRIER": "Enregistrer un nouveau transporteur", + "WAREHOUSE_STATUS": "Statut de l'entrepôt", + "CARRIER_STATUS": "Statut du transporteur", + "CREATED": "créé", + "ARRIVED_TO_CUSTOMER": "Arrivé au client", + "FAILED": "Échoué", + "DELIVERED": "Livré", + "CLIENT_REFUSE_ORDER": "Ordonnance de refus du client", + "AVAIBLE_ORDER_TO_PICK_UP": "Commandes disponibles à ramasser (chaque transporteur peut ramasser plusieurs commandes)", + "ACTIVE": "Actif", + "CARRIER_CAN_BE_SHARED": "Le transporteur peut être partagé?", + "NOT_ACTIVE": "Pas actif", + "WORKING": "Travail", + "NOT_WORKING": "Ca ne fonctionne pas", + "SELECT_CARRIER": "Sélectionnez le transporteur", + "CARRIER_ORDERS_STATUS": "Statut des commandes des transporteurs", + "Start": "Début", + "PICKED_UP_ORDER": "Commande ramassée", + "CANCEL": "Annulé", + "Arrived To Client": "Arrivé au client", + "No Carrier": "Pas de transporteur", + "Order Selected For Delivery": "Commande sélectionnée pour livraison", + "Order Picked Up": "Commande ramassée", + "Order In Delivery": "Commande en livraison", + "Delivered": "Livré", + "Delivery Issues": "Problèmes de livraison", + "Client Refuse to Take Order": "Refus du client de prendre une commande", + "BAD_STATUS": "BAD_STATUS", + "Created": "créé", + "Confirmed": "Confirmé", + "Processing": "En cours", + "Allocation Started": "Allocation commencée", + "Allocation Finished": "Allocation Allocation terminée", + "Packaging Started": "Emballage commencé", + "Packaged": "Emballé", + "Given to Carrier": "Donné au transporteur", + "Allocation Failed": "Échec de l'allocation", + "Packaging Failed": "Échec de l'emballage", + "LOCATION": "Localisation", + "TIME": "Time" + }, + "EDIT": { + "EDIT_CARRIER": "Edit Carrier", + "BASIC_INFO": "Information de base", + "LOCATION": "Localisation", + "PHOTO_URL": "Lien photo", + "CONTACT_PHONE": "Téléphone du contact", + "FIRST_NAME": "Prénom", + "LAST_NAME": "Nom" + }, + "CREATE": { + "BASIC_INFO": "Informations de base", + "LOCATION": "Localisation" + }, + "TRACK_PAGE": { + "TRACK_ALL_WORKING_CARRIERS": "Suivez tous les transporteurs en activité", + "FILTER_CARRIERS": "Trier transporteur", + "PHONE": "Téléphone", + "EMAIL": "Email", + "ADDRESS": "Adresse", + "DELIVERY_COUNT": "Nombre de livraisons" } }, "PRODUCT_TYPE_VIEW": { @@ -203,9 +719,11 @@ "WIZARD_FORM": { "VALIDATION_MESSAGES": { "TITLE": "Titre requis", + "THE_LENGHT_OF_THE_TITLE": "The length of title should be max 255 characters long!", "IMAGE": "L'image est requise", "DESCRIPTION": "La description est requise", "LANGUAGE": "La langue est requise", + "THE_LENGHT_OF_THE_DESCRIPTION": "La longueur de la description doit être de 255 caractères maximum!", "PRICE": "Le prix est requis", "COUNT": "Le nombre de produits est requis" } @@ -226,10 +744,144 @@ "STREET_ADDRESS_REQUIRED": "L'adresse est requise", "HOUSE_REQUIRED": "Le numéro de maison est requis", "COORDINATES_REQUIRED": "Les coordonnées sont obligatoires", - "MUST_CONTAIN_ONLY_LETTERS": "Doit contenir uniquement des lettres" + "MUST_CONTAIN_ONLY_LETTERS": "Doit contenir uniquement des lettres", + "PHONE_MUST_CONTAINS_ONLY(specail_signs)AND_DIGIT_CHARACTER": "Le numéro de téléphone peut commencer par '+' ou '(certains numéros)' et doit contenir uniquement: '-,., (Espace), #' 'et les chiffres" + } + }, + "USER": { + "FORMS": { + "BASIC_INFO": { + "TITLE": "Informations de base", + "FIRST_NAME": "Prénom", + "FIRST_NAME_OPTIONAL": "Prénom (facultatif)", + "LAST_NAME_OPTIONAL": "Nom (facultatif)", + "PHOTO_URL": "URL de la photo", + "PICTURE_URL": "URL de l'image (facultatif)", + "EMAIL": "Email", + "EMAIL_OPTIONAL": "Email (facultatif)", + "ERRORS": { + "INVALID_EMAIL": "Email invalide", + "EMAIL_IS_ALREADY_IN_USE": "cet email est déjà utilisé" + } + } + } + }, + "WAREHOUSE": { + "ORDER_MODAL": { + "MAKE_ORDER": "Faire une commande", + "ONLY_AVAILABLE": "Afficher uniquement les produits disponibles", + "ORDER": "Commande", + "SMART_TABLE": { + "TITLES": { + "IMG": "Img", + "PRODUCT": "Produit", + "PRICE": "Prix", + "AVAILABLE": "Disponible", + "AMOUNT": "Montant" + } + } } } }, + "MENU_VIEW": { + "DASHBOARD": "Tableau de bord", + "ORDERS": "Commandes", + "STORES": "Magasins", + "PRODUCTS": { + "PRODUCTS": "Produits", + "MANAGEMENT": "Gestion", + "CATEGORIES": "Categories" + }, + "CUSTOMERS": { + "CUSTOMERS": "Clients", + "MANAGEMENT": "Gestion", + "INVITES": "Invites" + }, + "CARRIERS": "Transporteurs", + "SIMULATION": "Simulation", + "SETUP": "Configurations" + }, + "CATEGORY_VIEW": { + "TITLE": "Titre", + "IMAGE": "Image", + "CREATE_BUTTON": "Créer", + "DELETE": "Supprimer", + "EDIT": { + "EDIT_CATEGORY": "Modifier la catégorie", + "CATEGORY_NAME": "Nom de la catégorie", + "ENTER_THE_CATEGORY_NAME": "Entrer le nom de la catégorie", + "DONE": "Fait" + }, + "CREATE": { + "CREATE_CATEGORY": "Créer une Catégorie", + "CATEGORY_NAME": "Nom de la catégorie", + "ENTER_THE_CATEGORY_NAME": "Entrer le nom de la catégorie", + "PHOTO": "Photo", + "BROWSE": "Parcourir", + "INVALID_URL": "Lien Invalide", + "REMOVE_IMAGE": "Retirer l'image", + "PHOTO_OPTIONAL": "Photo (optionnel)", + "DONE": "Fait" + } + }, + "PLACEHOLDER": { + "EXAMPLE": "Example: Domino's Pizza", + "IMAGE_URL": "Image url", + "HERE_GOES_A_SHORT_DESCRIPTION": "Voici une courte description", + "HERE_GOES_A_DETAILS_ABOUT_PRODUCT_(OPTION)": "Voici un détail sur le produit (option)", + "REMOVE_IMAGE": "Retirer l'image", + "PASSWORD": "Mot de passe", + "LATITUDE": "Latitude", + "LONGITUDE": "Longitude", + "APARTMENT": "Appartement", + "HOUSE": "Maison", + "STREET": "Rue", + "ZIP": "ZIP", + "CITY": "Ville", + "FIND_ADDRESS": "Trouver une adresse" + }, + "STATUS_TEXT": { + "Created": "Créer", + "Confirmed": "Confirmé", + "Processing": "En cours", + "Allocation Started": "Allocation commencée", + "Allocation Finished": "Allocation terminé", + "Packaging Started": "Emballage commencé", + "Packaged": "Emballé", + "Given to Carrier": "Donné au transporteur", + "Allocation Failed": "Échec de l'allocation", + "Packaging Failed": "Emballage échouée", + "No Carrier": "Aucun transporteur", + "Order Selected For Delivery": "Commande sélectionnée pour livraison", + "Order Picked Up": "Commande ramassée", + "Order In Delivery": "Commande en livraison", + "Arrived To Client": "Arrivé au client", + "Delivered": "Livré", + "Delivery Issues": "Problèmes de livraison", + "Client Refuse to Take Order": "Refus du client de prendre une commande", + "Given to Customer": "Donné au client", + "BAD_STATUS": "BAD_STATUS" + }, + "ELAPSED_TIME": { + "TITLE": "Temps écoulé" + }, + "CONFIRM_MODAL": { + "ARE_YOU_SURE": "Êtes-vous sûr?", + "ARE_YOU_SURE_YOU_WANT_TO_INCREASE": "Êtes-vous sûr de vouloir augmenter la qté de produits?", + "ARE_YOU_SURE_YOU_WANT_TO_DECREASE": "Êtes-vous sûr de vouloir diminuer la qté de produits?", + "YES": "Oui", + "NO": "Non" + }, + "NO_SERVER_VIEW": { + "NO_SERVER": "La connexion au serveur est perdue" + }, + "BUTTON_NEXT": "Suivant", + "BUTTON_PREV": "Précédent", + "BUTTON_DONE": "Fait", + "TERRAIN": "Terrain", + "SATELLITE": "Satellite", + "LOCATION": "Localisation", + "ROAD_MAP": "Carte routière", "Manage warehouse": "Gérer les produits et les commandes d'entrepôt", "Warehouse": "Entrepôt", "Create Warehouse": "Créer un entrepôt", @@ -244,11 +896,238 @@ "Create 100 warehouses": "Créer 100 entrepôts", "Cancelled": "Annulé", "All": "Tout", + "CANCEL": "Annuler", "Default Settings": "Paramètres par défaut", "Products Manufacturing": "Fabrication de produits", "Carrier required before sale": "Transporteur requis avant la vente", "New Product Type": "Transporteur requis avant la vente", "Products": "Des produits", "New Product": "Nouveau produit", - "OPTIONAL": "optionnel" + "Product": "Produit", + "Title": "Titre", + "Picture Url": "URL de la photo", + "Description": "Description", + "Details": "Details", + "Price": "Prix", + "CATEGORY": "Category", + "LANGUAGE": "Langue", + "BROWSE": "Parcourir", + "ENGLISH": "Anglais", + "FRENCH": "Francais", + "HEBREW": "Hebreux", + "RUSSIAN": "Russie", + "BULGARIAN": "Bulgarie", + "SPANISH": "Espagnol", + "SELECT": "Sélectionner", + "Name": "Nom", + "Id": "Id", + "Warehouse name is required": "Le nom de l'entrepôt est requis", + "Name must be at least 1 characters long": "Le nom doit comporter au moins 1 caractère", + "Title cannot be more than 255 characters long": "Le titre ne doit pas comporter plus de 255 caractères", + "Logo": "Logo", + "Warehouse logo is required": "Le logo de l'entrepôt est requis", + "is Active": "actif", + "right now": "maintenant", + "Unselected": "Désélectionné", + "Phone": "Téléphone", + "Email": "Email", + "Username": "Nom d'utilisateur", + "Username is required": "Nom d'utilisateur est nécessaire", + "Password": "Mot de passe", + "Country": "Pays", + "USA": "USA", + "Israel": "Israel", + "Bulgaria": "Bulgarie", + "City": "Ville", + "Address": "Adresse", + "Postcode": "Code Postal", + "Coordinates": "Coordonnées", + "Auto detect coordinates": "Détection automatique des coordonnées", + "Carriers": "Transporteurs", + "Carrier": "Transporteur", + "Use only specific carriers": "Utilisez uniquement des Transporteur spécifiques", + "Manage carrier and deliveries": "Gérer le transporteur et les livraisons", + "Register New Carrier": "Enregistrer un nouveau transporteur", + "Create User": "Créer un utilisateur", + "OPTIONAL": "facultatif", + "FAKE_DATA": { + "FAKE_DATA_GENERATOR": "Fake Data Generator", + "GENERATE_ALL": "Generate All", + "CREATE_100_USERS": "Create 100 customers", + "CREATE_100_CARRIERS": "Create 100 carriers", + "CREATE_100_WAREHOUSES": "Create 100 warehouses", + "SETUP": "SETUP", + "GENERATE_INITIAL_DATA": "Generate Initial Data", + "CREATE_INVITE": "CREATE INVITE", + "HARDCODED_DATA": "Hardcoded data", + "CLEAR_ALL": "CLEAR ALL", + "GENERATE_HARDCODED_ONLY": "Generate Hardcoded Only", + "INCLUDED_HARDCODED_DATA": "Include hardcoded data", + "CREATE_1st_INVITE": "Create 1st invite", + "CREATE_2st_INVITE": "Create 2nd invite", + "CREATE_3st_INVITE": "Create 3rd invite", + "CREATE_4st_INVITE": "Create 4rd invite", + "CREATE_CUSTOMER": "Create Customer", + "CREATE_USER": "CREATE USER", + "CREATE_1st_USER": "Create 1st user (using 1st invite)", + "CREATE_CARRIER": "CREATE CARRIER", + "CREATE_1st_CARRIER": "Create 1st carrier", + "CREATE_2nd_CARRIER": "Create 2nd carrier", + "CREATE_3rd_CARRIER": "Create 3rd carrier", + "CREATE_PRODUCT": "CREATE PRODUCT", + "CREATE_PEPERONI&MUSHROOM_PIZZA_PRODUCT": "Create Peperoni & Mushroom pizza product", + "CREATE_SUSHI&CAVIAR_PRODUCT": "Create Sushi & Caviar product", + "CREATE_SUSHI_MIX_PRODUCT": "Create Sushi mix product", + "CREATE_PASTA_PRODUCT": "Create Pasta product", + "CREATE_SUSHI_BOX_PRODUCT": "Create Sushi box product", + "CREATE_PEPERONI&TOMATO_PIZZA_PRODUCT": "Create Peperoni & Tomato pizza product", + "CREATE_WAREHOUSE": "CREATE WAREHOUSE", + "CREATE_1st_WAREHOUSE": "Create 1st warehouse", + "CREATE_2nd_WAREHOUSE": "Create 2nd warehouse", + "CREATE_3rd_WAREHOUSE": "Create 3rd warehouse", + "CREATE_WAREHOUSE_PRODUCT": "CREATE WAREHOUSE PRODUCT", + "CREATE_1st_WAREHOUSE_PRODUCTS(using_product_number_1_2_3_4_5_and_6)": "Create 1st warehouse products (using product number 1, 2, 3, 4, 5 and 6)", + "CREATE_3rd_WAREHOUSE_PRODUCTS(using_1st_product)": "Create 3rd warehouse products (using 1st product)", + "CREATE_2nd_WAREHOUSE_PRODUCTS(using_product_number_1_2_and_3": "Create 2nd warehouse products (using product number 1, 2, and 3", + "UPDATE_WAREHOUSE_GEO_LOCATION": "UPDATE WAREHOUSE GEO LOCATION", + "UPDATE_1ST_WAREHOUSE_GEO_LOCATION": "Update 1st warehouse geo location", + "CREATE_1RD_ORDER(using_1st_warehouse_1st_user_and_1st_product)": "Create 1rd order (using 1st warehouse, 1st user and 1st product)", + "CREATE_2ND_ORDER(using_1st_warehouse_1st_user_and_2nd_product)": "Create 2nd order (using 1st warehouse, 1st user and 2nd product)", + "CONFIRM_ORDER": "CONFIRM ORDER", + "CREATE_ORDER": "CREATE ORDER", + "CONFIMR_1st_ORDER": "Confirm 1st order", + "CONFIMR_2nd_ORDER": "Confirm 2nd order", + "SETUP_MERCHANTS": { + "SETUP_MERCHANTS": "Setup merchants", + "PREV": "PREV", + "NEXT": "NEXT", + "ADD": "Add", + "BACK": "Back", + "SAVE": "Save", + "SELECT": "Select", + "CREATE": "Create", + "HOW_TO_SET_UP": { + "HOW_TO_SET_UP": "How to setup" + }, + "STEPPER": { + "ACCOUNT": "Account", + "BASIC_INFO": "Basic info", + "CONTACT_INFO": "Contact info", + "LOCATION": "Location", + "PAYMENTS": "Payments", + "MANUFACTURING": "Manufacturing", + "DELIVERY_AND_TAKEAWAY_SETTINGS": "Delivery & Takeaway Settings", + "ORDERS_SETTINGS": "Orders Settings", + "PRODUCT_CATEGORIES": "Product categories", + "PRODUCTS": "Products" + }, + "ACCOUNT": { + "ACCOUNT": "Account", + "EMAIL_ADDRESS": "Email address", + "EMAIL": "Email", + "PASSWORD": "Password", + "REPEAT_PASSWORD": "Repeat password", + "EMAIL_IS_REQUIRED": "Email is required", + "INVALID_EMAIL_FORMAT": "Invalid email format", + "USERNAME": "Username", + "USERNAME_IS_REQUIRED": "Username is required", + "USERNAME_MUST_BE_AT_LEAST_3_CHARACTERS": "Username must be at least 3 characters", + "PASSWORD_IS_REQUIRED": "Password is required", + "PASSWORD_MUST_BE_AT_LEAST_4_CHARACTERS": "Password must be at least 4 characters", + "REPEAT_PASSWORD_IS_REQUIRED": "Repeat password is required", + "PASSWORDS_DO_NOT_MATCH": "Passwords do not match" + }, + "BASIC_INFO": { + "BASIC_INFO": "Basic info", + "NAME": "Name", + "NAME_IS_REQUIRED": "Name is required", + "NAME_MUST_BE_AT_LEAST_4_CHARACTERS": "Name must be at least 4 characters", + "PHOTO": "Photo", + "ENTER_A_VALID_LOGO_URL_OR_BROWSE_FROM_A_DEVICE": "Enter a valid logo URL or browse from a device", + "REMOVE": "Remove", + "PHOTO_OPTIONAL": "Photo (optional)", + "BARCODE_DATA": "Barcode Data", + "BARCODE_DATA_IS_REQUIRED": "Barcode Data is required" + }, + "CONTACT_INFO": { + "CONTACT_INFO": "Contact info", + "CONTACT_PHONE": "Contact Phone", + "INVALID_PHONE_NUMBER_FORMAT": "Invalid phone number format", + "ORDER_FORWARDING_EMAIL": "Order Forwarding Email", + "ORDER_FORWARDING_PHONE": "Order Forwarding Phone", + "ORDERS_EMAIL": "Orders Email", + "ORDERS_EMAIL_IS_REQUIRED": "Orders email is required", + "INVALID_EMAIL_FORMAT": "Invalid email format", + "ORDERS_PHONE": "Orders Phone", + "ORDERS_PHONE_IS_REQUIRED": "Orders phone is required" + }, + "LOCATION": { + "LOCATION": "Location" + }, + "PAYMENTS": { + "PAYMENTS": "Payments", + "ALLOW_ONLINE_PAYMENT": "Allow online payments?", + "STRIPE": { + "PAY_BUTTON_TEXT": "Pay Button text", + "CURRENCY": "Currency", + "PAY_BUTTON_TEXT_IS_REQUIRED": "Pay Button text is required", + "CHOOSE_CURRENCY_CODE": "Choose currency code", + "CURRENCY_TEXT_IS_REQUIRED": "Currency text is required", + "COMPANY_BRAND_LOGO": "Company brand logo", + "COMPANY_BRAND_LOGO_IS_REQUIRED": "Company brand logo is required", + "INVALID_LOGO_URL": "Invalid logo url", + "INVALID_LOGO": "Invalid logo", + "PUBLISHABLE_KEY": "Publishable key", + "PUBLISHABLE_KEY_IS_REQUIRED": "Publishable key is required", + "ALLOW_REMEMBER_ME": "Allow remember me?", + "REMOVE": "Remove" + }, + "PAYPAL": { + "MODE": "Mode", + "CHOOSE_PAYPAL_MODE": "Choose PayPal mode", + "TYPE": "type", + "CURRENCY": "Currency", + "CHOOSE_CURRENCY_CODE": "Choose currency code", + "CURRENCY_TEXT_IS_REQUIRED": "Currency text is required", + "PUBLISHABLE_KEY": "Publishable key", + "PUBLISHABLE_KEY_IS_REQUIRED": "Publishable key is required", + "SECRET_KEY": "Secret key", + "SECRET_KEY_IS_REQUIRED": "Secret key is required", + "PAYMENT_DESCRIPTION": "Payment description", + "PAYMENT_DESCRIPTION_IS_REQUIRED": "Payment description is required" + } + }, + "MANUFACTURING": { + "MANUFACTURING": "Manufacturing", + "PRODUCTS_MANUFACTURING": "Products Manufacturing" + }, + "DELIVERY_AND_TAKEAWAY_SETTINGS": { + "DELIVERY_AND_TAKEAWAY_SETTINGS": "Delivery & Takeaway Settings", + "SELECT_FROM_SHARED_CARRIERS": "Select from shared carriers", + "ADD_YOUR_CARRIER": "Add your carrier", + "EDIT_CARRIER": "Edit carrier", + "CARRIER_REQUIRED": "Carrier required", + "PRODUCTS_DELIVERY_BY_DEFAULT": "Products Delivery (by default)", + "PRODUCTS_TAKEAWAY_BY_DEFAULT": "Products Takeaway (by default)", + "USE_SELECTED_SHARED_CARRIERS": "Use selected shared carriers", + "ADD_YOUR_CARRIERS": "Add your carriers" + }, + "ORDERS_SETTINGS": { + "ORDERS_SETTINGS": "Orders Settings", + "ORDER_BARCODE_QR_CODE_TYPES": "Order Barcode/QR code types" + }, + "PRODUCT_CATEGORIES": { + "PRODUCT_CATEGORIES": "Product categories", + "ADD_OWN_PRODUCT_CATEGORY": "Add own product category" + }, + "PRODUCTS": { + "PRODUCTS": "Products", + "SELECT_FROM_PRODUCTS_CATALOG": "Select from products catalog", + "CREATE_PRODUCT": "Create product", + "EDIT_PRODUCT": "Edit product", + "ADD_PRODUCT": "Add product", + "CREATE_NEW_PRODUCT": "Create new product" + } + } + } } diff --git a/packages/admin-web-angular/src/favicon.ico b/packages/admin-web-angular/src/favicon.ico index 79c60fff39419b1d51a9fd70429ad11ad1ad6456..a9bc2ac877542e63fcafa937ae04e5994847fa96 100644 GIT binary patch literal 30930 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
!-7XN^yX?jI2NM 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 M8CB^DDYMZ31DNrf)c^nh literal 15086 zcmeHNdr($I6u(XV-S|)c^GD4zrGjH*D84|*P!upzKoI014@D3X0!$=H^M#480Pz9H zrwBM;iKR|~0Rho4gS-*sIhi~ZlyVqO_gva-@BQxOyCkHHduHypyJvsLp|)!^suYSbQW zDJARNSqXPAVUMiJZS~lFv3~1pzf6X~f+799)V?4$M^@*!bg_|rK2skef`e44(I(sHi|OgAxNG_OG924R zPu|yUy(({AO^u9qtBXPwVo6l0k;dl14ei!}T)1%70 z+ur$NMyRQ- zR^>f}m$NQVUi|N(B{r7tQJfyT1e35cR*O>7{vwa!*@1_O|mZ#Tc8F$vw68jw`_HlaFDk z9^5OB4A}zVK>?7TlLPzXcT;=H7*XCGOixaqJ#E+c!P=v{NT35AHGFEG&e=f_y;ET!R7dd=c`n{qO4NkaW>u zp|ow~FJ+RhqO6qa@SG0vVf+p6E60!pF(^5aOYBziApt1I(R_B;aWiip9Qv06UpOwCsy!G0j?Q&7Y&jc<4(wj=fzkd zYs%B7e^K@PS?@~oMHCndKrXyU?A~zxoW!Smp1!@32PYB_L;C5|3EvAF_rUX6cvg$Z z57)kv_(++gcwT}%7lvoJ$hZ~V`Zv~pueBA}*dO{m;>Hv7EyATYJ)8WE5#{5@L*Tt` zt;E&e*C(sTcqV)H4)2@Ta#&;y*RK}H@K|VWXaH-A*+zULBO}r?M;ctozC^hQr=ApJ zd>D(*&ddPxQ#R&?@kfkhB_|z~&Z{6F#*a>j=NgY6J|taA8yHW+^L@yNDO(>F;15Y+ z>=WNH8`rLp>hM`iK9&Tr;oD_cwjIw;{dWu>V?M^*2e=P#AK*T~eSrG__W|w$+y}T1 POm`m;j|XvijwA3lW7c<7 diff --git a/packages/admin-web-angular/src/favicon.png b/packages/admin-web-angular/src/favicon.png index d05386901d592c4d2cdec033c87904fb3dc1bfb6..fadf977bfd2566395bf61b8ed45340000b9793b7 100644 GIT binary patch delta 742 zcmV}IGlpT7w!30E zx;yLcj;-0MJG+{j873k=7(%^BPbKt26b4chq$YvYgHc+d35t{(*$0;y?)}cW=bZV5{ad0O_DZf$gX9d&Ng1JKdh#_Vxe6NinSa^# zpUTY@L}$TWYK+FYi=zBVKx3`j6J6mprmCWeGK)4uXJ|AoGqMVTkRAlvp@Jo4LCny= z_xKs_5i>&L8%U_3%>?U>B7qa!g{W_C#ks33U^YLPV=u^>er}Lx?K+q?6;rN$$n4p4 zvkxcguHj~DJ8s{(k7pwjP$N}f+kZT(N+2m@$EmqFL8I=EWD0T+hmO`F*VNHrJ0}AF z{&HAtnGn+gL=ff#D;o$bsrxW8IgR1b3HbAi@u0g8@7^z<>_`oiKrs^KYzRcamn7$r zl`s*kv%oXx8+d{8>f`9_d5ne6i}?BLHwFfWkbAHaLoZ(;Hd#UJPB#RH52Bp+i4=sI zRzr-TfKJypq5tV~1PaP9JbyNcY0Bfk;VKLckKxpX%djM*L9mmG6g4W?JU2Ff#zZf) z(rR>32H(E_z|ztmT}@u30?cY7u*X;qUsO!WG)9{b#o8cIIDBv{+g&(w@d|3sUjn0B zS^O>nc@1z%R+Pf*)WLf3QKs=+8)YKVM|n#sm}o~V56-wb%E3f5$x~!G&P1EVN$5x6 zcJxe?LY@mX`=SPrJkz_??&;VJURR$J5UH||9 delta 357 zcmV-r0h<1!2Bia#83+OZ005AYXf}}{G=BgYbVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-)@JGD8Gw>;M1(6-h)vR5(v#(9*Fa3DHx-o;?SyUAyu2?YqNAj{EvW0!1D?c=YYt z_s^fdy#Me~N6#9f464D!E$}}QShRQrP;l+K%~1aT|Mrf)C>oMe^PnW zckh>#*CQ(cA`}e}q;F{F;T4J|2uD~n;725C(6Iyn>~KX6R?Ug500000NkvXXu0mjf D6!W4k diff --git a/packages/admin-web-angular/src/favicon16x16.png b/packages/admin-web-angular/src/favicon16x16.png index d05386901d592c4d2cdec033c87904fb3dc1bfb6..fadf977bfd2566395bf61b8ed45340000b9793b7 100644 GIT binary patch delta 742 zcmV}IGlpT7w!30E zx;yLcj;-0MJG+{j873k=7(%^BPbKt26b4chq$YvYgHc+d35t{(*$0;y?)}cW=bZV5{ad0O_DZf$gX9d&Ng1JKdh#_Vxe6NinSa^# zpUTY@L}$TWYK+FYi=zBVKx3`j6J6mprmCWeGK)4uXJ|AoGqMVTkRAlvp@Jo4LCny= z_xKs_5i>&L8%U_3%>?U>B7qa!g{W_C#ks33U^YLPV=u^>er}Lx?K+q?6;rN$$n4p4 zvkxcguHj~DJ8s{(k7pwjP$N}f+kZT(N+2m@$EmqFL8I=EWD0T+hmO`F*VNHrJ0}AF z{&HAtnGn+gL=ff#D;o$bsrxW8IgR1b3HbAi@u0g8@7^z<>_`oiKrs^KYzRcamn7$r zl`s*kv%oXx8+d{8>f`9_d5ne6i}?BLHwFfWkbAHaLoZ(;Hd#UJPB#RH52Bp+i4=sI zRzr-TfKJypq5tV~1PaP9JbyNcY0Bfk;VKLckKxpX%djM*L9mmG6g4W?JU2Ff#zZf) z(rR>32H(E_z|ztmT}@u30?cY7u*X;qUsO!WG)9{b#o8cIIDBv{+g&(w@d|3sUjn0B zS^O>nc@1z%R+Pf*)WLf3QKs=+8)YKVM|n#sm}o~V56-wb%E3f5$x~!G&P1EVN$5x6 zcJxe?LY@mX`=SPrJkz_??&;VJURR$J5UH||9 delta 357 zcmV-r0h<1!2Bia#83+OZ005AYXf}}{G=BgYbVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-)@JGD8Gw>;M1(6-h)vR5(v#(9*Fa3DHx-o;?SyUAyu2?YqNAj{EvW0!1D?c=YYt z_s^fdy#Me~N6#9f464D!E$}}QShRQrP;l+K%~1aT|Mrf)C>oMe^PnW zckh>#*CQ(cA`}e}q;F{F;T4J|2uD~n;725C(6Iyn>~KX6R?Ug500000NkvXXu0mjf D6!W4k diff --git a/packages/admin-web-angular/src/favicon32x32.png b/packages/admin-web-angular/src/favicon32x32.png index 5864e899462f4955e1a08381f4458c24f7e8eb55..1a5060b90c6636d24a0a63d9b208cdf3500d0492 100644 GIT binary patch delta 1754 zcmV<01||8A1&?t!!0V$wAk3^z4LeQP#>f_XIvxoAuw#Xd97Ci|-`hJ96U4wm@>(=4qpQas{f> zH9ZsmiT~XVG-sF5>Q2#?`4?t32hu`$veok_FmV)Llmm7F?bXFtF~{m@ru%$m&JEO7 zeKM0QSxGec=Ptl{Kz(~Bk!s02%zvpZ@7s*=N+yN#hHR%$KG}}@@-}rX_ssxn)^H6* z-(;I&r-8R*`-mq3W-%G?iyfx>pO^DBZJyhbH78Mn>tXhZGJ&5KBGOx+iyO>YV4*{h zpiD+Y`dGSl!Dz|R9ox-$BrM8VT}{ZAoV>uq(LTWgZ3_Hp$9_>mv2@jXaDQuTYQnU6 z?+QYUo>Sg+=eE1531z(otC}i0_hWM1N$qZk8-~cVu{d?^k^tXYP=tzuhsAZ};bVx) z90wNcfH5IkcfRU`VRN@gW_PD3DKEPLStbr`pu*ixDi0RVIbevOYeP7qld`bC;*f~OSI4VhS0;fCPSH<^`s^Nacm^^#A$z>&U_A$s`$wc= z#-jI8SXzN7F18S-DmGex>KaA@=Om1gPOw2{A~G1`o|}%_ckZC!?tfiOnXv$VrZlg0 zxvL#jnMmSO*3pgbAQqg2jXU>>T{Sk{!}R&fI>l!9K#I@oAi)O2QdFYx%AAF0Y-|#9 z3X03j z$=PFZ;=3Qjn6mQE(SO|h2qpU}MO1jSyhsoxVOMbi^}VT|6WCsI0M(~{A;I;>%d_7? z6P4Yg=4QP9&PuSShKQ0}u{vJ>-@J7jQ@J>aP;uD-%w4=3e*L0Fgye+bJxEX*37d5V z?CC7TfvrXRaqZf57(%T?LW0SbiG80P6o3bheuHCGKZ@%eyMI506lMbp2v>zUFpi>> zAoQW8$w?v4@`^;C1lDZcEdVaoTt@Dsmxx3Vc`&BG@wRx*ZTYHoV%IKZ91P)!swM)X zNSN^|0WMTdB60}Ndp8n&reOV!J*cm*$Ay|-1=zM-B^Ve@LSzg_kDUT6{N<#I(03U+ zP_VZGwY9ZiK~!eUh^(ilp!&=?0mcP+|Neb(ef{@8uzzyx1{x!yUyMt1#u5^u7Xgig z6qmuHkVlQk(`zI0qfRz+;R>L&6=%*}ME01e1R#-cBC)UXO99MnOF=PY$~OP+j(U;?z3QXhSXeR)VTpL}!*v3n=E`rF`Q{Sb zZEO_x+Y9&L+(lKSOINI>5~OJKwsY>Z`v6l?sQ~9DC3qZE2`#-<1CNd&emLdR1lRB} z)bZ5X?`p?SevibVqbU-DDRp)#IUV437rnues(-<&CR=mzeI7_eigHMd)L{BW;kAX! z#7pPK&0BbtdIH}u7ive{_vTT_ZB&k1G}tai$0XU}KBFB*y$NvVBrMtR52sE?>P|=> zh4|DFbRE&rfPA_d`b*4|Hb6t|Zv4PVX}In4P|8VAU*`*wh^SX+?Y1XaPmdhZM&kR^ zXn(RLYjFC;kIn>g)910ANOYbD)Yq|3r=1gcLqLRG(O`TVKd(`DtQM8g+lL7!5uc%v z&;b?hY~wi(h;*Fw5?!AbtMsEUntc9w)rClRGMq%*(4HjtZV8xn9qDW(-^{{YLE5VS z-1rBkWOEl1ScC4zDJKz|-U+IPyD7lr+(%=Ka%O7F{10Z%4UuglCldHN{wYq)tBwe$ wpXWAroiQe*igv$2GC7`Qv93^URv*UL-_^2G^nj6!r2qf`07*qoM6N<$f+3Js7XSbN delta 593 zcmV-X0;M1(|4BqaR7gwhmD?+WVI0T(JsNI^Ig}>H2yD+vS1wFVt*F&(v)K$GTx_;okEh<>^Xu8`ecvr5seSw0?DzeBpKm?y`+v5S zRGIu&NfyKgnkj<1E4jE2|rji`DkdKDW@&)D9y?nOO=v z0TC`RpI<;IRtJa2+=47U4@Qg>MSs}Y-hbdL9QjIPmRq*oi3Q?-u z{4#XEUt^)73SC6BAX{DxIV$!=Ov}iJDHZu#$dktfM6^KFsD~((-R?xUrGKp#rc~r} zLzhLgpu1-fqEvqW1G?mOf+^L}(FwXNq6Pf}28c4USgeN8DbfVL8R^^mcqed(77UL} zLNoz694=lQ5iL;GX&{||bS*u+I3ij=I6Xas10*%Su*3_pNEN8HT^^4YjuBEQ6rPxz z;iY&;6>u2Ww*rA697#p~2|m`0n>o29yyfr2FW|^4C~wwu4i1fz>#nR)@mvWKE%-6X fg1G$m0-5{^cKA{XF}7-900000NkvXXu0mjfD(wy4 diff --git a/packages/admin-web-angular/src/favicon48x48.png b/packages/admin-web-angular/src/favicon48x48.png index 41741bc89078f763c54943c80942f429119ae7e5..213b572e6f362ef843cae14e2f0db22affaf7b1c 100644 GIT binary patch delta 2997 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 t4Dk?#cnCv0gdrZn5F8I-= - Ever Admin + Bellem Admin @@ -63,7 +63,7 @@ height: 150px; margin: -75px 0 0 -75px; border-radius: 50%; - box-shadow: 0 3px 3px 0 rgba(255, 56, 106, 1); + box-shadow: 0 3px 3px 0 rgba(255, 255, 255, 1); transform: translate3d(0, 0, 0); animation: spin 2s linear infinite; } @@ -80,7 +80,7 @@ left: 5px; right: 5px; bottom: 5px; - box-shadow: 0 3px 3px 0 rgb(255, 228, 32); + box-shadow: 0 3px 3px 0 rgb(255, 255, 255); -webkit-animation: spin 3s linear infinite; animation: spin 3s linear infinite; } @@ -90,7 +90,7 @@ left: 15px; right: 15px; bottom: 15px; - box-shadow: 0 3px 3px 0 rgba(61, 175, 255, 1); + box-shadow: 0 3px 3px 0 rgba(255, 255, 255, 1); animation: spin 1.5s linear infinite; } diff --git a/packages/common-angular/src/routers/order-router.service.ts b/packages/common-angular/src/routers/order-router.service.ts index 72493218c..47cc2a61b 100644 --- a/packages/common-angular/src/routers/order-router.service.ts +++ b/packages/common-angular/src/routers/order-router.service.ts @@ -10,6 +10,7 @@ import Warehouse from '@modules/server.common/entities/Warehouse'; import OrderCarrierStatus from '@modules/server.common/enums/OrderCarrierStatus'; import OrderWarehouseStatus from '@modules/server.common/enums/OrderWarehouseStatus'; import IOrder from '@modules/server.common/interfaces/IOrder'; +import _ from 'lodash'; @Injectable() export class OrderRouter implements IOrderRouter { @@ -25,6 +26,16 @@ export class OrderRouter implements IOrderRouter { .pipe(map((order) => this._orderFactory(order))); } + getOrders(options: IOrderRouterGetOptions = {}): Observable { + return this.router + .runAndObserve('getOrders', options) + .pipe( + map((orders) => + _.map(orders, (order) => this._orderFactory(order)) + ) + ); + } + async confirm(orderId: string): Promise { const order = await this.router.run('confirm', orderId); return this._orderFactory(order); diff --git a/packages/common-angular/src/routers/user-router.service.ts b/packages/common-angular/src/routers/user-router.service.ts index c9c56adb7..4616cb3cc 100644 --- a/packages/common-angular/src/routers/user-router.service.ts +++ b/packages/common-angular/src/routers/user-router.service.ts @@ -76,13 +76,6 @@ export class UserRouter implements IUserRouter { ); } - getTermsOfUseByLanguage(selectedLanguage: string): Observable { - return this.router.runAndObserve( - 'getTermsOfUseByLanguage', - selectedLanguage - ); - } - getPrivacy(userId: string, deviceId: string): Observable { return this.router.runAndObserve( 'getPrivacy', diff --git a/packages/common/src/entities/Order.ts b/packages/common/src/entities/Order.ts index 396ad100e..127c28bec 100644 --- a/packages/common/src/entities/Order.ts +++ b/packages/common/src/entities/Order.ts @@ -312,14 +312,8 @@ class Order extends DBObject implements IOrder { switch (language) { case 'en-US': return this._getStatusTextEnglish(); - case 'he-IL': - return this._getStatusTextHebrew(); - case 'ru-RU': - return this._getStatusTextRussian(); - case 'bg-BG': - return this._getStatusTextBulgarian(); - case 'es-ES': - return this._getStatusTextSpanish(); + case 'fr-FR': + return this._getStatusTextFrench(); default: return 'BAD_STATUS'; } @@ -380,81 +374,21 @@ class Order extends DBObject implements IOrder { } } - private _getStatusTextBulgarian(): string { + private _getStatusTextFrench(): string { switch (this.status) { case OrderStatus.WarehousePreparation: - return 'Подготовка'; - case OrderStatus.InDelivery: - return 'Доставя се'; - case OrderStatus.Delivered: - return 'Доставено'; - case OrderStatus.CanceledWhileWarehousePreparation: - case OrderStatus.CanceledWhileInDelivery: - return 'Отказана'; - case OrderStatus.WarehouseIssue: - return 'Проблем при подготовката'; - case OrderStatus.CarrierIssue: - return 'Проблем при доставката'; - default: - return 'Проблем с поръчката'; - } - } - - private _getStatusTextHebrew(): string { - switch (this.status) { - case OrderStatus.WarehousePreparation: - return 'בהכנה'; - case OrderStatus.InDelivery: - return 'במשלוח'; - case OrderStatus.Delivered: - return 'הסתיים בצלחה'; - case OrderStatus.CanceledWhileWarehousePreparation: - case OrderStatus.CanceledWhileInDelivery: - return 'התבטל'; - case OrderStatus.WarehouseIssue: - return 'בעייה בהכנה'; - case OrderStatus.CarrierIssue: - return 'בעייה במשלוח'; - default: - return 'BAD_STATUS'; - } - } - - private _getStatusTextRussian(): string { - switch (this.status) { - case OrderStatus.WarehousePreparation: - return 'В подготовке'; - case OrderStatus.InDelivery: - return 'В доставки'; - case OrderStatus.Delivered: - return 'Доставлено'; - case OrderStatus.CanceledWhileWarehousePreparation: - case OrderStatus.CanceledWhileInDelivery: - return 'Отменено'; - case OrderStatus.WarehouseIssue: - return 'Проблема с подготовкой'; - case OrderStatus.CarrierIssue: - return 'Проблема с доставкой'; - default: - return 'BAD_STATUS'; - } - } - - private _getStatusTextSpanish() { - switch (this.status) { - case OrderStatus.WarehousePreparation: - return 'Preparación'; + return 'Preparation'; case OrderStatus.InDelivery: - return 'En la entrega'; + return 'En cours de livraison'; case OrderStatus.Delivered: - return 'Entregado'; + return 'Livre'; case OrderStatus.CanceledWhileWarehousePreparation: case OrderStatus.CanceledWhileInDelivery: - return 'Cancelado'; + return 'Annule'; case OrderStatus.WarehouseIssue: - return 'Problema de preparación'; + return 'Probleme de Preparation'; case OrderStatus.CarrierIssue: - return 'Problema de envio'; + return 'Probleme de livraison'; default: return 'BAD_STATUS'; } diff --git a/packages/common/src/interfaces/ILanguage.ts b/packages/common/src/interfaces/ILanguage.ts index 41a141459..e92ab532c 100644 --- a/packages/common/src/interfaces/ILanguage.ts +++ b/packages/common/src/interfaces/ILanguage.ts @@ -1,20 +1,14 @@ // TODO: add other locales -type ILanguage = 'he-IL' | 'en-US' | 'ru-RU' | 'bg-BG' | 'es-ES'; +type ILanguage = 'fr-FR' | 'en-US'; export default ILanguage; export enum LanguageCodesEnum { ENGLISH = 'en-US', - HEBREW = 'he-IL', - RUSSIAN = 'ru-RU', - BULGARIAN = 'bg-BG', - SPANISH = 'es-ES', + FRENCH = 'fr-FR', } export enum LanguagesEnum { ENGLISH = 'ENGLISH', - HEBREW = 'HEBREW', - RUSSIAN = 'RUSSIAN', - BULGARIAN = 'BULGARIAN', - SPANISH = 'SPANISH', + FRENCH = 'FRANCAIS', } diff --git a/packages/common/src/routers/IOrderRouter.ts b/packages/common/src/routers/IOrderRouter.ts index cf0a9512b..3f38d1879 100644 --- a/packages/common/src/routers/IOrderRouter.ts +++ b/packages/common/src/routers/IOrderRouter.ts @@ -15,6 +15,8 @@ interface IOrderRouter { options?: IOrderRouterGetOptions ): Observable; + getOrders(options?: IOrderRouterGetOptions): Observable; + confirm(orderId: Order['id']): Promise; updateCarrierStatus( diff --git a/packages/core/package.json b/packages/core/package.json index d7cce2cfd..a8f2030bc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,7 +2,7 @@ "name": "@ever-platform/core", "description": "Ever Platform Headless Framework", "license": "AGPL-3.0", - "version": "0.3.12", + "version": "0.3.9", "homepage": "https://ever.co", "repository": { "type": "git", diff --git a/packages/core/res/templates/about_us/en-US.hbs b/packages/core/res/templates/about_us/en-US.hbs index 6b245419f..73189b01b 100644 --- a/packages/core/res/templates/about_us/en-US.hbs +++ b/packages/core/res/templates/about_us/en-US.hbs @@ -32,8 +32,10 @@

Do you think online shopping could be better?

-
So, you never wait half an hour for your order to be prepared or cooked. And it never again comes broken or cold. - How about the phrase `out of stock`, it's annoying right?

In our app, this will never happen, ever! Here +
So, you never wait half an hour for your order to be prepared or cooked. And it never again comes broken or + cold. + How about the phrase `out of stock`, it's annoying right?

In our app, this will never happen, ever! + Here is why...

INSTANT

@@ -56,14 +58,15 @@
-

Copyright © 2016-present, Ever Co. LTD. All Rights Reserved.
+

Copyright © 2020, Bellem. All Rights Reserved.

-
EVER® is a registered trademark of Ever Co. LTD.
+
BELLEM® is a registered trademark of Bellem.
All other trademarks © to respective owners. We are in α (alpha). Please be nice!
diff --git a/packages/core/res/templates/about_us/fr-FR.hbs b/packages/core/res/templates/about_us/fr-FR.hbs new file mode 100644 index 000000000..6b245419f --- /dev/null +++ b/packages/core/res/templates/about_us/fr-FR.hbs @@ -0,0 +1,70 @@ + + +
+ +

Do you think online shopping could be better?

+
So, you never wait half an hour for your order to be prepared or cooked. And it never again comes broken or cold. + How about the phrase `out of stock`, it's annoying right?

In our app, this will never happen, ever! Here + is why...
+ +

INSTANT

+

+ All already prepared   hot.
+ Get it delivered from your tap to your door in 5-10 minutes. +

+ +

SIMPLE

+

+ Just swipe for something you like, tap `Buy` and your order is on its way. You can pay during or after delivery! +

+ +

SAFE & LOVE

+ +

+ We deliver from local stores and restaurants you already know and love. Only good surprises here! +

+ + + +
+

Copyright © 2016-present, Ever Co. LTD. All Rights Reserved.
+

+
EVER® is a registered trademark of Ever Co. LTD.
+ All other trademarks © to respective owners. We are in α (alpha). Please be nice!
+
+ +
\ No newline at end of file diff --git a/packages/core/res/templates/privacy/fr-FR.hbs b/packages/core/res/templates/privacy/fr-FR.hbs new file mode 100644 index 000000000..aeb7c8e46 --- /dev/null +++ b/packages/core/res/templates/privacy/fr-FR.hbs @@ -0,0 +1,25 @@ + + +
+

Full Privacy Policy of Ever available + here.

+

+ Data Controller and Owner +
Ever Co. LTD, +
HaAtsmaut 38/3, Ashdod 77452, Israel, +
ever@ever.co +

+
\ No newline at end of file diff --git a/packages/core/res/templates/terms_of_use/fr-FR.hbs b/packages/core/res/templates/terms_of_use/fr-FR.hbs new file mode 100644 index 000000000..559da6799 --- /dev/null +++ b/packages/core/res/templates/terms_of_use/fr-FR.hbs @@ -0,0 +1,1242 @@ + + +
+ +

Terms of Service

+ +
+ +

Thank +you for your interest in the Ever application for your mobile device +(the "App") provided to you by EVER CO. LTD ("EVER" +"us" or "we"), and our web site at Ever.co (the +"Site"), as well as all related web sites, networks, +downloadable software, and other services provided by us and on which +a link to this Terms of Service is displayed (collectively, together +with the Apps and Site, our "Service").

+

PLEASE +READ THE FOLLOWING TERMS OF SERVICE AGREEMENT CAREFULLY. +

+

These +Terms of Service (these "Terms", “Agreement”, “Terms +of Service”, "TOS"), including the Privacy Policy +incorporated into these Terms by reference and any other applicable +policies and guidelines, as may be updated from time to time, govern +your use of the Service. These Terms constitute a legal agreement +between you and EVER. In order to use the Service you must agree to +these Terms. +

+

BY +DOWNLOADING, INSTALLING, OR OTHERWISE BY ACCESSING OR USING OUR +SITES, MOBILE APPLICATIONS AND OUR SERVICES, YOU HEREBY AGREE THAT +YOU HAVE READ, UNDERSTOOD, AND AGREE TO BE TO BE BOUND BY THE TERMS +AND ALL TERMS INCORPORATED HEREIN BY REFERENCE. +

+

IT +IS THE RESPONSIBILITY OF YOU, THE USER, CUSTOMER, OR PROSPECTIVE +CUSTOMER TO READ THE TERMS AND CONDITIONS BEFORE PROCEEDING TO USE +THIS SITE OR OUR MOBILE APPS.

+

IF +YOU DO NOT EXPRESSLY AGREE TO ALL OF THE TERMS AND CONDITIONS, THEN +PLEASE DO NOT ACCESS OR USE OUR SITES, MOBILE APPS OR OUR SERVICES.

+

THIS +TERMS OF SERVICE AGREEMENT IS EFFECTIVE AS OF 11/06/2016.

+

ACCEPTANCE +OF TERMS

+

The +following Terms of Service Agreement is a legally binding agreement +that shall govern the relationship with our users and others which +may interact or interface with EVER CO. LTD, also known as EVER, +located at HaAtsmaut 38/3, Ashdod 77452, Israel and our subsidiaries +and affiliates, in association with the use of the EVER website and +mobile apps, which includes Ever.co, (the "Site") and its +Services, EVER Applications (the “Apps”) and its Services. 

+

Your +use of the EVER Services may be subject to separate third party terms +of service and fees, including without limitation your mobile network +operator’s terms of service and fees, including fees charged for +data usage, messaging and overage, which are your sole +responsibility.

+

DESCRIPTION +OF SERVICES OFFERED

+

EVER +provides a mobile apps and web-based technology platform (the +"Platform", "Marketplace") that connects +consumers (the "Customers"), retail stores, and restaurants +(together referenced as "Merchants"), with third party +independent contractors and third party independent contractors under +agreement with EVER and certain of EVER's affiliates (together +referenced as "Couriers"). The Platform provides order +placement services for Customers and allows them to view, discuss, +and place orders for food, beverages and goods, and pick-up and / or +delivery services in connection therewith, with Merchants and +Restaurants. The platform allows Carriers to facilitate on-demand +same day delivery services for food, merchandise, goods and +beverages. +

+

Through +the Platform consumers may request that food, merchandise, goods or +beverages, be delivered to them from particular retail locations, +stores or restaurants (Merchants). Couriers can access the Platform +and receive delivery opportunities. +

+

EVER +IS NOT A RETAIL STORE, MERCHANT OF FOOD OR BEVERAGES, RESTAURANT, +FOOD PICKUP AND / OR DELIVERY SERVICE, MERCHANDISE DELIVERY SERVICE, +OR FOOD PREPARATION ENTITY. YOU ACKNOWLEDGE THAT EVER DOES NOT +PROVIDE TRANSPORTATION OR LOGISTICS SERVICES OR FUNCTION AS A +TRANSPORTATION CARRIER AND EVER DOES NOT PROVIDE DELIVERY SERVICES +AND DOES NOT CONTROL THE RESTAURANTS OR THE PRODUCTION OF ANY FOOD OR +BEVERAGES, OR ANY PICK-UP OR DELIVERY SERVICES THEREWITH. INDEPENDENT +CONTRACTORS (EACH A "COURIER") OFFER DELIVERY SERVICES +THROUGH USE OF THE SERVICE. EVER OFFERS INFORMATION AND A METHOD TO +OBTAIN COURIER SERVICES, BUT DOES NOT AND DOES NOT INTEND TO PROVIDE +COURIER SERVICES OR ACT IN ANY WAY AS A COURIER, AND HAS NO +RESPONSIBILITY OR LIABILITY FOR ANY COURIER.

+

The +Merchants available through our Services operate indepenently of the +EVER. The EVER will not assess the suitability, legality or ability +of any Carrier or Merchant. The EVER is not responsible for the +Merchants food preparation or safety and does not verify their +compliance with applicable laws or regulations. The EVER has no +responsibility or liability for acts by any third-party Merchant or +Carrier, other than as stated herein. EVER, including the Website, +Apps and the EVER Services, does not in any way independently verify +the credentials or representations of any of the Restaurants, the +ingredients or the quality of any their products or services, or any +Restaurant’s compliance with applicable laws.

+

Customers +using the EVER Services must make themselves comfortable through the +information provided by the Restaurants on the Platform, by +contacting the Restaurants directly, or through such other means or +methods as they may deem appropriate, as to the quality and +reliability and quality of the Restaurants and the Restaurants’ +compliance with applicable laws. The EVER, including the Website, +Apps and the EVER Services, does not in any way guarantee the quality +of any Restaurant or any food or beverage, or any pickup- up or +delivery service in connection therewith, or any compliance thereof +with applicable laws. In addition, a Restaurant may represent certain +standards with respect to their food preparation (or other services), +such as “organic,” “kosher,” “macrobiotic” or allergen- +specific standards such as “nut-free,” “gluten-free,” or +“lactose-free”; EVER does not investigate or verify any such +representations. EVER shall not be liable or responsible for any food +or beverages, or any other services, offered by the Restaurants or +any errors or misrepresentations made by them (including on the +Website, Apps and through the EVER Services).

+

Unless +otherwise agreed by EVER in a separate written agreement with you, +the Services are made available solely for your personal, +noncommercial use. +

+

As +provided in greater detail in these Terms, you agree and acknowledge +these material Terms:

+

- +The App is licensed, not sold to you, and you may use the Service +only as set forth in these Terms;

+

- +Your use of the Service may be subject to separate third party terms +of service and fees, including without limitation your mobile network +operator’s ("Carrier") terms of service and fees, +including fees charged for data usage and overage, which are your +sole responsibility;

+

- +You consent to the collection, sharing, and use of your personally +identifiable information in accordance with EVER Privacy Policy;

+

- +The Service is provided "as is" without warranties of any +kind, and EVER liability to you is limited; +

+

SCOPE +OF APPS LICENSE

+

Our +Apps are licensed, not sold, to you for use only under the terms of +this license. EVER reserves all rights not expressly granted to you. +Subject to your complete and ongoing compliance with these Terms, +EVER hereby grants you a personal, limited, revocable, +non-transferable license to use our Apps on compatible devices that +you own or control, solely for your non-commercial use.

+

You +may not modify, alter, reproduce, distribute or make the Apps +available over a network where it could be used by multiple devices +at the same time. You may not rent, lease, lend, sell, redistribute +or sublicense the Apps. If you breach these license restrictions, or +otherwise exceed the scope of the license granted in these Terms, you +may be subject to prosecution and legal damages, as well as liability +for infringement of intellectual property rights. These Terms will +govern any updates provided to you by EVER that replace and/or +supplement the original Apps, unless the upgrade is accompanied by a +separate license in which case the terms of that license will govern.

+

ACCOUNT +ACCESS

+

You +must be at least eighteen (18) years old to use the Service. By +agreeing to these Terms, you represent and warrant to us:

+

- +That you are at least eighteen (18) years old;

+

- +That you have not previously been suspended or removed from the +Service; and

+

- +That your registration and your use of the Service is in compliance +with any and all applicable laws and regulations.

+

If +you are using the Service on behalf of an entity, organization, or +company, you represent and warrant that you have the authority to +bind that organization to these Terms and you agree to be bound by +these Terms on behalf of that organization.

+

ACCOUNTS +AND REGISTRATION

+

Any +and all visitors to our site and users of our apps, despite whether +they are registered or not, shall be deemed as "users" of +the herein contained Services provided for the purpose of this TOS.

+

Once +an individual register's for our Services, through the process of +creating an account, the user shall then be considered a "member."

+

To +register and become a "member" of the Site or Apps, you +must be at least 18 years of age to enter into and form a legally +binding contract. In addition, you must be in good standing and not +an individual that has been previously barred from receiving EVER's +Services under the laws and statutes of the Israel, United States or +other applicable jurisdiction.

+

When +you register, EVER may collect information such as your first and +last name, e-mail address, birth date, gender, mailing address, +occupation, industry and personal interests. +

+

You +can edit your account information at any time. Once you register with +EVER and sign in to our Services, you are no longer anonymous to us.

+

Furthermore, +the registering party hereby acknowledges, understands and agrees to:

+

a) furnish +factual, correct, current and complete information with regards to +yourself as may be requested by the data registration process, and

+

b) maintain +and promptly update your registration and profile information in an +effort to maintain accuracy and completeness at all times.

+

If +anyone knowingly provides any information of a false, untrue, +inaccurate or incomplete nature, EVER CO. LTD will have sufficient +grounds and rights to suspend or terminate the member in violation of +this aspect of the Agreement, and as such refuse any and all current +or future use of EVER CO. LTD Services, or any portion thereof. +

+

The +user and/or member acknowledges and agrees that the Services provided +and made available through our website and applications, which may +include some mobile applications and that those applications may be +made available on various social media networking sites and numerous +other platforms and downloadable programs, are the sole property of +EVER CO. LTD. At its discretion, EVER CO. LTD may offer additional +website Services and/or products, or update, modify or revise any +current content and Services, and this Agreement shall apply to any +and all additional Services and/or products and any and all updated, +modified or revised Services unless otherwise stipulated. EVER CO. +LTD does hereby reserve the right to cancel and cease offering any of +the aforementioned Services and/or products. You, as the end user +and/or member, acknowledge, accept and agree that EVER CO. LTD shall +not be held liable for any such updates, modifications, revisions, +suspensions or discontinuance of any of our Services and/or products. +Your continued use of the Services provided, after such posting of +any updates, changes, and/or modifications shall constitute your +acceptance of such updates, changes and/or modifications, and as +such, frequent review of this Agreement and any and all applicable +terms and policies should be made by you to ensure you are aware of +all terms and policies currently in effect. Should you not agree to +the updated, revised or modified terms, you must stop using the +provided Services forthwith.

+

Furthermore, +the user and/or member understands, acknowledges and agrees that the +Services offered shall be provided "AS IS" and as such EVER +CO. LTD shall not assume any responsibility or obligation for the +timeliness, missed delivery, deletion and/or any failure to store +user content, communication or personalization settings. +

+

PURCHASES

+

If +you wish to purchase any product, food or service made available +through the Service ("Purchase"), you may be asked to +supply certain information relevant to your Purchase including, +without limitation, your first and last name, birth date, gender, +credit card information, physical and mailing addresses, e-mail +address and phone number or other contact information.

+

When +you place an order through the Apps, WebSite and EVER Services, you +will be given a choice of payment options, which may include via +Apple Pay, Credit Card, PayPal®, Android Pay, and direct payment to +the applicable Merchant or Restaurant. If you pay for your purchase +via Apple Pay, Credit Card, PayPal, or Android Pay, we will ask for a +valid Apple Pay account, Credit Card, PayPal account, or Android Pay +account, as applicable, which will be billed through the EVER +Services, for the purchase price of the applicable order, and “EVER +CO. LTD” or your name will be the name that appears on the Apple +Pay, Credit Card, PayPal, or Android Pay statement, as applicable. As +stated above, however, EVER, including the Apps, Website and the EVER +Services, is not and shall not in any manner be considered the seller +of any of the food, beverages, and services ordered.

+

PRICES

+

You +understand that: (a) the prices for food and goods displayed through +the Services may differ from the prices offered or published by +Merchants for the same menu items, food or goods and/or from prices +available at other third-party websites and that such prices may not +be the lowest prices at which the items are sold; (b) the Company has +no obligation to itemize its costs, profits or margins when +publishing such prices; and (c) the Company reserves the right to +change such prices at any time, at its discretion. You are liable for +all transaction taxes on the Services provided under this Agreement +(other than taxes based on the Company’s income). Payment will be +processed by the Company, using the preferred payment method +designated in your account.

+

GENERAL +PAYMENT TERMS

+

Certain +features of the Service, including the placing of orders using the +Service, may require you to pay fees. Before you pay any fees, you +will have an opportunity to review and accept an estimate of the fees +that you will be charged. All fees are non-refundable. This no refund +policy applies at all times regardless of your decision to terminate +your usage, our decision to terminate your usage and any disruption +caused to our Service for any reason whatsoever.

+

EVER, +at its sole discretion, may offer credits or refunds on a +case-by-case basis; all credit and/or refund requests must be made +within fifteen (15) days after the delivery was completed. EVER may +change the delivery or other fees for any feature of the Service, +including by adding fees, on a going-forward basis at any time.

+

EVER +will charge the payment method you specify at the time of purchase or +as otherwise specified by you in your account information. EVER +reserves the right to determine final prevailing pricing. (Please +note the pricing information published on the website may not reflect +the prevailing pricing.) EVER, at its sole discretion, may make +promotional offers with different features and different rates to any +of our customers. These promotional offers, unless made to you, shall +have no bearing whatsoever on your offer or contract. We may change +the fees for the Service at any time as we deem necessary for our +business. +

+

PAYMENT +AUTHORIZATION

+

You +authorize EVER to charge all sums for orders that you make and +services you select to the payment method specified in your account. +When you order on EVER, a temporary pre-authorization hold might be +placed on your payment card to verify that the card is valid and has +credit available for your intended purchase. Once your order is +complete, you will be charged the final order total and the +pre-authorization hold will be lifted within 24-72 business hours, +depending on your bank. The pre-authorization hold remains even if an +order is canceled by a customer or by EVER and may remain on your +card for up to 5 business days.

+

EVER +also may place an initial temporary pre-authorization hold on each +new payment method you add to your account.

+

PAYMENT +WHEN CUSTOMER NOT AVAILABLE

+

EVER +reserves the right to charge a customer the full order amount if that +customer is not at the designated delivery location when the courier +arrives to complete the delivery.

+

PRIVACY +POLICY

+

Every +member's registration data and various other personal information are +strictly protected by the EVER CO. LTD Online Privacy Policy (see the +full Privacy Policy at https://ever.co/privacy/site.html). +As a member, you herein consent to the collection and use of the +information provided, including the transfer of information within +the United States, Israel and/or other countries for storage, +processing or use by EVER CO. LTD and/or our subsidiaries and +affiliates. +

+

MEMBER +ACCOUNT, USERNAME, PASSWORD AND SECURITY

+

When +you register, you will be asked to provide a password. You are solely +responsible for maintaining the confidentiality of your account and +password, and any password for Facebook, Google, or other third party +login. You accept responsibility for all activities that occur under +your account. If you have reason to believe that your account is no +longer secure, you must immediately notify us by our sending email to +security@ever.co

+

When +you set up an account, you are the sole authorized user of your +account. You shall be responsible for maintaining the secrecy and +confidentiality of your password and for all activities that +transpire on or within your account. It is your responsibility for +any act or omission of any user(s) that access your account +information that, if undertaken by you, would be deemed a violation +of the TOS. It shall be your responsibility to notify EVER CO. LTD +immediately if you notice any unauthorized access or use of your +account or password or any other breach of security. EVER CO. LTD +shall not be held liable for any loss and/or damage arising from any +failure to comply with this term and/or condition of the TOS. +

+

CONDUCT

+

As +a user or member of the Site or Apps, you herein acknowledge, +understand and agree that all information, text, software, data, +photographs, music, video, messages, tags or any other content, +whether it is publicly or privately posted and/or transmitted, is the +expressed sole responsibility of the individual from whom the content +originated. In short, this means that you are solely responsible for +any and all content posted, uploaded, emailed, transmitted or +otherwise made available by way of the EVER Services, and as such, we +do not guarantee the accuracy, integrity or quality of such content. +It is expressly understood that by use of our Services, you may be +exposed to content including, but not limited to, any errors or +omissions in any content posted, and/or any loss or damage of any +kind incurred as a result of the use of any content posted, emailed, +transmitted or otherwise made available by EVER. +

+

Furthermore, +you herein agree not to make use of EVER CO. LTD's Services for the +purpose of:

+

a) uploading, +posting, emailing, transmitting, or otherwise making available any +content that shall be deemed unlawful, harmful, threatening, abusive, +harassing, tortious, defamatory, vulgar, obscene, libelous, or +invasive of another's privacy or which is hateful, and/or racially, +ethnically, or otherwise objectionable;

+

b) causing +harm to minors in any manner whatsoever;

+

c) impersonating +any individual or entity, including, but not limited to, any EVER +officials, forum leaders, guides or hosts or falsely stating or +otherwise misrepresenting any affiliation with an individual or +entity;

+

d) forging +captions, headings or titles or otherwise offering any content that +you personally have no right to pursuant to any law nor having any +contractual or fiduciary relationship with;

+

e) uploading, +posting, emailing, transmitting or otherwise offering any such +content that may infringe upon any patent, copyright, trademark, or +any other proprietary or intellectual rights of any other party;

+

f) uploading, +posting, emailing, transmitting or otherwise offering any content +that you do not personally have any right to offer pursuant to any +law or in accordance with any contractual or fiduciary relationship;

+

g) uploading, +posting, emailing, transmitting, or otherwise offering any +unsolicited or unauthorized advertising, promotional flyers, "junk +mail," "spam," or any other form of solicitation, +except in any such areas that may have been designated for such +purpose;

+

h) uploading, +posting, emailing, transmitting, or otherwise offering any source +that may contain a software virus or other computer code, any files +and/or programs which have been designed to interfere, destroy and/or +limit the operation of any computer software, hardware, or +telecommunication equipment;

+

i) disrupting +the normal flow of communication, or otherwise acting in any manner +that would negatively affect other users' ability to participate in +any real time interactions;

+

j) interfering +with or disrupting any EVER CO. LTD Services, servers and/or networks +that may be connected or related to our website, including, but not +limited to, the use of any device software and/or routine to bypass +the robot exclusion headers;

+

k) intentionally +or unintentionally violating any local, state, federal, national or +international law, including, but not limited to, rules, guidelines, +and/or regulations decreed by the U.S. Securities and Exchange +Commission, in addition to any rules of any nation or other +securities exchange, that would include without limitation, the New +York Stock Exchange, the American Stock Exchange, or the NASDAQ, and +any regulations having the force of law;

+

l) providing +informational support or resources, concealing and/or disguising the +character, location, and or source to any organization delegated by +the United States government as a "foreign terrorist +organization" in accordance to Section 219 of the Immigration +Nationality Act;

+

m) "stalking" +or with the intent to otherwise harass another individual; and/or +

+

n) collecting +or storing of any personal data relating to any other member or user +in connection with the prohibited conduct and/or activities which +have been set forth in the aforementioned paragraphs.

+

EVER +CO. LTD herein reserves the right to pre-screen, refuse and/or delete +any content currently available through our Services. In addition, we +reserve the right to remove and/or delete any such content that would +violate the TOS or which would otherwise be considered offensive to +other visitors, users and/or members.  

+

EVER +CO. LTD herein reserves the right to access, preserve and/or disclose +member account information and/or content if it is requested to do so +by law or in good faith belief that any such action is deemed +reasonably necessary for: 

+

a) compliance +with any legal process; 

+

b) enforcement +of the TOS; 

+

c) responding +to any claim that therein contained content is in violation of the +rights of any third party; 

+

d) responding +to requests for customer service; or 

+

e) protecting +the rights, property or the personal safety of EVER CO. LTD, its +visitors, users and members, including the general public.

+

EVER +CO. LTD herein reserves the right to include the use of security +components that may permit digital information or material to be +protected, and that such use of information and/or material is +subject to usage guidelines and regulations established by EVER CO. +LTD or any other content providers supplying content services to EVER +CO. LTD. You are hereby prohibited from making any attempt to +override or circumvent any of the embedded usage rules in our +Services. Furthermore, unauthorized reproduction, publication, +distribution, or exhibition of any information or materials supplied +by our Services, despite whether done so in whole or in part, is +expressly prohibited.

+

INTERSTATE +COMMUNICATION

+

Upon +registration, you hereby acknowledge that by using Site and Apps to +send electronic communications, which would include, but are not +limited to, email, searches, instant messages, uploading of files, +photos and/or videos, you will be causing communications to be sent +through our computer network. Therefore, through your use, and thus +your agreement with this TOS, you are acknowledging that the use of +this Service shall result in interstate transmissions.

+

CAUTIONS +FOR GLOBAL USE AND EXPORT AND IMPORT COMPLIANCE

+

Due +to the global nature of the internet, through the use of our network +you hereby agree to comply with all local rules relating to online +conduct and that which is considered acceptable Content. Uploading, +posting and/or transferring of software, technology and other +technical data may be subject to the export and import laws of the +United States and possibly other countries. Through the use of our +network, you thus agree to comply with all applicable export and +import laws, statutes and regulations, including, but not limited to, +the Export Administration Regulations +(http://www.access.gpo.gov/bis/ear/ear_data.html), +as well as the sanctions control program of the United States +(http://www.treasury.gov/resource-center/sanctions/Programs/Pages/Programs.aspx). +Furthermore, you state and pledge that you:

+

a) are +not on the list of prohibited individuals which may be identified on +any government export exclusion report +(http://www.bis.doc.gov/complianceandenforcement/liststocheck.htm) +nor a member of any other government which may be part of an +export-prohibited country identified in applicable export and import +laws and regulations;

+

b) agree +not to transfer any software, technology or any other technical data +through the use of our network Services to any export-prohibited +country; +

+

c) agree +not to use our website network Services for any military, nuclear, +missile, chemical or biological weaponry end uses that would be a +violation of the Israel, U.S. export laws; and

+

d) agree +not to post, transfer nor upload any software, technology or any +other technical data which would be in violation of the Israel, U.S. +or other applicable export and/or import laws.

+

CONTENT +PLACED OR MADE AVAILABLE FOR COMPANY SERVICES

+

EVER +CO. LTD shall not lay claim to ownership of any content submitted by +any visitor, member, or user, nor make such content available for +inclusion on our website Services. Therefore, you hereby grant and +allow for EVER CO. LTD the below listed worldwide, royalty-free and +non-exclusive licenses, as applicable:

+

a) The +content submitted or made available for inclusion on the publicly +accessible areas of EVER CO. LTD's sites, the license provided to +permit to use, distribute, reproduce, modify, adapt, publicly perform +and/or publicly display said Content on our network Services is for +the sole purpose of providing and promoting the specific area to +which this content was placed and/or made available for viewing. This +license shall be available so long as you are a member of EVER CO. +LTD's sites, and shall terminate at such time when you elect to +discontinue your membership.

+

b) Photos, +audio, video and/or graphics submitted or made available for +inclusion on the publicly accessible areas of EVER CO. LTD's sites, +the license provided to permit to use, distribute, reproduce, modify, +adapt, publicly perform and/or publicly display said Content on our +network Services are for the sole purpose of providing and promoting +the specific area in which this content was placed and/or made +available for viewing. This license shall be available so long as you +are a member of EVER CO. LTD's sites and shall terminate at such time +when you elect to discontinue your membership.

+

c) For +any other content submitted or made available for inclusion on the +publicly accessible areas of EVER CO. LTD's sites, the continuous, +binding and completely sub-licensable license which is meant to +permit to use, distribute, reproduce, modify, adapt, publish, +translate, publicly perform and/or publicly display said content, +whether in whole or in part, and the incorporation of any such +Content into other works in any arrangement or medium current used or +later developed.

+

Those +areas which may be deemed "publicly accessible" areas of +EVER CO. LTD's sites are those such areas of our network properties +which are meant to be available to the general public, and which +would include message boards and groups that are openly available to +both users and members. However, those areas which are not open to +the public, and thus available to members only, would include our +mail system and instant messaging.

+

CONTRIBUTIONS +TO COMPANY WEBSITE

+

EVER +CO. LTD provides an area for our users and members to contribute +feedback to our website. When you submit ideas, documents, +suggestions and/or proposals ("Contributions") to our site, +you acknowledge and agree that: +

+

a) your +contributions do not contain any type of confidential or proprietary +information;

+

b) EVER +shall not be liable or under any obligation to ensure or maintain +confidentiality, expressed or implied, related to any Contributions; +

+

c) EVER +shall be entitled to make use of and/or disclose any such +Contributions in any such manner as they may see fit; +

+

d) the +contributor's Contributions shall automatically become the sole +property of EVER; and

+

e) EVER +is under no obligation to either compensate or provide any form of +reimbursement in any manner or nature.

+

INDEMNITY

+

All +users and/or members herein agree to insure and hold EVER CO. LTD, +our subsidiaries, affiliates, agents, employees, officers, partners +and/or licensors blameless or not liable for any claim or demand, +which may include, but is not limited to, reasonable attorney fees +made by any third party which may arise from any content a member or +user of our site may submit, post, modify, transmit or otherwise make +available through our Services, the use of EVER Services or your +connection with these Services, your violations of the Terms of +Service and/or your violation of any such rights of another person.

+

COMMERCIAL +REUSE OF SERVICES

+

The +member or user herein agrees not to replicate, duplicate, copy, +trade, sell, resell nor exploit for any commercial reason any part, +use of, or access to EVER's sites or Apps.

+

USE +AND STORAGE GENERAL PRACTICES

+

You +herein acknowledge that EVER CO. LTD may set up any such practices +and/or limits regarding the use of our Services, without limitation +of the maximum number of days that any email, message posting or any +other uploaded content shall be retained by EVER CO. LTD, nor the +maximum number of email messages that may be sent and/or received by +any member, the maximum volume or size of any email message that may +be sent from or may be received by an account on our Service, the +maximum disk space allowable that shall be allocated on EVER CO. +LTD's servers on the member's behalf, and/or the maximum number of +times and/or duration that any member may access our Services in a +given period of time. In addition, you also agree that EVER CO. LTD +has absolutely no responsibility or liability for the removal or +failure to maintain storage of any messages and/or other +communications or content maintained or transmitted by our Services. +You also herein acknowledge that we reserve the right to delete or +remove any account that is no longer active for an extended period of +time. Furthermore, EVER CO. LTD shall reserve the right to modify, +alter and/or update these general practices and limits at our +discretion.

+

Any +messenger service, which may include any web-based versions, shall +allow you and the individuals with whom you communicate with the +ability to save your conversations in your account located on EVER +CO. LTD's servers. In this manner, you will be able to access and +search your message history from any computer with internet access. +You also acknowledge that others have the option to use and save +conversations with you in their own personal account on Ever.co. It +is your agreement to this TOS which establishes your consent to allow +EVER CO. LTD to store any and all communications on its servers.

+

THIRD-PARTY +INTERACTIONS +

+

1. +Third-Party Providers

+

During +use of the Service, you may purchase goods and services from +third-party merchants through the Service. Any such activity, and any +disputes, terms, conditions, warranties or representations associated +with that activity, is solely between you and the applicable third +party. EVER and its licensors shall have no liability, obligation or +responsibility for any purchase or transaction between you and any +third-party provider. In no event shall EVER or its licensors be +responsible for any content, products, services or other materials on +or available from third-party sites or third-party providers. Certain +third-party providers of goods and/or services may require your +agreement to additional or different terms and conditions prior to +your use of or access to such goods or services, and EVER disclaims +any and all responsibility or liability arising from such agreements +between you and a third party.

+

2. +Couriers

+

You +may engage third-party Couriers through the Service to provide +delivery services to you and may interact with those Couriers. Any +interactions or disputes between you and a Courier are solely between +you and that Courier. EVER and its licensors shall have no liability, +obligation or responsibility for any interaction between you and any +Courier.

+

3. +Third-Party Advertising

+

The +Service may contain third-party advertising and marketing. By +agreeing to these Terms you agree to receive such advertising and +marketing.

+

4. +App Stores

+

You +acknowledge and agree that the availability of the EVER Apps is +dependent on the third party from which you received the Application +license, e.g., the Apple iPhone or Android app stores (“App +Store”). You acknowledge that this Agreement is between you and the +EVER and not with the App Store. The EVER, not the App Store, is +solely responsible for the Software and the Services, including the +Applications and the Services, the content thereof, maintenance, +support services and warranty therefor, and addressing any claims +relating thereto (e.g., product liability, legal compliance or +intellectual property infringement). In order to use the +Applications, you must have access to a wireless network, and you +agree to pay all fees associated with such access. You also agree to +pay all fees (if any) charged by the App Store in connection with the +Application or the Services. You agree to comply with, and your +license to use the Applications is conditioned upon your compliance +with, all applicable third-party terms of agreement (e.g., the App +Store’s terms and policies) when using the Applications. You +acknowledge that the App Store (and its subsidiaries) are intended +third-party beneficiaries of the Agreement and have the right to +enforce them.

+

TRANSACTIONS +INVOLVING ALCOHOL +

+

You +may have the option to request delivery of alcohol products in some +locations and from certain Merchants. If you receive your delivery in +the Israel or United States, you agree that you will only order +alcohol products if you are 21 years of age or older. If you receive +your delivery in another country, you agree that you will only order +alcohol products if you are of legal age to purchase alcohol products +in the relevant jurisdiction. You also agree that, upon delivery of +alcohol products, you will provide valid government-issued +identification proving your age to the Carrier delivering the alcohol +products and that the recipient will not be intoxicated when +receiving delivery of such products. If you order alcohol products, +you understand and acknowledge that neither the EVER nor the Carrier +can accept your order of alcohol products, and the order will only be +delivered if the Merchant accepts your order. The Carrier reserves +the right to refuse delivery if you are not 21 years of older, if you +cannot provide a valid government issued ID, if the name on your ID +does not match the name on your order, or you are visibly +intoxicated. If the Carrier is unable to complete the delivery of +alcohol products for one or more of these reasons, you are subject to +a full refund.

+

MODIFICATIONS

+

EVER +CO. LTD shall reserve the right at any time it may deem fit, to +modify, alter and or discontinue, whether temporarily or permanently, +our service, or any part thereof, with or without prior notice. In +addition, we shall not be held liable to you or to any third party +for any such alteration, modification, suspension and/or +discontinuance of our Services, or any part thereof. 

+

TERMINATION

+

We +may terminate or suspend access to our Service immediately, without +prior notice or liability, for any reason whatsoever, including +without limitation if you breach the Terms.

+

As +a member of Ever.co or Mobile Apps, you may cancel or terminate your +account, associated email address and/or access to our Services by +submitting a cancellation or termination request to ever@ever.co.

+

As +a member, you agree that EVER CO. LTD may, without any prior written +notice, immediately suspend, terminate, discontinue and/or limit your +account, any email associated with your account, and access to any of +our Services.

+

The +cause for such termination, discontinuance, suspension and/or +limitation of access shall include, but is not limited to:

+

a) any +breach or violation of our TOS or any other incorporated agreement, +regulation and/or guideline;

+

b) by +way of requests from law enforcement or any other governmental +agencies;

+

c) the +discontinuance, alteration and/or material modification to our +Services, or any part thereof;

+

d) unexpected +technical or security issues and/or problems;

+

e) any +extended periods of inactivity;

+

f) any +engagement by you in any fraudulent or illegal activities; and/or

+

g) the +nonpayment of any associated fees that may be owed by you in +connection with your Ever.co and Apps account Services.

+

Furthermore, +you herein agree that any and all terminations, suspensions, +discontinuances, and or limitations of access for cause shall be made +at our sole discretion and that we shall not be liable to you or any +other third party with regards to the termination of your account, +associated email address and/or access to any of our Services.

+

The +termination of your account with Ever.co and Apps shall include any +and/or all of the following:

+

a) the +removal of any access to all or part of the Services offered within +Ever.co and Apps;

+

b) the +deletion of your password and any and all related information, files, +and any such content that may be associated with or inside your +account, or any part thereof; and

+

c) the +barring of any further use of all or part of our Services.

+

All +provisions of the Terms which by their nature should survive +termination shall survive termination, including, without limitation, +ownership provisions, warranty disclaimers, indemnity and limitations +of liability.

+

ADVERTISER

+

Any +correspondence or business dealings with, or the participation in any +promotions of, advertisers located on or through our Services, which +may include the payment and/or delivery of such related goods and/or +Services, and any such other term, condition, warranty and/or +representation associated with such dealings, are and shall be solely +between you and any such advertiser. Moreover, you herein agree that +EVER CO. LTD shall not be held responsible or liable for any loss or +damage of any nature or manner incurred as a direct result of any +such dealings or as a result of the presence of such advertisers on +our website.

+

LINKS

+

Either +EVER CO. LTD or any third parties may provide links to other websites +and/or resources. Thus, you acknowledge and agree that we are not +responsible for the availability of any such external sites or +resources, and as such, we do not endorse nor are we responsible or +liable for any content, products, advertising or any other materials, +on or available from such third party sites or resources. +Furthermore, you acknowledge and agree that EVER CO. LTD shall not be +responsible or liable, directly or indirectly, for any such damage or +loss which may be a result of, caused or allegedly to be caused by or +in connection with the use of or the reliance on any such content, +goods or Services made available on or through any such site or +resource.

+

PROPRIETARY +RIGHTS

+

You +do hereby acknowledge and agree that EVER CO. LTD's Services and any +essential software that may be used in connection with our Services +("Software") shall contain proprietary and confidential +material that is protected by applicable intellectual property rights +and other laws. Furthermore, you herein acknowledge and agree that +any Content which may be contained in any advertisements or +information presented by and through our Services or by advertisers +is protected by copyrights, trademarks, patents or other proprietary +rights and laws. Therefore, except for that which is expressly +permitted by applicable law or as authorized by EVER CO. LTD or such +applicable licensor, you agree not to alter, modify, lease, rent, +loan, sell, distribute, transmit, broadcast, publicly perform and/or +created any plagiaristic works which are based on EVER CO. LTD +Services (e.g. Content or Software), in whole or part.

+

EVER +CO. LTD herein has granted you personal, non-transferable and +non-exclusive rights and/or license to make use of the object code or +our Software on a single computer or mobile device, as long as you do +not, and shall not, allow any third party to duplicate, alter, +modify, create or plagiarize work from, reverse engineer, reverse +assemble or otherwise make an attempt to locate or discern any source +code, sell, assign, sublicense, grant a security interest in and/or +otherwise transfer any such right in the Software. Furthermore, you +do herein agree not to alter or change the Software in any manner, +nature or form, and as such, not to use any modified versions of the +Software, including and without limitation, for the purpose of +obtaining unauthorized access to our Services. Lastly, you also agree +not to access or attempt to access our Services through any means +other than through the interface which is provided by EVER CO. LTD +for use in accessing our Services.

+

WARRANTY +DISCLAIMERS

+

YOU +HEREIN EXPRESSLY ACKNOWLEDGE AND AGREE THAT:

+

a) THE +USE OF EVER CO. LTD SERVICES AND SOFTWARE ARE AT THE SOLE RISK BY +YOU. OUR SERVICES AND SOFTWARE SHALL BE PROVIDED ON AN "AS IS" +AND/OR "AS AVAILABLE" BASIS. EVER CO. LTD AND OUR +SUBSIDIARIES, AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS AND +LICENSORS EXPRESSLY DISCLAIM ANY AND ALL WARRANTIES OF ANY KIND +WHETHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY +IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NON-INFRINGEMENT.

+

b) EVER +CO. LTD AND OUR SUBSIDIARIES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS +AND LICENSORS MAKE NO SUCH WARRANTIES THAT (i) EVER CO. LTD SERVICES +OR SOFTWARE WILL MEET YOUR REQUIREMENTS; (ii) EVER CO. LTD SERVICES +OR SOFTWARE SHALL BE UNINTERRUPTED, TIMELY, SECURE OR ERROR-FREE; +(iii) THAT SUCH RESULTS WHICH MAY BE OBTAINED FROM THE USE OF THE +EVER CO. LTD SERVICES OR SOFTWARE WILL BE ACCURATE OR RELIABLE; (iv) +QUALITY OF ANY PRODUCTS, SERVICES, ANY INFORMATION OR OTHER MATERIAL +WHICH MAY BE PURCHASED OR OBTAINED BY YOU THROUGH OUR SERVICES OR +SOFTWARE WILL MEET YOUR EXPECTATIONS; AND (v) THAT ANY SUCH ERRORS +CONTAINED IN THE SOFTWARE SHALL BE CORRECTED.

+

c) ANY +INFORMATION OR MATERIAL DOWNLOADED OR OTHERWISE OBTAINED BY WAY OF +EVER CO. LTD SERVICES OR SOFTWARE SHALL BE ACCESSED BY YOUR SOLE +DISCRETION AND SOLE RISK, AND AS SUCH YOU SHALL BE SOLELY RESPONSIBLE +FOR AND HEREBY WAIVE ANY AND ALL CLAIMS AND CAUSES OF ACTION WITH +RESPECT TO ANY DAMAGE TO YOUR COMPUTER AND/OR INTERNET ACCESS, +DOWNLOADING AND/OR DISPLAYING, OR FOR ANY LOSS OF DATA THAT COULD +RESULT FROM THE DOWNLOAD OF ANY SUCH INFORMATION OR MATERIAL.

+

d) NO +ADVICE AND/OR INFORMATION, DESPITE WHETHER WRITTEN OR ORAL, THAT MAY +BE OBTAINED BY YOU FROM EVER CO. LTD OR BY WAY OF OR FROM OUR +SERVICES OR SOFTWARE SHALL CREATE ANY WARRANTY NOT EXPRESSLY STATED +IN THE TOS.

+

e) A +SMALL PERCENTAGE OF SOME USERS MAY EXPERIENCE SOME DEGREE OF +EPILEPTIC SEIZURE WHEN EXPOSED TO CERTAIN LIGHT PATTERNS OR +BACKGROUNDS THAT MAY BE CONTAINED ON A COMPUTER OR MOBILE DEVICE +SCREEN OR WHILE USING OUR SERVICES. CERTAIN CONDITIONS MAY INDUCE A +PREVIOUSLY UNKNOWN CONDITION OR UNDETECTED EPILEPTIC SYMPTOM IN USERS +WHO HAVE SHOWN NO HISTORY OF ANY PRIOR SEIZURE OR EPILEPSY. SHOULD +YOU, ANYONE YOU KNOW OR ANYONE IN YOUR FAMILY HAVE AN EPILEPTIC +CONDITION, PLEASE CONSULT A PHYSICIAN IF YOU EXPERIENCE ANY OF THE +FOLLOWING SYMPTOMS WHILE USING OUR SERVICES: DIZZINESS, ALTERED +VISION, EYE OR MUSCLE TWITCHES, LOSS OF AWARENESS, DISORIENTATION, +ANY INVOLUNTARY MOVEMENT, OR CONVULSIONS.

+

LIMITATION +OF LIABILITY

+

YOU +EXPLICITLY ACKNOWLEDGE, UNDERSTAND AND AGREE THAT EVER CO. LTD AND +OUR SUBSIDIARIES, AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS +AND LICENSORS SHALL NOT BE LIABLE TO YOU FOR ANY PUNITIVE, INDIRECT, +INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES, INCLUDING, +BUT NOT LIMITED TO, DAMAGES WHICH MAY BE RELATED TO THE LOSS OF ANY +PROFITS, GOODWILL, USE, DATA AND/OR OTHER INTANGIBLE LOSSES, EVEN +THOUGH WE MAY HAVE BEEN ADVISED OF SUCH POSSIBILITY THAT SAID DAMAGES +MAY OCCUR, AND RESULT FROM:

+

a) THE +USE OR INABILITY TO USE OUR SERVICE; +

+

b) THE +COST OF PROCURING SUBSTITUTE GOODS AND SERVICES;

+

c) UNAUTHORIZED +ACCESS TO OR THE ALTERATION OF YOUR TRANSMISSIONS AND/OR DATA; +

+

d) STATEMENTS +OR CONDUCT OF ANY SUCH THIRD PARTY ON OUR SERVICE; +

+

e) AND +ANY OTHER MATTER WHICH MAY BE RELATED TO OUR SERVICE.

+

RELEASE

+

In +the event you have a dispute, you agree to release EVER CO. LTD (and +its officers, directors, employees, agents, parent subsidiaries, +affiliates, co-branders, partners and any other third parties) from +claims, demands and damages (actual and consequential) of every kind +and nature, known and unknown, suspected or unsuspected, disclosed +and undisclosed, arising out of or in any way connected to such +dispute.

+

SPECIAL +ADMONITION RELATED TO FINANCIAL MATTERS

+

Should +you intend to create or to join any service, receive or request any +such news, messages, alerts or other information from our Services +concerning companies, stock quotes, investments or securities, please +review the above Sections Warranty Disclaimers and Limitations of +Liability again. In addition, for this particular type of +information, the phrase "Let the investor beware" is +appropriate. EVER CO. LTD's content is provided primarily for +informational purposes, and no content that shall be provided or +included in our Services is intended for trading or investing +purposes. EVER CO. LTD and our licensors shall not be responsible or +liable for the accuracy, usefulness or availability of any +information transmitted and/or made available by way of our Services, +and shall not be responsible or liable for any trading and/or +investment decisions based on any such information.

+

EXCLUSION +AND LIMITATIONS

+

THERE +ARE SOME JURISDICTIONS WHICH DO NOT ALLOW THE EXCLUSION OF CERTAIN +WARRANTIES OR THE LIMITATION OF EXCLUSION OF LIABILITY FOR INCIDENTAL +OR CONSEQUENTIAL DAMAGES. THEREFORE, SOME OF THE ABOVE LIMITATIONS OF +SECTIONS WARRANTY DISCLAIMERS AND LIMITATION OF LIABILITY MAY NOT +APPLY TO YOU.

+

THIRD +PARTY BENEFICIARIES

+

You +herein acknowledge, understand and agree, unless otherwise expressly +provided in this TOS, that there shall be no third-party +beneficiaries to this agreement.

+

NOTICE

+

EVER +CO. LTD may furnish you with notices, including those with regards to +any changes to the TOS, including but not limited to email, regular +mail, MMS or SMS, text messaging, postings on our website Services, +or other reasonable means currently known or any which may be herein +after developed. Any such notices may not be received if you violate +any aspects of the TOS by accessing our Services in an unauthorized +manner. Your acceptance of this TOS constitutes your agreement that +you are deemed to have received any and all notices that would have +been delivered had you accessed our Services in an authorized manner.

+

You +may receive text messages (SMS / MMS / Push Notifications) from or on +behalf of EVER as a part of the EVER Services at the cell phone +number(s) provided by you to EVER, and you consent to receiving such +text messages.

+

TRADEMARK +INFORMATION

+

You +herein acknowledge, understand and agree that all of the EVER CO. LTD +trademarks, copyright, trade name, service marks, and other EVER CO. +LTD logos and any brand features, and/or product and service names +are trademarks and as such, are and shall remain the property of EVER +CO. LTD. You herein agree not to display and/or use in any manner the +EVER CO. LTD logo or marks without obtaining EVER CO. LTD's prior +written consent.

+

COPYRIGHT +OR INTELLECTUAL PROPERTY INFRINGEMENT CLAIMS NOTICE & PROCEDURES

+

EVER +CO. LTD will always respect the intellectual property of others, and +we ask that all of our users do the same. With regards to appropriate +circumstances and at its sole discretion, EVER CO. LTD may disable +and/or terminate the accounts of any user who violates our TOS and/or +infringes the rights of others. If you feel that your work has been +duplicated in such a way that would constitute copyright +infringement, or if you believe your intellectual property rights +have been otherwise violated, you should provide to us the following +information:

+

a) The +electronic or the physical signature of the individual that is +authorized on behalf of the owner of the copyright or other +intellectual property interest;

+

b) A +description of the copyrighted work or other intellectual property +that you believe has been infringed upon;

+

c) A +description of the location of the site which you allege has been +infringing upon your work;

+

d) Your +physical address, telephone number, and email address;

+

e) A +statement, in which you state that the alleged and disputed use of +your work is not authorized by the copyright owner, its agents or the +law;

+

f) And +finally, a statement, made under penalty of perjury, that the +aforementioned information in your notice is truthful and accurate, +and that you are the copyright or intellectual property owner, +representative or agent authorized to act on the copyright or +intellectual property owner's behalf.

+

The +EVER CO. LTD Agent for notice of claims of copyright or other +intellectual property infringement can be contacted as follows:

+

Mailing +Address:

+

EVER +CO. LTD +

+

Attn: +Copyright Agent

+

HaAtsmaut +38/3

+

Ashdod +77452,

+

Israel

+

Email: + ever@ever.co

+

CLOSED +CAPTIONING

+

BE +IT KNOWN, that EVER CO. LTD complies with all applicable Federal +Communications Commission rules and regulations regarding the closed +captioning of video content. For more information, please visit our +website at ever.co.

+

GENERAL +INFORMATION

+

ENTIRE +AGREEMENT +

+

This +TOS constitutes the entire agreement between you and EVER CO. LTD and +shall govern the use of our Services, superseding any prior version +of this TOS between you and us with respect to EVER CO. LTD Services. +You may also be subject to additional terms and conditions that may +apply when you use or purchase certain other EVER CO. LTD Services, +affiliate Services, third-party content or third-party software.

+

CHOICE +OF LAW AND FORUM

+

It +is at the mutual agreement of both you and EVER CO. LTD with regard +to the TOS that the relationship between the parties shall be +governed by the laws of Israel without regard to its conflict of law +provisions and that any and all claims, causes of action and/or +disputes, arising out of or relating to the TOS, or the relationship +between you and EVER CO. LTD, shall be filed within the courts having +jurisdiction within the Israel. You and EVER CO. LTD agree to submit +to the jurisdiction of the courts as previously mentioned, and agree +to waive any and all objections to the exercise of jurisdiction over +the parties by such courts and to venue in such courts.

+

WAIVER +AND SEVERABILITY OF TERMS

+

At +any time, should EVER CO. LTD fail to exercise or enforce any right +or provision of the TOS, such failure shall not constitute a waiver +of such right or provision. If any provision of this TOS is found by +a court of competent jurisdiction to be invalid, the parties +nevertheless agree that the court should endeavor to give effect to +the parties' intentions as reflected in the provision, and the other +provisions of the TOS remain in full force and effect.

+

NO +RIGHT OF SURVIVORSHIP NON-TRANSFERABILITY

+

You +acknowledge, understand and agree that your account is +non-transferable and any rights to your ID and/or contents within +your account shall terminate upon your death. Upon receipt of a copy +of a death certificate, your account may be terminated and all +contents therein permanently deleted.

+

STATUTE +OF LIMITATIONS

+

You +acknowledge, understand and agree that regardless of any statute or +law to the contrary, any claim or action arising out of or related to +the use of our Services or the TOS must be filed within 1 year(s) +after said claim or cause of action arose or shall be forever barred.

+

VIOLATIONS

+

Please +report any and all violations of this TOS to EVER CO. LTD as follows:

+

Mailing +Address:

+

EVER +CO. LTD

+

HaAtsmaut +38/3

+

Ashdod +77452,

+

Israel

+

Email: + ever@ever.co

+

CHANGES

+

We +reserve the right, at our sole discretion, to modify or replace these +Terms at any time. If a revision is material we will try to provide +at least 30 (change this) days' notice prior to any new terms taking +effect. +

+

What +constitutes a material change will be determined at our sole +discretion.

+

By +continuing to access or use our Service after those revisions become +effective, you agree to be bound by the revised terms.

+

If +you do not agree to the new terms, please stop using the Service

+

CONTACT +US

+

If +you have any questions about these Terms, please contact us:

+

Mailing +Address:

+

EVER +CO. LTD

+

HaAtsmaut +38/3

+

Ashdod +77452,

+

Israel

+

Email: + ever@ever.co

+

+

+

+

DIGITAL +MILLENNIUM COPYRIGHT ACT (DMCA) INFRINGEMENT NOTICE AND POLICY

+

Notifications

+

If +you believe that content available on or through the EVER Apps and / +or Website infringes one or more of your copyrights, please +immediately notify our Copyright Agent by mail, email or faxed notice +(“Notification”) providing the information described below, which +Notification is pursuant to DMCA 17 U.S.C. § 512(c)(3). A copy of +your Notification will be sent to the person who posted or stored the +material addressed in the Notification. Please be advised that +pursuant to federal law you may be held liable for damages if you +make material misrepresentations in a Notification. Thus, if you are +not sure that content located on or linked to by the Apps and / or +Website infringes your copyright, you should consider first +contacting an attorney. Company has a policy of terminating repeat +infringers in appropriate circumstances.

+

All +Notifications should include the following:

+

A +physical or electronic signature of a person authorized to act on +behalf of the owner of an exclusive right that is allegedly +infringed.

+

Identification +of the copyrighted work claimed to have been infringed, or, if +multiple copyrighted works at a single online website are covered by +a single notification, a representative list of such works at that +website.

+

Identification +of the material that is claimed to be infringing or to be the subject +of infringing activity and that is to be removed or access to which +is to be disabled, and information reasonably sufficient to permit +Company to locate the material.

+

Information +reasonably sufficient to permit the Company to contact the +complaining party, such as an address, telephone number, and, if +available, an electronic mail address at which the complaining party +may be contacted.

+

A +statement that the complaining party has a good faith belief that use +of the material in the manner complained of is not authorized by the +copyright owner, its agent, or the law.

+

A +statement that the information in the notification is accurate, and +under penalty of perjury, that the complaining party is authorized to +act on behalf of the owner of an exclusive right that is allegedly +infringed.

+

Notifications +should be sent to our Copyright Agent as follows:

+

Copyright +Agent

+

EVER +CO. LTD

+

HaAtsmaut +38/3

+

Ashdod +77452,

+

Israel

+

Email: + dmca@ever.co

+



+

+ +
+ +
diff --git a/packages/core/res/templates/user_products_placeholder.json b/packages/core/res/templates/user_products_placeholder.json index 247039ab5..7c7a34526 100644 --- a/packages/core/res/templates/user_products_placeholder.json +++ b/packages/core/res/templates/user_products_placeholder.json @@ -1,14 +1,8 @@ { + "fr-FR": { + "no_products_text": "Aucun produit a acheter pour l'instant" + }, "en-US": { "no_products_text": "Nothing to buy for now." - }, - "he-IL": { - "no_products_text": "אין שום דבר לקנות כרגע." - }, - "ru-RU": { - "no_products_text": "Нет ничего для покупки." - }, - "bg-BG": { - "no_products_text": "Нищо за купуване за сега." } } diff --git a/packages/core/res/views/about_us_fr.hbs b/packages/core/res/views/about_us_fr.hbs new file mode 100644 index 000000000..eaa2f4de0 --- /dev/null +++ b/packages/core/res/views/about_us_fr.hbs @@ -0,0 +1 @@ +{{> about_us/fr-FR }} \ No newline at end of file diff --git a/packages/core/res/views/index.hbs b/packages/core/res/views/index.hbs index 471b2ca36..bdcac49e2 100644 --- a/packages/core/res/views/index.hbs +++ b/packages/core/res/views/index.hbs @@ -1,8 +1,8 @@ -

Ever API

+

Bellem API

-

Copyright © 2016-present, Ever Co. LTD. All Rights Reserved.
+

Copyright © 2020, Bellem. All Rights Reserved.

-
EVER® is a registered trademark of Ever Co. LTD.
+
BELLEM® is a registered trademark of Bellem.
All other trademarks © to respective owners. We are in α (alpha). Please be nice!
\ No newline at end of file diff --git a/packages/core/res/views/layouts/main.hbs b/packages/core/res/views/layouts/main.hbs index ccde2b7e7..a90cc88e3 100644 --- a/packages/core/res/views/layouts/main.hbs +++ b/packages/core/res/views/layouts/main.hbs @@ -1,12 +1,12 @@ + - Ever API + Bellem API + -{{{body}}} + {{{body}}} - + + \ No newline at end of file diff --git a/packages/core/res/views/privacy_fr.hbs b/packages/core/res/views/privacy_fr.hbs new file mode 100644 index 000000000..caa8f84ba --- /dev/null +++ b/packages/core/res/views/privacy_fr.hbs @@ -0,0 +1 @@ +{{> privacy/fr-FR }} \ No newline at end of file diff --git a/packages/core/res/views/terms_of_use_fr.hbs b/packages/core/res/views/terms_of_use_fr.hbs new file mode 100644 index 000000000..bf244e775 --- /dev/null +++ b/packages/core/res/views/terms_of_use_fr.hbs @@ -0,0 +1 @@ +{{> terms_of_use/en-US }} diff --git a/packages/core/src/env.ts b/packages/core/src/env.ts index efde06294..2f0bc105e 100644 --- a/packages/core/src/env.ts +++ b/packages/core/src/env.ts @@ -73,7 +73,7 @@ export const env: Env = cleanEnv( { NODE_ENV: str({ choices: ['production', 'development', 'test'], - default: 'development', + default: 'production', }) as ValidatorSpec, WEB_CONCURRENCY: num({ default: 1 }), @@ -89,7 +89,7 @@ export const env: Env = cleanEnv( LOGS_PATH: str({ default: './tmp/logs' }), - DB_URI: str({ default: 'mongodb://localhost/ever_development' }), + DB_URI: str({ default: 'mongodb://localhost/bellem_production' }), TESTING_DB_URI: str({ default: 'mongodb://localhost/ever_testing' }), STRIPE_SECRET_KEY: str({ default: '' }), @@ -104,7 +104,9 @@ export const env: Env = cleanEnv( KEYMETRICS_SECRET_KEY: str({ default: '' }), KEYMETRICS_PUBLIC_KEY: str({ default: '' }), - GOOGLE_APP_ID: str({ default: '' }), + GOOGLE_APP_ID: str({ + default: 'AIzaSyDudKVRLfNoQFm9JFvGQkGfdxZAbgqXLDE', + }), GOOGLE_APP_SECRET: str({ default: '' }), FACEBOOK_APP_ID: str({ default: '' }), @@ -152,9 +154,9 @@ export const env: Env = cleanEnv( IP_STACK_API_KEY: str({ default: '' }), LOG_LEVEL: str({ choices: ['trace', 'debug', 'info', 'warn', 'error', 'fatal'], - default: 'error', + default: 'debug', }), - ENGINE_API_KEY: str({ + APOLLO_KEY: str({ desc: 'Apollo Engine Key (optional, see https://www.apollographql.com/docs/platform/schema-registry)', default: '', diff --git a/packages/core/src/graphql/orders/order.resolver.ts b/packages/core/src/graphql/orders/order.resolver.ts index 1471d04c8..006f2520b 100644 --- a/packages/core/src/graphql/orders/order.resolver.ts +++ b/packages/core/src/graphql/orders/order.resolver.ts @@ -18,6 +18,13 @@ import _ from 'lodash'; import { ObjectId } from 'bson'; import { FakeOrdersService } from '../../services/fake-data/FakeOrdersService'; +export type OrdersFilterModes = + | 'ready' + | 'in_delivery' + | 'not_confirmed' + | 'cancelled' + | 'all'; + @Resolver('Order') export class OrderResolver { constructor( diff --git a/packages/core/src/services/invites/InvitesRequestsService.ts b/packages/core/src/services/invites/InvitesRequestsService.ts index 744ad1b98..f5c21be29 100644 --- a/packages/core/src/services/invites/InvitesRequestsService.ts +++ b/packages/core/src/services/invites/InvitesRequestsService.ts @@ -274,71 +274,52 @@ export class InvitesRequestsService extends DBService case 'en-US': return { android: { - title: 'Ever just launched!', + title: 'Bellem just launched!', alert: 'Click to see some available products.', extra: { event: launched, invite: JSON.stringify(invite), }, }, - ios: { - alert: 'Ever just launched at your address. Have fun!', - extra: { - event: launched, - invite: JSON.stringify(invite), - }, - }, - }; - case 'ru-RU': - return { - android: { - title: 'Ever только что запустился!', - alert: 'Кликните чтобы увидить доступные продукты.', - extra: { - event: launched, - invite: JSON.stringify(invite), - }, - }, ios: { alert: - 'Ever тольуо что запустился по Вашему адресу. Удачи!', + 'Bellem just launched at your address. Have fun!', extra: { event: launched, invite: JSON.stringify(invite), }, }, }; - case 'bg-BG': + case 'fr-FR': return { android: { - title: 'Ever стартира!', - alert: 'Кликнете, за да видите някои налични продукти.', + title: 'Bellem est lance!', + alert: 'Click pour voir les produits disponibles.', extra: { event: launched, invite: JSON.stringify(invite), }, }, ios: { - alert: 'Ever стартира на вашия адрес. Забавлявай се!', + alert: 'Bellem commence a votre addresse. prefitez-en!', extra: { event: launched, invite: JSON.stringify(invite), }, }, }; - case 'he-IL': default: return { android: { - title: 'הושקנו בכתובת שלך!', - alert: 'תלחץ כדי לצפות במוצרים!', + title: 'Bellem est lance!', + alert: 'Click pour voir les produits disponibles.', extra: { event: launched, invite: JSON.stringify(invite), }, }, ios: { - alert: 'Ever הושק בכתובת שלך! תלחץ כדי לצפות במוצרים!', + alert: 'Bellem commence a votre addresse. prefitez-en!', extra: { event: launched, invite: JSON.stringify(invite), diff --git a/packages/core/src/services/orders/OrdersService.ts b/packages/core/src/services/orders/OrdersService.ts index d3bb6bb64..33a76d9cd 100644 --- a/packages/core/src/services/orders/OrdersService.ts +++ b/packages/core/src/services/orders/OrdersService.ts @@ -29,8 +29,9 @@ import Warehouse, { import OrderStatus from '@modules/server.common/enums/OrderStatus'; import User from '@modules/server.common/entities/User'; import { ProductsService } from '../../services/products'; -import { Observable } from 'rxjs'; import Stripe = require('stripe'); +import IPagingOptions from '@modules/server.common/interfaces/IPagingOptions'; +import { concat, of, Observable } from 'rxjs'; @injectable() @routerName('order') @@ -928,3 +929,86 @@ export class OrdersService extends DBService } } } + +export function getOrdersFingObj(status: string) { + const findObj = { + isDeleted: { $eq: false }, + }; + + switch (status) { + case 'confirmed': + findObj['$and'] = [ + { + warehouseStatus: { + $gt: OrderWarehouseStatus.NoStatus, + }, + }, + { + warehouseStatus: { + $lt: OrderWarehouseStatus.GivenToCustomer, + }, + }, + { + carrierStatus: { + $lte: OrderCarrierStatus.CarrierSelectedOrder, + }, + }, + ]; + findObj['isCancelled'] = false; + break; + case 'in_delivery': + findObj['$and'] = [ + { + carrierStatus: { + $gte: OrderCarrierStatus.CarrierPickedUpOrder, + }, + }, + { + warehouseStatus: { + $lt: OrderWarehouseStatus.AllocationFailed, + }, + }, + { + carrierStatus: { + $lt: OrderCarrierStatus.DeliveryCompleted, + }, + }, + ]; + findObj['isCancelled'] = false; + break; + case 'not_confirmed': + findObj['warehouseStatus'] = OrderWarehouseStatus.NoStatus; + findObj['isCancelled'] = false; + break; + case 'not_paid': + findObj['isPaid'] = false; + break; + case 'cancelled': + findObj['isCancelled'] = true; + break; + case 'relevant': + findObj['$and'] = [ + { + warehouseStatus: { + $gte: OrderWarehouseStatus.NoStatus, + }, + }, + { + warehouseStatus: { + $lt: OrderWarehouseStatus.GivenToCustomer, + }, + }, + { + carrierStatus: { + $lte: OrderCarrierStatus.CarrierSelectedOrder, + }, + }, + ]; + findObj['isCancelled'] = false; + break; + default: + break; + } + + return findObj; +} diff --git a/packages/core/src/services/users/UsersService.ts b/packages/core/src/services/users/UsersService.ts index 55389fc7d..3b6a5e933 100644 --- a/packages/core/src/services/users/UsersService.ts +++ b/packages/core/src/services/users/UsersService.ts @@ -86,15 +86,16 @@ export class UsersService extends DBService protected _storesService: WarehousesService ) { super(); + // TODO: too many hardcoded constants used below. Refactor! this.watchedFiles = _.zipObject( ['aboutUs', 'privacy', 'termsOfUse'], _.map(['about_us', 'privacy', 'terms_of_use'], (folder) => _.zipObject( - ['en-US', 'he-IL', 'ru-RU', 'bg-BG'], - _.map(['en-US', 'he-IL', 'ru-RU', 'bg-BG'], (language) => + ['en-US', 'fr-FR'], + _.map(['en-US', 'fr-FR'], (language) => observeFile( - `${__dirname}/../../../../res/templates/${folder}/${language}.hbs` + `${__dirname}/../../../res/templates/${folder}/${language}.hbs` ).pipe( tap({ error: (err) => this.log.error(err) }), publishReplay(1), @@ -394,10 +395,6 @@ export class UsersService extends DBService switchMap((device) => this.watchedFiles.termsOfUse[device.language]) ); } - @observableListener() - getTermsOfUseByLanguage(selectedLanguage: string): Observable { - return this.watchedFiles.termsOfUse[selectedLanguage]; - } /** * Get Privacy Policy Content (HTML) From bf0c83608e64ade90d671a35d91fcef7e7444216 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 15 Jul 2020 09:21:44 +0100 Subject: [PATCH 02/11] Initial bellem setup --- packages/admin-web-angular/.env.template | 24 ++++++++++++------------ packages/core/.env.template | 10 +++++----- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/admin-web-angular/.env.template b/packages/admin-web-angular/.env.template index 18368aec8..4b781a1cb 100644 --- a/packages/admin-web-angular/.env.template +++ b/packages/admin-web-angular/.env.template @@ -10,30 +10,30 @@ GQL_ENDPOINT=http://localhost:5555/graphql GQL_SUBSCRIPTIONS_ENDPOINT=ws://localhost:5050/subscriptions # Insert below Google Maps API Key and make sure you restrict access to it -GOOGLE_MAPS_API_KEY= +GOOGLE_MAPS_API_KEY=AIzaSyDudKVRLfNoQFm9JFvGQkGfdxZAbgqXLDE -DEFAULT_LATITUDE=42.6459136 -DEFAULT_LONGITUDE=23.3332736 +DEFAULT_LATITUDE=4.094836 +DEFAULT_LONGITUDE=9.743204 NO_INTERNET_LOGO=assets/images/ever-logo.svg MAP_MERCHANT_ICON_LINK=http://maps.google.com/mapfiles/kml/pal3/icon21.png MAP_USER_ICON_LINK=http://maps.google.com/mapfiles/kml/pal3/icon48.png MAP_CARRIER_ICON_LINK=http://maps.google.com/mapfiles/kml/pal4/icon54.png -API_FILE_UPLOAD_URL=https://api.cloudinary.com/v1_1/evereq/upload +API_FILE_UPLOAD_URL=https://api.cloudinary.com/v1_1/bellem/image/upload -COMPANY_NAME=Ever Co. LTD -COMPANY_SITE_LINK=https://ever.co/ -COMPANY_GITHUB_LINK=https://github.com/ever-co -COMPANY_FACEBOOK_LINK=https://www.facebook.com/evercoapp -COMPANY_TWITTER_LINK=https://twitter.com/evercoapp -COMPANY_LINKEDIN_LINK=https://www.linkedin.com/company/ever-co. +COMPANY_NAME=Bellem +COMPANY_SITE_LINK=https://bellem.cm/ +COMPANY_GITHUB_LINK=https://github.com/bellem +COMPANY_FACEBOOK_LINK=https://www.facebook.com/bellemapp +COMPANY_TWITTER_LINK=https://twitter.com/bellemapp +COMPANY_LINKEDIN_LINK=https://www.linkedin.com/company/bellem. GENERATE_PASSWORD_CHARSET=abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_ -CURRENCY_SYMBOL=$ +CURRENCY_SYMBOL=XAF -DEFAULT_LANGUAGE=en-US +DEFAULT_LANGUAGE=fr-FR # For maintenance micro service. Ever maintanance API URL: https://maintenance.ever.co/status SETTINGS_APP_TYPE=admin diff --git a/packages/core/.env.template b/packages/core/.env.template index 7b3ab3e34..a27f5d0e0 100644 --- a/packages/core/.env.template +++ b/packages/core/.env.template @@ -12,7 +12,7 @@ HTTPS_KEY_PATH=certificates/https/key.pem LOGS_PATH=./tmp/logs -DB_URI=mongodb://localhost/ever_development +DB_URI=mongodb://localhost/bellem_production TESTING_DB_URI=mongodb://localhost/ever_testing STRIPE_SECRET_KEY=[SOME SORT OF STRING KEY] @@ -27,7 +27,7 @@ KEYMETRICS_MACHINE_NAME=[MACHINE NAME] KEYMETRICS_SECRET_KEY=[SOME SORT OF STRING KEY] KEYMETRICS_PUBLIC_KEY=[SOME SORT OF STRING KEY] -GOOGLE_APP_ID=[SOME SORT OF STRING KEY] +GOOGLE_APP_ID=AIzaSyDudKVRLfNoQFm9JFvGQkGfdxZAbgqXLDE GOOGLE_APP_SECRET=[SOME SORT OF STRING KEY] FACEBOOK_APP_ID=[SOME SORT OF STRING KEY] @@ -52,9 +52,9 @@ ARCGIS_CLIENT_SECRET=[SOME SORT OF STRING SECRET] WEB_MEMORY=4096 WEB_CONCURRENCY=1 -IP_STACK_API_KEY=[IP_STACK_SERVICE_API_KEY_VALUE] +IP_STACK_API_KEY=c115255dc3f1f188b12ffef127e23235 -LOG_LEVEL= trace|debug|info|warn|error|fatal +LOG_LEVEL= debug # Apollo Engine Key (optional, see https://www.apollographql.com/docs/platform/schema-registry) -ENGINE_API_KEY=service:XXXXX:XXXXXXXX \ No newline at end of file +APOLLO_KEY=service:bellem:I8bX9IyDhyU8joncCymf-g \ No newline at end of file From d54d8e9095885abfdf849bb953bdc2019d7f0c7e Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 15 Jul 2020 09:25:34 +0100 Subject: [PATCH 03/11] Initial bellem setup --- packages/admin-web-angular/.env.template | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/admin-web-angular/.env.template b/packages/admin-web-angular/.env.template index 4b781a1cb..d62677c8a 100644 --- a/packages/admin-web-angular/.env.template +++ b/packages/admin-web-angular/.env.template @@ -4,10 +4,10 @@ # Don't forget to update scripts/*.ts and src/environments/*.ts on changes! -HTTPS_SERVICES_ENDPOINT=https://localhost:5501 -SERVICES_ENDPOINT=http://localhost:5500 -GQL_ENDPOINT=http://localhost:5555/graphql -GQL_SUBSCRIPTIONS_ENDPOINT=ws://localhost:5050/subscriptions +HTTPS_SERVICES_ENDPOINT=https://bellem.cm:5501 +SERVICES_ENDPOINT=http://bellem.cm:5500 +GQL_ENDPOINT=http://bellem.cm:5555/graphql +GQL_SUBSCRIPTIONS_ENDPOINT=ws://bellem.cm:5050/subscriptions # Insert below Google Maps API Key and make sure you restrict access to it GOOGLE_MAPS_API_KEY=AIzaSyDudKVRLfNoQFm9JFvGQkGfdxZAbgqXLDE From 9f75c614d9dde7ca3e1336fb2a8024e5100311c7 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 15 Jul 2020 12:05:25 +0100 Subject: [PATCH 04/11] =setup: Initial bellem setup --- packages/common-angular/src/routers/user-router.service.ts | 7 +++++++ packages/common/src/routers/IOrderRouter.ts | 2 -- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/common-angular/src/routers/user-router.service.ts b/packages/common-angular/src/routers/user-router.service.ts index 4616cb3cc..c9c56adb7 100644 --- a/packages/common-angular/src/routers/user-router.service.ts +++ b/packages/common-angular/src/routers/user-router.service.ts @@ -76,6 +76,13 @@ export class UserRouter implements IUserRouter { ); } + getTermsOfUseByLanguage(selectedLanguage: string): Observable { + return this.router.runAndObserve( + 'getTermsOfUseByLanguage', + selectedLanguage + ); + } + getPrivacy(userId: string, deviceId: string): Observable { return this.router.runAndObserve( 'getPrivacy', diff --git a/packages/common/src/routers/IOrderRouter.ts b/packages/common/src/routers/IOrderRouter.ts index 3f38d1879..cf0a9512b 100644 --- a/packages/common/src/routers/IOrderRouter.ts +++ b/packages/common/src/routers/IOrderRouter.ts @@ -15,8 +15,6 @@ interface IOrderRouter { options?: IOrderRouterGetOptions ): Observable; - getOrders(options?: IOrderRouterGetOptions): Observable; - confirm(orderId: Order['id']): Promise; updateCarrierStatus( From f2d4a9c249f995a7e097537918b1d74ee3fa3734 Mon Sep 17 00:00:00 2001 From: Bellem Date: Wed, 15 Jul 2020 15:32:31 +0200 Subject: [PATCH 05/11] change ES2015 to ES5 --- packages/admin-web-angular/package.json | 48 ++++++++++++------------ packages/admin-web-angular/tsconfig.json | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/admin-web-angular/package.json b/packages/admin-web-angular/package.json index f29083cce..8fad0ff63 100644 --- a/packages/admin-web-angular/package.json +++ b/packages/admin-web-angular/package.json @@ -35,30 +35,30 @@ "IE 11" ], "scripts": { - "config": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn ts-node -P tsconfig.commonjs.json ./scripts/configure.ts", - "ng:dev": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn ng", - "ng:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=4096 yarn ng", - "conventional-changelog": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 conventional-changelog", - "config:dev": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config -- --environment=dev", - "config:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=4096 yarn run config -- --environment=prod", - "start": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && ng serve", - "start:server:prod": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run build:prod && node --harmony ./dist/out-tsc/app.js", - "start:server:pm2": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=4096 yarn run build:prod && node --harmony ./dist/out-tsc/packages/admin-web-angular/src/pm2bootstrap.js", - "build": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && yarn ng:dev build && yarn tsc", - "build:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=4096 yarn run config:prod && yarn ng:prod build -- --prod --aot=false --build-optimizer=false && yarn tsc", - "test": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && ng:dev test", - "test:coverage": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && rimraf coverage && yarn run test -- --code-coverage", - "lint": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && ng:dev lint", - "lint:fix": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && ng:dev lint ever-admin --fix", - "lint:styles": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && stylelint ./src/**/*.scss", - "lint:ci": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && yarn run lint && yarn run lint:styles", - "pree2e": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && webdriver-manager update --standalone false --gecko false", - "e2e": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && ng e2e", - "docs": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && compodoc -p src/tsconfig.app.json -d docs", - "docs:serve": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && compodoc -p src/tsconfig.app.json -d docs -s", - "release:changelog": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && yarn run conventional-changelog -- -p angular -i CHANGELOG.md -s", - "storybook": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && start-storybook -p 9001 -c .storybook", - "build-storybook": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 yarn run config:dev && build-storybook -c .storybook" + "config": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn ts-node -P tsconfig.commonjs.json ./scripts/configure.ts", + "ng:dev": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn ng", + "ng:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=8192 yarn ng", + "conventional-changelog": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 conventional-changelog", + "config:dev": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config -- --environment=dev", + "config:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=8192 yarn run config -- --environment=prod", + "start": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && ng serve", + "start:server:prod": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run build:prod && node --harmony ./dist/out-tsc/app.js", + "start:server:pm2": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=8192 yarn run build:prod && node --harmony ./dist/out-tsc/packages/admin-web-angular/src/pm2bootstrap.js", + "build": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && yarn ng:dev build && yarn tsc", + "build:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=8192 yarn run config:prod && yarn ng:prod build -- --prod --aot=false --build-optimizer=false && yarn tsc", + "test": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && ng:dev test", + "test:coverage": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && rimraf coverage && yarn run test -- --code-coverage", + "lint": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && ng:dev lint", + "lint:fix": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && ng:dev lint ever-admin --fix", + "lint:styles": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && stylelint ./src/**/*.scss", + "lint:ci": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && yarn run lint && yarn run lint:styles", + "pree2e": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && webdriver-manager update --standalone false --gecko false", + "e2e": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && ng e2e", + "docs": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && compodoc -p src/tsconfig.app.json -d docs", + "docs:serve": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && compodoc -p src/tsconfig.app.json -d docs -s", + "release:changelog": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && yarn run conventional-changelog -- -p angular -i CHANGELOG.md -s", + "storybook": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && start-storybook -p 9001 -c .storybook", + "build-storybook": "cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=8192 yarn run config:dev && build-storybook -c .storybook" }, "dependencies": { "@agm/core": "^1.1.0", diff --git a/packages/admin-web-angular/tsconfig.json b/packages/admin-web-angular/tsconfig.json index 06187e258..72b1b6b16 100644 --- a/packages/admin-web-angular/tsconfig.json +++ b/packages/admin-web-angular/tsconfig.json @@ -4,7 +4,7 @@ "compilerOptions": { "outDir": "./dist/out-tsc", "module": "commonjs", - "target": "es2015", + "target": "es5", "baseUrl": "./src", "experimentalDecorators": true, "types": ["node", "reflect-metadata", "googlemaps", "jasmine"], From ff9441506eaff3d0c339e4514abf18a1316043af Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 15 Jul 2020 14:57:38 +0100 Subject: [PATCH 06/11] translate to french WAREHOUSES_VIEW.SHOW_ON_MAP --- packages/admin-web-angular/src/assets/i18n/fr-FR.json | 1 + packages/admin-web-angular/src/assets/i18n/fr.json | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/admin-web-angular/src/assets/i18n/fr-FR.json b/packages/admin-web-angular/src/assets/i18n/fr-FR.json index af97e9ee6..1f324a6fa 100644 --- a/packages/admin-web-angular/src/assets/i18n/fr-FR.json +++ b/packages/admin-web-angular/src/assets/i18n/fr-FR.json @@ -198,6 +198,7 @@ "DELETE_WAREHOUSES": "Supprimer la Sélection", "DELETE": "SUPPRIMER", "CREATE": "CREER", + "SHOW_ON_MAP": "Montrer sur la carte", "SMART_TABLE_COLUMNS": { "IMAGE": "Image", "NAME": "Prénom", diff --git a/packages/admin-web-angular/src/assets/i18n/fr.json b/packages/admin-web-angular/src/assets/i18n/fr.json index af97e9ee6..1f324a6fa 100644 --- a/packages/admin-web-angular/src/assets/i18n/fr.json +++ b/packages/admin-web-angular/src/assets/i18n/fr.json @@ -198,6 +198,7 @@ "DELETE_WAREHOUSES": "Supprimer la Sélection", "DELETE": "SUPPRIMER", "CREATE": "CREER", + "SHOW_ON_MAP": "Montrer sur la carte", "SMART_TABLE_COLUMNS": { "IMAGE": "Image", "NAME": "Prénom", From 1f341f69bfab22573851d7c97f7a99360e45cef4 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 15 Jul 2020 15:02:20 +0100 Subject: [PATCH 07/11] Hide Orders on sidebar menu --- .../src/app/pages/pages.component.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/admin-web-angular/src/app/pages/pages.component.ts b/packages/admin-web-angular/src/app/pages/pages.component.ts index abc3d8d44..602bf251a 100644 --- a/packages/admin-web-angular/src/app/pages/pages.component.ts +++ b/packages/admin-web-angular/src/app/pages/pages.component.ts @@ -23,12 +23,12 @@ export class PagesComponent { link: '/dashboard', pathMatch: 'prefix', }, - { - title: this.getTranslation('MENU_VIEW.ORDERS'), - icon: 'shopping-bag-outline', - link: '/orders', - pathMatch: 'prefix', - }, + // { + // title: this.getTranslation('MENU_VIEW.ORDERS'), + // icon: 'shopping-bag-outline', + // link: '/orders', + // pathMatch: 'prefix', + // }, { title: this.getTranslation('MENU_VIEW.STORES'), icon: 'home-outline', From 0fac6ca34e8486ccb799bca516d32abf60313669 Mon Sep 17 00:00:00 2001 From: Ngoussong Fonda Date: Thu, 16 Jul 2020 19:13:14 +0100 Subject: [PATCH 08/11] =Mobile app Core update --- packages/common/src/interfaces/ICategory.ts | 10 +++++ .../geo-locations/geo-location.resolver.ts | 27 ++++++++++++ .../geo-locations/geo-locations.graphql | 8 ++++ .../merchants/geo-location-merchants.graphql | 1 + .../geo-location-merchants.resolver.ts | 26 ++++++++++++ .../products-categories.types.graphql | 4 ++ .../GeoLocationsProductsService.ts | 30 ++++++++++++++ .../GeoLocationsWarehousesService.ts | 41 +++++++++++++++++++ .../invites/InvitesRequestsService.ts | 6 +-- 9 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 packages/common/src/interfaces/ICategory.ts diff --git a/packages/common/src/interfaces/ICategory.ts b/packages/common/src/interfaces/ICategory.ts new file mode 100644 index 000000000..723f5e820 --- /dev/null +++ b/packages/common/src/interfaces/ICategory.ts @@ -0,0 +1,10 @@ +// TODO: add other locales + +/* +type ICategory = 'cake' | 'food' | 'mart' | 'pizza' | 'clean' | 'med' | 'me2u' | 'messenger'; + +export default ICategory; +*/ +export default interface ICategory { + name: string; +} diff --git a/packages/core/src/graphql/geo-locations/geo-location.resolver.ts b/packages/core/src/graphql/geo-locations/geo-location.resolver.ts index 869bb1b30..6fb1d128d 100644 --- a/packages/core/src/graphql/geo-locations/geo-location.resolver.ts +++ b/packages/core/src/graphql/geo-locations/geo-location.resolver.ts @@ -52,6 +52,33 @@ export class GeoLocationResolver { searchText ); } + + @Query() + async geoLocationProductsByCategory( + _, + { + geoLocation, + options, + category, + pagingOptions = {}, + searchText + }: { + geoLocation; + options?: IGetGeoLocationProductsOptions; + category?; + pagingOptions; + searchText?: string; + } + ) { + return this.geoLocationsProductsService.geoLocationProductsByCategory( + geoLocation, + category, + pagingOptions, + options, + searchText + ); + } + @Query() async getCountOfGeoLocationProducts( _, diff --git a/packages/core/src/graphql/geo-locations/geo-locations.graphql b/packages/core/src/graphql/geo-locations/geo-locations.graphql index 78e12fb1e..39e1d3411 100644 --- a/packages/core/src/graphql/geo-locations/geo-locations.graphql +++ b/packages/core/src/graphql/geo-locations/geo-locations.graphql @@ -77,6 +77,14 @@ type Query { searchText: String ): [ProductInfo]! + geoLocationProductsByCategory( + geoLocation: GeoLocationFindInput! + category: ProductsCategorySearchInput + pagingOptions: PagingOptionsInput + options: GetGeoLocationProductsOptions + searchText: String + ): [ProductInfo]! + getCountOfGeoLocationProducts( geoLocation: GeoLocationFindInput! options: GetGeoLocationProductsOptions diff --git a/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.graphql b/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.graphql index d7a160e08..8ad2bd5e8 100644 --- a/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.graphql +++ b/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.graphql @@ -1,3 +1,4 @@ type Query { getCoseMerchants(geoLocation: GeoLocationFindInput!): [Warehouse]! + getCloseMerchantsCategory(geoLocation: GeoLocationFindInput!, category: ProductsCategorySearchInput): [Warehouse]! } diff --git a/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.resolver.ts b/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.resolver.ts index d2260bbce..d65d0a998 100644 --- a/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.resolver.ts +++ b/packages/core/src/graphql/geo-locations/merchants/geo-location-merchants.resolver.ts @@ -4,6 +4,7 @@ import IGeoLocation from '@modules/server.common/interfaces/IGeoLocation'; import Warehouse from '@modules/server.common/entities/Warehouse'; import Utils from '@modules/server.common/utils'; import GeoLocation from '@modules/server.common/entities/GeoLocation'; +import ICategory from '@modules/server.common/interfaces/ICategory'; const IN_STORE_DISTANCE = 50; @@ -35,4 +36,29 @@ export class GeoLocationMerchantsResolver { return merchants.map((m) => new Warehouse(m)); } + + @Query('getCloseMerchantsCategory') +async getCloseMerchantsCategory(_, { geoLocation }: { geoLocation: IGeoLocation }, {category}: {category: ICategory} ) { + let merchants = await this.geoLocationsWarehousesService.getCloseMerchantsCategory( + geoLocation, + category, + IN_STORE_DISTANCE, + { fullProducts: false, activeOnly: true } + ); + + merchants = merchants.sort( + (m1, m2) => + Utils.getDistance( + new GeoLocation(m1.geoLocation), + new GeoLocation(geoLocation) + ) - + Utils.getDistance( + new GeoLocation(m2.geoLocation), + new GeoLocation(geoLocation) + ) + ); + + return merchants.map((m) => new Warehouse(m)); +} + } diff --git a/packages/core/src/graphql/products/categories/products-categories.types.graphql b/packages/core/src/graphql/products/categories/products-categories.types.graphql index 4283b550d..28056ec2d 100644 --- a/packages/core/src/graphql/products/categories/products-categories.types.graphql +++ b/packages/core/src/graphql/products/categories/products-categories.types.graphql @@ -7,6 +7,10 @@ type ProductsCategory { _updatedAt: Date } +input ProductsCategorySearchInput { + name: String! +} + input ProductsCategoryInput { _id: String! name: [TranslateInput!] diff --git a/packages/core/src/services/geo-locations/GeoLocationsProductsService.ts b/packages/core/src/services/geo-locations/GeoLocationsProductsService.ts index 980d872b4..5a8374e98 100644 --- a/packages/core/src/services/geo-locations/GeoLocationsProductsService.ts +++ b/packages/core/src/services/geo-locations/GeoLocationsProductsService.ts @@ -26,6 +26,7 @@ import { } from '@modules/server.common/interfaces/IProduct'; import WarehouseProduct from '@modules/server.common/entities/WarehouseProduct'; import { IGetGeoLocationProductsOptions } from 'graphql/geo-locations/geo-location.resolver'; +import ICategory from '@modules/server.common/interfaces/ICategory'; @injectable() @routerName('geo-location-products') @@ -132,6 +133,35 @@ export class GeoLocationsProductsService return products.slice(pagingOptions.skip).slice(0, pagingOptions.limit); } + @asyncListener() + async geoLocationProductsByCategory( + @serialization((g: IGeoLocation) => new GeoLocation(g)) + geoLocation: GeoLocation, + category: ICategory, + pagingOptions, + options?: IGetGeoLocationProductsOptions, + searchText?: string + ): Promise { + const merchants = await this.geoLocationsWarehousesService.getMerchants( + geoLocation, + GeoLocationsWarehousesService.TrackingDistance, + { + fullProducts: true, + activeOnly: true, + merchantsIds: options ? options.merchantIds : null + } + ); + + const products = this._getProductsFromWarehouses( + geoLocation, + merchants.map((m) => new Warehouse(m)), + options, + searchText + ); + + return products.slice(pagingOptions.skip).slice(0, pagingOptions.limit); + } + private _getProductsFromWarehouses( geoLocation: GeoLocation, warehouses: Warehouse[], diff --git a/packages/core/src/services/geo-locations/GeoLocationsWarehousesService.ts b/packages/core/src/services/geo-locations/GeoLocationsWarehousesService.ts index 9af8cfd15..b8a1f35ef 100644 --- a/packages/core/src/services/geo-locations/GeoLocationsWarehousesService.ts +++ b/packages/core/src/services/geo-locations/GeoLocationsWarehousesService.ts @@ -15,6 +15,7 @@ import { asyncListener, } from '@pyro/io'; import IGeoLocation from '@modules/server.common/interfaces/IGeoLocation'; +import ICategory from '@modules/server.common/interfaces/ICategory'; import IGeoLocationWarehousesRouter from '@modules/server.common/routers/IGeoLocationWarehousesRouter'; import IService from '../IService'; import { ExistenceEventType } from '@pyro/db-server'; @@ -175,6 +176,46 @@ export class GeoLocationsWarehousesService return merchants; } + @asyncListener() + async getCloseMerchantsCategory( + geoLocation: IGeoLocation, + category: ICategory, + maxDistance: number, + options: { + fullProducts: boolean; + activeOnly: boolean; + merchantsIds?: string[]; + } + ): Promise { + const merchantsIds = options.merchantsIds; + const merchants = (await this.warehousesService.Model.find( + _.assign( + { + 'geoLocation.loc': { + $near: { + $geometry: { + type: 'Point', + coordinates: geoLocation.loc.coordinates + }, + $maxDistance: maxDistance + } + } + }, + options.activeOnly ? { isActive: true } : {}, + merchantsIds && merchantsIds.length > 0 + ? { + _id: { $in: merchantsIds } + } + : {} + ) + ) + .populate(options.fullProducts ? 'products.product' : '') + .lean() + .exec()) as IWarehouse[]; + + return merchants; + } + /** * Get warehouses available for given location * diff --git a/packages/core/src/services/invites/InvitesRequestsService.ts b/packages/core/src/services/invites/InvitesRequestsService.ts index 744ad1b98..ccb5c1491 100644 --- a/packages/core/src/services/invites/InvitesRequestsService.ts +++ b/packages/core/src/services/invites/InvitesRequestsService.ts @@ -289,11 +289,11 @@ export class InvitesRequestsService extends DBService }, }, }; - case 'ru-RU': + case 'fr-FR': return { android: { - title: 'Ever только что запустился!', - alert: 'Кликните чтобы увидить доступные продукты.', + title: 'BellEm, c est lance!', + alert: 'Cliquez pour voir les produits disponibles.', extra: { event: launched, invite: JSON.stringify(invite), From c566d7166b6ada5a4101ef3d2ad0bf196133d0f8 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 16 Jul 2020 19:43:22 +0100 Subject: [PATCH 09/11] =lang: remove other langs on packages/core/src/services/invites/InvitesRequestsService.ts --- .../invites/InvitesRequestsService.ts | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/packages/core/src/services/invites/InvitesRequestsService.ts b/packages/core/src/services/invites/InvitesRequestsService.ts index ccb5c1491..e253c3e7b 100644 --- a/packages/core/src/services/invites/InvitesRequestsService.ts +++ b/packages/core/src/services/invites/InvitesRequestsService.ts @@ -308,25 +308,6 @@ export class InvitesRequestsService extends DBService }, }, }; - case 'bg-BG': - return { - android: { - title: 'Ever стартира!', - alert: 'Кликнете, за да видите някои налични продукти.', - extra: { - event: launched, - invite: JSON.stringify(invite), - }, - }, - ios: { - alert: 'Ever стартира на вашия адрес. Забавлявай се!', - extra: { - event: launched, - invite: JSON.stringify(invite), - }, - }, - }; - case 'he-IL': default: return { android: { From 5e596f0f52cd51828865325e9712345d1335a15f Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 16 Jul 2020 20:34:42 +0100 Subject: [PATCH 10/11] =lang: fix Ilanguage --- packages/common/src/interfaces/ILanguage.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/common/src/interfaces/ILanguage.ts b/packages/common/src/interfaces/ILanguage.ts index 41a141459..7863b1ff3 100644 --- a/packages/common/src/interfaces/ILanguage.ts +++ b/packages/common/src/interfaces/ILanguage.ts @@ -1,20 +1,14 @@ // TODO: add other locales -type ILanguage = 'he-IL' | 'en-US' | 'ru-RU' | 'bg-BG' | 'es-ES'; +type ILanguage = 'en-US' | 'fr-FR'; export default ILanguage; export enum LanguageCodesEnum { ENGLISH = 'en-US', - HEBREW = 'he-IL', - RUSSIAN = 'ru-RU', - BULGARIAN = 'bg-BG', - SPANISH = 'es-ES', + FRENCH = 'fr-FR', } export enum LanguagesEnum { ENGLISH = 'ENGLISH', - HEBREW = 'HEBREW', - RUSSIAN = 'RUSSIAN', - BULGARIAN = 'BULGARIAN', - SPANISH = 'SPANISH', + FRENCH = 'FRANCAIS', } From 497b2a640fb9553c50ecbfc3c076772fc76d28ec Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 16 Jul 2020 20:51:00 +0100 Subject: [PATCH 11/11] =lang: fix language Core & Admin --- .../basic-info/basic-info-form.component.ts | 23 ++--- .../theme-settings.component.ts | 26 ++---- .../+products/+product/product.component.ts | 10 +-- .../pages/+server-down/server-down.page.ts | 2 +- .../src/locale/product-locales.service.ts | 14 +--- packages/common/src/consts/consts.ts | 4 +- packages/common/src/entities/Currency.ts | 1 + packages/common/src/entities/Order.ts | 83 ++----------------- packages/core/res/views/about_us_bg.hbs | 1 - packages/core/res/views/about_us_fr.hbs | 1 + packages/core/res/views/privacy_bg.hbs | 1 - packages/core/res/views/privacy_fr.hbs | 1 + packages/core/res/views/terms_of_use_bg.hbs | 1 - packages/core/res/views/terms_of_use_fr.hbs | 1 + .../src/graphql/devices/devices.types.graphql | 4 +- packages/core/src/services/services.app.ts | 40 +++------ .../core/src/services/users/UsersService.ts | 4 +- 17 files changed, 49 insertions(+), 168 deletions(-) delete mode 100644 packages/core/res/views/about_us_bg.hbs create mode 100644 packages/core/res/views/about_us_fr.hbs delete mode 100644 packages/core/res/views/privacy_bg.hbs create mode 100644 packages/core/res/views/privacy_fr.hbs delete mode 100644 packages/core/res/views/terms_of_use_bg.hbs create mode 100644 packages/core/res/views/terms_of_use_fr.hbs diff --git a/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts b/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts index d652327bd..c215f0644 100644 --- a/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts +++ b/packages/admin-web-angular/src/app/@shared/product/categories/forms/basic-info/basic-info-form.component.ts @@ -53,7 +53,7 @@ export class BasicInfoFormComponent implements OnInit, AfterViewInit { constructor( private readonly fb: FormBuilder, private readonly _langTranslateService: TranslateService - ) {} + ) { } get image() { return this.form.get('image'); @@ -77,20 +77,11 @@ export class BasicInfoFormComponent implements OnInit, AfterViewInit { case 'en-US': return 'en-US'; - case 'bg-BG': - return 'bg-BG'; - - case 'he-IL': - return 'he-IL'; - - case 'ru-RU': - return 'ru-RU'; - - case 'es-ES': - return 'es-ES'; + case 'fr-FR': + return 'fr-FR'; default: - return 'en-US'; + return 'fr-FR'; } } @@ -113,9 +104,9 @@ export class BasicInfoFormComponent implements OnInit, AfterViewInit { ({ locale, value }) => { return locale === usedLanguage ? { - locale: usedLanguage, - value: this.name.value, - } + locale: usedLanguage, + value: this.name.value, + } : { locale, value }; } ); diff --git a/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts b/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts index be8ab55c0..3f206fb2d 100644 --- a/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts +++ b/packages/admin-web-angular/src/app/@theme/components/theme-settings/theme-settings.component.ts @@ -19,20 +19,8 @@ export class ThemeSettingsComponent { name: 'English', }, { - value: 'bg-BG', - name: 'Bulgarian', - }, - { - value: 'he-IL', - name: 'Hebrew', - }, - { - value: 'ru-RU', - name: 'Russian', - }, - { - value: 'es-ES', - name: 'Spanish', + value: 'fr-FR', + name: 'Francais', }, ]; @@ -64,7 +52,7 @@ export class ThemeSettingsComponent { ]; currentTheme = 'everlight'; - defaultLanguage = ''; + defaultLanguage = 'fr-FR'; constructor( protected stateService: StateService, @@ -73,17 +61,17 @@ export class ThemeSettingsComponent { ) { this.defaultLanguage = environment['DEFAULT_LANGUAGE']; - translate.addLangs(['en-US', 'bg-BG', 'he-IL', 'ru-RU', 'es-ES']); - translate.setDefaultLang('en-US'); + translate.addLangs(['en-US', 'fr-FR']); + translate.setDefaultLang('fr-FR'); const browserLang = translate.getBrowserLang(); if (this.defaultLanguage) { translate.use(this.defaultLanguage); } else { translate.use( - browserLang.match(/en-US|bg-BG|he-IL|ru-RU|es-ES/) + browserLang.match(/en-US|fr-FR/) ? browserLang - : 'en-US' + : 'fr-FR' ); } diff --git a/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts b/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts index 463084f88..30d245927 100644 --- a/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts +++ b/packages/admin-web-angular/src/app/pages/+products/+product/product.component.ts @@ -62,14 +62,8 @@ export class ProductComponent implements OnInit, OnDestroy { switch (langAbbreviation) { case 'en-US': return 'English'; - case 'bg-BG': - return 'Български'; - case 'he-IL': - return 'עברית'; - case 'ru-RU': - return 'Русский'; - case 'es-ES': - return 'Spanish'; + case 'fr-FR': + return 'Francais'; } } diff --git a/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts b/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts index bc22553dc..16a956891 100644 --- a/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts +++ b/packages/admin-web-angular/src/app/pages/+server-down/server-down.page.ts @@ -22,7 +22,7 @@ export class ServerDownPage implements OnDestroy { private serverConnectionService: ServerConnectionService ) { const browserLang = translate.getBrowserLang(); - translate.use(browserLang.match(/en|bg|he|ru/) ? browserLang : 'en-US'); + translate.use(browserLang.match(/en|fr/) ? browserLang : 'fr-FR'); this.noInternetLogo = environment['NO_INTERNET_LOGO']; this.testConnection(); diff --git a/packages/common-angular/src/locale/product-locales.service.ts b/packages/common-angular/src/locale/product-locales.service.ts index 4e975d509..3f476b047 100644 --- a/packages/common-angular/src/locale/product-locales.service.ts +++ b/packages/common-angular/src/locale/product-locales.service.ts @@ -20,7 +20,7 @@ export class ProductLocalesService { public currentLocale: string; - constructor(private readonly _translateService: TranslateService) {} + constructor(private readonly _translateService: TranslateService) { } public get isServiceStateValid() { return ( @@ -103,16 +103,8 @@ export class ProductLocalesService { case 'en-US': translateLang = 'en-US'; break; - case 'he-IL': - translateLang = 'he-IL'; - break; - case 'ru-RU': - translateLang = 'ru-RU'; - break; - case 'bg-BG': - translateLang = 'bg-BG'; - case 'es-ES': - translateLang = 'es-ES'; + case 'fr-FR': + translateLang = 'fr-FR'; break; } return translateLang; diff --git a/packages/common/src/consts/consts.ts b/packages/common/src/consts/consts.ts index 69093bc1c..dd86ef961 100644 --- a/packages/common/src/consts/consts.ts +++ b/packages/common/src/consts/consts.ts @@ -3,9 +3,7 @@ export class Consts { static get langAbbreviations() { return { en: 'en', - bg: 'bg', - he: 'he', - ru: 'ru', + fr: 'fr', }; } } diff --git a/packages/common/src/entities/Currency.ts b/packages/common/src/entities/Currency.ts index 943326eee..71cf5b943 100644 --- a/packages/common/src/entities/Currency.ts +++ b/packages/common/src/entities/Currency.ts @@ -39,4 +39,5 @@ export const countriesDefaultCurrencies = { RU: 'RUB', US: 'USD', BG: 'BGN', + CM: 'XAF', }; diff --git a/packages/common/src/entities/Order.ts b/packages/common/src/entities/Order.ts index 396ad100e..2da08445b 100644 --- a/packages/common/src/entities/Order.ts +++ b/packages/common/src/entities/Order.ts @@ -312,14 +312,8 @@ class Order extends DBObject implements IOrder { switch (language) { case 'en-US': return this._getStatusTextEnglish(); - case 'he-IL': - return this._getStatusTextHebrew(); - case 'ru-RU': - return this._getStatusTextRussian(); - case 'bg-BG': - return this._getStatusTextBulgarian(); - case 'es-ES': - return this._getStatusTextSpanish(); + case 'fr-FR': + return this._getStatusTextFrench(); default: return 'BAD_STATUS'; } @@ -380,85 +374,26 @@ class Order extends DBObject implements IOrder { } } - private _getStatusTextBulgarian(): string { + private _getStatusTextFrench(): string { switch (this.status) { case OrderStatus.WarehousePreparation: - return 'Подготовка'; - case OrderStatus.InDelivery: - return 'Доставя се'; - case OrderStatus.Delivered: - return 'Доставено'; - case OrderStatus.CanceledWhileWarehousePreparation: - case OrderStatus.CanceledWhileInDelivery: - return 'Отказана'; - case OrderStatus.WarehouseIssue: - return 'Проблем при подготовката'; - case OrderStatus.CarrierIssue: - return 'Проблем при доставката'; - default: - return 'Проблем с поръчката'; - } - } - - private _getStatusTextHebrew(): string { - switch (this.status) { - case OrderStatus.WarehousePreparation: - return 'בהכנה'; - case OrderStatus.InDelivery: - return 'במשלוח'; - case OrderStatus.Delivered: - return 'הסתיים בצלחה'; - case OrderStatus.CanceledWhileWarehousePreparation: - case OrderStatus.CanceledWhileInDelivery: - return 'התבטל'; - case OrderStatus.WarehouseIssue: - return 'בעייה בהכנה'; - case OrderStatus.CarrierIssue: - return 'בעייה במשלוח'; - default: - return 'BAD_STATUS'; - } - } - - private _getStatusTextRussian(): string { - switch (this.status) { - case OrderStatus.WarehousePreparation: - return 'В подготовке'; + return 'Preparation'; case OrderStatus.InDelivery: - return 'В доставки'; + return 'In Delivery'; case OrderStatus.Delivered: - return 'Доставлено'; + return 'Delivered'; case OrderStatus.CanceledWhileWarehousePreparation: case OrderStatus.CanceledWhileInDelivery: - return 'Отменено'; + return 'Cancelled'; case OrderStatus.WarehouseIssue: - return 'Проблема с подготовкой'; + return 'Preparation Issue'; case OrderStatus.CarrierIssue: - return 'Проблема с доставкой'; + return 'Delivery Issue'; default: return 'BAD_STATUS'; } } - private _getStatusTextSpanish() { - switch (this.status) { - case OrderStatus.WarehousePreparation: - return 'Preparación'; - case OrderStatus.InDelivery: - return 'En la entrega'; - case OrderStatus.Delivered: - return 'Entregado'; - case OrderStatus.CanceledWhileWarehousePreparation: - case OrderStatus.CanceledWhileInDelivery: - return 'Cancelado'; - case OrderStatus.WarehouseIssue: - return 'Problema de preparación'; - case OrderStatus.CarrierIssue: - return 'Problema de envio'; - default: - return 'BAD_STATUS'; - } - } } export default Order; diff --git a/packages/core/res/views/about_us_bg.hbs b/packages/core/res/views/about_us_bg.hbs deleted file mode 100644 index b9194b67f..000000000 --- a/packages/core/res/views/about_us_bg.hbs +++ /dev/null @@ -1 +0,0 @@ -{{> about_us/bg-BG }} \ No newline at end of file diff --git a/packages/core/res/views/about_us_fr.hbs b/packages/core/res/views/about_us_fr.hbs new file mode 100644 index 000000000..eaa2f4de0 --- /dev/null +++ b/packages/core/res/views/about_us_fr.hbs @@ -0,0 +1 @@ +{{> about_us/fr-FR }} \ No newline at end of file diff --git a/packages/core/res/views/privacy_bg.hbs b/packages/core/res/views/privacy_bg.hbs deleted file mode 100644 index d6bc4f6bc..000000000 --- a/packages/core/res/views/privacy_bg.hbs +++ /dev/null @@ -1 +0,0 @@ -{{> privacy/bg-BG }} diff --git a/packages/core/res/views/privacy_fr.hbs b/packages/core/res/views/privacy_fr.hbs new file mode 100644 index 000000000..caa8f84ba --- /dev/null +++ b/packages/core/res/views/privacy_fr.hbs @@ -0,0 +1 @@ +{{> privacy/fr-FR }} \ No newline at end of file diff --git a/packages/core/res/views/terms_of_use_bg.hbs b/packages/core/res/views/terms_of_use_bg.hbs deleted file mode 100644 index 97cfa507c..000000000 --- a/packages/core/res/views/terms_of_use_bg.hbs +++ /dev/null @@ -1 +0,0 @@ -{{> terms_of_use/bg-BG }} diff --git a/packages/core/res/views/terms_of_use_fr.hbs b/packages/core/res/views/terms_of_use_fr.hbs new file mode 100644 index 000000000..3a78b4794 --- /dev/null +++ b/packages/core/res/views/terms_of_use_fr.hbs @@ -0,0 +1 @@ +{{> terms_of_use/fr-FR }} \ No newline at end of file diff --git a/packages/core/src/graphql/devices/devices.types.graphql b/packages/core/src/graphql/devices/devices.types.graphql index 85f7c2bd6..cc34d0878 100644 --- a/packages/core/src/graphql/devices/devices.types.graphql +++ b/packages/core/src/graphql/devices/devices.types.graphql @@ -54,8 +54,6 @@ type Subscription { } enum Language { - he_IL en_US - ru_RU - bg_BG + fr_FR } diff --git a/packages/core/src/services/services.app.ts b/packages/core/src/services/services.app.ts index 007b4483b..a9030d519 100644 --- a/packages/core/src/services/services.app.ts +++ b/packages/core/src/services/services.app.ts @@ -151,8 +151,8 @@ export class ServicesApp { this.db.close(() => { this.log.info( 'Mongoose default connection with DB :' + - this.db_server + - ' is disconnected through app termination' + this.db_server + + ' is disconnected through app termination' ); process.exit(0); }); @@ -199,16 +199,16 @@ export class ServicesApp { this.db.on('disconnected', () => { this.log.warn( 'Mongoose default connection to DB :' + - this.db_server + - ' disconnected' + this.db_server + + ' disconnected' ); }); this.db.on('connected', () => { this.log.info( 'Mongoose default connection to DB :' + - this.db_server + - ' connected' + this.db_server + + ' connected' ); }); } @@ -570,40 +570,24 @@ export class ServicesApp { res.render('about_us_en'); }); - this.expressApp.get('/he/about', function (req, res) { - res.render('about_us_he'); - }); - - this.expressApp.get('/ru/about', function (req, res) { - res.render('about_us_ru'); + this.expressApp.get('/fr/about', function (req, res) { + res.render('about_us_fr'); }); this.expressApp.get('/en/privacy', function (req, res) { res.render('privacy_en'); }); - this.expressApp.get('/he/privacy', function (req, res) { - res.render('privacy_he'); - }); - - this.expressApp.get('/ru/privacy', function (req, res) { - res.render('privacy_ru'); + this.expressApp.get('/fr/privacy', function (req, res) { + res.render('privacy_fr'); }); this.expressApp.get('/en/terms', function (req, res) { res.render('terms_of_use_en'); }); - this.expressApp.get('/he/terms', function (req, res) { - res.render('terms_of_use_he'); - }); - - this.expressApp.get('/ru/terms', function (req, res) { - res.render('terms_of_use_ru'); - }); - - this.expressApp.get('/bg/terms', function (req, res) { - res.render('terms_of_use_bg'); + this.expressApp.get('/fr/terms', function (req, res) { + res.render('terms_of_use_fr'); }); } diff --git a/packages/core/src/services/users/UsersService.ts b/packages/core/src/services/users/UsersService.ts index 55389fc7d..429c05f58 100644 --- a/packages/core/src/services/users/UsersService.ts +++ b/packages/core/src/services/users/UsersService.ts @@ -91,8 +91,8 @@ export class UsersService extends DBService ['aboutUs', 'privacy', 'termsOfUse'], _.map(['about_us', 'privacy', 'terms_of_use'], (folder) => _.zipObject( - ['en-US', 'he-IL', 'ru-RU', 'bg-BG'], - _.map(['en-US', 'he-IL', 'ru-RU', 'bg-BG'], (language) => + ['en-US', 'fr-FR'], + _.map(['en-US', 'fr-FR'], (language) => observeFile( `${__dirname}/../../../../res/templates/${folder}/${language}.hbs` ).pipe(