Merge branch 'master' into 2-0-stable-dec-18th

This commit is contained in:
luisramos0
2018-12-18 23:32:45 +00:00
28 changed files with 459 additions and 266 deletions

View File

@@ -187,7 +187,7 @@ Metrics/AbcSize:
Max: 15
Metrics/BlockLength:
ExcludedMethods: ["describe", "context"]
ExcludedMethods: ["context", "describe", "it"]
Metrics/BlockNesting:
Max: 3

View File

@@ -5,7 +5,7 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}.git" }
gem 'rails', '~> 3.2.22'
gem 'rails-i18n', '~> 3.0.0'
gem 'i18n', '~> 0.6.11'
gem 'i18n-js', '~> 3.0.0'
gem 'i18n-js', '~> 3.1.0'
# Patched version. See http://rubysec.com/advisories/CVE-2015-5312/.
gem 'nokogiri', '>= 1.6.7.1'
@@ -68,7 +68,7 @@ gem 'rack-ssl', require: 'rack/ssl'
gem 'rack-rewrite'
gem 'custom_error_message', github: 'jeremydurham/custom-err-msg'
gem 'angularjs-file-upload-rails', '~> 1.1.6'
gem 'roadie-rails', '~> 1.0.3'
gem 'roadie-rails', '~> 1.1.1'
gem 'figaro'
gem 'blockenspiel'
gem 'acts-as-taggable-on', '~> 3.4'

View File

@@ -234,7 +234,7 @@ GEM
sprockets (< 4.0)
crack (0.4.3)
safe_yaml (~> 1.0.0)
css_parser (1.3.5)
css_parser (1.6.0)
addressable
daemons (1.2.6)
dalli (2.7.2)
@@ -248,8 +248,8 @@ GEM
colorize (>= 0.5.8)
nokogiri (~> 1.6.0)
rails (>= 3.1)
delayed_job (4.1.4)
activesupport (>= 3.0, < 5.2)
delayed_job (4.1.5)
activesupport (>= 3.0, < 5.3)
delayed_job_active_record (4.1.2)
activerecord (>= 3.0, < 5.2)
delayed_job (>= 3.0, < 5)
@@ -475,7 +475,7 @@ GEM
httparty (0.16.2)
multi_xml (>= 0.5.2)
i18n (0.6.11)
i18n-js (3.0.11)
i18n-js (3.1.0)
i18n (>= 0.6.6, < 2)
immigrant (0.3.6)
activerecord (>= 3.0)
@@ -536,7 +536,7 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
oj (3.6.10)
oj (3.7.4)
orm_adapter (0.5.0)
paper_trail (3.0.9)
activerecord (>= 3.0, < 5.0)
@@ -621,12 +621,12 @@ GEM
rdoc (3.12.2)
json (~> 1.4)
redcarpet (3.2.3)
roadie (3.0.1)
css_parser (~> 1.3.4)
nokogiri (~> 1.6.0)
roadie-rails (1.0.3)
rails (>= 3.0, < 4.2)
roadie (~> 3.0)
roadie (3.4.0)
css_parser (~> 1.4)
nokogiri (~> 1.5)
roadie-rails (1.1.1)
railties (>= 3.0, < 5.1)
roadie (~> 3.1)
roo (2.7.1)
nokogiri (~> 1)
rubyzip (~> 1.1, < 2.0.0)
@@ -634,29 +634,29 @@ GEM
nokogiri
roo (>= 2.0.0beta1, < 3)
spreadsheet (> 0.9.0)
rspec (3.7.0)
rspec-core (~> 3.7.0)
rspec-expectations (~> 3.7.0)
rspec-mocks (~> 3.7.0)
rspec-core (3.7.1)
rspec-support (~> 3.7.0)
rspec-expectations (3.7.0)
rspec (3.8.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-core (3.8.0)
rspec-support (~> 3.8.0)
rspec-expectations (3.8.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.7.0)
rspec-mocks (3.7.0)
rspec-support (~> 3.8.0)
rspec-mocks (3.8.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.7.0)
rspec-rails (3.7.2)
rspec-support (~> 3.8.0)
rspec-rails (3.8.1)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.7.0)
rspec-expectations (~> 3.7.0)
rspec-mocks (~> 3.7.0)
rspec-support (~> 3.7.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-support (~> 3.8.0)
rspec-retry (0.6.1)
rspec-core (> 3.3)
rspec-support (3.7.1)
rspec-support (3.8.0)
rubocop (0.57.2)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
@@ -685,7 +685,7 @@ GEM
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
skylight (1.7.1)
skylight (1.7.2)
activesupport (>= 3.0.0)
spinjs-rails (1.3)
rails (>= 3.1)
@@ -711,7 +711,7 @@ GEM
turbo-sprockets-rails3 (0.3.14)
railties (> 3.2.8, < 4.0.0)
sprockets (>= 2.2.0)
tzinfo (0.3.54)
tzinfo (0.3.55)
uglifier (4.1.19)
execjs (>= 0.3.0, < 3)
unicode-display_width (1.3.2)
@@ -789,7 +789,7 @@ DEPENDENCIES
guard-rspec (~> 4.7.3)
haml
i18n (~> 0.6.11)
i18n-js (~> 3.0.0)
i18n-js (~> 3.1.0)
immigrant
jquery-migrate-rails
jquery-rails (= 3.0.0)
@@ -817,7 +817,7 @@ DEPENDENCIES
rails (~> 3.2.22)
rails-i18n (~> 3.0.0)
redcarpet
roadie-rails (~> 1.0.3)
roadie-rails (~> 1.1.1)
roo (~> 2.7.0)
roo-xls (~> 1.1.0)
rspec-rails (>= 3.5.2)

View File

@@ -25,7 +25,8 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, RequestMonitor,
'q[email_cont]': $scope['q']['email_cont'],
'q[bill_address_firstname_start]': $scope['q']['bill_address_firstname_start'],
'q[bill_address_lastname_start]': $scope['q']['bill_address_lastname_start'],
'q[completed_at_not_null]': $scope['q']['completed_at_not_null'],
# Set default checkbox values to null. See: https://github.com/openfoodfoundation/openfoodnetwork/pull/3076#issuecomment-440010498
'q[completed_at_not_null]': $scope['q']['completed_at_not_null'] || null,
'q[distributor_id_in]': $scope['q']['distributor_id_in'],
'q[order_cycle_id_in]': $scope['q']['order_cycle_id_in'],
'q[order_cycle_id_in]': $scope['q']['order_cycle_id_in'],

View File

@@ -18,7 +18,7 @@ class CheckoutController < Spree::CheckoutController
# This is only required because of spree_paypal_express. If we implement
# a version of paypal that uses this controller, and more specifically
# the #update_failed method, then we can remove this call
restart_checkout
RestartCheckout.new(@order).call
end
def update
@@ -142,7 +142,8 @@ class CheckoutController < Spree::CheckoutController
def update_failed
clear_ship_address
restart_checkout
RestartCheckout.new(@order).call
respond_to do |format|
format.html do
render :edit
@@ -161,15 +162,6 @@ class CheckoutController < Spree::CheckoutController
end
end
def restart_checkout
return if @order.state == 'cart'
@order.restart_checkout! # resets state to 'cart'
@order.update_attributes!(shipping_method_id: nil)
@order.shipments.with_state(:pending).destroy_all
@order.payments.with_state(:checkout).destroy_all
@order.reload
end
def skip_state_validation?
true
end

View File

@@ -1,5 +0,0 @@
/ insert_after "code[erb-loud]:contains(\"render :partial => 'form', :locals => { :f => f }\")"
.one.column &nbsp;
= render :partial => 'spree/admin/shared/hubs_sidebar', :locals => { f: f, klass: :payment_method }
.clear

View File

@@ -1,4 +0,0 @@
/ insert_after "code[erb-silent]:contains('content_for :page_actions do')"
%li
= button_link_to t(:new), spree.new_admin_payment_method_path, :icon => 'icon-plus' %>

View File

@@ -1 +0,0 @@
remove "code[erb-loud]:contains(\"render :partial => 'spree/admin/shared/configuration_menu'\")"

View File

@@ -1,5 +0,0 @@
/ insert_after "code[erb-loud]:contains(\"render :partial => 'form', :locals => { :f => f }\")"
.one.column &nbsp;
= render :partial => 'spree/admin/shared/hubs_sidebar', :locals => { f: f, klass: :payment_method }
.clear

View File

@@ -1 +0,0 @@
remove "code[erb-loud]:contains(\"render :partial => 'spree/admin/shared/configuration_menu'\")"

View File

@@ -0,0 +1,33 @@
# Resets the passed order to cart state while clearing associated payments and shipments
class RestartCheckout
def initialize(order)
@order = order
end
def call
return if order.cart?
reset_state_to_cart
clear_shipments
clear_payments
order.reload
end
private
attr_reader :order
def reset_state_to_cart
order.restart_checkout!
end
def clear_shipments
order.update_attributes!(shipping_method_id: nil)
order.shipments.with_state(:pending).destroy_all
end
def clear_payments
order.payments.with_state(:checkout).destroy_all
end
end

View File

@@ -26,11 +26,11 @@ class SearchOrders
@search = OpenFoodNetwork::Permissions.new(current_user).editable_orders.ransack(params[:q])
return paginated_results if using_pagination?
@search.result
@search.result(distinct: true)
end
def paginated_results
@search.result
@search.result(distinct: true)
.page(params[:page])
.per(params[:per_page])
end

View File

@@ -4,8 +4,8 @@
.row
.small-12.columns
%header
%h2 {{'registration_images_headline' | t}}
%h5 {{'registration_images_description' | t}}
%h2= t(".headline")
%h5= t(".description")
%form{ name: 'images', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "select('social')" } }
.row{ ng: { repeat: 'image_step in imageSteps', show: "imageStep == image_step" } }
@@ -13,11 +13,11 @@
.row.buttons.pad-top{ ng: { if: "imageStep == 'logo'" } }
.small-12.columns
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('about')" } }
%input.button.secondary{ type: "button", value: t(".back"), ng: { click: "select('about')" } }
&nbsp;
%input.button.primary.right{ type: "button", value: "Continue", ng: { click: "imageSelect('promo')" } }
%input.button.primary.right{ type: "button", value: t(".continue"), ng: { click: "imageSelect('promo')" } }
.row.buttons.pad-top{ ng: { if: "imageStep == 'promo'" } }
.small-12.columns
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "imageSelect('logo')" } }
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
%input.button.secondary{ type: "button", value: t(".back"), ng: { click: "imageSelect('logo')" } }
%input.button.primary.right{ type: "submit", value: t(".continue") }

View File

@@ -1,6 +1,10 @@
.alert-cta
%h6
%a{href: registration_path, target: "_blank"}
-# Please forgive the hard-coded link:
-# The more elegant 'registration_path' resolves to /signup due to spree_auth_device > config > routes.rb
-# This is one of several possible fixes. Long-term, we'd like to bring the accounts page into OFN.
-# View the discussion here: https://github.com/openfoodfoundation/openfoodnetwork/pull/3174
%a{href: "/register", target: "_blank"}
= t '.selling_on_ofn'
&nbsp;
%strong

View File

@@ -1,5 +1,3 @@
/ replace "div[data-hook='admin_payment_method_form_fields']"
= admin_inject_payment_method
= admin_inject_json_ams_array "admin.paymentMethods", "shops", @hubs, Api::Admin::BasicEnterpriseSerializer
%div.alpha.eleven.columns{ "ng-app" => "admin.paymentMethods", "ng-controller" => "paymentMethodCtrl" }
@@ -7,23 +5,23 @@
.alpha.three.columns
= label_tag nil, t(:name)
.omega.eight.columns
= text_field :payment_method, :name, :class => 'fullwidth'
= text_field :payment_method, :name, class: 'fullwidth'
.row
.alpha.three.columns
= label_tag nil, t(:description)
.omega.eight.columns
= text_area :payment_method, :description, {:cols => 60, :rows => 6, :class => 'fullwidth'}
= text_area :payment_method, :description, {cols: 60, rows: 6, class: 'fullwidth'}
- if spree_current_user.admin?
.row
.alpha.three.columns
= label_tag nil, t(:environment)
.omega.eight.columns
= collection_select(:payment_method, :environment, Rails.configuration.database_configuration.keys.sort, :to_s, :titleize, {}, {:id => 'gtwy-env', :class => 'select2 fullwidth'})
= collection_select(:payment_method, :environment, Rails.configuration.database_configuration.keys.sort, :to_s, :titleize, {}, {id: 'gtwy-env', class: 'select2 fullwidth'})
.row
.alpha.three.columns
= label_tag nil, t(:display)
.omega.eight.columns
= select(:payment_method, :display_on, Spree::PaymentMethod::DISPLAY.collect { |display| [t(display), display == :both ? nil : display.to_s] }, {}, {:class => 'select2 fullwidth'})
= select(:payment_method, :display_on, Spree::PaymentMethod::DISPLAY.collect { |display| [t(display), display == :both ? nil : display.to_s] }, {}, {class: 'select2 fullwidth'})
.row
.alpha.three.columns
= label_tag nil, t(:active)
@@ -47,4 +45,4 @@
.row
.omega.eleven.columns
= render partial: 'spree/admin/shared/calculator_fields', :locals => { :f => f }
= render partial: 'spree/admin/shared/calculator_fields', locals: { f: f }

