From 9a9a681ea2e2d1f812267164733da40e1fd2d460 Mon Sep 17 00:00:00 2001 From: cesartalves Date: Thu, 15 Apr 2021 15:05:54 -0300 Subject: Fix Spree::OrdersController decoration The CreateSubscriptionLineItems decoration for the Front-end controller will break (obviously) if the Spree::OrdersController is not defined. However, some users might want to use the extension using only the Backend and Core of Solidus. This skips the decoration if Spree::Frontend is not defined --- .../spree/orders_controller/create_subscription_line_items.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb b/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb index 6b39b4c..394d025 100644 --- a/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb +++ b/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb @@ -32,4 +32,6 @@ module SolidusSubscriptions end end -Spree::OrdersController.prepend(SolidusSubscriptions::Spree::OrdersController::CreateSubscriptionLineItems) +if defined? Spree::Frontend + Spree::OrdersController.prepend(SolidusSubscriptions::Spree::OrdersController::CreateSubscriptionLineItems) +end -- cgit v1.2.3 From 394e41b77bf56fecac44165fb6af687fab01b8e0 Mon Sep 17 00:00:00 2001 From: cesartalves Date: Fri, 16 Apr 2021 10:54:58 -0300 Subject: Fix Spree::OrdersController decoration Move all decorators to nested library (api, core, backend, frontend) decorators folder so they don't get loaded unless the library is defined. --- .../create_subscription_line_items.rb | 36 +++++++++++++++++++++ .../create_subscription_line_items.rb | 36 --------------------- .../create_subscription_line_items.rb | 37 ---------------------- .../subscription_line_items_association.rb | 26 +++++++++++++++ .../spree/order/after_create.rb | 19 +++++++++++ .../spree/order/finalize_creates_subscriptions.rb | 25 +++++++++++++++ .../spree/order/installment_details_association.rb | 15 +++++++++ .../spree/order/subscription_association.rb | 15 +++++++++ .../order/subscription_line_items_association.rb | 19 +++++++++++ .../spree/product/delegate_subscribable.rb | 17 ++++++++++ .../spree/user/have_many_subscriptions.rb | 30 ++++++++++++++++++ .../variant/auto_delete_from_subscriptions.rb | 20 ++++++++++++ .../spree/variant/variant_pretty_name.rb | 17 ++++++++++ .../report_default_change_to_subscriptions.rb | 28 ++++++++++++++++ .../create_subscription_line_items.rb | 35 ++++++++++++++++++++ .../subscription_line_items_association.rb | 26 --------------- .../spree/order/after_create.rb | 19 ----------- .../spree/order/finalize_creates_subscriptions.rb | 25 --------------- .../spree/order/installment_details_association.rb | 15 --------- .../spree/order/subscription_association.rb | 15 --------- .../order/subscription_line_items_association.rb | 19 ----------- .../spree/product/delegate_subscribable.rb | 17 ---------- .../spree/user/have_many_subscriptions.rb | 30 ------------------ .../variant/auto_delete_from_subscriptions.rb | 20 ------------ .../spree/variant/variant_pretty_name.rb | 17 ---------- .../report_default_change_to_subscriptions.rb | 28 ---------------- lib/solidus_subscriptions/configuration.rb | 1 + 27 files changed, 303 insertions(+), 304 deletions(-) create mode 100644 app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb delete mode 100644 app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb delete mode 100644 app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb create mode 100644 app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb create mode 100644 app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/order/after_create.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb delete mode 100644 app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb diff --git a/app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb b/app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb new file mode 100644 index 0000000..7872a2a --- /dev/null +++ b/app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# Create new subscription line items associated to the current order, when +# a line item is added to the cart which includes subscription_line_item +# params. +# +# The Subscriptions::LineItem acts as a line item place holder for a +# Subscription, indicating that it has been added to the order, but not +# yet purchased +module SolidusSubscriptions + module Spree + module Api + module LineItemsController + module CreateSubscriptionLineItems + include SolidusSubscriptions::SubscriptionLineItemBuilder + + def self.prepended(base) + base.after_action( + :handle_subscription_line_items, + only: [:create, :update], + if: ->{ params[:subscription_line_item] } + ) + end + + private + + def handle_subscription_line_items + create_subscription_line_item(@line_item) + end + end + end + end + end +end + +Spree::Api::LineItemsController.prepend(SolidusSubscriptions::Spree::Api::LineItemsController::CreateSubscriptionLineItems) diff --git a/app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb b/app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb deleted file mode 100644 index 7872a2a..0000000 --- a/app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -# Create new subscription line items associated to the current order, when -# a line item is added to the cart which includes subscription_line_item -# params. -# -# The Subscriptions::LineItem acts as a line item place holder for a -# Subscription, indicating that it has been added to the order, but not -# yet purchased -module SolidusSubscriptions - module Spree - module Api - module LineItemsController - module CreateSubscriptionLineItems - include SolidusSubscriptions::SubscriptionLineItemBuilder - - def self.prepended(base) - base.after_action( - :handle_subscription_line_items, - only: [:create, :update], - if: ->{ params[:subscription_line_item] } - ) - end - - private - - def handle_subscription_line_items - create_subscription_line_item(@line_item) - end - end - end - end - end -end - -Spree::Api::LineItemsController.prepend(SolidusSubscriptions::Spree::Api::LineItemsController::CreateSubscriptionLineItems) diff --git a/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb b/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb deleted file mode 100644 index 394d025..0000000 --- a/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -# Create new subscription line items associated to the current order, when -# a line item is added to the cart which includes subscription_line_item -# params. -# -# The Subscriptions::LineItem acts as a line item place holder for a -# Subscription, indicating that it has been added to the order, but not -# yet purchased -module SolidusSubscriptions - module Spree - module OrdersController - module CreateSubscriptionLineItems - include SolidusSubscriptions::SubscriptionLineItemBuilder - - def self.prepended(base) - base.after_action( - :handle_subscription_line_items, - only: :populate, - if: ->{ params[:subscription_line_item] } - ) - end - - private - - def handle_subscription_line_items - line_item = @current_order.line_items.find_by(variant_id: params[:variant_id]) - create_subscription_line_item(line_item) - end - end - end - end -end - -if defined? Spree::Frontend - Spree::OrdersController.prepend(SolidusSubscriptions::Spree::OrdersController::CreateSubscriptionLineItems) -end diff --git a/app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb new file mode 100644 index 0000000..ccb483f --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +# Each Spree::LineItem can have multiple subscription_line_items. This +# allows a cart to represent multiple subscriptions to the same item in +# the same order. +module SolidusSubscriptions + module Spree + module LineItem + module SubscriptionLineItemsAssociation + def self.prepended(base) + base.has_many( + :subscription_line_items, + class_name: 'SolidusSubscriptions::LineItem', + foreign_key: :spree_line_item_id, + inverse_of: :spree_line_item, + dependent: :destroy + ) + + base.accepts_nested_attributes_for :subscription_line_items + end + end + end + end +end + +Spree::LineItem.prepend(SolidusSubscriptions::Spree::LineItem::SubscriptionLineItemsAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb new file mode 100644 index 0000000..c67cb96 --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Order + module AfterCreate + def ensure_line_items_present + super unless subscription_order? + end + + def send_cancel_email + super unless subscription_order? + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::AfterCreate) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb new file mode 100644 index 0000000..3f83b82 --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +# Once an order is finalized its subscriptions line items should be converted +# into active subscriptions. This hooks into Spree::Order#finalize! and +# passes all subscription_line_items present on the order to the Subscription +# generator which will build and persist the subscriptions +module SolidusSubscriptions + module Spree + module Order + module FinalizeCreatesSubscriptions + def finalize! + SolidusSubscriptions::SubscriptionGenerator.group(subscription_line_items).each do |line_items| + SolidusSubscriptions::SubscriptionGenerator.activate(line_items) + end + + reload + + super + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::FinalizeCreatesSubscriptions) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb new file mode 100644 index 0000000..a1261d4 --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Order + module InstallmentDetailsAssociation + def self.prepended(base) + base.has_many :installment_details, class_name: '::SolidusSubscriptions::InstallmentDetail' + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::InstallmentDetailsAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb new file mode 100644 index 0000000..81284a3 --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Order + module SubscriptionAssociation + def self.prepended(base) + base.belongs_to :subscription, class_name: '::SolidusSubscriptions::Subscription', optional: true + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb new file mode 100644 index 0000000..3b48225 --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Spree::Orders may contain many subscription_line_items. When the order is +# finalized these subscription_line_items are converted into subscritpions. +# The order needs to be able to get a list of associated subscription_line_items +# to be able to populate the full subscriptions. +module SolidusSubscriptions + module Spree + module Order + module SubscriptionLineItemsAssociation + def self.prepended(base) + base.has_many :subscription_line_items, through: :line_items + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionLineItemsAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb b/app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb new file mode 100644 index 0000000..740b9d8 --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Product + module DelegateSubscribable + def self.prepended(base) + base.class_eval do + delegate :subscribable, :subscribable=, to: :find_or_build_master + end + end + end + end + end +end + +Spree::Product.prepend(SolidusSubscriptions::Spree::Product::DelegateSubscribable) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb new file mode 100644 index 0000000..1fb4cdf --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +# Spree::Users maintain a list of the subscriptions associated with them +module SolidusSubscriptions + module Spree + module User + module HaveManySubscriptions + def self.prepended(base) + base.has_many( + :subscriptions, + class_name: 'SolidusSubscriptions::Subscription', + foreign_key: 'user_id' + ) + + base.accepts_nested_attributes_for :subscriptions + end + + def subscriptions_attributes=(params) + ::Spree::Deprecation.warn( + 'Creating or updating subscriptions through Spree::User nested attributes is deprecated. ' \ + 'Please use subscriptions APIs directly.' + ) + super + end + end + end + end +end + +Spree.user_class.prepend(SolidusSubscriptions::Spree::User::HaveManySubscriptions) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb new file mode 100644 index 0000000..bba173e --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Variant + module AutoDeleteFromSubscriptions + def self.prepended(base) + base.after_discard(:remove_from_subscriptions) + base.after_destroy(:remove_from_subscriptions) + end + + def remove_from_subscriptions + SolidusSubscriptions::LineItem.where(subscribable: self).delete_all + end + end + end + end +end + +Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::AutoDeleteFromSubscriptions) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb b/app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb new file mode 100644 index 0000000..671dcbe --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Variant + module VariantPrettyName + def pretty_name + name = product.name + name += " - #{options_text}" if options_text.present? + name + end + end + end + end +end + +Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::VariantPrettyName) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb new file mode 100644 index 0000000..6ee754e --- /dev/null +++ b/app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module WalletPaymentSource + module ReportDefaultChangeToSubscriptions + def self.prepended(base) + base.after_save :report_default_change_to_subscriptions + end + + private + + def report_default_change_to_subscriptions + return if !previous_changes.key?('default') || !default? + + user.subscriptions.with_default_payment_source.each do |subscription| + ::Spree::Event.fire( + 'solidus_subscriptions.subscription_payment_method_changed', + subscription: subscription, + ) + end + end + end + end + end +end + +Spree::WalletPaymentSource.prepend(SolidusSubscriptions::Spree::WalletPaymentSource::ReportDefaultChangeToSubscriptions) diff --git a/app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb b/app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb new file mode 100644 index 0000000..6b39b4c --- /dev/null +++ b/app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# Create new subscription line items associated to the current order, when +# a line item is added to the cart which includes subscription_line_item +# params. +# +# The Subscriptions::LineItem acts as a line item place holder for a +# Subscription, indicating that it has been added to the order, but not +# yet purchased +module SolidusSubscriptions + module Spree + module OrdersController + module CreateSubscriptionLineItems + include SolidusSubscriptions::SubscriptionLineItemBuilder + + def self.prepended(base) + base.after_action( + :handle_subscription_line_items, + only: :populate, + if: ->{ params[:subscription_line_item] } + ) + end + + private + + def handle_subscription_line_items + line_item = @current_order.line_items.find_by(variant_id: params[:variant_id]) + create_subscription_line_item(line_item) + end + end + end + end +end + +Spree::OrdersController.prepend(SolidusSubscriptions::Spree::OrdersController::CreateSubscriptionLineItems) diff --git a/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb b/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb deleted file mode 100644 index ccb483f..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -# Each Spree::LineItem can have multiple subscription_line_items. This -# allows a cart to represent multiple subscriptions to the same item in -# the same order. -module SolidusSubscriptions - module Spree - module LineItem - module SubscriptionLineItemsAssociation - def self.prepended(base) - base.has_many( - :subscription_line_items, - class_name: 'SolidusSubscriptions::LineItem', - foreign_key: :spree_line_item_id, - inverse_of: :spree_line_item, - dependent: :destroy - ) - - base.accepts_nested_attributes_for :subscription_line_items - end - end - end - end -end - -Spree::LineItem.prepend(SolidusSubscriptions::Spree::LineItem::SubscriptionLineItemsAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb b/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb deleted file mode 100644 index c67cb96..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Order - module AfterCreate - def ensure_line_items_present - super unless subscription_order? - end - - def send_cancel_email - super unless subscription_order? - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::AfterCreate) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb deleted file mode 100644 index 3f83b82..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -# Once an order is finalized its subscriptions line items should be converted -# into active subscriptions. This hooks into Spree::Order#finalize! and -# passes all subscription_line_items present on the order to the Subscription -# generator which will build and persist the subscriptions -module SolidusSubscriptions - module Spree - module Order - module FinalizeCreatesSubscriptions - def finalize! - SolidusSubscriptions::SubscriptionGenerator.group(subscription_line_items).each do |line_items| - SolidusSubscriptions::SubscriptionGenerator.activate(line_items) - end - - reload - - super - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::FinalizeCreatesSubscriptions) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb b/app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb deleted file mode 100644 index a1261d4..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Order - module InstallmentDetailsAssociation - def self.prepended(base) - base.has_many :installment_details, class_name: '::SolidusSubscriptions::InstallmentDetail' - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::InstallmentDetailsAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb b/app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb deleted file mode 100644 index 81284a3..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Order - module SubscriptionAssociation - def self.prepended(base) - base.belongs_to :subscription, class_name: '::SolidusSubscriptions::Subscription', optional: true - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb b/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb deleted file mode 100644 index 3b48225..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -# Spree::Orders may contain many subscription_line_items. When the order is -# finalized these subscription_line_items are converted into subscritpions. -# The order needs to be able to get a list of associated subscription_line_items -# to be able to populate the full subscriptions. -module SolidusSubscriptions - module Spree - module Order - module SubscriptionLineItemsAssociation - def self.prepended(base) - base.has_many :subscription_line_items, through: :line_items - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionLineItemsAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb b/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb deleted file mode 100644 index 740b9d8..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Product - module DelegateSubscribable - def self.prepended(base) - base.class_eval do - delegate :subscribable, :subscribable=, to: :find_or_build_master - end - end - end - end - end -end - -Spree::Product.prepend(SolidusSubscriptions::Spree::Product::DelegateSubscribable) diff --git a/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb deleted file mode 100644 index 1fb4cdf..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -# Spree::Users maintain a list of the subscriptions associated with them -module SolidusSubscriptions - module Spree - module User - module HaveManySubscriptions - def self.prepended(base) - base.has_many( - :subscriptions, - class_name: 'SolidusSubscriptions::Subscription', - foreign_key: 'user_id' - ) - - base.accepts_nested_attributes_for :subscriptions - end - - def subscriptions_attributes=(params) - ::Spree::Deprecation.warn( - 'Creating or updating subscriptions through Spree::User nested attributes is deprecated. ' \ - 'Please use subscriptions APIs directly.' - ) - super - end - end - end - end -end - -Spree.user_class.prepend(SolidusSubscriptions::Spree::User::HaveManySubscriptions) diff --git a/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb deleted file mode 100644 index bba173e..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Variant - module AutoDeleteFromSubscriptions - def self.prepended(base) - base.after_discard(:remove_from_subscriptions) - base.after_destroy(:remove_from_subscriptions) - end - - def remove_from_subscriptions - SolidusSubscriptions::LineItem.where(subscribable: self).delete_all - end - end - end - end -end - -Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::AutoDeleteFromSubscriptions) diff --git a/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb b/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb deleted file mode 100644 index 671dcbe..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Variant - module VariantPrettyName - def pretty_name - name = product.name - name += " - #{options_text}" if options_text.present? - name - end - end - end - end -end - -Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::VariantPrettyName) diff --git a/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb deleted file mode 100644 index 6ee754e..0000000 --- a/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module WalletPaymentSource - module ReportDefaultChangeToSubscriptions - def self.prepended(base) - base.after_save :report_default_change_to_subscriptions - end - - private - - def report_default_change_to_subscriptions - return if !previous_changes.key?('default') || !default? - - user.subscriptions.with_default_payment_source.each do |subscription| - ::Spree::Event.fire( - 'solidus_subscriptions.subscription_payment_method_changed', - subscription: subscription, - ) - end - end - end - end - end -end - -Spree::WalletPaymentSource.prepend(SolidusSubscriptions::Spree::WalletPaymentSource::ReportDefaultChangeToSubscriptions) diff --git a/lib/solidus_subscriptions/configuration.rb b/lib/solidus_subscriptions/configuration.rb index 2606272..18c7889 100644 --- a/lib/solidus_subscriptions/configuration.rb +++ b/lib/solidus_subscriptions/configuration.rb @@ -58,6 +58,7 @@ module SolidusSubscriptions :interval_length, :interval_units, :end_date, + :_destroy ] end -- cgit v1.2.3 From d1d131b62b9c27dc7ebd131b878e14192020971b Mon Sep 17 00:00:00 2001 From: cesartalves Date: Fri, 16 Apr 2021 12:21:49 -0300 Subject: Move all decorators to that should be solidus-x dependent to the lib folder --- .../create_subscription_line_items.rb | 36 ---------------------- .../subscription_line_items_association.rb | 26 ---------------- .../spree/order/after_create.rb | 19 ------------ .../spree/order/finalize_creates_subscriptions.rb | 25 --------------- .../spree/order/installment_details_association.rb | 15 --------- .../spree/order/subscription_association.rb | 15 --------- .../order/subscription_line_items_association.rb | 19 ------------ .../spree/product/delegate_subscribable.rb | 17 ---------- .../spree/user/have_many_subscriptions.rb | 30 ------------------ .../variant/auto_delete_from_subscriptions.rb | 20 ------------ .../spree/variant/variant_pretty_name.rb | 17 ---------- .../report_default_change_to_subscriptions.rb | 28 ----------------- .../create_subscription_line_items.rb | 35 --------------------- .../subscription_line_items_association.rb | 26 ++++++++++++++++ .../spree/order/after_create.rb | 19 ++++++++++++ .../spree/order/finalize_creates_subscriptions.rb | 25 +++++++++++++++ .../spree/order/installment_details_association.rb | 15 +++++++++ .../spree/order/subscription_association.rb | 15 +++++++++ .../order/subscription_line_items_association.rb | 19 ++++++++++++ .../spree/product/delegate_subscribable.rb | 17 ++++++++++ .../spree/user/have_many_subscriptions.rb | 30 ++++++++++++++++++ .../variant/auto_delete_from_subscriptions.rb | 20 ++++++++++++ .../spree/variant/variant_pretty_name.rb | 17 ++++++++++ .../report_default_change_to_subscriptions.rb | 28 +++++++++++++++++ .../create_subscription_line_items.rb | 36 ++++++++++++++++++++++ .../create_subscription_line_items.rb | 35 +++++++++++++++++++++ lib/solidus_subscriptions/configuration.rb | 1 - 27 files changed, 302 insertions(+), 303 deletions(-) delete mode 100644 app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb delete mode 100644 app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb delete mode 100644 app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/order/after_create.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb create mode 100644 app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb create mode 100644 lib/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb create mode 100644 lib/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb diff --git a/app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb b/app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb deleted file mode 100644 index 7872a2a..0000000 --- a/app/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -# Create new subscription line items associated to the current order, when -# a line item is added to the cart which includes subscription_line_item -# params. -# -# The Subscriptions::LineItem acts as a line item place holder for a -# Subscription, indicating that it has been added to the order, but not -# yet purchased -module SolidusSubscriptions - module Spree - module Api - module LineItemsController - module CreateSubscriptionLineItems - include SolidusSubscriptions::SubscriptionLineItemBuilder - - def self.prepended(base) - base.after_action( - :handle_subscription_line_items, - only: [:create, :update], - if: ->{ params[:subscription_line_item] } - ) - end - - private - - def handle_subscription_line_items - create_subscription_line_item(@line_item) - end - end - end - end - end -end - -Spree::Api::LineItemsController.prepend(SolidusSubscriptions::Spree::Api::LineItemsController::CreateSubscriptionLineItems) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb deleted file mode 100644 index ccb483f..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -# Each Spree::LineItem can have multiple subscription_line_items. This -# allows a cart to represent multiple subscriptions to the same item in -# the same order. -module SolidusSubscriptions - module Spree - module LineItem - module SubscriptionLineItemsAssociation - def self.prepended(base) - base.has_many( - :subscription_line_items, - class_name: 'SolidusSubscriptions::LineItem', - foreign_key: :spree_line_item_id, - inverse_of: :spree_line_item, - dependent: :destroy - ) - - base.accepts_nested_attributes_for :subscription_line_items - end - end - end - end -end - -Spree::LineItem.prepend(SolidusSubscriptions::Spree::LineItem::SubscriptionLineItemsAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb deleted file mode 100644 index c67cb96..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/order/after_create.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Order - module AfterCreate - def ensure_line_items_present - super unless subscription_order? - end - - def send_cancel_email - super unless subscription_order? - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::AfterCreate) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb deleted file mode 100644 index 3f83b82..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -# Once an order is finalized its subscriptions line items should be converted -# into active subscriptions. This hooks into Spree::Order#finalize! and -# passes all subscription_line_items present on the order to the Subscription -# generator which will build and persist the subscriptions -module SolidusSubscriptions - module Spree - module Order - module FinalizeCreatesSubscriptions - def finalize! - SolidusSubscriptions::SubscriptionGenerator.group(subscription_line_items).each do |line_items| - SolidusSubscriptions::SubscriptionGenerator.activate(line_items) - end - - reload - - super - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::FinalizeCreatesSubscriptions) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb deleted file mode 100644 index a1261d4..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/order/installment_details_association.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Order - module InstallmentDetailsAssociation - def self.prepended(base) - base.has_many :installment_details, class_name: '::SolidusSubscriptions::InstallmentDetail' - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::InstallmentDetailsAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb deleted file mode 100644 index 81284a3..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_association.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Order - module SubscriptionAssociation - def self.prepended(base) - base.belongs_to :subscription, class_name: '::SolidusSubscriptions::Subscription', optional: true - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb b/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb deleted file mode 100644 index 3b48225..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -# Spree::Orders may contain many subscription_line_items. When the order is -# finalized these subscription_line_items are converted into subscritpions. -# The order needs to be able to get a list of associated subscription_line_items -# to be able to populate the full subscriptions. -module SolidusSubscriptions - module Spree - module Order - module SubscriptionLineItemsAssociation - def self.prepended(base) - base.has_many :subscription_line_items, through: :line_items - end - end - end - end -end - -Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionLineItemsAssociation) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb b/app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb deleted file mode 100644 index 740b9d8..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/product/delegate_subscribable.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Product - module DelegateSubscribable - def self.prepended(base) - base.class_eval do - delegate :subscribable, :subscribable=, to: :find_or_build_master - end - end - end - end - end -end - -Spree::Product.prepend(SolidusSubscriptions::Spree::Product::DelegateSubscribable) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb deleted file mode 100644 index 1fb4cdf..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -# Spree::Users maintain a list of the subscriptions associated with them -module SolidusSubscriptions - module Spree - module User - module HaveManySubscriptions - def self.prepended(base) - base.has_many( - :subscriptions, - class_name: 'SolidusSubscriptions::Subscription', - foreign_key: 'user_id' - ) - - base.accepts_nested_attributes_for :subscriptions - end - - def subscriptions_attributes=(params) - ::Spree::Deprecation.warn( - 'Creating or updating subscriptions through Spree::User nested attributes is deprecated. ' \ - 'Please use subscriptions APIs directly.' - ) - super - end - end - end - end -end - -Spree.user_class.prepend(SolidusSubscriptions::Spree::User::HaveManySubscriptions) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb deleted file mode 100644 index bba173e..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Variant - module AutoDeleteFromSubscriptions - def self.prepended(base) - base.after_discard(:remove_from_subscriptions) - base.after_destroy(:remove_from_subscriptions) - end - - def remove_from_subscriptions - SolidusSubscriptions::LineItem.where(subscribable: self).delete_all - end - end - end - end -end - -Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::AutoDeleteFromSubscriptions) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb b/app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb deleted file mode 100644 index 671dcbe..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module Variant - module VariantPrettyName - def pretty_name - name = product.name - name += " - #{options_text}" if options_text.present? - name - end - end - end - end -end - -Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::VariantPrettyName) diff --git a/app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb b/app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb deleted file mode 100644 index 6ee754e..0000000 --- a/app/decorators/core/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - module Spree - module WalletPaymentSource - module ReportDefaultChangeToSubscriptions - def self.prepended(base) - base.after_save :report_default_change_to_subscriptions - end - - private - - def report_default_change_to_subscriptions - return if !previous_changes.key?('default') || !default? - - user.subscriptions.with_default_payment_source.each do |subscription| - ::Spree::Event.fire( - 'solidus_subscriptions.subscription_payment_method_changed', - subscription: subscription, - ) - end - end - end - end - end -end - -Spree::WalletPaymentSource.prepend(SolidusSubscriptions::Spree::WalletPaymentSource::ReportDefaultChangeToSubscriptions) diff --git a/app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb b/app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb deleted file mode 100644 index 6b39b4c..0000000 --- a/app/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -# Create new subscription line items associated to the current order, when -# a line item is added to the cart which includes subscription_line_item -# params. -# -# The Subscriptions::LineItem acts as a line item place holder for a -# Subscription, indicating that it has been added to the order, but not -# yet purchased -module SolidusSubscriptions - module Spree - module OrdersController - module CreateSubscriptionLineItems - include SolidusSubscriptions::SubscriptionLineItemBuilder - - def self.prepended(base) - base.after_action( - :handle_subscription_line_items, - only: :populate, - if: ->{ params[:subscription_line_item] } - ) - end - - private - - def handle_subscription_line_items - line_item = @current_order.line_items.find_by(variant_id: params[:variant_id]) - create_subscription_line_item(line_item) - end - end - end - end -end - -Spree::OrdersController.prepend(SolidusSubscriptions::Spree::OrdersController::CreateSubscriptionLineItems) diff --git a/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb b/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb new file mode 100644 index 0000000..ccb483f --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +# Each Spree::LineItem can have multiple subscription_line_items. This +# allows a cart to represent multiple subscriptions to the same item in +# the same order. +module SolidusSubscriptions + module Spree + module LineItem + module SubscriptionLineItemsAssociation + def self.prepended(base) + base.has_many( + :subscription_line_items, + class_name: 'SolidusSubscriptions::LineItem', + foreign_key: :spree_line_item_id, + inverse_of: :spree_line_item, + dependent: :destroy + ) + + base.accepts_nested_attributes_for :subscription_line_items + end + end + end + end +end + +Spree::LineItem.prepend(SolidusSubscriptions::Spree::LineItem::SubscriptionLineItemsAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb b/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb new file mode 100644 index 0000000..c67cb96 --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Order + module AfterCreate + def ensure_line_items_present + super unless subscription_order? + end + + def send_cancel_email + super unless subscription_order? + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::AfterCreate) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb new file mode 100644 index 0000000..3f83b82 --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +# Once an order is finalized its subscriptions line items should be converted +# into active subscriptions. This hooks into Spree::Order#finalize! and +# passes all subscription_line_items present on the order to the Subscription +# generator which will build and persist the subscriptions +module SolidusSubscriptions + module Spree + module Order + module FinalizeCreatesSubscriptions + def finalize! + SolidusSubscriptions::SubscriptionGenerator.group(subscription_line_items).each do |line_items| + SolidusSubscriptions::SubscriptionGenerator.activate(line_items) + end + + reload + + super + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::FinalizeCreatesSubscriptions) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb b/app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb new file mode 100644 index 0000000..a1261d4 --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/order/installment_details_association.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Order + module InstallmentDetailsAssociation + def self.prepended(base) + base.has_many :installment_details, class_name: '::SolidusSubscriptions::InstallmentDetail' + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::InstallmentDetailsAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb b/app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb new file mode 100644 index 0000000..81284a3 --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/order/subscription_association.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Order + module SubscriptionAssociation + def self.prepended(base) + base.belongs_to :subscription, class_name: '::SolidusSubscriptions::Subscription', optional: true + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb b/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb new file mode 100644 index 0000000..3b48225 --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Spree::Orders may contain many subscription_line_items. When the order is +# finalized these subscription_line_items are converted into subscritpions. +# The order needs to be able to get a list of associated subscription_line_items +# to be able to populate the full subscriptions. +module SolidusSubscriptions + module Spree + module Order + module SubscriptionLineItemsAssociation + def self.prepended(base) + base.has_many :subscription_line_items, through: :line_items + end + end + end + end +end + +Spree::Order.prepend(SolidusSubscriptions::Spree::Order::SubscriptionLineItemsAssociation) diff --git a/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb b/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb new file mode 100644 index 0000000..740b9d8 --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Product + module DelegateSubscribable + def self.prepended(base) + base.class_eval do + delegate :subscribable, :subscribable=, to: :find_or_build_master + end + end + end + end + end +end + +Spree::Product.prepend(SolidusSubscriptions::Spree::Product::DelegateSubscribable) diff --git a/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb new file mode 100644 index 0000000..1fb4cdf --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +# Spree::Users maintain a list of the subscriptions associated with them +module SolidusSubscriptions + module Spree + module User + module HaveManySubscriptions + def self.prepended(base) + base.has_many( + :subscriptions, + class_name: 'SolidusSubscriptions::Subscription', + foreign_key: 'user_id' + ) + + base.accepts_nested_attributes_for :subscriptions + end + + def subscriptions_attributes=(params) + ::Spree::Deprecation.warn( + 'Creating or updating subscriptions through Spree::User nested attributes is deprecated. ' \ + 'Please use subscriptions APIs directly.' + ) + super + end + end + end + end +end + +Spree.user_class.prepend(SolidusSubscriptions::Spree::User::HaveManySubscriptions) diff --git a/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb new file mode 100644 index 0000000..73bbc25 --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Variant + module AutoDeleteFromSubscriptions + def self.prepended(base) + base.after_discard(:remove_from_subscriptions) + base.after_destroy(:remove_from_subscriptions) + end + + def remove_from_subscriptions + SolidusSubscriptions::LineItem.where(subscribable: self).delete_all + end + + ::Spree::Variant.prepend self + end + end + end +end diff --git a/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb b/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb new file mode 100644 index 0000000..671dcbe --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Variant + module VariantPrettyName + def pretty_name + name = product.name + name += " - #{options_text}" if options_text.present? + name + end + end + end + end +end + +Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::VariantPrettyName) diff --git a/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb new file mode 100644 index 0000000..6ee754e --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/wallet_payment_source/report_default_change_to_subscriptions.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module WalletPaymentSource + module ReportDefaultChangeToSubscriptions + def self.prepended(base) + base.after_save :report_default_change_to_subscriptions + end + + private + + def report_default_change_to_subscriptions + return if !previous_changes.key?('default') || !default? + + user.subscriptions.with_default_payment_source.each do |subscription| + ::Spree::Event.fire( + 'solidus_subscriptions.subscription_payment_method_changed', + subscription: subscription, + ) + end + end + end + end + end +end + +Spree::WalletPaymentSource.prepend(SolidusSubscriptions::Spree::WalletPaymentSource::ReportDefaultChangeToSubscriptions) diff --git a/lib/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb b/lib/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb new file mode 100644 index 0000000..7872a2a --- /dev/null +++ b/lib/decorators/api/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# Create new subscription line items associated to the current order, when +# a line item is added to the cart which includes subscription_line_item +# params. +# +# The Subscriptions::LineItem acts as a line item place holder for a +# Subscription, indicating that it has been added to the order, but not +# yet purchased +module SolidusSubscriptions + module Spree + module Api + module LineItemsController + module CreateSubscriptionLineItems + include SolidusSubscriptions::SubscriptionLineItemBuilder + + def self.prepended(base) + base.after_action( + :handle_subscription_line_items, + only: [:create, :update], + if: ->{ params[:subscription_line_item] } + ) + end + + private + + def handle_subscription_line_items + create_subscription_line_item(@line_item) + end + end + end + end + end +end + +Spree::Api::LineItemsController.prepend(SolidusSubscriptions::Spree::Api::LineItemsController::CreateSubscriptionLineItems) diff --git a/lib/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb b/lib/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb new file mode 100644 index 0000000..6b39b4c --- /dev/null +++ b/lib/decorators/frontend/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# Create new subscription line items associated to the current order, when +# a line item is added to the cart which includes subscription_line_item +# params. +# +# The Subscriptions::LineItem acts as a line item place holder for a +# Subscription, indicating that it has been added to the order, but not +# yet purchased +module SolidusSubscriptions + module Spree + module OrdersController + module CreateSubscriptionLineItems + include SolidusSubscriptions::SubscriptionLineItemBuilder + + def self.prepended(base) + base.after_action( + :handle_subscription_line_items, + only: :populate, + if: ->{ params[:subscription_line_item] } + ) + end + + private + + def handle_subscription_line_items + line_item = @current_order.line_items.find_by(variant_id: params[:variant_id]) + create_subscription_line_item(line_item) + end + end + end + end +end + +Spree::OrdersController.prepend(SolidusSubscriptions::Spree::OrdersController::CreateSubscriptionLineItems) diff --git a/lib/solidus_subscriptions/configuration.rb b/lib/solidus_subscriptions/configuration.rb index 18c7889..2606272 100644 --- a/lib/solidus_subscriptions/configuration.rb +++ b/lib/solidus_subscriptions/configuration.rb @@ -58,7 +58,6 @@ module SolidusSubscriptions :interval_length, :interval_units, :end_date, - :_destroy ] end -- cgit v1.2.3