<% overdue_statuses = @maintenance_schedule_statuses.values.select(&:overdue?) %> <% upcoming_statuses = @maintenance_schedule_statuses.values.select(&:upcoming?) %> <% no_history_statuses = @maintenance_schedule_statuses.values.select(&:no_history?) %> <% attention_statuses = overdue_statuses + upcoming_statuses %>
<% if notice.present? %>

<%= notice %>

<% end %> <% if flash[:warning].present? %>

<%= flash[:warning] %>

<% end %>

<%= link_to "Back to vehicles", vehicles_path, class: "back-link" %>

<%= @vehicle.licence_plate %>

<%= @vehicle.year %> <%= @vehicle.make %> <%= @vehicle.model %>

<%= number_with_delimiter(@vehicle.current_odometer) %> miles

<% if attention_statuses.any? %>
<% if overdue_statuses.any? %>

Overdue maintenance

    <% overdue_statuses.each do |status| %>
  • <%= status.schedule.maintenance_type %>: <%= status.reason %>. Due at <%= number_with_delimiter(status.due_odometer) %> miles or <%= status.due_date %>.
  • <% end %>
<% end %> <% if upcoming_statuses.any? %>

Upcoming maintenance

    <% upcoming_statuses.each do |status| %>
  • <%= status.schedule.maintenance_type %>: <%= status.reason %>. Due at <%= number_with_delimiter(status.due_odometer) %> miles or <%= status.due_date %>.
  • <% end %>
<% end %>
<% end %>
Vehicle Information
Make <%= @vehicle.make %>
Model <%= @vehicle.model %>
Year <%= @vehicle.year %>
Color <%= @vehicle.color %>
VIN <%= @vehicle.vin %>
Licence plate <%= @vehicle.licence_plate %>
Current odometer <%= number_with_delimiter(@vehicle.current_odometer) %>
Fuel tank size <%= @vehicle.fuel_tank_size %>
Status <%= @vehicle.active? ? "Active" : "Inactive" %>
Record Fuel <%= form_with model: [@vehicle, @fuel_entry], class: "stacked-form" do |form| %> <% if @fuel_entry.errors.any? %>

<%= pluralize(@fuel_entry.errors.count, "error") %> prevented this fuel entry from being saved

    <% @fuel_entry.errors.full_messages.each do |message| %>
  • <%= message %>
  • <% end %>
<% end %>
<%= form.label :odometer %> <%= form.number_field :odometer, min: @vehicle.current_odometer, required: true %>
<%= form.label :gallons_pumped %> <%= form.number_field :gallons_pumped, min: 0.01, step: "0.01", required: true %>
<%= form.label :price_paid %> <%= form.number_field :price_paid, min: 0.01, step: "0.01", required: true %>
<%= form.label :date %> <%= form.date_field :date, max: Date.current, required: true %>
<%= form.submit "Record fuel", class: "button button--primary" %>
<% end %>
> Record Maintenance <% if @maintenance_schedules.any? %> <%= form_with model: [@vehicle, @maintenance_entry], class: "stacked-form", data: { controller: "maintenance-odometer-warning", maintenance_odometer_warning_current_odometer_value: @vehicle.current_odometer, maintenance_odometer_warning_threshold_value: 500 } do |form| %> <% if @maintenance_entry.errors.any? %>

<%= pluralize(@maintenance_entry.errors.count, "error") %> prevented this maintenance entry from being saved

    <% @maintenance_entry.errors.full_messages.each do |message| %>
  • <%= message %>
  • <% end %>
<% end %>
<%= form.label :name, "Maintenance type" %> <%= form.select :name, options_for_select(@maintenance_schedules.map(&:maintenance_type), @maintenance_entry.name), { prompt: "Choose maintenance type" }, required: true %>
<%= form.label :odometer %> <%= form.number_field :odometer, min: 0, required: true, data: { maintenance_odometer_warning_target: "odometer", action: "input->maintenance-odometer-warning#check change->maintenance-odometer-warning#check" } %>
<%= form.label :cost %> <%= form.number_field :cost, min: 0, step: "0.01", required: true %>
<%= form.label :date %> <%= form.date_field :date, max: Date.current, required: true %>
<%= form.label :notes %> <%= form.text_area :notes, required: true %>
<%= form.submit "Record maintenance", class: "button button--primary" %>
<% end %> <% else %>

Add a maintenance schedule before recording maintenance.

<% end %>
Maintenance Schedules

<%= link_to "Manage maintenance schedules", vehicle_maintenance_schedules_path(@vehicle), class: "button button--secondary" %>

<% if attention_statuses.any? %>
<% if overdue_statuses.any? %>

Overdue maintenance

    <% overdue_statuses.each do |status| %>
  • <%= status.schedule.maintenance_type %> is overdue: <%= status.reason %>. Due at <%= number_with_delimiter(status.due_odometer) %> miles or <%= status.due_date %>.
  • <% end %>
<% end %> <% if upcoming_statuses.any? %>

Upcoming maintenance

    <% upcoming_statuses.each do |status| %>
  • <%= status.schedule.maintenance_type %> is upcoming: <%= status.reason %>. Due at <%= number_with_delimiter(status.due_odometer) %> miles or <%= status.due_date %>.
  • <% end %>
<% end %>
<% end %> <% if no_history_statuses.any? %>

No Maintenance History

    <% no_history_statuses.each do |status| %>
  • <%= status.schedule.maintenance_type %> has no matching maintenance entry yet. Baseline due point is <%= number_with_delimiter(status.due_odometer) %> miles or <%= status.due_date %>.
  • <% end %>
<% end %> <% if @maintenance_schedules.any? %>
<% @maintenance_schedules.each do |schedule| %> <% status = @maintenance_schedule_statuses.fetch(schedule) %> <% end %>
Type Mileage interval Time interval Next due odometer Next due date Status
<%= schedule.maintenance_type %> <%= number_with_delimiter(schedule.mileage_interval) %> miles <%= schedule.time_interval %> days <%= number_with_delimiter(status.due_odometer) %> <%= status.due_date %> <%= status.status_label %>
<% else %>

No maintenance schedules recorded.

<% end %>
Maintenance History <% if @maintenance_entries.any? %>
<% @maintenance_entries.each do |entry| %> <% end %>
Date Name Odometer Cost Notes Updated by
<%= entry.date %> <%= entry.name %> <%= number_with_delimiter(entry.odometer) %> <%= number_to_currency(entry.cost) %> <%= entry.notes %> <%= entry.updated_by_user.name %>
<% else %>

No maintenance entries recorded.

<% end %>
Fuel History <% if @fuel_entries.any? %>
<% @fuel_entries.each do |entry| %> <% end %>
Date Odometer Gallons Price paid Updated by
<%= entry.date %> <%= number_with_delimiter(entry.odometer) %> <%= entry.gallons_pumped %> <%= number_to_currency(entry.price_paid) %> <%= entry.updated_by_user.name %>
<% else %>

No fuel entries recorded.

<% end %>
Vehicle Management
<%= link_to "Edit", edit_vehicle_path(@vehicle), class: "button button--secondary" %> <% if @vehicle.active? %> <%= button_to "Deactivate", @vehicle, method: :delete, class: "button button--danger" %> <% end %>