From a62a2cb52f03df21d659309f148f87f647abbd33 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Thu, 22 Nov 2018 16:49:29 +0100 Subject: [PATCH 01/27] Extract #restart_checkout to a service --- app/controllers/checkout_controller.rb | 12 ++++-------- app/services/restart_checkout.rb | 15 +++++++++++++++ spec/controllers/checkout_controller_spec.rb | 13 +++++++++++-- 3 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 app/services/restart_checkout.rb diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 8cba0d8a0e..162f3c529f 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -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).restart_checkout end def update @@ -139,7 +139,8 @@ class CheckoutController < Spree::CheckoutController def update_failed clear_ship_address - restart_checkout + RestartCheckout.new(@order).restart_checkout + respond_to do |format| format.html do render :edit @@ -159,12 +160,7 @@ class CheckoutController < Spree::CheckoutController 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 + RestartCheckout.new(@order).restart_checkout end def skip_state_validation? diff --git a/app/services/restart_checkout.rb b/app/services/restart_checkout.rb new file mode 100644 index 0000000000..d7dd10520b --- /dev/null +++ b/app/services/restart_checkout.rb @@ -0,0 +1,15 @@ +# Resets the passed order to cart state while clearing associated payments and shipments +class RestartCheckout + def initialize(order) + @order = order + 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 +end diff --git a/spec/controllers/checkout_controller_spec.rb b/spec/controllers/checkout_controller_spec.rb index b373ae64b5..a202de7dec 100644 --- a/spec/controllers/checkout_controller_spec.rb +++ b/spec/controllers/checkout_controller_spec.rb @@ -189,11 +189,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, restart_checkout: 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 @@ -205,14 +208,20 @@ describe CheckoutController, type: :controller do end describe "#update_failed" do + let(:restart_checkout) do + instance_double(RestartCheckout, restart_checkout: true) + end + 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(:restart_checkout) expect(controller).to receive(:respond_to) + controller.send(:update_failed) end end From 3b681a59bafcb4400f16ab1db19386008f4f5ee1 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 23 Nov 2018 11:43:10 +0100 Subject: [PATCH 02/27] Move controller tests to service class tests --- app/controllers/checkout_controller.rb | 4 -- spec/controllers/checkout_controller_spec.rb | 42 ----------------- spec/services/restart_checkout_spec.rb | 48 ++++++++++++++++++++ 3 files changed, 48 insertions(+), 46 deletions(-) create mode 100644 spec/services/restart_checkout_spec.rb diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 162f3c529f..59017f7ed5 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -159,10 +159,6 @@ class CheckoutController < Spree::CheckoutController end end - def restart_checkout - RestartCheckout.new(@order).restart_checkout - end - def skip_state_validation? true end diff --git a/spec/controllers/checkout_controller_spec.rb b/spec/controllers/checkout_controller_spec.rb index a202de7dec..59a08811f9 100644 --- a/spec/controllers/checkout_controller_spec.rb +++ b/spec/controllers/checkout_controller_spec.rb @@ -225,46 +225,4 @@ describe CheckoutController, type: :controller do 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.update_attribute(:shipping_method_id, shipment_pending.shipping_method_id) - 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 diff --git a/spec/services/restart_checkout_spec.rb b/spec/services/restart_checkout_spec.rb new file mode 100644 index 0000000000..17db99ace1 --- /dev/null +++ b/spec/services/restart_checkout_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe RestartCheckout do + let(:order) { create(:order) } + + 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.update_attribute(:shipping_method_id, shipment_pending.shipping_method_id) + end + + 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).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 + + RestartCheckout.new(order).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 From 99463427cebe00ff48d2ca4ccc3c51f2f9f626d4 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 23 Nov 2018 11:46:57 +0100 Subject: [PATCH 03/27] Refactor RestartCheckout service just extracted --- app/services/restart_checkout.rb | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/app/services/restart_checkout.rb b/app/services/restart_checkout.rb index d7dd10520b..9bbd476197 100644 --- a/app/services/restart_checkout.rb +++ b/app/services/restart_checkout.rb @@ -5,11 +5,29 @@ class RestartCheckout 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 + 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 From 2c8a1f5e78d9bb78e495fb5a666a0f747d2190cc Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 23 Nov 2018 11:51:23 +0100 Subject: [PATCH 04/27] Check for value and not object identity in spec --- spec/services/restart_checkout_spec.rb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/spec/services/restart_checkout_spec.rb b/spec/services/restart_checkout_spec.rb index 17db99ace1..e1cd40a355 100644 --- a/spec/services/restart_checkout_spec.rb +++ b/spec/services/restart_checkout_spec.rb @@ -28,20 +28,20 @@ describe RestartCheckout do # '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 + expect(order.shipping_method_id).to_not eq nil + expect(order.shipments.count).to eq 1 + expect(order.adjustments.shipping.count).to eq 1 + expect(order.payments.count).to eq 2 + expect(order.adjustments.payment_fee.count).to eq 2 RestartCheckout.new(order).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 + 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 From 88afa70f37cafbd0f3657efb0471db93e5a1a5a9 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 23 Nov 2018 11:56:48 +0100 Subject: [PATCH 05/27] Simplify and speed up service tests --- spec/services/restart_checkout_spec.rb | 27 +++++++++----------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/spec/services/restart_checkout_spec.rb b/spec/services/restart_checkout_spec.rb index e1cd40a355..56451f8b15 100644 --- a/spec/services/restart_checkout_spec.rb +++ b/spec/services/restart_checkout_spec.rb @@ -4,14 +4,6 @@ describe RestartCheckout do let(:order) { create(:order) } 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.update_attribute(:shipping_method_id, shipment_pending.shipping_method_id) - end - context "when the order is already in the 'cart' state" do it "does nothing" do expect(order).to_not receive(:restart_checkout!) @@ -20,23 +12,22 @@ describe RestartCheckout do 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. + # 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 eq nil - expect(order.shipments.count).to eq 1 - expect(order.adjustments.shipping.count).to eq 1 - expect(order.payments.count).to eq 2 - expect(order.adjustments.payment_fee.count).to eq 2 - RestartCheckout.new(order).restart_checkout - expect(order.reload.state).to eq 'cart' + 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 From 453b2a99de4b1989dc473386613a53188c2ce82e Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 23 Nov 2018 12:00:45 +0100 Subject: [PATCH 06/27] Rename redundant #restart_checkout to #call --- app/controllers/checkout_controller.rb | 4 ++-- app/services/restart_checkout.rb | 2 +- spec/controllers/checkout_controller_spec.rb | 8 +++----- spec/services/restart_checkout_spec.rb | 6 +++--- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 59017f7ed5..3ffe896db1 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -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 - RestartCheckout.new(@order).restart_checkout + RestartCheckout.new(@order).call end def update @@ -139,7 +139,7 @@ class CheckoutController < Spree::CheckoutController def update_failed clear_ship_address - RestartCheckout.new(@order).restart_checkout + RestartCheckout.new(@order).call respond_to do |format| format.html do diff --git a/app/services/restart_checkout.rb b/app/services/restart_checkout.rb index 9bbd476197..79ef9acdb5 100644 --- a/app/services/restart_checkout.rb +++ b/app/services/restart_checkout.rb @@ -4,7 +4,7 @@ class RestartCheckout @order = order end - def restart_checkout + def call return if order.cart? reset_state_to_cart diff --git a/spec/controllers/checkout_controller_spec.rb b/spec/controllers/checkout_controller_spec.rb index 59a08811f9..43c937a892 100644 --- a/spec/controllers/checkout_controller_spec.rb +++ b/spec/controllers/checkout_controller_spec.rb @@ -189,7 +189,7 @@ 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, restart_checkout: true) } + let(:restart_checkout) { instance_double(RestartCheckout, call: true) } before do allow(controller).to receive(:current_distributor) { distributor } @@ -208,9 +208,7 @@ describe CheckoutController, type: :controller do end describe "#update_failed" do - let(:restart_checkout) do - instance_double(RestartCheckout, restart_checkout: true) - end + let(:restart_checkout) { instance_double(RestartCheckout, call: true) } before do controller.instance_variable_set(:@order, order) @@ -219,7 +217,7 @@ describe CheckoutController, type: :controller do it "clears the shipping address and restarts the checkout" do expect(controller).to receive(:clear_ship_address) - expect(restart_checkout).to receive(:restart_checkout) + expect(restart_checkout).to receive(:call) expect(controller).to receive(:respond_to) controller.send(:update_failed) diff --git a/spec/services/restart_checkout_spec.rb b/spec/services/restart_checkout_spec.rb index 56451f8b15..1337e2c581 100644 --- a/spec/services/restart_checkout_spec.rb +++ b/spec/services/restart_checkout_spec.rb @@ -3,11 +3,11 @@ require 'spec_helper' describe RestartCheckout do let(:order) { create(:order) } - describe "#restart_checkout" do + 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).restart_checkout + RestartCheckout.new(order).call end end @@ -25,7 +25,7 @@ describe RestartCheckout do # 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).restart_checkout + RestartCheckout.new(order).call expect(order.state).to eq 'cart' expect(order.shipping_method_id).to eq nil From 7b95e3a8d75bc3602c08690d643f4a49c98feb38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Tue, 27 Nov 2018 19:17:57 +0000 Subject: [PATCH 07/27] Bump i18n-js from 3.0.11 to 3.1.0 Bumps [i18n-js](https://github.com/fnando/i18n-js) from 3.0.11 to 3.1.0. - [Release notes](https://github.com/fnando/i18n-js/releases) - [Changelog](https://github.com/fnando/i18n-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/fnando/i18n-js/compare/v3.0.11...v3.1.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 4bc5c01091..c3a4c9ef07 100644 --- a/Gemfile +++ b/Gemfile @@ -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' diff --git a/Gemfile.lock b/Gemfile.lock index 9949d06796..099b65ba16 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -484,7 +484,7 @@ GEM multi_json (~> 1.0) multi_xml 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) @@ -792,7 +792,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 From 29bc4c52a5e2e6d55738c1e28f36d37f512c3224 Mon Sep 17 00:00:00 2001 From: Hugo Daniel Date: Thu, 29 Nov 2018 14:13:24 +0100 Subject: [PATCH 08/27] Import payment_methods#new view and apply overrides --- .../new/add_hubs_sidebar.html.haml.deface | 5 ----- .../new/remove_configuration_sidebar.deface | 1 - .../spree/admin/payment_methods/new.html.haml | 14 ++++++++++++++ 3 files changed, 14 insertions(+), 6 deletions(-) delete mode 100644 app/overrides/spree/admin/payment_methods/new/add_hubs_sidebar.html.haml.deface delete mode 100644 app/overrides/spree/admin/payment_methods/new/remove_configuration_sidebar.deface create mode 100644 app/views/spree/admin/payment_methods/new.html.haml diff --git a/app/overrides/spree/admin/payment_methods/new/add_hubs_sidebar.html.haml.deface b/app/overrides/spree/admin/payment_methods/new/add_hubs_sidebar.html.haml.deface deleted file mode 100644 index 26ee2888bd..0000000000 --- a/app/overrides/spree/admin/payment_methods/new/add_hubs_sidebar.html.haml.deface +++ /dev/null @@ -1,5 +0,0 @@ -/ insert_after "code[erb-loud]:contains(\"render :partial => 'form', :locals => { :f => f }\")" - -.one.column   -= render :partial => 'spree/admin/shared/hubs_sidebar', :locals => { f: f, klass: :payment_method } -.clear \ No newline at end of file diff --git a/app/overrides/spree/admin/payment_methods/new/remove_configuration_sidebar.deface b/app/overrides/spree/admin/payment_methods/new/remove_configuration_sidebar.deface deleted file mode 100644 index cc3fbcdee1..0000000000 --- a/app/overrides/spree/admin/payment_methods/new/remove_configuration_sidebar.deface +++ /dev/null @@ -1 +0,0 @@ -remove "code[erb-loud]:contains(\"render :partial => 'spree/admin/shared/configuration_menu'\")" \ No newline at end of file diff --git a/app/views/spree/admin/payment_methods/new.html.haml b/app/views/spree/admin/payment_methods/new.html.haml new file mode 100644 index 0000000000..8a05230dfe --- /dev/null +++ b/app/views/spree/admin/payment_methods/new.html.haml @@ -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   + = render partial: 'spree/admin/shared/hubs_sidebar', locals: { f: f, klass: :payment_method } + .clear + .filter-actions.actions + = button t(:create), 'icon-ok' From 34bc79c7f6fe58bc548fb25c245d0855e3355a46 Mon Sep 17 00:00:00 2001 From: Hugo Daniel Date: Thu, 29 Nov 2018 14:13:57 +0100 Subject: [PATCH 09/27] Import payment_methods form partial and apply overrides --- .../payment_methods/_form/remove_clearing_div.deface | 1 - .../spree/admin/payment_methods/_form.html.haml} | 12 +++++------- 2 files changed, 5 insertions(+), 8 deletions(-) delete mode 100644 app/overrides/spree/admin/payment_methods/_form/remove_clearing_div.deface rename app/{overrides/spree/admin/payment_methods/_form/replace_form_fields.html.haml.deface => views/spree/admin/payment_methods/_form.html.haml} (81%) diff --git a/app/overrides/spree/admin/payment_methods/_form/remove_clearing_div.deface b/app/overrides/spree/admin/payment_methods/_form/remove_clearing_div.deface deleted file mode 100644 index 613ffe010b..0000000000 --- a/app/overrides/spree/admin/payment_methods/_form/remove_clearing_div.deface +++ /dev/null @@ -1 +0,0 @@ -remove "div.clear" \ No newline at end of file diff --git a/app/overrides/spree/admin/payment_methods/_form/replace_form_fields.html.haml.deface b/app/views/spree/admin/payment_methods/_form.html.haml similarity index 81% rename from app/overrides/spree/admin/payment_methods/_form/replace_form_fields.html.haml.deface rename to app/views/spree/admin/payment_methods/_form.html.haml index 0201278e0e..a740f575e2 100644 --- a/app/overrides/spree/admin/payment_methods/_form/replace_form_fields.html.haml.deface +++ b/app/views/spree/admin/payment_methods/_form.html.haml @@ -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 } From aa948552e12a75e2fc79fd25028252d02a55ba07 Mon Sep 17 00:00:00 2001 From: Hugo Daniel Date: Thu, 29 Nov 2018 14:30:46 +0100 Subject: [PATCH 10/27] Import payment_methods edit view and apply overrides --- .../edit/add_hubs_sidebar.html.haml.deface | 5 ----- ..._new_payment_method_button.html.haml.deface | 4 ---- .../edit/remove_configuration_sidebar.deface | 1 - .../spree/admin/payment_methods/edit.html.haml | 18 ++++++++++++++++++ 4 files changed, 18 insertions(+), 10 deletions(-) delete mode 100644 app/overrides/spree/admin/payment_methods/edit/add_hubs_sidebar.html.haml.deface delete mode 100644 app/overrides/spree/admin/payment_methods/edit/add_new_payment_method_button.html.haml.deface delete mode 100644 app/overrides/spree/admin/payment_methods/edit/remove_configuration_sidebar.deface create mode 100644 app/views/spree/admin/payment_methods/edit.html.haml diff --git a/app/overrides/spree/admin/payment_methods/edit/add_hubs_sidebar.html.haml.deface b/app/overrides/spree/admin/payment_methods/edit/add_hubs_sidebar.html.haml.deface deleted file mode 100644 index 26ee2888bd..0000000000 --- a/app/overrides/spree/admin/payment_methods/edit/add_hubs_sidebar.html.haml.deface +++ /dev/null @@ -1,5 +0,0 @@ -/ insert_after "code[erb-loud]:contains(\"render :partial => 'form', :locals => { :f => f }\")" - -.one.column   -= render :partial => 'spree/admin/shared/hubs_sidebar', :locals => { f: f, klass: :payment_method } -.clear \ No newline at end of file diff --git a/app/overrides/spree/admin/payment_methods/edit/add_new_payment_method_button.html.haml.deface b/app/overrides/spree/admin/payment_methods/edit/add_new_payment_method_button.html.haml.deface deleted file mode 100644 index fa595620e7..0000000000 --- a/app/overrides/spree/admin/payment_methods/edit/add_new_payment_method_button.html.haml.deface +++ /dev/null @@ -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' %> \ No newline at end of file diff --git a/app/overrides/spree/admin/payment_methods/edit/remove_configuration_sidebar.deface b/app/overrides/spree/admin/payment_methods/edit/remove_configuration_sidebar.deface deleted file mode 100644 index cc3fbcdee1..0000000000 --- a/app/overrides/spree/admin/payment_methods/edit/remove_configuration_sidebar.deface +++ /dev/null @@ -1 +0,0 @@ -remove "code[erb-loud]:contains(\"render :partial => 'spree/admin/shared/configuration_menu'\")" \ No newline at end of file diff --git a/app/views/spree/admin/payment_methods/edit.html.haml b/app/views/spree/admin/payment_methods/edit.html.haml new file mode 100644 index 0000000000..527e19df2f --- /dev/null +++ b/app/views/spree/admin/payment_methods/edit.html.haml @@ -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   + = render partial: 'spree/admin/shared/hubs_sidebar', locals: { f: f, klass: :payment_method } + .clear + .filter-actions.actions + = button t(:update), 'icon-refresh' From 24dab58de79a1fda1997bdaad1fb655042b68676 Mon Sep 17 00:00:00 2001 From: Hugo Daniel Date: Thu, 29 Nov 2018 15:15:56 +0100 Subject: [PATCH 11/27] Lazy load translations and add keys --- app/views/spree/admin/payment_methods/edit.html.haml | 4 ++-- app/views/spree/admin/payment_methods/new.html.haml | 4 ++-- config/locales/en.yml | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/views/spree/admin/payment_methods/edit.html.haml b/app/views/spree/admin/payment_methods/edit.html.haml index 527e19df2f..9d8f6b147d 100644 --- a/app/views/spree/admin/payment_methods/edit.html.haml +++ b/app/views/spree/admin/payment_methods/edit.html.haml @@ -1,12 +1,12 @@ - content_for :page_title do - = t(:editing_payment_method) + = 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' + = 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 diff --git a/app/views/spree/admin/payment_methods/new.html.haml b/app/views/spree/admin/payment_methods/new.html.haml index 8a05230dfe..c3039cc169 100644 --- a/app/views/spree/admin/payment_methods/new.html.haml +++ b/app/views/spree/admin/payment_methods/new.html.haml @@ -1,8 +1,8 @@ - content_for :page_title do - = t(:new_payment_method) + = 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' + = 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 diff --git a/config/locales/en.yml b/config/locales/en.yml index 9d4320f53e..28bb006ae7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2696,6 +2696,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... From e863c3dec8cee3045f4be5e60cdd070427986e12 Mon Sep 17 00:00:00 2001 From: haseleyi Date: Tue, 4 Dec 2018 10:18:21 -0800 Subject: [PATCH 12/27] Fix broken link in register call partial --- app/views/shared/_register_call.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/_register_call.html.haml b/app/views/shared/_register_call.html.haml index f4c03b7b92..f9456396f5 100644 --- a/app/views/shared/_register_call.html.haml +++ b/app/views/shared/_register_call.html.haml @@ -1,6 +1,6 @@ .alert-cta %h6 - %a{href: registration_path, target: "_blank"} + %a{href: "/register", target: "_blank"} = t '.selling_on_ofn'   %strong From 94d12217de1910ef7ec1f40916113405713271e0 Mon Sep 17 00:00:00 2001 From: haseleyi Date: Tue, 4 Dec 2018 21:29:11 -0800 Subject: [PATCH 13/27] Fix untranslated buttons at image step of registration modal --- app/views/registration/steps/_images.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/registration/steps/_images.html.haml b/app/views/registration/steps/_images.html.haml index f888bd8165..e59d8de633 100644 --- a/app/views/registration/steps/_images.html.haml +++ b/app/views/registration/steps/_images.html.haml @@ -13,9 +13,9 @@ .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: "{{'back' | t}}", ng: { click: "select('about')" } }   - %input.button.primary.right{ type: "button", value: "Continue", ng: { click: "imageSelect('promo')" } } + %input.button.primary.right{ type: "button", value: "{{'continue' | t}}", ng: { click: "imageSelect('promo')" } } .row.buttons.pad-top{ ng: { if: "imageStep == 'promo'" } } .small-12.columns From bbc61b4eda3b60d2fe4165d6875629a02d43aa24 Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Wed, 5 Dec 2018 15:10:41 +0000 Subject: [PATCH 14/27] Bump roadie-rails to 1.1.1 --- Gemfile | 2 +- Gemfile.lock | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 7943910142..bfb18746ca 100644 --- a/Gemfile +++ b/Gemfile @@ -64,7 +64,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' diff --git a/Gemfile.lock b/Gemfile.lock index a60852d643..ab909b4cfb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -246,7 +246,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.2) dalli (2.7.2) @@ -627,12 +627,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) @@ -822,7 +822,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) From ebff8be996a843142ac1c48519bf58afc002d609 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 5 Dec 2018 19:16:55 +0000 Subject: [PATCH 15/27] Bump oj from 3.6.10 to 3.7.4 Bumps [oj](https://github.com/ohler55/oj) from 3.6.10 to 3.7.4. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/master/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.6.10...v3.7.4) Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index a60852d643..2c29b4ce1a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -544,7 +544,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) From 727cc9d578b84740d713a6784526c449829633b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 5 Dec 2018 19:19:50 +0000 Subject: [PATCH 16/27] Bump rspec-rails from 3.7.2 to 3.8.1 Bumps [rspec-rails](https://github.com/rspec/rspec-rails) from 3.7.2 to 3.8.1. - [Release notes](https://github.com/rspec/rspec-rails/releases) - [Changelog](https://github.com/rspec/rspec-rails/blob/master/Changelog.md) - [Commits](https://github.com/rspec/rspec-rails/compare/v3.7.2...v3.8.1) Signed-off-by: dependabot[bot] --- Gemfile.lock | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a60852d643..583aa8e626 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -215,7 +215,7 @@ GEM xpath (>= 2.0, < 4.0) chronic (0.10.2) chunky_png (1.3.10) - climate_control (0.1.0) + climate_control (0.2.0) cliver (0.3.2) cocaine (0.5.8) climate_control (>= 0.0.3, < 1.0) @@ -256,8 +256,8 @@ GEM fog (~> 1.0) rails (>= 3.2.0, < 5.0) debugger-linecache (1.2.0) - 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) @@ -640,29 +640,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) @@ -716,7 +716,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) From 75277e92e400a5d1997b69e83cf0959e06ceb9e6 Mon Sep 17 00:00:00 2001 From: haseleyi Date: Wed, 5 Dec 2018 11:36:27 -0800 Subject: [PATCH 17/27] Lazy-load the translations for images step of registration --- app/views/registration/steps/_images.html.haml | 12 ++++++------ config/locales/en.yml | 8 +++++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/views/registration/steps/_images.html.haml b/app/views/registration/steps/_images.html.haml index e59d8de633..b52c179f3c 100644 --- a/app/views/registration/steps/_images.html.haml +++ b/app/views/registration/steps/_images.html.haml @@ -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' | t}}", ng: { click: "select('about')" } } + %input.button.secondary{ type: "button", value: t(".back"), ng: { click: "select('about')" } }   - %input.button.primary.right{ type: "button", value: "{{'continue' | t}}", 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") } diff --git a/config/locales/en.yml b/config/locales/en.yml index de1222902e..c6115010da 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1847,6 +1847,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?" @@ -1987,9 +1992,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using registration_type_no_producer_help: "If you’re not a producer, you’re 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" From 4a0744dd94e87cbb10a399b9c0b4052b7201f0b3 Mon Sep 17 00:00:00 2001 From: haseleyi Date: Thu, 6 Dec 2018 11:49:39 -0800 Subject: [PATCH 18/27] Add comment to explain hard-coded link --- app/views/shared/_register_call.html.haml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/shared/_register_call.html.haml b/app/views/shared/_register_call.html.haml index f9456396f5..be7a8242fc 100644 --- a/app/views/shared/_register_call.html.haml +++ b/app/views/shared/_register_call.html.haml @@ -1,5 +1,9 @@ .alert-cta %h6 + -# 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'   From 3f6e96dd5de163bd99e51b7ddf553d7695b39f39 Mon Sep 17 00:00:00 2001 From: haseleyi Date: Thu, 6 Dec 2018 14:05:53 -0800 Subject: [PATCH 19/27] Fix comment --- app/views/shared/_register_call.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/shared/_register_call.html.haml b/app/views/shared/_register_call.html.haml index be7a8242fc..54c55af680 100644 --- a/app/views/shared/_register_call.html.haml +++ b/app/views/shared/_register_call.html.haml @@ -1,9 +1,9 @@ .alert-cta %h6 -# 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 + -# 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'   From 997169b974d66fc4e99120c041006ab944ac3456 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 18 Nov 2018 18:34:16 +0000 Subject: [PATCH 20/27] Fix checkbox values on orders page --- .../admin/orders/controllers/orders_controller.js.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index 338ec21f0b..12a02a626a 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -25,8 +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'], - 'q[inventory_units_shipment_id_null]': $scope['q']['inventory_units_shipment_id_null'], + 'q[completed_at_not_null]': $scope['q']['completed_at_not_null'] || null, + 'q[inventory_units_shipment_id_null]': $scope['q']['inventory_units_shipment_id_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'], From d48774e3a2aa12df90d3292626647330d40ce966 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 21 Nov 2018 19:28:22 +0000 Subject: [PATCH 21/27] Add comment --- .../admin/orders/controllers/orders_controller.js.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index 12a02a626a..ad5bfff97d 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -25,6 +25,7 @@ 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'], + # 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[inventory_units_shipment_id_null]': $scope['q']['inventory_units_shipment_id_null'] || null, 'q[distributor_id_in]': $scope['q']['distributor_id_in'], From e711c5ed03980a00ba5a817efb7e77cda7ca1c6c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 10 Dec 2018 20:04:10 +0000 Subject: [PATCH 22/27] Add spec for search filters --- .../controllers/api/orders_controller_spec.rb | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/spec/controllers/api/orders_controller_spec.rb b/spec/controllers/api/orders_controller_spec.rb index 9bcdbeb7ad..760094570d 100644 --- a/spec/controllers/api/orders_controller_spec.rb +++ b/spec/controllers/api/orders_controller_spec.rb @@ -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, 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 From 0c5ac99e0f2cb4db5f682d1579c4423b1845511c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 10 Dec 2018 20:08:06 +0000 Subject: [PATCH 23/27] Fix multiple results with 'inventory_items_shipment_id_null' ransack query The q['inventory_items_shipment_id_null'] search element was generating duplicates where there were multiple line items on an order that were ready to be shipped, with id = null --- app/services/search_orders.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/search_orders.rb b/app/services/search_orders.rb index 127a53625e..c1120ffb19 100644 --- a/app/services/search_orders.rb +++ b/app/services/search_orders.rb @@ -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 From 835617159e11e18600106c67cccc3d7e3dfbe2da Mon Sep 17 00:00:00 2001 From: haseleyi Date: Mon, 10 Dec 2018 18:00:57 -0800 Subject: [PATCH 24/27] Add missing 'required field' stars in new product form --- app/views/spree/admin/products/new.html.haml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/spree/admin/products/new.html.haml b/app/views/spree/admin/products/new.html.haml index 5f8aa2183d..a018e3784d 100644 --- a/app/views/spree/admin/products/new.html.haml +++ b/app/views/spree/admin/products/new.html.haml @@ -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]' } From d0d10eba4b45d47b164a06080dd6331c886f63e8 Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Fri, 14 Dec 2018 17:44:19 +0800 Subject: [PATCH 25/27] Ignore it method in Rubocop BlockLength --- .rubocop_styleguide.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.rubocop_styleguide.yml b/.rubocop_styleguide.yml index 790240470b..61419eb02f 100644 --- a/.rubocop_styleguide.yml +++ b/.rubocop_styleguide.yml @@ -187,7 +187,7 @@ Metrics/AbcSize: Max: 15 Metrics/BlockLength: - ExcludedMethods: ["describe", "context"] + ExcludedMethods: ["context", "describe", "it"] Metrics/BlockNesting: Max: 3 From d3d43c8808468e125eb5717548f4104806c59720 Mon Sep 17 00:00:00 2001 From: zvkemp Date: Fri, 14 Dec 2018 12:25:41 -0800 Subject: [PATCH 26/27] update Skylight to 1.7.2 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ce6d927e2b..389222a6a7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -690,7 +690,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) From d34b8c52b8e5374f9c12b0357a461984233d0090 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 17 Dec 2018 11:17:54 +0000 Subject: [PATCH 27/27] Update all locales with the latest Transifex translations --- config/locales/fr.yml | 2 +- config/locales/fr_BE.yml | 254 +++++++++++++++++++++------------------ config/locales/nb.yml | 20 ++- config/locales/pt.yml | 105 ++++++++++++++-- config/locales/sv.yml | 2 +- 5 files changed, 245 insertions(+), 138 deletions(-) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 1919989fe3..16c118266a 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -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 diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml index 5122a5a750..7a2990aeda 100644 --- a/config/locales/fr_BE.yml +++ b/config/locales/fr_BE.yml @@ -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 consulter ce guide. 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 Matomo (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 d’accè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 Envoyer un commentaire 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 Envoyer un commentaire 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 %{shop} / %{order} est ouverte pour vérification. Vous pouvez effectuer des modifications jusqu'au %{oc_close}. other: Vous avez %{count} commandes avec %{shop} 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 d’un réseau alimentaire cohérent, nous vous offrons l’opportunité 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, d’accessoires de mode et de vêtements de seconde main. + groups_signup_motivation3: L’organisation 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 d’améliorer la plateforme, d’apporter 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 compétences\" (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 l’OFN en Belgique. Pour que l’application puisse exister, il faut la financer. Après 6 mois d’utilisation gratuite du service de vente en ligne, une contribution de 2% du chiffre d’affaires des ventes en ligne sera demandée. (le reste des services restant gratuits). OFN est une plateforme coopérative, les différentes règles de fonctionnement dont les contributions seront décidées collectivement au fur et à mesure du projet. " + sell_embed: "D’ici là, vous pouvez également participer au projet. Soit en co-créant la communauté belge, en contribuant à l’amélioration des fonctionnalités…  Soit en mettant à disposition : un local pour la démonstration de l’outil 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 l’opportunité 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 %{link}." - 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 %{link}." + 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 ?" diff --git a/config/locales/nb.yml b/config/locales/nb.yml index b058a2b44f..16d1e57b3e 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -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}." diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 61af3615a1..db55ac5385 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -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 estas instruções + 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 matomo.org 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. diff --git a/config/locales/sv.yml b/config/locales/sv.yml index d5490cc2ad..bbc471eb27 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1,5 +1,5 @@ sv: - language_name: "English" + language_name: "Svenska" activerecord: attributes: spree/order: