bulutfon_dashboard 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +66 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.eot +0 -0
  6. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.svg +164 -0
  7. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.ttf +0 -0
  8. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.woff +0 -0
  9. data/app/assets/images/bulutfon_dashboard/screenshot-step-1.png +0 -0
  10. data/app/assets/images/bulutfon_dashboard/screenshot-step-2.png +0 -0
  11. data/app/assets/images/bulutfon_dashboard/screenshot-step-3.png +0 -0
  12. data/app/assets/javascripts/bulutfon_dashboard/application.js +13 -0
  13. data/app/assets/javascripts/bulutfon_dashboard/audiojs/audiojs-player-graphics.gif +0 -0
  14. data/app/assets/javascripts/bulutfon_dashboard/audiojs/audiojs.js.erb +695 -0
  15. data/app/assets/javascripts/bulutfon_dashboard/audiojs/audiojs.swf +0 -0
  16. data/app/assets/javascripts/bulutfon_dashboard/cdrs.js +19 -0
  17. data/app/assets/stylesheets/bulutfon_dashboard/application.css +15 -0
  18. data/app/assets/stylesheets/bulutfon_dashboard/bulutfon-fonts.css.sass +114 -0
  19. data/app/controllers/bulutfon_dashboard/application_controller.rb +28 -0
  20. data/app/controllers/bulutfon_dashboard/base_controller.rb +4 -0
  21. data/app/controllers/bulutfon_dashboard/bulutfon_users_controller.rb +59 -0
  22. data/app/controllers/bulutfon_dashboard/cdrs_controller.rb +27 -0
  23. data/app/controllers/bulutfon_dashboard/dashboards_controller.rb +15 -0
  24. data/app/helpers/bulutfon_dashboard/application_helper.rb +4 -0
  25. data/app/helpers/bulutfon_dashboard/cdrs_helper.rb +145 -0
  26. data/app/models/bulutfon_dashboard/api_user.rb +19 -0
  27. data/app/models/bulutfon_dashboard/bulutfon_user.rb +21 -0
  28. data/app/models/bulutfon_dashboard/cdr.rb +54 -0
  29. data/app/views/bulutfon_dashboard/bulutfon_users/_form.html.haml +24 -0
  30. data/app/views/bulutfon_dashboard/bulutfon_users/edit.html.haml +3 -0
  31. data/app/views/bulutfon_dashboard/bulutfon_users/new.html.haml +3 -0
  32. data/app/views/bulutfon_dashboard/bulutfon_users/show.html.haml +93 -0
  33. data/app/views/bulutfon_dashboard/cdrs/_blank.html.haml +14 -0
  34. data/app/views/bulutfon_dashboard/cdrs/_cdr.html.haml +12 -0
  35. data/app/views/bulutfon_dashboard/cdrs/_list.html.haml +24 -0
  36. data/app/views/bulutfon_dashboard/cdrs/index.html.haml +5 -0
  37. data/app/views/bulutfon_dashboard/cdrs/show.html.haml +82 -0
  38. data/app/views/bulutfon_dashboard/dashboards/index.html.haml +53 -0
  39. data/app/views/layouts/bulutfon_dashboard/application.html.erb +14 -0
  40. data/config/initializers/simple_form.rb +165 -0
  41. data/config/initializers/simple_form_bootstrap.rb +149 -0
  42. data/config/locales/models.tr.yml +201 -0
  43. data/config/locales/simple_form.en.yml +31 -0
  44. data/config/routes.rb +5 -0
  45. data/lib/bulutfon_dashboard.rb +5 -0
  46. data/lib/bulutfon_dashboard/engine.rb +6 -0
  47. data/lib/bulutfon_dashboard/version.rb +3 -0
  48. data/lib/generators/bulutfon_dashboard/assets_generator.rb +57 -0
  49. data/lib/generators/bulutfon_dashboard/controllers_generator.rb +24 -0
  50. data/lib/generators/bulutfon_dashboard/helpers_generator.rb +24 -0
  51. data/lib/generators/bulutfon_dashboard/initializers_generator.rb +14 -0
  52. data/lib/generators/bulutfon_dashboard/install/install_generator.rb +17 -0
  53. data/lib/generators/bulutfon_dashboard/migrations_generator.rb +24 -0
  54. data/lib/generators/bulutfon_dashboard/views_generator.rb +55 -0
  55. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.eot +0 -0
  56. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.svg +164 -0
  57. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.ttf +0 -0
  58. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.woff +0 -0
  59. data/lib/generators/templates/assets/stylesheets/bulutfon-fonts.css.sass +114 -0
  60. data/lib/generators/templates/controllers/base_controller.rb +9 -0
  61. data/lib/generators/templates/helpers/application_helper.rb +5 -0
  62. data/lib/generators/templates/initializers/bulutfon_dashboard.rb +2 -0
  63. data/lib/generators/templates/migrations/create_bulutfon_dashboard_bulutfon_users.rb +14 -0
  64. data/lib/tasks/bulutfon_dashboard_tasks.rake +4 -0
  65. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  66. data/test/bulutfon_dashboard_test.rb +7 -0
  67. data/test/controllers/bulutfon_dashboard/bulutfon_users_controller_test.rb +13 -0
  68. data/test/controllers/bulutfon_dashboard/cdrs_controller_test.rb +13 -0
  69. data/test/controllers/bulutfon_dashboard/dashboards_controller_test.rb +13 -0
  70. data/test/dummy/README.rdoc +28 -0
  71. data/test/dummy/Rakefile +6 -0
  72. data/test/dummy/app/assets/javascripts/application.js +13 -0
  73. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  74. data/test/dummy/app/controllers/application_controller.rb +5 -0
  75. data/test/dummy/app/helpers/application_helper.rb +2 -0
  76. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  77. data/test/dummy/bin/bundle +3 -0
  78. data/test/dummy/bin/rails +4 -0
  79. data/test/dummy/bin/rake +4 -0
  80. data/test/dummy/bin/setup +29 -0
  81. data/test/dummy/config.ru +4 -0
  82. data/test/dummy/config/application.rb +26 -0
  83. data/test/dummy/config/boot.rb +5 -0
  84. data/test/dummy/config/database.yml +25 -0
  85. data/test/dummy/config/environment.rb +5 -0
  86. data/test/dummy/config/environments/development.rb +41 -0
  87. data/test/dummy/config/environments/production.rb +79 -0
  88. data/test/dummy/config/environments/test.rb +42 -0
  89. data/test/dummy/config/initializers/assets.rb +11 -0
  90. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  91. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  92. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  93. data/test/dummy/config/initializers/inflections.rb +16 -0
  94. data/test/dummy/config/initializers/mime_types.rb +4 -0
  95. data/test/dummy/config/initializers/session_store.rb +3 -0
  96. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  97. data/test/dummy/config/locales/en.yml +23 -0
  98. data/test/dummy/config/routes.rb +4 -0
  99. data/test/dummy/config/secrets.yml +22 -0
  100. data/test/dummy/public/404.html +67 -0
  101. data/test/dummy/public/422.html +67 -0
  102. data/test/dummy/public/500.html +66 -0
  103. data/test/dummy/public/favicon.ico +0 -0
  104. data/test/fixtures/bulutfon_dashboard/bulutfon_users.yml +11 -0
  105. data/test/integration/navigation_test.rb +8 -0
  106. data/test/models/bulutfon_dashboard/bulutfon_user_test.rb +9 -0
  107. data/test/test_helper.rb +21 -0
  108. metadata +221 -0
@@ -0,0 +1,19 @@
1
+ module BulutfonDashboard
2
+ class ApiUser
3
+ include ActiveModel::Validations
4
+ include ActiveModel::Conversion
5
+ extend ActiveModel::Naming
6
+
7
+ cattr_accessor :user, :pbx, :credit
8
+
9
+ def initialize(attributes = {})
10
+ attributes.each do |name, value|
11
+ send("#{name}=", value)
12
+ end
13
+ end
14
+
15
+ def persisted?
16
+ false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module BulutfonDashboard
2
+ class BulutfonUser < ActiveRecord::Base
3
+ belongs_to :user, class_name: BulutfonDashboard.user_class.to_s
4
+ validates_presence_of :user_id, :api_token
5
+ validate :check_api_token_is_valid
6
+
7
+ private
8
+
9
+ def check_api_token_is_valid
10
+ if self.api_token.present?
11
+ begin
12
+ bulutfon = BulutfonSDK::REST::Bulutfon.new(self.api_token)
13
+ bulutfon.details
14
+ rescue BulutfonSDK::REST::RequestError
15
+ self.errors.add(:api_token)
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ module BulutfonDashboard
2
+ class Cdr
3
+ include ActiveModel::Validations
4
+ include ActiveModel::Conversion
5
+ extend ActiveModel::Naming
6
+
7
+ cattr_accessor :uuid, :bf_calltype, :direction, :caller, :callee, :extension, :call_price, :call_time, :answer_time, :hangup_time, :call_record, :hangup_cause, :hangup_state, :call_flow, :caller_id_number, :destination_number, :sip_hangup_disposition
8
+
9
+ def initialize(attributes = {})
10
+ attributes.each do |name, value|
11
+ send("#{name}=", value)
12
+ end
13
+ end
14
+
15
+ def persisted?
16
+ false
17
+ end
18
+
19
+ def direction_in?
20
+ direction == 'IN'
21
+ end
22
+
23
+ def direction_out?
24
+ direction == 'OUT'
25
+ end
26
+
27
+ def hangup_cause_i18n
28
+ I18n.t("enumerates.hangup_cause.#{hangup_cause.upcase}")
29
+ end
30
+
31
+ def sip_hangup_disposition_hover_i18n
32
+ I18n.t("enumerates.sip_hangup_disposition_hover.#{disposition_state}")
33
+ end
34
+
35
+ def sip_hangup_disposition_i18n
36
+ I18n.t("enumerates.sip_hangup_disposition.#{disposition_state}")
37
+ end
38
+
39
+ def calculate_call_price
40
+ call_price.present? ? call_price.to_f * 100 : 0.00
41
+ end
42
+
43
+ def call_record_exists?
44
+ call_record == 'YES'
45
+ end
46
+
47
+ private
48
+
49
+ def disposition_state
50
+ hangup_state.present? ? hangup_state : 'blank'
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,24 @@
1
+ .panel.panel-default
2
+ .panel-heading
3
+ %i.icon-edit.icon-large
4
+ = yield :form_title
5
+ .panel-body
6
+ = simple_form_for(@resource, url: BulutfonDashboard::Engine.routes.url_helpers.bulutfon_users_path) do |f|
7
+ = f.error_notification
8
+
9
+ .alert.alert-info
10
+ Bulutfon kullanıcı panelinizden
11
+ %strong Uygulamalar > API uygulamaları
12
+ menüsünden
13
+ %strong Tekil Api Anahtarınız'a
14
+ erişebilirsiniz.
15
+ %br/
16
+ Ayrıca API Anahtarını alacağınız sayfanıza erişmek için bu
17
+ = link_to 'https://app.bulutfon.com/oauth/applications', 'https://app.bulutfon.com/oauth/applications', target: :_blank
18
+ linki kullanabilirsiniz.
19
+ .form-inputs
20
+ = f.input :api_token
21
+ .form-actions
22
+ = link_to t('view.cancel'), bulutfon_users_path, class: 'btn'
23
+ - text = @resource.id.present? ? t('view.update_api_token') : t('view.save_api_token')
24
+ = f.button :submit, text, class: 'btn btn-primary'
@@ -0,0 +1,3 @@
1
+ - content_for :form_title do
2
+ = t('tt.edit', resource_name: BulutfonDashboard::BulutfonUser.model_name.human)
3
+ = render 'form'
@@ -0,0 +1,3 @@
1
+ - content_for :form_title do
2
+ = t('tt.new', resource_name: BulutfonDashboard::BulutfonUser.model_name.human)
3
+ = render 'form'
@@ -0,0 +1,93 @@
1
+ :css
2
+ .account .info{
3
+ min-height: 110px;
4
+ }
5
+ #contentTab .nav-pills > li > a {
6
+ border-radius: 4px 4px 0 0 ;
7
+ }
8
+ #contentTab .tab-content {
9
+ border: 1px solid #ddd;
10
+ padding : 5px 15px;
11
+ }
12
+ .panel.panel-default.grid
13
+ .panel-heading
14
+ %i.fa.fa-table.icon-large
15
+ = t('tt.show', resource_name: BulutfonDashboard::BulutfonUser.model_name.human)
16
+ .panel-body
17
+ - if @resource.present?
18
+ = show_for @resource do |s|
19
+ = s.attribute :api_token
20
+ %hr/
21
+ .pull-right
22
+ = link_to edit_bulutfon_users_path, class: 'btn btn-primary' do
23
+ %i.icon-edit
24
+ = t('view.edit_api_token')
25
+ = link_to bulutfon_users_path, method: :delete, class: 'btn btn-danger' do
26
+ %i.icon-trash
27
+ = t('view.destroy_api_token')
28
+ - else
29
+ .alert.alert-warning
30
+ %p
31
+ %h5.center
32
+ %i.fa.fa-info-circle.fa-lg
33
+ Bulutfon entegrasyonunuz henüz tamamlanmamıştır. Entegrasyonu tamamlayabilmek için Bulutfon API Anahtarınızı eklemeniz gerekmektedir. Lütfen aşağıdaki seçenekler üzerinden entegrasyonunuzu tamamlayınız.
34
+ .row.account
35
+ .col-lg-6
36
+ .well
37
+ %h4.text-center
38
+ Bulutfon Hesabım Var
39
+ %p.info
40
+ Eğer Bulutfon üyesi iseniz aşağıdaki butona tıklayarak Bulutfon Hesabınıza giriş yapınız ve kullanıcı panelinizden
41
+ %strong Uygulamalar > API uygulamaları
42
+ menüsünden
43
+ %strong Tekil Api Anahtarınızı
44
+ aşağıdaki ekran görüntülerinde gösterildiği şekilde kopyalayıp API Anahtarını Ekle ve Entegrasyonu Tamamla butonuna tıklayıp gelen sayfadan API Anahtarınızı ekleyiniz.
45
+ .actions
46
+ .text-center
47
+ = link_to 'https://app.bulutfon.com/oauth/applications', target: '_blank', class: 'btn btn-block btn-primary' do
48
+ Bulutfon Hesabına Giriş Yap
49
+ .col-lg-6
50
+ .well
51
+ %h4.text-center
52
+ Bulutfon Hesabım Yok
53
+ %p.info
54
+ Eğer bulutfon üyesi değilseniz aşağıdaki butona tıklayarak Bulutfon üyeliğinizi başlatıp yan taraftaki yönergeleri izleyiniz.
55
+ .actions
56
+ .text-center
57
+ = link_to 'https://app.bulutfon.com/accounts/new', target: '_blank', class: 'btn btn-block btn-primary' do
58
+ Bulutfon Hesabı Oluştur
59
+ .row
60
+ .col-md-6.col-md-offset-3
61
+ .text-center
62
+ = link_to new_bulutfon_users_path, class: 'btn btn-lg btn-block btn-success' do
63
+ %i.fa.fa-plus
64
+ API Anahtarını Ekle ve Entegrasyonu Tamamla
65
+ %br/
66
+ %br/
67
+ %br/
68
+ .row
69
+ .col-lg-12
70
+ #contentTab
71
+ %ul.nav.nav-pills
72
+ %li.active
73
+ %a{'data-toggle' => 'pill', href: '#step1'}
74
+ 1. Adım: Uygulamalar > API uygulamaları Menüsü
75
+ %li
76
+ %a{'data-toggle' => 'pill', href: '#step2'}
77
+ 2. Adım: Tekil API Anahtarının Alınması
78
+ %li
79
+ %a{'data-toggle' => 'pill', href: '#step3'}
80
+ 3. Adım: API Anahtarının Eklenmesi
81
+ .tab-content
82
+ #step1.tab-pane.fade.in.active
83
+ %h3 Uygulamalar > API uygulamaları Menüsü
84
+ %p
85
+ = image_tag 'bulutfon_dashboard/screenshot-step-1.png', class: 'img-responsive'
86
+ #step2.tab-pane.fade
87
+ %h3 Tekil API Anahtarının Alınması
88
+ %p
89
+ = image_tag 'bulutfon_dashboard/screenshot-step-2.png', class: 'img-responsive'
90
+ #step3.tab-pane.fade
91
+ %h3 API Anahtarının Eklenmesi
92
+ %p
93
+ = image_tag 'bulutfon_dashboard/screenshot-step-3.png', class: 'img-responsive'
@@ -0,0 +1,14 @@
1
+ - if params[:q].present?
2
+ = render 'list'
3
+ - else
4
+ .panel-heading
5
+ %i.fa.fa-table.icon-large
6
+ = t('tt.index', resource_name: 'Cdr')
7
+ .panel-tools
8
+ .btn-group
9
+ %a.btn{href: cdrs_path, data: {toggle: 'toolbar-tooltip'}, title: t('view.reload')}
10
+ %i.fa.fa-refresh
11
+ .badge= @cdrs.count
12
+ .panel-body
13
+ .alert.alert-warning
14
+ %p= t('activerecord.attributes.cdr.blank')
@@ -0,0 +1,12 @@
1
+ %tr
2
+ %td= cdr.caller
3
+ %td= cdr.callee
4
+ %td= direction_icon cdr.direction
5
+ %td= call_type_icon cdr.bf_calltype
6
+ %td= cdr.call_time.present? ? l(cdr.call_time.to_datetime) : ''
7
+ %td= cdr.answer_time.present? ? l(cdr.answer_time.to_datetime) : ''
8
+ %td= cdr.hangup_time.present? ? l(cdr.hangup_time.to_datetime) : ''
9
+ %td= cdr.call_record_exists? ? t('simple_form.yes') : t('simple_form.no')
10
+ %td.action
11
+ = link_to(cdr_path(cdr.uuid), class: 'btn btn-success', toogle: 'tooltip', title: t('tooltips.zoom') ) do
12
+ %i.icon-eye-open
@@ -0,0 +1,24 @@
1
+ = stylesheet_link_tag 'bulutfon_dashboard/bulutfon-fonts'
2
+ .panel-heading
3
+ %i.icon-table.icon-large
4
+ = t('tt.index', resource_name: t('activerecord.models.cdr'))
5
+ .panel-tools
6
+ .btn-group
7
+ %a.btn{href: cdrs_path, data: {toggle: 'toolbar-tooltip'}, title: t('view.reload')}
8
+ %i.icon-refresh
9
+ .badge= @cdrs.count
10
+ %table.table
11
+ %thead
12
+ %tr
13
+ %td= t('activerecord.attributes.cdr.caller')
14
+ %td= t('activerecord.attributes.cdr.callee')
15
+ %td= t('activerecord.attributes.cdr.direction')
16
+ %td= t('activerecord.attributes.cdr.call_type')
17
+ %td= t('activerecord.attributes.cdr.start_time')
18
+ %td= t('activerecord.attributes.cdr.answer_time')
19
+ %td= t('activerecord.attributes.cdr.hangup_time')
20
+ %td= t('activerecord.attributes.cdr.call_record_exists?')
21
+ %th.actions
22
+ = t('view.actions')
23
+ %tbody
24
+ = render partial: 'bulutfon_dashboard/cdrs/cdr', collection: @cdrs
@@ -0,0 +1,5 @@
1
+ .panel.panel-default.grid
2
+ = blankable(@cdrs)
3
+ .panel-footer
4
+ .pagination.pagination-sm
5
+ = pagination(@pagination.total_pages, @pagination.page)
@@ -0,0 +1,82 @@
1
+ = stylesheet_link_tag 'bulutfon_dashboard/bulutfon-fonts'
2
+ = javascript_include_tag 'bulutfon_dashboard/application'
3
+ - content_for :toolbar do
4
+ = link_to cdrs_path, class: 'btn btn-default' do
5
+ %i.fa.fa-arrow-left
6
+ = t('generic.back_to_list')
7
+ .panel.panel-default
8
+ .panel-heading
9
+ %i.fa.fa-pencil.fa-lg
10
+ = t('tt.show', resource_name: t('activerecord.models.cdr'))
11
+ .panel-body
12
+ = show_for @cdr do |s|
13
+ .row-fluid
14
+ .col-md-2
15
+ %h3= t('activerecord.attributes.cdr.domain')
16
+ = s.attribute :direction, label: t('activerecord.attributes.cdr.direction') do
17
+ = direction_icon @cdr.direction unless @cdr.direction.nil?
18
+ .col-md-2
19
+ %h3= t('activerecord.attributes.cdr.numbers')
20
+ = s.attribute :caller, label: t('activerecord.attributes.cdr.caller_id_name')
21
+ - if @cdr.direction_in?
22
+ = s.attribute :caller_id_number, label: t('activerecord.attributes.cdr.caller_id_number')
23
+ - else
24
+ = s.attribute :caller_id_number, label: t('activerecord.attributes.cdr.caller_id_number') do
25
+ = "#{@cdr.caller} - #{@cdr.extension}"
26
+ .col-md-2
27
+ %h3= t('activerecord.attributes.cdr.states')
28
+ = s.attribute :hangup_cause, label: t('activerecord.attributes.cdr.hangup_cause') do
29
+ = @cdr.hangup_cause_i18n
30
+ = s.attribute :sip_hangup_disposition, label: t('activerecord.attributes.cdr.hangup_disposition') do
31
+ %span{toggle: :tooltip, title: @cdr.sip_hangup_disposition_hover_i18n }
32
+ = @cdr.sip_hangup_disposition_i18n
33
+ .col-md-2
34
+ %h3= t('activerecord.attributes.cdr.times')
35
+ = s.attribute :call_time, label: t('activerecord.attributes.cdr.start_time') do
36
+ = l @cdr.call_time.to_datetime, format: :cdr if @cdr.call_time.present?
37
+ = s.attribute :answer_time, label: t('activerecord.attributes.cdr.answer_time') do
38
+ = l @cdr.answer_time.to_datetime, format: :cdr if @cdr.answer_time.present?
39
+ = s.attribute :hangup_time, label: t('activerecord.attributes.cdr.hangup_time') do
40
+ = l @cdr.hangup_time.to_datetime, format: :cdr if @cdr.hangup_time.present?
41
+
42
+ .col-md-4
43
+ %h3= t('activerecord.attributes.cdr.datas')
44
+ = s.attribute :uuid, label: t('activerecord.attributes.cdr.uuid')
45
+ - if @cdr.direction_out?
46
+ = s.attribute :nibble_total_billed, label: t('activerecord.attributes.cdr.nibble_total_billed') do
47
+ = sanitize_price(@cdr.calculate_call_price, 'Kuruş')
48
+
49
+ - if @cdr.call_record_exists?
50
+ .panel.panel-default.grid
51
+ .panel-heading
52
+ %i.fa.fa-music.fa-lg
53
+ = t('activerecord.attributes.cdr.voice_record')
54
+ .panel-body
55
+ %table.table-centered.vertical-center
56
+ %tr
57
+ %td= audio_tag @bulutfon.call_records.get_stream(@cdr.uuid, true).to_obj.download_path, type: 'audio/ogg', preload: 'none'
58
+ %td
59
+ = link_to @bulutfon.call_records.get(@cdr.uuid, true).to_obj.download_path, class: 'btn btn-info' do
60
+ %i.fa.fa-download
61
+ = t('generic.download')
62
+
63
+ - if @cdr.direction_in?
64
+ .panel.panel-default.grid
65
+ .panel-heading
66
+ %i.fa.fa-list.fa-lg
67
+ = t('activerecord.attributes.cdr.callflow')
68
+
69
+ %table.table.table-condensed
70
+ %thead
71
+ %th= t('activerecord.attributes.cdr.callee')
72
+ %th= t('activerecord.attributes.cdr.start_time')
73
+ %th= t('activerecord.attributes.cdr.answer_time')
74
+ %th= t('activerecord.attributes.cdr.hangup_time')
75
+
76
+ - flow = @cdr.call_flow.reverse
77
+ - flow.each_with_index do |callflow, idx|
78
+ %tr
79
+ %td= callflow['callee']
80
+ %td= l callflow['start_time'].try(:to_datetime), format: :cdr if callflow['start_time'].present?
81
+ %td= l callflow['answer_time'].try(:to_datetime), format: :cdr if callflow['answer_time'].present?
82
+ %td= l callflow['hangup_time'].try(:to_datetime), format: :cdr if callflow['hangup_time'].present?
@@ -0,0 +1,53 @@
1
+ = stylesheet_link_tag 'bulutfon_dashboard/bulutfon-fonts'
2
+
3
+ .panel.panel-default.grid
4
+ .panel-heading
5
+ %i.fa.fa-user.fa-lg
6
+ = t('tt.show', resource_name: t('activerecord.models.bulutfon_dashboard/bulutfon_user'))
7
+ .panel-body
8
+ = show_for @user do |s|
9
+ .row-fluid
10
+ .col-lg-4
11
+ = s.attribute :name, label: t('activerecord.attributes.dashboard.name_surname') do
12
+ = @user.user['name']
13
+ = s.attribute :pbx_name, label: t('activerecord.attributes.dashboard.pbx_name') do
14
+ = t("enumerates.domain_state.#{@user.pbx['name']}")
15
+ .col-lg-4
16
+ = s.attribute :balance, label: t('activerecord.attributes.dashboard.balance') do
17
+ = number_to_currency @user.credit['balance']
18
+ = s.attribute :sms_credit, label: t('activerecord.attributes.dashboard.sms_credit') do
19
+ = @user.credit['sms_credit']
20
+ .col-lg-4.text-center
21
+ = link_to t('view.urls.cdrs'), cdrs_path, class: 'btn btn-block btn-primary'
22
+ %hr/
23
+ = link_to t('view.urls.bulutfon_entegration'), bulutfon_users_path, class: 'btn btn-block btn-primary'
24
+
25
+ .panel.panel-default.grid
26
+ .panel-heading
27
+ %i.icon-table.icon-large
28
+ = t('tt.index', resource_name: t('view.last_cdrs', number: @content_count))
29
+ .panel-tools
30
+ .btn-group
31
+ %a.btn{href: root_path, data: {toggle: 'toolbar-tooltip'}, title: t('view.reload')}
32
+ %i.icon-refresh
33
+ .badge= @cdrs.count
34
+ - if @cdrs.size == 0
35
+ .panel-body
36
+ .alert.alert-warning
37
+ %p= t('activerecord.attributes.cdr.blank')
38
+ - else
39
+ %table.table
40
+ %thead
41
+ %tr
42
+ %td= t('activerecord.attributes.cdr.caller')
43
+ %td= t('activerecord.attributes.cdr.callee')
44
+ %td= t('activerecord.attributes.cdr.direction')
45
+ %td= t('activerecord.attributes.cdr.call_type')
46
+ %td= t('activerecord.attributes.cdr.start_time')
47
+ %td= t('activerecord.attributes.cdr.answer_time')
48
+ %td= t('activerecord.attributes.cdr.hangup_time')
49
+ %td= t('activerecord.attributes.cdr.call_record_exists?')
50
+ %th.actions
51
+ = t('view.actions')
52
+ %tbody
53
+ = render partial: 'bulutfon_dashboard/cdrs/cdr', collection: @cdrs
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>BulutfonDashboard</title>
5
+ <%= stylesheet_link_tag 'bulutfon_dashboard/application', media: 'all' %>
6
+ <%= javascript_include_tag 'bulutfon_dashboard/application' %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>