Class: PurchaseOrderShipmentsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- PurchaseOrderShipmentsController
- 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
-
#add_po ⇒ void
Renders the form for adding another purchase order to an in-progress shipment.
-
#confirm_add_po ⇒ void
Looks up a purchase order by reference number and adds it to the shipment's working ID list, re-rendering
newwith the expanded set. -
#create ⇒ Object
POST /shipments POST /shipments.xml.
-
#destroy ⇒ Object
DELETE /shipments/1 DELETE /shipments/1.xml.
-
#edit ⇒ Object
GET /shipments/1/edit.
-
#edit_landed_costs ⇒ void
Renders the form for editing a shipment's already-entered landed costs.
-
#enter_landed_costs ⇒ void
Renders the form for entering landed costs on a shipment, defaulting the carrier.
-
#new ⇒ Object
GET /shipments/new GET /shipments/new.xml.
-
#post_landed_costs ⇒ void
Validates and saves the entered landed cost, then prorates it across the shipment's receipts.
-
#update ⇒ Object
PUT /shipments/1 PUT /shipments/1.xml.
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
#add_po ⇒ void
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_po ⇒ void
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 |
#create ⇒ Object
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 |
#destroy ⇒ Object
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 |
#edit ⇒ Object
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_costs ⇒ void
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_costs ⇒ void
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 |
#new ⇒ Object
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_costs ⇒ void
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 |
#update ⇒ Object
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 |