88 lines
1.7 KiB
Ruby
88 lines
1.7 KiB
Ruby
class Customer < ApplicationRecord
|
|
# Use Rails 7.1's native composite primary key
|
|
self.primary_key = %i[first_name surname original_phone]
|
|
|
|
attribute :color, :string, default: 'green'
|
|
|
|
belongs_to :company
|
|
|
|
validates :first_name, presence: true
|
|
validates :surname, presence: true
|
|
validates :phone, presence: true
|
|
validates :original_phone, presence: true
|
|
validates :company_id, presence: true
|
|
|
|
validates :first_name, uniqueness: {
|
|
scope: %i[surname original_phone company_id],
|
|
message: -> { I18n.t('customers.customer.already_exists') }
|
|
}
|
|
|
|
validates :birthyear, numericality: {
|
|
only_integer: true,
|
|
greater_than: 1900,
|
|
less_than_or_equal_to: -> { Time.current.year }
|
|
}, allow_nil: true
|
|
|
|
validates :color, inclusion: { in: %w[green yellow red] }, allow_nil: true
|
|
|
|
before_validation :set_original_phone, on: :create
|
|
before_validation :set_default_color, on: :create
|
|
|
|
def full_name
|
|
[first_name, surname].compact_blank.join(' ')
|
|
end
|
|
|
|
def green?
|
|
color == 'green'
|
|
end
|
|
|
|
def yellow?
|
|
color == 'yellow'
|
|
end
|
|
|
|
def red?
|
|
color == 'red'
|
|
end
|
|
|
|
# Add method for URL generation
|
|
def to_param
|
|
[first_name, surname, original_phone].join('_')
|
|
end
|
|
|
|
def color_hex
|
|
case color || 'green'
|
|
when 'green'
|
|
'#22c55e'
|
|
when 'yellow'
|
|
'#eab308'
|
|
when 'red'
|
|
'#ef4444'
|
|
else
|
|
'#22c55e'
|
|
end
|
|
end
|
|
|
|
def color_emoji
|
|
case color || 'green'
|
|
when 'green'
|
|
'🟩'
|
|
when 'yellow'
|
|
'🟨'
|
|
when 'red'
|
|
'🟥'
|
|
else
|
|
'🟩'
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def set_original_phone
|
|
self.original_phone = phone if original_phone.blank?
|
|
end
|
|
|
|
def set_default_color
|
|
self.color = 'green' if color.blank?
|
|
end
|
|
end
|