Compare commits

...
4 Commits
7 changed files with 80 additions and 50 deletions
+17
View File
@@ -33,6 +33,23 @@ class Vehicle < ApplicationRecord
issues.includes(:invoices).flat_map(&:invoices).uniq.compact
end
def last_service
return issues
.joins(:custom_values)
.where(custom_values: { custom_field_id: CustomField.find_by(name: "Mileage")&.id })
.where.not(custom_values: { value: ['', nil] })
.order(created_on: :desc)
.first
end
def last_service_date
return last_service.created_on&.to_date
end
def last_service_mileage
return last_service&.custom_values&.find_by(custom_field_id: CustomField.find_by(name: "Mileage")&.id)&.value.presence
end
def make=(val)
super(val.to_s.strip)
end
@@ -8,10 +8,13 @@
<div class="value" id="vin">
<div id="copyLink" onclick="handleCopy(event)"><%= split_vin[0] if split_vin %><b><%= split_vin[1] if split_vin %></b></div>
</div>
</div>
<div class="vehicle_notes attribute">
<div class="label"><%= t(:field_notes) %>:</div>
<pre class="value" id="note-display" style="text-align: left; white-space: pre-wrap; font-family: inherit; "><%=notes%></pre>
<% if vehicle.present? %>
<div class="value wiki">
<%= textilizable(@issue.vehicle, :notes) %>
</div>
<% end %>
</div>
+14 -22
View File
@@ -5,7 +5,6 @@
<table>
<tbody>
<tr>
<th><%= t(:field_customer) %></th>
<td><%= vehicle.customer ? link_to(vehicle.customer.name, customer_path(vehicle.customer)) : t(:no_customer) %></td>
@@ -23,43 +22,36 @@
</td>
</tr>
<tr>
<th><%= t(:label_trim) %></th>
<td><%= vehicle.doors %> <%= t(:label_door) if vehicle.doors? %> <%= vehicle.trim %></td>
</tr>
</tbody>
</table>
</div>
<div class="splitcontentleft">
<div class="splitcontentright">
<h4><%= t(:field_notes) %>:</h4>
<pre id="note-display" style="text-align: left; white-space: pre-wrap; font-family: inherit; ">
<td><%= vehicle.notes %></td>
</pre>
</tr>
<script>
const preElement = document.getElementById('note-display');
// This takes the text, trims the edges, and puts it back
preElement.textContent = preElement.textContent.trim();
</script>
<div class="vehicle_notes attribute">
<div class="label"><%= t(:field_notes) %>:</div>
<% if vehicle.notes.present? %>
<div class="value wiki">
<%= textilizable(vehicle, :notes) %>
</div>
<% end %>
</div>
</div>
</div>
</div>
<% last = vehicle.issues.last %>
<% if last %>
<% mileage = last.custom_values.find_by(custom_field_id: CustomField.find_by_name("Mileage").id) %>
<% mileage = vehicle.last_service_mileage %>
<% if mileage %>
<p>
<b><%=t(:label_last_service) %></b> <%= last&.closed_on&.to_date || l(:label_unknown) %>
at <%= mileage.value %>
<%=t(:label_miles) %>
<b><%= t(:label_last_service) %></b> <%= vehicle.last_service_date %>
at <%= mileage %> <%= t(:label_miles) %>
</p>
<% end %>
<% end %>
<div style="float: right;">
<%= button_to t(:label_edit), edit_vehicle_path(vehicle), method: :get %>
+8 -1
View File
@@ -42,7 +42,14 @@
<div class="clearfix">
<%=t(:field_notes)%>:
<div class="input">
<%= f.text_area :notes, cols: 60, rows: 10, no_label: true %>
<p>
<%= f.text_area :notes,
rows: 8,
class: 'wiki-edit',
style: 'width: 95%;',
id: 'customer_appointment_description' %>
<%= wikitoolbar_for 'customer_appointment_description' %>
</p>
</div>
</div>
+14 -2
View File
@@ -6,7 +6,7 @@
<div class="container">
<% if show_checkbox %>
<%= check_box_tag "vehicle_ids[]", vehicle.id, false, onchange: "updateLink()", data: { url: vehicle_path(vehicle).html_safe, text: vehicle.to_s }, class: "appointment checkbox" %>
<%= check_box_tag "vehicle_ids[]", vehicle.id, false, onchange: "updateLink()", data: { url: vehicle_path(vehicle).html_safe, text: vehicle.to_s }, class: "vehicle-checkbox appointment checkbox" %>
<% else %>
<div class='checkbox'>
</div>
@@ -21,10 +21,22 @@
<% if show_customer %>
<%= vehicle.customer %>
<% end %>
</div>
<%
mileage = vehicle.last_service_mileage
%>
<% if mileage %>
<br/>
<b><%= t(:label_last_service) %></b> <%= vehicle.last_service_date %>
at <%= mileage %> <%= t(:label_miles) %>
<% end %>
</div>
<br/>
</div>
</div>
<% end %>
+1 -1
View File
@@ -14,7 +14,7 @@ Redmine::Plugin.register :redmine_qbo_vehicles do
name 'Redmine QBO Vehicles plugin'
author 'Rick Barrette'
description 'This is a plugin for Redmine to intergrate with the redmine_qbo plugin to provide vehicle data tracking'
version '2026.8.0'
version '2026.8.1'
url 'https://github.com/rickbarrette/redmine_qbo_vehicles'
author_url 'https://barrettefabrication.com'
requires_redmine version_or_higher: '6.1.0'
@@ -20,8 +20,7 @@ module Vehicles
partial: 'issues/show_issue_view_right',
locals: {
vehicle: context[:issue].vehicle ? link_to(context[:issue].vehicle) : nil,
split_vin: context[:issue].vehicle ? context[:issue].vehicle.vin.to_s.scan(/.{1,9}/) : nil,
notes: context[:issue].vehicle ? context[:issue].vehicle.notes : nil
split_vin: context[:issue].vehicle ? context[:issue].vehicle.vin.to_s.scan(/.{1,9}/) : nil
}
})
end