Class: Crm::EdiCommunicationLogsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- Crm::EdiCommunicationLogsController
- Includes:
- Controllers::Workflowable
- Defined in:
- app/controllers/crm/edi_communication_logs_controller.rb
Overview
Controller: edi communication logs.
Constant Summary
Constants included from Controllers::ReferenceFindable
Controllers::ReferenceFindable::ID_EMBEDDED_PATTERNS
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
Constants included from Www::SeoHelper
Www::SeoHelper::AWARDS, Www::SeoHelper::CA_ADDRESS, Www::SeoHelper::CA_BUSINESS_HOURS, Www::SeoHelper::CA_CONTACT_POINT, Www::SeoHelper::CA_CURRENCIES, Www::SeoHelper::CA_DESCRIPTION, Www::SeoHelper::CA_FOUNDING_DATE, Www::SeoHelper::CA_GLOBAL_LOCATION_NUMBER, Www::SeoHelper::CA_LEGAL_NAME, Www::SeoHelper::CA_LOCAL_BUSINESS, Www::SeoHelper::CA_ONLINE_STORE, Www::SeoHelper::CA_RETURN_POLICY, Www::SeoHelper::CA_SALES_DEPARTMENT, Www::SeoHelper::CA_SERVICE_AREA, Www::SeoHelper::CA_URL, Www::SeoHelper::CA_VAT_ID, Www::SeoHelper::CA_WAREHOUSE_DEPARTMENT, Www::SeoHelper::CA_WAREHOUSE_HOURS, Www::SeoHelper::COMPANY_EMAIL, Www::SeoHelper::COMPANY_LOGO, Www::SeoHelper::COMPANY_NAME, Www::SeoHelper::COMPANY_SLOGAN, Www::SeoHelper::EXPERTISE, Www::SeoHelper::FAX_NUMBER, Www::SeoHelper::GS1_COMPANY_PREFIX, Www::SeoHelper::ISO6523_CODE, Www::SeoHelper::PAYMENT_METHODS, Www::SeoHelper::PHONE_NUMBER, Www::SeoHelper::PRIMARY_NAICS, Www::SeoHelper::REFUND_TYPE, Www::SeoHelper::RETURN_FEES, Www::SeoHelper::RETURN_METHOD, Www::SeoHelper::RETURN_POLICY_CATEGORY, Www::SeoHelper::SECONDARY_NAICS, Www::SeoHelper::SOCIAL_PROFILES, Www::SeoHelper::US_ADDRESS, Www::SeoHelper::US_BUSINESS_HOURS, Www::SeoHelper::US_CONTACT_POINT, Www::SeoHelper::US_CURRENCIES, Www::SeoHelper::US_DESCRIPTION, Www::SeoHelper::US_FOUNDING_DATE, Www::SeoHelper::US_GLOBAL_LOCATION_NUMBER, Www::SeoHelper::US_IMAGE, Www::SeoHelper::US_LEGAL_NAME, Www::SeoHelper::US_LOCAL_BUSINESS, Www::SeoHelper::US_ONLINE_STORE, Www::SeoHelper::US_RETURN_POLICY, Www::SeoHelper::US_SALES_DEPARTMENT, Www::SeoHelper::US_SERVICE_AREA, Www::SeoHelper::US_TAX_ID, Www::SeoHelper::US_URL, Www::SeoHelper::US_WAREHOUSE_DEPARTMENT, Www::SeoHelper::US_WAREHOUSE_HOURS
Constants included from IconHelper
IconHelper::CUSTOM_ICON_MAP, IconHelper::CUSTOM_SVG_DIR, IconHelper::DEFAULT_FAMILY
Instance Method Summary collapse
- #clone ⇒ Object
- #create ⇒ Object
- #destroy ⇒ Object
- #discontinue_flow ⇒ Object
- #do_match ⇒ Object
- #do_process ⇒ Object
- #do_status ⇒ Object
- #download ⇒ Object
- #edit ⇒ Object
- #index ⇒ Object
- #inventory_flow ⇒ Object
- #listing_message_feed_flow ⇒ Object
- #new ⇒ Object
- #orchestrators ⇒ Object
- #order_flow ⇒ Object
- #price_flow ⇒ Object
- #product_data_flow ⇒ Object
- #show ⇒ Object
- #update ⇒ Object
Methods included from Controllers::Workflowable
#render_workflow_error_stream, #render_workflow_success_stream, #workflow_action, #workflow_action_complete
Methods inherited from CrmController
#access_denied, #context_id, #context_object, #crm_home_path, #current_ability, #default_url_options, #download_temp, #get_tempfile_path_for_download, #init_status_job_collector, #initialize_crm_lazy_chunks, #persist_enqueued_status_jobs, #record_not_found, #redirect_to_job_or_fallback, #render_edit_action, #set_context, #set_download_path, #stash_file_for_temp_download, #sync_admin_presence_cookie
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?, #stamp_impersonation_context, #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, #track_event
Methods included from Controllers::DeviceDetection
Methods included from Controllers::SubdomainDetection
#is_crm_request?, #is_www_request?, #json_request?
Methods included from Controllers::TurboSafeRedirect
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 ApplicationHelper
#better_number_to_currency, #check_force_logout, #check_or_cross, #check_or_times, #embedded_tab_frame_id, #error_messages, #general_disclaimer_on_product_installation_and_local_codes, #gridjs_from_html_table, #gridjs_table, #is_wy_ip, #line_break, #parent_layout, #pass_or_fail, #render_error_messages_list, #render_video_card, #resolved_auth_form_turbo_frame, #return_path_or, #safe_css_color, #set_return_path_if_present, #set_section_if_present, #tab_frame_id, #to_underscore, #track_page?, #turbo_section_wrapper, #turbo_tabs_request?, #url_on_same_domain_as_request, #widget_index_daily_focus_index_path, #working_hours?, #yes_or_no, #yes_or_no_highlighted, #yes_or_no_with_check_or_cross, #youtube_video
Methods included from UppyUploaderHelper
#file_uploader, #image_uploader, #large_file_uploader_s3, #lead_sketch_uploader, #rma_image_uploader, #rma_image_uploader_s3, #uppy_uploader, #video_uploader
Methods included from Www::ImagesHelper
#image_asset_tag, #image_asset_url
Methods included from Www::SeoHelper
#add_page_schema, #add_webpage_schema, #canada?, #company_social_links, #ensure_context_json, #json_ld_script_tag, #local_business_schema, #online_store_id, #online_store_schema, #page_main_entity, #page_main_entity_json, #render_auto_collection_page_schema, #render_collection_page_schema, #render_local_business_schema, #render_online_store_schema, #render_page_schemas, #render_page_video_schemas, #render_webpage_schema, #render_webpage_schema_with_collections, #usa?
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?
Methods included from IconHelper
#account_nav_icon, #fa_icon, #star_rating_html
Instance Method Details
#clone ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 60 def clone (:create, EdiCommunicationLog) existing_ecl = EdiCommunicationLog.find(params[:id]) @edi_communication_log = existing_ecl.deep_dup if @edi_communication_log.save flash[:info] = 'Communication Log cloned' redirect_to_return_path_or_default url_for(action: :edit, id: @edi_communication_log.id) else render :edit, status: :unprocessable_content end end |
#create ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 77 def create (:create, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.new(params[:edi_communication_log]) if @edi_communication_log.save flash[:info] = 'Communication Log created' redirect_to_return_path_or_default url_for(action: :show, id: @edi_communication_log.id) else render :new, status: :unprocessable_content end end |
#destroy ⇒ Object
99 100 101 102 103 104 105 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 99 def destroy (:destroy, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) @edi_communication_log.destroy flash[:info] = 'Communication log deleted' redirect_to_return_path_or_default url_for(action: :index) end |
#discontinue_flow ⇒ Object
191 192 193 194 195 196 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 191 def discontinue_flow (:manage, EdiCommunicationLog) EdiDiscontinueFlowWorker.perform_async(params.to_h.slice(:orchestrator_name, :partner).stringify_keys) flash[:info] = 'Discontinue flow queued up — will DELETE pending_discontinue listings via SP-API' redirect_to_return_path_or_default url_for(action: :index) end |
#do_match ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 121 def do_match (:update, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) if @edi_communication_log.can_be_matched? # Try to match on provided order reference # or PO # qt = params.dig(:match, :q).presence&.squish order = nil if qt base_orders = @edi_communication_log.orders_for_packing_slip_matchup order = base_orders.where(reference_number: qt).first order ||= base_orders.joins(:payments).where(Payment[:po_number].eq(qt)).first end if order # Copy upload over to order u = @edi_communication_log.uploads.first new_u = u.clone_with_file(order) if new_u.save flash[:info] = "Packing list attached to order #{order.reference_number}" # link order to edi doc @edi_communication_log.edi_documents.create(order: order, note: 'packing list') @edi_communication_log.complete! # And try to release our order order.release_order else flash[:error] = "Error attaching pick slip. #{new_u.errors_to_s}" end else flash[:error] = "Could not find an order that matches #{qt} in reference number or po number" end else flash[:error] = 'EDI communication log state, type or attachment not matching criteria' end redirect_to_return_path_or_default edi_communication_log_path(@edi_communication_log) end |
#do_process ⇒ Object
107 108 109 110 111 112 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 107 def do_process (:update, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) @edi_communication_log.process redirect_to_return_path_or_default edi_communication_log_path(@edi_communication_log) end |
#do_status ⇒ Object
114 115 116 117 118 119 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 114 def do_status (:update, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) @edi_communication_log.update_status redirect_to_return_path_or_default edi_communication_log_path(@edi_communication_log) end |
#download ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 45 def download (:read, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) if (upload = @edi_communication_log.uploads.first) redirect_to upload..url else send_data @edi_communication_log.data, filename: @edi_communication_log.file_name end end |
#edit ⇒ Object
72 73 74 75 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 72 def edit (:update, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) end |
#index ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 6 def index (:read, EdiCommunicationLog) @q = EdiCommunicationLog.ransack(params[:q]) @q.sorts = 'created_at DESC' if @q.sorts.blank? @pagy, @edi_communication_logs = pagy(@q.result, limit: 50) # Pre-cast Ransack datetime string values to Time so DatetimePickerInput # can call strftime on them and repopulate the picker fields correctly. %i[created_at_gteq transmit_after_gteq].each do |cond| raw = @q.send(cond) @q.send(:"#{cond}=", raw.to_datetime) if raw.is_a?(String) && raw.present? rescue ArgumentError, TypeError nil end since_24h = 24.hours.ago now = Time.current # Run all five aggregates concurrently — Rails 7.1 async_count returns # an ActiveRecord::Promise that materializes when the value is read. promises = { exceptions_24h: EdiCommunicationLog.where(state: 'exception').where(created_at: since_24h..).async_count, processed_24h: EdiCommunicationLog.where(state: 'processed').where(created_at: since_24h..).async_count, scheduled: EdiCommunicationLog.where('transmit_after > ?', now).async_count, ready: EdiCommunicationLog.where(state: 'ready').where('transmit_after IS NULL OR transmit_after <= ?', now).async_count, processing: EdiCommunicationLog.where(state: 'processing').async_count } @stats = promises.transform_values(&:value) end |
#inventory_flow ⇒ Object
163 164 165 166 167 168 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 163 def inventory_flow (:manage, EdiCommunicationLog) EdiInventoryFlowWorker.perform_async(params.to_h.slice(:orchestrator_name, :partner).stringify_keys) flash[:info] = 'Inventory flow queued up, refresh this page to check status' redirect_to_return_path_or_default url_for(action: :index) end |
#listing_message_feed_flow ⇒ Object
184 185 186 187 188 189 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 184 def (:manage, EdiCommunicationLog) EdiListingMessageFeedFlowWorker.perform_async(params.to_h.slice(:orchestrator_name, :partner).stringify_keys) flash[:info] = 'Listing Message Feed flow queued up, refresh this page to check status' redirect_to_return_path_or_default url_for(action: :index) end |
#new ⇒ Object
55 56 57 58 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 55 def new (:create, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.new end |
#orchestrators ⇒ Object
35 36 37 38 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 35 def orchestrators (:manage, EdiCommunicationLog) @orchestrators_by_class = Edi::BaseOrchestrator.all_orchestrators_class.index_with(&:orchestrators) end |
#order_flow ⇒ Object
156 157 158 159 160 161 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 156 def order_flow (:manage, EdiCommunicationLog) EdiOrderFlowWorker.perform_async(params.to_h.slice(:orchestrator_name, :partner).stringify_keys) flash[:info] = 'Order flow queued up, refresh this page to check status' redirect_to_return_path_or_default url_for(action: :index) end |
#price_flow ⇒ Object
177 178 179 180 181 182 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 177 def price_flow (:manage, EdiCommunicationLog) EdiPriceFlowWorker.perform_async(params.to_h.slice(:orchestrator_name, :partner).stringify_keys) flash[:info] = 'Price flow queued up, refresh this page to check status' redirect_to_return_path_or_default url_for(action: :index) end |
#product_data_flow ⇒ Object
170 171 172 173 174 175 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 170 def product_data_flow (:manage, EdiCommunicationLog) EdiProductDataFlowWorker.perform_async(params.to_h.slice(:orchestrator_name, :partner).stringify_keys) flash[:info] = 'Product Data flow queued up, refresh this page to check status' redirect_to_return_path_or_default url_for(action: :index) end |
#show ⇒ Object
40 41 42 43 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 40 def show (:read, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) end |
#update ⇒ Object
88 89 90 91 92 93 94 95 96 97 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 88 def update (:update, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) if @edi_communication_log.update(params[:edi_communication_log]) flash[:info] = 'Communication Log updated' redirect_to_return_path_or_default url_for(action: :show, id: @edi_communication_log.id) else render :edit, status: :unprocessable_content end end |