Compare commits

...

26 Commits

Author SHA1 Message Date
Kristina Lim
77c78f35d3 Update all locales with the latest Transifex translations 2019-07-16 18:53:24 +08:00
Luis Ramos
2280b15664 Merge pull request #4035 from kristinalim/fix/4033-remove_line_item_adjustments_when_line_item_removed
4033 Remove line item adjustments when line item removed
2019-07-16 09:54:33 +01:00
Kristina Lim
2c279fd02d Remove line item adjustments if line item deleted 2019-07-13 03:58:01 +10:00
Kristina Lim
8a048cc155 Add proof line item adjustments remain after line item removal 2019-07-13 01:43:07 +08:00
Luis Ramos
b3c378e8c1 Merge pull request #4029 from Matt-Yorkley/js_render_blocking2
Js render blocking 2
2019-07-12 16:34:31 +01:00
Luis Ramos
39475be792 Merge pull request #4030 from Matt-Yorkley/line_item_errors
LineItems can always access soft-deleted variants
2019-07-12 16:33:36 +01:00
Pau Pérez Fabregat
bdeb56bfaf Merge pull request #4028 from openfoodfoundation/transifex
Transifex
2019-07-11 17:28:38 +02:00
Matt-Yorkley
fb4e573cfa Add a soft-deleted test in line_item_spec 2019-07-11 16:07:30 +01:00
Transifex-Openfoodnetwork
e65df31bc3 Updating translations for config/locales/nl_BE.yml 2019-07-12 00:29:50 +10:00
Transifex-Openfoodnetwork
ce1ac57522 Updating translations for config/locales/de_DE.yml 2019-07-11 23:53:17 +10:00
Transifex-Openfoodnetwork
09ff57d462 Updating translations for config/locales/en_BE.yml 2019-07-11 23:50:31 +10:00
Transifex-Openfoodnetwork
542cf0cf4f Updating translations for config/locales/fr_BE.yml 2019-07-11 23:43:29 +10:00
Transifex-Openfoodnetwork
f4113745ce Updating translations for config/locales/fr.yml 2019-07-11 23:11:32 +10:00
Transifex-Openfoodnetwork
6d197c53e0 Updating translations for config/locales/en_ZA.yml 2019-07-11 21:40:38 +10:00
Matt-Yorkley
b2c6e6271c LineItems can always access soft-deleted variants 2019-07-11 11:33:34 +01:00
Luis Ramos
cdd36eeefc Merge pull request #3674 from Matt-Yorkley/spree2/import_description
Allow import to proceed when updating a product and `description` is set
2019-07-10 21:09:30 +01:00
Matt-Yorkley
97148f6f57 Send embedded Stripe javascript to :injection_data 2019-07-10 19:28:20 +01:00
Matt-Yorkley
6219b3f0c3 Revert "Revert "Fix JS render-blocking in Darkswarm""
This reverts commit ffeca41e
2019-07-10 17:14:08 +01:00
Transifex-Openfoodnetwork
d66cac7a26 Updating translations for config/locales/ca.yml 2019-07-10 21:20:51 +10:00
Transifex-Openfoodnetwork
07c11b9b1f Updating translations for config/locales/es.yml 2019-07-10 21:18:28 +10:00
Transifex-Openfoodnetwork
6a232a1f36 Updating translations for config/locales/ca.yml 2019-07-10 21:17:43 +10:00
Matt-Yorkley
034e8b180a Use let for CSV data 2019-06-25 10:24:53 +01:00
Matt-Yorkley
ead0e1c08d Store attributes list in constant 2019-06-25 10:20:59 +01:00
Matt-Yorkley
8dfb628d88 Add test for ignoring non-updatable description field in validations when updating 2019-06-25 10:19:05 +01:00
Matt-Yorkley
85b3d7dac5 Move attribute check to method 2019-06-25 10:19:05 +01:00
Matt-Yorkley
84040fd2a6 Allow import to proceed when updating a product and description is set 2019-06-25 10:19:05 +01:00
39 changed files with 833 additions and 289 deletions

View File

@@ -0,0 +1,8 @@
module LineItemBasedAdjustmentHandling
extend ActiveSupport::Concern
included do
has_many :adjustments_for_which_source, class_name: "Spree::Adjustment", as: :source,
dependent: :destroy
end
end

View File

@@ -4,6 +4,8 @@
module ProductImport
class EntryValidator
SKIP_VALIDATE_ON_UPDATE = [:description].freeze
# rubocop:disable Metrics/ParameterLists
def initialize(current_user, import_time, spreadsheet_data, editable_enterprises,
inventory_permissions, reset_counts, import_settings, all_entries)
@@ -314,6 +316,7 @@ module ProductImport
def product_field_errors(entry, existing_product)
EntryValidator.non_updatable_fields.each do |display_name, attribute|
next if attributes_match?(attribute, existing_product, entry) || attributes_blank?(attribute, existing_product, entry)
next if ignore_when_updating_product?(attribute)
mark_as_invalid(entry, attribute: display_name, error: I18n.t('admin.product_import.model.not_updatable'))
end
end
@@ -324,6 +327,10 @@ module ProductImport
existing_product_value == convert_to_trusted_type(entry_value, existing_product_value)
end
def ignore_when_updating_product?(attribute)
SKIP_VALIDATE_ON_UPDATE.include? attribute
end
def convert_to_trusted_type(untrusted_attribute, trusted_attribute)
case trusted_attribute
when Integer

View File

@@ -3,6 +3,7 @@ require 'open_food_network/variant_and_line_item_naming'
Spree::LineItem.class_eval do
include OpenFoodNetwork::VariantAndLineItemNaming
include LineItemBasedAdjustmentHandling
has_and_belongs_to_many :option_values, join_table: 'spree_option_values_line_items', class_name: 'Spree::OptionValue'
# Redefining here to add the inverse_of option
@@ -20,7 +21,7 @@ Spree::LineItem.class_eval do
before_destroy :update_inventory_before_destroy
delegate :unit_description, to: :variant
delegate :product, :unit_description, to: :variant
# -- Scopes
scope :managed_by, lambda { |user|
@@ -74,6 +75,11 @@ Spree::LineItem.class_eval do
where('spree_adjustments.id IS NULL')
}
def variant
# Overridden so that LineItems always have access to soft-deleted Variant attributes
Spree::Variant.unscoped { super }
end
def cap_quantity_at_stock!
scoper.scope(variant)
return if variant.on_demand

View File

@@ -1,13 +1,14 @@
- content_for :injection_data do
= inject_available_shipping_methods
= inject_available_payment_methods
= inject_saved_credit_cards
= f_form_for current_order,
html: {name: "checkout",
id: "checkout_form",
novalidate: true,
"ng-submit" => "purchase($event, checkout)"} do |f|
= inject_available_shipping_methods
= inject_available_payment_methods
= inject_saved_credit_cards
= render "checkout/details", f: f
= render "checkout/billing", f: f
= render "checkout/shipping", f: f

View File

@@ -1,8 +1,9 @@
%fieldset#payment
- content_for :injection_data do
- if Stripe.publishable_key
:javascript
angular.module('Darkswarm').value("stripeObject", Stripe("#{Stripe.publishable_key}"))
%fieldset#payment
%ng-form{"ng-controller" => "PaymentCtrl", name: "payment"}
%h5{"ng-class" => "{valid: payment.$valid, dirty: payment.$dirty || submitted}"}

View File

@@ -1,8 +1,9 @@
- content_for(:title) do
= t :checkout_title
= inject_enterprise_and_relatives
= inject_available_countries
- content_for :injection_data do
= inject_enterprise_and_relatives
= inject_available_countries
.darkswarm.footer-pad
- content_for :order_cycle_form do

View File

@@ -5,7 +5,8 @@
- content_for(:image) do
= current_distributor.logo.url
= inject_enterprise_shopfront(@enterprise)
- content_for :injection_data do
= inject_enterprise_shopfront(@enterprise)
%shop.darkswarm
- if @shopfront_layout == 'embedded'

View File

@@ -1,7 +1,8 @@
- content_for(:title) do
= t :groups_title
= inject_groups
- content_for :injection_data do
= inject_groups
#groups.pad-top.footer-pad{"ng-controller" => "GroupsCtrl"}
.row

View File

@@ -5,7 +5,8 @@
- content_for(:image) do
= @group.logo.url
= inject_group_enterprises
- content_for :injection_data do
= inject_group_enterprises
#group-page.row.pad-top.footer-pad{"ng-controller" => "GroupPageCtrl"}
.small-12.columns.pad-top

View File

@@ -15,16 +15,7 @@
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}
%link{href: "/OFN-v2.woff?eslsji", rel: "preload", as: "font", crossorigin: "anonymous"}
= yield :scripts
%script{:src => "https://js.stripe.com/v3/", :type => "text/javascript"}
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places,geometry#{ ENV['GOOGLE_MAPS_API_KEY'] ? '&key=' + ENV['GOOGLE_MAPS_API_KEY'] : ''} "}
= stylesheet_link_tag "darkswarm/all"
= javascript_include_tag "darkswarm/all"
= javascript_include_tag "web/all"
= render "layouts/i18n_script"
= render "layouts/bugherd_script"
= render "layouts/matomo_tag"
= csrf_meta_tags
%body{class: body_classes, ng: {app: "Darkswarm"}}
@@ -34,14 +25,6 @@
= render "layouts/shopfront_script" if @shopfront_layout
= inject_current_hub
= inject_json "user", "current_user"
= inject_json "railsFlash", "flash"
= inject_taxons
= inject_properties
= inject_current_order
= inject_currency_config
.off-canvas-wrap{offcanvas: true}
.inner-wrap
= render "shared/menu/menu" unless @hide_menu
@@ -51,4 +34,23 @@
#footer
%loading
%script{:src => "https://js.stripe.com/v3/", :type => "text/javascript"}
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places,geometry#{ ENV['GOOGLE_MAPS_API_KEY'] ? '&key=' + ENV['GOOGLE_MAPS_API_KEY'] : ''} "}
= javascript_include_tag "darkswarm/all"
= javascript_include_tag "web/all"
= render "layouts/i18n_script"
= yield :scripts
= inject_current_hub
= inject_json "user", "current_user"
= inject_json "railsFlash", "flash"
= inject_taxons
= inject_properties
= inject_current_order
= inject_currency_config
= yield :injection_data
= render "layouts/bugherd_script"
= render "layouts/matomo_tag"
= render 'spree/shared/google_analytics'

View File

@@ -10,13 +10,7 @@
= favicon_link_tag "/favicon-staging.ico"
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}
= yield :scripts
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places"}
= stylesheet_link_tag "darkswarm/all"
= javascript_include_tag "darkswarm/all"
= render "layouts/i18n_script"
= render "layouts/bugherd_script"
= csrf_meta_tags
%body.off-canvas{"ng-app" => "Darkswarm", style: 'background-image: url("/assets/tile-wide.png")' }
@@ -24,8 +18,6 @@
= render partial: "shared/ie_warning"
= javascript_include_tag "iehack"
= inject_json "user", "current_user"
.off-canvas-wrap{offcanvas: true}
.inner-wrap
@@ -34,3 +26,13 @@
#footer
%loading
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places"}
= javascript_include_tag "darkswarm/all"
= yield :scripts
= inject_json "user", "current_user"
= yield :injection_data
= render "layouts/i18n_script"
= render "layouts/bugherd_script"

View File

@@ -1,7 +1,8 @@
- content_for(:title) do
= t :label_map
= inject_enterprise_shopfront_list
- content_for :injection_data do
= inject_enterprise_shopfront_list
.map-container{"fill-vertical" => true}
%map{"ng-controller" => "MapCtrl"}

View File

@@ -1,7 +1,8 @@
- content_for(:title) do
= t :producers_title
= inject_enterprises(@enterprises)
- content_for :injection_data do
= inject_enterprises(@enterprises)
.producers{"ng-controller" => "EnterprisesCtrl", "ng-cloak" => true}
.row

View File

@@ -1,9 +1,10 @@
- content_for(:title) do
= t :register_title
= inject_spree_api_key
= inject_available_countries
= inject_enterprise_attributes
- content_for :injection_data do
= inject_spree_api_key
= inject_available_countries
= inject_enterprise_attributes
- steps = %w{about contact details finished images introduction}
- steps += %w{logo promo social steps type}

View File

