spree_cm_commissioner 1.8.7.pre.beta1 → 1.8.9

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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +2 -2
  3. data/app/controllers/concerns/spree_cm_commissioner/order_concern.rb +28 -0
  4. data/app/controllers/spree/api/v2/storefront/order_histories_controller.rb +58 -0
  5. data/app/controllers/spree/api/v2/storefront/pin_code_generators_controller.rb +4 -2
  6. data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +0 -1
  7. data/app/controllers/spree/api/v2/tenant/pin_code_generators_controller.rb +4 -2
  8. data/app/controllers/spree_cm_commissioner/api/v2/storefront/cart_controller_decorator.rb +5 -30
  9. data/app/controllers/spree_cm_commissioner/api/v2/storefront/checkout_controller_decorator.rb +1 -3
  10. data/app/finders/spree_cm_commissioner/orders/find.rb +34 -0
  11. data/app/helpers/spree_cm_commissioner/pin_code_sender_helper.rb +22 -0
  12. data/app/interactors/spree_cm_commissioner/pin_code_sender.rb +14 -2
  13. data/app/interactors/spree_cm_commissioner/sms.rb +1 -1
  14. data/app/interactors/spree_cm_commissioner/telegram_debug_pin_code_sender.rb +2 -1
  15. data/app/jobs/spree_cm_commissioner/sms_pin_code_job.rb +1 -1
  16. data/app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb +11 -3
  17. data/app/mailers/spree_cm_commissioner/pin_code_mailer.rb +9 -3
  18. data/app/models/concerns/spree_cm_commissioner/store_preference.rb +1 -0
  19. data/app/models/spree_cm_commissioner/order_decorator.rb +8 -0
  20. data/app/models/spree_cm_commissioner/store_decorator.rb +1 -0
  21. data/app/models/spree_cm_commissioner/tenant.rb +4 -0
  22. data/app/serializers/spree/v2/storefront/cart_serializer_decorator.rb +8 -1
  23. data/app/views/spree/shared/_base_mailer_header.html.erb +12 -0
  24. data/app/views/spree_cm_commissioner/pin_code_mailer/send_pin_code.html.erb +2 -2
  25. data/config/routes.rb +7 -0
  26. data/db/migrate/20250403040036_install_blazer.rb +5 -5
  27. data/db/migrate/20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb +1 -1
  28. data/db/migrate/20250404050117_add_archived_at_to_spree_orders.rb +5 -0
  29. data/lib/generators/spree_cm_commissioner/install/install_generator.rb +1 -1
  30. data/lib/spree_cm_commissioner/version.rb +1 -1
  31. data/spree_cm_commissioner.gemspec +1 -1
  32. metadata +12 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5c82306658e75ae6622d3a57418ed2c33fa59431a139f6df65261ab4c66cc66
4
- data.tar.gz: ad149426344cd2aed27ebbf8734e1200006db9cb849f2fb68e72ad3f5fb40afb
3
+ metadata.gz: 1b66674e326443a681e0e4f80caa6a25569d508141a05966471c14f675a6690d
4
+ data.tar.gz: ab0ab4b8b78a04c5a9f54ab15ce88df60b5719b85566ab8aae8c1a6574a46d73
5
5
  SHA512:
6
- metadata.gz: 601ff2d02e0a2054ec59ab126e4c9fc078f23f4e275e24bf9180ed5048d9a3bcbacd4b27a3f94a74e2efe69552fad35365bacacac050a9feeade522fd56eb50a
7
- data.tar.gz: 23a7212be5f02cdfb1d9b9e5b3be810c2d37e8e3eb33ea98feb2b6a6ca537a2d8f5dd6157e7c8f7e54146f8234e9e7d58fea670d47dd6282a87f1d47b0f3adb5
6
+ metadata.gz: cb4d294124696d2fa0aa76beb43eb2ce76182565118d5d98b750efd5df27daadd2081dc4c3bd707c37794c375d3ac0f55b448ec0c2b52389b6169f70d261102d
7
+ data.tar.gz: d522bb1bc55ddb70ce0185ab6c0352a51829199c535da283555a33d9ca1897379b95229593fc2e98ed0023c8d4ca3ef9318438d1558439435656b9a33c8d14ac
data/Gemfile.lock CHANGED
@@ -34,13 +34,13 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.8.7.pre.beta1)
37
+ spree_cm_commissioner (1.8.9)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
41
41
  aws-sdk-ecs
