Class: Crm::GenerateBarcodesController

Inherits:
CrmController show all
Defined in:
app/controllers/crm/generate_barcodes_controller.rb

Overview

Controller: generate barcodes.

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

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

#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

#createvoid

This method returns an undefined value.

Generates UPC label barcodes and sends them to a printer or download.

Generates a PDF of UPC labels for selected items at the specified size.
Sends directly to the configured print profile or initiates a file download.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'app/controllers/crm/generate_barcodes_controller.rb', line 54

def create
  skus_printed = []
  pdf = PdfCombinator.new
  (params.dig(:upc, :iq) || {}).each do |item_id, quantity|
    next unless quantity

    quantity = quantity.to_i
    next unless quantity > 0

    item = Item.find(item_id)
    size = params.dig(:upc, :size).presence || 'large'
    upc_result = Pdf::Label::ItemIdentifier.call(item, size: size)
    quantity.times do
      pdf << upc_result.pdf
    end
    skus_printed << item.sku
  end

  if @print_profile
    base64_output = Base64.encode64(pdf.to_pdf)
    @print_profile.print(base64_output)

    flash[:info] = if skus_printed.present?
                     "UPC label for #{skus_printed.to_sentence} sent to printer: #{@print_profile.printer.name}"
                   else
                     "No UPC label were printed, make sure to select quantities"
                   end
    redirect_to_return_path_or_default warehouse_path(current_user.store)
  else
    send_data pdf.to_pdf, filename: 'upc_barcodes.pdf', type: 'application/pdf', disposition: 'attachment'
  end
end

#newvoid

This method returns an undefined value.

Displays the barcode generation interface for selected items.

Prepares item quantities and printable items from the given order/delivery(ies).
Allows filtering by item ID and quantity.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/controllers/crm/generate_barcodes_controller.rb', line 12

def new
  @item_quantities = {}
  if params[:order_id]
    @itemizables = Order.where(id: params[:order_id])
  elsif params[:delivery_id]
    @itemizables = Delivery.where(id: params[:delivery_id])
  elsif params[:delivery_ids]
    @itemizables = Delivery.where(id: params[:delivery_ids])
  end

  @printable_items = {}

  @itemizables.each do |itemizable|
    item_quantities = {}
    line_items_scope = itemizable.line_items.non_shipping.where.not(Item[:upc].eq(nil)).eager_load(:item)
    line_items_scope.each do |line_item|
      hsh = item_quantities[line_item.item] || {}
      hsh[:quantity] ||= 0
      hsh[:quantity] += line_item.quantity
      hsh[:selected] = if params[:heating_elements_only].to_b
                         line_item.item.controllable?
                       elsif line_item.parent_id.nil? # Non kit components get a label
                         true
                       else
                         false
                       end
      item_quantities[line_item.item] = hsh
    end
    @printable_items[itemizable] = item_quantities
  end
  return unless params[:item_id] && params[:quantity]

  item = Item.find(params[:item_id])
  @printable_items = { 'Single Item': { item: item, quantity: params[:quantity].to_i, selected: true } } if item.upc.present?
end