@@ -1,7 +1,9 @@
%ordercycle{"ng-controller" => "OrderCycleCtrl"}
- content_for :scripts do
:javascript
angular.module('Darkswarm').value('orderCycleData', #{render "json/order_cycle"})
%ordercycle{"ng-controller" => "OrderCycleCtrl"}
- if @order_cycles and @order_cycles.empty?
%h4
%i.ofn-i_012-warning

View File

@@ -1,7 +1,8 @@
- content_for(:title) do
= t :shops_title
= inject_enterprises(@enterprises)
- content_for :injection_data do
= inject_enterprises(@enterprises)
#panes
#shops.pane

View File

@@ -1,7 +1,8 @@
- content_for(:title) do
= t :orders_edit_title
= inject_enterprise_and_relatives
- content_for :injection_data do
= inject_enterprise_and_relatives
.darkswarm
- content_for :order_cycle_form do

View File

@@ -1,7 +1,8 @@
- content_for(:title) do
= t :orders_show_title
= inject_enterprise_and_relatives if current_distributor.present?
- content_for :injection_data do
= inject_enterprise_and_relatives if current_distributor.present?
.darkswarm
= render "shopping_shared/details" if current_distributor.present?

View File

@@ -1,12 +1,12 @@
.darkswarm
- content_for :injection_data do
= inject_orders
= inject_shops
= inject_saved_credit_cards
- if Stripe.publishable_key
:javascript
angular.module('Darkswarm').value("stripeObject", Stripe("#{Stripe.publishable_key}"))
.darkswarm
.row.pad-top
.small-12.columns.pad-top
%h2

View File

@@ -164,7 +164,7 @@ ca:
site_meta_description: "Comencem des de baix. Amb agricultors i productors disposats a explicar les seves històries amb orgull i sinceritat. Amb distribuïdors connectant persones i productes de manera justa i honesta. Amb compradors que creuen que millors decisions de compra setmanal poden ..."
search_by_name: Cercar per nom o barri ...
producers_join: Els productors australians son ara benvinguts a unir-se a Open Food Network.
charges_sales_tax: Càrrecs GST?
charges_sales_tax: Càrrecs d'IVA?
print_invoice: "Imprimir Factura"
print_ticket: "Imprimir tiquet"
select_ticket_printer: "Seleccionar la impressora de tiquets"
@@ -322,9 +322,10 @@ ca:
enable_products_cache: "Habilitar la memòria cau de productes?"
invoice_settings:
edit:
title: Configuració de la factura
invoice_style2?: Utilitzeu el model de factura alternatiu que inclou el desglossament dels càrregs totals per tarifa i la informació sobre la taxa impositiva per article (encara no està disponible per als països sense recàrregs en concpte d'impostos)
enable_receipt_printing?: Mostra les opcions per imprimir rebuts amb impressores tèrmiques en el menú desplegable de la comanda?
title: "Configuració de la factura"
enable_invoices?: "Activar factures?"
invoice_style2?: "Utilitzeu el model de factura alternatiu que inclou el desglossament dels càrregs totals per tarifa i la informació sobre la taxa impositiva per article (encara no està disponible per als països sense recàrregs en concpte d'impostos)"
enable_receipt_printing?: "Mostra les opcions per imprimir rebuts amb impressores tèrmiques en el menú desplegable de la comanda?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -651,6 +652,8 @@ ca:
permalink_tip: "Aquest enllaç permanent s'utilitza per crear l'url a la vostra botiga: %{link}your-shop-name / shop"
link_to_front: Enllaç a la botiga
link_to_front_tip: Un enllaç directe a la vostra botiga a l'Open Food Netwok.
ofn_uid: UID d'OFN
ofn_uid_tip: L'identificador únic que sutilitza per identificar l'organització a Open Food Network.
shipping_methods:
name: Nom
applies: 'Aplicar? '
@@ -833,6 +836,7 @@ ca:
add_distributor: 'Afegeix distribuïdora'
advanced_settings:
title: Configuració avançada
choose_product_tip: Podeu restringir els productes entrants i sortints a només linventari d%{inventory}.
preferred_product_selection_from_coordinator_inventory_only_here: Només inventari del coordinador
preferred_product_selection_from_coordinator_inventory_only_all: Tots els productes disponibles
save_reload: Desa i recarrega la pàgina
@@ -1696,6 +1700,7 @@ ca:
introduction:
registration_greeting: "Hola!"
registration_intro: "Ara pots crear un perfil per productora o grup de consum"
registration_checklist: "Què necessito?"
registration_time: "5-10 minuts"
registration_enterprise_address: "Adreça de l'organització"
registration_contact_details: "Dades de contacte principals"

View File

@@ -14,7 +14,9 @@ de_DE:
spree/product:
primary_taxon: "Produktkategorie"
supplier: "Anbieter"
shipping_category_id: "Versandkategorie"
variant_unit: "Varianteneinheit"
variant_unit_name: "Name der Varianteneinheit"
order_cycle:
orders_close_at: Schlussdatum
errors:
@@ -75,6 +77,8 @@ de_DE:
user_confirmations:
spree_user:
send_instructions: "Sie erhalten in einigen Minuten eine E-Mail mit Anweisungen zur Bestätigung Ihres Kontos."
confirmation_sent: "E-Mail-Bestätigung gesendet"
confirmation_not_sent: "Fehler beim Senden der Bestätigungs-E-Mail"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Eine Nachricht mit einem Bestätigungslink wurde an Ihre E-Mail-Adresse gesendet. Bitte öffnen Sie den Link, um Ihr Konto zu aktivieren."
@@ -85,6 +89,8 @@ de_DE:
Haben Sie als Gast bestellt? Vielleicht brauchen Sie ein neues Konto oder müssen Ihr Passwort zurücksetzen.
unconfirmed: "Sie müssen Ihr Konto bestätigen, bevor Sie fortfahren."
already_registered: "Diese E-Mail ist bereits registriert. Bitte loggen Sie sich ein oder verwenden Sie eine andere E-Mail-Adresse."
success:
logged_in_succesfully: "Erfolgreich eingeloggt"
user_passwords:
spree_user:
updated_not_active: "Ihr Passwort wurde zurückgesetzt, aber ihre E-Mail muss noch bestätigt werden."
@@ -316,9 +322,10 @@ de_DE:
enable_products_cache: "Produktcache aktivieren?"
invoice_settings:
edit:
title: Rechnungseinstellungen
invoice_style2?: Verwenden Sie das alternative Rechnungsmodell, das die gesamte Steueraufschlüsselung pro Tarif- und Steuersatzinfo pro Artikel enthält (noch nicht für Länder mit Preisen ohne Steuern geeignet)
enable_receipt_printing?: Optionen zum Drucken von Belegen mit Thermodruckern in der Dropdown-Liste anzeigen?
title: "Rechnungseinstellungen"
enable_invoices?: "Rechnungen aktivieren?"
invoice_style2?: "Verwenden Sie das alternative Rechnungsmodell, das die gesamte Steueraufschlüsselung pro Tarif- und Steuersatzinfo pro Artikel enthält (noch nicht für Länder mit Preisen ohne Steuern geeignet)"
enable_receipt_printing?: "Optionen zum Drucken von Belegen mit Thermodruckern in der Dropdown-Liste anzeigen?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -385,6 +392,7 @@ de_DE:
calculator: "Rechner"
calculator_values: "Werte des Rechners"
search: "Suche"
name_placeholder: "zB Verpackungsgebühr"
enterprise_groups:
index:
new_button: Neue Unternehmensgruppe
@@ -644,6 +652,8 @@ de_DE:
permalink_tip: "Dieser Permalink wird verwendet, um die URL zu Ihrem Laden zu erstellen: %{link}name-ihres-ladens / laden"
link_to_front: Link zum Laden
link_to_front_tip: Ein direkter Link zu Ihrem Laden im Open Food Network.
ofn_uid: OFN UID
ofn_uid_tip: Die eindeutige ID, mit der das Unternehmen in Open Food Network identifiziert wird.
shipping_methods:
name: Name
applies: Gilt?
@@ -805,6 +815,9 @@ de_DE:
user_already_exists: "Benutzer existiert bereits"
error: "Etwas ist schief gelaufen"
order_cycles:
loading_flash:
loading_order_cycles: LADEN VON AUFTRAGSZYKLEN
loading: WIRD GELADEN...
edit:
advanced_settings: Erweiterte Einstellungen
update_and_close: Aktualisieren und schließen
@@ -823,6 +836,7 @@ de_DE:
add_distributor: 'Verteiler hinzufügen'
advanced_settings:
title: Erweiterte Einstellungen
choose_product_tip: Sie können den Wareneingang und -ausgang auf den Bestand von nur %{inventory} beschränken.
preferred_product_selection_from_coordinator_inventory_only_here: Nur der Katalog des Koordinators
preferred_product_selection_from_coordinator_inventory_only_all: Alle verfügbaren Produkte
save_reload: Speichern und neu laden
@@ -958,6 +972,8 @@ de_DE:
pause_subscription: Abonement pausieren
unpause_subscription: Abonnement fortsetzen
cancel_subscription: Abonnement beenden
filters:
query_placeholder: "Suche per E-Mail ..."
setup_explanation:
just_a_few_more_steps: 'Nur noch ein paar Schritte bevor Sie beginnen können:'
enable_subscriptions: "Aktivieren Sie Abonnements für mindestens einen Ihrer Läden"
@@ -990,6 +1006,8 @@ de_DE:
charges_not_allowed: Der Kunde hat keine Belastungen erlaubt.
no_default_card: Für den Kunden ist keine belastbare Karte vorhanden.
card_ok: Eine belastbare Karte ist für den Kunden vorhanden.
begins_at_placeholder: "Wählen Sie ein Datum"
ends_at_placeholder: "Wahlweise"
loading_flash:
loading: ABONNEMENTS WERDEN GELADEN
review:
@@ -999,6 +1017,7 @@ de_DE:
no_open_or_upcoming_order_cycle: "Kein bevorstehender Bestellzyklus"
products_panel:
save: "SPEICHERN"
saving: "SPEICHERN"
saved: "GESPEICHERT"
product_already_in_order: Dieses Produkt wurde bereits zur Bestellung hinzugefügt. Bitte änderns Sie stattdessen die Menge.
orders:
@@ -1046,8 +1065,12 @@ de_DE:
show_on_map: "Alle auf der Karte zeigen"
shared:
menu:
cart:
cart: "Wagen"
signed_in:
profile: "Profil"
mobile_menu:
cart: "Wagen"
joyride:
checkout: "Zur Kasse"
already_ordered_products: "Bereits in diesem Bestellzyklus bestellt"
@@ -1084,7 +1107,11 @@ de_DE:
shop:
messages:
login: "Anmeldung"
signup: "Anmelden"
contact: "Kontakt"
require_customer_login: "Nur zugelassene Kunden können auf diesen Shop zugreifen."
require_login_html: "Wenn Sie bereits ein genehmigter Kunde sind, fahren Sie mit %{login} oder %{signup} fort. Möchten Sie hier einkaufen? Bitte %{contact} %{enterprise} und frage nach Beitritt."
require_customer_html: "Wenn Sie hier einkaufen möchten, fragen Sie bitte %{contact} %{enterprise} nach dem Beitritt."
card_could_not_be_updated: Die Karte konnte nicht aktualisiert werden
card_could_not_be_saved: Karte konnte nicht gespeichert werden
spree_gateway_error_flash_for_checkout: "Bei den Zahlungsinformationen ist ein Problem aufgetreten: %{error}"
@@ -1121,6 +1148,7 @@ de_DE:
menu_4_title: "Gruppen"
menu_4_url: "/groups"
menu_5_title: "Über Uns"
menu_5_url: "https://about.openfoodnetwork.org.au/"
menu_6_title: "Verbinden"
menu_6_url: "https://openfoodnetwork.org/au/connect/"
menu_7_title: "Mehr Erfahren"
@@ -1450,6 +1478,7 @@ de_DE:
orders_changeable_orders_alert_html: Diese Bestellung wurde bestätigt, Sie können jedoch bis <strong> %{oc_close} </ strong> Änderungen vornehmen.
products_clear_all: Alles löschen
products_showing: "Angezeigt:"
products_or: "ODER"
products_with: mit
products_search: "Suche nach Produkt oder Hersteller"
products_loading: "Lade Produkte..."
@@ -1555,6 +1584,7 @@ de_DE:
sell_hubs_detail: "Richten Sie im OFN ein Profil für Ihr Lebensmittelunternehmen oder Ihre Organisation ein. Sie können Ihr Profil jederzeit auf einen Multi-Producer-Shop upgraden."
sell_groups_detail: "Richten Sie ein maßgeschneidertes Verzeichnis von Unternehmen (Produzenten und andere Lebensmittelunternehmen) für Ihre Region oder für Ihre Organisation ein."
sell_user_guide: "Erfahren Sie mehr in unserem Benutzerhandbuch."
sell_listing_price: "Das Listing im OFN ist kostenlos. Das Eröffnen und Betreiben eines OFN-Shops ist bis zu 500 US-Dollar monatlich kostenlos. Wenn Sie mehr verkaufen, können Sie Ihren Community-Beitrag zwischen 1% und 3% des Umsatzes wählen. Weitere Informationen zur Preisgestaltung finden Sie im Abschnitt Software Platform über den Link About im oberen Menü."
sell_embed: "Wir können auch einen OFN-Laden in Ihre eigene Website einbetten oder eine maßgeschneiderte Webseite für Ihr Lokalität oder Region erstellen."
sell_ask_services: "Fragen Sie uns nach OFN-Diensten."
shops_title: Läden
@@ -1670,6 +1700,7 @@ de_DE:
introduction:
registration_greeting: "Hallo!"
registration_intro: "Sie können jetzt ein Profil als Produzent oder Verteilstelle erzeugen"
registration_checklist: "Was brauche ich?"
registration_time: "5-10 Minuten"
registration_enterprise_address: "Unternehmensadresse"
registration_contact_details: "Primäre Kontaktangaben"
@@ -1924,6 +1955,7 @@ de_DE:
spree_admin_supplier: Anbieter
spree_admin_product_category: Produktkategorie
spree_admin_variant_unit_name: Einheit der Variante
unit_name: "Einheitenname"
change_package: "Paket ändern"
spree_admin_single_enterprise_hint: "Tipp: Um es Ihnen zu ermöglichen, Sie zu finden, aktivieren Sie Ihre Sichtbarkeit unter"
spree_admin_eg_pickup_from_school: "z.B. \"Abholung von der Grundschule\""
@@ -2159,6 +2191,7 @@ de_DE:
payment_methods: "Zahlungsarten"
payment_method_fee: "Transaktionsgebühr"
payment_processing_failed: "Die Zahlung konnte nicht verarbeitet werden. Bitte überprüfen Sie die eingegebenen Daten"
payment_method_not_supported: "Diese Zahlungsmethode wird nicht unterstützt. Bitte wählen Sie einen anderen."
payment_updated: "Zahlung wurde aktualisiert"
inventory_settings: "Katalogeinstellungen"
tag_rules: "Stichwort-Regeln"
@@ -2352,8 +2385,18 @@ de_DE:
severity: Schwere
description: Beschreibung
resolve: Entschlossenheit
tag_rules:
shipping_method_tagged_top: "Versandarten markiert"
shipping_method_tagged_bottom: "sind:"
payment_method_tagged_top: "Zahlungsmethoden markiert"
payment_method_tagged_bottom: "sind:"
order_cycle_tagged_top: "Bestellzyklen markiert"
order_cycle_tagged_bottom: "sind:"
inventory_tagged_top: "Inventarvarianten markiert"
inventory_tagged_bottom: "sind:"
new_tag_rule_dialog:
select_rule_type: "Wählen Sie einen Regelart aus:"
add_rule: "Regel hinzufügen"
enterprise_fees:
inherit_from_product: "Vom Produkt erben"
orders:
@@ -2416,6 +2459,7 @@ de_DE:
name_required_error: "Bitte geben Sie einen Namen für diesen Zeitplan ein"
no_order_cycles_error: "Bitte wählen Sie mindestens einen Bestellzyklus aus (Drag & Drop)"
available: "Verfügbar"
selected: "Ausgewählt"
customers:
index:
add_customer: "Kunden hinzufügen"
@@ -2609,6 +2653,7 @@ de_DE:
fill_in_customer_info: "Bitte geben Sie Ihre Kundeninformationen ein"
new_payment: "Neue Zahlung"
capture: "Erfassung"
void: "Leere"
configurations: "Konfigurationen"
general_settings: "Allgemeine Einstellungen"
site_name: "Site-Name"
@@ -2710,7 +2755,16 @@ de_DE:
no_results: "Keine Ergebnisse"
create: "Neu"
loading: "Wird geladen"
flat_percent: "Flacher Prozentsatz"
per_kg: "Pro kg"
amount: "Betrag"
currency: "Währung"
first_item: "Erste Artikelkosten"
additional_item: "Zusätzliche Artikelkosten"
max_items: "Max. Artikel"
minimal_amount: "Minimale Menge"
normal_amount: "Normaler Betrag"
discount_amount: "Rabattbetrag"
email: Email
account_updated: "Konto aktualisiert!"
my_account: "Mein Konto"
@@ -2809,11 +2863,29 @@ de_DE:
shipping_methods:
index:
shipping_methods: "Lieferart"
new_shipping_method: "Neue Versandart"
name: "Name"
products_distributor: "Verteiler"
zone: "Zone"
calculator: "Rechner"
display: "Anzeige"
both: "Beide"
front_end: "Vorderes Ende"
back_end: "Back End"
no_shipping_methods_found: "Keine Versandmethoden gefunden"
new:
new_shipping_method: "Neue Versandart"
back_to_shipping_methods_list: "Zurück zur Liste der Versandmethoden"
edit:
editing_shipping_method: "Versandart bearbeiten"
new: "Neu"
back_to_shipping_methods_list: "Zurück zur Liste der Versandmethoden"
form:
categories: "Kategorien"
zones: "Zonen"
both: "Beide"
front_end: "Vorderes Ende"
back_end: "Back End"
payment_methods:
new:
new_payment_method: "Neue Zahlungsart"
@@ -2840,6 +2912,7 @@ de_DE:
error_saving_payment: Fehler beim Speichern der Zahlung
submitting_payment: Zahlung wird gesendet ...
products:
image_upload_error: "Das Produktbild wurde nicht erkannt. Bitte laden Sie ein Bild im PNG- oder JPG-Format hoch."
new:
title: 'Neues Produkt'
unit_name_placeholder: 'z.B. Trauben'

View File

@@ -14,7 +14,9 @@ en_AU:
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
shipping_category_id: "Shipping Category"
variant_unit: "Variant Unit"
variant_unit_name: "Variant Unit Name"
order_cycle:
orders_close_at: Close date
errors:
@@ -75,6 +77,8 @@ en_AU:
user_confirmations:
spree_user:
send_instructions: "You will receive an email with instructions about how to confirm your account in a few minutes."
confirmation_sent: "Email confirmation sent"
confirmation_not_sent: "Error sending confirmation email"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please open the link to activate your account."
@@ -85,6 +89,8 @@ en_AU:
Were you a guest last time? Perhaps you need to create an account or reset your password.
unconfirmed: "You have to confirm your account before continuing."
already_registered: "This email address is already registered. Please log in to continue, or go back and use another email address."
success:
logged_in_succesfully: "Logged in successfully"
user_passwords:
spree_user:
updated_not_active: "Your password has been reset, but your email has not been confirmed yet."
@@ -316,9 +322,10 @@ en_AU:
enable_products_cache: "Enable Products Cache?"
invoice_settings:
edit:
title: Invoice Settings
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
title: "Invoice Settings"
enable_invoices?: "Enable Invoices?"
invoice_style2?: "Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)"
enable_receipt_printing?: "Show options for printing receipts using thermal printers in order dropdown?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -385,6 +392,7 @@ en_AU:
calculator: "Calculator"
calculator_values: "Calculator Values"
search: "Search"
name_placeholder: "e.g. packing fee"
enterprise_groups:
index:
new_button: New Enterprise Group
@@ -643,6 +651,8 @@ en_AU:
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
link_to_front: Link to shop front
link_to_front_tip: A direct link to your shopfront on the Open Food Network.
ofn_uid: OFN UID
ofn_uid_tip: The unique id used to identify the enterprise on Open Food Network.
shipping_methods:
name: Name
applies: Applies?
@@ -824,6 +834,7 @@ en_AU:
add_distributor: 'Add distributor'
advanced_settings:
title: Advanced Settings
choose_product_tip: You can restrict products incoming and outgoing to only %{inventory}'s inventory.
preferred_product_selection_from_coordinator_inventory_only_here: Coordinator's Inventory Only
preferred_product_selection_from_coordinator_inventory_only_all: All Available Products
save_reload: Save and Reload Page
@@ -959,6 +970,8 @@ en_AU:
pause_subscription: Pause Subscription
unpause_subscription: Unpause Subscription
cancel_subscription: Cancel Subscription
filters:
query_placeholder: "Search by email..."
setup_explanation:
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
@@ -991,6 +1004,8 @@ en_AU:
charges_not_allowed: Charges are not allowed by this customer
no_default_card: Customer has no cards available to charge
card_ok: Customer has a card available to charge
begins_at_placeholder: "Select a Date"
ends_at_placeholder: "Optional"
loading_flash:
loading: LOADING SUBSCRIPTIONS
review:
@@ -1048,8 +1063,12 @@ en_AU:
show_on_map: "Show all on the map"
shared:
menu:
cart:
cart: "Cart"
signed_in:
profile: "Profile"
mobile_menu:
cart: "Cart"
joyride:
checkout: "Checkout now"
already_ordered_products: "Already ordered in this order cycle"
@@ -1086,7 +1105,11 @@ en_AU:
shop:
messages:
login: "login"
signup: "signup"
contact: "contact"
require_customer_login: "Only approved customers can access this shop."
require_login_html: "If you're already an approved customer, %{login} or %{signup} to proceed. Want to start shopping here? Please %{contact} %{enterprise} and ask about joining."
require_customer_html: "If you'd like to start shopping here, please %{contact} %{enterprise} to ask about joining."
card_could_not_be_updated: Card could not be updated
card_could_not_be_saved: card could not be saved
spree_gateway_error_flash_for_checkout: "There was a problem with your payment information: %{error}"
@@ -1675,6 +1698,7 @@ en_AU:
introduction:
registration_greeting: "Hi there!"
registration_intro: "You can now create a profile for your Producer or Hub"
registration_checklist: "What do I need?"
registration_time: "5-10 minutes"
registration_enterprise_address: "Enterprise address"
registration_contact_details: "Primary contact details"
@@ -1929,6 +1953,7 @@ en_AU:
spree_admin_supplier: Supplier
spree_admin_product_category: Product Category
spree_admin_variant_unit_name: Variant unit name
unit_name: "Unit name"
change_package: "Change Package"
spree_admin_single_enterprise_hint: "Hint: To allow people to find you, turn on your visibility under"
spree_admin_eg_pickup_from_school: "eg. 'Pick-up from Primary School'"
@@ -2164,6 +2189,7 @@ en_AU:
payment_methods: "Payment Methods"
payment_method_fee: "Transaction fee"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
payment_method_not_supported: "That payment method is unsupported. Please choose another one."
payment_updated: "Payment Updated"
inventory_settings: "Inventory Settings"
tag_rules: "Tag Rules"
@@ -2354,8 +2380,18 @@ en_AU:
severity: Severity
description: Description
resolve: Resolve
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
payment_method_tagged_top: "Payment methods tagged"
payment_method_tagged_bottom: "are:"
order_cycle_tagged_top: "Order Cycles tagged"
order_cycle_tagged_bottom: "are:"
inventory_tagged_top: "Inventory variants tagged"
inventory_tagged_bottom: "are:"
new_tag_rule_dialog:
select_rule_type: "Select a rule type:"
add_rule: "Add Rule"
enterprise_fees:
inherit_from_product: "Inherit From Product"
orders:
@@ -2612,6 +2648,7 @@ en_AU:
fill_in_customer_info: "Please fill in customer info"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2713,7 +2750,16 @@ en_AU:
no_results: "No results"
create: "Create"
loading: "Loading"
flat_percent: "Flat Percent"
per_kg: "Per Kg"
amount: "Amount"
currency: "Currency"
first_item: "First Item Cost"
additional_item: "Additional Item Cost"
max_items: "Max Items"
minimal_amount: "Minimal Amount"
normal_amount: "Normal Amount"
discount_amount: "Discount Amount"
email: Email
account_updated: "Account updated!"
my_account: "My account"
@@ -2812,16 +2858,29 @@ en_AU:
shipping_methods:
index:
shipping_methods: "Shipping Methods"
new_shipping_method: "New Shipping Method"
name: "Name"
products_distributor: "Distributor"
zone: "Zone"
calculator: "Calculator"
display: "Display"
both: "Both"
front_end: "Front End"
back_end: "Back End"
no_shipping_methods_found: "No shipping methods found"
new:
new_shipping_method: "New Shipping Method"
back_to_shipping_methods_list: "Back To Shipping Methods List"
edit:
editing_shipping_method: "Editing Shipping Method"
new: "New"
back_to_shipping_methods_list: "Back To Shipping Methods List"
form:
categories: "Categories"
zones: "Zones"
both: "Both"
front_end: "Front End"
back_end: "Back End"
payment_methods:
new:
new_payment_method: "New Payment Method"
@@ -2848,6 +2907,7 @@ en_AU:
error_saving_payment: Error saving payment
submitting_payment: Submitting payment...
products:
image_upload_error: "The product image was not recognised. Please upload an image in PNG or JPG format."
new:
title: 'New Product'
unit_name_placeholder: 'eg. bunches'

View File

@@ -14,7 +14,9 @@ en_BE:
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
shipping_category_id: "Shipping Category"
variant_unit: "Variant Unit"
variant_unit_name: "Variant Unit Name"
order_cycle:
orders_close_at: Close date
errors:
@@ -75,6 +77,8 @@ en_BE:
user_confirmations:
spree_user:
send_instructions: "You will receive an email with instructions about how to confirm your account in a few minutes."
confirmation_sent: "Email confirmation sent"
confirmation_not_sent: "Error sending confirmation email"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please open the link to activate your account."
@@ -85,6 +89,8 @@ en_BE:
Were you a guest last time? Perhaps you need to create an account or reset your password.
unconfirmed: "You have to confirm your account before continuing."
already_registered: "This email address is already registered. Please log in to continue, or go back and use another email address."
success:
logged_in_succesfully: "Logged in successfully"
user_passwords:
spree_user:
updated_not_active: "Your password has been reset, but your email has not been confirmed yet."
@@ -316,9 +322,10 @@ en_BE:
enable_products_cache: "Enable Products Cache?"
invoice_settings:
edit:
title: Invoice Settings
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
title: "Invoice Settings"
enable_invoices?: "Enable Invoices?"
invoice_style2?: "Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)"
enable_receipt_printing?: "Show options for printing receipts using thermal printers in order dropdown?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -385,6 +392,7 @@ en_BE:
calculator: "Calculator"
calculator_values: "Calculator Values"
search: "Search"
name_placeholder: "e.g. packing fee"
enterprise_groups:
index:
new_button: New Enterprise Group
@@ -643,6 +651,8 @@ en_BE:
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
link_to_front: Link to shop front
link_to_front_tip: A direct link to your shopfront on the Open Food Network.
ofn_uid: OFN UID
ofn_uid_tip: The unique id used to identify the enterprise on Open Food Network.
shipping_methods:
name: Name
applies: Applies?
@@ -824,6 +834,7 @@ en_BE:
add_distributor: 'Add distributor'
advanced_settings:
title: Advanced Settings
choose_product_tip: You can restrict products incoming and outgoing to only %{inventory}'s inventory.
preferred_product_selection_from_coordinator_inventory_only_here: Coordinator's Inventory Only
preferred_product_selection_from_coordinator_inventory_only_all: All Available Products
save_reload: Save and Reload Page
@@ -959,6 +970,8 @@ en_BE:
pause_subscription: Pause Subscription
unpause_subscription: Unpause Subscription
cancel_subscription: Cancel Subscription
filters:
query_placeholder: "Search by email..."
setup_explanation:
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
@@ -991,6 +1004,8 @@ en_BE:
charges_not_allowed: Charges are not allowed by this customer
no_default_card: Customer has no cards available to charge
card_ok: Customer has a card available to charge
begins_at_placeholder: "Select a Date"
ends_at_placeholder: "Optional"
loading_flash:
loading: LOADING SUBSCRIPTIONS
review:
@@ -1048,8 +1063,12 @@ en_BE:
show_on_map: "Show all on the map"
shared:
menu:
cart:
cart: "Cart"
signed_in:
profile: "Profile"
mobile_menu:
cart: "Cart"
joyride:
checkout: "Checkout now"
already_ordered_products: "Already ordered in this order cycle"
@@ -1086,7 +1105,11 @@ en_BE:
shop:
messages:
login: "login"
signup: "signup"
contact: "contact"
require_customer_login: "Only approved customers can access this shop."
require_login_html: "If you're already an approved customer, %{login}or %{signup} to proceed. Want to start shopping here? Please %{contact}%{enterprise} and ask about joining."
require_customer_html: "If you'd like to start shopping here, please %{contact}%{enterprise}to ask about joining."
card_could_not_be_updated: Card could not be updated
card_could_not_be_saved: card could not be saved
spree_gateway_error_flash_for_checkout: "There was a problem with your payment information: %{error}"
@@ -1123,6 +1146,7 @@ en_BE:
menu_4_title: "Groups"
menu_4_url: "/groups"
menu_5_title: "About"
menu_5_url: "https://about.openfoodnetwork.org.au/"
menu_6_title: "Connect"
menu_6_url: "https://openfoodnetwork.org/au/connect/"
menu_7_title: "Learn"
@@ -1558,6 +1582,7 @@ en_BE:
sell_hubs_detail: "Set up a profile for your food enterprise or organisation on the OFN. At any time you can upgrade your profile to a multi-producer shop."
sell_groups_detail: "Set up a tailored directory of enterprises (producers and other food enterprises) for your region or for your organisation."
sell_user_guide: "Find out more in our user guide."
sell_listing_price: "Listing on the OFN is free. Opening and running a shop on OFN is free up to €500 of monthly sales. If you sell more you can choose your community contribution between 1% and 3% of sales. For more detail on pricing visit the Software Platform section via the About link in the top menu."
sell_embed: "We can also embed an OFN shop in your own customised website or build a customised local food network website for your region."
sell_ask_services: "Ask us about OFN services."
shops_title: Shops
@@ -1673,6 +1698,7 @@ en_BE:
introduction:
registration_greeting: "Hi there!"
registration_intro: "You can now create a profile for your Producer or Hub"
registration_checklist: "What do I need?"
registration_time: "5-10 minutes"
registration_enterprise_address: "Enterprise address"
registration_contact_details: "Primary contact details"
@@ -1927,6 +1953,7 @@ en_BE:
spree_admin_supplier: Supplier
spree_admin_product_category: Product Category
spree_admin_variant_unit_name: Variant unit name
unit_name: "Unit name"
change_package: "Change Package"
spree_admin_single_enterprise_hint: "Hint: To allow people to find you, turn on your visibility under"
spree_admin_eg_pickup_from_school: "eg. 'Pick-up from Primary School'"
@@ -2162,6 +2189,7 @@ en_BE:
payment_methods: "Payment Methods"
payment_method_fee: "Transaction fee"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
payment_method_not_supported: "That payment method is unsupported. Please choose another one."
payment_updated: "Payment Updated"
inventory_settings: "Inventory Settings"
tag_rules: "Tag Rules"
@@ -2352,8 +2380,18 @@ en_BE:
severity: Severity
description: Description
resolve: Resolve
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
payment_method_tagged_top: "Payment methods tagged"
payment_method_tagged_bottom: "are:"
order_cycle_tagged_top: "Order Cycles tagged"
order_cycle_tagged_bottom: "are:"
inventory_tagged_top: "Inventory variants tagged"
inventory_tagged_bottom: "are:"
new_tag_rule_dialog:
select_rule_type: "Select a rule type:"
add_rule: "Add Rule"
enterprise_fees:
inherit_from_product: "Inherit From Product"
orders:
@@ -2610,6 +2648,7 @@ en_BE:
fill_in_customer_info: "Please fill in customer info"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2711,7 +2750,16 @@ en_BE:
no_results: "No results"
create: "Create"
loading: "Loading"
flat_percent: "Flat Percent"
per_kg: "Per Kg"
amount: "Amount"
currency: "Currency"
first_item: "First Item Cost"
additional_item: "Additional Item Cost"
max_items: "Max Items"
minimal_amount: "Minimal Amount"
normal_amount: "Normal Amount"
discount_amount: "Discount Amount"
email: Email
account_updated: "Account updated!"
my_account: "My account"
@@ -2810,16 +2858,29 @@ en_BE:
shipping_methods:
index:
shipping_methods: "Shipping Methods"
new_shipping_method: "New Shipping Method"
name: "Name"
products_distributor: "Distributor"
zone: "Zone"
calculator: "Calculator"
display: "Display"
both: "Both"
front_end: "Front End"
back_end: "Back End"
no_shipping_methods_found: "No shipping methods found"
new:
new_shipping_method: "New Shipping Method"
back_to_shipping_methods_list: "No shipping methods found"
edit:
editing_shipping_method: "Editing Shipping Method"
new: "New"
back_to_shipping_methods_list: "No shipping methods found"
form:
categories: "Categories"
zones: "Zones"
both: "Both"
front_end: "Front End"
back_end: "Back End"
payment_methods:
new:
new_payment_method: "New Payment Method"
@@ -2846,6 +2907,7 @@ en_BE:
error_saving_payment: Error saving payment
submitting_payment: Submitting payment...
products:
image_upload_error: "The product image was not recognised. Please upload an image in PNG or JPG format."
new:
title: 'New Product'
unit_name_placeholder: 'eg. bunches'

View File

@@ -14,7 +14,9 @@ en_CA:
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
shipping_category_id: "Shipping Category"
variant_unit: "Variant Unit"
variant_unit_name: "Variant Unit Name"
order_cycle:
orders_close_at: Close date
errors:
@@ -75,6 +77,8 @@ en_CA:
user_confirmations:
spree_user:
send_instructions: "You will receive an email with instructions about how to confirm your account in a few minutes."
confirmation_sent: "Email confirmation sent"
confirmation_not_sent: "Error sending confirmation email"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please open the link to activate your account."
@@ -85,6 +89,8 @@ en_CA:
Were you a guest last time? Perhaps you need to create an account or reset your password.
unconfirmed: "You have to confirm your account before continuing."
already_registered: "This email address is already registered. Please log in to continue, or go back and use another email address."
success:
logged_in_succesfully: "Logged in successfully"
user_passwords:
spree_user:
updated_not_active: "Your password has been reset, but your email has not been confirmed yet."
@@ -156,8 +162,8 @@ en_CA:
title: Open Food Network
welcome_to: 'Welcome to '
site_meta_description: "We begin from the ground up. With farmers and growers ready to tell their stories proudly and truly. With distributors ready to connect people with products fairly and honestly. With buyers who believe that better weekly shopping decisions can…"
search_by_name: Search by name or suburb...
producers_join: Australian producers are now welcome to join the Open Food Network.
search_by_name: Search by name or city
producers_join: Producers are welcome to join the Open Food Network.
charges_sales_tax: Charges sales tax?
print_invoice: "Print Invoice"
print_ticket: "Print Ticket"
@@ -316,9 +322,10 @@ en_CA:
enable_products_cache: "Enable Products Cache?"
invoice_settings:
edit:
title: Invoice Settings
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
title: "Invoice Settings"
enable_invoices?: "Enable Invoices?"
invoice_style2?: "Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)"
enable_receipt_printing?: "Show options for printing receipts using thermal printers in order dropdown?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -385,6 +392,7 @@ en_CA:
calculator: "Calculator"
calculator_values: "Calculator Values"
search: "Search"
name_placeholder: "e.g. packing fee"
enterprise_groups:
index:
new_button: New Enterprise Group
@@ -401,7 +409,7 @@ en_CA:
category: Category
tax_category: Tax Category
inherits_properties?: Inherits Properties?
available_on: Available On
available_on: Available
av_on: "Av. On"
import_date: Imported
upload_an_image: Upload an image
@@ -414,6 +422,7 @@ en_CA:
property_name: Property Name
inherited_property: Inherited Property
variants:
infinity: "Infinity"
to_order_tip: "Items made to order do not have a set stock level, such as loaves of bread made fresh to order."
group_buy_options: "Group Buy Options"
back_to_products_list: "Back to products list"
@@ -642,6 +651,8 @@ en_CA:
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
link_to_front: Link to shop front
link_to_front_tip: A direct link to your shopfront on the Open Food Network.
ofn_uid: OFN UID
ofn_uid_tip: The unique id used to identify the enterprise on Open Food Network
shipping_methods:
name: Name
applies: Applies?
@@ -671,6 +682,8 @@ en_CA:
shopfront_message_placeholder: >
An optional explanation for customers detailing how your shopfront works,
to be displayed above the product list on your shop page.
shopfront_message_link_tooltip: "Insert/edit link"
shopfront_message_link_prompt: "Please enter a URL to insert"
shopfront_closed_message: "Shopfront Closed Message"
shopfront_closed_message_placeholder: >
A message which provides a more detailed explanation about why your
@@ -800,6 +813,9 @@ en_CA:
user_already_exists: "User already exists"
error: "Something went wrong"
order_cycles:
loading_flash:
loading_order_cycles: LOADING ORDER CYCLES
loading: LOADING....
edit:
advanced_settings: Advanced Settings
update_and_close: Update and Close
@@ -808,7 +824,7 @@ en_CA:
pickup_time_tip: When orders from this OC will be ready for the customer
pickup_instructions_placeholder: "Pick-up instructions"
pickup_instructions_tip: These instructions are shown to customers after they complete an order
pickup_time_placeholder: "Ready for (ie. Date / Time)"
pickup_time_placeholder: "Ready for (ie. Date/Time)"
receival_instructions_placeholder: "Receival instructions"
add_fee: 'Add fee'
remove: 'Remove'
@@ -818,6 +834,7 @@ en_CA:
add_distributor: 'Add distributor'
advanced_settings:
title: Advanced Settings
choose_product_tip: You can restrict products incoming and outgoing to only%{inventory}'s inventory.
preferred_product_selection_from_coordinator_inventory_only_here: Coordinator's Inventory Only
preferred_product_selection_from_coordinator_inventory_only_all: All Available Products
save_reload: Save and Reload Page
@@ -953,6 +970,8 @@ en_CA:
pause_subscription: Pause Subscription
unpause_subscription: Unpause Subscription
cancel_subscription: Cancel Subscription
filters:
query_placeholder: "Search by email..."
setup_explanation:
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
@@ -985,6 +1004,8 @@ en_CA:
charges_not_allowed: Charges are not allowed by this customer
no_default_card: Customer has no cards available to charge
card_ok: Customer has a card available to charge
begins_at_placeholder: "Select a Date"
ends_at_placeholder: "Optional"
loading_flash:
loading: LOADING SUBSCRIPTIONS
review:
@@ -1042,8 +1063,12 @@ en_CA:
show_on_map: "Show all on the map"
shared:
menu:
cart:
cart: "Cart"
signed_in:
profile: "Profile"
mobile_menu:
cart: "Cart"
joyride:
checkout: "Checkout now"
already_ordered_products: "Already ordered in this order cycle"
@@ -1080,7 +1105,11 @@ en_CA:
shop:
messages:
login: "login"
signup: "signup"
contact: "contact"
require_customer_login: "Only approved customers can access this shop"
require_login_html: "If you're already an approved customer, %{login} or %{signup}to proceed. Want to start shopping here? Please %{contact} %{enterprise} and ask about joining."
require_customer_html: "If you'd like to start shopping here, please %{contact}%{enterprise} to ask about joining."
card_could_not_be_updated: Card could not be updated
card_could_not_be_saved: card could not be saved
spree_gateway_error_flash_for_checkout: "There was a problem with your payment information: %{error}"
@@ -1117,6 +1146,7 @@ en_CA:
menu_4_title: "Groups"
menu_4_url: "/groups"
menu_5_title: "About"
menu_5_url: "https://about.openfoodnetwork.org.au/"
menu_6_title: "Connect"
menu_6_url: "https://openfoodnetwork.org/au/connect/"
menu_7_title: "Learn"
@@ -1150,7 +1180,7 @@ en_CA:
city_placeholder: eg. Northcote
postcode: Postal Code
postcode_placeholder: eg. 3070
suburb: Suburb
suburb: City
state: Province
country: Country
unauthorized: Unauthorized
@@ -1552,6 +1582,7 @@ en_CA:
sell_hubs_detail: "Set up a profile for your food enterprise or organisation on the OFN. At any time you can upgrade your profile to a multi-producer shop."
sell_groups_detail: "Set up a tailored directory of enterprises (producers and other food enterprises) for your region or for your organisation."
sell_user_guide: "Find out more in our user guide."
sell_listing_price: "Listing on the OFN is free. Opening and running a shop on OFN is free up to $500 of monthly sales. If you sell more we will invoice you for 2% of sales to a maximum of $100/month. For more detail on pricing visit the Software Platform section via the About link in the top menu."
sell_embed: "We can also embed an OFN shop in your own customised website or build a customised local food network website for your region."
sell_ask_services: "Ask us about OFN services."
shops_title: Shops
@@ -1667,6 +1698,7 @@ en_CA:
introduction:
registration_greeting: "Hi there!"
registration_intro: "You can now create a profile for your Producer or Hub"
registration_checklist: "What do I need?"
registration_time: "5-10 minutes"
registration_enterprise_address: "Enterprise address"
registration_contact_details: "Primary contact details"
@@ -1921,6 +1953,7 @@ en_CA:
spree_admin_supplier: Supplier
spree_admin_product_category: Product Category
spree_admin_variant_unit_name: Variant unit name
unit_name: "Unit Name"
change_package: "Change Package"
spree_admin_single_enterprise_hint: "Hint: To allow people to find you, turn on your visibility under"
spree_admin_eg_pickup_from_school: "eg. 'Pick-up from Primary School'"
@@ -2156,6 +2189,7 @@ en_CA:
payment_methods: "Payment Methods"
payment_method_fee: "Transaction fee"
payment_processing_failed: "Payment could not be processed, please check the details you entered."
payment_method_not_supported: "That payment method is unsupported. Please choose another one."
payment_updated: "Payment Updated"
inventory_settings: "Inventory Settings"
tag_rules: "Tag Rules"
@@ -2346,8 +2380,20 @@ en_CA:
severity: Severity
description: Description
resolve: Resolve
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
payment_method_tagged_top: "Payment methods tagged"
payment_method_tagged_bottom: "are:"
order_cycle_tagged_top: " Order Cycles tagged"
order_cycle_tagged_bottom: "are:"
inventory_tagged_top: "Inventory variants tagged"
inventory_tagged_bottom: "are:"
new_tag_rule_dialog:
select_rule_type: "Select a rule type:"
add_rule: "Add Rule"
enterprise_fees:
inherit_from_product: "Inherit From Product"
orders:
index:
per_page: "%{results} per page"
@@ -2408,6 +2454,7 @@ en_CA:
name_required_error: "Please enter a name for this schedule"
no_order_cycles_error: "Please select at least one order cycle (drag and drop)"
available: "Available"
selected: "Selected"
customers:
index:
add_customer: "Add Customer"
@@ -2601,6 +2648,7 @@ en_CA:
fill_in_customer_info: "Please fill in customer info"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2702,7 +2750,16 @@ en_CA:
no_results: "No results"
create: "Create"
loading: "Loading"
flat_percent: "Flat Percent"
per_kg: "Per Kg"
amount: "Amount"
currency: "Currency"
first_item: "First Item Cost"
additional_item: "Additional Item Cost"
max_items: "Max Items"
minimal_amount: "Minimal Amount"
normal_amount: "Normal Amount"
discount_amount: "Discount Amount"
email: Email
account_updated: "Account updated!"
my_account: "My account"
@@ -2779,6 +2836,8 @@ en_CA:
title: "Distribution"
distributor: "Distributor:"
order_cycle: "Order cycle:"
line_item_adjustments: "Line Item Adjustments"
order_adjustments: "Order Adjustments"
order_total: "Order Total"
overview:
enterprises_header:
@@ -2799,15 +2858,27 @@ en_CA:
shipping_methods:
index:
shipping_methods: "Shipping Methods"
new_shipping_method: "No Shipping Method"
name: "Name"
products_distributor: "Distributor"
zone: "Zone"
calculator: "Calculator"
display: "Display"
both: "Both"
front_end: "Front End"
back_end: "Back End"
no_shipping_methods_found: "No shipping methods found"
new:
new_shipping_method: "New Shipping Method"
back_to_shipping_methods_list: "Back to Shipping Methods List"
edit:
new: "New"
back_to_shipping_methods_list: "Back to Shipping Methods List"
form:
zones: "Zones"
both: "Both"
front_end: "Front End"
back_end: "Back End"
payment_methods:
new:
new_payment_method: "New Payment Method"

View File

@@ -316,9 +316,9 @@ en_US:
enable_products_cache: "Enable Products Cache?"
invoice_settings:
edit:
title: Invoice Settings
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
title: "Invoice Settings"
invoice_style2?: "Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)"
enable_receipt_printing?: "Show options for printing receipts using thermal printers in order dropdown?"
stripe_connect_settings:
edit:
title: "Stripe Connect"

View File

@@ -322,9 +322,10 @@ en_ZA:
enable_products_cache: "Enable Products Cache?"
invoice_settings:
edit:
title: Invoice Settings
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
title: "Invoice Settings"
enable_invoices?: "Enable Invoices?"
invoice_style2?: "Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)"
enable_receipt_printing?: "Show options for printing receipts using thermal printers in order dropdown?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -833,6 +834,7 @@ en_ZA:
add_distributor: 'Add distributor'
advanced_settings:
title: Advanced Settings
choose_product_tip: You can restrict products incoming and outgoing to only %{inventory}'s inventory.
preferred_product_selection_from_coordinator_inventory_only_here: Coordinator's Inventory Only
preferred_product_selection_from_coordinator_inventory_only_all: All Available Products
save_reload: Save and Reload Page
@@ -1696,6 +1698,7 @@ en_ZA:
introduction:
registration_greeting: "Hi there!"
registration_intro: "You can now create a profile for your Producer or Hub"
registration_checklist: "What do I need?"
registration_time: "5-10 minutes"
registration_enterprise_address: "Enterprise address"
registration_contact_details: "Primary contact details"

View File

@@ -322,9 +322,10 @@ es:
enable_products_cache: "¿Habilitar caché de productos?"
invoice_settings:
edit:
title: Configuración de Factura
invoice_style2?: Utiliza el modelo de factura alternativo que incluye el desglose fiscal total por tipo de interés y tasa de impuestos por artículo (todavía no es adecuado para países que muestran los precios sin impuestos)
enable_receipt_printing?: ¿Mostrar opciones para imprimir recibos usando impresoras térmicas en el desplegable del pedido?
title: "Configuración de Factura"
enable_invoices?: "Habilitar facturas?"
invoice_style2?: "Utiliza el modelo de factura alternativo que incluye el desglose fiscal total por tipo de interés y tasa de impuestos por artículo (todavía no es adecuado para países que muestran los precios sin impuestos)"
enable_receipt_printing?: "¿Mostrar opciones para imprimir recibos usando impresoras térmicas en el desplegable del pedido?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -651,6 +652,8 @@ es:
permalink_tip: "Se usa para crear la URL de tu tienda: %{link}nombre-de-tu-tienda/shop"
link_to_front: Link a la tienda
link_to_front_tip: Enlace directo a tu tienda en Open Food Networks
ofn_uid: UID de OFN
ofn_uid_tip: La identificación única utilizada para identificar la organización en Open Food Network.
shipping_methods:
name: Nombre
applies: ¿Aplicar?
@@ -833,6 +836,7 @@ es:
add_distributor: 'Añadir distribuidora'
advanced_settings:
title: Configuración Avanzada
choose_product_tip: Puede restringir los productos entrantes y salientes a solo el inventario de %{inventory}.
preferred_product_selection_from_coordinator_inventory_only_here: Solo el Inventario de la Coordinadora
preferred_product_selection_from_coordinator_inventory_only_all: Todos los productos disponibles
save_reload: Guardar y recargar la página
@@ -1696,6 +1700,7 @@ es:
introduction:
registration_greeting: "¡Hola!"
registration_intro: "Ahora puedes crear un perfil para tu Productora o Grupo de Consumo"
registration_checklist: "¿Qué necesito?"
registration_time: "5-10 minutos"
registration_enterprise_address: "Dirección de la organización"
registration_contact_details: "Detalles de contacto principal"

View File

@@ -322,9 +322,10 @@ fr:
enable_products_cache: "Autoriser Cache Produits ?"
invoice_settings:
edit:
title: Paramètres de facturation
invoice_style2?: Utiliser le modèle de facture alternatif qui détaille le montant de TVA agrégé par taux et l'information du taux de TVA par produit (pas adapté pour les instances affichant les prix HT)
enable_receipt_printing?: Afficher les options d'impression de tickets de caisse dans le menu déroulant des commandes?
title: "Paramètres de facturation"
enable_invoices?: "Autoriser l'émission de factures ?"
invoice_style2?: "Utiliser le modèle de facture alternatif qui détaille le montant de TVA agrégé par taux et l'information du taux de TVA par produit (pas adapté pour les instances affichant les prix HT)"
enable_receipt_printing?: "Afficher les options d'impression de tickets de caisse dans le menu déroulant des commandes?"
stripe_connect_settings:
edit:
title: "Stripe Connect"

View File

@@ -14,7 +14,9 @@ fr_BE:
spree/product:
primary_taxon: "Catégorie Produit"
supplier: "Fournisseur"
shipping_category_id: "Catégorie d'expédition"
variant_unit: "Unité"
variant_unit_name: "Nom de la variante"
order_cycle:
orders_close_at: Date de fermeture
errors:
@@ -75,6 +77,8 @@ fr_BE:
user_confirmations:
spree_user:
send_instructions: "Un email a été envoyé avec des instructions pour confirmer votre adresse email. Vérifiez votre boite mail!"
confirmation_sent: "Email de confirmation envoyé"
confirmation_not_sent: "Erreur d'envoi du courrier électronique de confirmation"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Un message avec un lien de confirmation a été envoyé à l'adresse email indiquée. Veuillez cliquer sur ce lien pour activer votre compte."
@@ -85,6 +89,8 @@ fr_BE:
Créez votre compte ou réinitialisez votre mot de passe.
unconfirmed: "Veuillez valider le lien envoyé par email pour pouvoir continuer."
already_registered: "Cet email est déjà associé à un utilisateur et a déjà été validé. Veuillez vous connecter pour continuer, ou utiliser un autre email."
success:
logged_in_succesfully: "Connecté avec succès"
user_passwords:
spree_user:
updated_not_active: "Votre mot de passe a bien été réinitialisé, mais votre email n'a pas encore été confirmé."
@@ -316,9 +322,10 @@ fr_BE:
enable_products_cache: "Permettre des produits en approvisionnement? "
invoice_settings:
edit:
title: Paramètres de facturation
invoice_style2?: Utiliser le modèle de facture alternatif qui détaille le montant de TVA agrégé par taux et l'information du taux de TVA par produit (pas adapté pour les instances affichant les prix HT)
enable_receipt_printing?: Afficher les options d'impression de tickets de caisse dans le menu déroulant des commandes?
title: "Paramètres de facturation"
enable_invoices?: "Activer les factures?"
invoice_style2?: "Utiliser le modèle de facture alternatif qui détaille le montant de TVA agrégé par taux et l'information du taux de TVA par produit (pas adapté pour les instances affichant les prix HT)"
enable_receipt_printing?: "Afficher les options d'impression de tickets de caisse dans le menu déroulant des commandes?"
stripe_connect_settings:
edit:
title: "connexion Stripe"
@@ -385,6 +392,7 @@ fr_BE:
calculator: "Calculateur"
calculator_values: "Montants pour calculs"
search: "Rechercher"
name_placeholder: "par exemple. frais d'emballage"
enterprise_groups:
index:
new_button: Nouveau groupe d'entreprises
@@ -644,6 +652,8 @@ fr_BE:
permalink_tip: "Ce nom permanent est utilisé pour créer l'url de votre comptoir: %{link}ma-boutique/shop"
link_to_front: Lien URL du comptoir
link_to_front_tip: C'est le lien qui permet d'accéder en direct à votre comptoir sur Open Food Network.
ofn_uid: OFN UID
ofn_uid_tip: L'identifiant unique utilisé pour identifier l'entreprise sur Open Food Network.
shipping_methods:
name: Nom
applies: Active?
@@ -825,6 +835,7 @@ fr_BE:
add_distributor: 'Ajouter un distributeur'
advanced_settings:
title: Paramétrages avancés
choose_product_tip: Vous pouvez limiter les produits entrants et sortants à l'inventaire uniquement%{inventory}.
preferred_product_selection_from_coordinator_inventory_only_here: Uniquement les produits du catalogue magasin
preferred_product_selection_from_coordinator_inventory_only_all: Tous les produits disponibles dans les catalogues producteurs
save_reload: Sauvegarder et rafraichir la page
@@ -960,6 +971,8 @@ fr_BE:
pause_subscription: Mettre en pause Abonnement
unpause_subscription: Reprendre Abonnement
cancel_subscription: Annuler Abonnement
filters:
query_placeholder: "Recherche par email ..."
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 comptoirs"
@@ -992,6 +1005,8 @@ fr_BE:
charges_not_allowed: Le débit automatique n'a pas été autorisé par cet acheteur
no_default_card: L'acheteur n'a pas de carte de paiement disponible pour le débit
card_ok: L'acheteur a une carte de paiement disponible pour le débit
begins_at_placeholder: "Sélectionnez une date"
ends_at_placeholder: "Optionnel"
loading_flash:
loading: Abonnements en cours de chargement
review:
@@ -1049,8 +1064,12 @@ fr_BE:
show_on_map: "Tout afficher sur la carte"
shared:
menu:
cart:
cart: "Cart"
signed_in:
profile: "Profil"
mobile_menu:
cart: "Cart"
joyride:
checkout: "Passer la commande"
already_ordered_products: "Déjà commandé dans ce cycle de vente"
@@ -1087,7 +1106,11 @@ fr_BE:
shop:
messages:
login: "Se connecter"
signup: "s'inscrire"
contact: "contacter"
require_customer_login: "Seuls les clients approuvés peuvent accéder à ce comptoir."
require_login_html: "Si vous êtes déjà un client approuvé, %{login}ou %{signup}si vous souhaitez continuer. Voulez-vous commencer à faire vos courses ici? S'il vous plaît %{contact}%{enterprise}et demandez à rejoindre."
require_customer_html: "Si vous souhaitez commencer à magasiner ici, veuillez %{contact}%{enterprise}demander si vous souhaitez vous inscrire."
card_could_not_be_updated: La carte bancaire n'a pas pu être mise à jour
card_could_not_be_saved: la carte n'a pas pu être sauvegardée
spree_gateway_error_flash_for_checkout: "Il y a eu un problème avec vos informations de paiement : %{error}"
@@ -1124,6 +1147,7 @@ fr_BE:
menu_4_title: "Groupes"
menu_4_url: "/groups"
menu_5_title: "A propos"
menu_5_url: "https://about.openfoodnetwork.org.au/"
menu_6_title: "Blog"
menu_6_url: "https://apropos.openfoodfrance.org/blog/"
menu_7_title: "Support"
@@ -1535,7 +1559,7 @@ fr_BE:
producers_signup_headline: Des producteurs, autonomes
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: Profil Producteur-trice-s
producers_signup_enterprise: Profil Producteurtrices
producers_signup_studies: Témoignages de nos producteurs.
producers_signup_cta_headline: Rejoindre le réseau!
producers_signup_cta_action: Rejoindre le réseau
@@ -1559,6 +1583,7 @@ fr_BE:
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: "L'inscription à l'OFN est libre de contribution. Ouvrir et utiliser un comptoir sur OFN vous permet de gagner jusqu'à 500 $ de ventes mensuelles. Si vous vendez plus, vous pouvez choisir votre contribution communautaire entre 1% et 3% des ventes. Pour plus de détails sur les prix, visitez la section Plateforme logicielle via le lien \"À propos\" de dans le menu supérieur."
sell_embed: "Dici là, vous pouvez également participer au projet. Soit en co-créant la communauté belge, en contribuant à lamélioration des fonctionnalités…  Soit en mettant à disposition : un local pour la démonstration de loutil ou un point relais pour faciliter les livraisons… Soit en le finançant BE41 0682 2264 2410 com: Open Food Network"
sell_ask_services: "Nous consulter sur les services des partenaires OFN."
shops_title: Comptoirs
@@ -1674,6 +1699,7 @@ fr_BE:
introduction:
registration_greeting: "Bonjour!"
registration_intro: "Vous pouvez maintenant créer votre profil \"Producteur\" ou \"Comptoir\""
registration_checklist: "De quoi ai-je besoin?"
registration_time: "5-10 minutes"
registration_enterprise_address: "L'adresse de l'entreprise"
registration_contact_details: "Les détails du contact référent"
@@ -1928,6 +1954,7 @@ fr_BE:
spree_admin_supplier: Fournisseur
spree_admin_product_category: Catégorie Produit
spree_admin_variant_unit_name: Nom de la pièce (si vendu à la pièce)
unit_name: "Nom de l'unité"
change_package: "Changer de type de compte"
spree_admin_single_enterprise_hint: "Astuce: Pour permettre aux gens de vous trouver, activez votre visibilité "
spree_admin_eg_pickup_from_school: "ex : \"Retrait des produits à l'Ecole Marimati / Au Café du coin / chez Babette / ...\""
@@ -2163,6 +2190,7 @@ fr_BE:
payment_methods: "Méthodes de paiement"
payment_method_fee: "Frais de transaction"
payment_processing_failed: "Le paiement n' a pu être effectué , merci de vérifier les données rentrées"
payment_method_not_supported: "Ce mode de paiement n'est pas possible. Veuillez en choisir un autre."
payment_updated: "Paiement mis à jour "
inventory_settings: "Catalogue boutique"
tag_rules: "Règles de tag"
@@ -2365,8 +2393,18 @@ fr_BE:
severity: Rigueur
description: Description
resolve: Résoudre
tag_rules:
shipping_method_tagged_top: "Méthodes d'expédition étiquetées"
shipping_method_tagged_bottom: "sont:"
payment_method_tagged_top: "Modes de paiement marqués"
payment_method_tagged_bottom: "sont:"
order_cycle_tagged_top: "Cycles de commande marqués"
order_cycle_tagged_bottom: "sont:"
inventory_tagged_top: "Variantes d'inventaire marquées"
inventory_tagged_bottom: "sont:"
new_tag_rule_dialog:
select_rule_type: "Choisir le type de règle:"
add_rule: "Ajouter une règle"
enterprise_fees:
inherit_from_product: "Hériter du produit"
orders:
@@ -2515,7 +2553,7 @@ fr_BE:
action_login: "Se connecter."
producers:
signup:
start_free_profile: "Commencez par créer votre profil entreprise, et changez de formule quand vous êtes prêt !"
start_free_profile: "Commencez par créer votre profil entreprise, et présentez votre formule quand vous êtes prêt !"
order_management:
reports:
enterprise_fee_summary:
@@ -2624,6 +2662,7 @@ fr_BE:
fill_in_customer_info: "Merci de remplir les informations client"
new_payment: "Nouveau paiement"
capture: "Payée"
void: "Vide"
configurations: "Configurations"
general_settings: "Réglages Généraux"
site_name: "Nom du site"
@@ -2725,7 +2764,16 @@ fr_BE:
no_results: "Aucun résultat"
create: "Créer"
loading: "Chargement en cours"
flat_percent: "Pourcentage plat"
per_kg: "Par kg"
amount: "Quantité"
currency: "Devise"
first_item: "Coût du premier article "
additional_item: "Coût d'objet supplémentaire"
max_items: "Articles maximum"
minimal_amount: "Montant minimal"
normal_amount: "Montant normal"
discount_amount: "Montant de la remise"
email: Email
account_updated: "Compte mis à jour!"
my_account: "Mon compte"
@@ -2824,16 +2872,29 @@ fr_BE:
shipping_methods:
index:
shipping_methods: "Méthodes de livraison"
new_shipping_method: "Nouvelle méthode de livraison"
name: "Nom"
products_distributor: "Distributeur"
zone: "Zone"
calculator: "Calculateur"
display: "Ecran"
both: "Tous les deux"
front_end: "L'extrémité avant"
back_end: "Back End"
no_shipping_methods_found: "Aucune méthode de livraison trouvée"
new:
new_shipping_method: "Nouvelle méthode de livraison"
back_to_shipping_methods_list: "Retour à la liste des méthodes de livraison"
edit:
editing_shipping_method: "Éditer une méthode de livraison"
new: "Nouveau"
back_to_shipping_methods_list: "Retour à la liste des méthodes de livraison"
form:
categories: "Les catégories"
zones: "Zones"
both: "Tous les deux"
front_end: "L'extrémité avant"
back_end: "Back End"
payment_methods:
new:
new_payment_method: "Nouvelle méthode de paiement"
@@ -2860,6 +2921,7 @@ fr_BE:
error_saving_payment: Erreur à l'enregistrement du paiement
submitting_payment: Envoi du paiement...
products:
image_upload_error: "L'image du produit n'a pas été reconnue. Veuillez télécharger une image au format PNG ou JPG."
new:
title: 'Nouveau Produit'
unit_name_placeholder: 'ex: botte'

View File

@@ -317,9 +317,9 @@ fr_CA:
enable_products_cache: "Autoriser Cache Produits ?"
invoice_settings:
edit:
title: Paramètres de facturation
invoice_style2?: Utiliser le modèle de facture alternatif qui détaille le montant de Taxe agrégé par taux et l'information du taux de taxe par produit (pas adapté pour les instances affichant les prix HT)
enable_receipt_printing?: Afficher les options d'impression de tickets de caisse dans le menu déroulant des commandes?
title: "Paramètres de facturation"
invoice_style2?: "Utiliser le modèle de facture alternatif qui détaille le montant de Taxe agrégé par taux et l'information du taux de taxe par produit (pas adapté pour les instances affichant les prix HT)"
enable_receipt_printing?: "Afficher les options d'impression de tickets de caisse dans le menu déroulant des commandes?"
stripe_connect_settings:
edit:
title: "Stripe Connect"

View File

@@ -316,9 +316,9 @@ it:
enable_products_cache: "Abilita la cache dei prodotti?"
invoice_settings:
edit:
title: Impostazioni fatturazione
invoice_style2?: Utilizzare il modello di fattura alternativa che include la ripartizione totale delle imposte per tariffa e le informazioni sulla tariffa fiscale per articolo (non ancora adatto per i paesi che visualizzano i prezzi al netto delle imposte)
enable_receipt_printing?: Visualizzo le opzioni per stampare la ricevuta usando la stampante termica nel menù a cascata?
title: "Impostazioni fatturazione"
invoice_style2?: "Utilizzare il modello di fattura alternativa che include la ripartizione totale delle imposte per tariffa e le informazioni sulla tariffa fiscale per articolo (non ancora adatto per i paesi che visualizzano i prezzi al netto delle imposte)"
enable_receipt_printing?: "Visualizzo le opzioni per stampare la ricevuta usando la stampante termica nel menù a cascata?"
stripe_connect_settings:
edit:
title: "Stripe Connect"

View File

@@ -316,9 +316,9 @@ nb:
enable_products_cache: "Aktiver Mellomlagring for Produkter?"
invoice_settings:
edit:
title: Fakturainnstillinger
invoice_style2?: Bruk den alternative fakturamodellen som inkluderer total avgiftsoppdeling pr rate og avgiftsrateinfo pr vare (passer ikke for land som viser priser ekskludert avgift)
enable_receipt_printing?: 'Vis valg for utskrift av kvitteringer ved bruk av kvitteringsprinter i nedtrekksmeny for bestillinger? '
title: "Fakturainnstillinger"
invoice_style2?: "Bruk den alternative fakturamodellen som inkluderer total avgiftsoppdeling pr rate og avgiftsrateinfo pr vare (passer ikke for land som viser priser ekskludert avgift)"
enable_receipt_printing?: "Vis valg for utskrift av kvitteringer ved bruk av kvitteringsprinter i nedtrekksmeny for bestillinger? "
stripe_connect_settings:
edit:
title: "Stripe Connect"

View File

@@ -14,7 +14,9 @@ nl_BE:
spree/product:
primary_taxon: "Product categorie"
supplier: "Leverancier"
shipping_category_id: "Verzendcategorie"
variant_unit: "Eénheid"
variant_unit_name: "Variant Unit Name"
order_cycle:
orders_close_at: Sluitingsdatum
errors:
@@ -75,6 +77,8 @@ nl_BE:
user_confirmations:
spree_user:
send_instructions: "U ontvangt een e-mail met instructies over hoe u uw account binnen enkele minuten kunt bevestigen."
confirmation_sent: "E-mailbevestiging verzonden"
confirmation_not_sent: "Fout bij verzenden bevestigingsmail"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Er is een bericht met een bevestigingslink naar uw e-mailadres gestuurd. Open de link om uw account te activeren."
@@ -85,6 +89,8 @@ nl_BE:
Bent u de laatste keer gast geweest? Misschien moet u een account aanmaken of uw wachtwoord opnieuw instellen.
unconfirmed: "U moet uw account bevestigen voordat u verdergaat."
already_registered: "Dit e-mailadres is al geregistreerd. Log in om verder te gaan, of ga terug en gebruik een ander e-mailadres."
success:
logged_in_succesfully: "succesvol ingelogd"
user_passwords:
spree_user:
updated_not_active: "Uw wachtwoord is gereset, maar uw e-mail is nog niet bevestigd."
@@ -316,9 +322,10 @@ nl_BE:
enable_products_cache: "Produkten in voorraad toelaten? "
invoice_settings:
edit:
title: Factuur instellingen
invoice_style2?: Gebruik het alternatieve factuurmodel dat de totale belastingsuitsplitsing per tarief en belastingtariefinformatie per artikel bevat (nog niet geschikt voor landen met prijzen exclusief belastingen).
enable_receipt_printing?: Toon opties voor het afdrukken van kassabonnen met behulp van thermische printers in de volgorde dropdown?
title: "Factuur instellingen"
enable_invoices?: "Facturen inschakelen?"
invoice_style2?: "Gebruik het alternatieve factuurmodel dat de totale belastingsuitsplitsing per tarief en belastingtariefinformatie per artikel bevat (nog niet geschikt voor landen met prijzen exclusief belastingen)."
enable_receipt_printing?: "Toon opties voor het afdrukken van kassabonnen met behulp van thermische printers in de volgorde dropdown?"
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -385,6 +392,7 @@ nl_BE:
calculator: "Rekenmachine"
calculator_values: "Rekenmachine Waarden"
search: "Zoeken"
name_placeholder: "bijv. verpakkingskosten"
enterprise_groups:
index:
new_button: Nieuwe Ondernemingsgroep
@@ -646,6 +654,8 @@ nl_BE:
permalink_tip: "Deze permalink wordt gebruikt om de url te gebruiken in jouw winkel: %{link} jouw-winkel-naam/winkel"
link_to_front: Link naar je etalage
link_to_front_tip: Een directe link naar je etalage op het Open Food Network.
ofn_uid: OFN UID
ofn_uid_tip: Het unieke ID dat wordt gebruikt om de onderneming in Open Food Network te identificeren.
shipping_methods:
name: Naam
applies: Van toepassing?
@@ -827,6 +837,7 @@ nl_BE:
add_distributor: 'Voeg verdeler toe'
advanced_settings:
title: Geavanceerde Instellingen
choose_product_tip: U kunt inkomende en uitgaande producten beperken tot alleen de%{inventory} voorraad.
preferred_product_selection_from_coordinator_inventory_only_here: 'Enkel Coördinator Inventaris '
preferred_product_selection_from_coordinator_inventory_only_all: Alle Beschikbare Producten
save_reload: Bewaar en Herlaad Webpagina
@@ -962,6 +973,8 @@ nl_BE:
pause_subscription: Pauze Abonnement
unpause_subscription: Abonnement Opzeggen
cancel_subscription: Abonnement Opzeggen
filters:
query_placeholder: "Zoeken per e-mail ..."
setup_explanation:
just_a_few_more_steps: 'Nog een paar stappen voordat u kunt beginnen:'
enable_subscriptions: "Inschrijven voor minstens één van uw winkels mogelijk maken"
@@ -994,6 +1007,8 @@ nl_BE:
charges_not_allowed: Kredietkaartskosten zijn niet toegestaan door deze klant
no_default_card: De klant heeft geen kredietkaart beschikbaar om te verrekenen
card_ok: De klant heeft een kredietkaart beschikbaar om te verrekenen
begins_at_placeholder: "Selecteer een datum"
ends_at_placeholder: "Facultatief"
loading_flash:
loading: ABONNEMENTEN WORDEN GELADEN
review:
@@ -1051,8 +1066,12 @@ nl_BE:
show_on_map: "Toon alles op de kaart"
shared:
menu:
cart:
cart: "kar"
signed_in:
profile: "Profiel"
mobile_menu:
cart: "kar"
joyride:
checkout: "Naar de kassa"
already_ordered_products: "Reeds besteld in de huidige bestelcyclus"
@@ -1089,7 +1108,11 @@ nl_BE:
shop:
messages:
login: "login"
signup: "inschrijven"
contact: "contact"
require_customer_login: "Alleen goedgekeurde klanten hebben toegang tot deze winkel. "
require_login_html: "Als u al een goedgekeurde klant bent %{login} of %{signup} wilt doorgaan. Wil je hier beginnen met winkelen? Alstublieft %{contact}en%{enterprise} vragen over meedoen."
require_customer_html: "Als u hier wilt beginnen met winkelen, kunt u vragen of %{contact}%{enterprise}u lid wilt worden."
card_could_not_be_updated: De bankkaart kon niet worden geüpdatet.
card_could_not_be_saved: De bankkaart kon niet worden bewaard.
spree_gateway_error_flash_for_checkout: "Er was een probleem met betaalinformatie: %{error}"
@@ -1126,6 +1149,7 @@ nl_BE:
menu_4_title: "Groepen"
menu_4_url: "/groups"
menu_5_title: "Over"
menu_5_url: "https://about.openfoodnetwork.org.au/"
menu_6_title: "Connecteer je "
menu_6_url: "https://openfoodnetwork.org/au/connect/"
menu_7_title: "Ontdek"
@@ -1561,6 +1585,7 @@ nl_BE:
sell_hubs_detail: "Maak een profiel voor je voedselonderneming of organisatie aan op het OFN. Op om het even welk moment kan je je profiel opwaarderen naar multi-producentenwinkel."
sell_groups_detail: "Maak een op maat gemaakt pad van ondernemingen (producent en andere voedselondernemingen) voor je regio of voor jouw organisatie."
sell_user_guide: "Kom kom meer te weten in onze gebruikershandleiding."
sell_listing_price: "Vermelding op de OFN is gratis. Het openen en runnen van een winkel op OFN is gratis tot €500 maandelijkse verkoop. Als u meer verkoopt, kunt u uw communitybijdrage kiezen tussen 1% en 3% van de omzet. Ga voor meer informatie over prijzen naar het gedeelte Softwareplatform via de koppeling Over in het hoofdmenu."
sell_embed: "We kunnen ook een OFNwinkel in aan je persoonlijke noden aangepaste website of een speciaal aangepast lokaal voedselnetwerkwebsite bouwen voor jouw regio bouwen."
sell_ask_services: "Vraag ons over de OFN diensten."
shops_title: Winkels
@@ -1676,6 +1701,7 @@ nl_BE:
introduction:
registration_greeting: "Hallo daar!"
registration_intro: "Je kan nu een nieuw profiel creëren voor jouw Producent of Hub"
registration_checklist: "Wat heb ik nodig?"
registration_time: "5-10 minuten "
registration_enterprise_address: "Adres bedrijf"
registration_contact_details: "Hoofdcontactpersoon gegevens"
@@ -1930,6 +1956,7 @@ nl_BE:
spree_admin_supplier: Leverancier
spree_admin_product_category: Product categorie
spree_admin_variant_unit_name: Naam van het stuk (indien per stuk verkocht)
unit_name: "Unit naam"
change_package: "Wijzig je Packet"
spree_admin_single_enterprise_hint: "Hint: Om het voor mensen mogelijk te maken je te vinden, zet je zichtbaarheid aan"
spree_admin_eg_pickup_from_school: "bv. 'Ophaling op een basisschool'"
@@ -2165,6 +2192,7 @@ nl_BE:
payment_methods: "Betaalmethodes"
payment_method_fee: "Transactiekosten (excl.BTW)"
payment_processing_failed: "De betaling is niet succesvol, gelieve de ingevoerde gegevens na te kijken"
payment_method_not_supported: "Die betaalmethode wordt niet ondersteund. Kies alstublieft een andere."
payment_updated: "Betaling is bijgewerkt"
inventory_settings: "Catalogus winkel"
tag_rules: "Tagregels"
@@ -2361,8 +2389,18 @@ nl_BE:
severity: Strengheid
description: Beschrijving
resolve: Oplossen
tag_rules:
shipping_method_tagged_top: "Verzendmethoden getagd"
shipping_method_tagged_bottom: "zijn:"
payment_method_tagged_top: "Betaalmethoden getagged"
payment_method_tagged_bottom: "zijn:"
order_cycle_tagged_top: "Bestel Cycles getagd"
order_cycle_tagged_bottom: "zijn:"
inventory_tagged_top: "Inventarisatievarianten getagd"
inventory_tagged_bottom: "zijn:"
new_tag_rule_dialog:
select_rule_type: "Selecteer een regel : "
add_rule: "Regel toevoegen"
enterprise_fees:
inherit_from_product: "Overnemen van product"
orders:
@@ -2619,6 +2657,7 @@ nl_BE:
fill_in_customer_info: "Gelieve informatie over klant in te vullen"
new_payment: "Nieuwe betaling"
capture: "Capture"
void: "leegte"
configurations: "configuraties "
general_settings: "Algemene instellingen"
site_name: "Website Naam"
@@ -2720,7 +2759,16 @@ nl_BE:
no_results: "Geen resultaten "
create: "Maak"
loading: "Aan het opladen"
flat_percent: "Flat Percent"
per_kg: "Per Kg"
amount: "Bedrag"
currency: "Valuta"
first_item: "Kosten eerste item"
additional_item: "Bijkomende artikelkosten"
max_items: "Max"
minimal_amount: "Minimaal bedrag"
normal_amount: "Normaal bedrag"
discount_amount: "Korting hoeveelheid"
email: Email
account_updated: "Rekening reset !"
my_account: "Mijn rekening"
@@ -2819,16 +2867,29 @@ nl_BE:
shipping_methods:
index:
shipping_methods: "Methode Verzending"
new_shipping_method: "New Shipping Method"
name: "Naam"
products_distributor: "Distributeur"
zone: "Zone"
calculator: "Rekenmachine"
display: "Display"
both: "Beide"
front_end: "Voorkant"
back_end: "Back End"
no_shipping_methods_found: "Geen verzendmethoden gevonden"
new:
new_shipping_method: "New Shipping Method"
back_to_shipping_methods_list: "Terug naar Verzendmethodenlijst"
edit:
editing_shipping_method: "Verzendmethode bewerken"
new: "Nieuw"
back_to_shipping_methods_list: "Terug naar Verzendmethodenlijst"
form:
categories: "Categorieën"
zones: "Zones "
both: "Beide"
front_end: "Voorkant"
back_end: "Back End"
payment_methods:
new:
new_payment_method: "Nieuwe betalingswijze"
@@ -2855,6 +2916,7 @@ nl_BE:
error_saving_payment: Fout bij het opladen van de betaling
submitting_payment: 'Het doorsturen van de betaling '
products:
image_upload_error: "Het productbeeld werd niet herkend. Upload een afbeelding in PNG- of JPG-indeling."
new:
title: 'Nieuw product'
unit_name_placeholder: 'b.v. trossen'

View File

@@ -316,9 +316,9 @@ pt:
enable_products_cache: "Activar Cache?"
invoice_settings:
edit:
title: Configuração de Faturas
invoice_style2?: Use o modelo alternativo de fatura que inclui o total de impostos dividido por taxa e taxa de imposto por item (ainda não disponível para países que exibem preços sem taxas)
enable_receipt_printing?: Mostrar opções para imprimir recibos usando impressoras térmicas no selector de encomendas?
title: "Configuração de Faturas"
invoice_style2?: "Use o modelo alternativo de fatura que inclui o total de impostos dividido por taxa e taxa de imposto por item (ainda não disponível para países que exibem preços sem taxas)"
enable_receipt_printing?: "Mostrar opções para imprimir recibos usando impressoras térmicas no selector de encomendas?"
stripe_connect_settings:
edit:
title: "Ligar ao Stripe"

View File

@@ -157,9 +157,9 @@ sv:
error: "Fel"
invoice_settings:
edit:
title: Fakturainställningar
invoice_style2?: Använd den alternativa faktureringsmodellen som inkluderar totala skattefördelning per beräkning och skatt per artikel (ännu inte passande för länder som visar priser exklusive skatt)
enable_receipt_printing?: 'Visa alternativ för att skriva ut recept genom att använda termiska skrivare i ordermenyn? '
title: "Fakturainställningar"
invoice_style2?: "Använd den alternativa faktureringsmodellen som inkluderar totala skattefördelning per beräkning och skatt per artikel (ännu inte passande för länder som visar priser exklusive skatt)"
enable_receipt_printing?: "Visa alternativ för att skriva ut recept genom att använda termiska skrivare i ordermenyn? "
customers:
index:
new_customer: "Ny kund"

View File

@@ -0,0 +1,42 @@
require "spec_helper"
feature "Packing Reports", js: true do
include AuthenticationWorkflow
include WebHelper
let(:distributor) { create(:distributor_enterprise) }
let(:oc) { create(:simple_order_cycle) }
let(:order) { create(:order, completed_at: 1.day.ago, order_cycle: oc, distributor: distributor) }
let(:li1) { build(:line_item_with_shipment) }
let(:li2) { build(:line_item_with_shipment) }
before do
order.line_items << li1
order.line_items << li2
quick_login_as_admin
end
describe "viewing a report" do
context "when an associated variant has been soft-deleted" do
it "shows line items" do
li1.variant.delete
visit spree.admin_reports_path
click_on I18n.t("admin.reports.packing.name")
select oc.name, from: "q_order_cycle_id_in"
find('#q_completed_at_gt').click
select_date(Time.zone.today - 1.days)
find('#q_completed_at_lt').click
select_date(Time.zone.today)
find("button[type='submit']").click
expect(page).to have_content li1.product.name
expect(page).to have_content li2.product.name
end
end
end
end

View File

@@ -47,8 +47,8 @@ describe ProductImport::ProductImporter do
end
describe "importing products from a spreadsheet" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type", "variant_unit_name", "on_demand", "shipping_category"]
csv << ["Carrots", "User Enterprise", "Vegetables", "5", "3.20", "500", "g", "", "", shipping_category.name]
csv << ["Potatoes", "User Enterprise", "Vegetables", "6", "6.50", "2", "kg", "", "", shipping_category.name]
@@ -56,16 +56,16 @@ describe ProductImport::ProductImporter do
csv << ["Salad", "User Enterprise", "Vegetables", "7", "4.50", "1", "", "bags", "", shipping_category.name]
csv << ["Hot Cross Buns", "User Enterprise", "Cake", "7", "3.50", "1", "", "buns", "1", shipping_category.name]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "returns the number of entries" do
expect(@importer.item_count).to eq(5)
expect(importer.item_count).to eq(5)
end
it "validates entries and returns the results as json" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 5
expect(filter('invalid', entries)).to eq 0
@@ -74,11 +74,11 @@ describe ProductImport::ProductImporter do
end
it "saves the results and returns info on updated products" do
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 5
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 5
expect(importer.products_created_count).to eq 5
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 5
carrots = Spree::Product.find_by_name('Carrots')
expect(carrots.supplier).to eq enterprise
@@ -133,18 +133,18 @@ describe ProductImport::ProductImporter do
end
describe "when uploading a spreadsheet with some invalid entries" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type", "shipping_category"]
csv << ["Good Carrots", "User Enterprise", "Vegetables", "5", "3.20", "500", "g", shipping_category.name]
csv << ["Bad Potatoes", "", "Vegetables", "6", "6.50", "1", "", shipping_category.name]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "validates entries" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 1
expect(filter('invalid', entries)).to eq 1
@@ -153,11 +153,11 @@ describe ProductImport::ProductImporter do
end
it "allows saving of the valid entries" do
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 1
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 1
expect(importer.products_created_count).to eq 1
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 1
carrots = Spree::Product.find_by_name('Good Carrots')
expect(carrots.supplier).to eq enterprise
@@ -170,35 +170,35 @@ describe ProductImport::ProductImporter do
end
describe "when shipping category is missing" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type", "variant_unit_name", "on_demand", "shipping_category"]
csv << ["Shipping Test", "User Enterprise", "Vegetables", "5", "3.20", "500", "g", "", nil, nil]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "raises an error" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(entries['2']['errors']['shipping_category']).to eq "Shipping_category can't be blank"
end
end
describe "when enterprises are not valid" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type"]
csv << ["Product 1", "Non-existent Enterprise", "Vegetables", "5", "5.50", "500", "g"]
csv << ["Product 2", "Non-Producer", "Vegetables", "5", "5.50", "500", "g"]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "adds enterprise errors" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(entries['2']['errors']['producer']).to include "not found in database"
expect(entries['3']['errors']['producer']).to include "not enabled as a producer"
@@ -206,18 +206,18 @@ describe ProductImport::ProductImporter do
end
describe "adding new variants to existing products and updating exiting products" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type", "display_name", "shipping_category"]
csv << ["Hypothetical Cake", "Another Enterprise", "Cake", "5", "5.50", "500", "g", "Preexisting Banana", shipping_category.name]
csv << ["Hypothetical Cake", "Another Enterprise", "Cake", "6", "3.50", "500", "g", "Emergent Coffee", shipping_category.name]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "validates entries" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 2
expect(filter('invalid', entries)).to eq 0
@@ -226,12 +226,12 @@ describe ProductImport::ProductImporter do
end
it "saves and updates" do
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 1
expect(@importer.products_updated_count).to eq 1
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 2
expect(importer.products_created_count).to eq 1
expect(importer.products_updated_count).to eq 1
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 2
added_coffee = Spree::Variant.find_by_display_name('Emergent Coffee')
expect(added_coffee.product.name).to eq 'Hypothetical Cake'
@@ -247,9 +247,28 @@ describe ProductImport::ProductImporter do
end
end
describe "updating an exiting variant" do
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "description" ,"category", "on_hand", "price", "units", "unit_type", "display_name", "shipping_category"]
csv << ["Hypothetical Cake", "Another Enterprise", "New Description", "Cake", "5", "5.50", "500", "g", "Preexisting Banana", shipping_category.name]
end
}
let(:importer) { import_data csv_data }
it "ignores (non-updatable) description field if it doesn't match the current description" do
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 1
expect(filter('invalid', entries)).to eq 0
expect(filter('update_product', entries)).to eq 1
end
end
describe "adding new product and sub-variant at the same time" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type", "display_name", "shipping_category"]
csv << ["Potatoes", "User Enterprise", "Vegetables", "5", "3.50", "500", "g", "Small Bag", shipping_category.name]
csv << ["Chives", "User Enterprise", "Vegetables", "6", "4.50", "500", "g", "Small Bag", shipping_category.name]
@@ -257,12 +276,12 @@ describe ProductImport::ProductImporter do
csv << ["Potatoes", "User Enterprise", "Vegetables", "6", "22.00", "10000", "g", "Small Sack", shipping_category.name]
csv << ["Potatoes", "User Enterprise", "Vegetables", "6", "60.00", "30000", "", "Big Sack", shipping_category.name]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "validates entries" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 3
expect(filter('invalid', entries)).to eq 2
@@ -270,11 +289,11 @@ describe ProductImport::ProductImporter do
end
it "saves and updates" do
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 3
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 3
expect(importer.products_created_count).to eq 3
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 3
small_bag = Spree::Variant.find_by_display_name('Small Bag')
expect(small_bag.product.name).to eq 'Potatoes'
@@ -296,18 +315,18 @@ describe ProductImport::ProductImporter do
end
describe "updating various fields" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type", "on_demand", "sku", "shipping_category"]
csv << ["Beetroot", "And Another Enterprise", "Vegetables", "5", "3.50", "500", "g", "0", nil, shipping_category.name]
csv << ["Tomato", "And Another Enterprise", "Vegetables", "6", "5.50", "500", "g", "1", "TOMS", shipping_category.name]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "validates entries" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 2
expect(filter('invalid', entries)).to eq 0
@@ -316,12 +335,12 @@ describe ProductImport::ProductImporter do
end
it "saves and updates" do
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 0
expect(@importer.products_updated_count).to eq 2
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 2
expect(importer.products_created_count).to eq 0
expect(importer.products_updated_count).to eq 2
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 2
beetroot = Spree::Product.find_by_name('Beetroot').variants.first
expect(beetroot.price).to eq 3.50
@@ -334,31 +353,31 @@ describe ProductImport::ProductImporter do
end
describe "updating non-updatable fields on existing products" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type"]
csv << ["Beetroot", "And Another Enterprise", "Meat", "5", "3.50", "500", "g"]
csv << ["Tomato", "And Another Enterprise", "Vegetables", "6", "5.50", "500", "Kg"]
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "does not allow updating" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 0
expect(filter('invalid', entries)).to eq 2
@importer.entries.each do |entry|
importer.entries.each do |entry|
expect(entry.errors.messages.values).to include [I18n.t('admin.product_import.model.not_updatable')]
end
end
end
describe "when more than one product of the same name already exists with multiple variants each" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "description", "on_hand", "price", "units", "unit_type", "display_name", "shipping_category"]
csv << ["Oats", "User Enterprise", "Cereal", "", "50", "3.50", "500", "g", "Rolled Oats", shipping_category.name] # Update
csv << ["Oats", "User Enterprise", "Cereal", "", "80", "3.75", "500", "g", "Flaked Oats", shipping_category.name] # Update
@@ -366,12 +385,12 @@ describe ProductImport::ProductImporter do
csv << ["Oats", "User Enterprise", "Cereal", "", "70", "8.50", "500", "g", "French Oats", shipping_category.name] # Add
csv << ["Oats", "User Enterprise", "Cereal", "", "70", "8.50", "500", "g", "Scottish Oats", shipping_category.name] # Add
end
@importer = import_data csv_data
end
}
let(:importer) { import_data csv_data }
it "validates entries" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 5
expect(filter('invalid', entries)).to eq 0
@@ -382,19 +401,19 @@ describe ProductImport::ProductImporter do
end
it "saves and updates" do
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 3
expect(@importer.products_updated_count).to eq 2
expect(@importer.inventory_created_count).to eq 0
expect(@importer.inventory_updated_count).to eq 0
expect(@importer.updated_ids.count).to eq 5
expect(importer.products_created_count).to eq 3
expect(importer.products_updated_count).to eq 2
expect(importer.inventory_created_count).to eq 0
expect(importer.inventory_updated_count).to eq 0
expect(importer.updated_ids.count).to eq 5
end
end
describe "when importer processes create and update across multiple stages" do
before do
@csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "producer", "category", "on_hand", "price", "units", "unit_type", "display_name", "shipping_category"]
csv << ["Bag of Oats", "User Enterprise", "Cereal", "60", "5.50", "500", "g", "Magic Oats", shipping_category.name] # Add
csv << ["Bag of Oats", "User Enterprise", "Cereal", "70", "8.50", "500", "g", "French Oats", shipping_category.name] # Add
@@ -402,14 +421,14 @@ describe ProductImport::ProductImporter do
csv << ["Bag of Oats", "User Enterprise", "Cereal", "90", "7.50", "500", "g", "Scottish Oats", shipping_category.name] # Add
csv << ["Bag of Oats", "User Enterprise", "Cereal", "30", "6.50", "500", "g", "Breakfast Oats", shipping_category.name] # Add
end
end
}
it "processes the validation in stages" do
# Using settings of start: 1, end: 3 to simulate import over multiple stages
@importer = import_data @csv_data, start: 1, end: 3
importer = import_data csv_data, start: 1, end: 3
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 3
expect(filter('invalid', entries)).to eq 0
@@ -418,10 +437,10 @@ describe ProductImport::ProductImporter do
expect(filter('create_inventory', entries)).to eq 0
expect(filter('update_inventory', entries)).to eq 0
@importer = import_data @csv_data, start: 4, end: 6
importer = import_data csv_data, start: 4, end: 6
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 2
expect(filter('invalid', entries)).to eq 0
@@ -432,23 +451,23 @@ describe ProductImport::ProductImporter do
end
it "processes saving in stages" do
@importer = import_data @csv_data, start: 1, end: 3
@importer.save_entries
importer = import_data csv_data, start: 1, end: 3
importer.save_entries
expect(@importer.products_created_count).to eq 3
expect(@importer.products_updated_count).to eq 0
expect(@importer.inventory_created_count).to eq 0
expect(@importer.inventory_updated_count).to eq 0
expect(@importer.updated_ids.count).to eq 3
expect(importer.products_created_count).to eq 3
expect(importer.products_updated_count).to eq 0
expect(importer.inventory_created_count).to eq 0
expect(importer.inventory_updated_count).to eq 0
expect(importer.updated_ids.count).to eq 3
@importer = import_data @csv_data, start: 4, end: 6
@importer.save_entries
importer = import_data csv_data, start: 4, end: 6
importer.save_entries
expect(@importer.products_created_count).to eq 2
expect(@importer.products_updated_count).to eq 0
expect(@importer.inventory_created_count).to eq 0
expect(@importer.inventory_updated_count).to eq 0
expect(@importer.updated_ids.count).to eq 2
expect(importer.products_created_count).to eq 2
expect(importer.products_updated_count).to eq 0
expect(importer.inventory_created_count).to eq 0
expect(importer.inventory_updated_count).to eq 0
expect(importer.updated_ids.count).to eq 2
products = Spree::Product.find_all_by_name('Bag of Oats')
@@ -459,19 +478,19 @@ describe ProductImport::ProductImporter do
describe "importing items into inventory" do
describe "creating and updating inventory" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "distributor", "producer", "on_hand", "price", "units", "unit_type", "variant_unit_name"]
csv << ["Beans", "Another Enterprise", "User Enterprise", "5", "3.20", "500", "g", ""]
csv << ["Sprouts", "Another Enterprise", "User Enterprise", "6", "6.50", "500", "g", ""]
csv << ["Cabbage", "Another Enterprise", "User Enterprise", "2001", "1.50", "1", "", "Whole"]
end
@importer = import_data csv_data, import_into: 'inventories'
end
}
let(:importer) { import_data csv_data, import_into: 'inventories' }
it "validates entries" do
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 3
expect(filter('invalid', entries)).to eq 0
@@ -480,12 +499,12 @@ describe ProductImport::ProductImporter do
end
it "saves and updates inventory" do
@importer.save_entries
importer.save_entries
expect(@importer.inventory_created_count).to eq 2
expect(@importer.inventory_updated_count).to eq 1
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 3
expect(importer.inventory_created_count).to eq 2
expect(importer.inventory_updated_count).to eq 1
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 3
beans_override = VariantOverride.where(variant_id: product2.variants.first.id, hub_id: enterprise2.id).first
sprouts_override = VariantOverride.where(variant_id: product3.variants.first.id, hub_id: enterprise2.id).first
@@ -503,18 +522,19 @@ describe ProductImport::ProductImporter do
end
describe "updating existing inventory referenced by display_name" do
before do
csv_data = CSV.generate do |csv|
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "display_name", "distributor", "producer", "on_hand", "price", "units"]
csv << ["Oats", "Porridge Oats", "Another Enterprise", "User Enterprise", "900", "", "500"]
end
@importer = import_data csv_data, import_into: 'inventories'
end
}
let(:importer) { import_data csv_data, import_into: 'inventories' }
it "updates inventory item correctly" do
@importer.save_entries
importer.save_entries
expect(@importer.inventory_created_count).to eq 1
expect(importer.inventory_created_count).to eq 1
override = VariantOverride.where(variant_id: variant2.id, hub_id: enterprise2.id).first
visible = InventoryItem.where(variant_id: variant2.id, enterprise_id: enterprise2.id).first.visible
@@ -525,20 +545,19 @@ describe ProductImport::ProductImporter do
end
describe "updating existing item that was set to hidden in inventory" do
before do
InventoryItem.create(variant_id: product4.variants.first.id, enterprise_id: enterprise2.id, visible: false)
csv_data = CSV.generate do |csv|
csv << ["name", "distributor", "producer", "on_hand", "price", "units", "variant_unit_name"]
csv << ["Cabbage", "Another Enterprise", "User Enterprise", "900", "", "1", "Whole"]
let!(:inventory) { InventoryItem.create(variant_id: product4.variants.first.id, enterprise_id: enterprise2.id, visible: false) }
let(:csv_data) {
CSV.generate do |csv|
csv << ["name", "distributor", "producer", "on_hand", "price", "units", "variant_unit_name"]
csv << ["Cabbage", "Another Enterprise", "User Enterprise", "900", "", "1", "Whole"]
end
@importer = import_data csv_data, import_into: 'inventories'
end
}
let(:importer) { import_data csv_data, import_into: 'inventories' }
it "sets the item to visible in inventory when the item is updated" do
@importer.save_entries
importer.save_entries
expect(@importer.inventory_updated_count).to eq 1
expect(importer.inventory_updated_count).to eq 1
override = VariantOverride.where(variant_id: product4.variants.first.id, hub_id: enterprise2.id).first
visible = InventoryItem.where(variant_id: product4.variants.first.id, enterprise_id: enterprise2.id).first.visible
@@ -556,20 +575,20 @@ describe ProductImport::ProductImporter do
csv << ["My Carrots", "User Enterprise", "Vegetables", "5", "3.20", "500", "g", shipping_category.name]
csv << ["Your Potatoes", "Another Enterprise", "Vegetables", "6", "6.50", "1", "kg", shipping_category.name]
end
@importer = import_data csv_data, import_user: user
importer = import_data csv_data, import_user: user
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 1
expect(filter('invalid', entries)).to eq 1
expect(filter('create_product', entries)).to eq 1
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 1
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 1
expect(importer.products_created_count).to eq 1
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 1
expect(Spree::Product.find_by_name('My Carrots')).to be_a Spree::Product
expect(Spree::Product.find_by_name('Your Potatoes')).to eq nil
@@ -580,20 +599,20 @@ describe ProductImport::ProductImporter do
csv << ["name", "producer", "distributor", "on_hand", "price", "units", "unit_type"]
csv << ["Beans", "User Enterprise", "Another Enterprise", "777", "3.20", "500", "g"]
end
@importer = import_data csv_data, import_into: 'inventories'
importer = import_data csv_data, import_into: 'inventories'
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 1
expect(filter('invalid', entries)).to eq 0
expect(filter('create_inventory', entries)).to eq 1
@importer.save_entries
importer.save_entries
expect(@importer.inventory_created_count).to eq 1
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 1
expect(importer.inventory_created_count).to eq 1
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 1
beans = VariantOverride.where(variant_id: product2.variants.first.id, hub_id: enterprise2.id).first
expect(beans.count_on_hand).to eq 777
@@ -605,20 +624,20 @@ describe ProductImport::ProductImporter do
csv << ["Beans", "User Enterprise", "5", "3.20", "500", "g"]
csv << ["Sprouts", "User Enterprise", "6", "6.50", "500", "g"]
end
@importer = import_data csv_data, import_into: 'inventories'
importer = import_data csv_data, import_into: 'inventories'
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 0
expect(filter('invalid', entries)).to eq 2
expect(filter('create_inventory', entries)).to eq 0
@importer.save_entries
importer.save_entries
expect(@importer.inventory_created_count).to eq 0
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 0
expect(importer.inventory_created_count).to eq 0
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 0
end
end
@@ -629,29 +648,29 @@ describe ProductImport::ProductImporter do
csv << ["Carrots", "User Enterprise", "Vegetables", "5", "3.20", "500", "g", shipping_category.name]
csv << ["Beans", "User Enterprise", "Vegetables", "6", "6.50", "500", "g", shipping_category.name]
end
@importer = import_data csv_data, reset_all_absent: true
importer = import_data csv_data, reset_all_absent: true
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 2
expect(filter('invalid', entries)).to eq 0
expect(filter('create_product', entries)).to eq 1
expect(filter('update_product', entries)).to eq 1
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 1
expect(@importer.products_updated_count).to eq 1
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 2
expect(importer.products_created_count).to eq 1
expect(importer.products_updated_count).to eq 1
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 2
updated_ids = @importer.updated_ids
updated_ids = importer.updated_ids
@importer = import_data csv_data, reset_all_absent: true, updated_ids: updated_ids, enterprises_to_reset: [enterprise.id]
@importer.reset_absent(updated_ids)
importer = import_data csv_data, reset_all_absent: true, updated_ids: updated_ids, enterprises_to_reset: [enterprise.id]
importer.reset_absent(updated_ids)
expect(@importer.products_reset_count).to eq 7
expect(importer.products_reset_count).to eq 7
expect(Spree::Product.find_by_name('Carrots').on_hand).to eq 5 # Present in file, added
expect(Spree::Product.find_by_name('Beans').on_hand).to eq 6 # Present in file, updated
@@ -666,27 +685,25 @@ describe ProductImport::ProductImporter do
csv << ["Beans", "Another Enterprise", "User Enterprise", "6", "3.20", "500", "g"]
csv << ["Sprouts", "Another Enterprise", "User Enterprise", "7", "6.50", "500", "g"]
end
@importer = import_data csv_data, import_into: 'inventories', reset_all_absent: true
importer = import_data csv_data, import_into: 'inventories', reset_all_absent: true
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 2
expect(filter('invalid', entries)).to eq 0
expect(filter('create_inventory', entries)).to eq 2
@importer.save_entries
importer.save_entries
expect(@importer.inventory_created_count).to eq 2
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 2
expect(importer.inventory_created_count).to eq 2
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 2
updated_ids = @importer.updated_ids
updated_ids = importer.updated_ids
@importer = import_data csv_data, import_into: 'inventories', reset_all_absent: true, updated_ids: updated_ids, enterprises_to_reset: [enterprise2.id]
@importer.reset_absent(updated_ids)
# expect(@importer.products_reset_count).to eq 1
importer = import_data csv_data, import_into: 'inventories', reset_all_absent: true, updated_ids: updated_ids, enterprises_to_reset: [enterprise2.id]
importer.reset_absent(updated_ids)
beans = VariantOverride.where(variant_id: product2.variants.first.id, hub_id: enterprise2.id).first
sprouts = VariantOverride.where(variant_id: product3.variants.first.id, hub_id: enterprise2.id).first
@@ -731,20 +748,20 @@ describe ProductImport::ProductImporter do
}
} }
@importer = import_data csv_data, settings: settings
importer = import_data csv_data, settings: settings
@importer.validate_entries
entries = JSON.parse(@importer.entries_json)
importer.validate_entries
entries = JSON.parse(importer.entries_json)
expect(filter('valid', entries)).to eq 2
expect(filter('invalid', entries)).to eq 0
expect(filter('create_product', entries)).to eq 2
@importer.save_entries
importer.save_entries
expect(@importer.products_created_count).to eq 2
expect(@importer.updated_ids).to be_a(Array)
expect(@importer.updated_ids.count).to eq 2
expect(importer.products_created_count).to eq 2
expect(importer.updated_ids).to be_a(Array)
expect(importer.updated_ids.count).to eq 2
carrots = Spree::Product.find_by_name('Carrots')
expect(carrots.on_hand).to eq 9000

