1234567891011121314151617181920212223242526272829303132333435 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- module Channel::Area::Whatsapp
- extend ActiveSupport::Concern
- included do
- validate :validate_whatsapp_phone_number, if: :area_whatsapp?
- end
- private
- def validate_whatsapp_phone_number
- return if Channel
- .in_area('WhatsApp::Business')
- .then { |query| persisted? ? query.where.not(id:) : query }
- .none? { |elem| identical_whatsapp_phone_numbers?(elem, self) }
- errors.add :base, __('Phone number is already in use by another WhatsApp account.')
- end
- def identical_whatsapp_phone_numbers?(one, another)
- one_phone_number = extract_whatsapp_phone_number(one)
- another_phone_number = extract_whatsapp_phone_number(another)
- one_phone_number && another_phone_number && one_phone_number == another_phone_number
- end
- def extract_whatsapp_phone_number(channel)
- channel.options[:phone_number_id]&.to_s&.downcase
- end
- def area_whatsapp?
- area == 'WhatsApp::Business'
- end
- end
|