42
42
  aws-sdk-s3
43
- blazer (~> 3.0.0)
43
+ blazer (~> 3.0.4)
44
44
  byebug
45
45
  counter_culture (~> 3.2)
46
46
  dry-validation (~> 1.10)
@@ -0,0 +1,28 @@
1
+ module SpreeCmCommissioner
2
+ module OrderConcern
3
+ # override
4
+ def spree_current_order
5
+ @spree_current_order ||= find_spree_current_order
6
+ return nil if @spree_current_order.blank?
7
+
8
+ # Spree doesn't validate this by default (might be a bug).
9
+ # Temporary fix to ensure the order's user ID matches the logged-in user.
10
+ if @spree_current_order.user_id.present? && spree_current_user.present? && @spree_current_order.user_id != spree_current_user.id
11
+ raise CanCan::AccessDenied
12
+ end
13
+
14
+ @spree_current_order
15
+ end
16
+
17
+ # override
18
+ def find_spree_current_order
19
+ SpreeCmCommissioner::Orders::Find.new.execute(
20
+ store: current_store,
21
+ user: spree_current_user,
22
+ currency: current_currency,
23
+ token: order_token,
24
+ state: params[:state]
25
+ )
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,58 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class OrderHistoriesController < ::Spree::Api::V2::ResourceController
6
+ # GET /api/v2/storefront/order_histories
7
+ # For user - no params needed
8
+ # For guest - pass: { "order_tokens[]": [1, 2, 3] }
9
+ def index
10
+ render_serialized_payload do
11
+ serialize_collection(paginated_collection)
12
+ end
13
+ end
14
+
15
+ # PATCH /api/v2/storefront/order_histories/:id/archive
16
+ def archive
17
+ order_token = params[:id]
18
+ order = Spree::Order.not_archived.find_by!(token: order_token)
19
+
20
+ spree_authorize! :update, order, order_token
21
+ raise CanCan::AccessDenied unless order.payment?
22
+
23
+ if order.archive
24
+ render_serialized_payload { serialize_resource(order) }
25
+ else
26
+ render_error_payload(order.errors.full_messages.to_sentence)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def collection
33
+ if spree_current_user.present?
34
+ spree_current_user.orders.payment.not_archived
35
+ else
36
+ order_tokens = Array(params[:order_tokens])
37
+ return Spree::Order.none if order_tokens.empty?
38
+
39
+ Spree::Order.payment.not_archived.without_user.where(token: order_tokens)
40
+ end
41
+ end
42
+
43
+ def collection_serializer
44
+ Spree::V2::Storefront::CartSerializer
45
+ end
46
+
47
+ def resource_serializer
48
+ Spree::V2::Storefront::CartSerializer
49
+ end
50
+
51
+ def model_class
52
+ Spree::Order
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -19,7 +19,7 @@ module Spree
19
19
  render_error_payload(context.message, 400)
20
20
  end
21
21
 
22
- # :phone_number, :email, :type, :recaptcha_token, :recaptcha_action, :recaptcah_site_key
22
+ # :phone_number, :email, :type, :tenant
23
23
  def create
24
24
  context = SpreeCmCommissioner::PinCodeGenerator.call(pin_code_attrs)
25
25
 
@@ -40,8 +40,10 @@ module Spree
40
40
  SpreeCmCommissioner::V2::Storefront::PinCodeSerializer
41
41
  end
42
42
 
43
+ private
44
+
43
45
  def pin_code_attrs
44
- params.slice(:phone_number, :email, :type)
46
+ params.slice(:phone_number, :email, :type).merge(tenant: @tenant)
45
47
  end
