<%= l(:label_upcoming_appointments, default: 'My Upcoming Appointments') %>

<% # Get Redmine's configured non-working week days (e.g., ["6", "7"] for Sat/Sun) non_working_days = Setting.non_working_week_days || [] # Safely filter appointments by logged-in user across possible user column names appointments_scope = CustomerAppointment.all if CustomerAppointment.column_names.include?('user_id') appointments_scope = appointments_scope.where(user_id: User.current.id) elsif CustomerAppointment.column_names.include?('assigned_to_id') appointments_scope = appointments_scope.where(assigned_to_id: User.current.id) elsif CustomerAppointment.column_names.include?('author_id') appointments_scope = appointments_scope.where(author_id: User.current.id) end # Look back up to 60 days to capture multi-day appointments starting in the past raw_appointments = appointments_scope.where('date >= ?', Date.today - 60.days) expanded_appointments = [] raw_appointments.each do |appointment| next if appointment.start_date.nil? start_date = appointment.start_date.to_date duration = [appointment.duration.to_i, 1].max date_cursor = start_date working_days_counted = 0 # Expand appointment dates strictly across working days based on duration while working_days_counted < duration unless non_working_days.include?(date_cursor.cwday.to_s) working_days_counted += 1 # Only list dates falling on or after today if date_cursor >= Date.today expanded_appointments << { appointment: appointment, date: date_cursor, day_number: working_days_counted, total_days: duration } end end date_cursor += 1 end end # Sort upcoming occurrences chronologically and take top 10 expanded_appointments.sort_by! { |item| item[:date] } expanded_appointments = expanded_appointments.first(10) %> <% if expanded_appointments.any? %> <% expanded_appointments.each do |item| %> <% appt = item[:appointment] %> <% status_slug = appt.status.to_s.parameterize %> <% end %>
<%= l(:label_title) %> <%= l(:label_customer) %> <%= l(:label_vehicle) %> <%= l(:label_date) %> <%= l(:label_status) %>
<%= link_to appt.subject, customer_appointment_path(appt) %> <% if item[:total_days] > 1 %> (Day <%= item[:day_number] %> of <%= item[:total_days] %>) <% end %> <%= link_to appt.customer unless appt.customer.nil? %> <%= link_to appt.vehicle unless appt.vehicle.nil? %> <%= format_date(item[:date]) %> <% if appt.status.present? %> <%= appt.status.to_s.humanize %> <% end %>
<% else %>

<%= l(:label_no_data) %>

<% end %>