Class: ShipmentsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- ShipmentsController
- Includes:
- Controllers::Showable, Controllers::Workflowable
- Defined in:
- app/controllers/shipments_controller.rb
Overview
Controller: shipments.
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
Instance Method Summary collapse
-
#audit ⇒ void
Renders the shipment audit form.
-
#carton_label ⇒ void
Streams the shipment's carton label PDF.
-
#destroy ⇒ void
Deletes the shipment, cancelling its delivery's shipments if none have completed, then redirects back to the most relevant parent record.
-
#edit ⇒ Object
GET /shipments/1/edit.
-
#index ⇒ void
Lists shipments (label-complete/manually-complete by default).
-
#perform_audit ⇒ void
Runs the submitted shipment audit.
-
#refresh_tracking_status ⇒ Object
GET /shipments/1/refresh_tracking_status.
-
#speedee_label ⇒ void
Streams the shipment's Spee-Dee label PDF.
-
#update ⇒ void
Updates the shipment's package dimensions/delivery attrs and marks it labeled if a ship confirm was pending.
Methods included from Controllers::Workflowable
#render_workflow_error_stream, #render_workflow_success_stream, #workflow_action, #workflow_action_complete
Methods included from Controllers::Showable
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, #touch_employee_last_seen
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
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 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
#audit ⇒ void
This method returns an undefined value.
Renders the shipment audit form.
59 60 61 62 |
# File 'app/controllers/shipments_controller.rb', line 59 def audit (:manage, Shipment) @audit_form = Shipment::AuditForm.new(created_at_gteq: 1.month.ago) end |
#carton_label ⇒ void
This method returns an undefined value.
Streams the shipment's carton label PDF.
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/controllers/shipments_controller.rb', line 27 def carton_label result = Shipping::CartonLabelGenerator.new.process(@shipment) respond_to do |format| format.pdf do send_data result.pdf, filename: result.file_name, type: 'application/pdf', disposition: 'inline' end end end |
#destroy ⇒ void
This method returns an undefined value.
Deletes the shipment, cancelling its delivery's shipments if none have
completed, then redirects back to the most relevant parent record.
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'app/controllers/shipments_controller.rb', line 134 def destroy delivery = @shipment.delivery delivery.cancel_shipments! if delivery && delivery.shipments.completed.none? && delivery.can_cancel_shipments? @shipment.destroy default_path = params[:return_path].presence if delivery default_path ||= delivery_path(delivery) elsif @shipment.mail_activity @shipment.mail_activity.reset_mail_activity if @shipment.mail_activity.ready_to_reset? default_path ||= mail_activity_path(@shipment.mail_activity) elsif @shipment.standalone_delivery @shipment.standalone_delivery.reset_standalone_delivery if @shipment.standalone_delivery.ready_to_reset? default_path ||= mail_activity_path(@shipment.mail_activity) elsif @shipment.order default_path ||= order_path(@shipment.order) end default_path ||= root_path redirect_to_return_path_or_default(default_path) end |
#edit ⇒ Object
GET /shipments/1/edit
92 |
# File 'app/controllers/shipments_controller.rb', line 92 def edit; end |
#index ⇒ void
This method returns an undefined value.
Lists shipments (label-complete/manually-complete by default).
12 13 14 15 16 17 18 19 20 21 22 |
# File 'app/controllers/shipments_controller.rb', line 12 def index params[:q] ||= { state_in: %w[label_complete manually_complete] } @q = Shipment.ransack(params[:q]) @q.sorts = 'created_at desc' if @q.sorts.blank? @pagy, @shipments = pagy(@q.result .joins([:delivery, { order: { customer: { catalog: :store } } }]) .includes(:order) .select('shipments.*, catalogs.store_id, stores.short_name, deliveries.actual_shipping_cost as delivery_actual_shipping_cost'), items: 100) end |
#perform_audit ⇒ void
This method returns an undefined value.
Runs the submitted shipment audit.
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/controllers/shipments_controller.rb', line 67 def perform_audit (:manage, Shipment) @audit_form = Shipment::AuditForm.new(params[:shipment_audit_form]) if @audit_form.valid? res = @audit_form.execute flash[res.success? ? :notice : :error] = res. redirect_to_return_path_or_default shipments_path else flash.now[:error] = @audit_form.errors_to_s.presence || 'Audit form is invalid.' render :audit, status: :unprocessable_content end end |
#refresh_tracking_status ⇒ Object
GET /shipments/1/refresh_tracking_status
81 82 83 84 85 86 87 88 89 |
# File 'app/controllers/shipments_controller.rb', line 81 def refresh_tracking_status res = Shipping::PackageShipmentTracking.new.process([@shipment]) if res.shipments_tracking_succeeded.any? flash[:notice] = 'Tracking status refreshed.' else flash[:error] = "Tracking status could not be refreshed: #{res.shipments_tracking_failed_msgs.join(', ')}" end redirect_back_or_to(request.referer || shipments_path(@shipment)) end |
#speedee_label ⇒ void
This method returns an undefined value.
Streams the shipment's Spee-Dee label PDF.
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/controllers/shipments_controller.rb', line 43 def speedee_label result = Pdf::Label::Speedee.call(@shipment, @shipment.delivery.selected_shipping_cost.rate_data) respond_to do |format| format.pdf do send_data result.pdf, filename: result.file_name, type: 'application/pdf', disposition: 'inline' end end end |
#update ⇒ void
This method returns an undefined value.
Updates the shipment's package dimensions/delivery attrs and marks it
labeled if a ship confirm was pending.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'app/controllers/shipments_controller.rb', line 98 def update = {} length = nil width = nil height = nil # puts "Shipment#update: params[:package][:id]: #{params[:package][:id]}" if (package_id = params.dig(:package, :id)) wh_package = WarehousePackage.where(id: package_id).first # puts "Shipment#update: wh_package: #{wh_package.inspect rescue 'none found'}" if wh_package length = wh_package.length width = wh_package.width height = wh_package.height end end = { 'length' => length, 'width' => width, 'height' => height } if length || width || height @package = begin wh_package.dup rescue StandardError WarehousePackage.new end delivery_attrs = params[:shipment].delete(:delivery) if @shipment.update(params[:shipment].merge()) delivery_attrs.merge!({ incorrectly_packaged_ups_canada_order_fixed: true }) if @shipment.delivery.incorrectly_packaged_ups_canada_order @shipment.delivery.update(delivery_attrs) if delivery_attrs.present? @shipment.delivery.ship_labeled if params[:pending_ship_confirm].to_b && !@shipment.delivery.incorrectly_packaged_ups_canada_order redirect_to_return_path_or_default(shipment_path(@shipment)) else render :edit, status: :unprocessable_content end end |