Skip to content

Instantly share code, notes, and snippets.

@jmoglesby
Created August 9, 2018 17:30
Show Gist options
  • Save jmoglesby/3cea1af997330aef9396bf419974d832 to your computer and use it in GitHub Desktop.
Save jmoglesby/3cea1af997330aef9396bf419974d832 to your computer and use it in GitHub Desktop.
Example code: Helper methods used in `items/index.html.erb` and `items/show.html.erb` from www.speedie.equipment
module ItemsHelper
def current_status_display_for_item(item)
case item.service_events.order(:service_date, :created_at).last&.status
when 'In Service'
'<span class="badge badge-success">In Service</span>'.html_safe
when 'Repair'
'<span class="badge badge-warning">
Repair
</span>'.html_safe
when 'Out of Service'
'<span class="badge badge-danger">
Out of Service
</span>'.html_safe
when 'Discarded'
'<span class="badge badge-dark">
Discarded
</span>'.html_safe
when 'Sold'
'<span class="badge badge-secondary">
Sold
</span>'.html_safe
when 'Missing'
'<span class="badge badge-primary">
Missing
</span>'.html_safe
end
end
def next_calibration_due_for_item(item)
item.calibration_events.order(:date_performed, :created_at).last&.date_performed >>
item.item_type.calibration_interval_in_months
end
def next_calibration_due_display_for_item(item)
case item.service_events.order(:service_date, :created_at).last&.status
when 'In Service'
if item.calibration_events.any?
if item.service_events.order(:service_date, :created_at).last&.service_date >
item.calibration_events.order(:date_performed, :created_at).last&.date_performed &&
item.service_events.count > 1
'<span class="font-weight-bold text-danger">
Calibration Required To Bring Back In Service
</span>'.html_safe
else
'<span class="font-weight-bold">
Next Due:
</span>'.html_safe +
(item.calibration_events.order(:date_performed, :created_at).last&.date_performed >>
item.item_type.calibration_interval_in_months).strftime("%m/%d/%Y")
end
else
'<span class="font-weight-bold text-danger">
No Calibration Record Exists Yet
</span>'.html_safe
end
when 'Repair'
if item.calibration_events.any?
if item.service_events.order(:service_date, :created_at).last&.service_date >
item.calibration_events.order(:date_performed, :created_at).last&.date_performed &&
item.service_events.count > 1
'<span class="font-weight-bold text-danger">
Calibration Required To Bring Back In Service
</span>'.html_safe
else
'<span class="font-weight-bold">
Next Due:
</span>'.html_safe +
(item.calibration_events.order(:date_performed, :created_at).last&.date_performed >>
item.item_type.calibration_interval_in_months).strftime("%m/%d/%Y")
end
else
'<span class="font-weight-bold text-danger">
No Calibration Record Exists Yet
</span>'.html_safe
end
when 'Missing'
if item.calibration_events.any?
'<span class="font-weight-bold">
Next Due:
</span>'.html_safe +
(item.calibration_events.order(:date_performed, :created_at).last&.date_performed >>
item.item_type.calibration_interval_in_months).strftime("%m/%d/%Y")
else
'<span class="font-weight-bold text-danger">
No Calibration Record Exists Yet
</span>'.html_safe
end
when 'Out of Service'
'<span class="font-weight-bold text-info">
Calibration Requried When Brought Back Into Service
</span>'.html_safe
when 'Discarded'
when 'Sold'
end
end
def overdue_for_calibration_display_for_item(item)
if item.calibration_events.any? &&
item.service_events.order(:service_date, :created_at).last&.status == 'In Service'
&& (DateTime.now.to_date >
(item.calibration_events.order(:date_performed, :created_at).last&.date_performed >>
item.item_type.calibration_interval_in_months))
'<span class="font-weight-bold text-danger"> << Overdue!!</span>'.html_safe
end
end
def sieve_diameter_display_for_item(item)
case item.sieve_diameter
when '18 inch'
'18"'
when '12 inch'
'12"'
when '8 inch'
'8"'
when '3 inch'
'3"'
when 'Gilson'
'Gilson'
end
end
# View helpers for displaying all the variables
# associated with certain item_types
def item_type_variables_suffix_display_for_item(item)
if item.has_item_type_variables == true
case item.item_type.name
when 'Sieve'
sieve_diameter_display_for_item(item)
when 'Saw'
item.saw_type
when 'Caliper'
item.caliper_type
when 'Penetrometer'
item.penetrometer_type
when 'Proctor Hammer'
item.proctor_hammer_weight
when 'Flask'
item.flask_type
end
end
end
def item_type_variables_affix_display_for_item(item)
if item.has_item_type_variables == true
case item.item_type.name
when 'Sieve'
if item.sieve_type == 'Fine'
'(' + item.fine_sieve_opening_size + ')'
else
'(' + item.coarse_sieve_opening_size + ')'
end
when 'Flask'
'(' + item.volume + ')'
when 'Proctor Mold 4"'
'(' + item.proctor_mold_type + ')'
when 'Proctor Mold 6"'
'(' + item.proctor_mold_six_type + ')'
when 'Scale'
'(' + item.scale_resolution + ' res; ' + item.scale_range + ' max)'
when 'Capping Mold'
'(' + item.capping_mold_size + ')'
when 'Groove Tool'
'(' + item.groove_tool_type + ')'
when 'Marshall Hammer'
'(' + item.operation_type + ')'
when 'Marshall Pedestal'
'(' + item.marshall_compaction_pedestal_number + ')'
when 'Thermometer'
'(' + item.thermometer_type + ')'
when 'Caliper'
'(' + item.caliper_size + ')'
when 'Gauge'
'(' + item.gauge_type + ')'
end
end
end
def meets_spec_icon_display_for_item(item)
if item.meets_specifications?
fa_icon 'check-circle', class: 'text-success'
else
fa_icon 'times-circle', class: 'text-danger'
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment