Class: Crm::ExportedCatalogItemPacketsController

Inherits:
CrmController show all
Includes:
Controllers::Attachable
Defined in:
app/controllers/crm/exported_catalog_item_packets_controller.rb

Constant Summary

Constants included from Controllers::Attachable

Controllers::Attachable::PUBLICATIONS_PER_PAGE

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

Methods included from Controllers::Attachable

#attach, #publication_modal, #remove_attachment, #search_library

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

#device_detector, #is_ie?

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

#add_image_attributeObject



277
278
279
280
281
282
283
284
285
286
287
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 277

def add_image_attribute
  @packet = ExportedCatalogItemPacket.find(params[:id])
  existing_indices = @packet.exported_catalog_item_packet_attributes
                            .where("attr_name LIKE 'image_url_%'")
                            .pluck(:attr_name)
                            .map { |n| n[/image_url_(\d+)/, 1].to_i }
  next_idx = (existing_indices.max || 0) + 1
  @packet.exported_catalog_item_packet_attributes.create!(attr_type: 'image', attr_name: "image_url_#{next_idx}")
  @packet.exported_catalog_item_packet_attributes.create!(attr_type: 'image', attr_name: "image_name_#{next_idx}")
  redirect_to "#{edit_exported_catalog_item_packet_path(@packet)}#attributes"
end

#add_items_to_packetObject



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 119

def add_items_to_packet
  packet_params = params[:packet] || {}
  @search = Search.find(packet_params[:search_id])
  if packet_params[:exported_catalog_item_packet_id].empty?
    flash[:error] = 'You have to select a packet before to continue.'
    redirect_back_or_to root_path
  else
    require 'activerecord-import/base'
    require 'activerecord-import/active_record/adapters/postgresql_adapter'
    @packet = ExportedCatalogItemPacket.find(packet_params[:exported_catalog_item_packet_id])
    values = @search.search_results.pluck(:resource_id).map { |rid| { catalog_item_id: rid, exported_catalog_item_packet_id: @packet.id } }
    ExportedCatalogItem.import values, validate: false, on_duplicate_key_ignore: true
    redirect_to edit_exported_catalog_item_packet_path(@packet)
  end
end

#assignObject



115
116
117
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 115

def assign
  @search = Search.find(params[:search_id])
end

#attach_publicationsObject



195
196
197
198
199
200
201
202
203
204
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 195

def attach_publications
  @exported_catalog_item = ExportedCatalogItem.find(params[:ci])
  @checked = params[:attr_value]
  if @checked == 'true'
    @exported_catalog_item.exported_catalog_item_literatures.where(publication_id: params[:attr_id]).first_or_initialize.save
  else
    @exported_catalog_item.exported_catalog_item_literatures.where(publication_id: params[:attr_id]).first.destroy
  end
  # head :ok
end

#createObject



31
32
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 31

def create
end

#delete_item_from_packetObject



250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 250

def delete_item_from_packet
  @packet = ExportedCatalogItemPacket.find(params[:id])
  item = @packet.exported_catalog_items.find_by(id: params[:item])
  if item.present?
    item.destroy
    keys = @packet.exported_catalog_items.collect { |ci| ci.catalog_item.item.rendered_product_specifications.keys }.flatten.uniq
    existing_keys = @packet.exported_catalog_item_packet_attributes.collect { |cia| cia.attr_name }.flatten.uniq
    @packet.exported_catalog_item_packet_attributes.each do |a|
      a.destroy unless keys.include?(a.attr_name)
    end
  else
    flash[:error] = 'Item not found in the packet.'
  end

  redirect_to edit_exported_catalog_item_packet_path(@packet)
end

#do_generateObject



313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 313

def do_generate
  @packet = ExportedCatalogItemPacket.find(params[:id])
  options = params[:options] || {}
  export_csv = options[:export_csv].to_b
  export_xlsx = options[:export_xlsx].to_b
  export_images = options[:export_images].to_b
  export_literatures = options[:export_literatures].to_b
  if Rails.env.development?
    upload = @packet.generate_packet(export_csv:, export_xlsx:,
                                     export_images:,
                                     export_literatures:)
    redirect_to exported_catalog_item_packet_path(@packet.id, anchor: "uploads")
  else
    options = {
      packet_id: @packet.id,
      return_path: exported_catalog_item_packet_path(@packet.id, anchor: "uploads"),
      export_csv:,
      export_xlsx:,
      export_images:,
      export_literatures:
    }.stringify_keys
    job_id = GenerateExportedCatalogPacketWorker.perform_async(options)
    redirect_to job_path(job_id)
  end
end

#download_csvObject



135
136
137
138
139
140
141
142
143
144
145
146
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 135

