diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..d821d55 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,9 @@ +Metrics/LineLength: + Enabled: false + +Metrics/BlockLength: + Enabled: false + +AllCops: + Exclude: + - 'db/schema.rb' \ No newline at end of file diff --git a/Gemfile b/Gemfile index 4b9b4af..c73cc12 100644 --- a/Gemfile +++ b/Gemfile @@ -29,12 +29,12 @@ gem 'jbuilder', '~> 2.5' gem 'jquery-rails', '~> 4.3.1' gem 'kaminari' gem 'mini_magick' +gem 'minitest' gem 'pg', '~> 0.18' gem 'popper_js', '~> 1.12.9', '>= 1.11.1' gem 'pry-rails', group: :development gem 'puma' gem 'rails', '~> 5.1.4' -gem 'minitest' gem 'ransack', github: 'activerecord-hackery/ransack' gem 'rubocop', require: false gem 'sass-rails', '~> 5.0' @@ -53,8 +53,8 @@ end group :development do gem 'listen', '>= 3.0.5', '< 3.2' - gem 'web-console', '>= 3.3.0' gem 'rack-mini-profiler', require: false + gem 'web-console', '>= 3.3.0' end group :production do diff --git a/app/controllers/auto_select.rb b/app/controllers/auto_select.rb index ce3c024..658d852 100644 --- a/app/controllers/auto_select.rb +++ b/app/controllers/auto_select.rb @@ -73,9 +73,9 @@ def auto_select_vehicles unless @people.nil? @numb_vehicles = if !@shares.nil? - (@people - (@shares * 2)) + @shares - else - @people + (@people - (@shares * 2)) + @shares + else + @people end end diff --git a/app/controllers/checklists_controller.rb b/app/controllers/checklists_controller.rb index 19f7278..102f2e4 100644 --- a/app/controllers/checklists_controller.rb +++ b/app/controllers/checklists_controller.rb @@ -21,7 +21,7 @@ def show end end end - + def create_work_order @checklist = Checklist.find(params[:checklist_id]) @vehicle = Vehicle.find(params[:vehicle_id]) @@ -54,7 +54,7 @@ def create @checklist = Checklist.new(checklist_params) respond_to do |format| if @checklist.save - + format.html { redirect_to @checklist, notice: 'Checklist was successfully created.' } format.json { render :show, status: :created, location: @checklist } else @@ -92,7 +92,7 @@ def set_vehicle def checklist_params params.require(:checklist).permit(:date, :user_id, :event_id, :vehicle_id, :fuel_level, - :wash, :deadline, :suspension, :drive_train, :body, + :wash, :deadline, :suspension, :drive_train, :body, :engine, :brake, :safety_equipment, :chassis, :electrical, :cooling_system, :tires, :radio, :exhaust, :steering, :comments, :completed, :defect) diff --git a/app/controllers/defects_controller.rb b/app/controllers/defects_controller.rb index 9eceeb8..9115526 100644 --- a/app/controllers/defects_controller.rb +++ b/app/controllers/defects_controller.rb @@ -1,13 +1,15 @@ # frozen_string_literal: true class DefectsController < ApplicationController - def by_event - @events = Event.where(checklists_completed: true).page(params[:page]) + @vehicles = Vehicle.all + @q = Event.where(defects_reported: true).ransack(params[:q]) + @event_results = @q.result.order(id: :desc).page(params[:page]) end - + def index - @q = Defect.all.ransack(params[:q]) + @vehicles = Vehicle.all + @q = Defect.all.order(id: :desc).ransack(params[:q]) @defects = @q.result.page(params[:page]) end @@ -38,7 +40,7 @@ def destroy format.html { redirect_to defects_url, notice: 'Defect was successfully destroyed.' } end end - + private def set_defect diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index f5ce0b8..e604ab1 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -17,6 +17,8 @@ def index end def show + @event.set_checklists_completed + @event.set_defects_reported @checklists = Checklist.where(event_id: @event.id) @vehicles = @event.vehicles respond_to do |format| @@ -32,15 +34,13 @@ def vehicle_rotation_metrics; end def dashboard @display_events = Event.where('date >= ? AND date <= ?', Date.current - 7.days, Date.current + 14.days) - @set_completed_events = Event.where('date <= ?', Date.current) - @scheduled_events = Event.where(status: 'Scheduled') - @completed_events = Event.where(status: 'Completed') + @set_completed_events = Event.where('date = ?', Date.current) + @scheduled_events = Event.are_scheduled? + @completed_events = Event.are_completed? @assigned_events = Event.where(status: 'Vehicles Assigned') @date = params[:date] ? Date.parse(params[:date]) : Date.today @events_by_date = Event.group('events.id').group_by(&:date) - @set_completed_events.all.each do |event| - event.set_checklists_completed - end + @set_completed_events.all.each(&:set_checklists_completed) end def next_month_calendar @@ -213,6 +213,9 @@ def set_defects end def event_params - params.require(:event).permit(:date, :event_mileage, :location, :event_time, :duration, :end_date, :duration_word, :event_type, :multi_day, :est_mileage, :customers, :calc_mileage, :shares, :class_type, :number, :status, vehicle_ids: []) + params.require(:event).permit(:date, :event_mileage, :location, :event_time, + :duration, :end_date, :duration_word, :event_type, + :multi_day, :est_mileage, :customers, :calc_mileage, + :shares, :class_type, :defects_reported, :number, :status, vehicle_ids: []) end end diff --git a/app/controllers/requests_controller.rb b/app/controllers/requests_controller.rb index f0ea844..53ac6f4 100644 --- a/app/controllers/requests_controller.rb +++ b/app/controllers/requests_controller.rb @@ -4,9 +4,6 @@ class RequestsController < ApplicationController before_action :authenticate_user! before_action :set_request, only: %i[show edit update destroy] before_action :set_vehicle, only: %i[index show edit new] - before_action :set_services, only: %i[show index new edit a_service - shock_service air_filter_service - defects repairs completed_requests in_progress] before_action :check_quant, only: [:show] def index @@ -113,7 +110,7 @@ def dashboard def create_work_order @other_service = Program.find_by(name: 'Other Service') - @request = Request.create(status: 'New', program_id: @other_service.id, vehicle_id: params[:id], + @request = Request.create(status: 'New', program_id: @other_service.id, vehicle_id: params[:id], description: '****** Please fill this in ******', completion_date: Date.current, creator: current_user.name, request_mileage: Vehicle.find(params[:id].mileage)) if @request.save @@ -185,48 +182,13 @@ def new end def edit + @defects = Vehicle.find(@request.vehicle.id).defects @q = Part.ransack(params[:q]) @parts = @q.result.page(params[:page]) end - - def update_service_mileage(request) - @a_service = Program.a_service - @shock_service = Program.shock_service - @air_filter_service = Program.air_filter_service - @tour_car_prep = Program.tour_car_prep - @repairs = Program.repairs - @defects = Program.defect - - vehicle = request.vehicle - @veh_mileage = request.vehicle.mileage - if request.program_id == @a_service.id && request.status == 'Completed' - request.vehicle.update(last_a_service: @veh_mileage) - elsif request.program_id == @shock_service.id && request.status == 'Completed' - request.vehicle.update(last_shock_service: @veh_mileage) - elsif request.program_id == @air_filter_service.id && request.status == 'Completed' - request.vehicle.update(last_air_filter_service: @veh_mileage) - elsif request.program_id == @repairs.id && request.status == 'Completed' - vehicle.update(repair_needed: false, needs_service: false, vehicle_status: 'In-Service') - elsif request.program_id == @tour_car_prep.id && request.status == 'Completed' - vehicle.update(prep: false, needs_service: false, vehicle_status: 'In-Service') - elsif request.program_id == @defects.id && request.status == 'Completed' - vehicle.update(defect: false, needs_service: false, vehicle_status: 'In-Service') - defect_email request - end - end - - def defect_email(request) - if request.users.exists? - defect_emails = [] - request.users.all.each do |user| - defect_emails << user.email - end - UserMailer.new_request_email(defect_emails, request).deliver_now - end - end - - def request_email(request) - unless @request.program_id == @defects.id && @request.status == 'Completed' + + def request_email(_request) + unless @request.defect? && @request.completed? if @request.users.exists? emails = [] @request.users.all.each do |user| @@ -239,18 +201,11 @@ def request_email(request) def create @request = Request.new(request_params) - @a_service = Program.a_service - @shock_service = Program.shock_service - @air_filter_service = Program.air_filter_service - @tour_car_prep = Program.tour_car_prep - @repairs = Program.repairs - @defects = Program.defect respond_to do |format| if @request.save vehicle = @request.vehicle @request.update(request_mileage: vehicle.mileage) - update_service_mileage @request request_email @request format.html { redirect_to @request, notice: 'Work Order was successfully created.' } format.json { render :show, status: :created, location: @request } @@ -271,7 +226,6 @@ def update @defects = Program.defect respond_to do |format| if @request.update(request_params) - update_service_mileage @request if @request.users.exists? && @request.status == 'New' emails = [] @request.users.all.each do |user| @@ -317,16 +271,10 @@ def set_vehicle @vehicles = Vehicle.all end - def set_services - @a_service = Program.find_by(name: 'A-Service') - @shock_service = Program.find_by(name: 'Shock Service') - @air_filter_service = Program.find_by(name: 'Air Filter Change') - @repairs = Program.find_by(name: 'Repairs') - @defects = Program.find_by(name: 'Defect') - @tour_car_prep = Program.find_by(name: 'Tour Car Prep') - end - def request_params - params.require(:request).permit(:number, :description, :special_requets, :completion_date, :completed_date, :poc, :checklist_numb, :creator, :vehicle_id, :status, :image, :creator, :request_mileage, :program_id, part_ids: [], user_ids: []) + params.require(:request).permit(:number, :description, :special_requets, :completion_date, + :completed_date, :poc, :checklist_numb, :creator, :vehicle_id, + :status, :image, :creator, :request_mileage, :program_id, + part_ids: [], user_ids: [], defect_ids: []) end end diff --git a/app/controllers/vehicle_rotation.rb b/app/controllers/vehicle_rotation.rb index 127a495..5aee4ed 100644 --- a/app/controllers/vehicle_rotation.rb +++ b/app/controllers/vehicle_rotation.rb @@ -36,10 +36,9 @@ def vehicle_rotation unless vehicle.last_a_service.nil? vehicle.update(near_a_service_mileage: (vehicle.a_service_interval - (vehicle.mileage - vehicle.last_a_service))) x = vehicle.near_a_service_mileage - case - when x <= 0 + if x <= 0 vehicle.update(use_b: true, use_a: false, dont_use_a_service: true) - when x <= @set_a_service.threshold_numb + elsif x <= @set_a_service.threshold_numb vehicle.update(use_near_service: true, dont_use_a_service: false) else vehicle.update(dont_use_a_service: false) @@ -49,10 +48,9 @@ def vehicle_rotation unless vehicle.last_shock_service.nil? vehicle.update(near_shock_service_mileage: (vehicle.shock_service_interval - (vehicle.mileage - vehicle.last_shock_service))) y = vehicle.near_shock_service_mileage - case - when y < 0 + if y < 0 vehicle.update(use_b: true, use_a: false, dont_use_shock_service: true) - when y <= @set_shock_service.threshold_numb + elsif y <= @set_shock_service.threshold_numb vehicle.update(use_near_service: true, dont_use_shock_service: false) else vehicle.update(dont_use_shock_service: false) @@ -62,10 +60,9 @@ def vehicle_rotation unless vehicle.last_air_filter_service.nil? vehicle.update(near_air_filter_service_mileage: (vehicle.air_filter_service_interval - (vehicle.mileage - vehicle.last_air_filter_service))) z = vehicle.near_air_filter_service_mileage - case - when z < 0 + if z < 0 vehicle.update(use_b: true, use_a: false, dont_use_air_filter_service: true) - when z <= @set_air_filter_service.threshold_numb + elsif z <= @set_air_filter_service.threshold_numb vehicle.update(use_near_service: true, dont_use_air_filter_service: false) else vehicle.update(dont_use_air_filter_service: false) @@ -96,7 +93,7 @@ def vehicle_rotation format.html format.xls format.pdf do - render pdf: "Vehicle Rotation for #{Time.now.strftime('%D')}", layout: 'pdf.pdf.erb', title: "Vehicle Rotation for #{Time.now.strftime('%D')}" + render pdf: "Vehicle Rotation for #{Time.now.strftime('%D')}", layout: 'pdf.pdf.erb', title: "Vehicle Rotation for #{Time.now.strftime('%D')}" end end end @@ -118,10 +115,9 @@ def mileage_calculation unless vehicle.last_a_service.nil? vehicle.update(near_a_service_mileage: (vehicle.a_service_interval - (vehicle.mileage - vehicle.last_a_service))) x = vehicle.near_a_service_mileage - case - when x < 0 + if x < 0 vehicle.update(needs_service: true, a_service: true) - when x <= @set_a_service.threshold_numb + elsif x <= @set_a_service.threshold_numb vehicle.update(near_service: true) else vehicle.update(needs_service: false, a_service: false, near_service: false) @@ -130,26 +126,23 @@ def mileage_calculation unless vehicle.last_shock_service.nil? vehicle.update(near_shock_service_mileage: (vehicle.shock_service_interval - (vehicle.mileage - vehicle.last_shock_service))) y = vehicle.near_shock_service_mileage - case - when y < 0 + if y < 0 vehicle.update(needs_service: true, shock_service: true) - when y <= @set_shock_service.threshold_numb + elsif y <= @set_shock_service.threshold_numb vehicle.update(near_service: true) else vehicle.update(needs_service: false, shock_service: false, near_service: false) end end - unless vehicle.last_air_filter_service.nil? - vehicle.update(near_air_filter_service_mileage: (vehicle.air_filter_service_interval - (vehicle.mileage - vehicle.last_air_filter_service))) - z = vehicle.near_air_filter_service_mileage - case - when z < 0 - vehicle.update(needs_service: true, air_filter_service: true) - when z <= @set_air_filter_service.threshold_numb - vehicle.update(near_service: true) - else - vehicle.update(needs_service: false, air_filter_service: false, near_service: false) - end + next if vehicle.last_air_filter_service.nil? + vehicle.update(near_air_filter_service_mileage: (vehicle.air_filter_service_interval - (vehicle.mileage - vehicle.last_air_filter_service))) + z = vehicle.near_air_filter_service_mileage + if z < 0 + vehicle.update(needs_service: true, air_filter_service: true) + elsif z <= @set_air_filter_service.threshold_numb + vehicle.update(near_service: true) + else + vehicle.update(needs_service: false, air_filter_service: false, near_service: false) end end end diff --git a/app/controllers/vehicles_controller.rb b/app/controllers/vehicles_controller.rb index a556ed4..c5d7f76 100644 --- a/app/controllers/vehicles_controller.rb +++ b/app/controllers/vehicles_controller.rb @@ -57,37 +57,34 @@ def show unless @vehicle.last_a_service.nil? @vehicle.update(near_a_service_mileage: (@vehicle.a_service_interval - (@vehicle.mileage - @vehicle.last_a_service))) x = @vehicle.near_a_service_mileage - case - when x <= 0 + if x <= 0 @vehicle.update(needs_service: true, a_service: true) - when x <= 100 + elsif x <= 100 @vehicle.update(near_service: true) - when x > 100 + elsif x > 100 @vehicle.update(needs_service: false, a_service: false, near_service: false) end end unless @vehicle.last_shock_service.nil? @vehicle.update(near_shock_service_mileage: (@vehicle.shock_service_interval - (@vehicle.mileage - @vehicle.last_shock_service))) y = @vehicle.near_shock_service_mileage - case - when y <= 0 + if y <= 0 @vehicle.update(needs_service: true, shock_service: true) - when y <= 200 + elsif y <= 200 @vehicle.update(near_service: true) - when y > 200 + elsif y > 200 @vehicle.update(needs_service: false, shock_service: false, near_service: false) end end unless @vehicle.last_air_filter_service.nil? @vehicle.update(near_air_filter_service_mileage: (@vehicle.air_filter_service_interval - (@vehicle.mileage - @vehicle.last_air_filter_service))) - + z = @vehicle.near_air_filter_service_mileage - case - when z <= 0 + if z <= 0 @vehicle.update(needs_service: true, air_filter_service: true) - when z <= 50 + elsif z <= 50 @vehicle.update(near_service: true) - when z > 50 + elsif z > 50 @vehicle.update(needs_service: false, air_filter_service: false, near_service: false) end end @@ -202,11 +199,11 @@ def set_defects def vehicle_params params.require(:vehicle).permit(:car_id, :manufacturer, :vehicle_status, :use_near_service, - :vin_number, :vehicle_category_id, :registration_date, :plate_number, - :notes, :repair_needed, :needs_service, :high_use, :mileage, :prep, - :sale_date, :purchaser, :near_service, :a_service, :last_a_service, - :last_shock_service, :last_air_filter_service, :use_a, :use_b, - :dont_use_shock_service, :dont_use_a_service, :dont_use_air_filter_service, + :vin_number, :vehicle_category_id, :registration_date, :plate_number, + :notes, :repair_needed, :needs_service, :high_use, :mileage, :prep, + :sale_date, :purchaser, :near_service, :a_service, :last_a_service, + :last_shock_service, :last_air_filter_service, :use_a, :use_b, + :dont_use_shock_service, :dont_use_a_service, :dont_use_air_filter_service, :veh_category, :location, :shock_service, :times_used, :est_mileage, :a_service_interval, :shock_service_interval, :air_filter_service_interval, :air_filter_service, :location_id, :event_id, vehicle_ids: []) diff --git a/app/helpers/checklists_helper.rb b/app/helpers/checklists_helper.rb index c9cd856..45b2505 100644 --- a/app/helpers/checklists_helper.rb +++ b/app/helpers/checklists_helper.rb @@ -2,55 +2,57 @@ module ChecklistsHelper def status_symbol(vehicle, event) - unless vehicle.checklists.empty? + if vehicle.checklists.empty? + 'fa-thumbs-down' + else if vehicle.checklists.where(event_id: event.id).exists? 'fa-check' else - "fa-thumbs-down" + 'fa-thumbs-down' end - else - "fa-thumbs-down" end end - + def status_word(vehicle, event) - unless vehicle.checklists.empty? + if vehicle.checklists.empty? + 'Not Created' + else if vehicle.checklists.where(event_id: event.id).exists? 'Completed' else - "Not Completed" + 'Not Completed' end - else - "Not Created" end end - + def status_word_color(vehicle, event) - unless vehicle.checklists.empty? + if vehicle.checklists.empty? + 'text-danger' + else if vehicle.checklists.where(event_id: event.id).exists? 'text-success' else - "text-warning" + 'text-warning' end - else - "text-danger" end end - + def status_date_word(vehicle, event) - unless vehicle.checklists.empty? + if vehicle.checklists.empty? + 'Not Created' + else if vehicle.checklists.where(event_id: event.id).exists? vehicle.checklists.find_by(event_id: event.id).date.strftime('%D') else - "Not Completed" + 'Not Completed' end - else - "Not Created" end end - + def deadline_word(vehicle, event) - unless vehicle.checklists.empty? + if vehicle.checklists.empty? + 'Not Created' + else if vehicle.checklists.where(event_id: event.id).exists? if vehicle.checklists.find_by(event_id: event.id).deadline 'Deadlined' @@ -58,13 +60,11 @@ def deadline_word(vehicle, event) 'Not Deadlined' end else - "Not Completed" + 'Not Completed' end - else - "Not Created" end end - + def deadline_badge_color(vehicle, event) unless vehicle.checklists.empty? if vehicle.checklists.where(event_id: event.id).exists? @@ -74,11 +74,11 @@ def deadline_badge_color(vehicle, event) 'badge-success' end else - 'badge-warnining' + 'badge-warning' end end end - + def deadline_symbol(vehicle, event) unless vehicle.checklists.empty? if vehicle.checklists.where(event_id: event.id).exists? @@ -92,16 +92,16 @@ def deadline_symbol(vehicle, event) end end end - + def checklist_link(vehicle, event) - unless vehicle.checklists.empty? + if vehicle.checklists.empty? + 'Not Created' + else if vehicle.checklists.where(event_id: event.id).exists? - link_to "Show Checklist", checklist_path( vehicle.checklists.find_by(event_id: event.id).id), class: "btn btn-danger btn-sm" + link_to 'Show Checklist', checklist_path(vehicle.checklists.find_by(event_id: event.id).id), class: 'btn btn-danger btn-sm' else - "Not Completed" + 'Not Completed' end - else - "Not Created" end end end diff --git a/app/helpers/defects_helper.rb b/app/helpers/defects_helper.rb index 2dd7fff..0cf274b 100644 --- a/app/helpers/defects_helper.rb +++ b/app/helpers/defects_helper.rb @@ -1,2 +1,11 @@ +# frozen_string_literal: true + module DefectsHelper + def category_words(defect) + if defect.category + defect.category.tr('_', ' ').capitalize + else + 'No Category Given' + end + end end diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 62951fb..f00742e 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -3,34 +3,34 @@ module EventsHelper def vehicle_table_services(vehicle) if vehicle.use_near_service - + end end - def auto_select_vehicles(event) + def auto_select_vehicles(_event) if @event.customers && @event.customers > 0 - link_to "Auto Select Vehicles", auto_select_vehicles_events_path(id: @event.id), class: "btn btn-danger" + link_to 'Auto Select Vehicles', auto_select_vehicles_events_path(id: @event.id), class: 'btn btn-danger' end end - + def checklist_button_color(checklists, vehicle) if checklists.find_by(vehicle_id: vehicle.id).has_defects? - link_to "Checklist", checklist_path(checklists.find_by(vehicle_id: vehicle.id).id), class: "btn btn-warning ml-1" + link_to 'Checklist', checklist_path(checklists.find_by(vehicle_id: vehicle.id).id), class: 'btn btn-warning ml-1' else - link_to "Checklist", checklist_path(checklists.find_by(vehicle_id: vehicle.id).id), class: "btn btn-danger ml-1" + link_to 'Checklist', checklist_path(checklists.find_by(vehicle_id: vehicle.id).id), class: 'btn btn-danger ml-1' end end - + def calendar_symbol(event) if event.vehicles.exists? && event.checklists_completed - 'fa-check' + 'fa-check' elsif !event.checklists_completed && event.vehicles.exists? - 'fa-exclamation-triangle' + 'fa-exclamation-triangle' else 'fa-car' end end - + def calendar_event_word(event) if event.checklists.exists? if event.checklists_completed @@ -42,7 +42,7 @@ def calendar_event_word(event) 'No Vehicles Added!' end end - + def event_link_color(event) if event.is_completed? 'badge-success' diff --git a/app/helpers/requests_helper.rb b/app/helpers/requests_helper.rb index 533dbc9..5c2b1fa 100644 --- a/app/helpers/requests_helper.rb +++ b/app/helpers/requests_helper.rb @@ -2,50 +2,50 @@ module RequestsHelper def date_title(request) - unless request.completed? - "Estimated Completion date:" - else + if request.completed? 'Completed Date:' + else + 'Estimated Completion date:' end end - + def date_badge(request) - unless request.completed? - request.completion_date.strftime("%v") - else + if request.completed? request.completed_date.strftime('%v') + else + request.completion_date.strftime('%v') end end - + def badge_color(request) - unless request.completed? - 'badge-danger' - else + if request.completed? 'badge-success' + else + 'badge-danger' end end - + def date_column(request) - unless request.completed? - 'col-md-4' - else + if request.completed? 'col-md-3' + else + 'col-md-4' end end - + def empty_date_column(request) - unless request.completed? - 'col-md-6' - else + if request.completed? 'col-md-7' + else + 'col-md-6' end end - + def table_date(request) - unless request.completed? - 'Not Completed' - else + if request.completed? request.completed_date.strftime('%v') + else + 'Not Completed' end end end diff --git a/app/helpers/vehicles_helper.rb b/app/helpers/vehicles_helper.rb index 5e74677..d449e17 100644 --- a/app/helpers/vehicles_helper.rb +++ b/app/helpers/vehicles_helper.rb @@ -8,7 +8,7 @@ def fixed_defect_badge(defect) 'badge-danger' end end - + def fixed_defect_word(defect) if defect.fixed 'Fixed' @@ -16,7 +16,7 @@ def fixed_defect_word(defect) 'Not Fixed' end end - + def defect_date(defect) if defect.fixed defect.date_fixed.strftime('%v') diff --git a/app/models/checklist.rb b/app/models/checklist.rb index 1a081a7..f0bd3b5 100644 --- a/app/models/checklist.rb +++ b/app/models/checklist.rb @@ -2,9 +2,9 @@ class Checklist < ApplicationRecord before_save :set_fuel_level, :set_date, :set_wash, - :set_suspension, :set_drive_train, :set_body, - :set_engine, :set_brake, :set_safety_equipment, - :set_chassis, :set_electrcial, :set_cooling_system, + :set_suspension, :set_drive_train, :set_body, + :set_engine, :set_brake, :set_safety_equipment, + :set_chassis, :set_electrcial, :set_cooling_system, :set_tires, :set_radio, :set_exhaust, :set_steering, :defects_detected, :deadlined, :completed after_save :create_defect @@ -12,14 +12,13 @@ class Checklist < ApplicationRecord belongs_to :user belongs_to :event has_many :defects - FUEL_LEVELS = ['Full', '3/4', '1/2', '1/4', 'None'].freeze def set_date self.date = Time.current if date.blank? end - + def set_fuel_level self.fuel_level = 'Checked' if fuel_level.blank? end @@ -79,48 +78,46 @@ def set_radio def set_tires self.tires = 'Checked' if tires.blank? end - + def completed self.completed = true end - + def deadlined @set_repairs = Program.find_by(name: 'Repairs') - @vehicle = self.vehicle + @vehicle = vehicle if deadline @vehicle.update(vehicle_status: 'Out-of-Service', repair_needed: true) - Request.create(status: 'New', - description: 'Vehicle failed pre-operation inspection. Please refer to checklist for defects detected or repairs needed.', - vehicle_id: @vehicle.id, creator: User.find(self.user_id).name, program_id: @set_repairs.id, - completion_date: (Time.now + 7.days), request_mileage: @vehicle.mileage, - checklist_id: self.id, completed_date: Date.current) + Request.create(status: 'New', + description: 'Vehicle failed pre-operation inspection. Please refer to checklist for defects detected or repairs needed.', + vehicle_id: @vehicle.id, creator: User.find(user_id).name, program_id: @set_repairs.id, + completion_date: (Time.now + 7.days), request_mileage: @vehicle.mileage, + checklist_id: id, completed_date: Date.current) end end - - def defects_detected - maintenance = ['engine', 'suspension', 'steering', 'tires', - 'radio', 'chassis', 'exhaust', 'cooling_system', - 'electrical', 'safety_equipment', 'brake', 'body', - 'drive_train', 'suspension'] - self.attributes.each do |k,v| - if v != 'Checked' && maintenance.include?(k) - self.defect = true - end + + def defects_detected + maintenance = %w[engine suspension steering tires + radio chassis exhaust cooling_system + electrical safety_equipment brake body + drive_train suspension] + attributes.each do |k, v| + self.defect = true if v != 'Checked' && maintenance.include?(k) end end - + def has_defects? defect == true end - + def create_defect - maintenance = ['engine', 'suspension', 'steering', 'tires', - 'radio', 'chassis', 'exhaust', 'cooling_system', - 'electrical', 'safety_equipment', 'brake', 'body', - 'drive_train', 'suspension'] - self.attributes.each do |k,v| + maintenance = %w[engine suspension steering tires + radio chassis exhaust cooling_system + electrical safety_equipment brake body + drive_train suspension] + attributes.each do |k, v| if v != 'Checked' && maintenance.include?(k) - Defect.create(description: v, checklist_id: self.id, vehicle_id: self.vehicle.id, category: k) + Defect.create(description: v, checklist_id: id, vehicle_id: vehicle.id, category: k) end end end diff --git a/app/models/defect.rb b/app/models/defect.rb index 5e2534f..0f9ba9b 100644 --- a/app/models/defect.rb +++ b/app/models/defect.rb @@ -1,4 +1,13 @@ +# frozen_string_literal: true + class Defect < ApplicationRecord belongs_to :vehicle belongs_to :checklist + + has_many :defect_requests + has_many :requests, through: :defect_requests + + def user_naming + " #{description} ".html_safe + end end diff --git a/app/models/defect_request.rb b/app/models/defect_request.rb new file mode 100644 index 0000000..ff02953 --- /dev/null +++ b/app/models/defect_request.rb @@ -0,0 +1,4 @@ +class DefectRequest < ApplicationRecord + belongs_to :defect + belongs_to :request +end diff --git a/app/models/event.rb b/app/models/event.rb index bb79152..744f381 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -20,6 +20,12 @@ class Event < ApplicationRecord accepts_nested_attributes_for :vehicles + scope :are_scheduled?, -> { where(status: 'Scheduled') } + scope :are_completed?, -> { where(status: 'Completed') } + scope :are_vehicles_assigned?, -> { where(status: 'Vehicles Assigned') } + scope :are_in_progress?, -> { where(status: 'In-Progress') } + scope :are_cancelled?, -> { where(status: 'Cancelled') } + STATUSES = ['Scheduled', 'Vehicles Assigned', 'In-Progress', 'Completed', 'Cancelled'].freeze EVENT_TYPES = ['Odyssey', 'RZR', 'Military Training', 'Race Event', 'Filming', 'Special Event', 'Training Non-NSW', 'Demonstration'].freeze CLASS_TYPES = ['Road Runner', 'Mojave', 'Pioneer', 'Sundown', '2 Day Odyssey', '3 Day Odyssey', '4 Day Odyssey', 'Special Event', 'Training', 'Race'].freeze @@ -38,31 +44,39 @@ def set_customers def set_shares self.shares = 0 if shares.blank? end - + def set_checklists_completed - if self.vehicles.count == Checklist.where(event_id: self.id, completed: true).count - self.update(checklists_completed: true) + if vehicles.count == Checklist.where(event_id: id, completed: true).count + update(checklists_completed: true) + else + update(checklists_completed: false) + end + end + + def set_defects_reported + if checklists.where(defect: true).exists? + update(defects_reported: true) else - self.update(checklists_completed: false) + update(defects_reported: false) end end - + def is_completed? status == 'Completed' end - + def is_scheduled? status == 'Scheduled' end - + def is_vehicles_assigned? status == 'Vehicles Assigned' end - + def is_cancelled? status == 'Cancelled' end - + def is_in_progress? status == 'In-Progress' end diff --git a/app/models/program.rb b/app/models/program.rb index 0604813..1af5516 100644 --- a/app/models/program.rb +++ b/app/models/program.rb @@ -5,8 +5,8 @@ class Program < ApplicationRecord has_many :vehicles, through: :requests validates :rzr_interval, :tour_car_interval, :training_interval, :db_interval, :other_interval, :fleet_interval, presence: true - - scope :a_service, -> { find_by(name: "A-Service") } + + scope :a_service, -> { find_by(name: 'A-Service') } scope :shock_service, -> { find_by(name: 'Shock Service') } scope :air_filter_service, -> { find_by(name: 'Air Filter Change') } scope :tour_car_prep, -> { find_by(name: 'Tour Car Prep') } diff --git a/app/models/request.rb b/app/models/request.rb index 52581d7..f930b3b 100644 --- a/app/models/request.rb +++ b/app/models/request.rb @@ -9,6 +9,9 @@ class Request < ApplicationRecord has_many :part_requests has_many :parts, through: :part_requests + + has_many :defect_requests + has_many :defects, through: :defect_requests has_many :request_part_orders @@ -20,33 +23,95 @@ class Request < ApplicationRecord paginates_per 10 accepts_nested_attributes_for :vehicle, :parts + + after_save :set_defects_fixed, only: [:update] + after_save :update_service_mileage STATUS = ['New', 'In-Progress', 'Completed', 'Overdue'].freeze - - scope :is_new, -> { where(status: "New") } - scope :is_in_progress, -> { where(status: "In-Progress") } - scope :is_completed, -> { where(status: "Completed") } - scope :is_overdue, -> { where(status: "Overdue") } + + scope :is_new, -> { where(status: 'New') } + scope :is_in_progress, -> { where(status: 'In-Progress') } + scope :is_completed, -> { where(status: 'Completed') } + scope :is_overdue, -> { where(status: 'Overdue') } scope :is_an_a_service, -> { where(program_id: Program.a_service.id) } scope :is_a_shock_service, -> { where(program_id: Program.shock_service.id) } scope :is_a_air_filter_service, -> { where(program_id: Program.air_filter_service.id) } scope :is_a_repair, -> { where(program_id: Program.repairs.id) } scope :is_a_defect, -> { where(program_id: Program.defect.id) } scope :is_a_tour_car_prep, -> { where(program_id: Program.tour_car_prep.id) } + + def set_defects_fixed + if self.completed? + self.defects.update(fixed: true, date_fixed: self.completed_date) + end + end def new? - status == "New" + status == 'New' end - + def in_progress? - status == "In-Progress" + status == 'In-Progress' end - + def completed? - status == "Completed" + status == 'Completed' end - + def overdue? status == 'Overdue' end + + def a_service? + program_id == Program.a_service.id + end + + def shock_service? + program_id == Program.shock_service.id + end + + def air_filter_service? + program_id == Program.air_filter_service.id + end + + def repairs? + program_id == Program.repairs.id + end + + def defect? + program_id == Program.defect.id + end + + def tour_car_prep? + program_id == Program.defect.id + end + + def update_service_mileage + vehicle = self.vehicle + veh_mileage = self.vehicle.mileage + if self.a_service? && self.completed? + vehicle.update(last_a_service: veh_mileage) + elsif self.shock_service? && self.completed? + vehicle.update(last_shock_service: veh_mileage) + elsif self.air_filter_service? && self.completed? + vehicle.update(last_air_filter_service: veh_mileage) + elsif self.repairs? && self.completed? + vehicle.update(repair_needed: false, needs_service: false, vehicle_status: 'In-Service') + elsif self.tour_car_prep? && self.completed? + vehicle.update(prep: false, needs_service: false, vehicle_status: 'In-Service') + elsif self.defect? && self.completed? + vehicle.update(defect: false, needs_service: false, vehicle_status: 'In-Service') + defect_email + end + end + + def defect_email + if self.users.exists? + defect_emails = [] + self.users.all.each do |user| + defect_emails << user.email + end + UserMailer.new_request_email(defect_emails, self).deliver_now + end + end end diff --git a/app/models/vehicle.rb b/app/models/vehicle.rb index b04a855..dc19390 100644 --- a/app/models/vehicle.rb +++ b/app/models/vehicle.rb @@ -26,8 +26,8 @@ class Vehicle < ApplicationRecord paginates_per 8 accepts_nested_attributes_for :events - - scope :in_service, -> { where(vehicle_status: "In-Service") } + + scope :in_service, -> { where(vehicle_status: 'In-Service') } STATUSES = ['In-Service', 'Out-of-Service', 'Sold'].freeze CATEGORIES = ['RZR', 'Fleet Vehicle', 'Tour Car', 'Dirt Bike', 'Training Vehicle', 'Other'].freeze @@ -67,29 +67,29 @@ def set_last_air_filter_service def set_times_used self.times_used = 0 if times_used.blank? end - + def set_thresholds - if veh_category == "RZR" + if veh_category == 'RZR' self.a_service_interval = Program.a_service.rzr_interval self.shock_service_interval = Program.shock_service.rzr_interval self.air_filter_service_interval = Program.air_filter_service.rzr_interval - elsif veh_category == "Fleet Vehicle" + elsif veh_category == 'Fleet Vehicle' self.a_service_interval = Program.a_service.fleet_interval self.shock_service_interval = Program.shock_service.fleet_interval self.air_filter_service_interval = Program.air_filter_service.fleet_interval - elsif veh_category == "Tour Car" + elsif veh_category == 'Tour Car' self.a_service_interval = Program.a_service.tour_car_interval self.shock_service_interval = Program.shock_service.tour_car_interval self.air_filter_service_interval = Program.air_filter_service.tour_car_interval - elsif veh_category == "Dirt Bike" + elsif veh_category == 'Dirt Bike' self.a_service_interval = Program.a_service.db_interval self.shock_service_interval = Program.shock_service.db_interval self.air_filter_service_interval = Program.air_filter_service.db_interval - elsif veh_category == "Training Vehicle" + elsif veh_category == 'Training Vehicle' self.a_service_interval = Program.a_service.training_interval self.shock_service_interval = Program.shock_service.training_interval self.air_filter_service_interval = Program.air_filter_service.training_interval - elsif veh_category == "Other" + elsif veh_category == 'Other' self.a_service_interval = Program.a_service.other_interval self.shock_service_interval = Program.shock_service.other_interval self.air_filter_service_interval = Program.air_filter_service.other_interval diff --git a/app/views/defects/_defects_search_box.html.erb b/app/views/defects/_defects_search_box.html.erb new file mode 100644 index 0000000..fba5012 --- /dev/null +++ b/app/views/defects/_defects_search_box.html.erb @@ -0,0 +1,51 @@ +
+ Defects: +
+- Recipents: + Recipients: