diff --git a/app/views/common/_calendar.html.erb b/app/views/common/_calendar.html.erb index a66da2c..bb878d2 100644 --- a/app/views/common/_calendar.html.erb +++ b/app/views/common/_calendar.html.erb @@ -1,4 +1,7 @@ <% + # Check if toggle is active via query params + only_appointments = params[:only_appointments] == '1' + # Get Redmine's configured non-working week days (e.g., ["6", "7"] for Sat/Sun) non_working_days = Setting.non_working_week_days || [] @@ -9,9 +12,10 @@ # Lambda to determine if an appointment should render on a specific calendar day appointment_occurs_on = lambda do |appointment, current_day| - return false if appointment.start_date.nil? + app_datetime = appointment.respond_to?(:date) && appointment.date.present? ? appointment.date : appointment.start_date + return false if app_datetime.nil? - start_date = appointment.start_date.to_date + start_date = app_datetime.to_date target_date = current_day.to_date return false if target_date < start_date @@ -38,6 +42,18 @@ end %> + +
+ <%= form_tag({}, data: { cm_url: issues_context_menu_path }) do %> <%= hidden_field_tag 'back_url', url_for(params: request.query_parameters), id: nil %> @@ -60,13 +76,22 @@ <% week.each do |day| %> <% - # Non-appointment events (Issues, Versions, etc.) - standard_events = calendar.events_on(day).reject { |e| e.is_a?(CustomerAppointment) } + # Filter out standard events if "only appointments" toggle is active + standard_events = only_appointments ? [] : calendar.events_on(day).reject { |e| e.is_a?(CustomerAppointment) } # Appointments matching duration on this working day matching_appointments = all_appointments.select { |app| appointment_occurs_on.call(app, day) } - day_events = standard_events + matching_appointments + # Sort events chronologically + day_events = (standard_events + matching_appointments).sort_by do |event| + if event.is_a?(CustomerAppointment) && event.date.present? + event.date.to_time + elsif event.respond_to?(:start_date) && event.start_date.present? + event.start_date.to_time + else + Time.at(0) + end + end # Sum estimated hours for Issues and CustomerAppointments total_hours = day_events.sum do |event| @@ -184,4 +209,33 @@ <% end %> -<%= context_menu %> \ No newline at end of file +<%= context_menu %> + + \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 6d4e145..6c303ca 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -27,8 +27,10 @@ en: label_estimated_hours: Estimated Time label_event: Event label_open_appointment: Open Appointment + label_only_customer_appointments: Show Customer Appointments Only label_start_date: Start Date label_status: Status + label_technician: Technician label_time: Time label_title: Title label_upcoming_appointments: "My Upcoming Appointments"