mno-enterprise-core 3.0.0 → 3.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dfe546808d905e473abc105da4fbe5234f124896
4
- data.tar.gz: 7e8dd015d9a5b54ee9ba1fce03695f7a67af9702
3
+ metadata.gz: c90db7a2040c41d7bdac3c6fc451f911f20a9e0b
4
+ data.tar.gz: 97d844facb19a294230b73ff698844cb92d544be
5
5
  SHA512:
6
- metadata.gz: 5e36dd230d6124d058ee0f1cee11c5557df773693728292d401698d833f4332b242a8eab68e5f1ef4c6d4e60bcaf994e5697381cf9279d4eac1efcda4d91fb3e
7
- data.tar.gz: 8ffb8ac19763e88b91288a3aeb665a12d38e6eaffbcc45b63bf97a99f151283649823df6909b7d42a4412323abf6680813fc704cfc585b01b0d8eacbc4b99d98
6
+ metadata.gz: 9c628595de057ec3cffb1ccaf242f0da9fde8543cb2b26f571ff6bc355db0f16b283c956b73440daeec93dedf0882be0de3ae528a287f7d9341ee16cf49aa441
7
+ data.tar.gz: 2ebbabb8f8ed5df2e7ffb5b47fa0a64ff345cd99e717ba2ab8dfba00a0752dcdb56baf0df9efab6614ce85ec14c8fa442271e7407375ffd053fa43b6c4a9c6f1
@@ -6,6 +6,7 @@ module MnoEnterprise
6
6
  class BaseResource
7
7
  include Her::Model
8
8
  include HerExtension::Validations::RemoteUniquenessValidation
9
+ include GlobalID::Identification
9
10
 
10
11
  include_root_in_json :data
11
12
  use_api MnoEnterprise.mnoe_api_v1
@@ -3,31 +3,42 @@ module MnoEnterprise
3
3
 
4
4
  attributes :name, :widgets_order, :organization_ids, :widgets_templates, :currency
5
5
 
6
- has_many :widgets, class_name: 'MnoEnterprise::Impac::Widget', dependent: :destroy
7
- has_many :kpis, class_name: 'MnoEnterprise::Impac::Kpi', dependent: :destroy
8
- belongs_to :owner, polymorphic: true
9
-
10
- #============================================
11
- # Instance methods
12
- #============================================
13
- # Return the full name of this dashboard
14
- # Currently a simple accessor to the dashboard name (used to include the company name)
15
- def full_name
16
- self.name
17
- end
18
-
19
- # Return all the organizations linked to this dashboard and to which
20
- # the user has access
21
- def organizations
22
- self.organization_ids.map do |uid|
23
- MnoEnterprise::Organization.find_by(uid: uid)
24
- end
25
- end
6
+ has_many :widgets, class_name: 'MnoEnterprise::Impac::Widget', dependent: :destroy
7
+ has_many :kpis, class_name: 'MnoEnterprise::Impac::Kpi', dependent: :destroy
8
+ belongs_to :owner, polymorphic: true
26
9
 
27
- def sorted_widgets
28
- order = self.widgets_order.map(&:to_i) | self.widgets.map{|w| w.id }
29
- order.map { |id| self.widgets.to_a.find{ |w| w.id == id} }.compact
30
- end
10
+ #============================================
11
+ # Instance methods
12
+ #============================================
13
+ # Return the full name of this dashboard
14
+ # Currently a simple accessor to the dashboard name (used to include the company name)
15
+ def full_name
16
+ self.name
17
+ end
18
+
19
+ # Return all the organizations linked to this dashboard and to which
20
+ # the user has access
21
+ def organizations
22
+ self.organization_ids.map do |uid|
23
+ MnoEnterprise::Organization.find_by(uid: uid)
24
+ end
25
+ end
26
+
27
+ def sorted_widgets
28
+ order = self.widgets_order.map(&:to_i) | self.widgets.map{|w| w.id }
29
+ order.map { |id| self.widgets.to_a.find{ |w| w.id == id} }.compact
30
+ end
31
+
32
+ # Filter widgets list based on config
33
+ def filtered_widgets_templates
34
+ if MnoEnterprise.widgets_templates_listing
35
+ return self.widgets_templates.select do |t|
36
+ MnoEnterprise.widgets_templates_listing.include?(t[:path])
37
+ end
38
+ else
39
+ return self.widgets_templates
40
+ end
41
+ end
31
42
 