View File

@@ -0,0 +1,18 @@
- content_for :page_title do
= t('.editing_payment_method')
%i.icon-arrow-right
= @payment_method.name
- content_for :page_actions do
%li
= button_link_to t(:new), spree.new_admin_payment_method_path, icon: 'icon-plus'
%li
= button_link_to t('.back_to_payment_methods_list'), spree.admin_payment_methods_path, icon: 'icon-arrow-left'
= render partial: 'spree/shared/error_messages', locals: { target: @payment_method }
= form_for @payment_method, url: admin_payment_method_path(@payment_method) do |f|
%fieldset.no-border-top
= render partial: 'form', locals: { f: f }
.one.column &nbsp;
= render partial: 'spree/admin/shared/hubs_sidebar', locals: { f: f, klass: :payment_method }
.clear
.filter-actions.actions
= button t(:update), 'icon-refresh'

View File

@@ -0,0 +1,14 @@
- content_for :page_title do
= t('.new_payment_method')
- content_for :page_actions do
%li
= button_link_to t('.back_to_payment_methods_list'), admin_payment_methods_path, icon: 'icon-arrow-left'
= render partial: 'spree/shared/error_messages', locals: { target: @payment_method }
= form_for @payment_method, url: collection_url do |f|
%fieldset.no-border-top
= render partial: 'form', locals: { f: f }
.one.column &nbsp;
= render partial: 'spree/admin/shared/hubs_sidebar', locals: { f: f, klass: :payment_method }
.clear
.filter-actions.actions
= button t(:create), 'icon-ok'

View File

@@ -22,6 +22,7 @@
.six.columns.alpha
= f.field_container :units do
= f.label :variant_unit_with_scale, t(:units)
%span.required *
%select.select2.fullwidth{ id: 'product_variant_unit_with_scale', 'ng-model' => 'product.variant_unit_with_scale', 'ng-options' => 'unit[1] as unit[0] for unit in variant_unit_options' }
%option{'value' => '', 'ng-hide' => "hasUnit(product)"}
%input{ type: 'hidden', 'ng-value' => 'product.variant_unit', name: 'product[variant_unit]' }
@@ -29,6 +30,7 @@
.three.columns
= f.field_container :unit_value do
= f.label :product_unit_value_with_description, t(:value), 'ng-disabled' => "!hasUnit(product)"
%span.required *
%input.fullwidth{ id: 'product_unit_value_with_description', 'ng-model' => 'product.master.unit_value_with_description', :type => 'text', placeholder: "eg. 2", 'ng-disabled' => "!hasUnit(product)" }
%input{ type: 'hidden', 'ng-value' => 'product.master.unit_value', name: 'product[unit_value]' }
%input{ type: 'hidden', 'ng-value' => 'product.master.unit_description', name: 'product[unit_description]' }

View File

@@ -1849,6 +1849,11 @@ See the %{link} to find out more about %{sitename}'s features and to start using
update_and_recalculate_fees: "Update And Recalculate Fees"
registration:
steps:
images:
continue: "Continue"
back: "Back"
headline: "Thanks!"
description: "Let's upload some pretty pictures so your profile looks great! :)"
type:
headline: "Last step to add %{enterprise}!"
question: "Are you a producer?"
@@ -1989,9 +1994,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using
registration_type_no_producer_help: "If youre not a producer, youre probably someone who sells and distributes food. You might be a hub, coop, buying group, retailer, wholesaler or other."
# END
registration_images_headline: "Thanks!"
registration_images_description: "Let's upload some pretty pictures so your profile looks great! :)"
# TODO: Remove these once the enterprise.registration.modal keys are translated
registration_detail_headline: "Let's Get Started"
@@ -2712,6 +2714,12 @@ See the %{link} to find out more about %{sitename}'s features and to start using
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
payment_methods:
new:
new_payment_method: "New Payment Method"
back_to_payment_methods_list: "Back To Payment Methods List"
edit:
editing_payment_method: "Editing Payment Method"
back_to_payment_methods_list: "Back To Payment Methods List"
stripe_connect:
enterprise_select_placeholder: Choose...
loading_account_information_msg: Loading account information from stripe, please wait...

View File

@@ -195,7 +195,7 @@ fr:
admin_and_handling: Frais si par commande
profile: Profil
supplier_only: Uniquement Producteur
has_shopfront: (gère une boutique)
has_shopfront: gère une boutique
weight: Poids
volume: Volume
items: Pièces

View File

