diff --git a/Gemfile.lock b/Gemfile.lock
index 35076d518e..55dcd00503 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -44,42 +44,42 @@ GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.1.0)
- actioncable (6.1.7.2)
- actionpack (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actioncable (6.1.7.3)
+ actionpack (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
- actionmailbox (6.1.7.2)
- actionpack (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activestorage (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actionmailbox (6.1.7.3)
+ actionpack (= 6.1.7.3)
+ activejob (= 6.1.7.3)
+ activerecord (= 6.1.7.3)
+ activestorage (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
mail (>= 2.7.1)
- actionmailer (6.1.7.2)
- actionpack (= 6.1.7.2)
- actionview (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actionmailer (6.1.7.3)
+ actionpack (= 6.1.7.3)
+ actionview (= 6.1.7.3)
+ activejob (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
- actionpack (6.1.7.2)
- actionview (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actionpack (6.1.7.3)
+ actionview (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
rack (~> 2.0, >= 2.0.9)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actionpack-action_caching (1.2.2)
actionpack (>= 4.0.0)
- actiontext (6.1.7.2)
- actionpack (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activestorage (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actiontext (6.1.7.3)
+ actionpack (= 6.1.7.3)
+ activerecord (= 6.1.7.3)
+ activestorage (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
nokogiri (>= 1.8.5)
- actionview (6.1.7.2)
- activesupport (= 6.1.7.2)
+ actionview (6.1.7.3)
+ activesupport (= 6.1.7.3)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
@@ -91,19 +91,19 @@ GEM
activemodel (>= 5.2.0)
activestorage (>= 5.2.0)
activesupport (>= 5.2.0)
- activejob (6.1.7.2)
- activesupport (= 6.1.7.2)
+ activejob (6.1.7.3)
+ activesupport (= 6.1.7.3)
globalid (>= 0.3.6)
activemerchant (1.123.0)
activesupport (>= 4.2)
builder (>= 2.1.2, < 4.0.0)
i18n (>= 0.6.9)
nokogiri (~> 1.4)
- activemodel (6.1.7.2)
- activesupport (= 6.1.7.2)
- activerecord (6.1.7.2)
- activemodel (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ activemodel (6.1.7.3)
+ activesupport (= 6.1.7.3)
+ activerecord (6.1.7.3)
+ activemodel (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
activerecord-import (1.4.1)
activerecord (>= 4.2)
activerecord-postgresql-adapter (0.0.1)
@@ -114,14 +114,14 @@ GEM
multi_json (~> 1.11, >= 1.11.2)
rack (>= 2.0.8, < 3)
railties (>= 5.2.4.1)
- activestorage (6.1.7.2)
- actionpack (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ activestorage (6.1.7.3)
+ actionpack (= 6.1.7.3)
+ activejob (= 6.1.7.3)
+ activerecord (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
- activesupport (6.1.7.2)
+ activesupport (6.1.7.3)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
@@ -224,14 +224,14 @@ GEM
cuprite (0.14.3)
capybara (~> 3.0)
ferrum (~> 0.13.0)
- database_cleaner (2.0.1)
- database_cleaner-active_record (~> 2.0.0)
- database_cleaner-active_record (2.0.0)
+ database_cleaner (2.0.2)
+ database_cleaner-active_record (>= 2, < 3)
+ database_cleaner-active_record (2.1.0)
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
date (3.3.3)
- ddtrace (1.10.0)
+ ddtrace (1.10.1)
debase-ruby_core_source (>= 0.10.16, <= 3.2.0)
libdatadog (~> 2.0.0.1.0)
libddwaf (~> 1.6.2.0.0)
@@ -402,7 +402,7 @@ GEM
mini_portile2 (2.8.1)
mini_racer (0.6.3)
libv8-node (~> 16.10.0.0)
- minitest (5.17.0)
+ minitest (5.18.0)
monetize (1.12.0)
money (~> 6.12)
money (6.16.0)
@@ -459,7 +459,7 @@ GEM
parallel (1.22.1)
paranoia (2.6.1)
activerecord (>= 5.1, < 7.1)
- parser (3.2.1.0)
+ parser (3.2.1.1)
ast (~> 2.4.1)
paypal-sdk-core (0.3.4)
multi_json (~> 1.0)
@@ -482,7 +482,7 @@ GEM
nio4r (~> 2.0)
raabro (1.4.0)
racc (1.6.2)
- rack (2.2.6.3)
+ rack (2.2.6.4)
rack-mini-profiler (2.3.4)
rack (>= 1.2.0)
rack-oauth2 (1.21.3)
@@ -499,20 +499,20 @@ GEM
rack-test (2.0.2)
rack (>= 1.3)
rack-timeout (0.6.3)
- rails (6.1.7.2)
- actioncable (= 6.1.7.2)
- actionmailbox (= 6.1.7.2)
- actionmailer (= 6.1.7.2)
- actionpack (= 6.1.7.2)
- actiontext (= 6.1.7.2)
- actionview (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activemodel (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activestorage (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ rails (6.1.7.3)
+ actioncable (= 6.1.7.3)
+ actionmailbox (= 6.1.7.3)
+ actionmailer (= 6.1.7.3)
+ actionpack (= 6.1.7.3)
+ actiontext (= 6.1.7.3)
+ actionview (= 6.1.7.3)
+ activejob (= 6.1.7.3)
+ activemodel (= 6.1.7.3)
+ activerecord (= 6.1.7.3)
+ activestorage (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
bundler (>= 1.15.0)
- railties (= 6.1.7.2)
+ railties (= 6.1.7.3)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
@@ -532,9 +532,9 @@ GEM
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
rails_safe_tasks (1.0.0)
- railties (6.1.7.2)
- actionpack (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ railties (6.1.7.3)
+ actionpack (= 6.1.7.3)
+ activesupport (= 6.1.7.3)
method_source
rake (>= 12.2)
thor (~> 1.0)
@@ -549,7 +549,7 @@ GEM
ffi (~> 1.0)
redcarpet (3.6.0)
redis (4.8.1)
- redis-client (0.13.0)
+ redis-client (0.14.0)
connection_pool
regexp_parser (2.7.0)
reline (0.3.2)
@@ -605,7 +605,7 @@ GEM
rswag-ui (2.8.0)
actionpack (>= 3.1, < 7.1)
railties (>= 3.1, < 7.1)
- rubocop (1.48.0)
+ rubocop (1.48.1)
json (~> 2.3)
parallel (~> 1.10)
parser (>= 3.2.0.0)
@@ -642,7 +642,7 @@ GEM
semantic_range (3.0.0)
shoulda-matchers (5.3.0)
activesupport (>= 5.2.0)
- sidekiq (7.0.6)
+ sidekiq (7.0.7)
concurrent-ruby (< 2)
connection_pool (>= 2.3.0)
rack (>= 2.2.4)
diff --git a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee
index 5614c2046f..51df3bb2e7 100644
--- a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee
+++ b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee
@@ -17,7 +17,14 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
]
$scope.page = 1
$scope.per_page = $scope.per_page_options[0].id
-
+ searchThrough = ["order_distributor_name",
+ "order_bill_address_phone",
+ "order_bill_address_firstname",
+ "order_bill_address_lastname",
+ "variant_product_supplier_name",
+ "order_email",
+ "order_number",
+ "product_name"].join("_or_") + "_cont"
$scope.confirmRefresh = ->
LineItems.allSaved() || confirm(t("unsaved_changes_warning"))
@@ -26,7 +33,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.distributorFilter = ''
$scope.supplierFilter = ''
$scope.orderCycleFilter = ''
- $scope.quickSearch = ''
+ $scope.query = ''
$scope.startDate = undefined
$scope.endDate = undefined
event = new CustomEvent('flatpickr:clear')
@@ -60,6 +67,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
[formattedStartDate, formattedEndDate] = $scope.formatDates($scope.startDate, $scope.endDate)
RequestMonitor.load LineItems.index(
+ "q[#{searchThrough}]": $scope.query,
"q[order_state_not_eq]": "canceled",
"q[order_shipment_state_not_eq]": "shipped",
"q[order_completed_at_not_null]": "true",
diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb
index 20f0aba26d..5efc7ea1cf 100644
--- a/app/models/enterprise.rb
+++ b/app/models/enterprise.rb
@@ -17,7 +17,7 @@ class Enterprise < ApplicationRecord
}.freeze
VALID_INSTAGRAM_REGEX = %r{\A[a-zA-Z0-9._]{1,30}([^/-]*)\z}
- searchable_attributes :sells, :is_primary_producer
+ searchable_attributes :sells, :is_primary_producer, :name
searchable_associations :properties
searchable_scopes :is_primary_producer, :is_distributor, :is_hub, :activated, :visible,
:ready_for_checkout, :not_ready_for_checkout
diff --git a/app/models/spree/address.rb b/app/models/spree/address.rb
index c40cb05a28..998cb0ec4f 100644
--- a/app/models/spree/address.rb
+++ b/app/models/spree/address.rb
@@ -4,7 +4,7 @@ module Spree
class Address < ApplicationRecord
include AddressDisplay
- searchable_attributes :firstname, :lastname
+ searchable_attributes :firstname, :lastname, :phone
searchable_associations :country, :state
belongs_to :country, class_name: "Spree::Country"
diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb
index e696b872e9..5032b9d650 100644
--- a/app/models/spree/order.rb
+++ b/app/models/spree/order.rb
@@ -14,7 +14,7 @@ module Spree
searchable_attributes :number, :state, :shipment_state, :payment_state, :distributor_id,
:order_cycle_id, :email, :total, :customer_id
- searchable_associations :shipping_method, :bill_address
+ searchable_associations :shipping_method, :bill_address, :distributor
searchable_scopes :complete, :incomplete
checkout_flow do
diff --git a/app/views/spree/admin/orders/bulk_management.html.haml b/app/views/spree/admin/orders/bulk_management.html.haml
index 2c3090a17c..3ca93cfc81 100644
--- a/app/views/spree/admin/orders/bulk_management.html.haml
+++ b/app/views/spree/admin/orders/bulk_management.html.haml
@@ -18,22 +18,28 @@
%input.red{ type: "button", value: "Save Changes", ng: { click: "submit()", disabled: "!bulk_order_form.$dirty" } }
%legend{ align: 'center'}= t(:search)
%div{ :class => "sixteen columns alpha" }
- .filter_select{ :class => "four columns" }
+ .quick_search.three.columns.alpha
+ %label{ for: 'quick_filter' }
+ %br
+ %input.quick-search.fullwidth{ ng: {model: 'query'}, name: "quick_filter", type: 'text', placeholder: t('admin.quick_search'), "ng-keypress" => "$event.keyCode === 13 && fetchResults()" }
+ .one.columns
+
+ .filter_select{ :class => "three columns" }
%label{ :for => 'supplier_filter' }
= t("admin.producer")
%br
%input#supplier_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'suppliers', placeholder: "#{t(:all)}", blank: "{ id: '', name: '#{t(:all)}' }", on: { selecting: "confirmRefresh" }, ng: { model: 'supplierFilter' } }
- .filter_select{ :class => "four columns" }
+ .filter_select{ :class => "three columns" }
%label{ :for => 'distributor_filter' }
= t("admin.shop")
%br
%input#distributor_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'distributors', placeholder: "#{t(:all)}", blank: "{ id: '', name: '#{t(:all)}' }", on: { selecting: "confirmRefresh" }, ng: { model: 'distributorFilter' } }
- .filter_select{ :class => "four columns" }
+ .filter_select{ :class => "three columns" }
%label{ :for => 'order_cycle_filter' }
= t("admin.order_cycle")
%br
%input#order_cycle_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'orderCycles', placeholder: "#{t(:all)}", blank: "{ id: '', name: '#{t(:all)}' }", on: { selecting: "confirmRefresh" }, ng: { model: 'orderCycleFilter' } }
- .date_filter{class: "four columns"}
+ .date_filter{class: "three columns"}
%label
= t("date_range")
%br
@@ -97,8 +103,6 @@
.clear
%div{ ng: { hide: 'RequestMonitor.loading || line_items.length == 0' }, style: "display: flex; justify-content: flex-start; column-gap: 10px; margin-bottom: 15px" }
- %div{ style: "flex-grow: 1" }
- %input.fullwidth{ :type => "text", :id => 'quick_search', 'ng-model' => 'quickSearch', :placeholder => 'Quick Search' }
-# This -20px is a hack to make the dropdowns align properly
%div{ style: "margin-right: -20px;" }
= render 'admin/shared/bulk_actions_dropdown'
@@ -162,7 +166,7 @@
= "#{t('admin.price')} (#{Spree::Money.currency_symbol})"
%th.actions
- %tr.line_item{ ng: { repeat: "line_item in filteredLineItems = ( line_items | filter:quickSearch | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:sorting.predicate:sorting.reverse )", 'class-even' => "'even'", 'class-odd' => "'odd'", attr: { id: "li_{{line_item.id}}" } } }
+ %tr.line_item{ ng: { repeat: "line_item in filteredLineItems = ( line_items | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:sorting.predicate:sorting.reverse )", 'class-even' => "'even'", 'class-odd' => "'odd'", attr: { id: "li_{{line_item.id}}" } } }
%td.bulk
%input{ :type => "checkbox", :name => 'bulk', 'ng-model' => 'line_item.checked', 'ignore-dirty' => true }
%td.order_no{ 'ng-show' => 'columns.order_no.visible' } {{ line_item.order.number }}
diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml
index 1d7eec2249..f4572e1529 100644
--- a/config/locales/en_CA.yml
+++ b/config/locales/en_CA.yml
@@ -6,12 +6,22 @@ en_CA:
spree/shipping_method: Shipping/Pick-up Method
attributes:
spree/order/ship_address:
+ address1: "Shipping address (House number + Street)"
address2: "Shipping address line 2"
+ city: "Shipping address city"
country: "Shipping address country"
phone: "Phone number"
firstname: "First name"
lastname: "Last name"
zipcode: "Shipping address postal code"
+ spree/order/bill_address:
+ address1: "Billing address (House number & Street)"
+ zipcode: "Billing address Postal Code"
+ city: "Billing address City"
+ country: "Billing address country"
+ firstname: "Billing address first name"
+ lastname: "Billing address last name"
+ phone: Customer phone
spree/user:
password: "Password"
password_confirmation: "Password confirmation"
@@ -1313,6 +1323,7 @@ en_CA:
total_by_customer: Total by Customer
total_by_supplier: Total By Supplier
supplier_totals: Order Cycle Supplier Totals
+ percentage: "%{value} %"
supplier_totals_by_distributor: Order Cycle Supplier Totals by Distributor
totals_by_supplier: Order Cycle Distributor Totals by Supplier
customer_totals: Order Cycle Customer Totals
@@ -1323,6 +1334,8 @@ en_CA:
addresses: Addresses
payment_methods: Payment Methods Report
delivery: Delivery Report
+ sales_tax_totals_by_producer: Sales Tax Totals by Producer
+ sales_tax_totals_by_order: Sales Tax Totals by Order
tax_types: Tax Types
tax_rates: Tax Rates
pack_by_customer: Pack By Customer
@@ -2671,6 +2684,7 @@ en_CA:
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
report_header_tax_category: "Tax Category"
+ report_header_tax_rate_name: "Tax Rate Name"
report_header_tax_rate: "Tax Rate"
report_header_total_tax: "Total Tax (%{currency_symbol})"
report_header_total_excl_tax: "Total excl. tax (%{currency_symbol})"
@@ -2694,6 +2708,7 @@ en_CA:
report_header_supplier: Supplier
report_header_producer: Producer
report_header_producer_suburb: Producer City/Town
+ report_header_producer_tax_status: Producer Tax Status
report_header_producer_charges_sales_tax?: Tax registered
report_header_unit: Unit
report_header_group_buy_unit_quantity: Group Buy Unit Quantity
@@ -2710,6 +2725,7 @@ en_CA:
report_header_distributor_address: Distributor address
report_header_distributor_city: Distributor city
report_header_distributor_postcode: Distributor postal code
+ report_header_distributor_tax_status: Distributor Tax Status
report_header_delivery_address: Delivery Address
report_header_delivery_postcode: Delivery Postal Code
report_header_bulk_unit_size: Bulk Unit Size
@@ -3083,6 +3099,9 @@ en_CA:
cancel_the_order_send_cancelation_email: "Send a cancellation email to the customer."
restock_item: "Restock Items: Return this item to stock"
restock_items: "Restock Items: Return all items to stock"
+ delete_line_items_html:
+ one: "This will delete one line item from the order.
Are you sure you want to proceed?"
+ other: "This will delete %{count} line items from the order.
Are you sure you want to proceed?"
resend_user_email_confirmation:
resend: "Resend"
sending: "Resend..."
diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml
index d96d05b87a..6247fde01f 100644
--- a/config/locales/fr_CA.yml
+++ b/config/locales/fr_CA.yml
@@ -6,9 +6,22 @@ fr_CA:
spree/shipping_method: Option d'expédition
attributes:
spree/order/ship_address:
+ address1: "Adresse de livraison (Numéro et Rue)"
+ address2: "Adresse (Numéro et rue)"
+ city: "Adresse de livraison - Ville"
+ country: "Pays"
phone: "Numéro de téléphone"
firstname: "Prénom"
lastname: "Nom de famille"
+ zipcode: "Code postal"
+ spree/order/bill_address:
+ address1: "Adresse de facturation (Numéro et rue)"
+ zipcode: "Adresse de facturation - Code postal"
+ city: "Adresse de facturation - Ville"
+ country: "Adresse de facturation - Pays"
+ firstname: "Adresse de facturation - Prénom"
+ lastname: "Adresse de facturation - Nom"
+ phone: Téléphone
spree/user:
password: "Mot de passe"
password_confirmation: "Confirmation du mot de passe"
@@ -409,8 +422,11 @@ fr_CA:
filters:
categories:
title: Conditions de transport
+ selected_categories: "%{count} catégories sélectionnées"
producers:
title: Producteurs
+ selected_producers: "%{count} producteurs sélectionnés"
+ per_page: "%{count} éléments par page"
colums: Colonnes
columns:
name: Nom
@@ -666,6 +682,7 @@ fr_CA:
not_found: n'a pas été trouvé dans la base de donnée
category_not_found: n'est pas conforme aux catégories utilisées. Merci de modifier les catégories en utilisant celles listées sur la page d'import ou vérifier qu'il n'y ait pas de faute de frappe ou d'espace à fin du mot.
not_updatable: ne peut pas être mis à jour pour des produits existants via la fonctionnalité d'import de fichier produits
+ values_must_be_same: doit être identique pour les produits avec un nom identique
blank: Champ obligatoire
products_no_permission: vous n'avez pas les droits requis pour gérer les produits de cette entreprise
inventory_no_permission: Vous n'avez pas la permission de créer un catalogue boutique pour ce producteur
@@ -1309,6 +1326,7 @@ fr_CA:
total_by_customer: Total par acheteur
total_by_supplier: Total par producteur
supplier_totals: Totaux Cycle de Vente par Producteur
+ percentage: "%{value}%"
supplier_totals_by_distributor: Totaux Cycle de Vente par Producteur pour chaque Hub Distributeur
totals_by_supplier: Totaux Cycle de Vente par Hub Distributeur pour chaque Producteur
customer_totals: Totaux Cycle de Vente par Acheteur
@@ -1319,6 +1337,8 @@ fr_CA:
addresses: Adresses
payment_methods: Rapport Méthodes de Paiement
delivery: Rapport de Livraison
+ sales_tax_totals_by_producer: Détail des montants de taxes par producteur
+ sales_tax_totals_by_order: Détail des montants de taxes par commande
tax_types: Type de taxe
tax_rates: Taux de taxe
pack_by_customer: Préparation des commandes par Acheteur
@@ -1497,6 +1517,10 @@ fr_CA:
stripe_connect_fail: Désolé, la connexion de votre compte Stripe a échoué :-(
stripe_connect_settings:
resource: Configuration de Stripe Connect
+ resend_confirmation_emails_feedback:
+ one: "Emails envoyés pour 1 commande."
+ many: "Emails envoyés pour %{count} commandes"
+ other: "Emails envoyés pour %{count} commandes."
api:
unknown_error: "Quelque chose n'a pas fonctionné. Notre équipe a été notifiée."
invalid_api_key: " La clé API (%{key}) n'est pas valide."
@@ -1807,6 +1831,7 @@ fr_CA:
message_html: "Vous avez déjà passé une commande pour ce cycle de vente. Vérifiez votre %{cart} pour voir les produits commandés. Vous pouvez annuler ou modifier votre commande jusqu'à la fermeture du cycle de vente."
step1:
contact_information:
+ title: Contact
email:
label: Email
phone:
@@ -1860,10 +1885,13 @@ fr_CA:
title: Détails de livraison
edit: Modifier
address: Adresse de livraison
+ instructions: Instructions
payment_method:
title: Méthode de paiement
edit: Modifier
+ instructions: Instructions
order:
+ title: Total commande
edit: Modifier
terms_and_conditions:
message_html: "J'accepte les %{terms_and_conditions_link}"
@@ -1876,6 +1904,7 @@ fr_CA:
submit: Valider ma commande
cancel: Retour à la méthode de paiement
errors:
+ saving_failed: "La sauvegarde n'a pas fonctionné, veuillez mettre à jour les champs en rouge.%{messages}"
terms_not_accepted: Merci d'accepter les CGU & CGV.
required: Ce champ ne peut pas être vide
invalid_number: "Merci de renseigner un numéro de téléphone valide"
@@ -2576,6 +2605,7 @@ fr_CA:
report_customers_cycle: "Cycle de vente"
report_customers_type: "Type de rapport"
report_customers_csv: "Télécharger en csv"
+ report_customers: Acheteur
report_producers: "Producteurs"
report_type: "Type de rapport"
report_hubs: "Hubs"
@@ -2657,6 +2687,7 @@ fr_CA:
report_header_tax_on_delivery: "Taxe sur livraison (%{currency_symbol})"
report_header_tax_on_fees: "Taxe sur commission hub (%{currency_symbol})"
report_header_tax_category: "Type de taxe"
+ report_header_tax_rate_name: "Taxe"
report_header_tax_rate: "Taxe applicable"
report_header_total_tax: "Total Taxe (%{currency_symbol})"
report_header_total_excl_tax: "Total HT (%{currency_symbol})"
@@ -2667,6 +2698,7 @@ fr_CA:
report_header_customer_code: Code acheteur
report_header_product: Produit
report_header_product_properties: Propriétés / labels Produits
+ report_header_product_tax_category: Taxe applicable
report_header_quantity: Nb commandé
report_header_max_quantity: Quantité Max
report_header_variant: Variante
@@ -2679,6 +2711,8 @@ fr_CA:
report_header_supplier: Fournisseur
report_header_producer: Producteur
report_header_producer_suburb: Ville Producteur
+ report_header_producer_tax_status: Soumis à la taxe
+ report_header_producer_charges_sales_tax?: Soumis à la GST
report_header_unit: Unité
report_header_group_buy_unit_quantity: Nb d'unités achetées (vente par lots)
report_header_cost: Coût
@@ -2694,10 +2728,12 @@ fr_CA:
report_header_distributor_address: Adresse Hub Distributeur
report_header_distributor_city: Ville Distributeur
report_header_distributor_postcode: Code Postal Distributeur
+ report_header_distributor_tax_status: Statut de la boutique
report_header_delivery_address: Adresse Livraison
report_header_delivery_postcode: Code Postal Livraison
report_header_bulk_unit_size: Quantité totale du lot
report_header_weight: Poids
+ report_header_final_weight_volume: Poids ou volume livré
report_header_height: Hauteur
report_header_width: Largeur
report_header_depth: Profondeur
@@ -2876,6 +2912,7 @@ fr_CA:
deleting_item_will_cancel_order: "Cette opération va rendre une ou plusieurs commandes vides, sans aucun produit. Elles vont ainsi être annulées. Souhaitez-vous continuer ?"
modals:
got_it: "J'ai compris"
+ confirm: "Valider"
close: "Fermer"
continue: "Suivant"
cancel: "Annuler"
@@ -3432,6 +3469,8 @@ fr_CA:
server_error: "Erreur serveur"
shipping_method_names:
UPS Ground: "UPS Ground"
+ pick_up: "Retrait"
+ delivery: "Signé, scellé, livré"
start_date: "Date de début"
successfully_removed: "Supprimé avec succès"
taxonomy_edit: "Modifier la taxonomie"
@@ -3516,6 +3555,7 @@ fr_CA:
display_currency: "Afficher la devise"
choose_currency: "Choisir la devise"
mail_method_settings: "Paramètre méthode mail"
+ mail_settings_notice_html: "Les modifications apportées ici seront temporaireset peuvent changer à la prochaine mise à jour.
Si vous souhaitez réaliser des changements permanents, un administrateur système doit se charger de mettre à jour les informations et provisionner le serveur en utilisant ofn-install ."
general: "Général"
enable_mail_delivery: "Permettre distribution des mails"
send_mails_as: "Envoyer les mails en tant que"
@@ -3638,6 +3678,7 @@ fr_CA:
messages:
included_price_validation: "Ce cycle de vente a déjà été utilisé par un acheteur et ne peut être supprimé. Pour empêcher aux acheteurs d'y accéder, veuillez plutôt le fermer."
blank: "Champ obligatoire"
+ invalid_instagram_url: "Uniquement le nom d'utilisateur / identifiant par ex. le_prof"
layouts:
admin:
login_nav:
@@ -3748,6 +3789,7 @@ fr_CA:
print_invoices: "Imprimer les factures"
cancel_orders: "Annuler les commandes"
resend_confirmation: "Renvoyer la confirmation"
+ resend_confirmation_confirm_html: "Cette action va renvoyer l'email de confirmation de commande. Etes-vous sûr de vouloir continuer ?"
selected:
zero: "Aucune commande sélectionnée"
one: "1 commande sélectionnée"
@@ -3896,6 +3938,7 @@ fr_CA:
title: "Nouveau Produit"
new_product: "Nouveau Produit"
supplier: "Fournisseur"
+ supplier_select_placeholder: "Sélectionner un producteur"
product_name: "Nom du Produit"
units: "Unité de mesure"
value: "Nb unités"
@@ -3941,6 +3984,9 @@ fr_CA:
select_and_search: "Sélectionner les filtres et cliquez sur %{option} pour accéder aux données."
customer_names_message:
customer_names_tip: "Si les noms des acheteurs sont masqué, vous pouvez contacter le gestionnaire de la boutique. Il pourra vous donner accès à cette information."
+ products_and_inventory:
+ all_products:
+ message: "Attention les stocks correspondent aux stocks producteurs et non au stock du catalogue boutique."
users:
index:
listing_users: "Liste des utilisateurs"
@@ -4304,6 +4350,7 @@ fr_CA:
search_input:
placeholder: Chercher
selector_with_filter:
+ selected_items: "%{count} sélectionné"
search_placeholder: Chercher
pagination:
next: Suivant
diff --git a/package.json b/package.json
index 30dacb0336..978fd2c3ba 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
},
"dependencies": {
"@babel/preset-env": "^7.18.2",
- "@floating-ui/dom": "^1.2.3",
+ "@floating-ui/dom": "^1.2.4",
"@hotwired/turbo": "^7.3.0",
"@rails/webpacker": "5.4.4",
"babel-loader": "^8.2.3",
diff --git a/spec/controllers/admin/schedules_controller_spec.rb b/spec/controllers/admin/schedules_controller_spec.rb
index 75fb5eea72..97a0fbcce8 100644
--- a/spec/controllers/admin/schedules_controller_spec.rb
+++ b/spec/controllers/admin/schedules_controller_spec.rb
@@ -122,10 +122,8 @@ describe Admin::SchedulesController, type: :controller do
spree_put :update, format: :json, id: coordinated_schedule.id,
order_cycle_ids: [coordinated_order_cycle.id, coordinated_order_cycle2.id]
- reset_controller_environment
spree_put :update, format: :json, id: coordinated_schedule.id,
order_cycle_ids: [coordinated_order_cycle.id]
- reset_controller_environment
spree_put :update, format: :json, id: coordinated_schedule.id,
order_cycle_ids: [coordinated_order_cycle.id]
end
diff --git a/spec/controllers/spree/admin/return_authorizations_controller_spec.rb b/spec/controllers/spree/admin/return_authorizations_controller_spec.rb
index 7c19cfc7d3..aaf7bc81d6 100644
--- a/spec/controllers/spree/admin/return_authorizations_controller_spec.rb
+++ b/spec/controllers/spree/admin/return_authorizations_controller_spec.rb
@@ -23,11 +23,9 @@ module Spree
expect(return_authorization.amount.to_s).to eq "20.2"
expect(return_authorization.reason.to_s).to eq "broken"
- # Reset the test controller between requests
- reset_controller_environment
-
# Update return authorization
- spree_put :update, id: return_authorization.id,
+ spree_put :update, order_id: order.number,
+ id: return_authorization.id,
return_authorization: { amount: "10.2", reason: "half broken" }
expect(response).to redirect_to spree.admin_order_return_authorizations_url(order.number)
diff --git a/spec/support/controller_helper.rb b/spec/support/controller_helper.rb
index df64e2a438..622afe37f6 100644
--- a/spec/support/controller_helper.rb
+++ b/spec/support/controller_helper.rb
@@ -24,13 +24,5 @@ module OpenFoodNetwork
allow(controller).to receive_messages(spree_current_user: @enterprise_user)
end
-
- def reset_controller_environment
- # Rails 5.0 introduced a bug in controller tests (fixed in 5.2) where the controller's
- # environment is essentially cached if multiple requests are made in the same `it` block,
- # meaning subsequent requests will not be handled well. This resets the environment.
- # This edge case is quite rare though; normally we only do one request per test.
- @request.env.delete("RAW_POST_DATA")
- end
end
end
diff --git a/spec/system/admin/bulk_order_management_spec.rb b/spec/system/admin/bulk_order_management_spec.rb
index 12f71c40ce..4ae785c594 100644
--- a/spec/system/admin/bulk_order_management_spec.rb
+++ b/spec/system/admin/bulk_order_management_spec.rb
@@ -127,6 +127,81 @@ describe '
end
end
+ context "searching" do
+ let!(:a1) { create(:address, phone: "1234567890", firstname: "Willy", lastname: "Wonka") }
+ let!(:o1) {
+ create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
+ completed_at: Time.zone.now, bill_address: a1)
+ }
+ let!(:o2) {
+ create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
+ completed_at: Time.zone.now )
+ }
+ let!(:s1) { create(:supplier_enterprise) }
+ let!(:s2) { create(:supplier_enterprise) }
+ let!(:li1) { create(:line_item_with_shipment, order: o1, product: create(:product, supplier: s1)) }
+ let!(:li2) { create(:line_item_with_shipment, order: o2, product: create(:product, supplier: s2)) }
+ let!(:li3) { create(:line_item_with_shipment, order: o2, product: create(:product, supplier: s2)) }
+
+ before :each do
+ visit_bulk_order_management
+ end
+
+ it "by product name" do
+ fill_in "quick_filter", with: li1.product.name
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+ end
+
+ it "by supplier name" do
+ fill_in "quick_filter", with: li1.product.supplier.name
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+ end
+
+ it "by email" do
+ fill_in "quick_filter", with: o1.email
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+ end
+
+ it "by order number" do
+ fill_in "quick_filter", with: o1.number
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+ end
+
+ it "by phone number" do
+ fill_in "quick_filter", with: o1.bill_address.phone
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+ end
+
+ it "by distributor name" do
+ fill_in "quick_filter", with: o1.distributor.name
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+ end
+
+ it "by customer name" do
+ fill_in "quick_filter", with: o1.bill_address.firstname
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+
+ fill_in "quick_filter", with: o1.bill_address.lastname
+ page.find('.filter-actions .button.icon-search').click
+
+ expect_line_items_results [li1], [li2, li3]
+ end
+ end
+
context "displaying individual columns" do
let!(:o1) {
create(:order_with_distributor, state: 'complete', shipment_state: 'ready', completed_at: Time.zone.now,
@@ -602,38 +677,6 @@ describe '
end
end
- context "using quick search" do
- let!(:o1) {
- create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
- completed_at: Time.zone.now )
- }
- let!(:o2) {
- create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
- completed_at: Time.zone.now )
- }
- let!(:o3) {
- create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
- completed_at: Time.zone.now )
- }
- let!(:li1) { create(:line_item_with_shipment, order: o1 ) }
- let!(:li2) { create(:line_item_with_shipment, order: o2 ) }
- let!(:li3) { create(:line_item_with_shipment, order: o3 ) }
-
- before :each do
- visit_bulk_order_management
- end
-
- it "filters line items based on their attributes and the contents of the quick search input" do
- expect(page).to have_selector "tr#li_#{li1.id}"
- expect(page).to have_selector "tr#li_#{li2.id}"
- expect(page).to have_selector "tr#li_#{li3.id}"
- fill_in "quick_search", with: o1.email
- expect(page).to have_selector "tr#li_#{li1.id}"
- expect(page).to have_no_selector "tr#li_#{li2.id}"
- expect(page).to have_no_selector "tr#li_#{li3.id}"
- end
- end
-
context "using date restriction controls" do
let!(:o1) {
create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
@@ -825,39 +868,6 @@ describe '
end
end
end
-
- context "when a filter has been applied" do
- it "only toggles checkboxes which are in filteredLineItems" do
- fill_in "quick_search", with: o1.number
- expect(page).to have_no_selector "tr#li_#{li2.id}"
- check "toggle_bulk"
- fill_in "quick_search", with: ''
- wait_until { request_monitor_finished 'LineItemsCtrl' }
- expect(find("tr#li_#{li1.id} input[type='checkbox'][name='bulk']").checked?).to be true
- expect(find("tr#li_#{li2.id} input[type='checkbox'][name='bulk']").checked?).to be false
- expect(find("input[type='checkbox'][name='toggle_bulk']").checked?).to be false
- end
-
- it "only applies the delete action to filteredLineItems" do
- check "toggle_bulk"
- fill_in "quick_search", with: o1.number
- expect(page).to have_no_selector "tr#li_#{li2.id}"
-
- find("div#bulk-actions-dropdown").click
- find("div#bulk-actions-dropdown div.menu_item", text: "Delete Selected" ).click
-
- within ".modal" do
- click_on("OK")
- end
-
- expect(page).to have_no_selector "tr#li_#{li1.id}"
- expect(page).to have_selector "#quick_search"
- fill_in "quick_search", with: ''
- wait_until { request_monitor_finished 'LineItemsCtrl' }
- expect(page).to have_selector "tr#li_#{li2.id}"
- expect(page).to have_no_selector "tr#li_#{li1.id}"
- end
- end
end
context "using action buttons" do
@@ -1101,4 +1111,14 @@ describe '
expect(page).to have_selector "tr#li_#{li1.id}"
expect(page).to have_selector "tr#li_#{li2.id}"
end
+
+ def expect_line_items_results(line_items, excluded_line_items)
+ expect(page).to have_text "Loading orders"
+ line_items.each do |li|
+ expect(page).to have_selector "tr#li_#{li.id}"
+ end
+ excluded_line_items.each do |li|
+ expect(page).to have_no_selector "tr#li_#{li.id}"
+ end
+ end
end
diff --git a/yarn.lock b/yarn.lock
index 19187ab282..28a7a129b5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1397,17 +1397,17 @@
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
-"@floating-ui/core@^1.2.2":
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.2.2.tgz#66f62cf1b7de2ed23a09c101808536e68caffaec"
- integrity sha512-FaO9KVLFnxknZaGWGmNtjD2CVFuc0u4yeGEofoyXO2wgRA7fLtkngT6UB0vtWQWuhH3iMTZZ/Y89CMeyGfn8pA==
-
-"@floating-ui/dom@^1.2.3":
+"@floating-ui/core@^1.2.3":
version "1.2.3"
- resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.2.3.tgz#8dc6fbf799fbb5c29f705b54bdd51f3ab0ee03a2"
- integrity sha512-lK9cZUrHSJLMVAdCvDqs6Ug8gr0wmqksYiaoj/bxj2gweRQkSuhg2/V6Jswz2KiQ0RAULbqw1oQDJIMpQ5GfGA==
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.2.3.tgz#327a2c11e6570b7d64368ad74a3ac12786c9f751"
+ integrity sha512-upVRtrNZuYNsw+EoxkiBFRPROnU8UTy/u/dZ9U0W14BlemPYODwhhxYXSR2Y9xOnvr1XtptJRWx7gL8Te1qaog==
+
+"@floating-ui/dom@^1.2.4":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.2.4.tgz#e2eb2674f57fc182c425587e48ea43e336f4b8f8"
+ integrity sha512-4+k+BLhtWj+peCU60gp0+rHeR8+Ohqx6kjJf/lHMnJ8JD5Qj6jytcq1+SZzRwD7rvHKRhR7TDiWWddrNrfwQLg==
dependencies:
- "@floating-ui/core" "^1.2.2"
+ "@floating-ui/core" "^1.2.3"
"@hotwired/stimulus-webpack-helpers@^1.0.0":
version "1.0.1"