32
43
  def to_audit_event
33
44
  name
@@ -47,7 +47,7 @@ module MnoEnterprise
47
47
  :remember_created_at, :sign_in_count, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip,
48
48
  :last_sign_in_ip, :confirmation_token, :confirmed_at, :confirmation_sent_at, :unconfirmed_email,
49
49
  :failed_attempts, :unlock_token, :locked_at, :name, :surname, :company, :phone, :phone_country_code,
50
- :geo_country_code, :geo_state_code, :geo_city, :website, :orga_on_create, :sso_session, :current_password_required
50
+ :geo_country_code, :geo_state_code, :geo_city, :website, :orga_on_create, :sso_session, :current_password_required, :admin_role
51
51
 
52
52
  define_model_callbacks :validation #required by Devise
53
53
  devise :remote_authenticatable, :registerable, :recoverable, :rememberable,
@@ -6,8 +6,8 @@ module MnoEnterprise
6
6
  source_root File.expand_path("../templates", __FILE__)
7
7
  desc "Description:\n Install Maestrano Enterprise Engine in your application\n\n"
8
8
 
9
- class_option :skip_rspec, type: :boolean, default: false, desc: 'Skip rspec-rails installation'
10
- class_option :skip_factory_girl, type: :boolean, default: false, desc: 'Skip factory_girl installation'
9
+ # class_option :skip_rspec, type: :boolean, default: false, desc: 'Skip rspec-rails installation'
10
+ # class_option :skip_factory_girl, type: :boolean, default: false, desc: 'Skip factory_girl installation'
11
11
  class_option :skip_frontend, type: :boolean, default: false, desc: 'Skip frontend installation'
12
12
  class_option :skip_admin, type: :boolean, default: false, desc: 'Skip admin installation'
13
13
 
@@ -90,8 +90,7 @@ module MnoEnterprise
90
90
  # Inject engine routes
91
91
  def notify_about_routes
92
92
  if (routes_file = destination_path.join('config', 'routes.rb')).file? && (routes_file.read !~ %r{mount\ MnoEnterprise::Engine})
