smartkiosk-server 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. data/.gitignore +32 -0
  2. data/.rspec +1 -0
  3. data/Capfile +4 -0
  4. data/Gemfile +71 -0
  5. data/Gemfile.lock +439 -0
  6. data/Guardfile +25 -0
  7. data/LICENSE +287 -0
  8. data/README.md +13 -0
  9. data/Rakefile +5 -0
  10. data/app/acquirers/cards_mkb_acquirer.rb +87 -0
  11. data/app/acquirers/cash_acquirer.rb +22 -0
  12. data/app/admin/agents.rb +108 -0
  13. data/app/admin/collections.rb +62 -0
  14. data/app/admin/commissions.rb +87 -0
  15. data/app/admin/gateways.rb +183 -0
  16. data/app/admin/limits.rb +82 -0
  17. data/app/admin/payments.rb +246 -0
  18. data/app/admin/provider_groups.rb +60 -0
  19. data/app/admin/provider_profiles.rb +11 -0
  20. data/app/admin/provider_receipt_templates.rb +82 -0
  21. data/app/admin/providers.rb +201 -0
  22. data/app/admin/rebates.rb +83 -0
  23. data/app/admin/report_results.rb +66 -0
  24. data/app/admin/report_templates.rb +209 -0
  25. data/app/admin/reports.rb +158 -0
  26. data/app/admin/revisions.rb +120 -0
  27. data/app/admin/system_receipt_templates.rb +76 -0
  28. data/app/admin/terminal_builds.rb +39 -0
  29. data/app/admin/terminal_profiles.rb +123 -0
  30. data/app/admin/terminals.rb +388 -0
  31. data/app/admin/users.rb +117 -0
  32. data/app/admin/versions.rb +131 -0
  33. data/app/admin/welcome.rb +64 -0
  34. data/app/assets/fonts/PT_Sans-Web-Bold.eot +0 -0
  35. data/app/assets/fonts/PT_Sans-Web-Bold.svg +6386 -0
  36. data/app/assets/fonts/PT_Sans-Web-Bold.ttf +0 -0
  37. data/app/assets/fonts/PT_Sans-Web-Bold.woff +0 -0
  38. data/app/assets/fonts/PT_Sans-Web-Regular.eot +0 -0
  39. data/app/assets/fonts/PT_Sans-Web-Regular.svg +5650 -0
  40. data/app/assets/fonts/PT_Sans-Web-Regular.ttf +0 -0
  41. data/app/assets/fonts/PT_Sans-Web-Regular.woff +0 -0
  42. data/app/assets/images/chosen-sprite.png +0 -0
  43. data/app/assets/javascripts/active_admin/chosen.js.erb.coffee +12 -0
  44. data/app/assets/javascripts/active_admin/qtip.js.coffee +22 -0
  45. data/app/assets/javascripts/active_admin/sortable_forms.js.coffee +14 -0
  46. data/app/assets/javascripts/active_admin.js.coffee +9 -0
  47. data/app/assets/javascripts/application.js +15 -0
  48. data/app/assets/javascripts/report_templates.js.coffee +10 -0
  49. data/app/assets/javascripts/terminals.js.coffee +12 -0
  50. data/app/assets/stylesheets/active_admin/PIE.css.scss +18 -0
  51. data/app/assets/stylesheets/active_admin/filter_numeric_range.css.scss +14 -0
  52. data/app/assets/stylesheets/active_admin/selectable_check_boxes.css.scss +12 -0
  53. data/app/assets/stylesheets/active_admin/sortable_forms.css.scss +11 -0
  54. data/app/assets/stylesheets/active_admin.css.scss +705 -0
  55. data/app/assets/stylesheets/fonts.css.scss +14 -0
  56. data/app/assets/stylesheets/provider_groups.css.scss +12 -0
  57. data/app/assets/stylesheets/provider_receipt_templates.css.scss +12 -0
  58. data/app/assets/stylesheets/terminals.css.scss +9 -0
  59. data/app/controllers/application_controller.rb +12 -0
  60. data/app/controllers/collections_controller.rb +10 -0
  61. data/app/controllers/payments_controller.rb +73 -0
  62. data/app/controllers/system_receipt_templates_controller.rb +10 -0
  63. data/app/controllers/terminal_builds_controller.rb +5 -0
  64. data/app/controllers/terminal_orders_controller.rb +25 -0
  65. data/app/controllers/terminal_pings_controller.rb +45 -0
  66. data/app/controllers/welcome_controller.rb +5 -0
  67. data/app/helpers/active_admin/report_templates_helper.rb +56 -0
  68. data/app/helpers/active_admin/views_helper.rb +20 -0
  69. data/app/helpers/application_helper.rb +2 -0
  70. data/app/mailers/.gitkeep +0 -0
  71. data/app/models/.gitkeep +0 -0
  72. data/app/models/ability.rb +30 -0
  73. data/app/models/agent.rb +24 -0
  74. data/app/models/collection.rb +65 -0
  75. data/app/models/commission.rb +77 -0
  76. data/app/models/commission_section.rb +75 -0
  77. data/app/models/gateway.rb +99 -0
  78. data/app/models/gateway_attachment.rb +9 -0
  79. data/app/models/gateway_setting.rb +7 -0
  80. data/app/models/gateway_switch.rb +7 -0
  81. data/app/models/limit.rb +77 -0
  82. data/app/models/limit_section.rb +58 -0
  83. data/app/models/payment.rb +322 -0
  84. data/app/models/provider.rb +59 -0
  85. data/app/models/provider_field.rb +7 -0
  86. data/app/models/provider_gateway.rb +47 -0
  87. data/app/models/provider_group.rb +45 -0
  88. data/app/models/provider_profile.rb +9 -0
  89. data/app/models/provider_rebate.rb +69 -0
  90. data/app/models/provider_receipt_template.rb +85 -0
  91. data/app/models/rebate.rb +84 -0
  92. data/app/models/report.rb +71 -0
  93. data/app/models/report_result.rb +11 -0
  94. data/app/models/report_template.rb +56 -0
  95. data/app/models/revision.rb +104 -0
  96. data/app/models/role.rb +48 -0
  97. data/app/models/system_receipt_template.rb +13 -0
  98. data/app/models/terminal.rb +126 -0
  99. data/app/models/terminal_build.rb +62 -0
  100. data/app/models/terminal_order.rb +42 -0
  101. data/app/models/terminal_ping.rb +120 -0
  102. data/app/models/terminal_profile.rb +51 -0
  103. data/app/models/terminal_profile_promotion.rb +18 -0
  104. data/app/models/terminal_profile_provider.rb +11 -0
  105. data/app/models/terminal_profile_provider_group.rb +19 -0
  106. data/app/models/user.rb +38 -0
  107. data/app/models/user_role.rb +45 -0
  108. data/app/reports/agents_report.rb +81 -0
  109. data/app/reports/collections_report.rb +151 -0
  110. data/app/reports/payments_report.rb +189 -0
  111. data/app/reports/terminals_report.rb +123 -0
  112. data/app/uploaders/file_uploader.rb +53 -0
  113. data/app/uploaders/icon_uploader.rb +15 -0
  114. data/app/uploaders/zip_uploader.rb +53 -0
  115. data/app/views/admin/gateways/providers.html.arb +10 -0
  116. data/app/views/admin/revisions/payments.html.arb +28 -0
  117. data/app/views/admin/terminal_profiles/_tree.html.haml +35 -0
  118. data/app/views/admin/terminal_profiles/sort.html.haml +21 -0
  119. data/app/views/admin/terminals/pings.html.arb +55 -0
  120. data/app/views/admin/terminals/upgrade_build.html.arb +30 -0
  121. data/app/views/layouts/application.html.erb +1 -0
  122. data/app/views/welcome/index.html.erb +25 -0
  123. data/app/workers/pay_worker.rb +11 -0
  124. data/app/workers/report_worker.rb +7 -0
  125. data/app/workers/revise_worker.rb +7 -0
  126. data/config/acquiring.yml +13 -0
  127. data/config/application.rb +75 -0
  128. data/config/boot.rb +6 -0
  129. data/config/database.yml +17 -0
  130. data/config/deploy/roundlake-passenger.rb +3 -0
  131. data/config/deploy/roundlake-trinidad.rb +3 -0
  132. data/config/deploy.rb +37 -0
  133. data/config/environment.rb +5 -0
  134. data/config/environments/development.rb +39 -0
  135. data/config/environments/production.rb +67 -0
  136. data/config/environments/test.rb +37 -0
  137. data/config/initializers/active_admin.rb +31 -0
  138. data/config/initializers/backtrace_silencers.rb +7 -0
  139. data/config/initializers/devise.rb +232 -0
  140. data/config/initializers/inflections.rb +15 -0
  141. data/config/initializers/mime_types.rb +5 -0
  142. data/config/initializers/money.rb +6 -0
  143. data/config/initializers/redis.rb +4 -0
  144. data/config/initializers/secret_token.rb +7 -0
  145. data/config/initializers/session_store.rb +8 -0
  146. data/config/initializers/setup_rack.rb +1 -0
  147. data/config/initializers/wrap_parameters.rb +14 -0
  148. data/config/locales/active_admin.ru.yml +71 -0
  149. data/config/locales/activerecord.ru.yml +645 -0
  150. data/config/locales/devise.ru.yml +57 -0
  151. data/config/locales/ru.yml +33 -0
  152. data/config/locales/smartkiosk.gateways.ru.yml +241 -0
  153. data/config/locales/smartkiosk.hardware.ru.yml +38 -0
  154. data/config/locales/smartkiosk.reports.ru.yml +56 -0
  155. data/config/locales/smartkiosk.ru.yml +163 -0
  156. data/config/nginx.conf +9 -0
  157. data/config/redis.yml +9 -0
  158. data/config/routes.rb +48 -0
  159. data/config/schedule.rb +13 -0
  160. data/config/sidekiq.yml +5 -0
  161. data/config/trinidad.yml +6 -0
  162. data/config.ru +4 -0
  163. data/db/migrate/20120825083035_create_terminals.rb +47 -0
  164. data/db/migrate/20120825083305_create_payments.rb +51 -0
  165. data/db/migrate/20120827062618_devise_create_users.rb +50 -0
  166. data/db/migrate/20120827132621_create_admin_notes.rb +17 -0
  167. data/db/migrate/20120827132622_move_admin_notes_to_comments.rb +25 -0
  168. data/db/migrate/20120903193346_create_providers.rb +24 -0
  169. data/db/migrate/20120922075345_create_collections.rb +26 -0
  170. data/db/migrate/20120922080440_create_agents.rb +29 -0
  171. data/db/migrate/20120922081104_create_commissions.rb +10 -0
  172. data/db/migrate/20120927035841_create_gateways.rb +13 -0
  173. data/db/migrate/20120927040626_create_provider_gateways.rb +13 -0
  174. data/db/migrate/20120927091849_create_limits.rb +10 -0
  175. data/db/migrate/20120927164647_create_roles.rb +14 -0
  176. data/db/migrate/20121003131522_create_report_templates.rb +18 -0
  177. data/db/migrate/20121007135652_create_reports.rb +13 -0
  178. data/db/migrate/20121008073905_create_report_results.rb +10 -0
  179. data/db/migrate/20121017114538_create_gateway_settings.rb +12 -0
  180. data/db/migrate/20121017114556_create_gateway_attachments.rb +10 -0
  181. data/db/migrate/20121019132606_create_revisions.rb +19 -0
  182. data/db/migrate/20121023073501_create_gateway_switches.rb +10 -0
  183. data/db/migrate/20121112142743_create_terminal_orders.rb +13 -0
  184. data/db/migrate/20121118191553_create_versions.rb +19 -0
  185. data/db/migrate/20121125093414_create_system_receipt_templates.rb +9 -0
  186. data/db/migrate/20121127192257_create_terminal_builds.rb +10 -0
  187. data/db/migrate/20121212053441_create_rebates.rb +15 -0
  188. data/db/migrate/20121216143855_create_provider_receipt_templates.rb +9 -0
  189. data/db/migrate/20130101091100_create_terminal_profiles.rb +13 -0
  190. data/db/migrate/20130101091734_create_provider_rebates.rb +21 -0
  191. data/db/migrate/20130102164447_create_limit_sections.rb +14 -0
  192. data/db/migrate/20130102164503_create_commission_sections.rb +17 -0
  193. data/db/migrate/20130102171743_create_provider_profiles.rb +10 -0
  194. data/db/migrate/20130103152507_create_provider_fields.rb +17 -0
  195. data/db/migrate/20130103154526_create_provider_groups.rb +10 -0
  196. data/db/migrate/20130104063628_create_terminal_profile_providers.rb +11 -0
  197. data/db/migrate/20130104090957_create_terminal_profile_provider_groups.rb +11 -0
  198. data/db/migrate/20130108091644_create_terminal_profile_promotions.rb +10 -0
  199. data/db/schema.rb +489 -0
  200. data/db/seeds/receipt_templates/payment.txt +19 -0
  201. data/db/seeds/receipt_templates/system/balance.txt +13 -0
  202. data/db/seeds/receipt_templates/system/collection.txt +17 -0
  203. data/db/seeds/receipt_templates/system/touchtest.txt +15 -0
  204. data/db/seeds.rb +18 -0
  205. data/doc/README_FOR_APP +2 -0
  206. data/init.rb +1 -0
  207. data/lib/active_admin/cancan_integration.rb +81 -0
  208. data/lib/active_admin/form_builder_fix.rb +76 -0
  209. data/lib/active_admin/inputs/filter_date_range_input_fix.rb +24 -0
  210. data/lib/active_admin/inputs/filter_multiple_select_input.rb +18 -0
  211. data/lib/active_admin/inputs/filter_numeric_range_input.rb +31 -0
  212. data/lib/active_admin/resource_controller_fix.rb +23 -0
  213. data/lib/active_admin/views/pages/base_fix.rb +13 -0
  214. data/lib/assets/.gitkeep +0 -0
  215. data/lib/blueprints.rb +79 -0
  216. data/lib/date_expander.rb +38 -0
  217. data/lib/dav4rack/build_resource.rb +59 -0
  218. data/lib/formtastic/inputs/selectable_check_boxes.rb +39 -0
  219. data/lib/paper_trail/version_fix.rb +3 -0
  220. data/lib/report_builder.rb +88 -0
  221. data/lib/seeder.rb +103 -0
  222. data/lib/smartkiosk/server/version.rb +5 -0
  223. data/lib/smartkiosk/server.rb +35 -0
  224. data/lib/string_file.rb +12 -0
  225. data/lib/tasks/.gitkeep +0 -0
  226. data/lib/tasks/db.rake +27 -0
  227. data/lib/tasks/dump.rake +53 -0
  228. data/lib/tasks/matrioshka.rake +16 -0
  229. data/log/.gitkeep +0 -0
  230. data/log/gateways/.gitkeep +0 -0
  231. data/public/404.html +26 -0
  232. data/public/422.html +26 -0
  233. data/public/500.html +25 -0
  234. data/public/robots.txt +5 -0
  235. data/script/rails +6 -0
  236. data/smartkiosk-server.gemspec +23 -0
  237. data/spec/controllers/collections_controller_spec.rb +32 -0
  238. data/spec/controllers/payments_controller_spec.rb +123 -0
  239. data/spec/controllers/system_receipt_templates_controller_spec.rb +5 -0
  240. data/spec/controllers/terminal_builds_controller_spec.rb +5 -0
  241. data/spec/controllers/terminal_orders_controller_spec.rb +32 -0
  242. data/spec/controllers/terminal_pings_controller_spec.rb +31 -0
  243. data/spec/spec_helper.rb +66 -0
  244. data/vendor/assets/javascripts/.gitkeep +0 -0
  245. data/vendor/assets/javascripts/chosen.jquery.js +1026 -0
  246. data/vendor/assets/javascripts/datepicker-ru.jquery.js +21 -0
  247. data/vendor/assets/javascripts/nestedSortable.jquery.js +429 -0
  248. data/vendor/assets/javascripts/qtip.jquery.js +3403 -0
  249. data/vendor/assets/stylesheets/.gitkeep +0 -0
  250. data/vendor/assets/stylesheets/chosen.jquery.css +397 -0
  251. data/vendor/assets/stylesheets/modules/PIE.htc +96 -0
  252. data/vendor/assets/stylesheets/qtip.jquery.css.scss +604 -0
  253. data/vendor/plugins/.gitkeep +0 -0
  254. metadata +333 -0
