diff --git a/.travis.yml b/.travis.yml
index db818fad23..9fd9d0934c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,7 +39,7 @@ before_script:
script:
- 'if [ "$KARMA" = "true" ]; then bundle exec rake karma:run; else echo "Skipping karma run"; fi'
- - 'if [ "$RSPEC_ENGINES" = "true" ]; then bundle exec rake openfoodnetwork:specs:engines:rspec; else echo "Skipping RSpec run in engines"; fi'
+ - 'if [ "$RSPEC_ENGINES" = "true" ]; then bundle exec rake ofn:specs:engines:rspec; else echo "Skipping RSpec run in engines"; fi'
- "bundle exec rake 'knapsack:rspec[--format progress --tag ~performance]'"
after_success:
diff --git a/GETTING_STARTED.md b/GETTING_STARTED.md
index 5a2e7eea54..c30a70c13d 100644
--- a/GETTING_STARTED.md
+++ b/GETTING_STARTED.md
@@ -75,7 +75,7 @@ Then the main application tests can be run with:
The tests of all custom engines can be run with:
- bundle exec rake openfoodnetwork:specs:engines:rspec
+ bundle exec rake ofn:specs:engines:rspec
Note: If your OS is not explicitly supported in the setup guides then not all tests may pass. However, you may still be able to develop. Get in touch with the [#dev][slack-dev] channel on Slack to troubleshoot issues and determine if they will preclude you from contributing to OFN.
diff --git a/app/assets/javascripts/admin/product_import/controllers/import_form_controller.js.coffee b/app/assets/javascripts/admin/product_import/controllers/import_form_controller.js.coffee
index 95e6a67a5d..174d0049d9 100644
--- a/app/assets/javascripts/admin/product_import/controllers/import_form_controller.js.coffee
+++ b/app/assets/javascripts/admin/product_import/controllers/import_form_controller.js.coffee
@@ -10,6 +10,7 @@ angular.module("admin.productImport").controller "ImportFormCtrl", ($scope, $htt
$scope.updated_ids = []
$scope.update_errors = []
+ $scope.batchSize = 50
$scope.step = 'settings'
$scope.chunks = 0
$scope.completed = 0
@@ -51,19 +52,28 @@ angular.module("admin.productImport").controller "ImportFormCtrl", ($scope, $htt
$scope.start = () ->
$scope.started = true
total = ams_data.item_count
- size = 50
- $scope.chunks = Math.ceil(total / size)
+ $scope.chunks = Math.ceil(total / $scope.batchSize)
- i = 0
+ # Process only the first batch.
+ $scope.processBatch($scope.step, 0, $scope.chunks)
- while i < $scope.chunks
- start = (i*size)+1
- end = (i+1)*size
- if $scope.step == 'import'
- $scope.processImport(start, end)
- if $scope.step == 'save'
- $scope.processSave(start, end)
- i++
+ $scope.processBatch = (step, batchIndex, batchCount) ->
+ start = (batchIndex * $scope.batchSize) + 1
+ end = (batchIndex + 1) * $scope.batchSize
+ isLastBatch = batchCount == batchIndex + 1
+
+ promise = if step == 'import'
+ $scope.processImport(start, end)
+ else if step == 'save'
+ $scope.processSave(start, end)
+
+ return if isLastBatch
+
+ processNextBatch = ->
+ $scope.processBatch(step, batchIndex + 1, batchCount)
+
+ # Process next batch whether or not processing of the current batch succeeds.
+ promise.then(processNextBatch, processNextBatch)
$scope.processImport = (start, end) ->
$http(
diff --git a/config/locales/de_DE.yml b/config/locales/de_DE.yml
index 7ef494a65a..d7be5d5a81 100644
--- a/config/locales/de_DE.yml
+++ b/config/locales/de_DE.yml
@@ -7,6 +7,7 @@ de_DE:
shipment_state: Lieferstatus
completed_at: Erfolgt am
number: Nummer
+ state: Status
email: E-Mail des Kunden
spree/payment:
amount: Betrag
@@ -2591,8 +2592,6 @@ de_DE:
display_as:
display_as: Darstellen als
reports:
- table:
- select_and_search: "Wählen Sie Filter und klicken Sie auf SEARCH, um auf Ihre Daten zuzugreifen."
bulk_coop:
bulk_coop_supplier_report: 'Massen-Kooperative - Summen nach Anbieter'
bulk_coop_allocation: 'Massenkoop - Zuteilung'
diff --git a/config/locales/en_BE.yml b/config/locales/en_BE.yml
index 15c4dd2415..15f2ee4f8f 100644
--- a/config/locales/en_BE.yml
+++ b/config/locales/en_BE.yml
@@ -7,6 +7,7 @@ en_BE:
shipment_state: Shipment State
completed_at: Completed At
number: Number
+ state: State
email: Customer E-Mail
spree/payment:
amount: Amount
@@ -2599,8 +2600,6 @@ en_BE:
display_as:
display_as: Display As
reports:
- table:
- select_and_search: "Select filters and click on SEARCH to access your data."
bulk_coop:
bulk_coop_supplier_report: 'Bulk Co-op - Totals by Supplier'
bulk_coop_allocation: 'Bulk Co-op - Allocation'
diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml
index 11fad53128..bd4793017b 100644
--- a/config/locales/en_GB.yml
+++ b/config/locales/en_GB.yml
@@ -7,6 +7,7 @@ en_GB:
shipment_state: Shipment State
completed_at: Completed At
number: Number
+ state: County
email: Customer E-Mail
spree/payment:
amount: Amount
@@ -2036,6 +2037,8 @@ en_GB:
order_cycles: "Order Cycles"
enterprise_relationships: "Enterprise permissions"
remove_tax: "Remove tax"
+ first_name_begins_with: "First name begins with"
+ last_name_begins_with: "Surname begins with"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
enterprise_tos_link_text: "Terms of Service."
@@ -2445,6 +2448,11 @@ en_GB:
orders:
index:
per_page: "%{results} per page"
+ view_file: View File
+ compiling_invoices: Compiling Invoices
+ bulk_invoice_created: Bulk Invoice created
+ bulk_invoice_failed: Failed to create Bulk Invoice
+ please_wait: Please wait until the PDF is ready before closing this window.
resend_user_email_confirmation:
resend: "Resend"
sending: "Resend..."
@@ -2547,6 +2555,7 @@ en_GB:
no_orders_found: "No Orders Found"
results_found: "%{number} Results found."
viewing: "Viewing %{start} to %{end}."
+ print_invoices: "Print Invoices"
invoice:
issued_on: Issued on
tax_invoice: TAX INVOICE
diff --git a/config/locales/en_US.yml b/config/locales/en_US.yml
index 4da7c84c1f..da6d82eddd 100644
--- a/config/locales/en_US.yml
+++ b/config/locales/en_US.yml
@@ -7,6 +7,7 @@ en_US:
shipment_state: Shipment State
completed_at: Completed At
number: Number
+ state: State
email: Customer E-mail
spree/payment:
amount: Amount
@@ -475,6 +476,8 @@ en_US:
inventory_no_permission: you do not have permission to create inventory for this producer
none_saved: did not save any products successfully
line_number: "Line %{number}:"
+ encoding_error: "Please check the language setting of your source file and ensure it is saved with UTF-8 encoding"
+ unexpected_error: "Product Import encountered an unexpected error when opening the file: %{error_message}"
index:
select_file: Select a spreadsheet to upload
spreadsheet: Spreadsheet
@@ -2034,6 +2037,8 @@ en_US:
order_cycles: "Order Cycles"
enterprise_relationships: "Enterprise permissions"
remove_tax: "Remove tax"
+ first_name_begins_with: "First name begins with"
+ last_name_begins_with: "Last name begins with"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
enterprise_tos_link_text: "Terms of Service."
@@ -2437,6 +2442,11 @@ en_US:
orders:
index:
per_page: "%{results} per page"
+ view_file: View File
+ compiling_invoices: Compiling Invoices
+ bulk_invoice_created: Bulk Invoice created
+ bulk_invoice_failed: Failed to create Bulk Invoice
+ please_wait: Please wait until the PDF is ready before closing this window.
resend_user_email_confirmation:
resend: "Resend"
sending: "Resend..."
@@ -2539,6 +2549,7 @@ en_US:
no_orders_found: "No Orders Found"
results_found: "%{number} Results found."
viewing: "Viewing %{start} to %{end}."
+ print_invoices: "Print Invoices"
invoice:
issued_on: Issued on
tax_invoice: TAX INVOICE
@@ -2618,7 +2629,7 @@ en_US:
display_as: Display As
reports:
table:
- select_and_search: "Select filters and click on SEARCH to access your data."
+ select_and_search: "Select filters and click on %{option} to access your data."
bulk_coop:
bulk_coop_supplier_report: 'Bulk Co-op - Totals by Supplier'
bulk_coop_allocation: 'Bulk Co-op - Allocation'
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 61f0bf86ad..489cb0684c 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -7,6 +7,7 @@ es:
shipment_state: Estado del envío
completed_at: Completado en
number: Número
+ state: Provincia
email: E-mail del consumidor
spree/payment:
amount: Cantidad
@@ -2623,8 +2624,6 @@ es:
display_as:
display_as: Mostrar como
reports:
- table:
- select_and_search: "Selecciona filtros y haz clic en BUSCAR para acceder a tus datos."
bulk_coop:
bulk_coop_supplier_report: 'Bulk Co-op - Totales por Proveedor'
bulk_coop_allocation: 'Bulk Co-op - Asignación'
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index dd3116b7e2..eb434d850e 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -7,6 +7,7 @@ fr:
shipment_state: Statut livraison
completed_at: 'Passée à '
number: N° commande
+ state: Département
email: Email acheteur
spree/payment:
amount: Montant
@@ -475,6 +476,8 @@ fr:
inventory_no_permission: vous n'avez pas l'autorisation d'ajouter les produits de ce producteur à votre catalogue boutique
none_saved: n'a pu sauvegarder aucun produit :-(
line_number: "Ligne %{number} :"
+ encoding_error: "Veuillez vérifier le paramètre de langue de votre code source et vous assurer qu'il est encodé en UTF-8"
+ unexpected_error: "L'import de fichier produits à rencontré une erreur inconnue à l'ouverture du fichier : %{error_message}"
index:
select_file: Sélectionner le fichier (tableur sous format csv) à importer
spreadsheet: Tableur csv
@@ -2035,6 +2038,8 @@ fr:
order_cycles: "Cycles de Vente"
enterprise_relationships: "Permissions inter-entreprises"
remove_tax: "Retirer TVA"
+ first_name_begins_with: "Prénom commence par"
+ last_name_begins_with: "Nom de famille commence par"
enterprise_tos_link: "Lien vers les Conditions Générales d'Utilisation"
enterprise_tos_message: "Nous soutenons la mise en place d'un système alimentaire résilient et durable, et souhaitons œuvrer avec des entreprises qui partagent nos valeurs et notre vision. Ainsi, nous demandons aux entreprises s'enregistrant sur Open Food France de valider nos "
enterprise_tos_link_text: "Conditions d'utilisation"
@@ -2448,6 +2453,11 @@ fr:
orders:
index:
per_page: "%{results} par page"
+ view_file: Voir le fichier
+ compiling_invoices: Compilation des factures en cours
+ bulk_invoice_created: Facture compilée générée
+ bulk_invoice_failed: Échec dans la compilation des factures
+ please_wait: Veuillez attendre que le PDF soit prêt avant de fermer cette fenêtre.
resend_user_email_confirmation:
resend: "Renvoyer"
sending: "Renvoi...."
@@ -2551,6 +2561,7 @@ fr:
no_orders_found: "Aucune commande trouvée pour ces critères"
results_found: "%{number} résultats trouvés"
viewing: "Résultats %{start} à %{end} affichés."
+ print_invoices: "Imprimer les factures"
invoice:
issued_on: Editée le
tax_invoice: FACTURE
@@ -2630,7 +2641,7 @@ fr:
display_as: Unité affichéé
reports:
table:
- select_and_search: "Sélectionnez les filtres et cliquez sur RECHERCHER pour accéder à vos données."
+ select_and_search: "Sélectionner les filtres et cliquez sur %{option} pour accéder aux données."
bulk_coop:
bulk_coop_supplier_report: 'Achats groupés - Totaux par Producteur'
bulk_coop_allocation: 'Achats groupés - Allocation'
diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml
index 7b9bbfeae4..c5cfc0054f 100644
--- a/config/locales/fr_BE.yml
+++ b/config/locales/fr_BE.yml
@@ -7,6 +7,7 @@ fr_BE:
shipment_state: Statut livraison
completed_at: 'Passée à '
number: N° commande
+ state: Province
email: Adresse électronique acheteur
spree/payment:
amount: Montant
@@ -2616,8 +2617,6 @@ fr_BE:
display_as:
display_as: Unité affichéé
reports:
- table:
- select_and_search: "Sélectionnez les filtres et cliquez sur RECHERCHER pour accéder à vos données."
bulk_coop:
bulk_coop_supplier_report: 'Achats groupés - Totaux par Producteur'
bulk_coop_allocation: 'Achats groupés - Allocation'
diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml
index 6d4a26aa40..cf2a74f12c 100644
--- a/config/locales/fr_CA.yml
+++ b/config/locales/fr_CA.yml
@@ -7,6 +7,7 @@ fr_CA:
shipment_state: Statut de la livraison
completed_at: 'Passée à '
number: N° commande
+ state: Département
email: Email acheteur
spree/payment:
amount: Montant
@@ -24,6 +25,11 @@ fr_CA:
attributes:
orders_close_at:
after_orders_open_at: doit être après la date d'ouverture
+ variant_override:
+ count_on_hand:
+ using_producer_stock_settings_but_count_on_hand_set: "doit être vide car utilise les informations de stock du producteur"
+ on_demand_but_count_on_hand_set: "doit être vide si \"à volonté\""
+ limited_stock_but_no_count_on_hand: "doit être spécifié car pas \"à volonté\""
activemodel:
errors:
models:
@@ -55,6 +61,7 @@ fr_CA:
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Un message avec un lien de confirmation a été envoyé à l'adresse email indiquée. Veuillez cliquer sur ce lien pour activer votre compte."
+ unknown_error: "Une erreur s'est glissée lors de la création de votre compte. Vérifiez votre addresse email et recommencez."
failure:
invalid: |
Email / mot de passe incorrect.
@@ -195,6 +202,7 @@ fr_CA:
admin_and_handling: Admin et gestion
profile: Profil
supplier_only: Uniquement Fournisseur
+ has_shopfront: gère une boutique
weight: Poids
volume: Volume
items: Pièces
@@ -216,6 +224,10 @@ fr_CA:
quantity: Quantité
pick_up: Retrait
copy: Copier
+ password_confirmation: Confirmation de mot de passe
+ reset_password_token: La demande de réinitialisation du mot de passe
+ expired: a expiré, veuillez faire une nouvelle demande.
+ back_to_payments_list: "Retour à la liste des paiements"
actions:
create_and_add_another: "Créer et ajouter nouveau"
admin:
@@ -459,10 +471,14 @@ fr_CA:
conditional_blank: Champ obligatoire si le type d'unité est vide
no_product: 'aucun produit trouvé '
not_found: n'a pas été trouvé dans la base de donnée
+ not_updatable: ne peut pas être mis à jour pour des produits existants via la fonctionnalité d'import de fichier produits
blank: Champ obligatoire
products_no_permission: vous n'avez pas les droits requis pour gérer les produits de cette entreprise
inventory_no_permission: Vous n'avez pas la permission de créer un catalogue boutique pour ce producteur
none_saved: n'a pu sauvegarder aucun produit :-(
+ line_number: "Ligne :%{number}"
+ encoding_error: "Veuillez vérifier le paramètre de langue de votre code source et vous assurer qu'il est encodé en UTF-8"
+ unexpected_error: "L'import de fichier produits à rencontré une erreur inconnue à l'ouverture du fichier : %{error_message}"
index:
select_file: Sélectionner une feuille de calcul à uploader
spreadsheet: Feuille de calcul
@@ -496,6 +512,7 @@ fr_CA:
no_permission: vous n'avez pas les droits requis pour gérer les produits de cette entreprise
not_found: entreprise non trouvée dans la base de donnée
no_name: Pas de nom
+ blank_enterprise: certains produits n'ont pas d'entreprise associée
reset_absent?: Mettre à zéro le produits absents du fichier
reset_absent_tip: Remettre le sock à zero pour les produits non présents dans le fichier.
overwrite_all: Modifier tous
@@ -515,6 +532,11 @@ fr_CA:
inventory_to_reset: Les produits du catalogue boutique auront leurs stocks remis à zéro
line: Ligne
item_line: 'Ligne produit '
+ import_review:
+ not_updatable_tip: "Les champs suivants ne peuvent pas être mis à jour pour des produits existants via la fonctionnalité d'import de fichier produits :"
+ fields_ignored: Ces champs seront ignorés à l'enregistrement des produits importés.
+ entries_table:
+ not_updatable: Ce champs ne peut pas être mis à jour pour des produits existants via la fonctionnalité d'import de fichier produits
save_results:
final_results: 'Importer les derniers résultats '
products_created: Produits crées
@@ -561,6 +583,7 @@ fr_CA:
tip: "Utilisez cette page pour changer les quantités d'un produit sur plusieurs commandes. Les produits peuvent aussi être supprimés de toutes les commandes, si nécessaire."
shared: "Ressource partagée?"
order_no: "N° commande"
+ order_date: "Passée le"
max: "Max"
product_unit: "Produit: Unité"
weight_volume: "Poids/Volume"
@@ -702,7 +725,9 @@ fr_CA:
close_date: Date de fermeture
social:
twitter_placeholder: ex. @OpenFoodNet_fr
+ instagram_placeholder: ex. @OpenFoodNet_fr
facebook_placeholder: 'ex: www.facebook.com/NomDeLaPage'
+ linkedin_placeholder: 'ex: www.linkedin.com/VotreNom'
stripe_connect:
connect_with_stripe: "Connecter avec Stripe"
stripe_connect_intro: "Pour accepter des paiements utilisant la carte bancaire, vous devez connecter votre compte Stripe à Open Food Network. Cliquez sur le bouton à droite pour commencer."
@@ -1142,7 +1167,9 @@ fr_CA:
menu_5_title: "A propos"
menu_5_url: "http://www.openfoodnetwork.org"
menu_6_title: "Se connecter"
+ menu_6_url: "https://openfoodnetwork.org/au/connect/"
menu_7_title: "Apprendre"
+ menu_7_url: "https://openfoodnetwork.org/au/learn/"
logo: "Logo (640x130)"
logo_mobile: "Logo smartphone (75x26)"
logo_mobile_svg: "Logo smartphone (SVG)"
@@ -2011,6 +2038,8 @@ fr_CA:
order_cycles: "Cycles de Vente"
enterprise_relationships: "Permissions Inter-entreprises"
remove_tax: "Retirer taxe"
+ first_name_begins_with: "Prénom commence par"
+ last_name_begins_with: "Nom de famille commence par"
enterprise_tos_link: "Lien vers les Conditions Générales d'Utilisation"
enterprise_tos_message: "Nous soutenons la mise en place d'un système alimentaire résilient et durable, et souhaitons œuvrer avec des entreprises qui partagent nos valeurs et notre vision. Ainsi, nous demandons aux entreprises s'enregistrant sur Open Food Network de valider nos "
enterprise_tos_link_text: "Conditions d'utilisation"
@@ -2225,6 +2254,7 @@ fr_CA:
validation_msg_relationship_already_established: "^Un lien est déjà établi."
validation_msg_at_least_one_hub: "^Sélectionnez au moins un hub"
validation_msg_product_category_cant_be_blank: "^Veuillez sélectionner la catégorie produit"
+ validation_msg_tax: "^La TVA applicable est requise"
validation_msg_tax_category_cant_be_blank: "^Veuillez sélectionner le type de taxe"
validation_msg_is_associated_with_an_exising_customer: "est associé à un acheteur existant"
content_configuration_pricing_table: "(A FAIRE : Tableau des tarifs)"
@@ -2420,6 +2450,14 @@ fr_CA:
resolve: Résoudre
new_tag_rule_dialog:
select_rule_type: "Choisir le type de règle:"
+ orders:
+ index:
+ per_page: " %{results}par page"
+ view_file: Voir le fichier
+ compiling_invoices: Compilation des factures en cours
+ bulk_invoice_created: Facture compilée générée
+ bulk_invoice_failed: Échec dans la compilation des factures
+ please_wait: Veuillez attendre que le PDF soit prêt avant de fermer cette fenêtre.
resend_user_email_confirmation:
resend: "Renvoyer"
sending: "Renvoyer"
@@ -2438,6 +2476,7 @@ fr_CA:
'yes': "A volonté"
variant_overrides:
on_demand:
+ use_producer_settings: "Utiliser les infos de stock producteur"
'yes': "Oui"
'no': "Non"
inventory_products: "Produits du Catalogue Boutique"
@@ -2508,11 +2547,21 @@ fr_CA:
inherits_properties_checkbox_hint: "Hériter des propriétés de %{supplier}? (non applicable si information de remplacement déjà saisie)"
orders:
index:
+ listing_orders: "Liste des commandes"
+ new_order: "Nouvelle commande"
capture: "Payée"
ship: "Expédier"
edit: "Modifier"
+ note: "Note"
+ first: "Début"
+ last: "Fin"
+ previous: "Précédent"
next: "Suivant"
+ loading: "Chargement en cours"
no_orders_found: "Aucune commande trouvée"
+ results_found: " %{number}résultats trouvés"
+ viewing: "Résultats %{start} à %{end}affichés."
+ print_invoices: "Imprimer les factures"
invoice:
issued_on: Editée le
tax_invoice: FACTURE
@@ -2534,6 +2583,12 @@ fr_CA:
other: "Vous avez %{count} cycles de vente actifs."
manage_order_cycles: "GERER LES CYCLES DE VENTE"
payment_methods:
+ new:
+ new_payment_method: "Nouvelle méthode de paiement"
+ back_to_payment_methods_list: "Retour à la liste des méthodes de paiement"
+ edit:
+ editing_payment_method: "Modification de la méthode de paiement"
+ back_to_payment_methods_list: "Retour à la liste des méthodes de paiement"
stripe_connect:
enterprise_select_placeholder: Choisir...
loading_account_information_msg: Informations de compte en cours de chargement depuis Stripe, veuillez patienter...
@@ -2586,7 +2641,7 @@ fr_CA:
display_as: Unité affichéé
reports:
table:
- select_and_search: "Sélectionner les filtres et cliquez sur RECHERCHER pour accéder aux données."
+ select_and_search: "Sélectionner les filtres et cliquez sur %{option}pour accéder aux données."
bulk_coop:
bulk_coop_supplier_report: 'Achats groupés - Totaux par Producteur'
bulk_coop_allocation: 'Achats groupés - Allocation'
@@ -2594,14 +2649,21 @@ fr_CA:
bulk_coop_customer_payments: 'Achats groupés - Paiement des acheteurs'
users:
index:
+ listing_users: "Liste des utilisateurs"
+ new_user: "Nouvel utilisateur"
user: "Utilisateur"
enterprise_limit: "Nombre max d'entreprises"
search: "Chercher"
email: "Email"
+ edit:
+ editing_user: "Modifier l'utilisateur"
+ back_to_users_list: "Retour à la liste utilisateurs"
+ general_settings: "Configurations générales"
form:
email: "Email"
roles: "Roles"
enterprise_limit: "Nombre max d'entreprises"
+ confirm_password: "Confirmez votre mot de passe"
password: "Mot de passe"
email_confirmation:
confirmation_pending: "L'email de confirmation n'a pas encore été validé. Il a été envoyé à %{address}."
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 1e4e5b1d8d..ddb3185edc 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -7,6 +7,7 @@ it:
shipment_state: Stato della spedizione
completed_at: Completo al
number: Numero
+ state: Stato
email: Mail consumatore
spree/payment:
amount: Quantità
@@ -18,10 +19,17 @@ it:
attributes:
email:
taken: "Esiste già un account con questa email. Ti preghiamo di effettuare il login o impostare una nuova password."
+ spree/order:
+ no_card: Non ci sono carte di credito autorizzate disponibili per l'addebito
order_cycle:
attributes:
orders_close_at:
after_orders_open_at: deve essere dopo la data di apertura
+ variant_override:
+ count_on_hand:
+ using_producer_stock_settings_but_count_on_hand_set: "deve restare vuoto perché si stanno utilizzando le impostazioni di magazzino del produttore"
+ on_demand_but_count_on_hand_set: "deve restare vuoto se su richiesta"
+ limited_stock_but_no_count_on_hand: "Torna alla lista dei pagamenti"
activemodel:
errors:
models:
@@ -38,27 +46,34 @@ it:
not_coordinated_by_shop: "non è coordinato da %{shop}"
payment_method:
not_available_to_shop: "non è disponibile al %{shop}"
+ invalid_type: "Il metodo dev'essere Cash o Stripe"
+ charges_not_allowed: "L'addebito su carta di credito non è consentito da questo consumatore"
+ no_default_card: "Nessuna carta predefinita è consentita per questo consumatore"
shipping_method:
not_available_to_shop: "non è disponibile al %{shop}"
devise:
confirmations:
- send_instructions: "Riceverai entro qualche minuto un'email con le istruzioni utili a confermare il tuo account."
+ send_instructions: "A breve riceverai un'email con le istruzioni utili a confermare il tuo account."
failed_to_send: "C'è stato un errore nell'invio della tua mail di conferma."
- resend_confirmation_email: "Re-invia mail di conferma"
+ resend_confirmation_email: "Re-invia la mail di conferma"
confirmed: "Grazie per aver confermato la tua mail! Ora puoi effettuare il log in."
not_confirmed: "Il tuo indirizzo email non può essere confermato. Forse avevi già completato questo passaggio?"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Abbiamo inviato un link di conferma al tuo indirizzo email. Per favore apri il link per attivare il tuo account."
+ unknown_error: "Qualcosa è andato storto durante la creazione del tuo account. Controlla il tuo indirizzo e-mail e riprova"
failure:
invalid: |
Email o password non valida.
La volta scorsa eri ospite? Forse devi creare un account o resettare la tua password.
unconfirmed: "Devi confermare il tuo account prima di continuare."
- already_registered: "Questo indirizzo email è già registrato. Per favore effettua il log in per continuare, otorna indietro ed utilizza un altro indirizzo email."
+ already_registered: "Questo indirizzo email è già registrato. Per favore effettua il log in per continuare, o torna indietro e utilizza un altro indirizzo email."
user_passwords:
spree_user:
updated_not_active: "La tua password è stata resettata, ma la tua email non è ancora stata confermata."
+ models:
+ order_cycle:
+ cloned_order_cycle_name: "COPIA DI %{order_cycle}"
enterprise_mailer:
confirmation_instructions:
subject: "Per favore conferma l'indirizzo email per %{enterprise}"
@@ -66,18 +81,35 @@ it:
subject: "%{enterprise} è ora su %{sitename}"
invite_manager:
subject: "%{enterprise} ti a invitato ad essere un referente"
+ order_mailer:
+ cancel_email:
+ dear_customer: "Caro consumatore,"
+ instructions: "Il tuo ordine è stato CANCELLATO. Conserva le informazioni della cancellazione "
+ order_summary_canceled: "Riepilogo dell'ordine [CANCELLATO]"
+ subject: "Cancellazione dell'ordine"
+ subtotal: "Subtotale: %{subtotal}"
+ total: "Totale ordine: %{total}"
producer_mailer:
order_cycle:
- subject: "Resoconto ciclo di richieste per %{producer}"
+ subject: "Resoconto degli ordini per %{producer}"
+ shipment_mailer:
+ shipped_email:
+ dear_customer: "Caro consumatore,"
+ instructions: "Il tuo ordine è stato spedito"
+ shipment_summary: "Riepilogo della spedizione"
+ subject: "Avviso di spedizione"
+ thanks: "Grazie per utilizzare la piattaforma per il tuo commercio"
+ track_information: "Informazioni di tracciamento"
+ track_link: "Link del tracciamento"
subscription_mailer:
placement_summary_email:
- subject: Un riassunto delle gentili richieste recenti
+ subject: Riassunto degli ordini più recenti
greeting: "Ciao %{name},"
- intro: "Qui sotto un riassunto delle gentili richieste che sono state confermate per %{shop}."
+ intro: "Qui sotto un riassunto degli ordini appena inviati per%{shop} ,"
confirmation_summary_email:
- subject: Un riassunto delle gentile richieste recentemente confermate
+ subject: Riassunto delle richieste recentemente confermate
greeting: "Ciao %{name},"
- intro: "Qui sotto un riassunto delle gentili richieste che hai appena confermato per %{shop}."
+ intro: "Qui sotto un riassunto delle richieste che hai appena confermato per %{shop}."
summary_overview:
total: Un totale di %{count} abbonamenti sono stati contrassegnati per l'elaborazione automatica..
success_zero: Di questi, nessuno è stato modificato con successo
@@ -100,7 +132,7 @@ it:
explainer: L'elaborazione automatica di questi ordini è fallita a causa di un errore. L'errore è stato segnalato dove possibile.
failed_payment:
title: Pagamento non riuscito (%{count} gentili richieste)
- explainer: L'elaborazione automatica del pagamento per queste gentili richieste non è riuscito a causa di un errore. L'errore è stato segnalato dove possibile.
+ explainer: L'elaborazione automatica del pagamento per queste richieste non è riuscito a causa di un errore. L'errore è stato segnalato dove possibile.
other:
title: Altro errore (%{count} gentili richieste)
explainer: L'elaborazione automatica di queste gentili richieste non è riuscita per una ragione sconosciuta. Questo non dovrebbe accadere, ti preghiamo di contattarci se visualizzi questo messaggio.
@@ -130,14 +162,14 @@ it:
free: "gratuito"
free_trial: "Prova gratuita"
plus_tax: "più IVA"
- min_bill_turnover_desc: "dopo the il ricambio ha superato il %{mbt_amount}"
+ min_bill_turnover_desc: "dopo che il ricambio ha superato il %{mbt_amount}"
more: "Di più"
say_no: "No"
say_yes: "Sì"
then: poi
ongoing: Attivo
bill_address: Indirizzo di fatturazione
- ship_address: Indirizzo consegna
+ ship_address: Indirizzo di consegna
sort_order_cycles_on_shopfront_by: "Ordina cicli d'ordine in vetrina per"
required_fields: I campi obbligatori sono contrassegnati con un asterisco
select_continue: Seleziona e continua
@@ -159,6 +191,7 @@ it:
enterprise_groups: Gruppi
reports: Resoconti
variant_overrides: Inventario
+ spree_products: Prodotti Spree
all: Tutti
current: Attuali
available: Disponibile
@@ -168,6 +201,7 @@ it:
admin_and_handling: Admin
profile: Profilo
supplier_only: Solo per i fornitori
+ has_shopfront: Informazioni di tracciamento
weight: Peso
volume: Volume
items: Prodotti
@@ -178,6 +212,7 @@ it:
'no': "No"
y: 'SI'
n: 'NO'
+ powered_by: Powered by
blocked_cookies_alert: "Il tuo browser sembra stia bloccando i cookies necessari ad usare questa pagina del negozio. Clicca sotto per consentire i cookies e ricaricare la pagina."
allow_cookies: "Accetta i cookies"
notes: Note
@@ -188,6 +223,10 @@ it:
quantity: Quantità
pick_up: Ritiro
copy: Copia
+ password_confirmation: 'Conferma password '
+ reset_password_token: Token per il reset della password
+ expired: è scaduto, si prega di richiederne uno nuovo
+ back_to_payments_list: "Torna alla lista dei pagamenti"
actions:
create_and_add_another: "Crea e aggiungi un altro"
admin:
@@ -223,6 +262,7 @@ it:
volume: Volume
items: Prodotti
select_all: Seleziona tutto
+ obsolete_master: Master obsoleto
quick_search: Ricerca veloce
clear_all: Cancella tutto
start_date: "Data di inizio"
@@ -248,14 +288,32 @@ it:
unsaved_confirm_leave: "Ci sono cambiamenti non salvati in questa pagina. Continuare senza salvare?"
unsaved_changes: "Hai modifiche non salvate"
accounts_and_billing_settings:
+ method_settings:
+ default_accounts_payment_method: "Metodo di pagamento prestabilito"
+ default_accounts_shipping_method: "Metodo di spedizione prestabilito"
edit:
+ accounts_and_billing: "Conti e Fatturazione"
+ accounts_administration_distributor: "Conti di amministrazione del distributore"
admin_settings: "Impostazioni"
update_invoice: "Aggiorna fatture"
auto_update_invoices: "Auto-aggiorna le fatture all'1:00 di notte"
+ finalise_invoice: "Chiudere le fatture"
+ auto_finalise_invoices: "Chiudere automaticamente le fatture il 2° giorno di ogni mese alle 1:30 am"
+ manually_run_task: "Esecuzione manuale dell'attività "
+ update_user_invoice_explained: "Utilizza questo pulsante per aggiornare adesso le fatture del mese corrente per ogni azienda del sistema. Questa operazione può essere programmata per essere eseguita automaticamente ogni notte."
+ finalise_user_invoices: "Chiudi la fattura dell'utente"
+ finalise_user_invoice_explained: "Utilizza questo pulsante per chiudere tutte le fatture del sistema riferite al mese scorso. Questa operazione può essere programmata per essere eseguita automaticamente"
+ update_user_invoices: "Aggiorna le Fatture utente"
+ errors:
+ accounts_distributor: dev'essere selezionato se desideri generare fatture per imprese
+ default_payment_method: dev'essere selezionato se desideri generare fatture per imprese
+ default_shipping_method: dev'essere selezionato se desideri generare fatture per imprese
shopfront_settings:
embedded_shopfront_settings: "Impostazioni di vetrina incorporate"
enable_embedded_shopfronts: "Disabilita Vetrine incorporata"
+ embedded_shopfronts_whitelist: "Whitelist dei domini esterni"
number_localization:
+ number_localization_settings: "Settaggi del Numero di Localizzazione"
enable_localized_number: "Usa la logica internazionale di separazione migliaia/decimali"
business_model_configuration:
edit:
@@ -263,19 +321,50 @@ it:
business_model_configuration_tip: "Configura la tariffa mensile per i negozi per l'utilizzo di Open Food Network"
bill_calculation_settings: "Impostazioni di calcolo pagamento"
bill_calculation_settings_tip: "Modifica la tariffa mensile per l'utilizzo di OFN"
+ shop_trial_length: "Durata della prova negozio (Giorni)"
+ shop_trial_length_tip: "Durata del tempo (in giorni) in cui le aziende impostate come negozio possono operare come periodo di prova."
+ fixed_monthly_charge: "Tariffa fissa mensile"
+ fixed_monthly_charge_tip: "Un importo fisso mensile per le aziende impostate come negozio che superano il volume di affari minimo (se stabilito)."
+ percentage_of_turnover: "Percentuale del fatturato"
+ monthly_cap_excl_tax: "Tetto mensile (excl. GST)"
+ tax_rate: "Aliquota d'imposta"
+ cap_reached?: "Limite raggiunto?"
+ included_tax: "Tasse incluse"
cache_settings:
show:
+ title: Immagazzinando
distributor: Distributore
order_cycle: Ciclo d'ordine
status: Stato
+ diff: Diff
error: Errore
invoice_settings:
edit:
title: Impostazioni fatturazione
+ enable_receipt_printing?: Visualizzo le opzioni per stampare la ricevuta usando la stampante termica nel menù a cascata?
stripe_connect_settings:
edit:
+ title: "Stripe Connect"
settings: "Impostazioni"
+ stripe_connect_enabled: Consentire ai negozi di accettare pagamenti utilizzando Stripe Connect?
+ no_api_key_msg: Non esiste un account Stripe per questa azienda.
+ configuration_explanation_html: Per istruzioni dettagliate sulla configurazione dell'integrazione di Stripe Connect, consultare questa guida..
status: Stato
+ ok: Ok
+ instance_secret_key: Codice segreto dell'istanza
+ account_id: Account ID
+ business_name: Ragione sociale
+ charges_enabled: Cambi Consentiti
+ charges_enabled_warning: "Attenzione: I cambi non sono consentiti per il tuo account"
+ auth_fail_error: La chiave API fornita non è valida
+ empty_api_key_error_html: Non è stata fornita alcuna chiave API Stripe. Per impostare la tua chiave API, segui queste istruzioni
+ matomo_settings:
+ edit:
+ title: "Impostazioni Matomo"
+ matomo_url: "URL Matomo"
+ matomo_site_id: "Site ID Matomo"
+ info_html: "Matomo è una Web and Mobile Analytics. È possibile ospitare Matomo in sede o utilizzare un servizio cloud. Vedi matomo.org per maggiori informazionimatomo.org for more information."
+ config_instructions_html: "Qui è possibile configurare l'integrazione OFN Matomo. L'URL di Matomo qui sotto dovrebbe puntare l'istanza di Matomo a cui saranno inviate le informazioni di monitoraggio dell'utente; se lasciato vuoto, il monitoraggio dell'utente da parte di Matomo sarà disabilitato. Il campo Site ID non è obbligatorio ma è utile se si sta tracciando più di un sito web su una singola istanza di Matomo; si può trovare sulla console dell'istanza di Matomo. "
customers:
index:
add_customer: "Aggiungi cliente"
@@ -320,11 +409,18 @@ it:
fee_type: Tipo di tariffa
name: Nome
tax_category: Categoria d'imposta
- calculator: Calcolatore
+ calculator: Calcolatrice
+ calculator_values: Valori della Calcolatrice
enterprise_groups:
index:
new_button: Nuovo gruppo di aziende
+ enterprise_roles:
+ form:
+ manages: gestisci
+ enterprise_role:
+ manages: gestiscono
products:
+ unit_name_placeholder: 'es. grappoli'
index:
unit: Unità
display_as: Visualizza come
@@ -337,9 +433,14 @@ it:
upload_an_image: Carica un'immagine
product_search_keywords: Cerca prodotto per parole chiave
product_search_tip: Digita le parole che possono aiutare a trovare i tuoi prodotti nei negozi. Usa lo spazio per separare ciascuna parola chiave.
- SEO_keywords: Parole chiave
+ SEO_keywords: SEO Keywords
seo_tip: Digita le parole che possono aiutare a trovare i tuoi prodotti nel web. Usa lo spazio per separare ciascuna parola chiave.
Search: Cerca
+ properties:
+ property_name: Nome della Proprietà
+ inherited_property: Proprietà Ereditata
+ variants:
+ to_order_tip: "Gli articoli messi in ordine non hanno un livello di stock impostato, come ad esempio il Pane fresco su ordinazione."
product_distributions: "Distribuzione prodotti"
group_buy_options: "Opzioni Acquisti di gruppo"
back_to_products_list: "Indietro alla lista dei prodotti"
@@ -352,19 +453,23 @@ it:
no_file: "errore: nessun documento caricato"
could_not_process: "non è stato possibile elaborare il documento: tipo di documento non valido"
incorrect_value: valore scorretto
+ conditional_blank: non può essere vuoto se unit_type è vuoto
no_product: Non corrisponde a nessun prodotto nel database
not_found: non trovato nel database
+ not_updatable: non può essere aggiornato sui prodotti esistenti tramite l'importazione dei prodotti
blank: non può essere lasciato vuoto
products_no_permission: non sei abilitato a gestire i prodotti per questa azienda
inventory_no_permission: non sei abilitato a creare l'inventario per questo produttore
none_saved: Nessun prodotto salvato con successo
+ line_number: "Linea %{number}:"
+ encoding_error: "Controlla l'impostazione della lingua del file sorgente e assicurati che sia salvato con la codifica UTF-8."
index:
select_file: Seleziona un foglio di calcolo da caricare
spreadsheet: Foglio di calcolo
choose_import_type: Seleziona modalità di importazione
- import_into: ipo di importo
+ import_into: Tipo di importo
product_list: Lista prodotti
- inventories: ventari
+ inventories: Inventario
import: Importazione
upload: Carica
csv_templates: Documenti CSV
@@ -391,6 +496,7 @@ it:
no_permission: Non hai il permesso di gestire questa attività
not_found: l'azienda non è stata trovata nel database
no_name: Nessun nome
+ blank_enterprise: alcuni prodotti non hanno un'azienda definita
reset_absent?: Elimina i prodotti assenti
reset_absent_tip: Imposta la scorta a zero per tutti i prodotti esistenti non presenti in questo file
overwrite_all: Sovrascrivi tutto
@@ -399,6 +505,8 @@ it:
default_tax_cat: Imposta la categoria d'imposta
default_shipping_cat: Imposta la categoria di spedizione
default_available_date: Imposta data disponibile
+ validation_overview: Resoconto della validazione importazione
+ entries_found: Voci trovate nel file importato
entries_with_errors: Alcuni elementi contengono errori e non verranno importati
products_to_create: Saranno creati nuovi prodotti
products_to_update: Alcuni prodotti saranno aggiornati
@@ -408,12 +516,19 @@ it:
inventory_to_reset: La scorta di elementi dell'inventario esistenti sarà portata a zero
line: Riga
item_line: Riga elemento
+ import_review:
+ not_updatable_tip: "I seguenti campi non possono essere aggiornati tramite importazione in blocco per i prodotti esistenti:"
+ fields_ignored: Questi campi saranno ignorati quando i prodotti importati verranno salvati
+ entries_table:
+ not_updatable: Questo campo non è aggiornabile mediante l'importazione massiva sui prodotti esistenti
save_results:
final_results: Importa i risultati finali
products_created: Prodotti creati
products_updated: Prodotti aggiornati
inventory_created: Elementi d'inventario creati
inventory_updated: Elementi d'inventario aggiornati
+ products_reset: I prodotti avevano un livello di stock azzerato
+ inventory_reset: Gli articoli della lista avevano un livello di stock azzerato
all_saved: "Tutti gli elementi sono stati salvati con successo"
some_saved: "Elementi salvati con successo"
save_errors: Salva errori
@@ -452,6 +567,7 @@ it:
tip: "Usa questa pagina per modificare le quantità su ordini multipli. I prodotti possono anche essere rimossi del tutto dagli ordini, se necessario."
shared: "Risorsa condivisa?"
order_no: "Ordine num."
+ order_date: "Completato al"
max: "Max"
product_unit: "Prodotto: Unità"
weight_volume: "Peso/Volume"
@@ -485,13 +601,21 @@ it:
desc_long: Chi siamo
desc_long_placeholder: Racconta di te ai consumatori. Questa informazione comparirà nel tuo profilo pubblico.
business_details:
+ abn: ABN
+ acn: ACN
+ acn_placeholder: es. 123 456 789
display_invoice_logo: Mostra logo nelle fatture
+ invoice_text: Aggiungere testo personalizzato alla fine delle fatture
contact:
name: Nome
+ name_placeholder: es. Gustav Plum
email_address: 'Pubblica Indirizzo mail '
+ email_address_placeholder: es. inquiries@fresh-food.com
email_address_tip: "Questo indirizzo mail sarà visualizzato nel tuo profilo pubblico"
phone: Telefono
+ phone_placeholder: es. 02 4560 3210
website: Sito web
+ website_placeholder: es. www.truffles.com
enterprise_fees:
name: Nome
fee_type: Tipo di tariffa
@@ -524,6 +648,7 @@ it:
create_one_button: Crea uno ora
primary_details:
name: Nome
+ name_placeholder: es. Tartufi Biodinamici Alba
groups: Gruppi
groups_tip: Seleziona i gruppi o le regioni di cui sei membro. Questo aiuterà i consumatori a trovare la tua azienda.
groups_placeholder: 'Inizia a digitare per trovare i gruppi '
@@ -574,14 +699,41 @@ it:
che sarà visualizzata sopra al listino dei prodotti nella pagina del
tuo negozio.
shopfront_closed_message: Messaggio Chiusura Vetrina
+ shopfront_closed_message_placeholder: >
+ Un messaggio che fornisce una spiegazione più dettagliata sul perché
+ il tuo negozio è chiuso e/o quando i clienti potranno aspettarsi una
+ nuova apertura. Questo viene visualizzato sul tuo negozio solo quando
+ non hai cicli d'ordine attivi (es. il negozio è chiuso).
shopfront_category_ordering: Categorie disponibili in Vetrina
open_date: Data apertura
close_date: Data chiusura
social:
+ twitter_placeholder: es. @the_prof
+ instagram_placeholder: es. the_prof
facebook_placeholder: p.es. www.facebook.com/PageNameHere
+ linkedin_placeholder: es. www.linkedin.com/in/TuoNome
stripe_connect:
+ connect_with_stripe: "Collegati con Stripe"
+ stripe_connect_intro: "Per accettare pagamenti con carta di credito, è necessario collegare il proprio account Stripe con Open Food Network. Utilizzate il pulsante a destra per iniziare."
+ stripe_account_connected: "Account Stripe connesso."
+ disconnect: "Disconnetti account"
confirm_modal:
+ title: Collegati con Stripe
+ part1: Stripe è un servizio di elaborazione dei pagamenti che permette ai negozi su OFN di accettare pagamenti con carta di credito da parte dei clienti.
+ part2: Per utilizzare questa funzione, è necessario collegare il proprio account Stripe a OFN. Cliccando su 'Accetto' qui sotto sarai reindirizzato al sito web Stripe dove potrai collegare un account Stripe esistente o crearne uno nuovo se non ne hai già uno.
+ part3: Questo consentirà alla piattaforma di accettare pagamenti con carta di credito da clienti di tua fiducia. Tieni presente che dovrai mantenere il tuo conto Stripe, pagare la tariffa di Strip e gestire gli eventuali rimborsi e i servizi al cliente.
+ i_agree: Sono d'accordo
cancel: Annulla
+ tag_rules:
+ default_rules:
+ by_default: Per impostazione predefinita
+ no_rules_yet: Non è ancora stata fissata nessuna regola predefinita
+ add_new_button: ' + Aggiungi una nuova regola predefinita'
+ no_tags_yet: Nessuna etichetta per questa azienda
+ no_rules_yet: Nessuna regola per questa etichetta
+ for_customers_tagged: 'Per i clienti etichettati'
+ add_new_rule: '+ Aggiungi una nuova regola'
+ add_new_tag: '+ Aggiungi una nuova tag'
users:
email_confirmation_notice_html: "Email di conferma in sospeso. Abbiamo inviato una mail di conferma a %{email}."
resend: Invia di nuovo
@@ -591,6 +743,7 @@ it:
owner_tip: L'utente responsabile per questa azienda.
notifications: Notifiche
notifications_tip: Le notifiche riguardanti gli ordini saranno inviate a questo indirizzo mail
+ notifications_placeholder: es. gustav@gmail.com
notifications_note: 'Nota: se inserisci un nuovo indirizzo mail, ti sarà richiesto di confermarlo prima dell''uso.'
managers: Referenti
managers_tip: Altri utenti abilitati a gestire questa azienda.
@@ -632,6 +785,7 @@ it:
profile_description_text: Le persone ti possono trovare e contattare su OFN. La tua azienda sarà visibile sulla mappa e potrà essere trovata nelle ricerche degli utenti.
hub_shop: Isola logistica
hub_shop_text: Vendi prodotti di altri
+ hub_shop_description_text: La tua azienda è la spina dorsale del vostro sistema alimentare locale. Puoi aggregare i prodotti di altre aziende e venderli attraverso il tuo negozio su Open Food Network.
choose_option: Per favore seleziona una delle opzioni.
change_now: Modifica ora
enterprise_user_index:
@@ -654,6 +808,14 @@ it:
new:
title: Nuova Azienda
back_link: Indietro alla lista delle aziende
+ remove_logo:
+ remove: "Rimuovi immagine"
+ removed_successfully: "Logo rimosso con successo"
+ immediate_removal_warning: "Il logo verrà rimosso immediatamente dopo la conferma."
+ remove_promo_image:
+ remove: "Rimuovi immagine"
+ removed_successfully: "Immagine promozionale rimossa con successo"
+ immediate_removal_warning: "L'immagine promozionale verrà rimossa immediatamente dopo la conferma da parte tua.."
welcome:
welcome_title: Benvenuto su Open Food Network!
welcome_text: Hai creato con successo una
@@ -668,6 +830,7 @@ it:
update_and_close: Aggiorna e chiudi
choose_products_from: 'Scegli i prodotti da:'
exchange_form:
+ pickup_time_tip: Quando gli ordini di questa Lista d'ordine saranno pronti per il cliente
pickup_instructions_placeholder: "Istruzioni per la consegna"
pickup_instructions_tip: Queste istruzioni saranno visibili agli utenti dopo che hanno completato una gentile richiesta
pickup_time_placeholder: "Pronto per (es. Data / Ora)"
@@ -685,7 +848,13 @@ it:
save_reload: Salva e ricarica la pagina
coordinator_fees:
add: Aggiungi un ricarico per il coordinamento
+ filters:
+ search_by_order_cycle_name: "Cerca per nome del Ciclo di Ordine"
+ involving: "In svolgimento"
+ any_enterprise: "Qualsiasi Impresa"
+ any_schedule: "Qualunque Orario"
form:
+ incoming: In arrivo
supplier: Fornitore
receival_details: Dettagli ritiro
fees: Tariffe
@@ -752,7 +921,7 @@ it:
ofn_with_tip: Le aziende sono produttori e/o isole logistiche e sono le unità base dell'organizzazione di OFN
enterprises_hubs_tabs:
has_no_payment_methods: "%{enterprise} non ha metodi di pagamento"
- has_no_shipping_methods: "%{enterprise} non ha metodi di consegna"
+ has_no_shipping_methods: "%{enterprise} non ha metodi di spedizione"
has_no_enterprise_fees: "%{enterprise} non ha tariffe aziendali"
enterprise_issues:
create_new: Crea Nuovo
@@ -772,18 +941,23 @@ it:
customer_totals: Totali ciclo di richieste consumatori
all_products: Tutti i prodotti
inventory: Inventario (in mano)
+ lettuce_share: LettuceShare
mailing_list: Mailing List
addresses: Indirizzi
payment_methods: Rapporto Metodi di pagamento
delivery: Rapporto Consegne
tax_types: Tipologia tariffe
+ tax_rates: Aliquote d'imposta
pack_by_customer: Smistato dai consumatori
pack_by_supplier: Smistato dai fornitori
orders_and_distributors:
name: Gentili richieste e distributori
description: Gentili richieste con i dettagli del distributore
+ bulk_coop:
+ name: Bulk Co-Op
+ description: Rapporti degli ordini per Bulk Co-Op
payments:
- name: Resoconti pagamenti
+ name: Resoconti Pagamenti
description: Rapporto per i pagamenti
orders_and_fulfillment:
name: Gentili richieste e resoconti di soddifazione
@@ -801,6 +975,9 @@ it:
name: Gestione Ciclo di Richieste
sales_tax:
name: Imposta di vendita
+ xero_invoices:
+ name: Fatture Xero
+ description: Fatture per importazione in Xero
packing:
name: Resoconti smistamento/imballaggio
subscriptions:
@@ -840,6 +1017,10 @@ it:
details: Dettagli
invalid_error: Oops! Per favore compila i campi obbligatori...
allowed_payment_method_types_tip: Al momento può essere utilizzato solo il metodo di pagamento Contanti
+ credit_card: Carta di Credito
+ charges_not_allowed: Non sono consentiti Oneri per questo cliente
+ no_default_card: Il cliente non ha carte disponibili da caricare
+ card_ok: il cliente ha una carta disponibile da caricare
loading_flash:
loading: CARICAMENTO ABBONAMENTI
review:
@@ -853,17 +1034,45 @@ it:
confirm_cancel_msg: Sei sicura/o di voler eliminare questo abbonamento? Quest'azione non potrà essere annullata.
cancel_failure_msg: 'Ci dispiace, eliminazione non riuscita!'
confirm_pause_msg: Sei sicura/o di voler mettere in pausa questo abbonamento?
+ pause_failure_msg: 'Spiacente, pausa fallita!'
confirm_unpause_msg: Sei sicura/o di voler riprendere questo abbonamento?
unpause_failure_msg: 'Ci dispiace, ripresa non riuscita!'
+ yes_cancel_them: Cancella l'articolo
+ no_keep_them: Tieni l'articolo
+ yes_i_am_sure: Si', sono sicuro
+ order_update_issues_msg: Alcuni ordini non possono essere aggiornati automaticamente, molto probabilmente perché sono stati modificati manualmente. Si prega di verificare gli estremi elencati di seguito e di apportare eventuali modifiche ai singoli ordini, se necessario.
+ no_results:
+ no_subscriptions: Ancora nessuna sottoscrizione
+ why_dont_you_add_one: Perché non ne aggiungi uno?)
+ no_matching_subscriptions: Non si trovano sottoscrizioni coincidenti
+ schedules:
+ destroy:
+ associated_subscriptions_error: Questa programmazione non può essere cancellata perché ha una sottoscrizione associata
+ controllers:
+ enterprises:
+ stripe_connect_cancelled: "La connessione con Stripe è stata cancellata"
+ stripe_connect_success: "Account Stripe connesso con successo"
+ stripe_connect_fail: Spiacente, la connessione del tuo account Stripe non è riuscita
+ stripe_connect_settings:
+ resource: 'Configurazione Stripe Connect '
+ api:
+ enterprise_logo:
+ destroy_attachment_does_not_exist: "Logo inesistente"
+ enterprise_promo_image:
+ destroy_attachment_does_not_exist: "Immagine promozionale inesistente"
checkout:
already_ordered:
cart: "carrello"
+ message_html: "Hai già un ordine per questo ciclo d'ordine. Controlla%{cart} per vedere gli articoli ordinati in precedenza. Puoi anche cancellare gli articoli finché il ciclo dell'ordine è aperto."
shops:
hubs:
show_closed_shops: "Mostra i negozi chiusi"
+ hide_closed_shops: "Nascondi i negozi chiusi"
+ show_on_map: "Mostra tutto nella mappa"
shared:
menu:
cart:
+ checkout: "Checkout adesso"
already_ordered_products: "Già richiesto in questo ciclo di richieste"
register_call:
selling_on_ofn: "Interessato ad entrare in Open Food Network?"
@@ -890,6 +1099,11 @@ it:
footer_legal_tos: "Termini e condizioni"
footer_legal_visit: "Trovaci su"
footer_legal_text_html: "Open Food Network è un software gratuito e open source. Il nostro contenuto è distribuito con licenza %{content_license} e il nostro codice con licenza %{code_license}."
+ footer_data_text_with_privacy_policy_html: "Ci prendiamo cura dei tuoi dati. Leggi la nostra %{privacy_policy} e %{cookies_policy}"
+ footer_data_text_without_privacy_policy_html: "Ci prendiamo cura dei vostri dati. Vedi la nostra %{cookies_policy}"
+ footer_data_privacy_policy: "privacy policy"
+ footer_data_cookies_policy: "cookies policy"
+ footer_skylight_dashboard_html: I dati di rendimento sono disponibili in %{dashboard}.
shop:
messages:
login: "fai il login"
@@ -898,15 +1112,42 @@ it:
require_customer_login: "Questo negozio è solo per clienti."
require_login_html: "Per favore, %{login} se hai già un account. Altrimenti %{register} per diventare un cliente."
require_customer_html: "Per favore %{contact} %{enterprise} per diventare un cliente."
+ card_could_not_be_updated: La Carta non ha potuto essere rinnovata
+ card_could_not_be_saved: La Carta non ha potuto essere salvata
+ spree_gateway_error_flash_for_checkout: "C'è stato un problema con le informazioni sul pagamento: %{error}"
+ invoice_billing_address: "Indirizzo di fatturazione:"
invoice_column_tax: "IVA"
invoice_column_price: "Prezzo"
invoice_column_item: "Articolo"
invoice_column_qty: "Qtà."
+ invoice_column_unit_price_with_taxes: "Prezzo unitario (incl. tasse)"
+ invoice_column_unit_price_without_taxes: "Prezzo unitario (escl. tasse)"
+ invoice_column_price_with_taxes: "Prezzo totale (incl. tasse)"
+ invoice_column_price_without_taxes: "Prezzo totale (escl. tasse)"
+ invoice_column_tax_rate: "% tasse"
+ invoice_tax_total: "IVA totale"
+ tax_invoice: "FATTURA DELLE TASSE"
+ tax_total: "Totale tasse (%{rate}):"
+ total_excl_tax: "Totale (Tasse escl.):"
+ total_incl_tax: "Totale (Tasse incl.):"
+ abn: "CF:"
+ invoice_issued_on: "Fattura emessa il"
+ order_number: "Numero fattura:"
+ date_of_transaction: "Data della transazione:"
+ ticket_column_qty: "Qty"
+ ticket_column_item: "Articolo"
+ ticket_column_unit_price: "Prezzo unitario"
+ ticket_column_total_price: "Prezzo totale"
menu_1_title: "Negozi"
+ menu_1_url: "/negozi"
menu_2_title: "Mappa"
+ menu_2_url: "/mappa"
menu_3_title: "Produttori"
+ menu_3_url: "/produttori"
menu_4_title: "Gruppi"
+ menu_4_url: "/gruppi"
menu_5_title: "About"
+ menu_5_url: "http://www.openfoodnetwork.org/"
menu_6_title: "Connetti"
menu_7_title: "Impara"
logo: "Logo (640x130)"
@@ -924,6 +1165,7 @@ it:
footer_email: "Email"
footer_links_md: "Collegamenti"
footer_about_url: "URL About"
+ user_guide_link: "Link alla guida utente"
name: Nome
first_name: Nome
last_name: Cognome
@@ -931,15 +1173,24 @@ it:
phone: Telefono
next: Prossimo
address: Indirizzo
+ address_placeholder: es. Via Roma 342
address2: Indirizzo (continua)
city: Comune
+ city_placeholder: es. Forlimpopoli
postcode: CAP
+ postcode_placeholder: es. 10040
state: Stato
country: Paese
unauthorized: Non autorizzato
terms_of_service: "Termini di servizio"
on_demand: A richiesta
none: Nessuno
+ not_allowed: Non consentito
+ no_shipping: nessun metodo di spedizione
+ no_payment: Nessun metodo di pagamento
+ no_shipping_or_payment: nessuna modalità di spedizione o di pagamento
+ unconfirmed: non confermato
+ days: giorni
label_shop: "Negozio"
label_shops: "Negozi"
label_map: "Mappa"
@@ -961,6 +1212,7 @@ it:
label_more: "Mostra di più"
label_less: "Mostra meno"
label_notices: "Avvisi"
+ cart_items: "articoli"
cart_headline: "Il tuo carrello"
total: "Totale"
cart_updating: "Aggiornamento del carrello..."
@@ -969,12 +1221,50 @@ it:
card_number: Numero della carta
card_securitycode: "Codice di sicurezza"
card_expiry_date: Data di scadenza
+ card_masked_digit: "X"
+ card_expiry_abbreviation: "Exp"
+ new_credit_card: "Nuova carta di credito"
+ my_credit_cards: Le mie carte di credito
+ add_new_credit_card: Aggiungi nuova carta di credito
+ saved_cards: Carta salvata
+ add_a_card: Aggiungi una Carta
+ add_card: Aggiungi Carta
+ you_have_no_saved_cards: Non hai ancora salvato nessuna Carta
+ saving_credit_card: Salvando carta di credito...
+ card_has_been_removed: "La tua Carta è stata rimossa (number: %{number})"
+ card_could_not_be_removed: Spiacenti, la carta non ha potuto essere rimossa
ie_warning_headline: "Il tuo browser non è aggiornato :-("
ie_warning_text: "Per una migliore esperienza con Open Food Network, ti raccomandiamo caldamente di aggiornare il browser:"
ie_warning_chrome: Scarica Chrome
ie_warning_firefox: Scarica Firefox
ie_warning_ie: Aggiorna Internet Explorer
ie_warning_other: "Non puoi aggiornare il browser? Prova Open Food Network sul tuo smartphone :-)"
+ legal:
+ cookies_policy:
+ header: "Come usiamo i cookie"
+ desc_part_1: "I cookie sono file di testo molto piccoli che vengono memorizzati sul tuo computer quando visiti alcuni siti web."
+ desc_part_2: "In OFN siamo pienamente rispettosi della vostra privacy. Usiamo solo i cookie necessari per fornirvi il servizio di vendita/acquisto online di cibo. Noi non vendiamo nessuno dei vostri dati. In futuro potremmo proporvi di condividere alcuni dei vostri dati per costruire nuovi servizi comuni utili per l'ecosistema (come i servizi di logistica per sistemi alimentari di filiera corta) ma non ci siamo ancora, e non lo faremo senza la vostra autorizzazione :-)"
+ desc_part_3: "Utilizziamo i cookie principalmente per ricordare chi sei quando accedi al servizio, o per poter ricordare gli articoli che hai messo nel carrello anche se non hai effettuato l'accesso. Se continui a navigare sul sito web senza cliccare su \"Accetta i cookies\", assumiamo che ci stai dando il consenso a memorizzare i cookie che sono essenziali per il funzionamento del sito web. Ecco l'elenco dei cookie che utilizziamo!"
+ essential_cookies: "Cookie essenziali"
+ essential_cookies_desc: "I seguenti cookie sono strettamente necessari per il funzionamento del nostro sito web."
+ essential_cookies_note: "La maggior parte dei cookie contiene solo un identificatore univoco, ma non altri dati, per cui indirizzo e-mail e password, ad esempio, non sono mai contenuti in essi e mai esposti."
+ cookie_domain: "Impostato da"
+ cookie_session_desc: "Utilizzato per consentire al sito web di ricordare gli utenti tra una visita e l'altra, ad esempio, di ricordare gli articoli nel carrello."
+ cookie_openstreemap_desc: "Utilizzato dal nostro amichevole fornitore di mappe open source (OpenStreetMap) per assicurare che non riceva troppe richieste in un dato periodo di tempo, per prevenire l'abuso dei loro servizi."
+ statistics_cookies: "Cookies di statistica"
+ statistics_cookies_matomo_optout: "Vuoi rinunciare a Matomo analytics? Noi non raccogliamo nessun dato personale e Matomo ci aiuta a migliorare il nostro servizio, ma rispettiamo la tua scelta :-)"
+ cookie_analytics_utmz_desc: "Memorizza la fonte di traffico o la campagna che spiega come l'utente ha raggiunto il tuo sito. Il cookie viene creato quando la libreria javascript viene eseguita e viene aggiornato ogni volta che i dati vengono inviati a Google Analytics."
+ cookie_matomo_basics_desc: "Cookie di prima parte di Matomo per raccogliere statistiche."
+ cookie_matomo_ignore_desc: "Cookie utilizzato per escludere l'utente dal tracciamento."
+ disabling_cookies_header: "Avviso sulla disabilitazione dei cookie"
+ disabling_cookies_desc: "Come utente puoi sempre consentire, bloccare o cancellare i cookie di Open Food Network o di qualsiasi altro sito web ogni volta che vuoi, attraverso il controllo delle impostazioni del tuo browser. Ogni browser ha un operativo diverso. Qui ci sono i link:"
+ disabling_cookies_note: "Ma sappi che se cancelli o modifichi i cookie essenziali utilizzati da Open Food Network, il sito web non funzionerà, non potrai aggiungere nulla al carrello né alla cassa, ad esempio."
+ cookies_banner:
+ cookies_usage: "Questo sito utilizza i cookie per rendere la tua navigazione sicura e scorrevole, e per aiutarci a capire come lo usi per migliorare le caratteristiche che offriamo."
+ cookies_definition: "I cookie sono file di testo molto piccoli che vengono memorizzati sul tuo computer quando visiti alcuni siti web."
+ cookies_policy_link_desc: "Se vuoi saperne di più, controlla il nostro"
+ cookies_policy_link: "cookies policy"
+ cookies_accept_button: "Accetta Cookies"
home_shop: Compra ora
brandstory_headline: "Cibo, libero."
brandstory_intro: "A volte il modo migliore di correggere il sistema è crearne uno nuovo..."
@@ -1011,7 +1301,9 @@ it:
checkout_as_guest: "Paga come ospite"
checkout_details: "I tuoi dettagli"
checkout_billing: "Informazioni sul conto"
+ checkout_default_bill_address: "Salva come indirizzo di fatturazione predefinito"
checkout_shipping: Informazioni sulla spedizione
+ checkout_default_ship_address: "Salva come indirizzo di spedizione predefinito"
checkout_method_free: Gratuito
checkout_address_same: L'indirizzo di spedizione è lo stesso del conto?
checkout_ready_for: "Pronto per:"
@@ -1023,6 +1315,7 @@ it:
checkout_shipping_price: Spedizione
checkout_total_price: Totale
checkout_back_to_cart: "Torna al carrello"
+ cost_currency: "Moneta"
order_paid: PAGATO
order_not_paid: NON PAGATO
order_total: Totale dell'ordine
@@ -1030,6 +1323,7 @@ it:
order_billing_address: Indirizzo di fatturazione
order_delivery_on: Consegna il
order_delivery_address: Indirizzo di consegna
+ order_delivery_time: Tempo di consegna
order_special_instructions: "Tue note:"
order_pickup_time: Pronto per la raccolta
order_pickup_instructions: Istruzioni per la raccolta
@@ -1038,6 +1332,9 @@ it:
order_includes_tax: (include le tasse)
order_payment_paypal_successful: Il tuo pagamento con PayPal è stato elaborato con successo.
order_hub_info: Info Hub
+ order_back_to_store: Torna al negozio
+ order_back_to_cart: Torna al carrello
+ bom_tip: "Utilizza questa pagina per modificare le quantità di prodotto su ordini multipli. I prodotti possono anche essere rimossi completamente dagli ordini, se necessario."
unsaved_changes_warning: "Ci sono cambiamenti non salvati che andranno persi se continui."
unsaved_changes_error: "Campi con i bordi rossi contengono errori."
products: "Prodotti"
@@ -1051,11 +1348,13 @@ it:
email_admin_html: "Puoi gestire il tuo profilo facendo il log in al link %{link} o cliccando sull'ingranaggio in alto a destra della homepage, e selezionando Amministrazione"
email_community_html: "Abbiamo anche un forum on-line per le discussioni della comunità sul software OFN e le sfide uniche legate all'avere un'impresa del cibo. Sei invitato ad unirti. Ci evolviamo in continuo e il tuo contributo in questo forum plasmerà ciò che sarà. %{link}"
join_community: "Unisciti alla community"
+ email_confirmation_activate_account: "Prima di attivare il tuo nuovo account, dobbiamo verificare il tuo indirizzo email"
email_confirmation_greeting: "Ciao, %{contact}!"
email_confirmation_profile_created: "Un profilo per %{name} è stato creato con successo! Per attivare il tuo Profilo abbiamo bisogno di confermare questo indirizzo email."
email_confirmation_click_link: "Per favore clicca il link di seguito per confermare la tua email e continuare l'impostazione del tuo profilo"
email_confirmation_link_label: "Conferma questo indirizzo email »"
email_confirmation_help_html: "Dopo aver confermato il tuo indirizzo email puoi accedere al tuo account di amministrazione per questa impresa. Vedi il link %{link} per scoprire di più sulle funzionalità di %{sitename} e iniziare a usare il tuo profilo e il tuo negozio online."
+ email_confirmation_notice_unexpected: "Hai ricevuto questo messaggio perché ti sei iscritto a %{sitename} o sei stato invitato a iscriverti da qualcuno che probabilmente conosci. Se non capisci perché stai ricevendo questa e-mail, scrivi a %{contact}."
email_social: "Connettiti con Noi:"
email_contact: "Scrivici:"
email_signoff: "Saluti,"
@@ -1073,6 +1372,7 @@ it:
email_order_summary_price: "Prezzo"
email_order_summary_subtotal: "Subtotale:"
email_order_summary_total: "Totale:"
+ email_order_summary_includes_tax: "(include le tasse)"
email_payment_paid: PAGATO
email_payment_not_paid: NON PAGATO
email_payment_summary: Riassunto del pagamento
@@ -1080,6 +1380,7 @@ it:
email_so_placement_intro_html: "Hai una nuova gentile richiesta di %{distributor}"
email_so_placement_details_html: "Ecco i dettagli della gentile richiesta per %{distributor}:"
email_so_placement_changes: "Purtroppo alcuni prodotti richiesti non sono disponibili. Le quantità originali richieste sono barrate qui sotto."
+ email_so_payment_success_intro_html: "Un pagamento automatico è stato elaborato per il tuo ordine da%{distributor}."
email_so_placement_explainer_html: "Questa gentile richiesta è stata elaborata automaticamente per te."
email_so_edit_true_html: "Puoi apportare modifiche finchè la gentile richiesta chiuderà, il %{orders_close_at}."
email_so_edit_false_html: "Puoi visualizzare i dettagli di questa gentile richiesta in qualsiasi momento."
@@ -1091,6 +1392,7 @@ it:
email_so_empty_intro_html: "Abbiamo cercato di confermare una nuova gentile richiesta con %{distributor}, ma abbiamo avuto dei problemi..."
email_so_empty_explainer_html: "Purtroppo nessuno dei prodotti richiesti è disponibile, quindi nessuna gentile richiesta è stata confermata. Qui sotto le quantità originali richieste sono state barrate."
email_so_empty_details_html: "Ecco i dettagli della gentile richiesta non confermata per %{distributor}:"
+ email_so_failed_payment_intro_html: "Abbiamo cercato di elaborare un pagamento, ma abbiamo avuto qualche problema..."
email_shipping_delivery_details: Dettagli della consegna
email_shipping_delivery_time: "Consegna il"
email_shipping_delivery_address: "Indirizzo di consegna"
@@ -1186,7 +1488,7 @@ it:
groups_contact_facebook: Seguici su Facebook
groups_signup_title: Iscriviti come gruppo
groups_signup_headline: Iscrizione Gruppi
- groups_signup_intro: "Siamo una sorprendente piattaforma per la commercializzazione collaborativa, il modo più semplice per far raggiungere ai tuoi membri e collaboratori nuovi mercati. Siamo no-profit, convenienti e semplici."
+ groups_signup_intro: "iamo una sorprendente piattaforma per la commercializzazione collaborativa, il modo più semplice per far raggiungere ai tuoi membri e stakeholder nuovi mercati. Siamo no-profit, convenienti e semplici."
groups_signup_email: Scrivici
groups_signup_motivation1: Trasformiamo i sistemi agroalimentari correttamente.
groups_signup_motivation2: E' il motivo per cui ci alziamo dal letto ogni giorno. Siamo un'organizzazione no-profit globale, basata sul codice open source. Giochiamo correttamente. Puoi sempre fidarti di noi.
@@ -1208,7 +1510,7 @@ it:
modal_hubs_content1: Puoi cercare l'hub più adatto per località o nome. Alcuni hub hanno più punti dove puoi ritirare i tuoi ordini, e alcuni hanno anche la possibilità di consegna. Ogni hub di cibo è un punt vendita con operazioni commerciali e logistiche indipendenti - così sono da aspettarsi variazioni tra hub.
modal_hubs_content2: Puoi comprare solo in un hub alla volta.
modal_groups: "Gruppi / regioni"
- modal_groups_content1: Queste sono le organizzazioni e le relazioni tra hub che fanno l'Open Food Network.
+ modal_groups_content1: Queste sono le organizzazioni e le relazioni tra hub che compongono l'Open Food Network.
modal_groups_content2: Alcuni gruppi sono riuniti per località o zona, altri per somiglianze non geografiche.
modal_how: "Come funziona"
modal_how_shop: Fai la spesa con Open Food Network
@@ -1300,6 +1602,7 @@ it:
orders_bought_items_notice:
one: "Un articolo aggiuntivo è già stato confermato per questo ciclo di richieste"
other: "%{count} articoli aggiuntivi già confermati in questo ciclo di richieste"
+ orders_bought_edit_button: Modifica gli articoli confermati
orders_bought_already_confirmed: "* già confermato"
orders_confirm_cancel: Sei sicura/o di voler annullare questa gentile richiesta?
products_cart_distributor_choice: "Distributore per il tuo ordine:"
@@ -1314,6 +1617,7 @@ it:
products_max_quantity: Quantità massima
products_distributor: Distributore
products_distributor_info: Quando selezioni un distributore per il tuo ordine, i suoi indirizzi e tempi di ritiro saranno mostrati qui.
+ products_distribution_adjustment_label: "Distribuzione del prodotto di %{distributor} per %{product}"
shop_trial_expires_in: "La prova per la tua vetrina scadrà in"
shop_trial_expired_notice: "Buone notizie! Abbiamo deciso di estendere le prove dei negozi fino a nuova notifica."
password: Password
@@ -1400,13 +1704,17 @@ it:
producer: "Bene! Innanzitutto abbiamo bisogno di sapere qualcosa in più sulla tua azienda:"
enterprise_name_field: "Nome Azienda:"
producer_name_field: "Nome Azienda:"
+ producer_name_field_placeholder: "es. Azienda agricola Musso"
producer_name_field_error: "Per favore scegli un nome univoco per la tua azienda"
address1_field: "Indirizzo rigo 1:"
+ address1_field_placeholder: "es. Via Rome 45"
address1_field_error: "Per favore inserisci un indirizzo"
address2_field: "Indirizzo rigo 2:"
suburb_field: "Comune"
+ suburb_field_placeholder: "es. Piamprato"
suburb_field_error: "Per favore inserisci un comune"
postcode_field: "CAP:"
+ postcode_field_placeholder: "es. 20034"
postcode_field_error: "CAP obbligatorio"
state_field: "Provincia:"
state_field_error: "Provincia obbligatoria"
@@ -1418,7 +1726,9 @@ it:
contact_field_placeholder: 'Nome contatto'
contact_field_required: "E' necessario inserire un contatto principale."
email_field: 'Indirizzo email'
+ email_field_placeholder: 'es. charlie@thefarm.com'
phone_field: 'Numero di telefono'
+ phone_field_placeholder: 'es. (06) 1234 5678'
type:
title: 'Tipo'
about:
@@ -1431,7 +1741,9 @@ it:
enterprise_contact_placeholder: "Nome contatto"
enterprise_contact_required: "Devi inserire un contatto principale"
enterprise_email_address: "Indirizzo email"
+ enterprise_email_placeholder: "es. charlie@thefarm.com"
enterprise_phone: "Numero telefonico"
+ enterprise_phone_placeholder: "es. (03) 1234 5678"
back: "Indietro"
continue: "Continua"
limit_reached_headline: "Oh no!"
@@ -1609,6 +1921,7 @@ it:
flat_rate_per_item: "Tariffa fissa (per articolo)"
flat_rate_per_order: "Tariffa fissa (per gentile richiesta)"
flexible_rate: "Tariffa flessibile"
+ price_sack: "Prezzo al sacco"
new_order_cycles: "Nuovi cicli di richieste"
new_order_cycle: "Nuovo ciclo di richieste"
select_a_coordinator_for_your_order_cycle: "Seleziona un coordinatore per il tuo ciclo di ordini"
@@ -1653,10 +1966,16 @@ it:
spree_admin_overview_check_your_inbox: "Controlla le tua email per ulteriori istruzioni. Grazie!"
spree_admin_unit_value: Unità di valore
spree_admin_unit_description: Descrizione Unità
+ spree_admin_variant_unit: Variante
+ spree_admin_variant_unit_scale: Scala delle unità
spree_admin_supplier: Fornitore
spree_admin_product_category: Categoria prodotto
+ spree_admin_variant_unit_name: Nome della variante
change_package: "Cambia pacchetto"
spree_admin_single_enterprise_hint: "Suggerimento: Per permettere alle persone di trovarti, abilita la tua visibilità sotto"
+ spree_admin_eg_pickup_from_school: "es. \"Ritiro presso la Cooperativa\""
+ spree_admin_eg_collect_your_order: "es. \"Prego ritira il tuo ordine in via Roma 45\""
+ spree_classification_primary_taxon_error: "La classificazione %{taxon} è la classificazione primaria di %{product} e non può essere cancellata"
spree_order_availability_error: "Il distributore o il ciclo di richiesta non possono rifornire i prodotti nel tuo carrello"
spree_order_populator_error: "Il distributore o il ciclo di richieste non hanno disponibilità di alcuni prodotti nel tuo carrello. Per favore scegline un altro."
spree_order_populator_availability_error: "Questo prodotto non è disponibile dal distributore o nel ciclo di richieste selezionati."
@@ -1669,6 +1988,7 @@ it:
live: "attivo"
manage: "Gestisci"
resend: "Invia nuovamente"
+ trial: Prova
add_and_manage_products: "Aggiungi e gestisci prodotti"
add_and_manage_order_cycles: "Aggiungi e gestisci cicli d'ordine"
manage_order_cycles: "Gestisci cicli d'ordine"
@@ -1679,6 +1999,8 @@ it:
order_cycles: "Cicli di richieste"
enterprise_relationships: "Permessi azienda"
remove_tax: "Rimuovi tassa"
+ first_name_begins_with: "Il nome inizia con"
+ last_name_begins_with: "Il cognome inizia con"
enterprise_tos_link: "link Termini di Servizio Aziende"
enterprise_tos_message: "Abbiamo bisogno di lavorare con persone che condividono i nostri scopi e i nostri valori. Per questo chiediamo alle nuove aziende di sottoscrivere i nostri"
enterprise_tos_link_text: "Termini di Servizio"
@@ -1728,15 +2050,30 @@ it:
report_header_suburb: Comune
report_header_address: Indirizzo
report_header_billing_address: Indirizzo di fatturazione
+ report_header_relationship: Relazione
report_header_hub: Hub
report_header_hub_address: Indirizzo hub
+ report_header_to_hub: Al gruppo
report_header_hub_code: Codice hub
report_header_code: Codice
report_header_paid: Pagato?
report_header_delivery: Consegna?
report_header_shipping: Spedizione
- report_header_shipping_method: Metodo di consegna
- report_header_shipping_instructions: Istruzioni consegna
+ report_header_shipping_method: Metodo di spedizione
+ report_header_shipping_instructions: Istruzioni spedizione
+ report_header_ship_street: Indirizzo di spedizione
+ report_header_ship_street_2: Indirizzo di spedizione 2
+ report_header_ship_city: Città di spedizione
+ report_header_ship_postcode: CAP di spedizione
+ report_header_ship_state: Stato di spedizione
+ report_header_billing_street: Indirizzo di fatturazione
+ report_header_billing_street_2: Indirizzo di fatturazione 2
+ report_header_billing_street_3: Indirizzo di fatturazione 3
+ report_header_billing_street_4: Indirizzo di fatturazione 4
+ report_header_billing_city: Città di fatturazione
+ report_header_billing_postcode: CAP. di fatturazione
+ report_header_billing_state: Stato di fatturazione
+ report_header_incoming_transport: Trasporto in arrivo
report_header_special_instructions: Istruzioni speciali
report_header_order_number: Numero gentile richiesta
report_header_date: Data
@@ -1747,6 +2084,9 @@ it:
report_header_taxable_items_total: "Totale Articoli con tariffe (%{currency_symbol})"
report_header_sales_tax: "Tariffa vendite (%{currency_symbol})"
report_header_delivery_charge: "Tariffa consegna (%{currency_symbol})"
+ report_header_tax_on_delivery: "Oneri sulla consegna (%{currency_symbol})"
+ report_header_tax_on_fees: "Oneri sulle provvigioni (%{currency_symbol})"
+ report_header_total_tax: "Oneri totali (%{currency_symbol})"
report_header_enterprise: Azienda
report_header_customer: Consumatore
report_header_customer_code: Codice cliente
@@ -1754,13 +2094,21 @@ it:
report_header_product_properties: Proprietà prodotto
report_header_quantity: Quantità
report_header_max_quantity: Quantità massima
+ report_header_variant: Variante
+ report_header_variant_value: Valore della Variante
+ report_header_variant_unit: Unità Variante
report_header_total_available: Totale disponibile
+ report_header_unallocated: Non assegnato
+ report_header_max_quantity_excess: Quantità massima
+ report_header_taxons: Classificazione
report_header_supplier: Fornitore
report_header_producer: Produttore
report_header_producer_suburb: Comune produttore
report_header_unit: Unità
+ report_header_group_buy_unit_quantity: Raggruppare per quantità di unità
report_header_cost: Costo
report_header_shipping_cost: Costo consegna
+ report_header_curr_cost_per_unit: Costo per unità
report_header_total_shipping_cost: Totale costo consegna
report_header_payment_method: Metodo di pagamento
report_header_sells: Vende
@@ -1773,6 +2121,7 @@ it:
report_header_distributor_postcode: CAP distributore
report_header_delivery_address: Indirizzo consegna
report_header_delivery_postcode: CAP consegna
+ report_header_bulk_unit_size: Misura dell'unità a granelli
report_header_weight: Peso
report_header_sum_total: Somma Tolale
report_header_date_of_order: Data Richiesta
@@ -1783,6 +2132,7 @@ it:
report_header_order_date: Data richiesta
report_header_order_id: ID richiesta
report_header_item_name: Nome articolo
+ report_header_temp_controlled_items: Articolo a Temperatura Controllata
report_header_customer_name: Nome Consumatore
report_header_customer_email: Email consumatore
report_header_customer_phone: Telefono Consumatore
@@ -1797,7 +2147,12 @@ it:
report_header_total_price: "Totale (%{currency})"
report_header_product_total_price: "Totale Prodotto (%{currency})"
report_header_shipping_total_price: "Totale consegna (%{currency})"
+ report_header_outstanding_balance_price: "Saldo in sospeso (%{currency})"
+ report_header_eft_price: "EFT (%{currency})"
+ report_header_paypal_price: "PayPal (%{currency})"
+ report_header_sku: SKU
report_header_amount: Quantità
+ report_header_balance: Saldo
report_header_total_cost: "Costi totali"
report_header_total_ordered: Totale richiesto
report_header_total_max: Totale max
@@ -1805,8 +2160,17 @@ it:
report_header_sum_max_total: "Somma totale max"
report_header_total_excl_vat: "Totale imponibile (%{currency_symbol})"
report_header_total_incl_vat: "Total IVA incl. (%{currency_symbol})"
+ report_header_temp_controlled: Controllo Temperatura?
report_header_is_producer: Produttore?
report_header_not_confirmed: Non confermato
+ report_header_gst_on_income: IVA sulle entrate
+ report_header_gst_free_income: Entrate senza IVA
+ report_header_total_untaxable_produce: Totale prodotti esenti tasse
+ report_header_total_taxable_produce: Totale prodotti tassati (incl. tasse)
+ report_header_total_untaxable_fees: Totale provvigioni esenti (no tasse)
+ report_header_total_taxable_fees: Totale provvigioni tassabili (incl. tasse)
+ report_header_delivery_shipping_cost: Costi di spedizione/consegna (incl. tasse)
+ report_header_transaction_fee: Commissioni di transazione (no tasse)
initial_invoice_number: "Numero di fattura iniziale:"
invoice_date: "Data fattura:"
due_date: "Scadenza:"
@@ -1849,6 +2213,7 @@ it:
validation_msg_relationship_already_established: "^Questa relazione è già stabilita."
validation_msg_at_least_one_hub: "^Almeno un hub deve essere selezionato"
validation_msg_product_category_cant_be_blank: "^Categoria di prodotto non può essere vuoto"
+ validation_msg_tax: "^Categoria d'imposta richiesta"
validation_msg_tax_category_cant_be_blank: "^Categoria di tassa non può essere vuoto"
validation_msg_is_associated_with_an_exising_customer: "è associato con un cliente esistente"
enterprise_name_error: "è già stato utilizzato. Se questo è il nome della tua azienda e vorresti reclamarne la proprietà, o se vuoi contattare questa azienda, puoi contattare l'attuale referente di questo profilo a %{email}."
@@ -1862,6 +2227,7 @@ it:
product_import_no_data_in_spreadsheet_notice: 'Nessun dato trovato nel foglio elettronico'
order_choosing_hub_notice: Il tuo hub è stato selezionato
order_cycle_selecting_notice: Il tuo ciclo di richieste è stato selezionato
+ adjustments_tax_rate_error: "^Verificate che l'aliquota d'imposta per questo adeguamento sia corretta."
active_distributors_not_ready_for_checkout_message_singular: >-
L'hub %{distributor_names} figura in un ciclo di richieste attivo, ma non ha
metodi di consegna e di pagamento validi. Finché non li imposti, i consumatori
@@ -1939,8 +2305,37 @@ it:
saving: SALVATAGGIO
enterprise_package:
hub_profile: Profilo Hub
+ hub_profile_cost: "COSTO: SEMPRE GRATUITO"
+ hub_profile_text1: >
+ Le persone possono trovarti e contattarti su Open Food Network. La tua
+ azienda sarà visibile sulla mappa e sarà ricercabile negli elenchi.
+ hub_profile_text2: >
+ Avere un profilo e costruire connessioni all'interno del proprio sistema
+ alimentare locale attraverso Open Food Network sarà sempre gratuito..
hub_shop: Isola logistica
+ hub_shop_text1: >
+ La tua azienda è la spina dorsale del vostro sistema alimentare locale.
+ Puoi aggregare i prodotti di altre aziende e venderli attraverso il
+ tuo negozio su Open Food Network.
+ hub_shop_text3: >
+ Se desideri anche vendere i tuoi prodotti, è necessario che la tua azienda
+ diventi un produttore.
+ choose_package: Per favore, scegli un pacchetto
+ choose_package_text1: >
+ La tua azienda non sarà completamente attivata fino a quando non sarà
+ stato selezionato un pacchetto tra le opzioni a sinistra
+ choose_package_text2: >
+ Clicca su un'opzione per vedere informazioni più dettagliate su ogni
+ pacchetto, e premi il pulsante rosso SALVA quando hai finito!
profile_only: Solo Profilo
+ profile_only_cost: "COSTO: SEMPRE GRATUITO"
+ profile_only_text1: >
+ Un profilo ti rende visibile e contattabile da altri ed è un modo per
+ condividere la tua storia
+ profile_only_text2: >
+ Se preferisci concentrarti sulla produzione di cibo e vuoi lasciare
+ il lavoro di venderlo a qualcun altro, non avrai bisogno di un negozio
+ su Open Food Network.
producer_shop: Negozio produttore
producer_hub: Hub produttore
get_listing: Ottieni un listino
@@ -1950,7 +2345,25 @@ it:
sell_both: Vendi prodotti tuoi e di altri
enterprise_producer:
producer: Produttore
+ producer_text1: >
+ I produttori fanno cose gustose da mangiare o da bere. Sei un produttore
+ se ti dedichi a coltivare, allevare, birrificare, infornare, far fermentare,
+ mungere o modellare il tuo prodotto
+ producer_text2: >
+ I produttori possono anche svolgere altre funzioni, come aggregare alimenti
+ provenienti da altre imprese e venderli attraverso un negozio su Open
+ Food Network
+ non_producer: Non produttore
+ non_producer_text1: >
+ I non produttori non producono direttamente alcun alimento, il che significa
+ che non possono creare i propri prodotti per la vendita attraverso Open
+ Food Network
+ non_producer_text2: >
+ Invece, i non produttori sono specializzati nel collegare i produttori
+ al consumatore finale, sia che si tratti di aggregare, valutare, confezionare,
+ vendere o consegnare gli alimenti.
producer_desc: Produttori di cibo
+ producer_example: es. COLTIVATORI, PANIFICATORI, BIRRAI, ARTIGIANI
non_producer_desc: Tutti gli altri tipi di Aziende alimentari
non_producer_example: es. Botteghe, Food Coop, GAS
enterprise_status:
@@ -1959,6 +2372,11 @@ it:
resolve: Risolvi
new_tag_rule_dialog:
select_rule_type: "Seleziona un tipo di regola:"
+ orders:
+ index:
+ view_file: Vedi file
+ compiling_invoices: Compilazione fatture
+ please_wait: Si prega di attendere che il PDF sia pronto prima di chiudere questo modale
resend_user_email_confirmation:
resend: "Invia nuovamente"
sending: "Invia di nuovo..."
@@ -1983,6 +2401,7 @@ it:
new_products: "Nuovi Prodotti"
reset_stock_levels: Resetta le quantità disponibili alla quantità predefinita
changes_to: Cambia in
+ no_changes_to_save: Nessuna modifica da salvare.
no_authorisation: "Non abbiamo l'autorizzazione per salvare queste modifiche. "
some_trouble: "Abbiamo avuto problemi durante il salvataggio: %{errors}"
stock_reset: Quantità resettate alle predefinite.
@@ -2004,7 +2423,10 @@ it:
resources:
could_not_delete_customer: 'Non è possibile annullare utente'
order_cycles:
+ create_failure: "Impossibile creare il ciclo dell'ordine"
update_success: 'Il tuo ciclo di richieste è stato aggiornato'
+ update_failure: "Impossibile aggiornare il ciclo dell'ordine"
+ no_distributors: Non ci sono distributori in questo ciclo dell'ordine. Questo ciclo dell'ordine non sarà visibile ai consumatori fino a quando non ne verrà aggiunto uno. Vuoi continuare a salvare questo ciclo dell'ordine?
enterprises:
producer: "Produttore"
non_producer: "Non-produttore"
@@ -2027,11 +2449,17 @@ it:
admin:
orders:
index:
+ new_order: "Nuovo ordine"
ship: "Spedizione"
edit: "Modifica"
+ previous: "Precedente"
next: "Prossimo"
+ loading: "Caricamento"
no_orders_found: "Nessuna gentile richiesta trovata"
+ results_found: "%{number} Risultati trovati."
+ print_invoices: "Stampa fatture"
invoice:
+ tax_invoice: FATTURA DELLE TASSE
code: Codice
from: Da
to: A
@@ -2050,11 +2478,33 @@ it:
other: "Hai %{count} cicli di richieste attivi."
manage_order_cycles: "GESTISCI CICLI DI RICHIESTE"
payment_methods:
+ new:
+ new_payment_method: "Nuovo metodo di pagamento"
+ back_to_payment_methods_list: "Torna all'elenco dei metodi di pagamento"
+ edit:
+ editing_payment_method: "Modifica metodo di pagamento"
+ back_to_payment_methods_list: "Torna all'elenco dei metodi di pagamento"
stripe_connect:
enterprise_select_placeholder: Scegli...
+ loading_account_information_msg: Caricamento delle informazioni sull'account da Stripe, si prega di attendere...
+ stripe_disabled_msg: I pagamenti Stripe sono stati disabilitati dall'amministratore di sistema.
+ request_failed_msg: Spiacenti, qualcosa è andato storto mentre cercavamo di verificare i dettagli dell'account con Stripe...
+ account_missing_msg: Non esiste un account Stripe per questa azienda.
+ access_revoked_msg: L'accesso a questo account Stripe è stato revocato, per favore ricollega il tuo account.
status: Stato
+ connected: Connesso
+ account_id: Account ID
+ business_name: Ragione sociale
+ charges_enabled: Cambi Consentiti
products:
+ new:
+ title: 'Nuovo prodotto'
+ unit_name_placeholder: 'es. grappoli'
index:
+ indicators:
+ title: CARICAMENTO PRODOTTI
+ no_products: "Non ci sono ancora prodotti. Perché non ne aggiungi qualcuno?"
+ no_results: "Spiacente, nessun risultato corrispondente"
products_head:
name: Nome
unit: Unità
@@ -2069,21 +2519,25 @@ it:
product_name: Nome Prodotto
primary_taxon_form:
product_category: Categoria prodotto
+ group_buy_form:
+ group_buy: "Acquisto di gruppo?"
display_as:
display_as: Visualizza come
- reports:
- table:
- select_and_search: "Seleziona i filtri e clicca su CERCA per accedere ai tuoi dati"
users:
index:
+ new_user: "Nuovo utente"
user: "Utente"
enterprise_limit: "Limite azienda"
search: "Cerca"
email: "Email"
+ edit:
+ back_to_users_list: "Torna all'elenco degli utenti"
+ general_settings: "Impostazioni generali"
form:
email: "Email"
roles: "Ruoli"
enterprise_limit: "Limite azienda"
+ confirm_password: "Conferma la password"
password: "Password"
email_confirmation:
confirmation_pending: "Email di conferma in sospeso. Abbiamo inviato una mail di conferma a %{address}."
@@ -2093,7 +2547,10 @@ it:
general_settings:
edit:
legal_settings: "Impostazioni Legali"
+ cookies_consent_banner_toggle: "Mostra banner di consenso per i cookie"
enterprises_require_tos: "Le aziende devono accettare i Termini di Servizio"
+ cookies_policy_matomo_section: "Visualizza la sezione di Matomo nella pagina della cookie policy"
+ cookies_policy_ga_section: "Visualizza la sezione di Google Analytics nella pagina della cookie policy"
footer_tos_url: "URL Termini di Servizio"
checkout:
payment:
@@ -2103,6 +2560,8 @@ it:
js_format: 'aa-mm-gg'
inventory: Inventario
orders:
+ edit:
+ login_to_view_order: "Effettua il login per visualizzare il tuo ordine."
bought:
item: "Già richiesto in questo ciclo di richieste"
order_mailer:
@@ -2166,6 +2625,8 @@ it:
show:
tabs:
orders: Gentili richieste
+ cards: Carte di credito
+ transactions: Transazioni
settings: Impostazioni account
unconfirmed_email: "Email di conferma in sospeso per: %{unconfirmed_email}. Il tuo indirizzo email sarà aggiornato quando la nuova email sarà confermata. "
orders:
@@ -2196,5 +2657,7 @@ it:
delete?: Elimina?
cards:
authorised_shops: Negozi autorizzati
+ authorised_shops:
+ shop_name: "Nome del negozio"
localized_number:
invalid_format: 'Formato non valido: inserire un numero.'
diff --git a/config/locales/nb.yml b/config/locales/nb.yml
index 06b5463fed..9a19f953d9 100644
--- a/config/locales/nb.yml
+++ b/config/locales/nb.yml
@@ -7,6 +7,7 @@ nb:
shipment_state: Leveringsstatus
completed_at: Fullført på
number: Nummer
+ state: Tilstand
email: Epost Kunde
spree/payment:
amount: Beløp
@@ -2036,6 +2037,8 @@ nb:
order_cycles: "Bestillingsrunder"
enterprise_relationships: "Bedriftsrettigheter"
remove_tax: "Fjern avgift"
+ first_name_begins_with: "Fornavn begynner med"
+ last_name_begins_with: "Etternavn begynner med"
enterprise_tos_link: "Lenke til Tjenestevilkår for Bedrifter"
enterprise_tos_message: "Vi ønsker å jobbe med bedrifter som deler våre mål og verdier. Derfor ber vi nye bedrifter om å godta vår"
enterprise_tos_link_text: "Tjenestevilkår."
@@ -2439,6 +2442,11 @@ nb:
orders:
index:
per_page: "%{results} per side"
+ view_file: Se fil
+ compiling_invoices: Samler Fakturaer
+ bulk_invoice_created: Samlefaktura opprettet
+ bulk_invoice_failed: Kunne ikke opprette samlefaktura
+ please_wait: Vennligst vent til PDF-filen er klar før du lukker dette vinduet.
resend_user_email_confirmation:
resend: "Send på nytt"
sending: "Send på nytt ..."
@@ -2540,6 +2548,7 @@ nb:
no_orders_found: "Ingen bestillinger funnet"
results_found: "%{number} Resultater funnet."
viewing: "Ser %{start} til %{end}."
+ print_invoices: "Skriv ut fakturaer"
invoice:
issued_on: Utstedt på
tax_invoice: AVGIFTSFAKTURA
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index fef04357df..824794b1b9 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -7,6 +7,7 @@ pt:
shipment_state: Estado do envio
completed_at: Concluído Em
number: Número
+ state: Região
email: Email do/a Consumidor/a
spree/payment:
amount: Quantia
@@ -2488,8 +2489,6 @@ pt:
display_as:
display_as: Mostrar como
reports:
- table:
- select_and_search: "Selecione os filtros e click em Pesquisar para obter resultados."
bulk_coop:
bulk_coop_supplier_report: 'Cooperativa por Atacado - Totais por Fornecedor'
bulk_coop_allocation: 'Cooperativa por Atacado - Alocação'
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index f47c6fb424..e6c6d238fc 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -5,6 +5,7 @@ sv:
spree/order:
payment_state: Betalningstatus
shipment_state: Leveransstatus
+ state: Region
errors:
models:
spree/user:
diff --git a/config/schedule.rb b/config/schedule.rb
index edec8351ac..4bb20df545 100644
--- a/config/schedule.rb
+++ b/config/schedule.rb
@@ -13,7 +13,7 @@ job_type :enqueue_job, "cd :path; :environment_variable=:environment bundle exe
every 1.hour do
- rake 'openfoodnetwork:cache:check_products_integrity'
+ rake 'ofn:cache:check_products_integrity'
end
every 1.day, at: '12:05am' do
@@ -35,10 +35,10 @@ every 5.minutes do
end
every 1.day, at: '1:00am' do
- rake 'openfoodnetwork:billing:update_account_invoices'
+ rake 'ofn:billing:update_account_invoices'
end
# On the 2nd of every month at 1:30am
every '30 1 2 * *' do
- rake 'openfoodnetwork:billing:finalize_account_invoices'
+ rake 'ofn:billing:finalize_account_invoices'
end
diff --git a/lib/tasks/billing.rake b/lib/tasks/billing.rake
index 6bfd0a53e7..4c279bc41e 100644
--- a/lib/tasks/billing.rake
+++ b/lib/tasks/billing.rake
@@ -1,4 +1,4 @@
-namespace :openfoodnetwork do
+namespace :ofn do
namespace :billing do
desc 'Update enterprise user invoices'
task update_account_invoices: :environment do
diff --git a/lib/tasks/cache.rake b/lib/tasks/cache.rake
index 64a5d3909a..a88e745153 100644
--- a/lib/tasks/cache.rake
+++ b/lib/tasks/cache.rake
@@ -1,6 +1,6 @@
require 'open_food_network/products_cache_integrity_checker'
-namespace :openfoodnetwork do
+namespace :ofn do
namespace :cache do
desc 'check the integrity of the products cache'
task :check_products_integrity => :environment do
diff --git a/lib/tasks/data.rake b/lib/tasks/data.rake
index 643886943c..9ae0984e3a 100644
--- a/lib/tasks/data.rake
+++ b/lib/tasks/data.rake
@@ -1,4 +1,4 @@
-namespace :openfoodnetwork do
+namespace :ofn do
namespace :data do
desc "Adding relationships based on recent order cycles"
task :create_order_cycle_relationships => :environment do
diff --git a/lib/tasks/dev.rake b/lib/tasks/dev.rake
index a6f8e85d48..ea13c4ddc6 100644
--- a/lib/tasks/dev.rake
+++ b/lib/tasks/dev.rake
@@ -1,4 +1,4 @@
-namespace :openfoodnetwork do
+namespace :ofn do
namespace :dev do
desc 'load sample data'
task load_sample_data: :environment do
diff --git a/lib/tasks/enterprises.rake b/lib/tasks/enterprises.rake
index 62d56fe8a5..547e179c2a 100644
--- a/lib/tasks/enterprises.rake
+++ b/lib/tasks/enterprises.rake
@@ -1,6 +1,6 @@
require 'csv'
-namespace :openfoodnetwork do
+namespace :ofn do
namespace :dev do
desc 'export enterprises to CSV'
task :export_enterprises => :environment do
diff --git a/lib/tasks/specs.rake b/lib/tasks/specs.rake
index dddb5ffb54..bd6708dcf6 100644
--- a/lib/tasks/specs.rake
+++ b/lib/tasks/specs.rake
@@ -1,4 +1,4 @@
-namespace :openfoodnetwork do
+namespace :ofn do
namespace :specs do
namespace :engines do
def detect_engine_paths
diff --git a/script/setup b/script/setup
index 430c07b911..53332df685 100755
--- a/script/setup
+++ b/script/setup
@@ -52,7 +52,7 @@ printf '\n\n' | bundle exec rake db:setup db:test:prepare
printf '\n'
# Load some default data for your environment
-bundle exec rake openfoodnetwork:dev:load_sample_data
+bundle exec rake ofn:dev:load_sample_data
printf '\n'
printf "${YELLOW}WELCOME TO OPEN FOOD NETWORK!\n"
diff --git a/spec/controllers/api/orders_controller_spec.rb b/spec/controllers/api/orders_controller_spec.rb
index 4d61d86a48..9101437308 100644
--- a/spec/controllers/api/orders_controller_spec.rb
+++ b/spec/controllers/api/orders_controller_spec.rb
@@ -11,7 +11,9 @@ module Api
let!(:distributor2) { create(:distributor_enterprise) }
let!(:supplier) { create(:supplier_enterprise) }
let!(:coordinator) { create(:distributor_enterprise) }
+ let!(:coordinator2) { create(:distributor_enterprise) }
let!(:order_cycle) { create(:simple_order_cycle, coordinator: coordinator) }
+ let!(:order_cycle2) { create(:simple_order_cycle, coordinator: coordinator2) }
let!(:order1) do
create(:order, order_cycle: order_cycle, state: 'complete', completed_at: Time.zone.now,
distributor: distributor, billing_address: create(:address) )
@@ -24,7 +26,9 @@ module Api
create(:order, order_cycle: order_cycle, state: 'complete', completed_at: Time.zone.now,
distributor: distributor, billing_address: create(:address) )
end
- let!(:order4) { create(:completed_order_with_fees, distributor: distributor) }
+ let!(:order4) do
+ create(:completed_order_with_fees, order_cycle: order_cycle2, distributor: distributor2)
+ end
let!(:order5) { create(:order, state: 'cart', completed_at: nil) }
let!(:line_item1) do
create(:line_item_with_shipment, order: order1,
@@ -142,7 +146,7 @@ module Api
get :index, per_page: 15, page: 1
pagination_data = {
- 'results' => 3,
+ 'results' => 2,
'pages' => 1,
'page' => 1,
'per_page' => 15
diff --git a/spec/features/admin/enterprise_roles_spec.rb b/spec/features/admin/enterprise_roles_spec.rb
index d86a320f75..ae83bae5ea 100644
--- a/spec/features/admin/enterprise_roles_spec.rb
+++ b/spec/features/admin/enterprise_roles_spec.rb
@@ -99,6 +99,7 @@ feature %q{
click_link 'Enterprises'
click_link 'Test Enterprise'
within('.side_menu') { click_link 'Users' }
+ expect(page).to have_selector "table.managers"
end
it "lists managers and shows icons for owner, contact, and email confirmation" do
diff --git a/spec/features/admin/enterprises/images_spec.rb b/spec/features/admin/enterprises/images_spec.rb
index b2f1cb0787..110b8c2664 100644
--- a/spec/features/admin/enterprises/images_spec.rb
+++ b/spec/features/admin/enterprises/images_spec.rb
@@ -35,8 +35,7 @@ feature "Managing enterprise images" do
go_to_images
within ".page-admin-enterprises-form__logo-field-group" do
- expect(page).to have_selector(".image-field-group__preview-image")
- expect(html).to include("logo-white.png")
+ expect_preview_image "logo-white.png"
end
# Replacing image
@@ -47,8 +46,7 @@ feature "Managing enterprise images" do
go_to_images
within ".page-admin-enterprises-form__logo-field-group" do
- expect(page).to have_selector(".image-field-group__preview-image")
- expect(html).to include("logo-black.png")
+ expect_preview_image "logo-black.png"
end
# Removing image
@@ -60,7 +58,7 @@ feature "Managing enterprise images" do
expect(page).to have_content("Logo removed successfully")
within ".page-admin-enterprises-form__logo-field-group" do
- expect(page).to have_no_selector(".image-field-group__preview-image")
+ expect_no_preview_image
end
end
@@ -73,8 +71,7 @@ feature "Managing enterprise images" do
go_to_images
within ".page-admin-enterprises-form__promo-image-field-group" do
- expect(page).to have_selector(".image-field-group__preview-image")
- expect(html).to include("logo-white.jpg")
+ expect_preview_image "logo-white.jpg"
end
# Replacing image
@@ -85,8 +82,7 @@ feature "Managing enterprise images" do
go_to_images
within ".page-admin-enterprises-form__promo-image-field-group" do
- expect(page).to have_selector(".image-field-group__preview-image")
- expect(html).to include("logo-black.jpg")
+ expect_preview_image "logo-black.jpg"
end
# Removing image
@@ -98,9 +94,17 @@ feature "Managing enterprise images" do
expect(page).to have_content("Promo image removed successfully")
within ".page-admin-enterprises-form__promo-image-field-group" do
- expect(page).to have_no_selector(".image-field-group__preview-image")
+ expect_no_preview_image
end
end
end
end
+
+ def expect_preview_image(file_name)
+ expect(page).to have_selector(".image-field-group__preview-image[src*='#{file_name}']")
+ end
+
+ def expect_no_preview_image
+ expect(page).to have_no_selector(".image-field-group__preview-image")
+ end
end
diff --git a/spec/features/admin/product_import_spec.rb b/spec/features/admin/product_import_spec.rb
index 671d1077d5..d624137490 100644
--- a/spec/features/admin/product_import_spec.rb
+++ b/spec/features/admin/product_import_spec.rb
@@ -46,7 +46,7 @@ feature "Product Import", js: true do
attach_file 'file', '/tmp/test.csv'
click_button 'Upload'
- import_data
+ proceed_to_validation
expect(page).to have_selector '.item-count', text: "2"
expect(page).to have_no_selector '.invalid-count'
@@ -89,7 +89,7 @@ feature "Product Import", js: true do
attach_file 'file', '/tmp/test.csv'
click_button 'Upload'
- import_data
+ proceed_to_validation
expect(page).to have_selector '.item-count', text: "2"
expect(page).to have_selector '.invalid-count', text: "2"
@@ -112,7 +112,7 @@ feature "Product Import", js: true do
attach_file 'file', '/tmp/test.csv'
click_button 'Upload'
- import_data
+ proceed_to_validation
expect(page).to have_selector '.item-count', text: "1"
expect(page).to have_selector '.create-count', text: "1"
@@ -142,7 +142,7 @@ feature "Product Import", js: true do
attach_file 'file', '/tmp/test.csv'
click_button 'Upload'
- import_data
+ proceed_to_validation
save_data
@@ -164,7 +164,7 @@ feature "Product Import", js: true do
end
expect(page).to have_selector 'div#s2id_import_date_filter'
- import_time = carrots.import_date.to_date.to_formatted_s(:long).gsub(' ', ' ')
+ import_time = carrots.import_date.to_date.to_formatted_s(:long)
select2_select import_time, from: "import_date_filter"
expect(page).to have_field "product_name", with: carrots.name
@@ -188,7 +188,7 @@ feature "Product Import", js: true do
click_button 'Upload'
- import_data
+ proceed_to_validation
save_data
@@ -213,7 +213,7 @@ feature "Product Import", js: true do
attach_file 'file', '/tmp/test.csv'
click_button 'Upload'
- import_data
+ proceed_to_validation
expect(page).to have_selector '.item-count', text: "3"
expect(page).to_not have_selector '.invalid-count'
@@ -252,7 +252,7 @@ feature "Product Import", js: true do
attach_file 'file', '/tmp/test.csv'
click_button 'Upload'
- import_data
+ proceed_to_validation
expect(page).to have_selector '.item-count', text: "3"
expect(page).to have_no_selector '.invalid-count'
@@ -349,7 +349,7 @@ feature "Product Import", js: true do
attach_file 'file', '/tmp/test.csv'
click_button 'Upload'
- import_data
+ proceed_to_validation
expect(page).to have_content I18n.t('admin.product_import.import.validation_overview')
expect(page).to have_selector '.item-count', text: "2"
@@ -361,9 +361,61 @@ feature "Product Import", js: true do
end
end
+ describe "handling a large file (120 data rows)" do
+ let!(:producer) { enterprise }
+
+ let(:tmp_csv_path) { "/tmp/test.csv" }
+
+ before do
+ quick_login_as admin
+ visit main_app.admin_product_import_path
+ end
+
+ context "when importing to product list" do
+ def write_tmp_csv_file
+ CSV.open(tmp_csv_path, "w") do |csv|
+ csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type",
+ "tax_category", "shipping_category"]
+ 120.times do |i|
+ csv << ["Imported Product #{i + 1}", producer.name, category.name, 1, "1.00", "500",
+ "g", tax_category.name, shipping_category.name]
+ end
+ end
+ end
+
+ before { write_tmp_csv_file }
+
+ it "validates and saves all batches" do
+ # Upload and validate file.
+ attach_file "file", tmp_csv_path
+ click_button I18n.t("admin.product_import.index.upload")
+ proceed_to_validation
+
+ # Check that all rows are validated.
+ heading = "120 #{I18n.t("admin.product_import.import.products_to_create")}"
+ find(".panel-header", text: heading).click
+ expect(page).to have_content "Imported Product 10"
+ expect(page).to have_content "Imported Product 60"
+ expect(page).to have_content "Imported Product 110"
+
+ # Save file.
+ proceed_with_save
+
+ # Be extra patient.
+ expect_progress_percentages "33%", "67%", "100%"
+ expect_import_completed
+
+ # Check that all rows are saved.
+ expect(producer.supplied_products.find_by_name("Imported Product 10")).to be_present
+ expect(producer.supplied_products.find_by_name("Imported Product 60")).to be_present
+ expect(producer.supplied_products.find_by_name("Imported Product 110")).to be_present
+ end
+ end
+ end
+
private
- def import_data
+ def proceed_to_validation
expect(page).to have_selector 'a.button.proceed', visible: true
click_link I18n.t('admin.product_import.import.import')
expect(page).to have_selector 'form.product-import', visible: true
@@ -372,8 +424,22 @@ feature "Product Import", js: true do
def save_data
expect(page).to have_selector 'a.button.proceed', visible: true
- click_link I18n.t('admin.product_import.import.save')
+ proceed_with_save
expect(page).to have_selector 'div.save-results', visible: true
+ expect_import_completed
+ end
+
+ def expect_progress_percentages(*percentages)
+ percentages.each do |percentage|
+ expect(page).to have_selector ".progress-interface", text: percentage
+ end
+ end
+
+ def proceed_with_save
+ click_link I18n.t("admin.product_import.import.save")
+ end
+
+ def expect_import_completed
expect(page).to have_content I18n.t('admin.product_import.save_results.final_results')
end
end