def download_csv
  @packet = ExportedCatalogItemPacket.find(params[:id])
  tempfile = Tempfile.new(["packet_#{@packet.id}", '.csv'])
  tempfile.flush
  tempfile.fsync
  begin
    @packet.export_csv(tempfile.path)
    send_file_accelerated(tempfile.path, download: true)
  ensure
    tempfile.close # here we cannot use `close!` because of https://github.com/markevans/dragonfly/issues/319
  end
end

#download_xlsxObject



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 148

def download_xlsx
  @packet = ExportedCatalogItemPacket.find(params[:id])
  tempfile = Tempfile.new(["packet_#{@packet.id}", ".xlsx"])
  tempfile.flush
  tempfile.fsync
  begin
    @packet.export_xlsx(tempfile.path)
    send_file tempfile.path,
              filename: "packet_#{@packet.id}_attributes.xlsx",
              type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
              disposition: "attachment"
  ensure
    tempfile.close
  end
end

#editObject



26
27
28
29
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 26

def edit
  @packet = ExportedCatalogItemPacket.find(params[:id])
  initialize_for_edit
end

#generateObject



303
304
305
306
307
308
309
310
311
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 303

def generate
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @options = OpenStruct.new({
                              export_csv: false,
                              export_xlsx: true,
                              export_images: true,
                              export_literatures: true
                            })
end

#indexObject



4
5
6
7
8
9
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 4

def index
  params[:q] ||= { inactive_eq: 0 }
  @q = ExportedCatalogItemPacket.ransack(params[:q])
  @q.sorts = 'updated_at DESC' if @q.sorts.blank?
  @pagy, @packets = pagy(@q.result.includes(:customer, :exported_catalog_items), limit: params[:per])
end

#mass_createObject



108
109
110
111
112
113
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 108

def mass_create
  @customer = Customer.find(params[:customer_id])
  @packet = @customer.exported_catalog_item_packets.new(name: "#{@customer.name.downcase}_#{Time.current.strftime('%m_%d_%Y')}_#{Time.current.to_i}")
  @packet.save
  redirect_to exported_catalog_item_packet_path(@packet)
end

#newObject



23
24
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 23

def new
end

#new_packet_attributeObject



267
268
269
270
271
272
273
274
275
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 267

def new_packet_attribute
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @att = @packet.exported_catalog_item_packet_attributes.new(attr_type: 'static', attr_name: "static_attr_#{Random.rand(1000)}")
  @att.save!
  # initialize_static_attributes
  respond_to do |format|
    format.turbo_stream
  end
end

#refresh_attributesObject



164
165
166
167
168
169
170
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 164

def refresh_attributes
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @packet.exported_catalog_items.each do |ci|
    ci.catalog_item.item.update_rendered_product_specifications
  end
  redirect_to "#{edit_exported_catalog_item_packet_path(@packet)}#attributes"
end

#refresh_imagesObject



172
173
174
175
176
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 172

def refresh_images
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @packet.link_images
  redirect_to exported_catalog_item_packet_path(@packet, anchor: "images")
end

#refresh_rendered_product_specificationsObject



94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 94

def refresh_rendered_product_specifications
  @packet = ExportedCatalogItemPacket.find(params[:id])
  item_ids = @packet.exported_catalog_items.joins(catalog_item: :store_item).pluck(StoreItem[:item_id]).uniq
  items = Item.where(id: item_ids)
  items.find_each do |item|
    if Rails.env.development?
      item.update_rendered_product_specifications
    else
      item.async_update_rendered_product_specifications
    end
  end
  redirect_to_return_path_or_default url_for(action: :show, id: @packet.id)
end

#showObject



11
12
13
14
15
16
17
18
19
20
21
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 11

def show
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @exported_catalog_items = @packet.exported_catalog_items.joins(catalog_item: :item).includes(catalog_item: :item)
  @exported_catalog_items.each do |eci|
    @alert_eci_empty = true if eci.catalog_item.nil?
  end
  @pt_keys = []
  @packet_attributes = @packet.exported_catalog_item_packet_attributes
  @attributes = @packet.exported_catalog_item_packet_attributes.order('attr_position')
  @tags = ExportedCatalogItemPacketImageAttribute::CORE_TAGS
end

#sort_and_update_attributesObject



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 178

def sort_and_update_attributes
  if params[:source] == 'rename'
    ExportedCatalogItemPacketAttribute.find(params[:attr_id]).update(attr_rename: params[:attr_value])
  elsif params[:source] == 'checkbox'
    ExportedCatalogItemPacketAttribute.find(params[:attr_id]).update(selected: params[:attr_check_value])
  elsif params[:source] == 'value'
    ExportedCatalogItemPacketAttribute.find(params[:attr_id]).update(attr_value: params[:attr_value])
  elsif params[:source] == 'sort'
    params[:exported_catalog_item_packet_attribute].each_with_index do |id, index|
      ExportedCatalogItemPacketAttribute.find(id).update(attr_position: index + 1)
    end
  elsif params[:source] == 'connection'
    ExportedCatalogItemPacketAttribute.find(params[:attr_id]).update(attr_connected_to: params[:attr_value])
  end
  head :ok