46
48
  end
47
49
  end
@@ -6,7 +6,6 @@ module Spree
6
6
  class LineItemsController < CartController
7
7
  before_action :ensure_order, only: :create
8
8
  before_action :load_variant, only: :create
9
- before_action :ensure_cart_exist, only: :create
10
9
 
11
10
  # override
12
11
  def create
@@ -3,7 +3,7 @@ module Spree
3
3
  module V2
4
4
  module Tenant
5
5
  class PinCodeGeneratorsController < BaseController
6
- # :phone_number, :email, :type
6
+ # :phone_number, :email, :type, :tenant
7
7
  def create
8
8
  context = SpreeCmCommissioner::PinCodeGenerator.call(pin_code_attrs)
9
9
 
@@ -24,8 +24,10 @@ module Spree
24
24
  SpreeCmCommissioner::V2::Storefront::PinCodeSerializer
25
25
  end
26
26
 
27
+ private
28
+
27
29
  def pin_code_attrs
28
- params.slice(:phone_number, :email, :type)
30
+ params.slice(:phone_number, :email, :type).merge(tenant: @tenant)
29
31
  end
30
32
  end
31
33
  end
@@ -4,42 +4,17 @@ module SpreeCmCommissioner
4
4
  module Storefront
5
5
  module CartControllerDecorator
6
6
  def self.prepended(base)
7
- base.before_action :ensure_cart_exist, only: :add_item
7
+ base.include SpreeCmCommissioner::OrderConcern
8
8
  end
9
9
 
10
- # one usecase where this neccessary is when order.state is 'complete', but complated_at & payment_state is null,
11
- # this cause app to be stuck at book page because cart is not considered cart or completed.
12
- #
13
- # solution is to restart it back to cart.
10
+ # Restart the checkout flow to bring the order back to the cart view
14
11
  def restart_checkout_flow
15
12
  spree_authorize! :update, spree_current_order, order_token
16
13
 
17
- if spree_current_order.completed_at.present?
18
- render_error_payload('Cart already completed!')
19
- else
20
- spree_current_order.restart_checkout_flow
21
- spree_current_order.update_with_updater!
14
+ spree_current_order.restart_checkout_flow
15
+ spree_current_order.update_with_updater!
22
16
 
23
- render_serialized_payload { serialized_current_order }
24
- end
25
- end
26
-
27
- # we required only user can create cart
28
- # in case there is no cart, and user try to add item to cart,
29
- # it should create one instead of raising error.
30
- def ensure_cart_exist
31
- spree_authorize! :create, Spree::Order
32
- return if spree_current_order.present?
33
-
34
- create_cart_params = {
35
- user: spree_current_user,
36
- store: current_store,
37
- currency: current_currency,
38
- public_metadata: add_item_params[:public_metadata],
39
- private_metadata: add_item_params[:private_metadata]
40
- }
41
-
42
- @spree_current_order ||= create_service.call(create_cart_params).value
17
+ render_serialized_payload { serialized_current_order }
43
18
  end
44
19
  end
45
20
  end
@@ -4,9 +4,7 @@ module SpreeCmCommissioner
4
4
  module Storefront
5
5
  module CheckoutControllerDecorator
6
6
  def self.prepended(base)
7
- # spree_vpago gem update payment state in #payment_redirect
8
- # GET /payment_redirect
9
- base.around_action :set_writing_role, only: %i[payment_redirect]
7
+ base.include SpreeCmCommissioner::OrderConcern
10
8
  end
11
9
  end
12
10
  end
