From 722a1f7045f6da43cbaca6aacdc60677abe2fa04 Mon Sep 17 00:00:00 2001 From: Shamir Khodzha Date: Mon, 14 Oct 2013 22:46:25 +0400 Subject: [PATCH 1/4] =?UTF-8?q?=D0=BE=D1=82=D0=BC=D0=B5=D1=82=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D1=81=20207=20=D0=B2=20sms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/user.rb | 5 ++++- app/mailers/user_mailer.rb | 4 ++++ app/models/user.rb | 6 ++++++ app/services/sms_mass_sender.rb | 5 ++++- app/services/sms_service.rb | 6 ++++-- app/views/user_apps/new_group_sms.html.haml | 8 ++++---- app/views/user_mailer/sms_results.html.haml | 2 ++ config/locales/ru.yml | 1 + db/migrate/20131014160456_add_wrong_phone_to_users.rb | 5 +++++ db/schema.rb | 5 +++-- spec/factories/users.rb | 1 + spec/models/user_spec.rb | 8 ++++++++ spec/services/sms_service_spec.rb | 6 ++++++ 13 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 app/views/user_mailer/sms_results.html.haml create mode 100644 db/migrate/20131014160456_add_wrong_phone_to_users.rb diff --git a/app/admin/user.rb b/app/admin/user.rb index 70a4315..0ea07d1 100644 --- a/app/admin/user.rb +++ b/app/admin/user.rb @@ -103,7 +103,9 @@ column :adm_region, :sortable => :adm_region_id column :region, :sortable => :region_id column :full_name - column :phone + column :phone do |user| + %Q(#{user.phone}).html_safe + end column :email column :uic, :sortable => 'user_apps.uic' @@ -131,6 +133,7 @@ filter :user_app_uic_matcher, as: :string, label: '№ УИК' filter :full_name filter :phone + filter :wrong_phone filter :email filter :user_app_created_at, as: :date_range, label: 'Дата подачи заявки' filter :created_at, label: 'Дата создания' diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index b4ae3ef..b19a06e 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -7,4 +7,8 @@ def group_email(emails, subject, body) mail(to: emails, subject: subject, body: body) end + def sms_results email, failed + @failed = failed + mail(to: email, subject: 'Failed sms messages') + end end diff --git a/app/models/user.rb b/app/models/user.rb index f8530eb..2a678b8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -39,6 +39,7 @@ def email_required?; false end after_create :send_sms_with_password, :if => :may_login? before_save :reset_role_cache + before_save :reset_wrong_phone, if: lambda{|user| user.changes['phone'].present? } accepts_nested_attributes_for :user_current_roles, allow_destroy: true @@ -211,6 +212,11 @@ def reset_role_cache @has_role_cache = {} end + def reset_wrong_phone + self.wrong_phone = false + true + end + def mark_user_app_state if user_app.present? user_app.approve! unless user_app.approved? diff --git a/app/services/sms_mass_sender.rb b/app/services/sms_mass_sender.rb index 548fea1..7d80d98 100644 --- a/app/services/sms_mass_sender.rb +++ b/app/services/sms_mass_sender.rb @@ -25,6 +25,9 @@ def self.perform(*args) results[phone] = SmsService.send_message(phone, message) end - WorkLog.find_by(id: params['work_log_id']).try(:complete!, results.to_json) + log = WorkLog.find_by id: params['work_log_id'] + log.try :complete!, results.to_json + failed = results.count{|k,v| v == SmsService::ERRORS['207'] || v == '207'} + UserMailer.sms_results(log.user.email, failed).deliver if log end end diff --git a/app/services/sms_service.rb b/app/services/sms_service.rb index eaef279..c99bf60 100644 --- a/app/services/sms_service.rb +++ b/app/services/sms_service.rb @@ -45,6 +45,7 @@ class SmsService def self.send_message(number, text) result = provider.send to: number, from: AppConfig['smsru_from'], text: text + User.find_by_phone(number).try :update_attributes, wrong_phone: (result == '207') ERRORS[result] || result end @@ -55,9 +56,10 @@ def self.send_message_with_worklog(number, text, worklog_text = nil) :params => options.to_json #Resque.enqueue(SmsMassSender, options.merge(work_log_id: worklog.id)) results = {} - results[number] = provider.send to: number, from: AppConfig['smsru_from'], text: text + results[number] = send_message number, text + worklog.try(:complete!, results.to_json) - ERRORS[results[number]] || results[number] + results[number] end def self.provider diff --git a/app/views/user_apps/new_group_sms.html.haml b/app/views/user_apps/new_group_sms.html.haml index b0ef0ad..c9be1e5 100644 --- a/app/views/user_apps/new_group_sms.html.haml +++ b/app/views/user_apps/new_group_sms.html.haml @@ -1,4 +1,4 @@ -- phones = @users.pluck(:phone) +- phones = @users.pluck(:phone, :wrong_phone) - count = phones.count - display_limit = 200 .row @@ -7,13 +7,13 @@ СМС будет направлено #{count} получателям -if count > display_limit (отображаются первые #{display_limit} из них) - - phones[0..display_limit-1].each do |phone| - = phone + - phones[0..display_limit-1].each do |phone, wrong| + %span{style: "color: #{wrong ? 'red' : ''}" }= phone .span9 %legend Содержимое смс = form_for :group_sms, url: :send_group_sms, html: {class: 'form-horizontal'} do |f| - - phones.each do |phone| + - phones.each do |phone, wrong| = f.hidden_field :phones, :multiple => true, :value => phone .control-group = f.label 'Сообщение', class: 'control-label' diff --git a/app/views/user_mailer/sms_results.html.haml b/app/views/user_mailer/sms_results.html.haml new file mode 100644 index 0000000..cc2a77a --- /dev/null +++ b/app/views/user_mailer/sms_results.html.haml @@ -0,0 +1,2 @@ += "Не было отправлено из-за ошибки 207 #{@failed} смс" += link_to "Результаты", control_users_url( q: { wrong_phone_eq: 1} ) \ No newline at end of file diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b3a542f..cab7b67 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -397,6 +397,7 @@ ru: password: Пароль password_confirmation: Подтверждение пароля phone: Телефон + wrong_phone: Неверный телефон region: "Район" adm_region: "Адм. округ" created_at: Создано diff --git a/db/migrate/20131014160456_add_wrong_phone_to_users.rb b/db/migrate/20131014160456_add_wrong_phone_to_users.rb new file mode 100644 index 0000000..b7f78b2 --- /dev/null +++ b/db/migrate/20131014160456_add_wrong_phone_to_users.rb @@ -0,0 +1,5 @@ +class AddWrongPhoneToUsers < ActiveRecord::Migration + def change + add_column :users, :wrong_phone, :boolean, null: false, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index df2ab90..1bc3f5c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20130907221736) do +ActiveRecord::Schema.define(version: 20131014160456) do create_table "active_admin_comments", force: true do |t| t.string "namespace" @@ -263,7 +263,7 @@ create_table "users", force: true do |t| t.string "email" - t.string "encrypted_password", default: "", null: false + t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" @@ -291,6 +291,7 @@ t.text "address" t.string "full_name", limit: 767 t.string "unique_session_id", limit: 20 + t.boolean "wrong_phone", default: false, null: false end add_index "users", ["adm_region_id"], name: "index_users_on_adm_region_id", using: :btree diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 973e675..bb15db2 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -7,6 +7,7 @@ email {generate :email} password 'password' phone { generate :phone} + wrong_phone false factory :user_with_role do ignore do diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index c0d1830..5ff0cb2 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -116,5 +116,13 @@ end + it 'resets wrong_phone on phone change' do + user = create :user + user.update_attribute :wrong_phone, true + user.phone = user.phone.succ + user.save + user.wrong_phone.should == false + end + end diff --git a/spec/services/sms_service_spec.rb b/spec/services/sms_service_spec.rb index d3510a2..9ef3d3a 100644 --- a/spec/services/sms_service_spec.rb +++ b/spec/services/sms_service_spec.rb @@ -16,4 +16,10 @@ @provider.should_receive(:send).with(to: '555666', from: '79037701262', text: 'Hello').and_return('204') expect(SmsService.send_message('555666', 'Hello')).to eq(SmsService::ERRORS['204']) end + + it 'sets user wrong_phone to true if service returned 207' do + user = create :user + @provider.should_receive(:send).with(to: user.phone, from: '79037701262', text: 'Hello').and_return('207') + expect{ SmsService.send_message(user.phone, 'Hello') }.to change{ user.reload.wrong_phone }.from(false).to(true) + end end From 3cb3f962d3120a151c4f5d56e5b1983c8857878d Mon Sep 17 00:00:00 2001 From: Shamir Khodzha Date: Mon, 14 Oct 2013 23:02:48 +0400 Subject: [PATCH 2/4] =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=D0=B7=20=D0=BE?= =?UTF-8?q?=D1=82=20=D0=BB=D1=8F=D0=BC=D0=B1=D0=B4=D1=8B=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 2a678b8..dfcd532 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -39,7 +39,7 @@ def email_required?; false end after_create :send_sms_with_password, :if => :may_login? before_save :reset_role_cache - before_save :reset_wrong_phone, if: lambda{|user| user.changes['phone'].present? } + before_save :reset_wrong_phone, if: :phone_changed? accepts_nested_attributes_for :user_current_roles, allow_destroy: true From 98e99ec10fda91b7532b4fc0e9df866144fe718a Mon Sep 17 00:00:00 2001 From: Shamir Khodzha Date: Mon, 14 Oct 2013 23:09:41 +0400 Subject: [PATCH 3/4] =?UTF-8?q?=D0=BE=D1=82=D1=81=D1=8B=D0=BB=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=B0=20=D0=BE=D0=B1=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B5=20sms=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/sms_mass_sender.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/sms_mass_sender.rb b/app/services/sms_mass_sender.rb index 7d80d98..06b0381 100644 --- a/app/services/sms_mass_sender.rb +++ b/app/services/sms_mass_sender.rb @@ -28,6 +28,6 @@ def self.perform(*args) log = WorkLog.find_by id: params['work_log_id'] log.try :complete!, results.to_json failed = results.count{|k,v| v == SmsService::ERRORS['207'] || v == '207'} - UserMailer.sms_results(log.user.email, failed).deliver if log + UserMailer.sms_results(log.user.email, failed).deliver if log && failed > 0 end end From 0de1ad3ebe813a5393a2d905d95acb4c5b02a8d9 Mon Sep 17 00:00:00 2001 From: Shamir Khodzha Date: Mon, 14 Oct 2013 23:12:08 +0400 Subject: [PATCH 4/4] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=20=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D1=8C=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/user_mailer/sms_results.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/user_mailer/sms_results.html.haml b/app/views/user_mailer/sms_results.html.haml index cc2a77a..2249423 100644 --- a/app/views/user_mailer/sms_results.html.haml +++ b/app/views/user_mailer/sms_results.html.haml @@ -1,2 +1,2 @@ -= "Не было отправлено из-за ошибки 207 #{@failed} смс" -= link_to "Результаты", control_users_url( q: { wrong_phone_eq: 1} ) \ No newline at end of file += "Не удалось доставить #{@failed} СМС из-за неправильного номера" += link_to "Результаты", control_users_url( q: { wrong_phone_eq: 1} )