@@ -216,6 +216,10 @@ fr_BE:
quantity: Quantité
pick_up: Retrait
copy: Copier
password_confirmation: confirmation du mot de passe
reset_password_token: réinitialisation du mot de passe
expired: a expiré, s'il vous plaît demander un nouveau
back_to_payments_list: "Retour sur la liste des paiements"
actions:
create_and_add_another: "Créer et ajouter un nouveau"
admin:
@@ -307,17 +311,17 @@ fr_BE:
business_model_configuration:
edit:
business_model_configuration: "Modèle économique"
business_model_configuration_tip: "Configurer la fréquence à laquelle les boutiques seront facturées chaque mois pour l'utilisation d'Open Food Network"
business_model_configuration_tip: "Configurer la fréquence à laquelle les comptoirs seront facturés chaque mois pour l'utilisation d'Open Food Network"
bill_calculation_settings: "Paramètres du calcul des frais"
bill_calculation_settings_tip: "Définir le montant qui sera facturé aux hubs tous les mois pour leur utilisation d'Open Food France."
shop_trial_length: "Durée de la période de test (jours)"
shop_trial_length_tip: "La durée (en jours) de la période d'essai."
shop_trial_length_tip: "Durée (en jours) de la période d'essai pendant laquelle les entreprises configurées en tant que comptoir peuvent fonctionner."
fixed_monthly_charge: "Charge mensuelle fixe"
fixed_monthly_charge_tip: "Le montant fixe mensuel facturé pour tous les hubs qui dépassent le seuil de chiffre d'affaire facturable (si défini)."
percentage_of_turnover: "Pourcentage du chiffre d'affaire"
percentage_of_turnover_tip: "Quand supérieur à zéro, ce taux (0.0 - 1.0) sera appliqué au chiffre d'affaire du hub pour déterminer la commission à facturer, qui sera ajoutée aux autres charges (à gauche) pour calculer le montant à facturer pour le mois."
monthly_cap_excl_tax: "plafond mensuel (sans TVA)"
monthly_cap_excl_tax_tip: "Quand supérieure à zéro, cette valeur sert de limite supérieure facturable pour un mois."
monthly_cap_excl_tax_tip: "Quand supérieure à zéro, cette valeur sert de limite supérieure facturable au comptoir pour un mois."
tax_rate: "TVA applicable"
tax_rate_tip: "TVA applicable sur le service facturé par Open Food France."
minimum_monthly_billable_turnover: "Chiffre d'affaire minimum facturable (mensuel)"
@@ -349,7 +353,7 @@ fr_BE:
edit:
title: "connexion Stripe"
settings: "Paramètres"
stripe_connect_enabled: Permettre aux boutiques d'accepter les paiements via Stripe Connect ?
stripe_connect_enabled: Permettre aux comptoirs d'accepter les paiements via Stripe Connect ?
no_api_key_msg: Aucun compte Stripe n'existe pour cette entreprise.
configuration_explanation_html: Pour des instructions précises sur comment configurer Stripe Connect, veuillez <a href='https://github.com/openfoodfoundation/openfoodnetwork/wiki/Setting-up-Stripe-on-an-OFN-instance' target='_blank'>consulter ce guide</a>.
status: Statut
@@ -399,7 +403,7 @@ fr_BE:
header: Titre
home_page: Page d'accueil
producer_signup_page: Page d'inscription Producteur
hub_signup_page: Page d'inscription Hub
hub_signup_page: Page d'inscription du comptoir
group_signup_page: Page d'inscription Groupe
main_links: Liens du menu principal
footer_and_external_links: Pied de page et Liens Externes
@@ -435,7 +439,7 @@ fr_BE:
import_date: Importé
upload_an_image: Importer une image
product_search_keywords: Mots-clés de recherche produits
product_search_tip: Saisissez des mots qui peuvent simplifier la recherche de vos produits dans les boutiques. Laissez un espace entre chaque mot-clé.
product_search_tip: Saisissez des mots qui peuvent simplifier la recherche de vos produits dans les comptoirs. Laissez un espace entre chaque mot-clé.
SEO_keywords: Mot-clés de référencement web
seo_tip: Saisissez des mots qui peuvent simplifier la recherche de vos produits sur le web. Laissez un espace entre chaque mot-clé.
Search: Rechercher
@@ -498,6 +502,7 @@ fr_BE:
no_permission: vous n'avez pas l'autorisation de gérer cette entreprise
not_found: l'entreprise n'a pas été trouvée dans la base de données
no_name: Pas de nom
blank_enterprise: certains produits n'ont pas d'entreprise définie
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 pour tous
@@ -568,6 +573,7 @@ fr_BE:
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: "Complété à "
max: "Max"
product_unit: "Produit: Unité"
weight_volume: "Poids/Volume"
@@ -598,7 +604,7 @@ fr_BE:
about_us:
desc_short: Description (en bref)
desc_short_placeholder: Parlez de votre entreprise en une ou deux phrases
desc_long: A propos
desc_long: A propos de nous
desc_long_placeholder: Parlez de vous à vos acheteurs ! Ces informations seront visibles sur votre profil public.
business_details:
abn: SIRET
@@ -715,7 +721,7 @@ fr_BE:
disconnect: "Déconnecter le compte"
confirm_modal:
title: Connecter avec Stripe
part1: Stripe est un système de paiement qui permet aux magasins sur Open Food France d'accepter des paiements par carte bancaire de leurs acheteurs.
part1: Stripe est un système de paiement qui permet aux comptoirs sur Open Food Network d'accepter des paiements par carte bancaire de leurs acheteurs.
part2: Pour utiliser cette fonctionnalité, vous devez connecter votre compte Stripe à Open Food France. En cliquant sur "J'accepte" ci-dessous, vous serez redirigé vers le site internet de Stripe, où vous pourrez connecter votre compte existant ou en créer un si vous n'en avez pas encore.
part3: Cela permettra à Open Food Network d'accepter en votre nom les paiements par carte de crédit en provenance de vos acheteurs. Veuillez noter que c'est à vous de gérer votre compte Stripe, de payer les frais dus à Stripe et de gérer les éventuels remboursements et le service après vente.
i_agree: J'accepte
@@ -768,18 +774,18 @@ fr_BE:
producer_profile: Profil producteur
connect_ofn: Gagnez en visibilité via OFFrance
always_free: GRATUIT
producer_description_text: Saisissez votre catalogue produits sur Open Food Network, ce qui permettra aux hubs-distributeurs utilisant la plateforme de les proposer dans leurs magasins (sur votre autorisation).
producer_description_text: Saisissez votre catalogue produits sur Open Food Network, ce qui permettra aux comptoirs utilisant la plateforme de les proposer dans leurs magasins (sur votre autorisation).
producer_shop: Magasin Producteur
sell_your_produce: Vendez vos propres produits
producer_shop_description_text: Vendez vos produits en direct aux consommateurs via votre propre Magasin Producteur sur Open Food Network.
producer_shop_description_text2: Un Magasin Producteur vous permet de vendre uniquement vos propres produits. Si vous voulez vendre d'autres produits, sélectionnez "Hub Producteur"
producer_hub: Hub Producteur
producer_shop_description_text2: Un Magasin Producteur vous permet de vendre uniquement vos propres produits. Si vous voulez vendre d'autres produits, sélectionnez "Comptoir Producteur"
producer_hub: Comptoir Producteur
producer_hub_text: Vendez vos produits et ceux d'autres fournisseurs
producer_hub_description_text: Vous vendez non seulement vos produits, mais aussi des produits d'autres producteurs de votre région, artisans, ou distributeurs afin de proposer une offre complète dans votre magasin. Vous soutenez ainsi le développement de votre système alimentaire territorial !
profile: Profil uniquement
get_listing: Référencez votre hub/point de vente
profile_description_text: Les visiteurs peuvent vous trouver sur Open Food Network et vous contacter. Votre entreprise sera visible sur la carte.
hub_shop: Magasin Hub
hub_shop: Magasin comptoir
hub_shop_text: Vendez des produits de multiples fournisseurs différents
hub_shop_description_text: Vous proposez des produits de différents producteurs de votre région, artisans, ou distributeurs afin de proposer une offre complète dans votre magasin. Vous soutenez ainsi le développement de votre système alimentaire territorial !
choose_option: Veuilliez choisir l'une des options ci-dessus.
@@ -914,7 +920,7 @@ fr_BE:
user_guide: Guide utilisateur
overview:
enterprises_header:
ofn_with_tip: Les Entreprises sont des Producteurs et/ou Hubs distributeurs, et sont donc les organisations de base qui utilisent Open Food Network.
ofn_with_tip: Les Entreprises sont des Producteurs et/ou Comptoirs, et sont donc les organisations de base qui utilisent Open Food Network.
enterprises_hubs_tabs:
has_no_payment_methods: "%{enterprise} n'a pas défini de méthode de paiement"
has_no_shipping_methods: "%{enterprise} n'a pas défini de méthode de livraison"
@@ -988,7 +994,7 @@ fr_BE:
cancel_subscription: Annuler Abonnement
setup_explanation:
just_a_few_more_steps: 'Encore quelques étapes avant de pouvoir commencer:'
enable_subscriptions: "Activez la fonction abonnements pour au moins une de vos boutiques"
enable_subscriptions: "Activez la fonction abonnements pour au moins une de vos comptoirs"
enable_subscriptions_step_1_html: 1. Allez à %{enterprises_link}, trouvez votre boutique, et cliquez sur "Gérer"
enable_subscriptions_step_2: 2. Sous "Préférences boutiques", activez la fonction Abonnements
set_up_shipping_and_payment_methods_html: Paramétrez au moins une méthode d'%{shipping_link} et une méthode de %{payment_link}
@@ -1064,8 +1070,8 @@ fr_BE:
message_html: "Vous avez déjà passé une commande pour ce cycle de vente. Vérifiez votre %{cart} pour voir les produits commandés. Vous pouvez annuler ou modifier votre commande jusqu'à la fermeture du cycle de vente."
shops:
hubs:
show_closed_shops: "Afficher les boutiques fermées"
hide_closed_shops: "Masquer les boutiques fermées"
show_closed_shops: "Afficher les comptoirs fermés"
hide_closed_shops: "Masquer les comptoirs fermés"
show_on_map: "Tout afficher sur la carte"
shared:
menu:
@@ -1087,11 +1093,11 @@ fr_BE:
footer_sites_userguide: "Guide utilisateur"
footer_secure: "Fiable et sécurisé."
footer_secure_text: "Open Food Network utilise un certificat type SSL (2048 bit RSA) pour garantir la confidentialité de votre commandes et données bancaires. Nos serveurs ne conservent pas vos données bancaires et les paiements sont effectués conformément aux normes de sécurité PCI."
footer_contact_headline: "Restez en contact"
footer_contact_headline: "Restons en contact"
footer_contact_email: "Nous écrire"
footer_nav_headline: "Naviguer"
footer_join_headline: "Nous rejoindre"
footer_join_body: "Créer un profil, une boutique ou un groupe sur Open Food Network."
footer_join_body: "Créer un profil, un comptoir ou un groupe sur Open Food Network."
footer_join_cta: "Je veux en savoir plus!"
footer_legal_call: "Lire nos"
footer_legal_tos: "Termes et conditions"
@@ -1137,8 +1143,8 @@ fr_BE:
ticket_column_item: "Produit"
ticket_column_unit_price: "Prix unitaire"
ticket_column_total_price: "Prix total"
menu_1_title: "Magasins"
menu_1_url: "/magasins"
menu_1_title: "Comptoir"
menu_1_url: "/Comptoir"
menu_2_title: "Carte"
menu_2_url: "/map"
menu_3_title: "Producteurs"
@@ -1165,7 +1171,7 @@ fr_BE:
footer_pinterest_url: "Pinterest URL"
footer_email: "Email"
footer_links_md: "Liens"
footer_about_url: "A propos URL"
footer_about_url: "A propos de l'URL"
user_guide_link: "Lien vers le guide utilisateur"
name: Nom
first_name: Prénom
@@ -1193,7 +1199,7 @@ fr_BE:
unconfirmed: non confirmé
days: jours
label_shop: "Boutique"
label_shops: "Magasins"
label_shops: "Comptoir"
label_map: "Carte"
label_producer: "Producteur"
label_producers: "Producteurs"
@@ -1254,7 +1260,7 @@ fr_BE:
cookie_consent_desc: "Utilisé pour se souvenir du consentement de l'utilisation à l'utilisation de cookies."
cookie_remember_me_desc: "Utilisé si l'utilisateur a cliqué sur \"se souvenir de moi\" (pour ne pas avoir à se reconnecter à chaque fois). Ce cookie est automatiquement supprimé après 12 jours. Si l'utilisateur souhaite supprimer ce cookie, il n'a qu'à se déconnecter. Si l'utilisateur ne souhaite pas que ce cookie soit installé sur son terminal, il suffit de ne pas cocher la case \"se souvenir de moi\" au moment de la connexion."
cookie_openstreemap_desc: "Utilisé par le logiciel de cartographie open source et ami Open Street Map (qui permet l'affichage de la carte sur Open Food France) pour assurer qu'il ne reçoit pas trop de requêtes sur un laps de temps déterminé, et éviter ainsi les risques d'abus de leurs services."
cookie_stripe_desc: "Utilisé par le terminal de payement en ligne Stripe (proposé aux utilisateurs d'Open Food France) https://stripe.com/fr/cookies-policy/legal. Même si toutes les boutiques n'utilisent pas Stripe, c'est une bonne pratique en matière de sécurité d'appliquer ce cookie sur toutes les pages vues. Stripe construit probablement une image des pages qui ont un quelconque lien avec l'API connectant Open Food France à leur système de paiement pour détecter les comportements anormaux pouvant suggérer un risque de fraude. Donc ce cookie a un rôle qui va au-delà de la simple fourniture d'un système de paiement. Le supprimer pourrait affecter la sécurité du service. Pour en savoir plus sur la politique de confidentialité de Stripe: https://stripe.com/fr/privacy."
cookie_stripe_desc: "Données collectées par notre processeur de paiement Stripe proposé aux utilisateurs d'Open Food Network https://stripe.com/fr/cookies-policy/legal. Même si toutes les comptoirs n'utilisent pas Stripe, c'est une bonne pratique en matière de sécurité d'appliquer ce cookie sur toutes les pages vues. Stripe construit probablement une image des pages qui ont un quelconque lien avec l'API connectant Open Food Network à leur système de paiement pour détecter les comportements anormaux pouvant suggérer un risque de fraude. Donc ce cookie a un rôle qui va au-delà de la simple fourniture d'un système de paiement. Le supprimer pourrait affecter la sécurité du service. Pour en savoir plus sur la politique de confidentialité de Stripe: https://stripe.com/fr/privacy."
statistics_cookies: "Cookies d'analyse de navigation"
statistics_cookies_desc: "Ces cookies ne sont pas obligatoires, mais nous permettent de mieux comprendre votre usage de la plateforme, les endroits où vous bloquez, les fonctionnalités qui semblent vous manquer, ou que vous n'utilisez jamais, afin de fournir le service le plus adapté possible aux besoins des utilisateurs."
statistics_cookies_analytics_desc_html: "Pour analyser les données concernant votre usage de la plateforme, nous utilisons Google Analytics, pas vraiment par choix, mais simplement parce que c'était l'outil d'analyse connecté par défaut via Spree, le logiciel e-commerce open source sur lequel nous avons construit. Mais nous espérons pouvoir rapidement migrer vers <a href='https://matomo.org/' target='_blank'>Matomo</a> (anciennement Piwik), outil d'analyse open source compatible RGPD et engagé sur le respect de la vie privée des utilisateurs."
@@ -1287,26 +1293,26 @@ fr_BE:
brandstory_intro: "Parfois, le meilleur moyen de réparer le système, c'est d'en inventer un autre..."
brandstory_part1: "Tout commence dans le sol. Avec ces paysans, agriculteurs, producteurs, engagés pour une agriculture durable et régénératrice, et désireux de partager leur histoire et leur passion avec fierté. Avec ces distributeurs souhaitant reconnecter les individus à leurs aliments et aux gens qui les produisent, soutenir les prises de conscience, dans une démarche de transparence, d'honnêteté, en assurant une juste rémunération des producteurs. Avec ces acheteurs qui croient que de meilleures décisions d'achats peuvent véritablement changer le monde."
brandstory_part2: "Nous avons besoin d'un outil pour rendre tout ça réel. Un moyen de redonner le pouvoir à ceux qui cultivent, vendent et achètent la nourriture. Un moyen de raconter les histoires, de gérer la logistique. Un moyen de transformer chaque jour les transactions en actions porteuses de changement."
brandstory_part3: "C'est pour cela que nous construisons cette plateforme, ce \"marché en ligne\", afin de rééquilibrer les échanges et redistribuer le pouvoir. Elle est transparente, pour assurer des relations équitables et favoriser les prises de conscience. Elle est open source, donc possédée par tout le monde. Elle se déploie aux échelles régionales et nationales, et des gens lancent de multiples versions à travers le monde."
brandstory_part3: "C'est pour cela que nous construisons cette plateforme, ce \"marché en ligne\", afin de rééquilibrer les échanges et redistribuer le pouvoir. Elle est transparente, pour assurer des relations équitables et favoriser les prises de conscience. Elle est «open source» et donc libre daccès. Elle est déployée dans plusieurs régions ou pays. "
brandstory_part4: "Elle fonctionne partout. Elle change tout."
brandstory_part5_strong: "Cette plateforme s'appelle Open Food Network."
brandstory_part6: "Nous aimons notre nourriture. Maintenant nous pouvons aussi aimer notre système alimentaire."
learn_body: "Explorer les modèles, les histoires et les ressources disponibles pour vous aider à développer votre propre initiative de commerce/organisation oeuvrant pour un système alimentaire équitable et juste. Trouver des outils pour vous former, des événements et autres opportunités d'apprendre de vos pairs."
learn_cta: "Découvrir "
connect_body: "Rechercher dans le répertoire des producteurs, hubs et groupes pour trouver des commerçants éthiques à côté de chez vous. Inscrivez votre commerce ou organisation sur OFFrance pour que les acheteurs puissent vous trouver. Rejoignez la communauté pour recevoir du soutien et résoudre ensemble les problèmes."
connect_body: "Rechercher dans le répertoire des producteurs, des comptoirs et des groupes pour trouver des commerçants éthiques à côté de chez vous. Inscrivez votre commerce ou organisation sur OFFrance pour que les acheteurs puissent vous trouver. Rejoignez la communauté pour recevoir du soutien et résoudre ensemble les problèmes."
connect_cta: "Explorer"
system_headline: "Faire mes courses - comment ça marche?"
system_step1: "1. Recherche"
system_step1_text: "Recherchez des produits locaux, de saison, parmi nos multiples boutiques indépendantes. Filtrez par localisation ou catégorie de produits, livraison en point retrait ou à domicile."
system_step1_text: "Recherchez des produits locaux, de saison, parmi nos multiples comptoirs. Filtrez par localisation, catégorie de produits, livraison ou propriétés du produits."
system_step2: "2. Achat"
system_step2_text: "Transformez vos achats en choisissant des produits locaux et abordables, proposés par les divers producteurs et hubs. Découvrez les histoires et les personnes qui se cachent derrière les produits!"
system_step2_text: "Transformez vos achats en choisissant des produits abordables, proposés par les divers producteurs et comptoirs. Découvrez les histoires et les personnes qui se cachent derrière les produits!"
system_step3: "3. Retrait / Livraison"
system_step3_text: "Réceptionnez vos produits à domicile, ou rendez vous chez votre producteur ou hub pour rencontrer les gens qui se cachent derrière les produits. Au delà de la bio-diversité, nous cultivons l'éco-diversité: vivez des expériences d'achat de nourriture uniques et humaines."
system_step3_text: "Réceptionnez vos commandes au comptoir, chez votre producteur. Certains proposent même la livraison à domicile. Vivez ainsi des expériences d'achat de nourriture uniques et humaines."
cta_headline: "Des achats qui rendent le monde un peu meilleur."
cta_label: "Je vote avec mes achats"
cta_label: "Faire mes courses "
stats_headline: "Nous créons un nouveau système alimentaire."
stats_producers: "agriculteurs et producteurs"
stats_shops: "boutiques"
stats_producers: "Producteurs"
stats_shops: "comptoirs"
stats_shoppers: "acheteurs"
stats_orders: "commandes"
checkout_title: Finalisation commande
@@ -1348,7 +1354,7 @@ fr_BE:
order_total_price: Total
order_includes_tax: (dont TVA)
order_payment_paypal_successful: Votre paiement via PayPal a été réalisé avec succès.
order_hub_info: Hub Info
order_hub_info: Comptoir Info
order_back_to_store: Retour à la boutique
order_back_to_cart: Retour au panier
bom_tip: "Utilisez cette page pour modifier les quantités sur plusieurs commandes à la fois. Les produits peuvent aussi être supprimés des commandes si nécessaire."
@@ -1361,7 +1367,7 @@ fr_BE:
email_welcome: "Bienvenue"
email_confirmed: "Veuillez confirmer votre adresse email."
email_registered: "fait maintenant partie de"
email_userguide_html: "Le Guide Utilisateur expliquant comment mettre en place son profil producteur ou son hub est accessible ici: %{link}"
email_userguide_html: "Le Guide Utilisateur expliquant comment mettre en place son profil producteur ou son comptoir est accessible ici: %{link}"
email_admin_html: "Vous pouvez gérer votre compte en vous connectant ici %{link} ou en cliquant sur la roue en haut à droite de la page d'accueil et en sélectionnant Administration."
email_community_html: "Nous avons aussi un forum de discussion en ligne (en anglais) pour échanger avec la communauté sur des questions liées au logiciel OFN et aux défis de la gestion d'un food hub. Nous vous invitons à y participer. Nous sommes en constante évolution et vos contributions à ce forum vont façonner les prochaines étapes. %{link}"
join_community: "Rejoindre la communauté"
@@ -1423,8 +1429,8 @@ fr_BE:
email_signup_welcome: "Bienvenue sur %{sitename}!"
email_signup_confirmed_email: "Merci d'avoir confirmé votre email."
email_signup_shop_html: "Vous pouvez maintenant vous connecter sur %{link}."
email_signup_text: "Merci d'avoir rejoint le réseau. Si vous êtes un client, nous sommes impatients de vous faire découvrir de nombreux agriculteurs fantastiques, de merveilleux hubs de distribution et des plats délicieux! Si vous êtes un producteur ou autre entreprise alimentaire, nous sommes ravis de vous compter parmi les membres du réseau."
email_signup_help_html: "Vos questions et feedbacks sont les bienvenus! Cliquez sur le bouton <em>Envoyer un commentaire</em> sur le site ou envoyez-nous un email à %{email}"
email_signup_text: "Merci d'avoir rejoint le réseau. Si vous êtes un client, nous sommes impatients de vous faire découvrir de nombreux agriculteurs fantastiques, de merveilleux comptoirs et des plats délicieux! Si vous êtes un producteur ou autre entreprise alimentaire, nous sommes ravis de vous compter parmi les membres du réseau."
email_signup_help_html: "Vos questions et commentaire sont les bienvenus! Cliquez sur le bouton <em>Envoyer un commentaire</em> sur le site ou envoyez-nous un email à %{email}"
invite_email:
greeting: "Bonjour!"
invited_to_manage: "Vous avez été invité(e) à gérer %{enterprise} sur %{instance}."
@@ -1467,7 +1473,7 @@ fr_BE:
hubs_matches: "Vous voulez dire?"
hubs_intro: Passez commande près de chez vous
hubs_distance: Le plus près de
hubs_distance_filter: "Afficher les boutiques près de %{location}"
hubs_distance_filter: "Afficher les comptoirs près de %{location}"
shop_changeable_orders_alert_html:
one: Votre commande chez <a href='%{path}' target='_blank'>%{shop} / %{order}</a> est ouverte pour vérification. Vous pouvez effectuer des modifications jusqu'au %{oc_close}.
other: Vous avez <a href='%{path}' target='_blank'>%{count} commandes avec %{shop}</a> ouvertes à la vérification. Vous pouvez effectuer des modifications jusqu'au %{oc_close}.
@@ -1492,13 +1498,13 @@ fr_BE:
components_filters_nofilters: "Pas de filtre"
components_filters_clearfilters: "Vider les filtres"
groups_title: Groupes
groups_headline: Groupes / réseaux territoriaux
groups_text: "Chaque producteur est unique. Chaque entreprise peut offrir quelque chose de différent. Nos groupes sont des collectifs de producteurs, des plateformes et des distributeurs qui partagent une proximité géographique, un marché fermier ou des valeurs. C'est ce qui rend votre expérience d'achat plus simple. Explorez donc ces groupes sélectionnés."
groups_headline: 'Groupes '
groups_text: "Chaque producteur est unique. Chaque entreprise peut offrir quelque chose de différent. Nos groupes sont des collectifs de producteurs, des plateformes et des comptoirs qui partagent une proximité géographique, un marché fermier ou des valeurs. C'est ce qui rend votre expérience d'achat plus simple. Explorez donc ces groupes sélectionnés."
groups_search: "Recherche par nom ou mot-clé"
groups_no_groups: "Aucun groupe trouvé"
groups_about: "A propos"
groups_producers: "Nos producteurs"
groups_hubs: "Nos hubs"
groups_hubs: "Nos comptoirs"
groups_contact_web: Contact
groups_contact_social: Suivre
groups_contact_address: Adresse
@@ -1507,35 +1513,35 @@ fr_BE:
groups_contact_facebook: Nous suivre sur Facebook
groups_signup_title: S'inscrire en tant que groupe
groups_signup_headline: Inscription groupe
groups_signup_intro: "Nous sommes une plate-forme très efficace pour le marketing collaboratif, une excellente manière pour vos membres et parties prenantes d'atteindre de nouveaux marchés. Nous sommes à but non lucratif, abordable et simple."
groups_signup_intro: "Vous faites partie dun réseau alimentaire cohérent, nous vous offrons lopportunité de gagner en visibilité. La carte interactive permet de localiser vos producteurs et vos comptoirs de vente. "
groups_signup_email: Nous écrire
groups_signup_motivation1: Nous transformons les systèmes alimentaires pour remettre de l'équité dans les échanges.
groups_signup_motivation2: C'est pourquoi nous sortons du lit chaque matin. Nous sommes une organisation à but non lucratif, basée sur un code source ouvert. Nous opérons en toute transparence.
groups_signup_motivation3: Vous avez de belles idées, et nous voulons vous aider. Nous partageons nos connaissances, réseaux et ressources. Nous savons que l'isolement ne crée pas le changement, alors coopérons.
groups_signup_motivation4: Nous venons à votre rencontrer.
groups_signup_motivation5: Vous êtes un réseau de circuits de distribution alternatifs, de producteurs, de distributeurs, une administration liée à l'industrie alimentaire ou une autorité locale?
groups_signup_motivation6: Quel que soit votre rôle dans la relocalisation des systèmes alimentaires, nous sommes prêts à vous soutenir. Si vous vous demandez à quoi Open Food Network ressemble / pourrait ressembler dans votre coin du monde, contactez-nous.
groups_signup_motivation7: Nous contribuons à remettre du sens dans les systèmes alimentaires.
groups_signup_motivation8: Vous avez besoin de connecter et d'outiller vos réseaux, nous offrons une plate-forme pour la coopération et l'action. Vous souhaitez de l'engagement. Nous vous aidons à atteindre les acteurs, les parties-prenantes, les secteurs.
groups_signup_motivation9: Vous avez besoin de ressources. Nous mettons à votre service notre expérience. Vous avez besoin de coopération. Nous vous connectons à un large réseau d'acteurs et d'organisations soeurs partout dans le monde.
groups_signup_pricing: Compte groupe
groups_signup_motivation1: 'Oxfam-Magasins du monde '
groups_signup_motivation2: Le réseau des Magasins du monde-Oxfam est étendu et compte 70 points de ventes répartis à Bruxelles et en Wallonie. Tous les magasins proposent un vaste choix de produits alimentaires, de cosmétiques, de décorations, de bijoux, daccessoires de mode et de vêtements de seconde main.
groups_signup_motivation3: Lorganisation a localisé tous ses magasins sur le groupe « Oxfam-Magasins du monde ». Certaines équipes ont décidé de vendre des produits équitables et locaux via OFN. Envie de rejoindre une équipe Oxfam pour développer la vente en ligne? Envie de créer une équipe Oxfam qui organise de la vente de produits équitables et locaux? Envie de vendre vos produits dans un magasin du monde Oxfam? Formation et accompagnement possible à la demande via openfoodnetwork@mdmoxfam.be
groups_signup_motivation4: Oxfam-Magasins du monde à votre rencontre
groups_signup_motivation5: Envie daméliorer la plateforme, dapporter des propositions, de nouvelles fonctionnalités, de participer au développement et à la gouvernance du projet.
groups_signup_motivation6: Contactez-nous via openfoodnetwork@mdmoxfam.be
groups_signup_motivation7: 'Envie de constituer un groupe? '
groups_signup_motivation8: Vous pourrez connecter et outiller votre réseau, nous offrons une plate-forme pour la coopération et l'action. Vous souhaitez de l'engagement. Nous vous aidons à atteindre les acteurs, les parties-prenantes, les secteurs.
groups_signup_motivation9: 'Découvrez la suite. '
groups_signup_pricing: Créer un compte groupe
groups_signup_studies: Etudes de cas
groups_signup_contact: Vous voulez discuter?
groups_signup_contact: Prêt à en discuter?
groups_signup_contact_text: "Prenez contact et découvrez ce qu'Open Food France peut faire pour vous:"
groups_signup_detail: "Plus de précisions."
groups_signup_detail: "Comment ça marche"
login_invalid: "Email ou mot de passe erroné"
modal_hubs: "Food Hubs"
modal_hubs_abstract: Nos food hubs sont les points de contact entre vous et les personnes qui produisent votre nourriture!
modal_hubs_content1: Vous pouvez chercher le hub qui vous convient par localisation ou par nom. Certains hubs ont de multiples points de retrait de vos achats, et certains proposent également la livraison à domicile. Chaque food hub est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs.
modal_hubs_content2: Vous pouvez uniquement faire vos courses dans un hub à la fois.
modal_groups: "Groupes / réseaux territoriaux"
modal_groups_content1: Voilà les organisations et les relations inter-hubs qui constituent l'Open Food Network.
modal_hubs_content1: Vous pouvez chercher le comptoir qui vous convient par localisation ou par nom. Certains comptoirs ont de multiples points de retrait de vos achats, et certains proposent également la livraison à domicile. Chaque comptoir est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs.
modal_hubs_content2: Vous pouvez uniquement faire vos courses dans un comptoir à la fois.
modal_groups: "Groupes"
modal_groups_content1: Voilà les organisations et les relations inter-comptoirs qui constituent l'Open Food Network.
modal_groups_content2: Certains groupes sont regroupés pas localisation ou région, d'autres sur des smilitudes non géographiques.
modal_how: "Comment ça marche"
modal_how_shop: Faire vos courses sur Open Food Network
modal_how_shop_explained: Recherchez un food hub près de chez vous et commencez vos achats! Vous pouvez afficher plus d'infos sur chaque food hub pour voir le type de produits qu'il propose, et cliquer sur le hub pour commencer vos achats. (Vous ne pouvez faire vos courses que dans un food hub à la fois.)
modal_how_shop_explained: Recherchez un comptoir près de chez vous et commencez vos achats! Vous pouvez afficher plus d'infos sur chaque comptoir pour voir le type de produits qu'il propose, et cliquer sur le comptoir pour commencer vos achats. (Vous ne pouvez faire vos courses que dans un food hub à la fois.)
modal_how_pickup: Frais de retrait, livraison et transport
modal_how_pickup_explained: Certains food hubs livrent à domicile, d'autres vous demandent de venir récupérer vos achats dans un point de retrait. Vous pouvez voir quelle options sont proposées sur la page d'accueil du hub, et sélectionner votre choix au moment de la validation de la commande. La livraison à domicile coûtera souvent plus cher, et les prix diffèrent selon le hub. Chaque food hub est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs.
modal_how_pickup_explained: Certains comptoirs livrent à domicile, d'autres vous demandent de venir récupérer vos achats dans un point de retrait. Vous pouvez voir quelle options sont proposées sur la page d'accueil du hub, et sélectionner votre choix au moment de la validation de la commande. La livraison à domicile coûtera souvent plus cher, et les prix diffèrent selon le comptoir. Chaque comptoir est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les comptoirs.
modal_how_more: En savoir plus
modal_how_more_explained: "Pour en savoir plus sur Open Food Network, comment ça marche, et contribuer, allez voir:"
modal_producers: "Producteurs"
@@ -1553,10 +1559,10 @@ fr_BE:
producers_headline: Trouvez un producteur local
producers_signup_title: S'inscrire en tant que producteur
producers_signup_headline: Des producteurs, autonomes
producers_signup_motivation: Vendez vos produits et racontez vos histoires pour toucher de nouveaux marchés. Gagnez du temps et de l'argent sur la gestion des opérations courantes. Vous pouvez innover sans prendre de risque. Nous nivellons le terrain de jeu pour des échanges plus équitables.
producers_signup_motivation: Vendez vos produits. Présentez votre projet pour une alimentation durable. Économisez du temps et de l'argent sur la gestion des opérations courantes. Participez à un système alimentaire transparent et équitable.
producers_signup_send: Rejoindre le réseau
producers_signup_enterprise: Comptes entreprises
producers_signup_studies: Les histoires de nos producteurs.
producers_signup_enterprise: Profil Producteur-trice-s
producers_signup_studies: Témoignages de nos producteurs.
producers_signup_cta_headline: Rejoindre le réseau!
producers_signup_cta_action: Rejoindre le réseau
producers_signup_detail: Comment ça marche.
@@ -1572,24 +1578,24 @@ fr_BE:
sell_headline: "Rejoignez l'Open Food Network !"
sell_motivation: "Promouvez vos aliments."
sell_producers: "Producteurs"
sell_hubs: "Hubs"
sell_hubs: "Comptoirs"
sell_groups: "Groupes"
sell_producers_detail: "Créer un profil pour votre entreprise sur OFN en quelques minutes. A tout moment vous pourrez créer un magasin en ligne pour vendre vos produits en direct aux acheteurs."
sell_hubs_detail: "Créer un profil pour votre entreprise de distribution ou organisation sur OFN. A tout moment vous pourrez créer une boutique multi-fournisseurs."
sell_groups_detail: "Créer un répertoire sur mesure (regroupant différents producteurs et hubs de distribution) pour votre région ou votre organisation."
sell_producers_detail: "Créer un profil pour votre activité sur OFN en quelques minutes. A tout moment vous pourrez créer un comptoir en ligne pour vendre vos produits en direct aux acheteurs."
sell_hubs_detail: "Créer un profil pour votre activité sur OFN en quelques minutes. A tout moment vous pourrez créer un comptoir en ligne pour vendre vos produits en direct aux acheteurs."
sell_groups_detail: "Créer un répertoire sur mesure (regroupant différents producteurs et comptoirs) pour votre région ou votre organisation."
sell_user_guide: "En savoir plus en explorant le guide utilisateur."
sell_listing_price: "La création d'un profil sur OFN, ouvrir, gérer un magasin ou créer un groupe pour votre organisation ou réseau régional sur l'OFN est à contribution libre. Afin de maintenir et développer ce commun numérique, nous avons besoin de compétences et des fonds. Nous vous invitons à contribuer au commun \"en comtences\" (développement de fonctionnalités, recherche de financement, support utilisateur, etc.) ou \"en argent\" d'un montant fixe par mois et/ou 2% de votre chiffre d'affaires par les mois. "
sell_embed: "Nous pouvons aussi intégrer votre boutique OFN dans votre propre site web ou construire un site web d'alimentation locale sur mesure pour votre région."
sell_listing_price: "Sur OFN il est possible de créer un profil, ouvrir et gérer un comptoir de vente, ou créer un groupe pour votre organisation ou réseau régional. Oxfam-Magasins du monde prend en charge la coordination de lOFN en Belgique. Pour que lapplication puisse exister, il faut la financer. Après 6 mois dutilisation gratuite du service de vente en ligne, une contribution de 2% du chiffre daffaires des ventes en ligne sera demandée. (le reste des services restant gratuits). OFN est une plateforme coorative, les différentes règles de fonctionnement dont les contributions seront décidées collectivement au fur et à mesure du projet. "
sell_embed: "Dici là, vous pouvez également participer au projet. Soit en co-créant la communauté belge, en contribuant à lamélioration des fonctionnalités…  Soit en mettant à disposition : un local pour la démonstration de loutil ou un point relais pour faciliter les livraisons… Soit en le finançant BE41 0682 2264 2410 com: Open Food Network"
sell_ask_services: "Nous consulter sur les services des partenaires OFN."
shops_title: Boutiques
shops_title: Comptoirs
shops_headline: Des achats qui transforment.
shops_text: Les aliments poussent selon des cycles naturels, les fermiers récoltent en cycles, nous achetons aussi en cycles. Si un cycle de vente est terminé, attendez le suivant ou demandez des infos à votre magasin préféré.
shops_signup_title: S'inscrire en tant que hub
shops_signup_headline: Des hubs divers et variés
shops_signup_motivation: Quel que soit votre modèle, vous pouvez vous appuyer sur Open Food France. Si vous voulez le faire évoluer, nous sommes là pour vous aider. Nous agissons selon des principes de non-lucrativité, d'indépendance, et de transparence. Et nous faisons tout notre possible pour répondre à vos besoins et vous accompagner en toute circonstance.
shops_text: Les aliments poussent selon des cycles naturels, les fermiers récoltent selon les saisons. Alors ici, nous achetons aussi en suivant des cycles. Si un cycle de vente est terminé, attendez le suivant ou contactez votre comptoir favori !
shops_signup_title: S'inscrire en tant que comptoir
shops_signup_headline: Des comptoirs divers et variés
shops_signup_motivation: Quel que soit votre modèle, Open Food Network vous offre lopportunité de valoriser la transparence et de faciliter la logistique de votre organisation. Non-lucratif, nous faisons tout notre possible pour répondre à vos besoins et vous accompagner.
shops_signup_action: Rejoindre le réseau
shops_signup_pricing: Comptes entreprises
shops_signup_stories: Histoires de hubs.
shops_signup_pricing: Profil Comptoir
shops_signup_stories: Témoignages de comptoirs.
shops_signup_help: Nous sommes là pour vous aider.
shops_signup_help_text: Vous avez besoin de pouvoir travailler de manière efficace. Vous avez besoin de nouveaux acheteurs et de partenaires logistiques. Vous souhaitez que votre histoire soit racontée tout au long du circuit, que l'acheteur final sache qui se trouve derrière les produits.
shops_signup_detail: Comment ça marche.
@@ -1605,9 +1611,9 @@ fr_BE:
orders_form_admin: Admin & traitements
orders_form_total: Total
orders_oc_expired_headline: Les commandes ne sont plus possibles pour ce cycle de vente.
orders_oc_expired_text: "Désolé, les commandes pour ce cycle de vente ont été clôturées il y a %{time}! Veuillez contacter directement le hub pour voir s'il accepte les commandes tardives."
orders_oc_expired_text_others_html: "Désolé, les commandes pour ce cycle de vente ont été clôturées il y a %{time}! Veuillez contacter directement le hub pour voir s'il accepte les commandes tardives <strong>%{link}</strong>."
orders_oc_expired_text_link: "ou voir si d'autres cycles de vente sont ouverts pour ce hub"
orders_oc_expired_text: "Désolé, les commandes pour ce cycle de vente ont été clôturées il y a %{time}! Veuillez contacter directement le comptoir pour voir s'il accepte les commandes tardives."
orders_oc_expired_text_others_html: "Désolé, les commandes pour ce cycle de vente ont été clôturées il y a %{time}! Veuillez contacter directement le comptoir pour voir s'il accepte les commandes tardives <strong>%{link}</strong>."
orders_oc_expired_text_link: "ou voir si d'autres cycles de vente sont ouverts pour ce comptoir"
orders_oc_expired_email: "Email:"
orders_oc_expired_phone: "Téléphone:"
orders_show_title: Confirmation de commande
@@ -1657,7 +1663,7 @@ fr_BE:
one_filter_applied: "1 filtre appliqué"
x_filters_applied: "filtres appliqués"
submitting_order: "Votre commande est en cours d'envoi : veuillez patienter"
confirm_hub_change: "Confirmer? Cette action modifiera la boutique sélectionnée et tous les articles de votre panier seront effacés."
confirm_hub_change: "Confirmer? Cette action modifiera le comptoir sélectionné et tous les articles de votre panier seront effacés."
confirm_oc_change: "Confirmer? Cette action modifiera le cycle de vente sélectionné et tous les articles de votre panier seront effacés."
location_placeholder: "Saisissez une localisation..."
error_required: "Champ obligatoire"
@@ -1687,7 +1693,7 @@ fr_BE:
choose_password: "Choisissez un mot de passe"
confirm_password: "Confirmez votre mot de passe"
action_signup: "S'inscrire"
welcome_to_ofn: "Bienvenue sur Open Food Network"
welcome_to_ofn: "Bienvenue sur Open Food Network!"
signup_or_login: "Commencez par vous inscrire (ou connexion)"
have_an_account: "Déjà inscrit?"
action_login: "Se connecter."
@@ -1705,7 +1711,7 @@ fr_BE:
no_producer: "Non, je ne suis pas un producteur"
producer_field_error: "Veuillez faire un choix. Etes vous un producteur?"
yes_producer_help: "Un producteur fabrique de bonnes choses à boire et à manger. Vous êtes un producteur si vous les faites pousser, les élevez, les pétrissez, transformez, fermentez, les réduisez en grains, etc."
no_producer_help: "Si vous n'êtes pas un producteur, vous êtes probablement un revendeur ou distributeur alimentaire : un \"hub\", une coopérative, un groupement d'achat, un revendeur, un grossiste, ou autre."
no_producer_help: "Si vous n'êtes pas un producteur, vous êtes probablement un revendeur ou distributeur alimentaire : un comptoir, une coopérative, un groupement d'achat, un revendeur, un grossiste, ou autre."
create_profile: "Créer votre profil"
enterprise:
registration:
@@ -1807,7 +1813,7 @@ fr_BE:
instagram: "Instagram"
instagram_placeholder: "ex: @instagram_pseudo"
registration_greeting: "Bonjour!"
registration_intro: "Vous pouvez maintenant créer votre profil \"Producteur\" ou \"Hub\""
registration_intro: "Vous pouvez maintenant créer votre profil \"Producteur\" ou \"Comptoir\""
registration_action: "Démarrons!"
registration_checklist: "Vous aurez besoin de"
registration_time: "5-10 minutes"
@@ -1831,7 +1837,7 @@ fr_BE:
registration_type_no_producer: "Non, je ne suis pas un producteur"
registration_type_error: "Veuillez faire un choix. Etes vous un producteur?"
registration_type_producer_help: "Un producteur fabrique de bonnes choses à boire et à manger. Vous êtes un producteur si vous les faites pousser, les élevez, les pétrissez, transformez, fermentez, les réduisez en grains, etc."
registration_type_no_producer_help: "Si vous n'êtes pas un producteur, vous êtes probablement un revendeur ou distributeur alimentaire: un \"hub\", une coopérative, un groupement d'achat, un revendeur, un grossiste, ou autre."
registration_type_no_producer_help: "Si vous n'êtes pas un producteur, vous êtes probablement un revendeur ou distributeur alimentaire: un comptoir, une coopérative, un groupement d'achat, un revendeur, un grossiste, ou autre."
registration_images_headline: "Merci!"
registration_images_description: "Ajoutez maintenant de jolies photos pour que votre profil soit attractif! :)"
registration_detail_headline: "Commençons"
@@ -1953,11 +1959,11 @@ fr_BE:
queued: "En attente"
scheduled_for: "Prévu pour"
customers: "Acheteurs"
please_select_hub: "Veuillez sélectionner un Hub"
please_select_hub: "Veuillez sélectionner un comptoir"
loading_customers: "Chargement de la liste des acheteurs"
no_customers_found: "Aucun acheteur trouvé"
go: "Lancer"
hub: "Hub"
hub: "Comptoir"
producer: "Producteur"
product: "Produit"
price: "Prix"
@@ -1973,7 +1979,7 @@ fr_BE:
spree_admin_enterprises_fees: "Marges et commissions"
spree_admin_enterprises_none_create_a_new_enterprise: "CRÉER UNE NOUVELLE ENTREPRISE"
spree_admin_enterprises_none_text: "Vous n'avez pas encore d'entreprise"
spree_admin_enterprises_tabs_hubs: "HUBS"
spree_admin_enterprises_tabs_hubs: "COMPTOIR"
spree_admin_enterprises_producers_manage_products: "GÉRER LES PRODUITS"
spree_admin_enterprises_any_active_products_text: "Vous n'avez aucun produit actif."
spree_admin_enterprises_create_new_product: "CRÉER UN NOUVEAU PRODUIT"
@@ -1996,7 +2002,7 @@ fr_BE:
spree_order_availability_error: "Le distributeur ne peut fournir les produits de votre panier pour ce cycle de vente."
spree_order_populator_error: "Le distributeur ne peut fournir tous les produits de votre panier pour ce cycle de vente. Merci de choisir un autre distributeur ou un autre cycle de vente."
spree_order_populator_availability_error: "Ce produit n'est pas disponible pour ce cycle de vente / distributeur."
spree_distributors_error: "Veuillez sélectionner au moins un hub"
spree_distributors_error: "Veuillez sélectionner au moins un comptoir "
spree_user_enterprise_limit_error: "^ %{email} ne peut pas créer de nouvelles entreprises (limite actuelle : %{enterprise_limit} entreprises )."
spree_variant_product_error: doit avoir au moins une variante
your_profil_live: "Votre profil en ligne"
@@ -2028,10 +2034,10 @@ fr_BE:
admin_share_zipcode: "Code postal"
admin_share_country: "Pays"
admin_share_state: "Département"
hub_sidebar_hubs: "Hubs"
hub_sidebar_hubs: "Comptoir"
hub_sidebar_none_available: "Aucun disponible"
hub_sidebar_manage: "Gérer"
hub_sidebar_at_least: "Sélectionnez un/des hubs"
hub_sidebar_at_least: "Sélectionnez un/des comptoir/s"
hub_sidebar_blue: "bleu"
hub_sidebar_red: "rouge"
shop_trial_in_progress: "Votre période de test se termine dans %{days}."
@@ -2042,7 +2048,7 @@ fr_BE:
report_customers_csv: "Télécharger en csv"
report_producers: "Producteurs:"
report_type: "Type de rapport: "
report_hubs: "Hubs:"
report_hubs: "Comptoirs:"
report_payment: "Méthodes de paiement:"
report_distributor: "Distributeurs:"
report_payment_by: 'Paiements par type'
@@ -2066,10 +2072,10 @@ fr_BE:
report_header_address: Adresse
report_header_billing_address: Adresse de facturation
report_header_relationship: Droits
report_header_hub: Hub
report_header_hub_address: Adresse du Hub
report_header_to_hub: Distributeur
report_header_hub_code: Code du Hub
report_header_hub: Comptoir
report_header_hub_address: Adresse du comptoir
report_header_to_hub: Comptoir
report_header_hub_code: Code du comptoir
report_header_code: Code
report_header_paid: Payé ?
report_header_delivery: Livré ?
@@ -2228,8 +2234,9 @@ fr_BE:
enterprise_fee_whole_order: Commande totale
enterprise_fee_by: "%{type}marges/frais par %{role} %{enterprise_name}"
validation_msg_relationship_already_established: "^Un lien est déjà établi entre ces entreprises."
validation_msg_at_least_one_hub: "^Sélectionnez au moins un hub"
validation_msg_at_least_one_hub: "^Sélectionnez au moins un comptoir"
validation_msg_product_category_cant_be_blank: "^Veuillez sélectionner la catégorie produit"
validation_msg_tax: "Les catégories de taxes sont obligatoires"
validation_msg_tax_category_cant_be_blank: "^Veuillez sélectionner la TVA applicable"
validation_msg_is_associated_with_an_exising_customer: "est associé à un acheteur existant"
content_configuration_pricing_table: "(A FAIRE : Tableau des tarifs)"
@@ -2244,19 +2251,19 @@ fr_BE:
product_importer_products_save_error: n'a pu sauvegarder aucun produit :-(
product_import_file_not_found_notice: 'Fichier non trouvé ou impossible à ouvrir'
product_import_no_data_in_spreadsheet_notice: 'Aucune donnée trouvée dans le tableau'
order_choosing_hub_notice: Votre hub a été sélectionné.
order_choosing_hub_notice: Votre comptoir a été sélectionné.
order_cycle_selecting_notice: Votre cycle de vente a été sélectionné.
adjustments_tax_rate_error: "^Veuillez vérifier la TVA applicable pour cet ajustement."
active_distributors_not_ready_for_checkout_message_singular: >-
Le hub %{distributor_names} est sélectionné comme distributeur dans un cycle
de vente actif, mais n'a pas paramétré de méthode de livraison et/ou de paiement.
La boutique de ce hub restera inaccessible jusqu'à ce qu'une méthode de livraison
Le comptoir %{distributor_names} est sélectionné comme distributeur dans un
cycle de vente actif, mais n'a pas paramétré de méthode de livraison et/ou de
paiement. Ce comptoir restera inaccessible jusqu'à ce qu'une méthode de livraison
et une méthode de paiement aient été paramétrées.
active_distributors_not_ready_for_checkout_message_plural: >-
Les hubs %{distributor_names} sont sélectionnés comme distributeurs dans un
cycle de vente actif, mais n'ont pas paramétré de méthode de livraison et/ou
de paiement. Les boutiques de ces hubs resteront inaccessibles jusqu'à ce qu'une
méthode de livraison et une méthode de paiement aient été paramétrées.
Les comptoirs %{distributor_names} sont sélectionnés comme distributeurs dans
un cycle de vente actif, mais n'ont pas paramétré de méthode de livraison et/ou
de paiement. Les comptoirs resteront inaccessibles jusqu'à ce qu'une méthode
de livraison et une méthode de paiement aient été paramétrées.
enterprise_fees_update_notice: Les marges et commissions de votre entreprise ont été mises à jour.
enterprise_fees_destroy_error: "Cette marge ou commission ne peut être supprimée car elle est utilisée par la vente suivante : %{id} - %{name}."
enterprise_register_package_error: "Veuillez choisir une option"
@@ -2292,7 +2299,7 @@ fr_BE:
error: Erreur
unavailable: Non disponible
profile: Profil
hub: Hub
hub: Comptoir
shop: Boutique
choose: Choisir
resolve_errors: Veuillez corriger les erreurs suivantes
@@ -2327,7 +2334,7 @@ fr_BE:
saved: Enregistré
saving: En cours d'enregistrement
enterprise_package:
hub_profile: Profil Hub
hub_profile: Profil Comptoir
hub_profile_cost: "COÛT: CONTRIBUTION LIBRE"
hub_profile_text1: >
Les visiteurs voient votre profil sur la carte, et peuvent vous contacter.
@@ -2335,14 +2342,14 @@ fr_BE:
hub_profile_text2: >
Créez votre profil et utilisez Open Food Network pour vous connecter
à votre système alimentaire territorial.
hub_shop: Boutique Hub
hub_shop: Comptoir
hub_shop_text1: >
Vous proposez des produits de différents producteurs de votre région,
artisans, ou distributeurs afin de proposer une offre complète dans
votre boutique. Vous soutenez ainsi le développement de votre système
alimentaire territorial !
hub_shop_text2: >
Un hub n'a pas de modèle figé, il peut s'agir d'un groupement d'achat,
Un comptoir n'a pas de modèle figé, il peut s'agir d'un groupement d'achat,
d'une AMAP, d'une épicerie coopérative, d'une épicerie locale de quartier
ou épicerie en circuit court en ligne, etc.
hub_shop_text3: >
@@ -2367,30 +2374,32 @@ fr_BE:
pas besoin d'une boutique sur Open Food Network.
profile_only_text3: >
Saisissez votre catalogue produits sur Open Food Network, ce qui permettra
aux hubs-distributeurs utilisant la plateforme de les proposer dans
leurs boutiques (sur votre autorisation).
aux comptoirs utilisant la plateforme de les proposer dans leurs boutiques
(sur votre autorisation).
producer_shop: Boutique Producteur
producer_shop_text1: >
Vendez vos produits en direct aux mangeurs/restaurateurs/etc. via votre
propre Boutique Producteur sur Open Food Network.
producer_shop_text2: >
Une Boutique Producteur vous permet de vendre uniquement vos propres
produits. Si vous voulez vendre d'autres produits, sélectionnez "Hub
produits. Si vous voulez vendre d'autres produits, sélectionnez "Comptoir
Producteur"
producer_hub: Hub Producteur
producer_hub: Comptoir Producteur
producer_hub_text1: >
Vous vendez non seulement vos produits, mais aussi des produits d'autres
producteurs de votre région, artisans, ou distributeurs afin de proposer
une offre complète dans votre boutique. Vous soutenez ainsi le développement
de votre système alimentaire territorial !
producer_hub_text2: >
Un hub producteur peut prendre différentes formes, une boutique de vente
directe, un magasin de producteurs en ligne, un drive fermier, etc.
Un comptoir producteur peut prendre différentes formes, une boutique
de vente directe, un magasin de producteurs en ligne, un drive fermier,
etc.
producer_hub_text3: >
Open Food Network soutient tous les modèles de hubs alimentaires, nous
pensons que la résilience du système viendra de la diversité des modèles.
Donc quel que soit votre modèle, nous souhaitons vous apporter les outils
de gestion donc vous avez besoin pour opérer votre circuit court.
Open Food Network soutient tous les modèles de distributions alimentaires,
nous pensons que la résilience du système viendra de la diversité des
modèles. Donc quel que soit votre modèle, nous souhaitons vous apporter
les outils de gestion donc vous avez besoin pour opérer votre circuit
court.
get_listing: Référencez votre entreprise
always_free: CONTRIBUTION LIBRE
sell_produce_others: Vendez des produits de multiples fournisseurs différents
@@ -2605,14 +2614,21 @@ fr_BE:
bulk_coop_customer_payments: 'Achats groupés - Paiement des acheteurs'
users:
index:
listing_users: "Utilisateur d'annonces"
new_user: "Nouvel utilisateur"
user: "Utilisateur"
enterprise_limit: "Nombre max d'entreprises"
search: "Rechercher"
email: "Email"
edit:
editing_user: "Utilisateur d'édition"
back_to_users_list: "Retour vers la liste des utilisateurs"
general_settings: "Réglages Généraux"
form:
email: "Email"
roles: "Roles"
enterprise_limit: "Nombre max d'entreprises"
confirm_password: "Confirmer le 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}."
@@ -2739,9 +2755,9 @@ fr_BE:
default?: Carte utilisée par défaut?
delete?: Supprimer?
cards:
authorised_shops: Boutiques autorisées.
authorised_shops_popover: Voilà la liste des boutiques que vous avez autorisées à débiter votre carte de paiement par défaut dans le cadre de vos abonnements en cours (commandes récurrentes). Les informations concernant votre carte de paiement sont sécurisées et ne sont pas accessibles par le gérant de la boutique. Vous recevrez systématiquement une notification avant tout débit sur votre carte.
saved_cards_popover: Voilà la liste des cartes de paiement que vous avez enregistrées. Votre carte par défaut sera automatiquement sélectionnée au moment de la finalisation d'une commande, et pourra être débitée par les magasins auxquels vous avez donné cette autorisation (voir à droite).
authorised_shops: Comptoirs autorisés.
authorised_shops_popover: Voilà la liste des comptoirs que vous avez autorisées à débiter votre carte de paiement par défaut dans le cadre de vos abonnements en cours (commandes récurrentes). Les informations concernant votre carte de paiement sont sécurisées et ne sont pas accessibles par le gérant de la boutique. Vous recevrez systématiquement une notification avant tout débit sur votre carte.
saved_cards_popover: Voilà la liste des cartes de paiement que vous avez enregistrées. Votre carte par défaut sera automatiquement sélectionnée au moment de la finalisation d'une commande, et pourra être débitée par les comptoirs auxquels vous avez donné cette autorisation (voir à droite).
authorised_shops:
shop_name: "Nom de la boutique"
allow_charges?: "Autoriser les prélèvements ?"

