Class: Crm::MarketplaceShippingOptionsController

Inherits:
ApplicationController show all
Defined in:
app/controllers/crm/marketplace_shipping_options_controller.rb

Overview

Controller: marketplace shipping options.

Constant Summary

Constants included from Controllers::AnalyticsEvents

Controllers::AnalyticsEvents::MAX_QUEUED_EVENTS, Controllers::AnalyticsEvents::SESSION_KEY

Constants included from Controllers::ErrorRendering

Controllers::ErrorRendering::NON_CONTENT_PATH_PREFIXES

Instance Method Summary collapse

Methods inherited from ApplicationController

#account_impersonated?, #add_to_flash, #after_sign_in_path_for, #bypass_forgery_protection?, #chat_enabled?, #cloudflare_cleared?, #default_catalog, #default_url_options, #enable_turbo_frames, #find_publication, #fix_invalid_accept_header, #init_js_utils, #is_globals_call?, #layout_by_resource, #locale_store, #redirect_to, #require_employee_for_crm, #set_base_host, #set_real_ip, #set_report_errors_for, #should_render_layout?, #skip_layout_for_turbo_frame?, #stamp_impersonation_context, #tab_frame_breakout_request?, #warmlyyours_canada_ip?, #warmlyyours_ip?, #y

Methods included from Controllers::ReturnPathHandling

#check_for_return_path, #redirect_to_return_path_or_default

Methods included from Controllers::AnalyticsEvents

#consume_queued_analytics_events, #registration_lead_type, #track_event

Methods included from Controllers::DeviceDetection

#device_detector, #is_ie?

Methods included from Controllers::SubdomainDetection

#is_crm_request?, #is_www_request?, #json_request?

Methods included from Controllers::TurboSafeRedirect

#redirect_to

Methods included from Controllers::TrackingDetection

#bot_request?, #gdpr_country?, #gdpr_country_data, #prevent_bots, #set_tracking_cookie, #track_visitor?

Methods included from Controllers::AcceleratedFileSending

#send_file_accelerated, #send_upload_accelerated

Methods included from Controllers::ErrorRendering

#excp_string, #mail_to_for_error_reporting, #render_400, #render_404, #render_406, #render_410, #render_500, #render_invalid_authenticity_token, #render_ip_spoof_error, #render_unpermitted_parameters, #safe_referer_or_fallback

Methods included from Controllers::TurnstileVerification

#load_turnstile_script_tag, #turnstile_lazy_widget, #turnstile_script_tag, #turnstile_widget, #validate_turnstile!

Methods included from Controllers::CloudflareCaching

edge_cached, #edge_cached_action?, #reset_cloudflare_cache, #set_cloudflare_cache, #skip_edge_cache!, #skip_session

Methods included from Controllers::Webpackable

#preload_webpack_fonts, #webpack_css_include, #webpack_css_url, #webpack_js_include, #wpd_is_running?

Methods included from Controllers::Localizable

#cloudflare_country_locale, #determine_request_locale, #geocoder_locale, #guest_user_locale_check, #locale_optional_www_auth_path?, #param_locale, #set_locale, #set_request_locale, #skip_localization?, #warmlyyours_ip_locale

Methods included from Controllers::Authenticable

#access_denied, #authenticate_account, #authenticate_account!, #authenticate_account_from_login_token!, #check_is_a_manager, #check_is_a_sales_manager, #check_is_an_admin, #check_is_an_employee, #check_party, #clear_mismatched_guest_user, #create_guest_user, #credentials?, #current_or_guest_user, #current_or_guest_user_id_read_only, #current_user, #devise_mapping, #fully_logged_in?, #generate_bot_id, #guest_user, #identifiable?, #init_current_user, #initialize_guest, #load_context_user, #logging_in, #resource, #resource_name, #restrict_access_for_non_employees, #scrubbed_request_path, #user_object, #warn_on_session_guest_id_leak

Methods included from UrlsHelper

#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?

Instance Method Details

#approvevoid

This method returns an undefined value.

Approves and creates/activates a marketplace shipping option.

Creates an Item and ShippingOption record from the proposal, or reactivates an existing inactive option.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/controllers/crm/marketplace_shipping_options_controller.rb', line 27

def approve
  proposal = verify_proposal_token
  service_code = proposal[:service_code].to_s.presence
  country = proposal[:country].to_s.presence

  unless service_code && country
    flash[:error] = 'Approval payload is missing required shipping fields.'
    redirect_to root_path and return
  end

  item = Item.find_or_create_by!(sku: service_code.upcase) do |i|
    i.name = "#{proposal[:carrier]} #{proposal[:description]}"
    i.tax_class = 'shp'
    i.product_category_id = 66
    i.shipping_class = 'parcel_service'
    i.coo = country
  end

  shipping_option = ShippingOption.find_or_initialize_by(service_code: service_code, country: country)
  was_inactive = shipping_option.persisted? && shipping_option.is_inactive?

  unless shipping_option.persisted?
    shipping_option.assign_attributes(
      name: service_code.downcase,
      description: proposal[:description],
      carrier: proposal[:carrier],
      days_commitment: proposal[:days_in_transit] || 5.0,
      tax_class: 's',
      item_id: item.id
    )
  end

  shipping_option.is_inactive = false
  shipping_option.save!

  if shipping_option.previously_new_record?
    flash[:success] = "Shipping option #{service_code} (#{proposal[:description]}) has been created and is now active."
  elsif was_inactive
    flash[:success] = "Shipping option #{service_code} has been reactivated."
  else
    flash[:warning] = "Shipping option #{service_code} already exists and is active."
  end
  redirect_to root_path
rescue ActiveRecord::RecordInvalid => e
  flash[:error] = "Failed to create shipping option: #{e.message}"
  redirect_to root_path
end

#reviewvoid

This method returns an undefined value.

Reviews a proposed marketplace shipping option before approval.

Verifies the proposal token and checks if the shipping option already exists or is inactive.



15
16
17
18
19
20
# File 'app/controllers/crm/marketplace_shipping_options_controller.rb', line 15

def review
  @proposal = verify_proposal_token
  existing = ShippingOption.find_by(service_code: @proposal[:service_code], country: @proposal[:country])
  @option_exists = existing.present?
  @option_inactive = existing&.is_inactive?
end