spree_core 6.0.0.beta4 → 6.0.0.rc2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/app/helpers/spree/images_helper.rb +0 -57
- data/app/jobs/spree/base_job.rb +21 -0
- data/app/jobs/spree/carts/reap_expired_job.rb +2 -2
- data/app/jobs/spree/collections/regenerate_time_based_job.rb +6 -3
- data/app/jobs/spree/orders/finalize_stale_drafts_job.rb +8 -5
- data/app/jobs/spree/payments/cancel_unused_sessions_job.rb +61 -0
- data/app/jobs/spree/search_provider/index_job.rb +4 -0
- data/app/jobs/spree/seller_payouts/sweep_seller_job.rb +2 -0
- data/app/jobs/spree/uploads/purge_unattached_job.rb +49 -0
- data/app/mailers/spree/admin_user_mailer.rb +4 -19
- data/app/mailers/spree/base_mailer.rb +97 -13
- data/app/mailers/spree/email_template_mailer.rb +27 -0
- data/app/mailers/spree/export_mailer.rb +3 -4
- data/app/mailers/spree/import_mailer.rb +3 -4
- data/app/mailers/spree/invitation_mailer.rb +24 -7
- data/app/mailers/spree/seller_user_mailer.rb +4 -16
- data/app/mailers/spree/webhook_mailer.rb +2 -2
- data/app/models/concerns/spree/acted_by.rb +1 -1
- data/app/models/concerns/spree/admin_user_methods.rb +15 -1
- data/app/models/concerns/spree/api_typed.rb +91 -0
- data/app/models/concerns/spree/calculated_adjustments.rb +41 -13
- data/app/models/concerns/spree/calculator/currency_amounts.rb +1 -1
- data/app/models/concerns/spree/calculator/tiers.rb +63 -0
- data/app/models/concerns/spree/canonical_decimals.rb +61 -0
- data/app/models/concerns/spree/customer_methods.rb +23 -18
- data/app/models/concerns/spree/derived_number.rb +11 -13
- data/app/models/concerns/spree/email_template_identity.rb +52 -0
- data/app/models/concerns/spree/parameterizable_name.rb +2 -0
- data/app/models/concerns/spree/payment_session_transitions.rb +8 -2
- data/app/models/concerns/spree/post_sale/taxation.rb +54 -0
- data/app/models/concerns/spree/post_sale/taxed_line.rb +51 -0
- data/app/models/concerns/spree/preference_schema/json_schema.rb +139 -0
- data/app/models/concerns/spree/preference_schema.rb +62 -32
- data/app/models/concerns/spree/product_scopes.rb +16 -2
- data/app/models/concerns/spree/provider_listing.rb +41 -0
- data/app/models/concerns/spree/publishable.rb +82 -14
- data/app/models/concerns/spree/purchase/addresses.rb +23 -10
- data/app/models/concerns/spree/purchase/currency.rb +1 -1
- data/app/models/concerns/spree/purchase/deprecated_aliases.rb +87 -0
- data/app/models/concerns/spree/purchase/gift_cards.rb +10 -4
- data/app/models/concerns/spree/purchase/locale.rb +1 -1
- data/app/models/concerns/spree/purchase/payment_processing.rb +8 -4
- data/app/models/concerns/spree/purchase/purchase_order.rb +9 -4
- data/app/models/concerns/spree/purchase/store_credits.rb +36 -1
- data/app/models/concerns/spree/purchase/totals.rb +49 -8
- data/app/models/concerns/spree/ransackable_attributes.rb +46 -0
- data/app/models/concerns/spree/receivable.rb +1 -1
- data/app/models/concerns/spree/searchable.rb +0 -4
- data/app/models/concerns/spree/secret_preferences.rb +59 -0
- data/app/models/concerns/spree/signed_id_attachments.rb +54 -0
- data/app/models/concerns/spree/single_store_resource.rb +1 -1
- data/app/models/concerns/spree/stores/email_branding.rb +32 -0
- data/app/models/concerns/spree/stores/markets.rb +5 -2
- data/app/models/concerns/spree/type_labels.rb +38 -0
- data/app/models/concerns/spree/typed_adjustment_line.rb +5 -6
- data/app/models/concerns/spree/typed_associations.rb +12 -18
- data/app/models/concerns/spree/vat_price_calculation.rb +5 -6
- data/app/models/spree/address.rb +12 -2
- data/app/models/spree/adjusters/largest_remainder.rb +14 -1
- data/app/models/spree/adjusters/promotion.rb +4 -19
- data/app/models/spree/allowed_origin.rb +3 -1
- data/app/models/spree/api_key.rb +5 -6
- data/app/models/spree/authentication/strategies/oidc_strategy.rb +5 -5
- data/app/models/spree/base.rb +99 -22
- data/app/models/spree/calculator/flat_percent_item_total.rb +2 -4
- data/app/models/spree/calculator/flat_rate.rb +3 -5
- data/app/models/spree/calculator/flexi_rate.rb +4 -6
- data/app/models/spree/calculator/percent_on_line_item.rb +2 -2
- data/app/models/spree/calculator/price_sack.rb +5 -7
- data/app/models/spree/calculator/shipping/digital_delivery.rb +3 -5
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +7 -7
- data/app/models/spree/calculator/shipping/flat_rate.rb +5 -7
- data/app/models/spree/calculator/shipping/flexi_rate.rb +4 -6
- data/app/models/spree/calculator/shipping/per_item.rb +3 -5
- data/app/models/spree/calculator/shipping/price_sack.rb +5 -7
- data/app/models/spree/calculator/tiered_flat_rate.rb +7 -24
- data/app/models/spree/calculator/tiered_percent.rb +7 -25
- data/app/models/spree/cart.rb +78 -18
- data/app/models/spree/catalog.rb +1 -0
- data/app/models/spree/catalog_price.rb +0 -7
- data/app/models/spree/catalog_price_tier.rb +0 -8
- data/app/models/spree/category.rb +3 -1
- data/app/models/spree/channel/gating.rb +3 -2
- data/app/models/spree/channel.rb +6 -4
- data/app/models/spree/claim.rb +22 -1
- data/app/models/spree/claim_line_item.rb +41 -6
- data/app/models/spree/collection.rb +2 -1
- data/app/models/spree/collection_rule.rb +5 -21
- data/app/models/spree/commission_line.rb +1 -1
- data/app/models/spree/commission_rate.rb +7 -4
- data/app/models/spree/commission_rate_value.rb +1 -1
- data/app/models/spree/commission_rule.rb +4 -11
- data/app/models/spree/commission_rules/category_rule.rb +2 -5
- data/app/models/spree/commission_rules/item_total_rule.rb +2 -2
- data/app/models/spree/commission_rules/product_rule.rb +1 -1
- data/app/models/spree/commission_rules/seller_rule.rb +2 -5
- data/app/models/spree/company.rb +1 -0
- data/app/models/spree/company_invitation.rb +1 -0
- data/app/models/spree/consent_record.rb +0 -1
- data/app/models/spree/credit_card.rb +1 -1
- data/app/models/spree/current.rb +23 -0
- data/app/models/spree/custom_field.rb +2 -2
- data/app/models/spree/custom_field_definition.rb +20 -35
- data/app/models/spree/custom_fields/boolean.rb +1 -1
- data/app/models/spree/custom_fields/json.rb +1 -1
- data/app/models/spree/customer_group.rb +1 -0
- data/app/models/spree/data_feed/google.rb +0 -2
- data/app/models/spree/data_request.rb +2 -1
- data/app/models/spree/delivery_method.rb +36 -14
- data/app/models/spree/delivery_method_rule.rb +4 -11
- data/app/models/spree/delivery_method_rules/channel_rule.rb +2 -5
- data/app/models/spree/delivery_method_rules/item_total_rule.rb +2 -2
- data/app/models/spree/delivery_profile.rb +1 -0
- data/app/models/spree/delivery_rate.rb +7 -8
- data/app/models/spree/delivery_rate_provider/base.rb +1 -0
- data/app/models/spree/delivery_zone.rb +1 -2
- data/app/models/spree/delivery_zone_member.rb +4 -4
- data/app/models/spree/digital_asset.rb +7 -0
- data/app/models/spree/digital_asset_provider/base.rb +2 -0
- data/app/models/spree/digital_link.rb +2 -5
- data/app/models/spree/discount.rb +1 -1
- data/app/models/spree/email_template.rb +25 -0
- data/app/models/spree/email_template_draft.rb +13 -0
- data/app/models/spree/email_template_revision.rb +17 -0
- data/app/models/spree/email_templates/entry.rb +118 -0
- data/app/models/spree/email_templates/sample_record.rb +16 -0
- data/app/models/spree/emails/branding.rb +80 -0
- data/app/models/spree/exchange.rb +16 -1
- data/app/models/spree/exchange_line_item.rb +121 -5
- data/app/models/spree/export.rb +0 -1
- data/app/models/spree/exports/products.rb +10 -1
- data/app/models/spree/exports/report.rb +3 -3
- data/app/models/spree/fee.rb +4 -2
- data/app/models/spree/file_upload.rb +155 -0
- data/app/models/spree/fulfillment.rb +66 -30
- data/app/models/spree/fulfillment_changer.rb +2 -2
- data/app/models/spree/fulfillment_group.rb +6 -1
- data/app/models/spree/fulfillment_item.rb +0 -4
- data/app/models/spree/fulfillment_provider/base.rb +1 -0
- data/app/models/spree/gateway/bogus.rb +6 -0
- data/app/models/spree/gateway/custom_payment_source_method.rb +5 -0
- data/app/models/spree/gateway.rb +6 -2
- data/app/models/spree/gift_card.rb +18 -8
- data/app/models/spree/gift_card_batch.rb +3 -5
- data/app/models/spree/import.rb +5 -7
- data/app/models/spree/import_mapping.rb +1 -2
- data/app/models/spree/import_row.rb +2 -2
- data/app/models/spree/import_schemas/products.rb +1 -0
- data/app/models/spree/integration.rb +9 -19
- data/app/models/spree/invitation.rb +5 -5
- data/app/models/spree/line_item.rb +15 -4
- data/app/models/spree/locale.rb +11 -8
- data/app/models/spree/market.rb +8 -2
- data/app/models/spree/media.rb +1 -9
- data/app/models/spree/newsletter_subscriber.rb +4 -0
- data/app/models/spree/option_type.rb +2 -1
- data/app/models/spree/option_value.rb +2 -1
- data/app/models/spree/order.rb +60 -142
- data/app/models/spree/order_group.rb +18 -4
- data/app/models/spree/order_inventory.rb +10 -5
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_routing/has_strategy_preference.rb +1 -1
- data/app/models/spree/order_routing/strategy/base.rb +4 -2
- data/app/models/spree/order_routing/strategy/rules.rb +1 -1
- data/app/models/spree/order_routing_rule.rb +6 -22
- data/app/models/spree/package_type.rb +2 -2
- data/app/models/spree/payment/gateway_options.rb +15 -53
- data/app/models/spree/payment/processing.rb +2 -4
- data/app/models/spree/payment.rb +21 -13
- data/app/models/spree/payment_method/check.rb +2 -0
- data/app/models/spree/payment_method/session_instrumentation.rb +1 -0
- data/app/models/spree/payment_method/store_credit.rb +15 -13
- data/app/models/spree/payment_method.rb +78 -6
- data/app/models/spree/payment_session.rb +5 -1
- data/app/models/spree/payment_setup_session.rb +1 -0
- data/app/models/spree/payout_provider/base.rb +3 -1
- data/app/models/spree/pickup_point_provider/base.rb +2 -0
- data/app/models/spree/policy.rb +1 -0
- data/app/models/spree/price.rb +17 -14
- data/app/models/spree/price_adjustment_tier.rb +4 -0
- data/app/models/spree/price_list.rb +14 -9
- data/app/models/spree/price_rules/channel_rule.rb +3 -6
- data/app/models/spree/price_rules/customer_group_rule.rb +3 -6
- data/app/models/spree/price_rules/market_rule.rb +2 -5
- data/app/models/spree/price_rules/user_rule.rb +1 -3
- data/app/models/spree/product/channels.rb +9 -2
- data/app/models/spree/product.rb +54 -30
- data/app/models/spree/product_submission.rb +0 -12
- data/app/models/spree/product_type.rb +1 -1
- data/app/models/spree/promotion/actions/create_line_items.rb +28 -18
- data/app/models/spree/promotion/rules/category.rb +1 -5
- data/app/models/spree/promotion/rules/channel.rb +2 -9
- data/app/models/spree/promotion/rules/country.rb +3 -8
- data/app/models/spree/promotion/rules/currency.rb +1 -5
- data/app/models/spree/promotion/rules/customer_group.rb +2 -9
- data/app/models/spree/promotion/rules/first_order.rb +0 -4
- data/app/models/spree/promotion/rules/item_total.rb +6 -10
- data/app/models/spree/promotion/rules/market.rb +2 -9
- data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -4
- data/app/models/spree/promotion/rules/option_value.rb +2 -6
- data/app/models/spree/promotion/rules/product.rb +1 -5
- data/app/models/spree/promotion/rules/user.rb +0 -4
- data/app/models/spree/promotion/rules/user_logged_in.rb +0 -4
- data/app/models/spree/promotion.rb +36 -6
- data/app/models/spree/promotion_action.rb +7 -14
- data/app/models/spree/promotion_action_line_item.rb +1 -1
- data/app/models/spree/promotion_handler/coupon.rb +59 -27
- data/app/models/spree/promotion_rule.rb +7 -14
- data/app/models/spree/purchase_order.rb +3 -0
- data/app/models/spree/quantity_rule.rb +1 -1
- data/app/models/spree/refund.rb +41 -18
- data/app/models/spree/return.rb +31 -2
- data/app/models/spree/return_line_item.rb +65 -14
- data/app/models/spree/role.rb +7 -7
- data/app/models/spree/saved_report.rb +2 -1
- data/app/models/spree/search_provider/base.rb +4 -0
- data/app/models/spree/seller.rb +10 -2
- data/app/models/spree/seller_payout.rb +8 -0
- data/app/models/spree/seller_requirement.rb +5 -12
- data/app/models/spree/seller_requirement_custom_field.rb +1 -2
- data/app/models/spree/seller_requirement_submission.rb +3 -2
- data/app/models/spree/seller_requirements/accept_terms.rb +2 -3
- data/app/models/spree/seller_transfer.rb +6 -0
- data/app/models/spree/shipping_label.rb +2 -0
- data/app/models/spree/stock/availability_validator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/packer.rb +2 -2
- data/app/models/spree/stock/splitter/weight.rb +1 -1
- data/app/models/spree/stock_level/custom_events.rb +6 -0
- data/app/models/spree/stock_level.rb +3 -1
- data/app/models/spree/stock_location.rb +1 -0
- data/app/models/spree/stock_movement.rb +1 -1
- data/app/models/spree/stock_receipt_item.rb +1 -1
- data/app/models/spree/stock_reservation.rb +2 -2
- data/app/models/spree/stock_transfer.rb +6 -2
- data/app/models/spree/store.rb +70 -19
- data/app/models/spree/store_credit.rb +13 -13
- data/app/models/spree/store_credit_event.rb +5 -5
- data/app/models/spree/supplier.rb +1 -0
- data/app/models/spree/tax_category.rb +1 -0
- data/app/models/spree/tax_exemption_certificate.rb +3 -0
- data/app/models/spree/tax_identifier.rb +3 -1
- data/app/models/spree/tax_line.rb +53 -3
- data/app/models/spree/tax_provider/base.rb +71 -14
- data/app/models/spree/tax_provider/internal.rb +70 -41
- data/app/models/spree/tax_provider/recorded_share.rb +114 -0
- data/app/models/spree/tax_rate.rb +30 -8
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/taxonomy.rb +0 -1
- data/app/models/spree/update_status.rb +25 -0
- data/app/models/spree/variant.rb +10 -12
- data/app/models/spree/variant_media.rb +1 -1
- data/app/models/spree/webhook_delivery.rb +1 -0
- data/app/models/spree/webhook_endpoint.rb +46 -13
- data/app/models/spree/wishlist.rb +1 -6
- data/app/models/spree/wishlist_item/custom_events.rb +6 -0
- data/app/presenters/spree/csv/customer_presenter.rb +1 -1
- data/app/presenters/spree/csv/newsletter_subscriber_presenter.rb +1 -1
- data/app/presenters/spree/csv/order_line_item_presenter.rb +10 -6
- data/app/presenters/spree/csv/price_list_price_presenter.rb +3 -8
- data/app/presenters/spree/csv/product_variant_presenter.rb +59 -20
- data/app/presenters/spree/csv/purchase_order_item_presenter.rb +1 -3
- data/app/serializers/spree/emails/base_serializer.rb +14 -0
- data/app/serializers/spree/emails/export_serializer.rb +13 -0
- data/app/serializers/spree/emails/import_serializer.rb +19 -0
- data/app/serializers/spree/emails/invitation_serializer.rb +28 -0
- data/app/serializers/spree/emails/store_serializer.rb +31 -0
- data/app/serializers/spree/emails/user_serializer.rb +12 -0
- data/app/serializers/spree/emails/webhook_endpoint_serializer.rb +16 -0
- data/app/services/spree/carts/create.rb +8 -2
- data/app/services/spree/carts/destroy.rb +2 -2
- data/app/services/spree/carts/remove_out_of_stock_items.rb +2 -2
- data/app/services/spree/carts/split_by_seller.rb +1 -1
- data/app/services/spree/carts/update.rb +22 -8
- data/app/services/spree/catalogs/set_product_terms.rb +1 -1
- data/app/services/spree/categories/add_products.rb +13 -31
- data/app/services/spree/categories/remove_products.rb +12 -51
- data/app/services/spree/checkout/advance.rb +1 -4
- data/app/services/spree/collections/add_products.rb +10 -23
- data/app/services/spree/collections/remove_products.rb +7 -43
- data/app/services/spree/coupon_codes/bulk_generate.rb +8 -14
- data/app/services/spree/data_requests/create.rb +1 -1
- data/app/services/spree/deliveries/destroy.rb +2 -2
- data/app/services/spree/email_templates/check.rb +58 -0
- data/app/services/spree/email_templates/no_sample_record.rb +7 -0
- data/app/services/spree/email_templates/preview.rb +99 -0
- data/app/services/spree/emails/file_system.rb +23 -0
- data/app/services/spree/emails/filters.rb +84 -0
- data/app/services/spree/emails/liquid_context.rb +48 -0
- data/app/services/spree/emails/rendered_email.rb +14 -0
- data/app/services/spree/emails/renderer.rb +125 -0
- data/app/services/spree/emails/template.rb +51 -0
- data/app/services/spree/emails/template_data.rb +23 -0
- data/app/services/spree/emails/template_resolver.rb +109 -0
- data/app/services/spree/emails/text_converter.rb +72 -0
- data/app/services/spree/emails/translation_inliner.rb +134 -0
- data/app/services/spree/imports/row_processors/price_list_price.rb +10 -10
- data/app/services/spree/imports/row_processors/product_variant.rb +77 -34
- data/app/services/spree/imports/row_processors/purchase_order.rb +13 -13
- data/app/services/spree/locales.rb +43 -10
- data/app/services/spree/newsletter/subscribe.rb +8 -12
- data/app/services/spree/orders/build_fulfillments.rb +3 -2
- data/app/services/spree/orders/create.rb +5 -4
- data/app/services/spree/orders/discounts/create.rb +14 -11
- data/app/services/spree/orders/discounts/destroy.rb +1 -0
- data/app/services/spree/orders/discounts/update.rb +1 -0
- data/app/services/spree/orders/fees/create.rb +1 -0
- data/app/services/spree/orders/fees/destroy.rb +1 -0
- data/app/services/spree/orders/fees/update.rb +1 -0
- data/app/services/spree/orders/remove_line_item.rb +13 -3
- data/app/services/spree/orders/update.rb +10 -6
- data/app/services/spree/orders/update_item.rb +6 -3
- data/app/services/spree/orders/update_statuses.rb +3 -1
- data/app/services/spree/prices/bulk_upsert.rb +32 -25
- data/app/services/spree/product_memberships.rb +61 -0
- data/app/services/spree/returns/eligibility_validator.rb +1 -1
- data/app/services/spree/search_provider/custom_field_schema.rb +2 -2
- data/app/services/spree/seeds/commission_rates.rb +1 -1
- data/app/services/spree/seeds/digital_delivery.rb +1 -1
- data/app/services/spree/seeds/payment_methods.rb +2 -2
- data/app/services/spree/seeds/saved_reports.rb +3 -3
- data/app/services/spree/seeds/stores.rb +1 -1
- data/app/services/spree/sellers/requirements.rb +1 -2
- data/app/services/spree/shipping_labels/confirm_refund.rb +1 -1
- data/app/services/spree/shipping_labels/store_file.rb +3 -3
- data/app/services/spree/stock_levels/correct.rb +3 -3
- data/app/services/spree/stock_reservations/reserve.rb +2 -3
- data/app/services/spree/store_credits/apply.rb +15 -13
- data/app/services/spree/stores/provision_defaults.rb +23 -25
- data/app/services/spree/update_check.rb +160 -0
- data/app/services/spree/uploads/assign_stores.rb +92 -0
- data/app/subscribers/spree/seller_onboarding_subscriber.rb +1 -1
- data/app/validators/spree/attachment_content_type_validator.rb +19 -2
- data/app/validators/spree/locale_codes_validator.rb +22 -0
- data/app/views/layouts/spree/base_mailer.html.erb +2 -43
- data/app/views/layouts/spree/base_mailer.liquid +79 -0
- data/app/views/spree/admin_user_mailer/password_reset_email.liquid +14 -0
- data/app/views/spree/export_mailer/export_done.liquid +12 -0
- data/app/views/spree/import_mailer/import_done.liquid +15 -0
- data/app/views/spree/invitation_mailer/invitation_accepted.liquid +9 -0
- data/app/views/spree/invitation_mailer/invitation_email.liquid +13 -0
- data/app/views/spree/seller_user_mailer/password_reset_email.liquid +14 -0
- data/app/views/spree/shared/_mailer_button.html.erb +4 -5
- data/app/views/spree/shared/_mailer_hero.html.erb +6 -5
- data/app/views/spree/shared/_summary_row.liquid +8 -0
- data/app/views/spree/webhook_mailer/endpoint_disabled.liquid +21 -0
- data/app/workflows/spree/carts/add_item.rb +4 -4
- data/app/workflows/spree/carts/complete.rb +13 -3
- data/app/workflows/spree/carts/merge.rb +1 -1
- data/app/workflows/spree/carts/recalculate_totals.rb +5 -0
- data/app/workflows/spree/carts/upsert_items.rb +18 -9
- data/app/workflows/spree/claims/approve.rb +5 -22
- data/app/workflows/spree/claims/cancel.rb +5 -21
- data/app/workflows/spree/claims/create.rb +15 -0
- data/app/workflows/spree/claims/deny.rb +7 -0
- data/app/workflows/spree/claims/resolve.rb +34 -31
- data/app/workflows/spree/customers/anonymize.rb +3 -4
- data/app/workflows/spree/customers/create.rb +1 -1
- data/app/workflows/spree/data_requests/fulfill.rb +2 -2
- data/app/workflows/spree/deliveries/update_tracking.rb +1 -1
- data/app/workflows/spree/email_templates/discard_draft.rb +20 -0
- data/app/workflows/spree/email_templates/publish.rb +70 -0
- data/app/workflows/spree/email_templates/restore_revision.rb +33 -0
- data/app/workflows/spree/email_templates/revert.rb +29 -0
- data/app/workflows/spree/email_templates/save_draft.rb +85 -0
- data/app/workflows/spree/exchanges/approve.rb +5 -22
- data/app/workflows/spree/exchanges/cancel.rb +5 -21
- data/app/workflows/spree/exchanges/create.rb +6 -0
- data/app/workflows/spree/exchanges/fulfill.rb +75 -51
- data/app/workflows/spree/exchanges/receive.rb +6 -65
- data/app/workflows/spree/fulfillments/cancel.rb +1 -1
- data/app/workflows/spree/fulfillments/create.rb +53 -49
- data/app/workflows/spree/fulfillments/fulfill.rb +23 -27
- data/app/workflows/spree/fulfillments/mark_delivered.rb +1 -1
- data/app/workflows/spree/fulfillments/replacements.rb +59 -0
- data/app/workflows/spree/gift_cards/apply.rb +2 -2
- data/app/workflows/spree/orders/add_item.rb +5 -1
- data/app/workflows/spree/orders/cancel.rb +3 -3
- data/app/workflows/spree/orders/complete.rb +16 -8
- data/app/workflows/spree/payments/capture.rb +20 -5
- data/app/workflows/spree/payments/process.rb +5 -3
- data/app/workflows/spree/post_sale/approval.rb +35 -0
- data/app/workflows/spree/post_sale/cancellation.rb +44 -0
- data/app/workflows/spree/post_sale/receipt.rb +92 -0
- data/app/workflows/spree/price_lists/update.rb +4 -4
- data/app/workflows/spree/products/nested_attributes.rb +1 -1
- data/app/workflows/spree/purchase_orders/cancel.rb +1 -1
- data/app/workflows/spree/purchase_orders/close.rb +3 -31
- data/app/workflows/spree/purchase_orders/create.rb +3 -1
- data/app/workflows/spree/purchase_orders/mark_draft.rb +2 -2
- data/app/workflows/spree/purchase_orders/mark_ordered.rb +2 -2
- data/app/workflows/spree/purchase_orders/receive.rb +1 -1
- data/app/workflows/spree/purchase_orders/update.rb +5 -34
- data/app/workflows/spree/receivables/closing_short.rb +46 -0
- data/app/workflows/spree/receivables/draft_editing.rb +48 -0
- data/app/workflows/spree/refunds/create.rb +5 -2
- data/app/workflows/spree/refunds/order_payments.rb +14 -2
- data/app/workflows/spree/refunds/tax_credit.rb +67 -0
- data/app/workflows/spree/returns/approve.rb +5 -22
- data/app/workflows/spree/returns/cancel.rb +5 -22
- data/app/workflows/spree/returns/create.rb +8 -0
- data/app/workflows/spree/returns/receive.rb +5 -76
- data/app/workflows/spree/returns/refund.rb +31 -8
- data/app/workflows/spree/seller_requirement_submissions/create.rb +1 -2
- data/app/workflows/spree/seller_transfers/reverse.rb +28 -1
- data/app/workflows/spree/shipping_labels/purchase.rb +8 -8
- data/app/workflows/spree/shipping_labels/record.rb +7 -7
- data/app/workflows/spree/shipping_labels/refund.rb +2 -2
- data/app/workflows/spree/stock_receipts/recording.rb +4 -4
- data/app/workflows/spree/stock_transfers/cancel.rb +2 -2
- data/app/workflows/spree/stock_transfers/close.rb +3 -30
- data/app/workflows/spree/stock_transfers/create.rb +3 -1
- data/app/workflows/spree/stock_transfers/mark_draft.rb +1 -1
- data/app/workflows/spree/stock_transfers/mark_in_transit.rb +3 -3
- data/app/workflows/spree/stock_transfers/mark_ready.rb +2 -2
- data/app/workflows/spree/stock_transfers/receive.rb +1 -1
- data/app/workflows/spree/stock_transfers/update.rb +5 -33
- data/config/currency_exponents.json +180 -0
- data/config/i18n-tasks.yml +32 -18
- data/config/initializers/alba.rb +7 -0
- data/config/language_names.csv +264 -0
- data/config/locales/ar.yml +811 -0
- data/config/locales/be.yml +855 -0
- data/config/locales/bg.yml +723 -0
- data/config/locales/ca.yml +689 -0
- data/config/locales/content_locales.rb +9 -0
- data/config/locales/cs.yml +855 -0
- data/config/locales/da.yml +771 -0
- data/config/locales/de-CH.yml +248 -0
- data/config/locales/de.yml +835 -0
- data/config/locales/el.yml +769 -0
- data/config/locales/en.yml +47 -505
- data/config/locales/es-CL.yml +301 -0
- data/config/locales/es-EC.yml +186 -0
- data/config/locales/es-MX.yml +334 -0
- data/config/locales/es.yml +831 -0
- data/config/locales/et.yml +644 -0
- data/config/locales/fa.yml +709 -0
- data/config/locales/fi.yml +771 -0
- data/config/locales/fr.yml +830 -0
- data/config/locales/hu.yml +751 -0
- data/config/locales/id.yml +756 -0
- data/config/locales/it.yml +833 -0
- data/config/locales/ja.yml +726 -0
- data/config/locales/km.yml +759 -0
- data/config/locales/ko.yml +575 -0
- data/config/locales/ku.yml +753 -0
- data/config/locales/lt.yml +821 -0
- data/config/locales/lv.yml +685 -0
- data/config/locales/nb.yml +824 -0
- data/config/locales/ne.yml +823 -0
- data/config/locales/nl.yml +826 -0
- data/config/locales/pl.yml +835 -0
- data/config/locales/pt-BR.yml +547 -0
- data/config/locales/pt.yml +636 -0
- data/config/locales/ro.yml +750 -0
- data/config/locales/ru.yml +834 -0
- data/config/locales/sk.yml +680 -0
- data/config/locales/sl-SI.yml +600 -0
- data/config/locales/sv.yml +827 -0
- data/config/locales/th.yml +745 -0
- data/config/locales/tr.yml +777 -0
- data/config/locales/uk.yml +836 -0
- data/config/locales/vi.yml +768 -0
- data/config/locales/zh-CN.yml +786 -0
- data/config/locales/zh-TW.yml +834 -0
- data/db/migrate/20260925000001_add_replacement_to_spree_fulfillment_items.rb +5 -0
- data/db/migrate/20261001000001_add_post_sale_tax.rb +30 -0
- data/db/migrate/20261001000001_convert_preferences_to_json.rb +166 -0
- data/db/migrate/20261001000001_create_spree_email_templates.rb +52 -0
- data/db/migrate/20261009000001_change_money_columns_to_decimal_19_4.rb +116 -0
- data/db/migrate/20261010000001_add_store_id_to_active_storage_blobs.rb +12 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +0 -9
- data/lib/generators/spree/dummy/templates/rails/test.rb +26 -0
- data/lib/spree/checkout/default_requirements.rb +37 -13
- data/lib/spree/core/configuration.rb +19 -1
- data/lib/spree/core/controller_helpers/store.rb +1 -1
- data/lib/spree/core/dependencies.rb +5 -4
- data/lib/spree/core/emails/escaped_output.rb +60 -0
- data/lib/spree/core/engine.rb +72 -165
- data/lib/spree/core/permissions/default_catalog.rb +5 -0
- data/lib/spree/core/preferences/invalid_preferences.rb +18 -0
- data/lib/spree/core/preferences/json_conversion.rb +186 -0
- data/lib/spree/core/preferences/masking.rb +55 -2
- data/lib/spree/core/preferences/preferable.rb +343 -103
- data/lib/spree/core/preferences/preferable_class_methods.rb +188 -136
- data/lib/spree/core/previews/import_preview.rb +10 -0
- data/lib/spree/core/ransack_configuration.rb +13 -2
- data/lib/spree/core/tax/provider_error.rb +37 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +91 -373
- data/lib/spree/emails/editable_templates.rb +82 -0
- data/lib/spree/events/catalog.rb +189 -0
- data/lib/spree/events.rb +21 -1
- data/lib/spree/hooks.rb +0 -17
- data/lib/spree/i18n.rb +32 -15
- data/lib/spree/iso_data.rb +7 -0
- data/lib/spree/localized_number.rb +6 -0
- data/lib/spree/migrations.rb +4 -1
- data/lib/spree/money.rb +196 -15
- data/lib/spree/reporting/adapters/base.rb +7 -6
- data/lib/spree/reporting/adapters/live.rb +6 -6
- data/lib/spree/reporting/default_vocabulary.rb +22 -10
- data/lib/spree/reporting/hydration.rb +1 -1
- data/lib/spree/reporting/query.rb +8 -0
- data/lib/spree/reporting/registry.rb +13 -0
- data/lib/spree/reporting/schema.rb +10 -10
- data/lib/spree/testing_support/editable_email_templates.rb +61 -0
- data/lib/spree/testing_support/emails.rb +22 -0
- data/lib/spree/testing_support/factories/cart_factory.rb +1 -1
- data/lib/spree/testing_support/factories/email_template_factory.rb +28 -0
- data/lib/spree/testing_support/factories/order_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +9 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
- data/lib/spree/testing_support/i18n.rb +3 -94
- data/lib/spree/testing_support/lifecycle_events.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +1 -1
- data/lib/spree/testing_support/preferences.rb +0 -5
- data/lib/spree/testing_support/store.rb +9 -1
- data/lib/spree/upgrades/5_6_to_6_0/manifest.yml +67 -1
- data/lib/spree/uploads.rb +101 -0
- data/lib/tasks/categories_and_collections.rake +3 -3
- data/lib/tasks/core.rake +6 -4
- data/lib/tasks/markets.rake +2 -1
- data/lib/tasks/media.rake +3 -3
- data/lib/tasks/migrate_users_to_customers.rake +23 -18
- data/lib/tasks/money.rake +46 -0
- data/lib/tasks/package_types.rake +1 -1
- data/lib/tasks/preferences_json.rake +101 -0
- data/lib/tasks/seller_sample_data.rake +2 -2
- data/lib/tasks/store_settings.rake +13 -6
- data/lib/tasks/typed_adjustments_migration.rake +1 -1
- data/lib/tasks/uploads.rake +19 -0
- data/spec/fixtures/mailer_views/custom_views_probe_mailer/welcome_email.html.erb +4 -0
- metadata +219 -46
- data/app/jobs/spree/products/touch_categories_job.rb +0 -15
- data/app/jobs/spree/products/touch_taxons_job.rb +0 -13
- data/app/models/acts_as_taggable_on/tag_decorator.rb +0 -10
- data/app/models/concerns/spree/has_image_alt_text.rb +0 -18
- data/app/models/spree/base_analytics_event_handler.rb +0 -54
- data/app/models/spree/invitations/store.rb +0 -6
- data/app/models/spree/preference.rb +0 -14
- data/app/models/spree/promotion_handler/page.rb +0 -25
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +0 -60
- data/app/models/spree/stock/differentiator.rb +0 -45
- data/app/presenters/spree/filters/options_presenter.rb +0 -47
- data/app/services/spree/carts/empty.rb +0 -42
- data/app/services/spree/country_to_timezone.rb +0 -273
- data/app/services/spree/payments/create.rb +0 -92
- data/app/validators/spree/url_validator.rb +0 -23
- data/app/views/active_storage/blobs/_blob.html.erb +0 -14
- data/app/views/spree/admin_user_mailer/password_reset_email.html.erb +0 -8
- data/app/views/spree/export_mailer/export_done.html.erb +0 -7
- data/app/views/spree/import_mailer/import_done.html.erb +0 -12
- data/app/views/spree/invitation_mailer/invitation_accepted.html.erb +0 -4
- data/app/views/spree/invitation_mailer/invitation_email.html.erb +0 -12
- data/app/views/spree/seller_user_mailer/password_reset_email.html.erb +0 -8
- data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -19
- data/app/views/spree/shared/_base_mailer_header.html.erb +0 -8
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -399
- data/app/views/spree/shared/_mailer_logo.html.erb +0 -41
- data/app/views/spree/shared/_purchased_items_styles.html.erb +0 -119
- data/app/views/spree/webhook_mailer/endpoint_disabled.html.erb +0 -51
- data/app/views/spree/webhook_mailer/endpoint_disabled.text.erb +0 -10
- data/app/workflows/spree/fulfillments/purchase_label.rb +0 -40
- data/app/workflows/spree/returns/purchase_label.rb +0 -32
- data/lib/spree/analytics.rb +0 -11
- data/lib/spree/core/preferences/scoped_store.rb +0 -34
- data/lib/spree/core/preferences/store.rb +0 -105
- data/lib/spree/translation_migrations.rb +0 -52
|
@@ -13,7 +13,7 @@ module Spree
|
|
|
13
13
|
attr_reader :shipping_label
|
|
14
14
|
|
|
15
15
|
# @param owner [Spree::Fulfillment, Spree::Return]
|
|
16
|
-
# @param file [ActionDispatch::Http::UploadedFile, String] the file, or a signed
|
|
16
|
+
# @param file [ActionDispatch::Http::UploadedFile, String] the file, or a signed id from POST /files
|
|
17
17
|
# @param tracking_number [String] the number printed on the label
|
|
18
18
|
# @param carrier [String, nil] free text; detected from the number when omitted
|
|
19
19
|
# @param service [String, nil]
|
|
@@ -41,15 +41,15 @@ module Spree
|
|
|
41
41
|
private
|
|
42
42
|
|
|
43
43
|
def ensure_recordable
|
|
44
|
-
failure(owner,
|
|
45
|
-
failure(owner,
|
|
46
|
-
failure(owner,
|
|
44
|
+
failure(owner, I18n.t('spree.shipping_labels.errors.already_purchased')) if owner.shipping_labels.active.exists?
|
|
45
|
+
failure(owner, I18n.t('spree.shipping_labels.errors.tracking_number_required')) if tracking_number.blank?
|
|
46
|
+
failure(owner, I18n.t('spree.shipping_labels.errors.file_required')) if file.blank?
|
|
47
47
|
|
|
48
48
|
case owner
|
|
49
49
|
when Spree::Fulfillment
|
|
50
|
-
failure(owner,
|
|
50
|
+
failure(owner, I18n.t('spree.fulfillments.errors.cannot_purchase_label')) if owner.canceled? || owner.delivered?
|
|
51
51
|
when Spree::Return
|
|
52
|
-
failure(owner,
|
|
52
|
+
failure(owner, I18n.t('spree.shipping_labels.errors.return_closed')) if owner.received? || owner.refunded? || owner.canceled?
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -69,7 +69,7 @@ module Spree
|
|
|
69
69
|
failure(@shipping_label) unless @shipping_label.save
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
#
|
|
72
|
+
# An uploaded blob carries the type the client declared, which the
|
|
73
73
|
# attachment validator re-decides from the bytes; either way the
|
|
74
74
|
# extension is the merchant-visible answer, so it wins when it names a
|
|
75
75
|
# format Spree knows.
|
|
@@ -42,7 +42,7 @@ module Spree
|
|
|
42
42
|
return if shipping_label.refundable?
|
|
43
43
|
|
|
44
44
|
reason = shipping_label.uploaded? ? 'uploaded_not_refundable' : 'not_refundable'
|
|
45
|
-
failure(shipping_label,
|
|
45
|
+
failure(shipping_label, I18n.t("spree.shipping_labels.errors.#{reason}"))
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
# A provider that knows why the carrier said no raises with its words;
|
|
@@ -52,7 +52,7 @@ module Spree
|
|
|
52
52
|
|
|
53
53
|
return if %w[refunded refund_requested].include?(@outcome)
|
|
54
54
|
|
|
55
|
-
failure(shipping_label,
|
|
55
|
+
failure(shipping_label, I18n.t('spree.shipping_labels.errors.refund_failed'))
|
|
56
56
|
rescue Spree::Core::LabelRefundRefused => e
|
|
57
57
|
failure(shipping_label, e.message)
|
|
58
58
|
end
|
|
@@ -61,19 +61,19 @@ module Spree
|
|
|
61
61
|
|
|
62
62
|
return if @normalized_items.any?
|
|
63
63
|
|
|
64
|
-
failure(receivable,
|
|
64
|
+
failure(receivable, I18n.t("spree.#{error_scope}.errors.no_items_received"))
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
# A line the payload names but counts nothing on is left out rather than
|
|
68
68
|
# refused: a receive screen submits every row, most of them untouched.
|
|
69
69
|
def normalize_item(item)
|
|
70
70
|
line = item[:item]
|
|
71
|
-
failure(receivable,
|
|
71
|
+
failure(receivable, I18n.t("spree.#{error_scope}.errors.item_not_on_document")) unless line_belongs?(line)
|
|
72
72
|
|
|
73
73
|
accepted = item[:quantity_accepted].to_i
|
|
74
74
|
rejected = item[:quantity_rejected].to_i
|
|
75
75
|
if accepted.negative? || rejected.negative?
|
|
76
|
-
failure(receivable,
|
|
76
|
+
failure(receivable, I18n.t("spree.#{error_scope}.errors.invalid_receipt_quantity", variant: line.variant_name))
|
|
77
77
|
end
|
|
78
78
|
return nil if accepted.zero? && rejected.zero?
|
|
79
79
|
|
|
@@ -93,7 +93,7 @@ module Spree
|
|
|
93
93
|
repeated = lines.group_by(&:id).values.find { |group| group.length > 1 }
|
|
94
94
|
return if repeated.nil?
|
|
95
95
|
|
|
96
|
-
failure(receivable,
|
|
96
|
+
failure(receivable, I18n.t("spree.#{error_scope}.errors.repeated_item", variant: repeated.first.variant_name))
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
def build_receipt
|
|
@@ -49,11 +49,11 @@ module Spree
|
|
|
49
49
|
private
|
|
50
50
|
|
|
51
51
|
def ensure_cancelable
|
|
52
|
-
failure(stock_transfer,
|
|
52
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.already_closed')) if stock_transfer.closed?
|
|
53
53
|
return unless stock_transfer.in_flight?
|
|
54
54
|
return if IN_TRANSIT_RESOLUTIONS.include?(on_in_transit)
|
|
55
55
|
|
|
56
|
-
failure(stock_transfer,
|
|
56
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.in_transit_resolution_required'))
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
# Whether the units come back or are written off, the destination is no
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
# destination counted in, records why the rest never arrived, and leaves
|
|
9
9
|
# the outstanding count on each line as the record of the loss.
|
|
10
10
|
class Close < Spree::Workflow
|
|
11
|
-
include Spree::Receivables::
|
|
11
|
+
include Spree::Receivables::ClosingShort
|
|
12
12
|
|
|
13
13
|
hooks :validate, :after_close
|
|
14
14
|
|
|
@@ -18,39 +18,12 @@ module Spree
|
|
|
18
18
|
# @param reason [String, nil] what happened to the balance
|
|
19
19
|
def perform(stock_transfer:, reason: nil)
|
|
20
20
|
super
|
|
21
|
-
|
|
22
|
-
stock_transfer.with_lock do
|
|
23
|
-
step :ensure_closable
|
|
24
|
-
run_hooks :validate
|
|
25
|
-
step :uncount_awaited_units
|
|
26
|
-
step :close_short
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
run_hooks :after_close
|
|
30
|
-
stock_transfer.publish_event('stock_transfer.received')
|
|
31
|
-
success(stock_transfer.reload)
|
|
21
|
+
close
|
|
32
22
|
end
|
|
33
23
|
|
|
34
24
|
private
|
|
35
25
|
|
|
36
|
-
def
|
|
37
|
-
return if stock_transfer.partially_received?
|
|
38
|
-
|
|
39
|
-
failure(stock_transfer, Spree.t('stock_transfer.errors.not_partially_received'))
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# The missing units are not going to turn up, so the destination stops
|
|
43
|
-
# expecting them; each line's outstanding count keeps the record.
|
|
44
|
-
def uncount_awaited_units
|
|
45
|
-
uncount_incoming(stock_transfer)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def close_short
|
|
49
|
-
now = Time.current
|
|
50
|
-
attributes = { status: 'received', received_at: now, closed_short_at: now, close_reason: reason.presence }
|
|
51
|
-
|
|
52
|
-
failure(stock_transfer) unless stock_transfer.update(attributes)
|
|
53
|
-
end
|
|
26
|
+
def receivable = stock_transfer
|
|
54
27
|
end
|
|
55
28
|
end
|
|
56
29
|
end
|
|
@@ -16,9 +16,10 @@ module Spree
|
|
|
16
16
|
# may legitimately open empty and gain lines as the merchant packs
|
|
17
17
|
# @param reference [String, nil] the merchant's own label for the trip
|
|
18
18
|
# @param notes [String, nil]
|
|
19
|
+
# @param metadata [Hash, nil]
|
|
19
20
|
# @param created_by [Object, nil]
|
|
20
21
|
def perform(store:, source_location:, destination_location:, items: [],
|
|
21
|
-
reference: nil, notes: nil, created_by: nil)
|
|
22
|
+
reference: nil, notes: nil, metadata: nil, created_by: nil)
|
|
22
23
|
super
|
|
23
24
|
|
|
24
25
|
step :build_transfer
|
|
@@ -46,6 +47,7 @@ module Spree
|
|
|
46
47
|
created_by: created_by,
|
|
47
48
|
status: Spree::StockTransfer.default_status
|
|
48
49
|
)
|
|
50
|
+
@stock_transfer.metadata = metadata if metadata
|
|
49
51
|
|
|
50
52
|
Array(items).each do |item|
|
|
51
53
|
@stock_transfer.items.build(variant: item[:variant], quantity_shipped: item[:quantity_shipped])
|
|
@@ -30,7 +30,7 @@ module Spree
|
|
|
30
30
|
def ensure_returnable
|
|
31
31
|
return if stock_transfer.ready_to_ship?
|
|
32
32
|
|
|
33
|
-
failure(stock_transfer,
|
|
33
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.not_ready_to_ship'))
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def return_to_draft
|
|
@@ -46,9 +46,9 @@ module Spree
|
|
|
46
46
|
|
|
47
47
|
def ensure_shippable
|
|
48
48
|
unless stock_transfer.draft? || stock_transfer.ready_to_ship?
|
|
49
|
-
failure(stock_transfer,
|
|
49
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.not_shippable'))
|
|
50
50
|
end
|
|
51
|
-
failure(stock_transfer,
|
|
51
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.must_have_variant')) if stock_transfer.items.empty?
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
# Every line needs enough available stock for the quantity being moved,
|
|
@@ -65,7 +65,7 @@ module Spree
|
|
|
65
65
|
return if unavailable_items.empty?
|
|
66
66
|
|
|
67
67
|
failure(stock_transfer,
|
|
68
|
-
|
|
68
|
+
I18n.t('spree.stock_transfer.errors.variants_unavailable', stock: source.name))
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
def write_shipped_movements
|
|
@@ -24,8 +24,8 @@ module Spree
|
|
|
24
24
|
private
|
|
25
25
|
|
|
26
26
|
def ensure_draft
|
|
27
|
-
failure(stock_transfer,
|
|
28
|
-
failure(stock_transfer,
|
|
27
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.not_draft')) unless stock_transfer.draft?
|
|
28
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.must_have_variant')) if stock_transfer.items.empty?
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def mark_ready
|
|
@@ -46,7 +46,7 @@ module Spree
|
|
|
46
46
|
def ensure_receivable
|
|
47
47
|
return if stock_transfer.in_flight?
|
|
48
48
|
|
|
49
|
-
failure(stock_transfer,
|
|
49
|
+
failure(stock_transfer, I18n.t('spree.stock_transfer.errors.not_in_transit'))
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def line_belongs?(line)
|
|
@@ -4,6 +4,8 @@ module Spree
|
|
|
4
4
|
# matter of record, so this refuses anything past `draft` rather than
|
|
5
5
|
# quietly rewriting a document the warehouse is already acting on.
|
|
6
6
|
class Update < Spree::Workflow
|
|
7
|
+
include Spree::Receivables::DraftEditing
|
|
8
|
+
|
|
7
9
|
hooks :validate, :after_update
|
|
8
10
|
|
|
9
11
|
# @param stock_transfer [Spree::StockTransfer]
|
|
@@ -13,43 +15,13 @@ module Spree
|
|
|
13
15
|
# replacing the current lines; nil leaves them alone
|
|
14
16
|
def perform(stock_transfer:, attributes: {}, items: nil)
|
|
15
17
|
super
|
|
16
|
-
|
|
17
|
-
step :ensure_editable
|
|
18
|
-
run_hooks :validate
|
|
19
|
-
|
|
20
|
-
ApplicationRecord.transaction do
|
|
21
|
-
step :apply_changes
|
|
22
|
-
step :save_transfer
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
run_hooks :after_update
|
|
26
|
-
success(stock_transfer.reload)
|
|
18
|
+
edit
|
|
27
19
|
end
|
|
28
20
|
|
|
29
21
|
private
|
|
30
22
|
|
|
31
|
-
def
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
failure(stock_transfer, Spree.t('stock_transfer.errors.not_editable'))
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# A whole-list replacement rather than a per-line diff: a draft's lines
|
|
38
|
-
# are what the merchant is still deciding, and sending the list they
|
|
39
|
-
# want is simpler for a client than working out which rows to delete.
|
|
40
|
-
def apply_changes
|
|
41
|
-
stock_transfer.assign_attributes(attributes) if attributes.present?
|
|
42
|
-
return if items.nil?
|
|
43
|
-
|
|
44
|
-
stock_transfer.items.destroy_all
|
|
45
|
-
Array(items).each do |item|
|
|
46
|
-
stock_transfer.items.build(variant: item[:variant], quantity_shipped: item[:quantity_shipped])
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def save_transfer
|
|
51
|
-
failure(stock_transfer) unless stock_transfer.save
|
|
52
|
-
end
|
|
23
|
+
def receivable = stock_transfer
|
|
24
|
+
def item_attributes = %i[quantity_shipped]
|
|
53
25
|
end
|
|
54
26
|
end
|
|
55
27
|
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
{
|
|
2
|
+
"AED": 2,
|
|
3
|
+
"AFN": 2,
|
|
4
|
+
"ALL": 2,
|
|
5
|
+
"AMD": 2,
|
|
6
|
+
"ANG": 2,
|
|
7
|
+
"AOA": 2,
|
|
8
|
+
"ARS": 2,
|
|
9
|
+
"AUD": 2,
|
|
10
|
+
"AWG": 2,
|
|
11
|
+
"AZN": 2,
|
|
12
|
+
"BAM": 2,
|
|
13
|
+
"BBD": 2,
|
|
14
|
+
"BDT": 2,
|
|
15
|
+
"BGN": 2,
|
|
16
|
+
"BHD": 3,
|
|
17
|
+
"BIF": 0,
|
|
18
|
+
"BMD": 2,
|
|
19
|
+
"BND": 2,
|
|
20
|
+
"BOB": 2,
|
|
21
|
+
"BRL": 2,
|
|
22
|
+
"BSD": 2,
|
|
23
|
+
"BTN": 2,
|
|
24
|
+
"BWP": 2,
|
|
25
|
+
"BYN": 2,
|
|
26
|
+
"BYR": 0,
|
|
27
|
+
"BZD": 2,
|
|
28
|
+
"CAD": 2,
|
|
29
|
+
"CDF": 2,
|
|
30
|
+
"CHF": 2,
|
|
31
|
+
"CLF": 4,
|
|
32
|
+
"CLP": 0,
|
|
33
|
+
"CNY": 2,
|
|
34
|
+
"COP": 2,
|
|
35
|
+
"CRC": 2,
|
|
36
|
+
"CUC": 2,
|
|
37
|
+
"CUP": 2,
|
|
38
|
+
"CVE": 2,
|
|
39
|
+
"CZK": 2,
|
|
40
|
+
"DJF": 0,
|
|
41
|
+
"DKK": 2,
|
|
42
|
+
"DOP": 2,
|
|
43
|
+
"DZD": 2,
|
|
44
|
+
"EEK": 2,
|
|
45
|
+
"EGP": 2,
|
|
46
|
+
"ERN": 2,
|
|
47
|
+
"ETB": 2,
|
|
48
|
+
"EUR": 2,
|
|
49
|
+
"FJD": 2,
|
|
50
|
+
"FKP": 2,
|
|
51
|
+
"GBP": 2,
|
|
52
|
+
"GEL": 2,
|
|
53
|
+
"GHS": 2,
|
|
54
|
+
"GIP": 2,
|
|
55
|
+
"GMD": 2,
|
|
56
|
+
"GNF": 0,
|
|
57
|
+
"GTQ": 2,
|
|
58
|
+
"GYD": 2,
|
|
59
|
+
"HKD": 2,
|
|
60
|
+
"HNL": 2,
|
|
61
|
+
"HRK": 2,
|
|
62
|
+
"HTG": 2,
|
|
63
|
+
"HUF": 2,
|
|
64
|
+
"IDR": 2,
|
|
65
|
+
"ILS": 2,
|
|
66
|
+
"INR": 2,
|
|
67
|
+
"IQD": 3,
|
|
68
|
+
"IRR": 2,
|
|
69
|
+
"ISK": 0,
|
|
70
|
+
"JMD": 2,
|
|
71
|
+
"JOD": 3,
|
|
72
|
+
"JPY": 0,
|
|
73
|
+
"KES": 2,
|
|
74
|
+
"KGS": 2,
|
|
75
|
+
"KHR": 2,
|
|
76
|
+
"KMF": 0,
|
|
77
|
+
"KPW": 2,
|
|
78
|
+
"KRW": 0,
|
|
79
|
+
"KWD": 3,
|
|
80
|
+
"KYD": 2,
|
|
81
|
+
"KZT": 2,
|
|
82
|
+
"LAK": 2,
|
|
83
|
+
"LBP": 2,
|
|
84
|
+
"LKR": 2,
|
|
85
|
+
"LRD": 2,
|
|
86
|
+
"LSL": 2,
|
|
87
|
+
"LTL": 2,
|
|
88
|
+
"LVL": 2,
|
|
89
|
+
"LYD": 3,
|
|
90
|
+
"MAD": 2,
|
|
91
|
+
"MDL": 2,
|
|
92
|
+
"MGA": 2,
|
|
93
|
+
"MKD": 2,
|
|
94
|
+
"MMK": 2,
|
|
95
|
+
"MNT": 2,
|
|
96
|
+
"MOP": 2,
|
|
97
|
+
"MRO": 2,
|
|
98
|
+
"MRU": 2,
|
|
99
|
+
"MTL": 2,
|
|
100
|
+
"MUR": 2,
|
|
101
|
+
"MVR": 2,
|
|
102
|
+
"MWK": 2,
|
|
103
|
+
"MXN": 2,
|
|
104
|
+
"MYR": 2,
|
|
105
|
+
"MZN": 2,
|
|
106
|
+
"NAD": 2,
|
|
107
|
+
"NGN": 2,
|
|
108
|
+
"NIO": 2,
|
|
109
|
+
"NOK": 2,
|
|
110
|
+
"NPR": 2,
|
|
111
|
+
"NZD": 2,
|
|
112
|
+
"OMR": 3,
|
|
113
|
+
"PAB": 2,
|
|
114
|
+
"PEN": 2,
|
|
115
|
+
"PGK": 2,
|
|
116
|
+
"PHP": 2,
|
|
117
|
+
"PKR": 2,
|
|
118
|
+
"PLN": 2,
|
|
119
|
+
"PYG": 0,
|
|
120
|
+
"QAR": 2,
|
|
121
|
+
"RON": 2,
|
|
122
|
+
"RSD": 2,
|
|
123
|
+
"RUB": 2,
|
|
124
|
+
"RWF": 0,
|
|
125
|
+
"SAR": 2,
|
|
126
|
+
"SBD": 2,
|
|
127
|
+
"SCR": 2,
|
|
128
|
+
"SDG": 2,
|
|
129
|
+
"SEK": 2,
|
|
130
|
+
"SGD": 2,
|
|
131
|
+
"SHP": 2,
|
|
132
|
+
"SKK": 2,
|
|
133
|
+
"SLE": 2,
|
|
134
|
+
"SLL": 2,
|
|
135
|
+
"SOS": 2,
|
|
136
|
+
"SRD": 2,
|
|
137
|
+
"SSP": 2,
|
|
138
|
+
"STD": 2,
|
|
139
|
+
"STN": 2,
|
|
140
|
+
"SVC": 2,
|
|
141
|
+
"SYP": 2,
|
|
142
|
+
"SZL": 2,
|
|
143
|
+
"THB": 2,
|
|
144
|
+
"TJS": 2,
|
|
145
|
+
"TMM": 2,
|
|
146
|
+
"TMT": 2,
|
|
147
|
+
"TND": 3,
|
|
148
|
+
"TOP": 2,
|
|
149
|
+
"TRY": 2,
|
|
150
|
+
"TTD": 2,
|
|
151
|
+
"TWD": 2,
|
|
152
|
+
"TZS": 2,
|
|
153
|
+
"UAH": 2,
|
|
154
|
+
"UGX": 0,
|
|
155
|
+
"USD": 2,
|
|
156
|
+
"UYI": 0,
|
|
157
|
+
"UYU": 2,
|
|
158
|
+
"UYW": 4,
|
|
159
|
+
"UZS": 2,
|
|
160
|
+
"VED": 2,
|
|
161
|
+
"VEF": 2,
|
|
162
|
+
"VES": 2,
|
|
163
|
+
"VND": 0,
|
|
164
|
+
"VUV": 0,
|
|
165
|
+
"WST": 2,
|
|
166
|
+
"XAF": 0,
|
|
167
|
+
"XCD": 2,
|
|
168
|
+
"XCG": 2,
|
|
169
|
+
"XOF": 0,
|
|
170
|
+
"XPF": 0,
|
|
171
|
+
"YER": 2,
|
|
172
|
+
"ZAR": 2,
|
|
173
|
+
"ZMK": 2,
|
|
174
|
+
"ZMW": 2,
|
|
175
|
+
"ZWD": 2,
|
|
176
|
+
"ZWG": 2,
|
|
177
|
+
"ZWL": 2,
|
|
178
|
+
"ZWN": 2,
|
|
179
|
+
"ZWR": 2
|
|
180
|
+
}
|
data/config/i18n-tasks.yml
CHANGED
|
@@ -14,11 +14,13 @@ data:
|
|
|
14
14
|
# adapter: I18n::Tasks::Data::FileSystem
|
|
15
15
|
|
|
16
16
|
# Locale files or `Dir.glob` patterns where translations are read from:
|
|
17
|
+
## This one config checks every Spree gem: core's keys are used from all of
|
|
18
|
+
## them, and their own keys from core.
|
|
17
19
|
read:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
- config/locales/%{locale}.yml
|
|
21
|
+
<% %w[api emails].map { |gem| "../#{gem}" }.concat(Dir['../providers/*']).each do |gem| %>
|
|
22
|
+
- "<%= File.expand_path("#{gem}/config/locales", Dir.pwd) %>/%{locale}.yml"
|
|
23
|
+
<% end %>
|
|
22
24
|
|
|
23
25
|
# Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom:
|
|
24
26
|
# `i18n-tasks normalize -p` will force move the keys according to these rules
|
|
@@ -52,9 +54,14 @@ data:
|
|
|
52
54
|
|
|
53
55
|
# Find translate calls
|
|
54
56
|
search:
|
|
55
|
-
## Paths or `Find.find` patterns to search in
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
## Paths or `Find.find` patterns to search in. Core keys are read by every
|
|
58
|
+
## Spree gem, so all of them are searched.
|
|
59
|
+
paths:
|
|
60
|
+
- app/
|
|
61
|
+
- lib/
|
|
62
|
+
<% (%w[api emails dashboard opentelemetry].map { |gem| "../#{gem}" } + Dir['../providers/*']).product(%w[app lib]).each do |gem, folder| %>
|
|
63
|
+
- "<%= File.expand_path("#{gem}/#{folder}", Dir.pwd) %>"
|
|
64
|
+
<% end %>
|
|
58
65
|
|
|
59
66
|
## Root directories for relative keys resolution.
|
|
60
67
|
# relative_roots:
|
|
@@ -143,12 +150,18 @@ ignore_missing:
|
|
|
143
150
|
- 'unauthorized.default'
|
|
144
151
|
|
|
145
152
|
## Consider these keys used:
|
|
146
|
-
|
|
147
|
-
#
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
153
|
+
ignore_unused:
|
|
154
|
+
# Read by Rails itself (model names, attribute names, validation messages, formats).
|
|
155
|
+
- 'activerecord.*'
|
|
156
|
+
- 'activemodel.*'
|
|
157
|
+
- 'errors.*'
|
|
158
|
+
- 'number.*'
|
|
159
|
+
# Keys built with interpolation, which the scanner cannot follow.
|
|
160
|
+
- 'spree.reporting.*'
|
|
161
|
+
- 'spree.permissions_catalog.*'
|
|
162
|
+
# Spree::TypeLabels reads <family>_types.<api_type>.{name,description}.
|
|
163
|
+
- 'spree.{collection_rule,commission_rule,delivery_method_rule,order_routing_rule,promotion_action,promotion_rule,seller_requirement}_types.*'
|
|
164
|
+
- 'spree.i18n.this_file_language'
|
|
152
165
|
|
|
153
166
|
## Exclude these keys from the `i18n-tasks eq-base' report:
|
|
154
167
|
# ignore_eq_base:
|
|
@@ -172,8 +185,9 @@ ignore_missing:
|
|
|
172
185
|
# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper',
|
|
173
186
|
# only: %w(*.html.haml *.html.slim),
|
|
174
187
|
# patterns: [['= title\b', '.page_title']] %>
|
|
175
|
-
|
|
176
|
-
#
|
|
177
|
-
#
|
|
178
|
-
|
|
179
|
-
|
|
188
|
+
|
|
189
|
+
# Email templates translate Spree keys with Liquid's `t` filter, and shared
|
|
190
|
+
# partials take a key to translate (`label: 'some.key', translate: true`).
|
|
191
|
+
<% I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper',
|
|
192
|
+
only: %w(*.liquid),
|
|
193
|
+
patterns: [['%{key}\s*\|\s*t\b', 'spree.%{key}'], ['\blabel:\s*%{key}', 'spree.%{key}']] %>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Alba.backend = :oj_rails
|
|
2
|
+
Alba.inflector = :active_support
|
|
3
|
+
|
|
4
|
+
# Custom types
|
|
5
|
+
Alba.register_type :iso8601, converter: ->(time) { time&.iso8601(3) }, auto_convert: true
|
|
6
|
+
# Decimals and money rendered as their exact string form instead of JSON numbers
|
|
7
|
+
Alba.register_type :string, check: ->(value) { value.is_a?(String) }, converter: ->(value) { value.to_s }, auto_convert: true
|