@@ -0,0 +1,34 @@
1
+ # Custom replacement for Spree::Orders::FindCurrent with the following improvements:
2
+ # - Supports filtering by state (e.g., to retrieve only 'cart' or 'address' orders for the page cart)
3
+ # - Allows retrieving the order in any state (not just incomplete), which solves the issue of 404s after payment
4
+ module SpreeCmCommissioner
5
+ module Orders
6
+ class Find
7
+ def execute(store:, user:, currency:, token: nil, state: nil)
8
+ params = { store_id: store.id, currency: currency }
9
+ params[:state] = state if state.present?
10
+
11
+ return find_by_token(params, token) if token.present?
12
+ return find_by_user(params, user) if user.present?
13
+
14
+ nil
15
+ end
16
+
17
+ def find_by_token(params, token)
18
+ params[:token] = token
19
+ scope.find_by(params)
20
+ end
21
+
22
+ def find_by_user(params, user)
23
+ params[:user_id] = user.id
24
+ scope.order(created_at: :desc).find_by(params)
25
+ end
26
+
27
+ private
28
+
29
+ def scope
30
+ Spree::Order.not_archived.not_canceled
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ module SpreeCmCommissioner
2
+ module PinCodeSenderHelper
3
+ def sender_name(tenant)
4
+ return Spree::Store.default&.name if tenant.nil?
5
+
6
+ tenant.active_vendor&.name
7
+ end
8
+
9
+ def sender_email(tenant)
10
+ return Spree::Store.default.mail_from_address if tenant.nil?
11
+
12
+ tenant.active_vendor&.notification_email
13
+ end
14
+
15
+ def logo_url(tenant)
16
+ vendor_or_store = tenant.nil? || tenant.active_vendor.nil? ? Spree::Store.default : tenant.active_vendor
17
+ return unless vendor_or_store&.logo&.attachment&.attached?
18
+
19
+ main_app.cdn_image_url(vendor_or_store.logo.attachment.variant(resize_to_limit: [244, 104]))
20
+ end
21
+ end
22
+ end
@@ -15,7 +15,10 @@ module SpreeCmCommissioner
15
15
  private
16
16
 
17
17
  def send_sms
18
+ from = context.tenant || Spree::Store.default
19
+
18
20
  options = {
21
+ from: from,
19
22
  to: context.pin_code.contact,
20
23
  body: I18n.t('pincode_sender.sms.body', code: context.pin_code.code, readable_type: context.pin_code.readable_type)
21
24
  }
@@ -24,13 +27,22 @@ module SpreeCmCommissioner
24
27
  end
25
28
 
26
29
  def send_email
27
- SpreeCmCommissioner::PinCodeMailer.send_pin_code(context.pin_code.id, context.pin_code.readable_type).deliver_later
30
+ SpreeCmCommissioner::PinCodeMailer.send_pin_code(
31
+ context.pin_code.id,
32
+ context.pin_code.readable_type,
33
+ context.tenant
34
+ ).deliver_later
28
35
  end
29
36
 
30
37
  def send_telegram_debug_pin_code
31
38
  return unless ENV['PIN_CODE_DEBUG_NOTIFIY_TELEGRAM_ENABLE'] == 'yes'
32
39
 
33
- SpreeCmCommissioner::TelegramDebugPinCodeSenderJob.perform_later(context.pin_code.id)
40
+ options = {
41
+ pin_code_id: context.pin_code.id,
42
+ tenant_id: context.tenant&.id
43
+ }
44
+
45
+ SpreeCmCommissioner::TelegramDebugPinCodeSenderJob.perform_later(options)
34
46
  end
35
47
  end
36
48
  end
@@ -40,7 +40,7 @@ module SpreeCmCommissioner
40
40
  end
41
41
 
42
42
  def sms_options
43
- opts = { to: context.to, body: context.body }
43
+ opts = { from: context.from, to: context.to, body: context.body }
44
44
  opts[:to] = sanitize(opts[:to]) if opts[:to].present?
45
45
  opts[:from] = from_number
46
46
  opts
@@ -1,6 +1,6 @@
1
1
  module SpreeCmCommissioner
2
2
  class TelegramDebugPinCodeSender < BaseInteractor
3
- delegate :pin_code, to: :context
3
+ delegate :pin_code, :name, to: :context
4
4
 
5
5
  def call