@@ -0,0 +1,183 @@
1
+ ActiveAdmin.register Gateway do
2
+ actions :index, :show, :edit, :update
3
+
4
+ menu :parent => I18n.t('activerecord.models.gateway.other'),
5
+ :label => I18n.t('smartkiosk.admin.menu.manage'),
6
+ :priority => 1,
7
+ :if => proc { can? :index, Gateway }
8
+
9
+ member_action :providers do
10
+ @gateway = Gateway.find(params[:id])
11
+ @providers = @gateway.librarize.providers
12
+ end
13
+
14
+ #
15
+ # INDEX
16
+ #
17
+ batch_action I18n.t('smartkiosk.admin.actions.gateways.enable') do |selection|
18
+ Gateway.find(selection).each do |p|
19
+ p.update_attribute(:enabled, true)
20
+ end
21
+
22
+ redirect_to :action => :index
23
+ end
24
+
25
+ batch_action I18n.t('smartkiosk.admin.actions.gateways.disable') do |selection|
26
+ Gateway.find(selection).each do |p|
27
+ p.update_attribute(:enabled, false)
28
+ end
29
+
30
+ redirect_to :action => :index
31
+ end
32
+
33
+ filter :title
34
+ filter :keyword
35
+ filter :debug_level, :as => 'multiple_select',
36
+ :collection => proc { I18n.t('smartkiosk.debug_levels').invert },
37
+ :input_html => { :class => 'chosen' }
38
+ filter :created_at
39
+ filter :updated_at
40
+
41
+ index do
42
+ selectable_column
43
+ column :title, :sortable => :title do |x|
44
+ link_to x.title, [:admin, x]
45
+ end
46
+ column :keyword
47
+ column :enabled do |x|
48
+ if x.enabled?
49
+ status_tag I18n.t('formtastic.yes'), 'ok'
50
+ else
51
+ status_tag I18n.t('fomtastic.no'), 'error'
52
+ end
53
+ end
54
+ column :updated_at
55
+ default_actions
56
+ end
57
+
58
+ #
59
+ # SHOW
60
+ #
61
+ action_item :only => [:show] do
62
+ link_to I18n.t('smartkiosk.admin.actions.gateways.pay'),
63
+ new_admin_payment_path(:payment => {:gateway_id => gateway.id})
64
+ end
65
+
66
+ action_item :only => [:show], :if => proc { gateway.librarize.can_list_providers? } do
67
+ link_to I18n.t('smartkiosk.admin.actions.gateways.providers'),
68
+ providers_admin_gateway_path(gateway)
69
+ end
70
+
71
+ show do
72
+ attributes_table do
73
+ row :title
74
+ row :keyword
75
+ row :created_at
76
+ end
77
+
78
+ panel I18n.t('smartkiosk.admin.panels.gateways.settings') do
79
+ div(:class => 'attributes_table') do
80
+ table do
81
+ gateway.available_switches.each do |s|
82
+ tr do
83
+ th do
84
+ I18n.t("smartkiosk.gateways.#{gateway.keyword}.switches.#{s}")
85
+ end
86
+ td do
87
+ if gateway.send("switch_#{s}")
88
+ I18n.t('formtastic.yes')
89
+ else
90
+ span(I18n.t('formtastic.no'), :class => 'empty')
91
+ end
92
+ end
93
+ end
94
+ end
95
+ gateway.available_settings.each do |s|
96
+ tr do
97
+ th do
98
+ I18n.t("smartkiosk.gateways.#{gateway.keyword}.settings.#{s}")
99
+ end
100
+ td do
101
+ value = gateway.send("setting_#{s}")
102
+ unless value.blank?
103
+ value
104
+ else
105
+ span(I18n.t('active_admin.empty'), :class => 'empty')
106
+ end
107
+ end
108
+ end
109
+ end
110
+ gateway.available_attachments.each do |a|
111
+ tr do
112
+ th do
113
+ I18n.t("smartkiosk.gateways.#{gateway.keyword}.attachments.#{a}")
114
+ end
115
+ td do
116
+ value = gateway.send("attachment_#{a}")
117
+ unless value.blank?
118
+ link_to value.path.split('/').last, value.url
119
+ else
120
+ span(I18n.t('active_admin.empty'), :class => 'empty')
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+
129
+ panel I18n.t('activerecord.models.payment.other') do
130
+ table_for(gateway.payments.limit(20), :i18n => Payment) do |t|
131
+ t.column :terminal do |p|
132
+ unless p.terminal.blank?
133
+ link_to p.terminal.keyword, admin_terminal_path(p.terminal)
134
+ end
135
+ end
136
+ t.column :paid_amount
137
+ t.column :provider
138
+ t.column :created_at
139
+ end
140
+ button(link_to I18n.t('smartkiosk.full_list'), admin_payments_path(:q => {:gateway_id_eq => gateway.id}))
141
+ end
142
+
143
+ active_admin_comments
144
+ end
145
+
146
+ #
147
+ # FORM
148
+ #
149
+ form do |f|
150
+ f.inputs I18n.t('smartkiosk.admin.panels.gateways.settings') do
151
+ f.input :debug_level, :as => :select,
152
+ :collection => I18n.t("smartkiosk.debug_levels").invert, :input_html => {:class => 'chosen'}
153
+
154
+ f.input :requires_revisions_moderation, :as => :select, :input_html => {:class => 'chosen'}
155
+
156
+ gateway.available_switches.each do |s|
157
+ f.input "switch_#{s}", :as => :select,
158
+ :label => I18n.t("smartkiosk.gateways.#{gateway.keyword}.switches.#{s}"),
159
+ :input_html => {:value => f.object.send("switch_#{s}"), :class => 'chosen'}
160
+ end
161
+
162
+ gateway.available_settings.each do |s|
163
+ f.input "setting_#{s}", :as => :string,
164
+ :label => I18n.t("smartkiosk.gateways.#{gateway.keyword}.settings.#{s}"),
165
+ :input_html => {:value => f.object.send("setting_#{s}")}
166
+ end
167
+
168
+ gateway.available_attachments.each do |a|
169
+ file = f.object.send(:"attachment_#{a}")
170
+
171
+ f.input "attachment_#{a}",
172
+ :label => I18n.t("smartkiosk.gateways.#{gateway.keyword}.attachments.#{a}"), :as => :file,
173
+ :hint => (f.template.link_to(file.path.split('/').last).html_safe unless file.blank?)
174
+ end
175
+
176
+ f.input :enabled, :as => :select, :input_html => {:class => 'chosen'}
177
+
178
+ f.form_buffers.last
179
+ end
180
+
181
+ f.actions
182
+ end
183
+ end
@@ -0,0 +1,82 @@
1
+ ActiveAdmin.register Limit do
2
+ menu :parent => I18n.t('activerecord.models.provider.other'),
3
+ :if => proc { can? :index, Limit }
4
+
5
+ #
6
+ # INDEX
7
+ #
8
+ filter :id
9
+ filter :provider_profile, :as => 'multiple_select', :input_html => { :class => 'chosen' },
10
+ :collection => proc { ProviderProfile.rmap }
11
+ filter :provider_profile_providers_id, :as => 'multiple_select', :input_html => { :class => 'chosen' },
12
+ :collection => proc { Provider.rmap }
13
+ filter :start
14
+ filter :finish
15
+ filter :created_at
16
+ filter :updated_at
17
+
18
+ index do
19
+ selectable_column
20
+ column :id, :sortable => :id do |x|
21
+ link_to x.id, [:admin, x]
22
+ end
23
+ column :provider_profile
24
+ column :start
25
+ column :finish
26
+ default_actions
27
+ end
28
+
29
+ #
30
+ # SHOW
31
+ #
32
+ show do
33
+ attributes_table do
34
+ row :provider_profile
35
+ row :start
36
+ row :finish
37
+ row :created_at
38
+ row :updated_at
39
+ end
40
+
41
+ panel I18n.t('activerecord.models.limit_section.other') do
42
+ table_for(limit.limit_sections, :i18n => LimitSection) do |t|
43
+ t.column :agent
44
+ t.column :terminal_profile
45
+ t.column :payment_type
46
+ t.column :min
47
+ t.column :max
48
+ end
49
+ end
50
+
51
+ active_admin_comments
52
+ end
53
+
54
+ #
55
+ # FORM
56
+ #
57
+ form do |f|
58
+ f.semantic_errors
59
+ f.inputs do
60
+ f.input :provider_profile, :input_html => { :class => 'chosen' },
61
+ :collection => ProviderProfile.rmap
62
+ f.input :start, :as => :datepicker
63
+ f.input :finish, :as => :datepicker
64
+ end
65
+ f.inputs do
66
+ f.has_many :limit_sections do |lsf|
67
+ lsf.semantic_errors
68
+ lsf.input :agent, :collection => Agent.rmap, :input_html => { :class => 'chosen' }
69
+ lsf.input :terminal_profile, :collection => TerminalProfile.rmap, :input_html => { :class => 'chosen' }
70
+ lsf.input :payment_type, :as => :select, :input_html => { :class => 'chosen' },
71
+ :collection => I18n.t('smartkiosk.payment_types').invert
72
+ lsf.input :min
73
+ lsf.input :max
74
+ unless lsf.object.new_record?
75
+ lsf.input :_destroy, :as => :boolean, :label => I18n.t('active_admin.delete')
76
+ end
77
+ lsf.form_buffers.last
78
+ end
79
+ end
80
+ f.actions
81
+ end
82
+ end
@@ -0,0 +1,246 @@
1
+ ActiveAdmin.register Payment do
2
+ actions :index, :show, :new, :create
3
+
4
+ controller do
5
+ def scoped_collection
6
+ Payment.includes(:terminal, :provider)
7
+ end
8
+
9
+ def create
10
+ @payment.source = Payment::SOURCE_MANUAL
11
+ @payment.user = current_user
12
+
13
+ Payment.transaction do
14
+ unless @payment.save
15
+ render :action => 'new'
16
+ return
17
+ end
18
+
19
+ @payment.check!
20
+
21
+ unless @payment.state == 'checked'
22
+ @payment = Payment.new(@payment.attributes)
23
+ @payment.errors[:base] << I18n.t('activerecord.errors.models.payment.declined')
24
+ render :action => 'new'
25
+ raise ActiveRecord::Rollback
26
+ end
27
+
28
+ @payment.enqueue!
29
+ @payment.corrected_payment.pay_manually!(@payment.user) rescue false
30
+
31
+ redirect_to [:admin, @payment]
32
+ end
33
+ end
34
+ end
35
+
36
+ member_action :confirm, :method => :post do
37
+ payment = Payment.find(params[:id])
38
+ payment.pay_manually!(current_user)
39
+ redirect_to :action => :show
40
+ end
41
+
42
+ member_action :requeue, :method => :post do
43
+ payment = Payment.find(params[:id])
44
+ payment.requeue!(current_user)
45
+ redirect_to :action => :show
46
+ end
47
+
48
+ #
49
+ # INDEX
50
+ #
51
+ batch_action I18n.t('smartkiosk.admin.actions.payments.paid_manually') do |selection|
52
+ Payment.find(selection).each do |p|
53
+ p.pay_manually!(current_user) if p.state == 'error'
54
+ end
55
+
56
+ redirect_to :back
57
+ end
58
+
59
+ batch_action I18n.t('smartkiosk.admin.actions.payments.repay') do |selection|
60
+ Payment.find(selection).each do |p|
61
+ p.requeue!(current_user) if p.state == 'error'
62
+ end
63
+
64
+ redirect_to :back
65
+ end
66
+
67
+ scope I18n.t('active_admin.all'), :all
68
+ scope I18n.t('activerecord.scopes.payment.queued'), :queued
69
+ scope I18n.t('activerecord.scopes.payment.error'), :error
70
+
71
+ filter :id
72
+ filter :state, :as => 'multiple_select',
73
+ :input_html => { :class => 'chosen' },
74
+ :collection => proc { I18n.t('smartkiosk.payment_states').invert }
75
+ filter :source, :as => 'multiple_select',
76
+ :input_html => { :class => 'chosen' },
77
+ :collection => proc { I18n.t('smartkiosk.payment_sources').invert }
78
+ filter :agent, :as => 'multiple_select', :input_html => { :class => 'chosen' },
79
+ :collection => proc { Agent.rmap }
80
+ filter :terminal, :as => 'multiple_select', :input_html => { :class => 'chosen' }
81
+ filter :session_id
82
+ filter :gateway, :as => 'multiple_select', :input_html => { :class => 'chosen' }
83
+ filter :provider, :as => 'multiple_select', :input_html => { :class => 'chosen' }
84
+ filter :account
85
+ filter :paid_amount, :as => 'numeric_range'
86
+ filter :commission_amount, :as => 'numeric_range'
87
+ filter :rebate_amount, :as => 'numeric_range'
88
+ filter :created_at
89
+
90
+ index do
91
+ selectable_column
92
+ column :id, :sortable => :id do |x|
93
+ link_to x.id, [:admin, x]
94
+ end
95
+ column :terminal
96
+ column :session_id
97
+ column :account
98
+ column :provider
99
+ column :state, :sortable => :state do |x|
100
+ condition = :ok
101
+ condition = :warning if ['queue', 'checked'].include?(x.state)
102
+ condition = :error if x.state == 'error'
103
+ status_tag I18n.t("smartkiosk.payment_states.#{x.state}"), condition
104
+ end
105
+ column :paid_amount, :sort => :paid_amount do |x|
106
+ div :title => "#{x.enrolled_amount} + #{x.commission_amount}" do
107
+ x.paid_amount
108
+ end
109
+ end
110
+ column :rebate_amount
111
+ column :date, :sortable => :created_at do |x|
112
+ div :class => 'nowrap', :title => Payment.human_attribute_name(:created_at) do
113
+ status_tag I18n.l(x.created_at, :format => :long), :raw
114
+ end
115
+ if x.paid?
116
+ div :class => 'nowrap', :title => Payment.human_attribute_name(:paid_at) do
117
+ status_tag I18n.l(x.paid_at, :format => :long), :ok
118
+ end
119
+ elsif x.error?
120
+ div :class => 'nowrap', :title => Payment.human_attribute_name(:updated_at) do
121
+ status_tag I18n.l(x.updated_at, :format => :long), :error
122
+ end
123
+ else
124
+ div :class => 'nowrap', :title => Payment.human_attribute_name(:updated_at) do
125
+ status_tag I18n.l(x.updated_at, :format => :long), :warning
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ #
132
+ # SHOW
133
+ #
134
+ action_item :only => [:show], :if => proc { ['error'].include? payment.state } do
135
+ link_to I18n.t('smartkiosk.admin.actions.payments.paid_manually'),
136
+ confirm_admin_payment_path(payment), :method => :post
137
+ end
138
+
139
+ action_item :only => [:show], :if => proc { ['error'].include? payment.state } do
140
+ link_to I18n.t('smartkiosk.admin.actions.payments.repay'),
141
+ requeue_admin_payment_path(payment), :method => :post
142
+ end
143
+
144
+ show do
145
+ attributes_table do
146
+ row :id
147
+ row :session_id
148
+ row :terminal do |x|
149
+ unless x.terminal.blank?
150
+ link_to x.terminal.keyword, admin_terminal_path(x.terminal)
151
+ end
152
+ end
153
+ row :state do |x|
154
+ condition = :ok
155
+ condition = :warning if x.state == 'queue'
156
+ condition = :error if x.state == 'error'
157
+ status_tag I18n.t("smartkiosk.payment_states.#{x.state}"), condition
158
+ end
159
+ row :gateway
160
+ row :provider
161
+ row :paid_amount
162
+ row :enrolled_amount
163
+ row :commission_amount
164
+ row :rebate_amount
165
+ row :created_at
166
+ row :updated_at
167
+ row :account
168
+ row :user
169
+ row :fields do |x|
170
+ unless x.fields.blank?
171
+ x.fields.each do |k,v|
172
+ li do
173
+ b("#{k}:")
174
+ span(v)
175
+ end
176
+ end
177
+ end
178
+ end
179
+ row :raw_fields do |x|
180
+ unless x.fields.blank?
181
+ x.fields.each do |k,v|
182
+ li do
183
+ b("#{k}:")
184
+ span(v)
185
+ end
186
+ end
187
+ end
188
+ end
189
+ row :gateway_provider_id
190
+ row :gateway_payment_id
191
+ row :gateway_error do |x|
192
+ unless x.gateway_error.blank?
193
+ (
194
+ I18n.t("smartkiosk.gateways.#{x.gateway.keyword}.errors")[x.gateway_error] ||
195
+ I18n.t('smartkiosk.unlocalized')
196
+ ) + " (#{x.gateway_error})"
197
+ end
198
+ end
199
+ row :payment_type do |x|
200
+ I18n.t('smartkiosk.payment_types')[x.payment_type]
201
+ end
202
+ row :source do |x|
203
+ I18n.t('smartkiosk.payment_sources')[x.source]
204
+ end
205
+ row :corrected_payment
206
+ row :corrected_by
207
+ end
208
+
209
+ active_admin_comments
210
+ end
211
+
212
+ #
213
+ # FORM
214
+ #
215
+ form do |f|
216
+ f.semantic_errors
217
+ f.inputs do
218
+ f.input :user_id, :as => :hidden, :input_html => {:value => current_user.id}
219
+ f.input :corrected_payment_id, :as => :string, :input_html => { :id => 'cpi' }
220
+ f.input :gateway, :collection => Gateway.enabled, :input_html => {
221
+ :class => 'chosen',
222
+ :onchange => "location.href = '/admin/payments/new?payment[gateway_id]='+$(this).val()+'&payment[corrected_payment_id]='+$('#cpi').val()"
223
+ }
224
+ if payment.gateway.blank?
225
+ f.form_buffers.last << content_tag(:li, I18n.t('smartkiosk.admin.messages.payments.choose_gateway'))
226
+ elsif payment.gateway.providers.count < 1
227
+ f.form_buffers.last << content_tag(:li, I18n.t('smartkiosk.admin.messages.payments.no_providers'))
228
+ else
229
+ f.input :provider, :input_html => {:class => 'chosen'}, :collection => payment.gateway.providers
230
+ f.input :gateway_provider_id
231
+ f.input :account
232
+ f.input :human_fields, :as => :text, :hint => "foo=bar<br/>bar=baz".html_safe
233
+ f.input :enrolled_amount, :required => true
234
+ f.input :commission_amount, :required => true
235
+ end
236
+
237
+ f.form_buffers.last
238
+ end
239
+
240
+ if !payment.gateway.blank? && payment.gateway.providers.count > 0
241
+ f.actions
242
+ end
243
+
244
+ f.form_buffers.last
245
+ end
246
+ end
@@ -0,0 +1,60 @@
1
+ ActiveAdmin.register ProviderGroup do
2
+ menu :parent => I18n.t('activerecord.models.provider.other'),
3
+ :if => proc { can? :index, ProviderGroup },
4
+ :priority => 2
5
+
6
+ #
7
+ # INDEX
8
+ #
9
+ filter :id
10
+ filter :title
11
+ filter :provider_group, :input_html => { :class => 'chosen' }
12
+
13
+ index do
14
+ selectable_column
15
+ column :id do |x|
16
+ link_to x.id, [:admin, x]
17
+ end
18
+ column :icon do |x|
19
+ image_tag(x.icon.url(:thumb)) unless x.icon.blank?
20
+ end
21
+ column :title
22
+ column :provider_group
23
+ column :created_at
24
+ column :updated_at
25
+ default_actions
26
+ end
27
+
28
+ #
29
+ # SHOW
30
+ #
31
+ show do |provider_group|
32
+ attributes_table do
33
+ row :id
34
+ row :title
35
+ row :icon do
36
+ image_tag(provider_group.icon) unless provider_group.icon.blank?
37
+ end
38
+ row :provider_group
39
+ row :created_at
40
+ row :updated_at
41
+ end
42
+ end
43
+
44
+ #
45
+ # FORM
46
+ #
47
+ form do |f|
48
+ f.inputs do
49
+ f.input :title
50
+ f.input :provider_group, :input_html => { :class => 'chosen' },
51
+ :collection => ProviderGroup.tree(f.object)
52
+ f.input :icon, :hint => (
53
+ unless provider_group.icon.blank?
54
+ f.template.image_tag(provider_group.icon).html_safe
55
+ end
56
+ )
57
+ end
58
+ f.actions
59
+ end
60
+ end
@@ -0,0 +1,11 @@
1
+ ActiveAdmin.register ProviderProfile do
2
+ menu :parent => I18n.t('activerecord.models.provider.other'),
3
+ :if => proc { can? :index, ProviderProfile },
4
+ :priority => 3
5
+
6
+ filter :providers_id, :as => 'multiple_select', :input_html => { :class => 'chosen' },
7
+ :collection => proc { Provider.rmap }
8
+ filter :title
9
+ filter :created_at
10
+ filter :updated_at
11
+ end
@@ -0,0 +1,82 @@
1
+ ActiveAdmin.register ProviderReceiptTemplate do
2
+
3
+ menu :parent => I18n.t('activerecord.models.provider.other'),
4
+ :if => proc { can? :index, Gateway }
5
+
6
+
7
+ controller do
8
+ before_filter(:only => :new) do
9
+ @provider_receipt_template = ProviderReceiptTemplate.sample
10
+ end
11
+ end
12
+
13
+ #
14
+ # INDEX
15
+ #
16
+ filter :providers_id, :as => 'multiple_select', :input_html => { :class => 'chosen' }
17
+ filter :created_at
18
+ filter :updated_at
19
+
20
+ index do
21
+ selectable_column
22
+ column :id
23
+ column :providers do |x|
24
+ x.title
25
+ end
26
+ column :created_at
27
+ column :updated_at
28
+ default_actions
29
+ end
30
+
31
+ #
32
+ # SHOW
33
+ #
34
+ show do |rt|
35
+ attributes_table do
36
+ row :providers do |x|
37
+ x.title
38
+ end
39
+ row :template do
40
+ pre rt.template
41
+ end
42
+ row :updated_at
43
+ end
44
+
45
+ active_admin_comments
46
+ end
47
+
48
+ #
49
+ # FORM
50
+ #
51
+ form do |f|
52
+ f.inputs do
53
+ unless f.object.system?
54
+ f.input :providers, :collection => Provider.rmap, :input_html => {
55
+ :class => 'chosen',
56
+ :'data-placeholder' => I18n.t('active_admin.filters.multiple_select.placeholder'),
57
+ }
58
+ end
59
+
60
+ f.input :template, :input_html => {
61
+ :style => 'font-family: Consolas, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace'
62
+ }
63
+ f.form_buffers.last << Arbre::Context.new do
64
+ table(:class => 'hint') do
65
+ tr do
66
+ ProviderReceiptTemplate.entities.each do |entity, fields|
67
+ td(:style => 'white-space: nowrap') do
68
+ fields.each do |field|
69
+ para do
70
+ strong "#{entity}_#{field}:"
71
+ span I18n.t("activerecord.attributes.#{entity}.#{field}")
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end.to_s
79
+ end
80
+ f.actions
81
+ end
82
+ end