Browse Source

WIP

pull/863/head
Ted-U 3 years ago committed by baarkerlounger
parent
commit
29c2e901e2
  1. 12
      app/controllers/lettings_logs_controller.rb
  2. 29
      app/controllers/logs_controller.rb
  3. 16
      app/controllers/modules/logs_filter.rb
  4. 2
      app/controllers/organisations_controller.rb
  5. 2
      app/models/user.rb
  6. 1
      config/routes.rb
  7. 20
      spec/requests/logs_controller_spec.rb

12
app/controllers/lettings_logs_controller.rb

@ -1,16 +1,12 @@
class LettingsLogsController < LogsController
include Pagy::Backend
include Modules::LettingsLogsFilter
include Modules::SearchFilter
before_action :authenticate_user!, unless: :json_api_request?
before_action :find_resource, except: %i[create index edit]
def index
set_session_filters
all_logs = current_user.lettings_logs
unpaginated_filtered_logs = filtered_lettings_logs(filtered_collection(all_logs, search_term))
unpaginated_filtered_logs = filtered_logs(filtered_collection(all_logs, search_term))
respond_to do |format|
format.html do
@ -78,12 +74,6 @@ class LettingsLogsController < LogsController
private
API_ACTIONS = %w[create show update destroy].freeze
def search_term
params["search"]
end
def permitted_log_params
params.require(:lettings_log).permit(LettingsLog.editable_fields)
end

29
app/controllers/logs_controller.rb

@ -1,6 +1,31 @@
class LogsController < ApplicationController
include Pagy::Backend
include Modules::LogsFilter
include Modules::SearchFilter
skip_before_action :verify_authenticity_token, if: :json_api_request?
before_action :authenticate, if: :json_api_request?
before_action :authenticate_user!, unless: :json_api_request?
def index
set_session_filters
all_logs = current_user.lettings_logs + current_user.sales_logs
unpaginated_filtered_logs = filtered_logs(filtered_collection(all_logs, search_term))
respond_to do |format|
format.html do
@pagy, @lettings_logs = pagy(unpaginated_filtered_logs)
@searched = search_term.presence
@total_count = all_logs.size
end
format.csv do
send_data byte_order_mark + unpaginated_filtered_logs.to_csv(current_user), filename: "logs-#{Time.zone.now}.csv"
end
end
end
private
@ -61,4 +86,8 @@ private
"created_by_id" => current_user.id,
}
end
def search_term
params["search"]
end
end

16
app/controllers/modules/lettings_logs_filter.rb → app/controllers/modules/logs_filter.rb

@ -1,7 +1,7 @@
module Modules::LettingsLogsFilter
def filtered_lettings_logs(logs)
if session[:lettings_logs_filters].present?
filters = JSON.parse(session[:lettings_logs_filters])
module Modules::LogsFilter
def filtered_logs(logs)
if session[:logs_filters].present?
filters = JSON.parse(session[:logs_filters])
filters.each do |category, values|
next if Array(values).reject(&:empty?).blank?
next if category == "organisation" && params["organisation_select"] == "all"
@ -9,15 +9,15 @@ module Modules::LettingsLogsFilter
logs = logs.public_send("filter_by_#{category}", values, current_user)
end
end
logs = logs.order(created_at: :desc)
logs = logs.sort_by(&:created_at)
current_user.support? ? logs.all.includes(:owning_organisation, :managing_organisation) : logs
end
def set_session_filters(specific_org: false)
new_filters = session[:lettings_logs_filters].present? ? JSON.parse(session[:lettings_logs_filters]) : {}
current_user.lettings_logs_filters(specific_org:).each { |filter| new_filters[filter] = params[filter] if params[filter].present? }
new_filters = session[:logs_filters].present? ? JSON.parse(session[:logs_filters]) : {}
current_user.logs_filters(specific_org:).each { |filter| new_filters[filter] = params[filter] if params[filter].present? }
new_filters = new_filters.except("organisation") if params["organisation_select"] == "all"
session[:lettings_logs_filters] = new_filters.to_json
session[:logs_filters] = new_filters.to_json
end
end

2
app/controllers/organisations_controller.rb

@ -92,7 +92,7 @@ class OrganisationsController < ApplicationController
set_session_filters(specific_org: true)
organisation_logs = LettingsLog.all.where(owning_organisation_id: @organisation.id)
unpaginated_filtered_logs = filtered_lettings_logs(filtered_collection(organisation_logs, search_term))
unpaginated_filtered_logs = filtered_logs(filtered_collection(organisation_logs, search_term))
respond_to do |format|
format.html do

2
app/models/user.rb

@ -141,7 +141,7 @@ class User < ApplicationRecord
ROLES.except(:support)
end
def lettings_logs_filters(specific_org: false)
def logs_filters(specific_org: false)
if support? && !specific_org
%w[status years user organisation]
else

1
config/routes.rb

@ -73,6 +73,7 @@ Rails.application.routes.draw do
end
end
get "logs", to: "logs#index"
resources :lettings_logs, path: "/logs" do
collection do
post "bulk-upload", to: "bulk_upload#bulk_upload"

20
spec/requests/logs_controller_spec.rb

@ -0,0 +1,20 @@
require "rails_helper"
RSpec.describe LettingsLogsController, type: :request do
describe "index" do
let(:user) { FactoryBot.create(:user) }
let(:page) { Capybara::Node::Simple.new(response.body) }
before do
sign_in user
FactoryBot.create_list(:lettings_log, 3, :completed, owning_organisation: user.organisation, created_by: user)
FactoryBot.create_list(:sales_log, 3, owning_organisation: user.organisation, created_by: user)
end
it "shows both lettings and sales logs" do
get "/logs"
expect(page).to have_content("6 total logs")
end
end
end
Loading…
Cancel
Save