Class: Crm::AgreementsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- Crm::AgreementsController
- Includes:
- Controllers::Workflowable
- Defined in:
- app/controllers/crm/agreements_controller.rb
Overview
Controller: agreements.
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_participant ⇒ void
POST /crm/agreements/:agreement_id/add_participant — adds a party as an agreement participant, suggesting their customer's other contacts.
-
#create ⇒ void
POST /crm/agreements — creates an agreement and its participants in one nested-form save.
-
#edit ⇒ void
GET /crm/agreements/:id/edit — edit form for an existing agreement.
-
#index ⇒ void
GET /crm/agreements — paginated agreement list.
-
#new ⇒ void
GET /crm/agreements/new — blank agreement form, optionally scoped to a
resource. -
#participant_lookup ⇒ Object
Used by tom-select field on agreements/participants if q is specified a global lookup is run if party_id is specified, then a single party is looked up (used to initialize form on load typically).
-
#show ⇒ void
GET /crm/agreements/:id — a single agreement and its participants.
-
#update ⇒ void
PATCH/PUT /crm/agreements/:id — updates an agreement and its participants.
Methods included from Controllers::Workflowable
#render_workflow_error_stream, #render_workflow_success_stream, #workflow_action, #workflow_action_complete
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_participant ⇒ void
This method returns an undefined value.
POST /crm/agreements/:agreement_id/add_participant — adds a party as an
agreement participant, suggesting their customer's other contacts.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'app/controllers/crm/agreements_controller.rb', line 106 def add_participant if (party_id = params.dig(:party_id).presence) @party = Party.find(party_id) @agreement_participant = AgreementParticipant.new(party: @party, preferred_language: @party.preferred_language) # After a participant is added we will pre-populate the drop with with all contacts of the customer of that party if @party.customer @suggested_contacts = @party.customer.contacts.active.where.not(id: @party.id).order(:full_name).to_a.map do |party| { text: party.to_s, id: party.id } end end respond_to do |format| format.turbo_stream end else head :forbidden end end |
#create ⇒ void
This method returns an undefined value.
POST /crm/agreements — creates an agreement and its participants in one
nested-form save.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'app/controllers/crm/agreements_controller.rb', line 43 def create @agreement = Agreement.new(params[:agreement]) :create, @agreement success = true # In order for nested contact points to save, the agreement participants must save if success # Russian doll nested form save (or contact points won't save) Agreement.transaction do success = @agreement.save && @agreement.agreement_participants.all? do |ap| ap.agreement = @agreement ap.party.save && ap.save end end end respond_to do |format| if success format.html { redirect_to @agreement } format.json { render json: @agreement, status: :created, location: @agreement } else format.html { render action: 'new', status: :unprocessable_content } format.json { render json: @agreement.errors, status: :unprocessable_content } end end end |
#edit ⇒ void
This method returns an undefined value.
GET /crm/agreements/:id/edit — edit form for an existing agreement.
35 36 37 |
# File 'app/controllers/crm/agreements_controller.rb', line 35 def edit @agreement = Agreement.find(params[:id]) end |
#index ⇒ void
This method returns an undefined value.
GET /crm/agreements — paginated agreement list.
9 10 11 12 |
# File 'app/controllers/crm/agreements_controller.rb', line 9 def index @agreements = Agreement.all @pagy, @agreements = pagy(@agreements.order(created_at: :desc)) end |
#new ⇒ void
This method returns an undefined value.
GET /crm/agreements/new — blank agreement form, optionally scoped to a
resource.
27 28 29 30 |
# File 'app/controllers/crm/agreements_controller.rb', line 27 def new resource = params[:resource] @agreement = Agreement.new(resource: resource) end |
#participant_lookup ⇒ Object
Used by tom-select field on agreements/participants
if q is specified a global lookup is run
if party_id is specified, then a single party is looked up (used to initialize form on load typically)
96 97 98 99 100 |
# File 'app/controllers/crm/agreements_controller.rb', line 96 def participant_lookup @agreement = Agreement.find(params[:agreement_id]) if params[:agreement_id].present? results = AgreementParticipant.find_participants(@agreement, params) render json: results end |
#show ⇒ void
This method returns an undefined value.
GET /crm/agreements/:id — a single agreement and its participants.
17 18 19 20 21 |
# File 'app/controllers/crm/agreements_controller.rb', line 17 def show @agreement = Agreement.find(params[:id]) @participants = @agreement.agreement_participants # esignature_data = Api::Esignatures.retrieve_contract(@agreement.contract_number) if @agreement.contract_number.present? end |
#update ⇒ void
This method returns an undefined value.
PATCH/PUT /crm/agreements/:id — updates an agreement and its participants.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'app/controllers/crm/agreements_controller.rb', line 73 def update @agreement = Agreement.find params[:id] :update, @agreement params[:agreement] ||= {} @agreement.assign_attributes(params[:agreement]) @agreement.agreement_participants.each(&:valid?) begin if @agreement.save redirect_to_return_path_or_default(agreement_path(@agreement)) else render_action(params[:edit_action]) end rescue ActiveRecord::RecordNotUnique @agreement.errors.add(:base, 'Same participant have been listed twice') render_action(params[:edit_action]) end end |