diff --git a/app/assets/stylesheets/calendar.css b/app/assets/stylesheets/calendar.css index a841bf2..c15d841 100644 --- a/app/assets/stylesheets/calendar.css +++ b/app/assets/stylesheets/calendar.css @@ -27,4 +27,126 @@ .calendar-time-slot { min-height: 50px; /* Adjust as needed */ -} \ No newline at end of file +} + +/* ToastUI Calendar Event Styling */ +.toastui-calendar-events { + margin-right: 8px; + text-wrap: auto; +} + +.toastui-calendar-event-time { + position: relative; + overflow: visible !important; + min-height: 24px !important; + cursor: pointer; + transition: all 0.2s ease; +} + +.toastui-calendar-event-time:hover { + transform: scale(1.02); + z-index: 1000 !important; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border-radius: 4px !important; +} + +.toastui-calendar-event-time-content { + height: 100% !important; + overflow: visible !important; + padding: 2px 4px !important; + text-wrap: auto; + word-wrap: break-word; + line-height: 1.1 !important; +} + +.toastui-calendar-template-time { + font-size: 10px !important; + line-height: 1.1 !important; + text-wrap: auto; + word-wrap: break-word; + white-space: normal !important; + overflow: visible !important; + display: block !important; +} + +.toastui-calendar-template-time strong { + font-size: 10px !important; + font-weight: 600; + display: block; + margin-bottom: 1px; +} + +.toastui-calendar-template-time span { + font-size: 9px !important; + line-height: 1.0 !important; + text-wrap: auto; + word-wrap: break-word; + white-space: normal !important; + display: block !important; +} + +/* Hover tooltip effect */ +.toastui-calendar-event-time:hover::after { + content: "Click to edit reservation"; + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%); + background-color: rgba(0, 0, 0, 0.9); + color: white; + padding: 8px 12px; + border-radius: 6px; + font-size: 11px; + white-space: nowrap; + z-index: 2000; + pointer-events: none; + opacity: 0; + animation: tooltipFadeIn 0.3s ease forwards; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); +} + +.toastui-calendar-event-time:hover::before { + content: ''; + position: absolute; + bottom: calc(100% - 6px); + left: 50%; + transform: translateX(-50%); + border: 6px solid transparent; + border-top-color: rgba(0, 0, 0, 0.9); + z-index: 2000; + pointer-events: none; + opacity: 0; + animation: tooltipFadeIn 0.3s ease forwards; +} + +@keyframes tooltipFadeIn { + to { + opacity: 1; + } +} + +/* Improve visibility for small events */ +.toastui-calendar-event-time[style*="height: calc(1%"] .toastui-calendar-template-time strong, +.toastui-calendar-event-time[style*="height: calc(2%"] .toastui-calendar-template-time strong { + display: none; /* Hide time for very small events */ +} + +.toastui-calendar-event-time[style*="height: calc(1%"] .toastui-calendar-template-time span, +.toastui-calendar-event-time[style*="height: calc(2%"] .toastui-calendar-template-time span { + font-size: 8px !important; + line-height: 1.0 !important; +} + +/* Ensure minimum visibility */ +.toastui-calendar-event-time { + min-width: 60px !important; +} + +/* Better text contrast */ +.toastui-calendar-event-time[style*="background-color: rgb(66, 109, 215)"] { + color: white !important; +} + +.toastui-calendar-event-time[style*="background-color: rgb(66, 109, 215)"] .toastui-calendar-template-time { + color: white !important; +} diff --git a/app/controllers/customers_controller.rb b/app/controllers/customers_controller.rb index f98a146..81a006c 100644 --- a/app/controllers/customers_controller.rb +++ b/app/controllers/customers_controller.rb @@ -64,10 +64,15 @@ class CustomersController < ApplicationController ).limit(10) render json: @customers.map { |c| + label = "#{c.full_name} (#{c.original_phone})" + label += " - #{c.notes}" if c.notes.present? { id: "#{c.first_name}_#{c.surname}_#{c.original_phone}", - label: "#{c.full_name} (#{c.original_phone})", - birthyear: c.birthyear + label: label, + birthyear: c.birthyear, + color: c.color || 'green', + color_hex: c.color_hex, + notes: c.notes } } end @@ -86,6 +91,6 @@ class CustomersController < ApplicationController # Only allow a list of trusted parameters through. def customer_params - params.require(:customer).permit(:first_name, :surname, :phone, :notes, :email, :birthyear) + params.require(:customer).permit(:first_name, :surname, :phone, :notes, :email, :birthyear, :color) end end diff --git a/app/controllers/reservations_controller.rb b/app/controllers/reservations_controller.rb index 259bab8..ba47cdf 100644 --- a/app/controllers/reservations_controller.rb +++ b/app/controllers/reservations_controller.rb @@ -41,7 +41,10 @@ class ReservationsController < ApplicationController # POST /reservations or /reservations.json def create @reservation = @company.reservations.new( - reservation_params.except(:customer_id, :customer_birth_year) + reservation_params.except( + :customer_id, :customer_first_name, :customer_surname, + :customer_original_phone, :customer_birth_year, :customer_composite_key + ) ) # Find or create customer based on submitted attributes @@ -68,7 +71,7 @@ class ReservationsController < ApplicationController customer_attrs = build_customer_attributes # Use existing helper reservation_attrs = reservation_params.except( :customer_id, :customer_first_name, :customer_surname, - :customer_original_phone, :customer_birth_year + :customer_original_phone, :customer_birth_year, :customer_composite_key ) # Find the customer identified by the submitted name/phone @@ -144,6 +147,7 @@ class ReservationsController < ApplicationController :customer_surname, :customer_original_phone, :customer_birth_year, + :customer_composite_key, :customer_id # Allow this if select still sends it sometimes ) end diff --git a/app/javascript/controllers/customer_search_controller.js b/app/javascript/controllers/customer_search_controller.js index 9aba290..ecc2c01 100644 --- a/app/javascript/controllers/customer_search_controller.js +++ b/app/javascript/controllers/customer_search_controller.js @@ -66,7 +66,8 @@ export default class extends Controller { return '
+ Color: + + <%= customer.color_emoji %> <%= (customer.color || 'green').humanize %> + +
+Email: <%= customer.email %> diff --git a/app/views/customers/_form.html.erb b/app/views/customers/_form.html.erb index e2bb48b..2d6159e 100644 --- a/app/views/customers/_form.html.erb +++ b/app/views/customers/_form.html.erb @@ -31,6 +31,18 @@ <%= form.text_area :notes, rows: 4, class: "block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full" %> +