SHOW:
|
|
- or go back to the newest paste.
| 1 | # было | |
| 2 | class Admin::MailingSystemsController < AdminController | |
| 3 | include ActionView::Helpers::TextHelper | |
| 4 | ||
| 5 | mattr_accessor :jobs_ids do | |
| 6 | [] | |
| 7 | end | |
| 8 | ||
| 9 | def index | |
| 10 | @mailing_system = MailingSystem.new | |
| 11 | end | |
| 12 | ||
| 13 | def create | |
| 14 | @user = User.find(params[:mailing_system][:user_id]) | |
| 15 | case | |
| 16 | when @user.is_admin? || (@user.is_consultant? && @user.is_client?) | |
| 17 | emails = [] | |
| 18 | chats = [] | |
| 19 | if params[:mailing_system][:to_clients] == '1' | |
| 20 | to_clients(params[:mailing_system]) | |
| 21 | emails = @emails | |
| 22 | chats = @chats | |
| 23 | end | |
| 24 | if params[:mailing_system][:to_consultants] == '1' | |
| 25 | to_consultants(params[:mailing_system]) | |
| 26 | @emails = (@emails + emails).uniq if params[:mailing_system][:email] == '1' | |
| 27 | @chats = (@chats + chats).uniq if params[:mailing_system][:chat] == '1' | |
| 28 | end | |
| 29 | when @user.is_consultant? && params[:mailing_system][:to_clients] == '1' | |
| 30 | to_clients(params[:mailing_system]) | |
| 31 | when @user.is_client? && params[:mailing_system][:to_consultants] == '1' | |
| 32 | to_consultants(params[:mailing_system]) | |
| 33 | end | |
| 34 | ||
| 35 | if params[:button] == 'reach' | |
| 36 | @mailing_system = MailingSystem.new(permit_params) | |
| 37 | render 'index' | |
| 38 | else | |
| 39 | send_emails_messages(@emails, params[:mailing_system]) if params[:mailing_system][:email] == '1' | |
| 40 | send_chats_messages(@chats, params[:mailing_system]) if params[:mailing_system][:chat] == '1' | |
| 41 | redirect_to admin_mailing_systems_path | |
| 42 | end | |
| 43 | end | |
| 44 | ||
| 45 | ||
| 46 | private | |
| 47 | ||
| 48 | def send_chats_messages(chats, params) | |
| 49 | if chats.present? | |
| 50 | chats.map do |user| | |
| 51 | jobs_ids << SendChatsMessages.create(to: user, from: params[:user_id], | |
| 52 | body: simple_format(params[:message])) | |
| 53 | end | |
| 54 | end | |
| 55 | end | |
| 56 | ||
| 57 | def send_emails_messages(emails, params) | |
| 58 | if emails.present? | |
| 59 | emails.map do |email| | |
| 60 | jobs_ids << SendEmailsMessages.create(email: email, subject: params[:subject], | |
| 61 | body: params[:message], from: params[:user_id]) | |
| 62 | end | |
| 63 | end | |
| 64 | end | |
| 65 | ||
| 66 | def to_clients(params) | |
| 67 | search = ::Search::ClientsQuery.new.search | |
| 68 | @users = search.with_exact_countries_ids(params[:country_id]).with_migration_approaches_ids(params[:migration_approach_id]) | |
| 69 | @emails = create_lists_emails(users) if params[:email] == '1' | |
| 70 | @chats = create_lists_chats(users) if params[:chat] == '1' | |
| 71 | end | |
| 72 | ||
| 73 | def to_consultants(params) | |
| 74 | search = ::Search::ConsultantsQuery.new.search | |
| 75 | @users = search.with_exact_countries_ids(params[:country_id]).with_specializations_ids(params[:migration_approach_id]) | |
| 76 | @emails = create_lists_emails(users) if params[:email] == '1' | |
| 77 | @chats = create_lists_chats(users) if params[:chat] == '1' | |
| 78 | end | |
| 79 | ||
| 80 | def create_lists_chats(users) | |
| 81 | users.to_a.map(&:id) | |
| 82 | end | |
| 83 | ||
| 84 | def create_lists_emails(users) | |
| 85 | users.to_a.map { |user| user.email if user.email.present? }.compact
| |
| 86 | end | |
| 87 | ||
| 88 | def values_for_select | |
| 89 | @users = User.all | |
| 90 | @countries = Country.all | |
| 91 | @migration_apps = MigrationApproach.all | |
| 92 | end | |
| 93 | ||
| 94 | def permit_params | |
| 95 | params.require(:mailing_system).permit(:email, :chat, :user_id, :to_clients, | |
| 96 | :to_consultants, :country_id, :migration_approach_id, :subject, :message) | |
| 97 | end | |
| 98 | end | |
| 99 | ||
| 100 | ||
| 101 | # заменим case на фабрику | |
| 102 | ||
| 103 | - | # Тип объекта будет зависит от того, что записано в поле role. |
| 103 | + | # Тип объекта будет зависит от того, что записано в поле RoleType. |
| 104 | - | # Для начала создадим модуль, где перечислим все возможные значения поля role: |
| 104 | + | # Для начала создадим модуль, где перечислим все возможные значения поля RoleType: |
| 105 | ||
| 106 | module UserRoleType # Значения для RoleType в таблице User | |
| 107 | ADMIN = 'admin' | |
| 108 | CONSULTANT = 'consultant' | |
| 109 | CLIENT = 'client' | |
| 110 | end | |
| 111 | ||
| 112 | # Создаём Hash, который необходим для того, чтобы по значению RoleType создавать объект определенного типа: | |
| 113 | ||
| 114 | @@types_objects = {
| |
| 115 | ADMIN => :admin_delivery, | |
| 116 | CONSULTANT => :consultant_delivery, | |
| 117 | CLIENT => :client_delivery | |
| 118 | } | |
| 119 | ||
| 120 | # Реализуем функции, которые отвечают за укомплектование рассылки: | |
| 121 | ||
| 122 | def admin_delivery | |
| 123 | obj = {
| |
| 124 | :emails => self.emails, | |
| 125 | :chats => self.chats, | |
| 126 | :to_clients => self.to_clients((params[:mailing_system])), | |
| 127 | :to_consultants => self.to_consultants((params[:mailing_system])) | |
| 128 | } | |
| 129 | end | |
| 130 | ||
| 131 | ||
| 132 | # Теперь напишем функцию, которая будет отвечать за создание объекта необходимого типа по значению RoleType. | |
| 133 | ||
| 134 | def complet_delivery | |
| 135 | if @@types_objects.has_key?(self.RoleType) | |
| 136 | send(@@types_objects[self.RoleType]) | |
| 137 | else | |
| 138 | raise | |
| 139 | end | |
| 140 | end | |
| 141 | ||
| 142 | def send_delivery(obj, params) | |
| 143 | if params[:mailing_system][:email] == '1' | |
| 144 | send_emails_messages(obj[:emails], params[:mailing_system]) | |
| 145 | end | |
| 146 | if params[:mailing_system][:chat] == '1' | |
| 147 | send_chats_messages(obj[:chats], params[:mailing_system]) | |
| 148 | end | |
| 149 | end | |
| 150 | ||
| 151 | # Теперь перепишем case | |
| 152 | ||
| 153 | send_delivery(@from_user.complect_delivery, params) |