View File

@@ -585,5 +585,17 @@ module Spree
}.to change(Spree::OptionValue, :count).by(0)
end
end
describe "when the associated variant is soft-deleted" do
let!(:variant) { create(:variant) }
let!(:line_item) { create(:line_item, variant: variant) }
it "returns the associated variant or product" do
line_item.variant.delete
expect(line_item.variant).to eq variant
expect(line_item.product).to eq variant.product
end
end
end
end

View File

@@ -366,6 +366,8 @@ describe Spree::Order do
before do
order.add_variant v1
order.add_variant v2
order.update_distribution_charge!
end
it "removes the variant's line item" do
@@ -378,6 +380,34 @@ describe Spree::Order do
order.remove_variant v3
end.to change(order.line_items(:reload), :count).by(0)
end
context "when the item has an associated adjustment" do
let(:distributor) { create(:distributor_enterprise) }
let(:order_cycle) do
create(:order_cycle).tap do |record|
create(:exchange, variants: [v1], incoming: true)
create(:exchange, variants: [v1], incoming: false, receiver: distributor)
end
end
let(:order) { create(:order, distributor: distributor, order_cycle: order_cycle) }
it "removes the variant's line item" do
order.remove_variant v1
expect(order.line_items(:reload).map(&:variant)).to eq([v2])
end
it "removes the variant's adjustment" do
line_item = order.line_items.where(variant_id: v1.id).first
adjustment_scope = Spree::Adjustment.where(source_type: "Spree::LineItem",
source_id: line_item.id)
expect(adjustment_scope.count).to eq(1)
adjustment = adjustment_scope.first
order.remove_variant v1
expect { adjustment.reload }.to raise_error
end
end
end
describe "emptying the order" do