View File

@@ -1,5 +1,5 @@
nb:
language_name: "Engelsk"
language_name: "Norsk"
activerecord:
attributes:
spree/order:
@@ -195,6 +195,7 @@ nb:
admin_and_handling: Admin & Håndtering
profile: Profil
supplier_only: Kun leverandør
has_shopfront: Har Butikk
weight: Vekt
volume: Volum
items: Elementer
@@ -219,6 +220,7 @@ nb:
password_confirmation: Passordbekreftelse
reset_password_token: Tilbakestill passordtoken
expired: er utløpt, vennligst be om en ny
back_to_payments_list: "Tilbake til betalingsliste"
actions:
create_and_add_another: "Opprett og legg til en annen"
admin:
@@ -381,11 +383,11 @@ nb:
code: Kode
duplicate_code: "Denne koden er allerede brukt."
bill_address: "Fakturaadresse"
ship_address: "Leveringsstatus"
ship_address: "Leveringsadresse"
update_address_success: 'Adresse oppdatert.'
update_address_error: 'Beklager! Vennligst skriv alle de obligatoriske feltene!'
edit_bill_address: 'Rediger fakturaadresse'
edit_ship_address: 'Rediger leveringsadresse'
edit_ship_address: 'Rediger Leveringsadresse'
required_fileds: 'Obligatoriske felt er merket med en stjerne'
select_country: 'Velg Land'
select_state: 'Velg Fylke'
@@ -1153,9 +1155,9 @@ nb:
menu_5_title: "Om"
menu_5_url: "https://openfoodnetwork.org/ofn-local/open-food-network-scandinavia/"
menu_6_title: "Koble til"
menu_6_url: " "
menu_6_url: "https://openfoodnetwork.org/au/connect/"
menu_7_title: "Lære"
menu_7_url: " "
menu_7_url: "https://openfoodnetwork.org/au/learn/"
logo: "Logo (640x130)"
logo_mobile: "Mobil logo (75x26)"
logo_mobile_svg: "Mobil logo (SVG)"
@@ -2235,6 +2237,7 @@ nb:
validation_msg_relationship_already_established: "^Den relasjonen er allerede etablert."
validation_msg_at_least_one_hub: "^Minst én hub må være valgt"
validation_msg_product_category_cant_be_blank: "^Produktkategori kan ikke være blank"
validation_msg_tax: "^Avgiftskategori er påkrevd"
validation_msg_tax_category_cant_be_blank: "^Avgiftskategori kan ikke være blank"
validation_msg_is_associated_with_an_exising_customer: "er assosiert med en eksisterende kunde"
content_configuration_pricing_table: "(TODO: Pristabell)"
@@ -2598,14 +2601,21 @@ nb:
bulk_coop_customer_payments: 'Bulk Co-op - Kunde Betalinger'
users:
index:
listing_users: "Lister opp brukere"
new_user: "Ny Bruker"
user: "Bruker"
enterprise_limit: "Bedriftsgrense"
search: "Søk"
email: "Epost"
edit:
editing_user: "Redigerer Bruker"
back_to_users_list: "Tilbake til brukerlisten"
general_settings: "Generelle innstillinger"
form:
email: "Epost"
roles: "Roller"
enterprise_limit: "Bedriftsgrense"
confirm_password: "Bekreft Passord"
password: "Passord"
email_confirmation:
confirmation_pending: "Epostbekreftelse venter. Vi har sendt en bekreftelses-epost til %{address}."

View File

@@ -60,6 +60,9 @@ pt:
user_passwords:
spree_user:
updated_not_active: "A sua palavra-passe foi redefinida, mas o seu email ainda não foi confirmado."
models:
order_cycle:
cloned_order_cycle_name: "CÓPIA DE%{order_cycle}"
enterprise_mailer:
confirmation_instructions:
subject: "Por favor confirme o endereço de email de %{enterprise}"
@@ -67,9 +70,26 @@ pt:
subject: "%{enterprise} está agora em %{sitename}"
invite_manager:
subject: "%{enterprise} convidou-o/a para gestor/a"
order_mailer:
cancel_email:
dear_customer: "Caro Consumidor,"
instructions: "A sua encomenda foi cancelada. Por favor guarde está informação para seu registo."
order_summary_canceled: "Sumário de Encomenda [CANCELADA]"
subject: "Cancelamento de Encomenda"
subtotal: "Subtotal: %{subtotal}"
total: "Total da Encomenda: %{total}"
producer_mailer:
order_cycle:
subject: "Relatório de ciclo de encomendas de %{producer}"
shipment_mailer:
shipped_email:
dear_customer: "Caro Consumidor,"
instructions: "A sua encomenda foi enviada"
shipment_summary: "Sumário de Envio"
subject: "Notificação de Envio"
thanks: "Obrigado."
track_information: "Informação de envio: %{tracking}"
track_link: "Link de envio: %{url}"
subscription_mailer:
placement_summary_email:
subject: Um resumo das encomendas de subscrição feitas recentemente
@@ -170,6 +190,7 @@ pt:
admin_and_handling: Administração & Logística
profile: Perfil
supplier_only: Só Fornecedor
has_shopfront: Tem Loja
weight: Peso
volume: Volume
items: Itens
@@ -191,6 +212,10 @@ pt:
quantity: Quantidade
pick_up: Levantamento
copy: Copiar
password_confirmation: Confirmação de Palavra-passe
reset_password_token: Redefinir palavra-passe
expired: expirou, por favor peça uma nova
back_to_payments_list: "Voltar à lista de pagamentos"
actions:
create_and_add_another: "Criar e acrescentar outro"
admin:
@@ -336,6 +361,13 @@ pt:
charges_enabled_warning: "Aviso: As taxas não estão activas para a sua conta"
auth_fail_error: A chave da API que indicou não é válida
empty_api_key_error_html: Não foi fornecida nenhuma chave de API Stripe. Para definir a sua chave de API, por favor siga <a href="https://github.com/openfoodfoundation/openfoodnetwork/wiki/Setting-up-Stripe-on-an-OFN-instance" target="_blank">estas instruções</a>
matomo_settings:
edit:
title: "Configurações Matomo"
matomo_url: "URL Matomo"
matomo_site_id: "Site ID Matomo"
info_html: "Matomo é uma ferramenta de análise web e mobile. Pode instalar o Matomo no seu servidor ou utilizar um serviço na cloud. Veja <a href='http://matomo.org' target='_blank'>matomo.org</a> para mais informações."
config_instructions_html: "Aqui pode configurar a integração com Matomo. O URL Matomo em baixo deve apontar para o serviror para onde a informação de tracking de utilizadores será enviada; se deixado vazio, o tracking de utilizadores através do Matomo ficará desactivado. O campo Site ID não é obrigatório mas útil se estive a fazer tracking de mais do que um website numa instância única do Matomo; pode ser encontrado na consola da instância Matomo."
customers:
index:
add_customer: "Adicionar Consumidor/a"
@@ -358,6 +390,7 @@ pt:
update_address: 'Actualizar Morada'
confirm_delete: 'De certeza que é para apagar? '
search_by_email: "Pesquisar por e-mail/código"
guest_label: 'Finalizar compra como convidado'
destroy:
has_associated_orders: 'Não foi possível apagar: o/a consumidor/a tem encomendas associadas a esta loja.'
contents:
@@ -368,6 +401,7 @@ pt:
producer_signup_page: Página de registo de Produtor/a
hub_signup_page: Página de registo de Hub
group_signup_page: Página de registo de Grupo
main_links: Links do Menu Principal
footer_and_external_links: Rodapé e Ligações Externas
your_content: O seu conteúdo
user_guide: Manual do Utilizador
@@ -425,17 +459,23 @@ pt:
conditional_blank: não pode ser vazio se tipo de unidade é vazio
no_product: não foram encontrados produtos
not_found: não encontrado
not_updatable: não pode ser actualizado em produtos existentes através da importação de produtos
blank: não pode ser vazio
products_no_permission: não tem permissões para gerir produtos desta organização
inventory_no_permission: não tem permissões para criar inventário para este produtor
none_saved: não gravou nenhum produto com sucesso
line_number: "Linha %{number}:"
index:
select_file: Selecione uma folha de cálculo para carregar
spreadsheet: Folha de cálculo
import_into: Tipo de importação
product_list: Lista de produtos
inventories: Inventários
import: Importar
upload: Carregar
product_categories: Categorias de Produtos
tax_categories: Categorias de Impostos
shipping_categories: Categorias de Envio
import:
review: Rever
import: Importar
@@ -584,7 +624,7 @@ pt:
preferred_product_selection_from_inventory_only_no: Novos produtos têm de ser adicionados ao meu inventário antes de serem colocados na minha loja
payment_methods:
name: Nome
applies: Aplica?
applies: Aplicável?
manage: Gerir métodos de pagamento
not_method_yet: Não tem nenhum método de pagamento.
create_button: Criar Novo Método de Pagamento
@@ -613,13 +653,13 @@ pt:
link_to_front_tip: Um link direto para a sua loja no Open Food Network.
shipping_methods:
name: Nome
applies: Aplica?
applies: Aplicável?
manage: Gerir Métodos de Envio
create_button: Criar Nova Forma de Envio
create_one_button: Criar um agora
no_method_yet: Ainda não tem nenhuma forma de envio.
shop_preferences:
shopfront_requires_login: "Mercado visível publicamente?"
shopfront_requires_login: "Loja visível publicamente?"
shopfront_requires_login_tip: "Escolha se os consumidores vão precisar de fazer login para ver a loja, ou se esta estará visível para toda a gente."
shopfront_requires_login_false: "Público"
shopfront_requires_login_true: "Visível somente para consumidores registados"
@@ -647,7 +687,7 @@ pt:
da sua loja estar fechada e quando é que os consumidores podem esperar
que abra novamente. A ser exibida quando não houver nenhum ciclo de
encomendas activo.
shopfront_category_ordering: Categoria de pedidos da loja
shopfront_category_ordering: Ordem das Categorias da Loja
open_date: Dia de Abertura
close_date: Data de fecho
social:
@@ -1055,11 +1095,17 @@ pt:
menu_1_title: "Lojas"
menu_1_url: "/shops"
menu_2_title: "Mapa"
menu_2_url: "/map"
menu_3_title: "Produtores"
menu_3_url: "/producers"
menu_4_title: "Grupos"
menu_4_url: "/groups"
menu_5_title: "Sobre"
menu_5_url: "http://www.openfoodnetwork.org/"
menu_6_title: "Conectar"
menu_6_url: "https://openfoodnetwork.org"
menu_7_title: "Aprender"
menu_7_url: "https://openfoodnetwork.org"
logo: "Logo (640x130)"
logo_mobile: "logo mobile (75x26)"
logo_mobile_svg: "Logo mobile (svg)"
@@ -1398,7 +1444,7 @@ pt:
modal_how: "Como funciona"
modal_how_shop: Compre na Open Food Network
modal_how_shop_explained: Procure por um mercado próximo e comece as suas compras! Em cada mercado pode ver, em detalhe, quais os produtos que são oferecidos (só pode comprar num mercado de cada vez).
modal_how_pickup: 'Custos de coleta e entrega. '
modal_how_pickup: 'Custos de levantamento e entrega. '
modal_how_pickup_explained: Alguns mercados entregam em sua casa, outros oferecem um local para que levante os produtos. É possível ver quais as opções que estão disponíveis no perfil individual de cada um, e fazer a sua escolha no momento do checkout. Provavelmente será cobrada uma taxa de entrega, que pode variar de mercado para mercado.
modal_how_more: Saiba mais
modal_how_more_explained: "Para saber mais sobre a Open Food Network, como funciona, e participar, visite:"
@@ -1752,6 +1798,7 @@ pt:
you_have_no_orders_yet: "Ainda não tem encomendas"
running_balance: "Saldo corrente"
outstanding_balance: "Saldo pendente"
admin_enterprise_relationships: "Permissões das Organizações"
admin_enterprise_relationships_everything: "Tudo"
admin_enterprise_relationships_permits: "permite"
admin_enterprise_relationships_seach_placeholder: "Procurar"
@@ -1844,11 +1891,11 @@ pt:
spree_admin_overview_check_your_inbox: "Por favor, verifique a sua caixa de correio para mais instruções. Obrigada!"
spree_admin_unit_value: Valor Unitário
spree_admin_unit_description: Descrição Unitária
spree_admin_variant_unit: Unidade variante
spree_admin_variant_unit: Unidade da Variante
spree_admin_variant_unit_scale: Escala de unidade variante
spree_admin_supplier: Fornecedor
spree_admin_product_category: Categoria de Produto
spree_admin_variant_unit_name: Nome de unidade variante
spree_admin_variant_unit_name: Nome da Unidade da Variante
change_package: "Modificar Embalagem"
spree_admin_single_enterprise_hint: "Dica: Para permitir que as pessoas te encontrem, ative sua visibilidade em"
spree_admin_eg_pickup_from_school: "ex: \"Levantar na Escola Primária\""
@@ -1875,6 +1922,7 @@ pt:
edit_profile_details_etc: "Modificar o seu perfil: descrição, imagem, etc."
order_cycle: "Ciclo de Encomendas"
order_cycles: "Ciclos de Encomendas"
enterprise_relationships: "Permissões das organizações"
remove_tax: "Remover imposto"
enterprise_tos_link: "Ligação para Termos de Serviço da Organização"
enterprise_tos_message: "Queremos trabalhar com pessoas que partilham os nossos objectivos e valores. Por isso pedimos às organizações novas que concordem com os nossos"
@@ -2023,7 +2071,7 @@ pt:
report_header_product_total_price: "Total do Produto (%{currency})"
report_header_shipping_total_price: "Total do Envio (%{currency})"
report_header_outstanding_balance_price: "Saldo pendente (%{currency})"
report_header_eft_price: "EFT (%{currency})"
report_header_eft_price: "Transferência (%{currency})"
report_header_paypal_price: "Paypal (%{currency})"
report_header_sku: SKU
report_header_amount: Quantia
@@ -2044,7 +2092,7 @@ pt:
report_header_total_taxable_produce: Total tributável de produtos (inclui impostos)
report_header_total_untaxable_fees: Total não tributável de taxas (sem impostos)
report_header_total_taxable_fees: Total tributável de taxas (com impostos)
report_header_delivery_shipping_cost: Custo de Envio e Entrega (inclui impostos)
report_header_delivery_shipping_cost: Custo de Envio (inclui impostos)
report_header_transaction_fee: Taxa de transacção (sem impostos)
report_header_total_untaxable_admin: Total de ajustes de administração não taxáveis (sem impostos)
report_header_total_taxable_admin: Total de ajustes de administração taxáveis (inclui impostos)
@@ -2083,7 +2131,7 @@ pt:
payment_methods: "Métodos de Pagamento"
payment_method_fee: "Taxa de transação"
inventory_settings: "Configurações de Inventário"
tag_rules: "Regras para tag"
tag_rules: "Regras para Etiquetas"
shop_preferences: "Preferências da Loja"
enterprise_fee_whole_order: Encomenda completa
enterprise_fee_by: "Taxa %{type} por %{role}%{enterprise_name}"
@@ -2167,7 +2215,7 @@ pt:
title: Regras de Etiquetas
overview: Visão geral
overview_text: >
As regras de tag permitem descrever quais os itens que são visíveis
As regras de etiquetas permitem descrever quais os itens que são visíveis
ou não e para que clientes. Os itens podem ser métodos de envio, formas
de pagamento, produtos e ciclos de encomendas.
by_default_rules: "Regras 'Por Defeito...'"
@@ -2345,11 +2393,19 @@ pt:
admin:
orders:
index:
listing_orders: "Lista de Encomendas"
new_order: "Nova Encomenda"
capture: "Capturar"
ship: "Enviar"
edit: "Editar"
note: "Nota"
first: "Primeiro"
last: "Último"
previous: "Anterior"
next: "Seguinte"
loading: "A carregar"
no_orders_found: "Nenhuma encomenda encontrada"
viewing: "A ver de %{start}a %{end}."
invoice:
issued_on: Emitido em
tax_invoice: FACTURA FISCAL
@@ -2377,13 +2433,18 @@ pt:
stripe_disabled_msg: Os pagamentos por Stripe foram desactivados pelo administrador de sistema.
request_failed_msg: Pedimos desculpa. Algo correu mal quando tentámos verificar os detalhes de conta com o Stripe...
account_missing_msg: 'Não existem contas Stripe associadas a esta organização. '
connect_one: Ligar Uma
connect_one: Ligar
access_revoked_msg: O acesso a esta conta Stripe foi revogado, por favor volte a ligar a sua conta.
status: Estado
connected: Ligado
account_id: ID de Conta
business_name: Nome do Negócio
charges_enabled: Taxas activas
payments:
source_forms:
stripe:
error_saving_payment: Erro a gravar pagamento
submitting_payment: A submeter pagamento...
products:
new:
title: 'Novo Produto'
@@ -2417,6 +2478,8 @@ 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'
@@ -2424,20 +2487,31 @@ pt:
bulk_coop_customer_payments: 'Cooperativa por Atacado - Pagamentos do Consumidor'
users:
index:
listing_users: "Lista de Utilizadores"
new_user: "Novo Utilizador"
user: "Utilizador"
enterprise_limit: "Limite da Organização"
search: "Procurar"
email: "Email"
edit:
editing_user: "Editar Utilizador"
back_to_users_list: "Voltar à lista de utilizadores"
general_settings: "Configurações Gerais"
form:
email: "Email"
roles: "Papeis"
enterprise_limit: "Limite da Organização"
confirm_password: "Confirme a palavra-passe"
password: "Palavra-passe"
email_confirmation:
confirmation_pending: "A confirmação de email está pendente. Enviamos um email de confirmação para %{address}"
variants:
autocomplete:
producer_name: Produtor
general_settings:
edit:
legal_settings: "Configurações Legais"
privacy_policy_url: "URL da Politíca de Privacidade"
enterprises_require_tos: "As organizações têm de aceitar os Termos de Serviço"
footer_tos_url: "URL dos Termos de Serviço"
checkout:
@@ -2453,6 +2527,8 @@ pt:
js_format: 'aa-mm-dd'
inventory: Inventário
orders:
edit:
login_to_view_order: "Por favor faça login para ver a sua encomenda."
bought:
item: "Já encomendou neste ciclo"
order_mailer:
@@ -2546,5 +2622,10 @@ pt:
saved_cards:
default?: Por defeito?
delete?: Apagar?
cards:
authorised_shops: Lojas Autorizadas
authorised_shops:
shop_name: "Nome da Loja"
allow_charges?: "Permitir Taxas?"
localized_number:
invalid_format: tem um formato inválido. Por favor introduza um número.

