Merge branch 'openfoodfoundation:master' into 9978

This commit is contained in:
vviekk
2023-03-16 14:30:26 +05:30
committed by GitHub
14 changed files with 250 additions and 164 deletions

View File

@@ -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)

View File

@@ -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",

View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -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
&nbsp;
.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 }}

View File

@@ -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. <br />Are you sure you want to proceed?"
other: "This will delete %{count} line items from the order.<br />Are you sure you want to proceed?"
resend_user_email_confirmation:
resend: "Resend"
sending: "Resend..."

View File

@@ -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: "<b>Les modifications apportées ici seront temporaires</b>et peuvent changer à la prochaine mise à jour. <br> 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<a href='https://github.com/openfoodfoundation/ofn-install'> ofn-install </a>."
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

View File

@@ -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",

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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"