0b65526b85
* Added POC for mail inbox reply email * created mailbox and migratuion for the same * cleaned up sidekiq queues and added the queues for action mailbox and active storage * created conversation mailbox and functionlaity to create a message on the conversation when it's replied * Added UUID to conversation to be used in email replies * added migration to add uuid for conversation * changed parsing and resource fetching to reflect matching uuid and loading conversation alone * cleaned up conversation mailbox.rb * Added content type & attribute for message * Added the new reply email to outgoing emails * Added migration to accounts for adding domain and settings * Modified seeds to reflect this changes * Added the flag based column on account for boolean settings * Added the new reply to email in outgoing conversation emails based on conditions * Added dynamic email routing in application mailbox * Added dynamic email routing in application mailbox * Added a catch all deafult empty mailbox * Added annotation for account * Added the complete email details & attachments to the message * Added the complete email details to the message in content_attributes, like subject, to, cc, bcc etc * Modified the mail extractor to give a serilaized version of email * Handled storing attachments of email on the message * Added incoming email settings, env variables * [#138] Added documentation regarding different email settings and variables * Fixed the mail attachments blob issue (#138) * Decoided attachments were strings and had to construct blobs out fo them to work with active storage * Fixed the content encoding issue with mail body * Fixed issue with Proc used in apllication mailbox routing * Fixed couple of typos and silly mistakes * Set appropriate from email for conversation reply mails (#138) * From email was taken from a env variable, changed it to take from account settings if enabled * Set the reply to email correctly based on conversation UUID * Added commented config ind development.rb for mailbox ingress * Added account settings for domain and support email (#138) * Added the new attributes in accounts controller params whitelisting, api responses * Added options for the the new fields in account settings * Fixed typos in email continuity docs and warnings * Added specs for conversation reply mailer changes (#138) * Added specs for * conversation reply mailer * Accounts controller * Account and Conversation models * Added tests for email presenter (#138) * Specs for inbound email routing and mailboxes (#138)
111 lines
3.4 KiB
Ruby
111 lines
3.4 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: accounts
|
|
#
|
|
# id :integer not null, primary key
|
|
# domain :string(100)
|
|
# locale :integer default("en")
|
|
# name :string not null
|
|
# settings_flags :integer default(0), not null
|
|
# support_email :string(100)
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
#
|
|
|
|
class Account < ApplicationRecord
|
|
# used for single column multi flags
|
|
include FlagShihTzu
|
|
|
|
include Events::Types
|
|
include Reportable
|
|
|
|
DEFAULT_QUERY_SETTING = {
|
|
flag_query_mode: :bit_operator
|
|
}.freeze
|
|
|
|
ACCOUNT_SETTINGS_FLAGS = {
|
|
1 => :domain_emails_enabled
|
|
}.freeze
|
|
|
|
validates :name, presence: true
|
|
|
|
has_many :account_users, dependent: :destroy
|
|
has_many :agent_bot_inboxes, dependent: :destroy
|
|
has_many :users, through: :account_users
|
|
has_many :inboxes, dependent: :destroy
|
|
has_many :conversations, dependent: :destroy
|
|
has_many :messages, dependent: :destroy
|
|
has_many :contacts, dependent: :destroy
|
|
has_many :facebook_pages, dependent: :destroy, class_name: '::Channel::FacebookPage'
|
|
has_many :telegram_bots, dependent: :destroy
|
|
has_many :twilio_sms, dependent: :destroy, class_name: '::Channel::TwilioSms'
|
|
has_many :twitter_profiles, dependent: :destroy, class_name: '::Channel::TwitterProfile'
|
|
has_many :web_widgets, dependent: :destroy, class_name: '::Channel::WebWidget'
|
|
has_many :canned_responses, dependent: :destroy
|
|
has_many :webhooks, dependent: :destroy
|
|
has_one :subscription, dependent: :destroy
|
|
has_many :notification_settings, dependent: :destroy
|
|
has_flags ACCOUNT_SETTINGS_FLAGS.merge(column: 'settings_flags').merge(DEFAULT_QUERY_SETTING)
|
|
|
|
enum locale: LANGUAGES_CONFIG.map { |key, val| [val[:iso_639_1_code], key] }.to_h
|
|
|
|
after_create :create_subscription
|
|
after_create :notify_creation
|
|
after_destroy :notify_deletion
|
|
|
|
def agents
|
|
users.where(account_users: { role: :agent })
|
|
end
|
|
|
|
def administrators
|
|
users.where(account_users: { role: :administrator })
|
|
end
|
|
|
|
def all_conversation_tags
|
|
# returns array of tags
|
|
conversation_ids = conversations.pluck(:id)
|
|
ActsAsTaggableOn::Tagging.includes(:tag)
|
|
.where(context: 'labels',
|
|
taggable_type: 'Conversation',
|
|
taggable_id: conversation_ids)
|
|
.map { |_| _.tag.name }
|
|
end
|
|
|
|
def subscription_data
|
|
agents_count = users.count
|
|
per_agent_price = Plan.paid_plan.price
|
|
{
|
|
state: subscription.state,
|
|
expiry: subscription.expiry.to_i,
|
|
agents_count: agents_count,
|
|
per_agent_cost: per_agent_price,
|
|
total_cost: (per_agent_price * agents_count),
|
|
iframe_url: Subscription::ChargebeeService.hosted_page_url(self),
|
|
trial_expired: subscription.trial_expired?,
|
|
account_suspended: subscription.suspended?,
|
|
payment_source_added: subscription.payment_source_added
|
|
}
|
|
end
|
|
|
|
def webhook_data
|
|
{
|
|
id: id,
|
|
name: name
|
|
}
|
|
end
|
|
|
|
private
|
|
|
|
def create_subscription
|
|
subscription = build_subscription
|
|
subscription.save
|
|
end
|
|
|
|
def notify_creation
|
|
Rails.configuration.dispatcher.dispatch(ACCOUNT_CREATED, Time.zone.now, account: self)
|
|
end
|
|
|
|
def notify_deletion
|
|
Rails.configuration.dispatcher.dispatch(ACCOUNT_DESTROYED, Time.zone.now, account: self)
|
|
end
|
|
end
|