View File

@@ -1,5 +1,5 @@
sv:
language_name: "English"
language_name: "Svenska"
activerecord:
attributes:
spree/order:

View File

@@ -24,6 +24,8 @@ 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) }
let!(:order5) { create(:order, state: 'cart', completed_at: nil) }
let!(:line_item1) do
create(:line_item_with_shipment, order: order1,
product: create(:product, supplier: supplier))
@@ -119,6 +121,24 @@ module Api
end
end
context 'using search filters' do
before do
allow(controller).to receive(:spree_current_user) { admin_user }
end
it 'can show only completed orders' do
get :index, format: :json, q: { completed_at_not_null: true, s: 'created_at desc' }
expect(json_response['orders']).to eq serialized_orders([order4, order3, order2, order1])
end
it 'can show only unfulfilled orders' do
get :index, format: :json, q: { inventory_units_shipment_id_null: true, s: 'created_at desc' }
expect(json_response['orders']).to eq serialized_orders([order3, order2, order1])
end
end
context 'with pagination' do
before do
allow(controller).to receive(:spree_current_user) { distributor.owner }
@@ -128,7 +148,7 @@ module Api
get :index, per_page: 15, page: 1
pagination_data = {
'results' => 2,
'results' => 3,
'pages' => 1,
'page' => 1,
'per_page' => 15
@@ -141,6 +161,16 @@ module Api
private
def serialized_orders(orders)
serialized_orders = ActiveModel::ArraySerializer.new(
orders,
each_serializer: Api::Admin::OrderSerializer,
root: false
)
JSON.parse(serialized_orders.to_json)
end
def returns_orders(response)
keys = response['orders'].first.keys.map(&:to_sym)
expect(order_attributes.all?{ |attr| keys.include? attr }).to be_truthy

View File

@@ -225,11 +225,14 @@ describe CheckoutController, type: :controller do
describe "Paypal routing" do
let(:payment_method) { create(:payment_method, type: "Spree::Gateway::PayPalExpress") }
let(:restart_checkout) { instance_double(RestartCheckout, call: true) }
before do
allow(controller).to receive(:current_distributor) { distributor }
allow(controller).to receive(:current_order_cycle) { order_cycle }
allow(controller).to receive(:current_order) { order }
allow(controller).to receive(:restart_checkout)
allow(RestartCheckout).to receive(:new) { restart_checkout }
end
it "should check the payment method for Paypalness if we've selected one" do
@@ -241,58 +244,19 @@ describe CheckoutController, type: :controller do
end
describe "#update_failed" do
let(:restart_checkout) { instance_double(RestartCheckout, call: true) }
before do
controller.instance_variable_set(:@order, order)
allow(RestartCheckout).to receive(:new) { restart_checkout }
end
it "clears the shipping address and restarts the checkout" do
expect(controller).to receive(:clear_ship_address)
expect(controller).to receive(:restart_checkout)
expect(restart_checkout).to receive(:call)
expect(controller).to receive(:respond_to)
controller.send(:update_failed)
end
end
describe "#restart_checkout" do
let!(:shipment_pending) { create(:shipment, order: order, state: 'pending') }
let!(:payment_checkout) { create(:payment, order: order, state: 'checkout') }
let!(:payment_failed) { create(:payment, order: order, state: 'failed') }
before do
order.shipments << shipment_pending
order.save
controller.instance_variable_set(:@order, order.reload)
end
context "when the order is already in the 'cart' state" do
it "does nothing" do
expect(order).to_not receive(:restart_checkout!)
controller.send(:restart_checkout)
end
end
context "when the order is in a subsequent state" do
before do
order.update_attribute(:state, "payment")
end
# NOTE: at the time of writing, it was not possible to create a shipment with a state other than
# 'pending' when the order has not been completed, so this is not a case that requires testing.
it "resets the order state, and clears incomplete shipments and payments" do
expect(order).to receive(:restart_checkout!).and_call_original
expect(order.shipping_method_id).to_not be nil
expect(order.shipments.count).to be 1
expect(order.adjustments.shipping.count).to be 1
expect(order.payments.count).to be 2
expect(order.adjustments.payment_fee.count).to be 2
controller.send(:restart_checkout)
expect(order.reload.state).to eq 'cart'
expect(order.shipping_method_id).to be nil
expect(order.shipments.count).to be 0
expect(order.adjustments.shipping.count).to be 0
expect(order.payments.count).to be 1
expect(order.adjustments.payment_fee.count).to be 1
end
end
end
end

View File

@@ -0,0 +1,39 @@
require 'spec_helper'
describe RestartCheckout do
let(:order) { create(:order) }
describe "#call" do
context "when the order is already in the 'cart' state" do
it "does nothing" do
expect(order).to_not receive(:restart_checkout!)
RestartCheckout.new(order).call
end
end
context "when the order is in a subsequent state" do
let!(:shipment_pending) { create(:shipment, order: order, state: 'pending') }
let!(:payment_checkout) { create(:payment, order: order, state: 'checkout') }
let!(:payment_failed) { create(:payment, order: order, state: 'failed') }
before do
order.shipping_method_id = shipment_pending.shipping_method_id
order.update_attribute(:state, "payment")
end
# NOTE: at the time of writing, it was not possible to create a shipment
# with a state other than 'pending' when the order has not been
# completed, so this is not a case that requires testing.
it "resets the order state, and clears incomplete shipments and payments" do
RestartCheckout.new(order).call
expect(order.state).to eq 'cart'
expect(order.shipping_method_id).to eq nil
expect(order.shipments.count).to eq 0
expect(order.adjustments.shipping.count).to eq 0
expect(order.payments.count).to eq 1
expect(order.adjustments.payment_fee.count).to eq 1
end
end
end
end