end

#tab_attributesObject



71
72
73
74
75
76
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 71

def tab_attributes
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @attributes = @packet.exported_catalog_item_packet_attributes.where(selected: true).order(:attr_position).to_a
  @exported_catalog_items = @packet.exported_catalog_items.includes(catalog_item: :item)
  render layout: should_render_layout?
end

#tab_historyObject



89
90
91
92
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 89

def tab_history
  @packet = ExportedCatalogItemPacket.find(params[:id])
  render layout: should_render_layout?
end

#tab_imagesObject



57
58
59
60
61
62
63
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 57

def tab_images
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @exported_catalog_items = @packet.exported_catalog_items
                                   .includes(catalog_item: :item, exported_catalog_item_images: :image)
  @tags = ExportedCatalogItemPacketImageAttribute::CORE_TAGS
  render 'show_item_images', layout: should_render_layout?
end

#tab_itemsObject



78
79
80
81
82
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 78

def tab_items
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @exported_catalog_items = @packet.exported_catalog_items
  render layout: should_render_layout?
end

#tab_literatureObject



65
66
67
68
69
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 65

def tab_literature
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @exported_catalog_items = @packet.exported_catalog_items
  render 'show_literature', layout: should_render_layout?
end

#tab_uploadsObject



84
85
86
87
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 84

def tab_uploads
  @packet = ExportedCatalogItemPacket.find(params[:id])
  render layout: should_render_layout?
end

#toggle_image_exclusionObject



206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 206

def toggle_image_exclusion
  @packet = ExportedCatalogItemPacket.find(params[:id])
  @image = ExportedCatalogItemImage.joins(:exported_catalog_item)
             .merge(@packet.exported_catalog_items)
             .find(params[:image_id])

  begin
    @image.update!(excluded: !@image.excluded?)
  rescue ActiveRecord::RecordInvalid => e
    logger.error "toggle_image_exclusion failed for image #{@image.id}: #{e.message}"
    respond_to do |format|
      format.turbo_stream do
        render turbo_stream: turbo_stream.replace(
          "exported-image-#{@image.id}",
          partial: "exported_image_row",
          locals: { ecii: @image.reload, ci: @image.exported_catalog_item, packet: @packet }
        )
      end
      format.html { redirect_to exported_catalog_item_packet_path(@packet, anchor: "packet-images"), alert: e.message }
    end
    return
  end

  respond_to do |format|
    format.turbo_stream do
      render turbo_stream: turbo_stream.replace(
        "exported-image-#{@image.id}",
        partial: "exported_image_row",
        locals: { ecii: @image, ci: @image.exported_catalog_item, packet: @packet }
      )
    end
    format.html { redirect_to exported_catalog_item_packet_path(@packet, anchor: "packet-images") }
  end
end

#transmitObject



289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 289

def transmit
  @packet = ExportedCatalogItemPacket.find(params[:id])
  export_csv = params[:export_csv].nil? || params[:export_csv].to_b
  export_images = params[:export_images].nil? || params[:export_images].to_b
  export_literatures = params[:export_literatures].nil? || params[:export_literatures].to_b
  upload = @packet.generate_packet
  if upload.persisted?
    redirect_to new_communication_path(resource_id: params[:id], resource_type: 'exported_catalog_item_packet')
  else
    flash[:error] = upload.errors_to_s
    redirect_to exported_catalog_item_packet_path(@packet)
  end
end

#updateObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 34

def update
  @packet = ExportedCatalogItemPacket.find(params[:id])

  if @packet.update(params[:exported_catalog_item_packet])
    @packet.link_images if params.dig(:options, :refresh_images).to_b
    @packet.exported_catalog_items.each do |ecil|
      ecil.product_specifications.delete_all
    end
    if params[:attributes].present?
      attributes = params[:attributes]
      attributes.each do |att|
        @packet.exported_catalog_items.each do |eci|
          eci.product_specifications << ProductSpecification.where(id: eci.catalog_item.item.product_specifications.map { |p| p.id }, token: att)
        end
      end
    end
    redirect_to exported_catalog_item_packet_path(@packet)
  else
    initialize_for_edit
    render :edit, status: :unprocessable_entity
  end
end

#update_image_attributesObject



241
242
243
244
245
246
247
248
# File 'app/controllers/crm/exported_catalog_item_packets_controller.rb', line 241

def update_image_attributes
  if params[:source] == 'quantity'
    ExportedCatalogItemPacketImageAttribute.find(params[:ia_id]).update(quantity: params[:ia_value])
  elsif params[:source] == 'checkbox'
    ExportedCatalogItemPacketImageAttribute.find(params[:ia_id]).update(selected: params[:ia_check_value])
  end
  head :ok
end