Class: PurchaseOrderShipmentsController

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

Overview

== Schema Information

Table name: purchase_order_shipments

id :integer not null, primary key
date_shipped :date
tracking_number :string(255)
estimated_landed_cost :decimal(10, 2)
notes :text
creator_id :integer
updater_id :integer
created_at :datetime
updated_at :datetime
state :string(255)
currency :string(255)
carrier_id :integer
bill_of_lading :string(255)
container_number :string(255)
drop_ship_carrier :string(255)
weight :float
length :float
width :float
height :float
actual_shipping_cost :decimal(8, 2)

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

#add_povoid

This method returns an undefined value.

Renders the form for adding another purchase order to an in-progress shipment.



100
101
102
# File 'app/controllers/purchase_order_shipments_controller.rb', line 100

def add_po
  @existing_ids = params[:purchase_order_ids]
end

#confirm_add_povoid

This method returns an undefined value.

Looks up a purchase order by reference number and adds it to the shipment's
working ID list, re-rendering new with the expanded set.



108
109
110
111
112
113
114
115
116
117
118
# File 'app/controllers/purchase_order_shipments_controller.rb', line 108

def confirm_add_po
  @existing_ids = params[:purchase_order_ids]
  purchase_order = PurchaseOrder.find_by(reference_number: params[:reference_number])
  if purchase_order.nil?
    flash.now[:error] = "Unable to find purchase order with reference #{params[:reference_number]}. Please try again."
    render :add_po, status: :unprocessable_content
  else
    @ids = @existing_ids + ",#{purchase_order.id}"
    redirect_to new_purchase_order_shipment_path(purchase_order_ids: @ids)
  end
end

#createObject

POST /shipments
POST /shipments.xml



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/controllers/purchase_order_shipments_controller.rb', line 47

def create
  @ids = params[:purchase_order_ids]
  @purchase_orders = PurchaseOrder.where(id: @ids.split(','))
  if params[:purchase_order_items].nil? || params[:purchase_order_items].to_h.all? { |_id, attrs| attrs.nil? || attrs[:qty_shipped].blank? }
    flash[:error] = 'Shipment must have at least one item'
    redirect_to new_purchase_order_shipment_path(purchase_order_ids: @ids)
  else
    @purchase_order_shipment = PurchaseOrderShipment.new(params[:purchase_order_shipment])
    @purchase_order_shipment.enter_shipment_items(params[:purchase_order_items])

    @purchase_order_shipment.require_drop_ship_po_package_info = true if @purchase_orders.all? { |po| po.drop_ship_delivery.present? }

    if @purchase_order_shipment.save
      @purchase_order_shipment.set_estimated_landed_cost if @purchase_order_shipment.estimated_landed_cost.nil?
      redirect_to(purchase_order_path(@purchase_orders.first))
    else
      render action: 'new', status: :unprocessable_content
    end
  end
end

#destroyObject

DELETE /shipments/1
DELETE /shipments/1.xml



88
89
90
91
92
93
94
95
# File 'app/controllers/purchase_order_shipments_controller.rb', line 88

def destroy
  @purchase_order_shipment = PurchaseOrderShipment.find(params[:id])
  all_pos = @purchase_order_shipment.purchase_orders.to_a # This makes sure the relationship is not called on demand later
  @po = all_pos.first
  @purchase_order_shipment.destroy
  all_pos.each(&:cancel_shipment)
  redirect_to_return_path_or_default(purchase_order_path(@po))
end

#editObject

GET /shipments/1/edit



40
41
42
43
# File 'app/controllers/purchase_order_shipments_controller.rb', line 40

def edit
  @purchase_order_shipment = PurchaseOrderShipment.find(params[:id])
  @purchase_orders = @purchase_order_shipment.purchase_orders
end

#edit_landed_costsvoid

This method returns an undefined value.

Renders the form for editing a shipment's already-entered landed costs.



133
134
135
136
137
138
139
# File 'app/controllers/purchase_order_shipments_controller.rb', line 133

def edit_landed_costs
  @purchase_order_shipment = PurchaseOrderShipment.find(params[:id])
  landed_cost = {}
  landed_cost[:landed_cost] = @purchase_order_shipment.landed_cost
  landed_cost[:carrier_id] = @purchase_order_shipment.carrier_id
  @landed_cost = OpenStruct.new(landed_cost)
end

#enter_landed_costsvoid

This method returns an undefined value.

Renders the form for entering landed costs on a shipment, defaulting the carrier.



123
124
125
126
127
128
# File 'app/controllers/purchase_order_shipments_controller.rb', line 123

def enter_landed_costs
  @purchase_order_shipment = PurchaseOrderShipment.find(params[:id])
  landed_cost = {}
  landed_cost[:carrier_id] = @purchase_order_shipment.carrier_id
  @landed_cost = OpenStruct.new(landed_cost)
end

#newObject

GET /shipments/new
GET /shipments/new.xml



33
34
35
36
37
# File 'app/controllers/purchase_order_shipments_controller.rb', line 33

def new
  @purchase_order_shipment = PurchaseOrderShipment.new
  @ids = params[:purchase_order_ids]
  @purchase_orders = PurchaseOrder.where(id: @ids.split(','))
end

#post_landed_costsvoid

This method returns an undefined value.

Validates and saves the entered landed cost, then prorates it across the
shipment's receipts.



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

def post_landed_costs
  @purchase_order_shipment = PurchaseOrderShipment.find(params[:id])
  @landed_cost = OpenStruct.new(params[:landed_cost])
  if @landed_cost.landed_cost && @landed_cost.landed_cost.to_i >= 0 && @landed_cost.carrier_id
    @purchase_order_shipment.update(landed_cost: @landed_cost.landed_cost)
    @purchase_order_shipment.shipment_receipts.each do |shipment_receipt|
      shipment_receipt.void_landed_costs if shipment_receipt.landed_cost.present?
      estimated_landed_cost = shipment_receipt.estimated_landed_cost.nil? ? 0 : shipment_receipt.estimated_landed_cost
      landed_cost = shipment_receipt.prorate_landed_cost
      landed_cost_calc = landed_cost - estimated_landed_cost
      shipment_receipt.enter_landed_costs(landed_cost_calc.to_s, @landed_cost.carrier_id)
    end
    redirect_to purchase_order_path(@purchase_order_shipment.purchase_orders.first)
  else
    flash.now[:error] = 'You must specify a carrier and a landed cost of 0 or more'
    render :enter_landed_costs, status: :unprocessable_content
  end
end

#updateObject

PUT /shipments/1
PUT /shipments/1.xml



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'app/controllers/purchase_order_shipments_controller.rb', line 70

def update
  @purchase_order_shipment = PurchaseOrderShipment.find(params[:id])
  @purchase_orders = @purchase_order_shipment.purchase_orders
  if @purchase_order_shipment.update(params[:purchase_order_shipment])
    if @purchase_order_shipment.estimated_landed_cost.present? && @purchase_order_shipment.shipment_receipts.present?
      @purchase_order_shipment.shipment_receipts.each do |sr|
        sr.update(estimated_landed_cost: sr.prorate_estimated_landed_cost, currency: @purchase_order_shipment.currency)
      end
    end
    @purchase_order_shipment.update_states
    redirect_to_return_path_or_default(purchase_order_path(@purchase_order_shipment.purchase_orders.first))
  else
    render action: :edit, status: :unprocessable_content
  end
end