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
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, #initialize_crm_lazy_chunks, #record_not_found, #redirect_to_job_or_fallback, #render_edit_action, #set_context, #set_download_path, #stash_file_for_temp_download
Methods inherited from ApplicationController
#account_impersonated?, #add_to_flash, #append_token, #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::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, #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_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!, #authenticate_account_from_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, #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, #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
57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 57 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_entity end end |
#create ⇒ Object
74 75 76 77 78 79 80 81 82 83 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 74 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_entity end end |
#destroy ⇒ Object
96 97 98 99 100 101 102 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 96 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
188 189 190 191 192 193 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 188 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
118 119 120 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 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 118 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
104 105 106 107 108 109 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 104 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
111 112 113 114 115 116 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 111 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
42 43 44 45 46 47 48 49 50 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 42 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
69 70 71 72 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 69 def edit (:update, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) end |
#index ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 4 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 @stats = { exceptions_24h: EdiCommunicationLog.where(state: 'exception').where(created_at: since_24h..).count, processed_24h: EdiCommunicationLog.where(state: 'processed').where(created_at: since_24h..).count, scheduled: EdiCommunicationLog.where('transmit_after > ?', now).count, ready: EdiCommunicationLog.where(state: 'ready').where('transmit_after IS NULL OR transmit_after <= ?', now).count, processing: EdiCommunicationLog.where(state: 'processing').count } end |
#inventory_flow ⇒ Object
160 161 162 163 164 165 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 160 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
181 182 183 184 185 186 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 181 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
52 53 54 55 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 52 def new (:create, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.new end |
#orchestrators ⇒ Object
30 31 32 33 34 35 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 30 def orchestrators (:manage, EdiCommunicationLog) @orchestrators_by_class = Edi::BaseOrchestrator.all_orchestrators_class.map do |orchestrator_class| [orchestrator_class, orchestrator_class.orchestrators] end.to_h end |
#order_flow ⇒ Object
153 154 155 156 157 158 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 153 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
174 175 176 177 178 179 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 174 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
167 168 169 170 171 172 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 167 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
37 38 39 40 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 37 def show (:read, EdiCommunicationLog) @edi_communication_log = EdiCommunicationLog.find(params[:id]) end |
#update ⇒ Object
85 86 87 88 89 90 91 92 93 94 |
# File 'app/controllers/crm/edi_communication_logs_controller.rb', line 85 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_entity end end |