93
- mount = %Q{
94
- # This line mount Maestrano Enterprise routes in your application under /mnoe.
93
+ mount = %Q{ # This line mount Maestrano Enterprise routes in your application under /mnoe.
95
94
  # If you would like to change where this engine is mounted, simply change the :at option to something different
96
95
  #
97
96
  # We ask that you don't use the :as option here, as Mnoe relies on it being the default of "mno_enterprise"
@@ -112,31 +111,6 @@ module MnoEnterprise
112
111
  end
113
112
  end
114
113
 
115
- def install_rspec_rails
116
- unless options[:skip_rspec]
117
- say("\n")
118
- @install_rspec = ask_with_default("Would you like to install rspec-rails?")
119
- if @install_rspec
120
- gem_group :test do
121
- gem "rspec-rails"
122
- end
123
- generate "rspec:install"
124
- end
125
- end
126
- end
127
-
128
- def install_factory_girl
129
- unless options[:skip_factory_girl]
130
- say("\n")
131
- @install_facto_girl = ask_with_default("Would you like to install factory_girl_rails?")
132
- if @install_facto_girl
133
- gem_group :test do
134
- gem "factory_girl_rails"
135
- end
136
- end
137
- end
138
- end
139
-
140
114
  def install_summary
141
115
  unless options[:quiet]
142
116
  say("\n\n")
@@ -1,2 +1,2 @@
1
1
  web: bundle exec puma -p 7000
2
- gulp: gulp serve --gulpfile ./tmp/build/frontend/gulpfile.js --cwd ./tmp/build/frontend/
2
+ gulp: cd ./tmp/build/frontend && node_modules/.bin/gulp serve
@@ -135,4 +135,54 @@ MnoEnterprise.configure do |config|
135
135
  # "xero",
136
136
  # "wordpress"
137
137
  # ]
138
+
139
+ #====================================
140
+ # Impac! widgets templates listing
141
+ #====================================
142
+ # config.widgets_templates_listing = nil
143
+ # config.widgets_templates_listing = [
144
+ # 'accounts/balance',
145
+ # 'accounts/comparison',
146
+ # 'accounts/expenses_revenue',
147
+ # 'accounts/payable_receivable',
148
+ # 'accounts/assets_summary',
149
+ # 'accounts/custom_calculation',
150
+ # 'accounts/accounting_values/ebitda',
151
+ # 'accounts/accounting_values/turnover',
152
+ # 'accounts/accounting_values/workforce_costs',
153
+ # 'accounts/accounting_values/payroll_taxes_account',
154
+ # 'accounts/cash_summary',
155
+ # 'accounts/balance_sheet',
156
+ # 'accounts/profit_and_loss',
157
+ # 'invoices/list',
158
+ # 'invoices/summary',
159
+ # 'invoices/aged_payables_receivables',
160
+ # 'hr/workforce_summary',
161
+ # 'hr/salaries_summary',
162
+ # 'hr/employees_list',
163
+ # 'hr/employee_details',
164
+ # 'hr/payroll_taxes',
165
+ # 'hr/superannuation_accruals',
166
+ # 'hr/leaves_balance',
167
+ # 'hr/payroll_summary',
168
+ # 'hr/timesheets',
169
+ # 'sales/summary',
170
+ # 'sales/list',
171
+ # 'sales/growth',
172
+ # 'sales/segmented_turnover',
173
+ # 'sales/customer_details',
174
+ # 'sales/margin',
175
+ # 'sales/aged',
176
+ # 'sales/comparison',
177
+ # 'sales/leads_list',
178
+ # 'sales/number_of_leads',
179
+ # 'sales/cycle',
180
+ # 'sales/leads_funnel',
181
+ # 'sales/opportunities_funnel',
182
+ # 'sales/top_opportunities',
183
+ # 'sales/break_even',
184
+ # 'sales/forecast',
185
+ # 'sales/performance'
186
+ # ]
187
+
138
188
  end
@@ -33,7 +33,24 @@ module Her
33
33
  filtered_attributes
34
34
  end
35
35
  end
36
-
36
+
37
+ # @private
38
+ # TODO: Handle has_one
39
+ def embeded_params(attributes)
40
+ associations[:has_many].select { |a| attributes.include?(a[:data_key])}.compact.inject({}) do |hash, association|
41
+ params = attributes[association[:data_key]].map(&:to_params)
42
+ # <PATCH> - Return hash
43
+ next hash if params.empty?
44
+ # </PATCH>
45
+ if association[:class_name].constantize.include_root_in_json?
46
+ root = association[:class_name].constantize.root_element
47
+ hash[association[:data_key]] = params.map { |n| n[root] }
48
+ else
49
+ hash[association[:data_key]] = params
50
+ end
51
+ hash
52
+ end
53
+ end
37
54
  end
38
55
  end
39
56
  end
@@ -37,7 +37,7 @@ module MnoEnterprise::Concerns::Models::Organization
37
37
  included do
38
38
  attributes :uid, :name, :account_frozen, :free_trial_end_at, :soa_enabled, :mails, :logo,
39
39
  :latitude, :longitude, :geo_country_code, :geo_state_code, :geo_city, :geo_tz, :geo_currency,
40
- :meta_data, :industry, :size
40
+ :meta_data, :industry, :size, :financial_year_end_month
41
41
 
42
42
  scope :in_arrears, -> { where(in_arrears?: true) }
43
43
 
@@ -210,6 +210,14 @@ module MnoEnterprise
210
210
  mattr_accessor :marketplace_listing
211
211
  @@marketplace_listing = nil
212
212
 
213
+ #====================================
214
+ # Impac! widgets templates listing
215
+ #====================================
216
+ # List of widget templates that should be offered on Impac!
217
+ # if nil, all widget templates available will be offered
218
+ mattr_accessor :widgets_templates_listing
219
+ @@widgets_templates_listing = nil
220
+
213
221
  #====================================
214
222
  # Module Methods
215
223
  #====================================
@@ -1,3 +1,3 @@
1
1
  module MnoEnterprise
2
- VERSION = '3.0.0'
2
+ VERSION = '3.0.1'
3
3
  end
@@ -0,0 +1,46 @@
1
+ require 'rails_helper'
2
+
3
+ module MnoEnterprise
4
+ RSpec.describe Impac::Dashboard, type: :model do
5
+ subject(:dashboard) { build(:impac_dashboard) }
6
+
7
+ describe '#full_name' do
8
+ subject { dashboard.full_name }
9
+ it { is_expected.to eq(dashboard.name) }
10
+ end
11
+
12
+ describe '#sorted_widgets' do
13
+ it 'is pending'
14
+ end
15
+
16
+ describe '#filtered_widgets_templates' do
17
+ let(:templates) {
18
+ [
19
+ {path: 'accounts/balance', name: 'Account balance'},
20
+ {path: 'accounts/comparison', name: 'Accounts comparison'}
21
+ ]
22
+ }
23
+ subject(:dashboard) { build(:impac_dashboard, widgets_templates: templates) }
24
+
25
+ subject { dashboard.filtered_widgets_templates }
26
+
27
+ context 'with no filter' do
28
+ before { MnoEnterprise.widgets_templates_listing = nil}
29
+
30
+ it 'returns all the widgets' do
31
+ expect(subject).to eq(templates)
32
+ end
33
+ end
34
+
35
+ context 'with a filter' do
36
+ let(:filter) { ['accounts/balance'] }
37
+ before { MnoEnterprise.widgets_templates_listing = filter }
38
+
39
+ it 'returns a filtered list' do
40
+ expect(subject.size).to eq(1)
41
+ expect(subject.map{|h| h[:path]}).to eq(filter)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mno-enterprise-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-05 00:00:00.000000000 Z
12
+ date: 2016-04-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -511,6 +511,7 @@ files:
511
511
  - spec/models/mno_enterprise/app_spec.rb
512
512
  - spec/models/mno_enterprise/base_resource_spec.rb
513
513
  - spec/models/mno_enterprise/deletion_request_spec.rb
514
+ - spec/models/mno_enterprise/impac/dashboard_spec.rb
514
515
  - spec/models/mno_enterprise/invoice_spec.rb
515
516
  - spec/models/mno_enterprise/organization_spec.rb
516
517
  - spec/models/mno_enterprise/user_spec.rb
@@ -536,24 +537,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
536
537
  version: '0'
537
538
  requirements: []
538
539
  rubyforge_project:
539
- rubygems_version: 2.2.2
540
+ rubygems_version: 2.4.8
540
541
  signing_key:
541
542
  specification_version: 4
542
543
  summary: Maestrano Enterprise - Core functionnality
543
544
  test_files:
544
- - spec/controllers/mno_enterprise/angular_csrf_spec.rb
545
- - spec/controllers/mno_enterprise/i18n_spec.rb
546
- - spec/lib/her_extension/her_orm_adapter.rb
547
- - spec/lib/her_extension/model/relation_spec.rb
548
- - spec/lib/mandrill_client_spec.rb
549
- - spec/lib/mno_enterprise/core_engine_spec.rb
550
- - spec/mno_enterprise_spec.rb
551
- - spec/models/mno_enterprise/app_instance_spec.rb
552
545
  - spec/models/mno_enterprise/app_spec.rb
553
- - spec/models/mno_enterprise/base_resource_spec.rb
546
+ - spec/models/mno_enterprise/organization_spec.rb
547
+ - spec/models/mno_enterprise/app_instance_spec.rb
548
+ - spec/models/mno_enterprise/impac/dashboard_spec.rb
554
549
  - spec/models/mno_enterprise/deletion_request_spec.rb
555
550
  - spec/models/mno_enterprise/invoice_spec.rb
556
- - spec/models/mno_enterprise/organization_spec.rb
557
551
  - spec/models/mno_enterprise/user_spec.rb
558
- - spec/rails_helper.rb
552
+ - spec/models/mno_enterprise/base_resource_spec.rb
559
553
  - spec/spec_helper.rb
554
+ - spec/lib/mno_enterprise/core_engine_spec.rb
555
+ - spec/lib/her_extension/her_orm_adapter.rb
556
+ - spec/lib/her_extension/model/relation_spec.rb
557
+ - spec/lib/mandrill_client_spec.rb
558
+ - spec/rails_helper.rb
559
+ - spec/controllers/mno_enterprise/i18n_spec.rb
560
+ - spec/controllers/mno_enterprise/angular_csrf_spec.rb
561
+ - spec/mno_enterprise_spec.rb