6
6
  telegram_client.send_message(
@@ -13,6 +13,7 @@ module SpreeCmCommissioner
13
13
  def body
14
14
  text = []
15
15
 
16
+ text << "<b>From: #{name}</b>"
16
17
  text << "<b>PIN CODE sent to #{pin_code.contact}</b>"
17
18
  text << "<code>#{pin_code.code}</code> is your #{pin_code.readable_type}"
18
19
 
@@ -1,6 +1,6 @@
1
1
  module SpreeCmCommissioner
2
2
  class SmsPinCodeJob < SpreeCmCommissioner::SmsJob
3
- # options = { to: xxxx, body: xxxx }
3
+ # options = { from: xxx, to: xxxx, body: xxxx }
4
4
  def perform(options)
5
5
  SpreeCmCommissioner::Sms.call(options)
6
6
  end
@@ -1,9 +1,17 @@
1
1
  module SpreeCmCommissioner
2
2
  class TelegramDebugPinCodeSenderJob < ApplicationUniqueJob
3
- def perform(pin_code_id)
4
- pin_code = SpreeCmCommissioner::PinCode.find(pin_code_id)
3
+ include SpreeCmCommissioner::PinCodeSenderHelper
5
4
 
6
- SpreeCmCommissioner::TelegramDebugPinCodeSender.call(pin_code: pin_code)
5
+ def perform(options)
6
+ pin_code = SpreeCmCommissioner::PinCode.find(options[:pin_code_id])
7
+ tenant = SpreeCmCommissioner::Tenant.find_by(id: options[:tenant_id])
8
+
9
+ name = sender_name(tenant)
10
+
11
+ SpreeCmCommissioner::TelegramDebugPinCodeSender.call(
12
+ pin_code: pin_code,
13
+ name: name
14
+ )
7
15
  end
8
16
  end
9
17
  end
@@ -1,13 +1,19 @@
1
1
  module SpreeCmCommissioner
2
2
  class PinCodeMailer < Spree::BaseMailer
3
- def send_pin_code(pin_code_id, action)
3
+ include SpreeCmCommissioner::PinCodeSenderHelper
4
+
5
+ def send_pin_code(pin_code_id, action, tenant)
4
6
  @pin_code = SpreeCmCommissioner::PinCode.find(pin_code_id)
5
7
 
8
+ @sender_name = sender_name(tenant)
9
+ @sender_email = sender_email(tenant)
10
+ @logo_path = logo_url(tenant)
11
+
6
12
  return unless @pin_code.email?
7
13
 
8
- subject = "#{Spree::Store.default.name} #{action.titlecase}"
14
+ subject = "#{@sender_name} #{action.titlecase}"
9
15
 
10
- mail(from: from_address, to: @pin_code.contact, subject: subject)
16
+ mail(from: @sender_email, to: @pin_code.contact, subject: subject)
11
17
  end
12
18
  end
13
19
  end
@@ -3,6 +3,7 @@ module SpreeCmCommissioner
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
+ preference :sms_sender_id, :string
6
7
  preference :telegram_order_alert_chat_id, :string
7
8
  preference :telegram_order_request_alert_chat_id, :string
8
9
  end
@@ -7,6 +7,10 @@ module SpreeCmCommissioner
7
7
  base.scope :subscription, -> { where.not(subscription_id: nil) }
8
8
  base.scope :paid, -> { where(payment_state: :paid) }
9
9
  base.scope :complete_or_canceled, -> { complete.or(where(state: 'canceled')) }
10
+ base.scope :payment, -> { incomplete.where(state: 'payment') }
11
+ base.scope :archived, -> { where.not(archived_at: nil) }
12
+ base.scope :not_archived, -> { where(archived_at: nil) }
13
+ base.scope :without_user, -> { where(user_id: nil) }
10
14
 
11
15
  base.scope :filter_by_match_user_contact, lambda { |user|
12
16
  complete.where(
@@ -101,6 +105,10 @@ module SpreeCmCommissioner
101
105
  self.class.unscoped.where(id: self).update_all(changes) # rubocop:disable Rails/SkipsModelValidations
102
106
  end
103
107
 
108
+ def archive
109
+ update(archived_at: Time.current)
110
+ end
111
+
104
112
  # overrided
105
113
  # avoid raise error when source_id is nil.
106
114
  # https://github.com/channainfo/commissioner/pull/843
@@ -5,6 +5,7 @@ module SpreeCmCommissioner
5
5
 
6
6
  base.has_one :default_notification_image, class_name: 'SpreeCmCommissioner::FeatureImage', dependent: :destroy, as: :viewable
7
7
  base.accepts_nested_attributes_for :default_notification_image, reject_if: :all_blank
8
+ base.multi_tenant :tenant, class_name: 'SpreeCmCommissioner::Tenant'
8
9
  end
9
10
  end
10
11
  end
@@ -13,6 +13,10 @@ module SpreeCmCommissioner
13
13
 
14
14
  before_validation :generate_slug, if: -> { slug.blank? && name.present? }
15
15
 
16
+ def active_vendor
17
+ vendors.where(state: :active).first
18
+ end
19
+
16
20
  private
17
21
 
18
22
  def generate_slug
@@ -3,8 +3,15 @@ module Spree
3
3
  module Storefront
4
4
  module CartSerializerDecorator
5
5
  def self.prepended(base)
6
- base.attributes :phone_number, :intel_phone_number, :country_code, :request_state, :qr_data,
6
+ base.attributes :phone_number, :intel_phone_number, :country_code, :request_state,
7
7
  :channel
8
+
9
+ base.attribute :qr_data do |order|
10
+ order.qr_data if order.completed?
11
+ end
12
+
13
+ # override to return all payments instead of only valid_payments
14
+ base.has_many :payments
8
15
  end
9
16
  end
10
17
  end
@@ -0,0 +1,12 @@
1
+ <!-- override base_mailer_header.html.erb -->
2
+ <tr>
3
+ <td class="email-masthead">
4
+ <%= link_to @sender_name, class: 'template-label' do %>
5
+ <% if @logo_path.present? %>
6
+ <%= image_tag @logo_path, class: 'logo', alt: @sender_name, title: @sender_name %>
7
+ <% else %>
8
+ <%= @sender_name %>
9
+ <% end %>
10
+ <% end %>
11
+ </td>
12
+ </tr>
@@ -3,7 +3,7 @@
3
3
  <tr>
4
4
  <td>
5
5
  <h4>Hello, </h4>
6
- <p>Welcome to <%= Spree::Store.default.name %> </p>
6
+ <p>Welcome to <%= @sender_name %> </p>
7
7
  <p>Please use the following code:</p>
8
8
  <h5 style="font-size: 22px;padding: 0 10px;"><%= @pin_code.code %></h5>
9
9
  <p>to verify your account.</p>
@@ -11,7 +11,7 @@
11
11
  <br>
12
12
  <p>
13
13
  Regards,<br>
14
- The <%= Spree::Store.default.name %> team
14
+ The <%= @sender_name %> team
15
15
  </p>
16
16
  </td>
17
17
  </tr>
data/config/routes.rb CHANGED
@@ -523,6 +523,13 @@ Spree::Core::Engine.add_routes do
523
523
 
524
524
  resources :wished_items
525
525
  resources :user_promotion
526
+
527
+ resources :order_histories, only: %i[index] do
528
+ member do
529
+ patch :archive
530
+ end
531
+ end
532
+
526
533
  resources :order_promotions
527
534
  resources :guest_card_classes
528
535
 
@@ -1,6 +1,6 @@
1
1
  class InstallBlazer < ActiveRecord::Migration[7.0]
2
2
  def change
3
- create_table :blazer_queries do |t|
3
+ create_table :blazer_queries, if_not_exists: true do |t|
4
4
  t.references :creator
5
5
  t.string :name
6
6
  t.text :description
@@ -10,7 +10,7 @@ class InstallBlazer < ActiveRecord::Migration[7.0]
10
10
  t.timestamps null: false
11
11
  end
12
12
 
13
- create_table :blazer_audits do |t|
13
+ create_table :blazer_audits, if_not_exists: true do |t|
14
14
  t.references :user
15
15
  t.references :query
16
16
  t.text :statement
@@ -18,20 +18,20 @@ class InstallBlazer < ActiveRecord::Migration[7.0]
18
18
  t.datetime :created_at
19
19
  end
20
20
 
21
- create_table :blazer_dashboards do |t|
21
+ create_table :blazer_dashboards, if_not_exists: true do |t|
22
22
  t.references :creator
23
23
  t.string :name
24
24
  t.timestamps null: false
25
25
  end
26
26
 
27
- create_table :blazer_dashboard_queries do |t|
27
+ create_table :blazer_dashboard_queries, if_not_exists: true do |t|
28
28
  t.references :dashboard
29
29
  t.references :query
30
30
  t.integer :position
31
31
  t.timestamps null: false
32
32
  end
33
33
 
34
- create_table :blazer_checks do |t|
34
+ create_table :blazer_checks, if_not_exists: true do |t|
35
35
  t.references :creator
36
36
  t.references :query
37
37
  t.string :state
@@ -1,6 +1,6 @@
1
1
  class CreateSpreeCmCommissionerTaxonBlazerQuery < ActiveRecord::Migration[7.0]
2
2
  def change
3
- create_table :cm_taxon_blazer_queries,if_not_exists: true do |t|
3
+ create_table :cm_taxon_blazer_queries, if_not_exists: true do |t|
4
4
  t.references :taxon, foreign_key: { to_table: :spree_taxons }, null: false, index: true
5
5
  t.references :blazer_query, foreign_key: { to_table: :blazer_queries }, null: false, index: true
6
6
  t.timestamps
@@ -0,0 +1,5 @@
1
+ class AddArchivedAtToSpreeOrders < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :spree_orders, :archived_at, :datetime, if_not_exists: true
4
+ end
5
+ end
@@ -12,10 +12,10 @@ module SpreeCmCommissioner
12
12
 
13
13
  def add_migrations
14
14
  gems = %i[
15
- blazer
16
15
  spree_multi_vendor
17
16
  spree_cm_commissioner
18
17
  ]
18
+
19
19
  gems.each do |gem|
20
20
  run "bundle exec rake railties:install:migrations FROM=#{gem}"
21
21
  end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.8.7-beta1'.freeze
2
+ VERSION = '1.8.9'.freeze
3
3
 
4
4
  module_function
5
5
 
@@ -55,6 +55,6 @@ Gem::Specification.new do |s|
55
55
  s.add_dependency 'counter_culture', '~> 3.2'
56
56
  s.add_development_dependency 'pg'
57
57
  s.add_development_dependency 'spree_dev_tools'
58
- s.add_dependency 'blazer', '~> 3.0.0'
58
+ s.add_dependency 'blazer', '~> 3.0.4'
59
59
  s.metadata['rubygems_mfa_required'] = 'true'
60
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.7.pre.beta1
4
+ version: 1.8.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-03 00:00:00.000000000 Z
11
+ date: 2025-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -484,14 +484,14 @@ dependencies:
484
484
  requirements:
485
485
  - - "~>"
486
486
  - !ruby/object:Gem::Version
487
- version: 3.0.0
487
+ version: 3.0.4
488
488
  type: :runtime
489
489
  prerelease: false
490
490
  version_requirements: !ruby/object:Gem::Requirement
491
491
  requirements:
492
492
  - - "~>"
493
493
  - !ruby/object:Gem::Version
494
- version: 3.0.0
494
+ version: 3.0.4
495
495
  description: Add (optional) extension description here
496
496
  email: you@example.com
497
497
  executables: []
@@ -679,6 +679,7 @@ files:
679
679
  - app/controllers/concerns/spree_cm_commissioner/content_cachable.rb
680
680
  - app/controllers/concerns/spree_cm_commissioner/events/role_authorization.rb
681
681
  - app/controllers/concerns/spree_cm_commissioner/exception_notificable.rb
682
+ - app/controllers/concerns/spree_cm_commissioner/order_concern.rb
682
683
  - app/controllers/concerns/spree_cm_commissioner/transit/taxon_bitwise.rb
683
684
  - app/controllers/concerns/spree_cm_commissioner/waiting_room_authorization.rb
684
685
  - app/controllers/spree/admin/account_deletions_controller.rb
@@ -800,6 +801,7 @@ files:
800
801
  - app/controllers/spree/api/v2/storefront/line_items_controller.rb
801
802
  - app/controllers/spree/api/v2/storefront/nearby_places_controller.rb
802
803
  - app/controllers/spree/api/v2/storefront/notifications_controller.rb
804
+ - app/controllers/spree/api/v2/storefront/order_histories_controller.rb
803
805
  - app/controllers/spree/api/v2/storefront/order_products_taxons_controller.rb
804
806
  - app/controllers/spree/api/v2/storefront/order_promotions_controller.rb
805
807
  - app/controllers/spree/api/v2/storefront/order_qrs_controller.rb
@@ -934,6 +936,7 @@ files:
934
936
  - app/factory/spree_cm_commissioner/order_telegram_message_factory.rb
935
937
  - app/factory/spree_cm_commissioner/telegram_message_factory.rb
936
938
  - app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb
939
+ - app/finders/spree_cm_commissioner/orders/find.rb
937
940
  - app/finders/spree_cm_commissioner/orders/find_by_state.rb
938
941
  - app/finders/spree_cm_commissioner/payment_methods/group_by_bank.rb
939
942
  - app/helpers/spree/admin/base_helper_decorator.rb
@@ -951,6 +954,7 @@ files:
951
954
  - app/helpers/spree_cm_commissioner/admin/video_on_demand_helper.rb
952
955
  - app/helpers/spree_cm_commissioner/billing/monthly_orders_helper.rb
953
956
  - app/helpers/spree_cm_commissioner/billing/qrcodes_helper.rb
957
+ - app/helpers/spree_cm_commissioner/pin_code_sender_helper.rb
954
958
  - app/helpers/spree_cm_commissioner/telegram/base_helper.rb
955
959
  - app/helpers/spree_cm_commissioner/transit/service_calendars_helper.rb
956
960
  - app/interactors/spree_cm_commissioner/accommodation_search_detail.rb
@@ -1920,6 +1924,7 @@ files:
1920
1924
  - app/views/spree/order_mailer/confirm_email.html.erb
1921
1925
  - app/views/spree/order_mailer/ticket_email.html.erb
1922
1926
  - app/views/spree/order_mailer/ticket_email.text.erb
1927
+ - app/views/spree/shared/_base_mailer_header.html.erb
1923
1928
  - app/views/spree/telegram/errors/_error.html.erb
1924
1929
  - app/views/spree/telegram/errors/forbidden.html.erb
1925
1930
  - app/views/spree/telegram/errors/resource_not_found.html.erb
@@ -2315,6 +2320,7 @@ files:
2315
2320
  - db/migrate/20250328072947_remove_unique_constraint_from_name_in_spree_roles.rb
2316
2321
  - db/migrate/20250403040036_install_blazer.rb
2317
2322
  - db/migrate/20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb
2323
+ - db/migrate/20250404050117_add_archived_at_to_spree_orders.rb
2318
2324
  - docker-compose.yml
2319
2325
  - docs/option_types/attr_types.md
2320
2326
  - docs/private_key.pem
@@ -2453,9 +2459,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
2453
2459
  version: '2.7'
2454
2460
  required_rubygems_version: !ruby/object:Gem::Requirement
2455
2461
  requirements:
2456
- - - ">"
2462
+ - - ">="
2457
2463
  - !ruby/object:Gem::Version
2458
- version: 1.3.1
2464
+ version: '0'
2459
2465
  requirements:
2460
2466
  - none
2461
2467
  rubygems_version: 3.4.1