erp_search 3.0.4 → 3.1.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 (83) hide show
  1. data/app/models/extensions/dynamic_form_document.rb +3 -0
  2. data/app/models/extensions/ticket.rb +3 -0
  3. data/app/models/extensions/website_inquiry.rb +3 -0
  4. data/app/models/party_search_fact.rb +2 -0
  5. data/config/sunspot.yml +11 -4
  6. data/lib/erp_search.rb +7 -0
  7. data/lib/erp_search/engine.rb +5 -2
  8. data/lib/erp_search/extensions.rb +2 -0
  9. data/lib/erp_search/extensions/active_record/has_dynamic_solr_search.rb +116 -0
  10. data/lib/erp_search/version.rb +2 -2
  11. data/lib/tasks/dynamic_form_models.rake +42 -0
  12. data/spec/dummy/config/application.rb +6 -0
  13. data/spec/dummy/config/environments/spec.rb +3 -0
  14. data/spec/dummy/config/sunspot.yml +36 -0
  15. data/spec/dummy/db/data_migrations/20110109173616_create_capability_scope_types.erp_tech_svcs.rb +15 -0
  16. data/spec/dummy/db/data_migrations/20110509223702_add_publisher_role.knitkit.rb +22 -0
  17. data/spec/dummy/db/data_migrations/20110525001935_add_usd_currency.erp_base_erp_svcs.rb +12 -0
  18. data/spec/dummy/db/data_migrations/20110608185830_create_default_dynamic_models_and_forms.erp_forms.rb +33 -0
  19. data/spec/dummy/db/data_migrations/20110609150135_add_iso_codes.erp_base_erp_svcs.rb +19 -0
  20. data/spec/dummy/db/data_migrations/20110728201729_erp_app_setup.erp_app.rb +252 -0
  21. data/spec/dummy/db/data_migrations/20110728201733_update_preferences.erp_app.rb +53 -0
  22. data/spec/dummy/db/data_migrations/20110802200222_schedule_delete_expired_sessions_job.erp_tech_svcs.rb +16 -0
  23. data/spec/dummy/db/data_migrations/20110816153456_add_knitkit_application.knitkit.rb +32 -0
  24. data/spec/dummy/db/data_migrations/20110816161238_create_desktop_app_audit_log_viewer.erp_app.rb +21 -0
  25. data/spec/dummy/db/data_migrations/20110817160743_add_file_manager_application.erp_app.rb +32 -0
  26. data/spec/dummy/db/data_migrations/20110828190913_create_desktop_app_dynamic_forms.erp_forms.rb +19 -0
  27. data/spec/dummy/db/data_migrations/20110913145838_setup_compass_ae_instance.erp_base_erp_svcs.rb +12 -0
  28. data/spec/dummy/db/data_migrations/20111108183739_add_default_capabilities.erp_app.rb +23 -0
  29. data/spec/dummy/db/data_migrations/20111108183740_add_new_contact_widgets.erp_app.rb +42 -0
  30. data/spec/dummy/db/data_migrations/20111111144706_setup_audit_log_types.erp_tech_svcs.rb +22 -0
  31. data/spec/dummy/db/data_migrations/20111118182910_setup_knitkit_capabilities.knitkit.rb +128 -0
  32. data/spec/dummy/db/data_migrations/20120109173616_create_download_capability_type.erp_tech_svcs.rb +14 -0
  33. data/spec/dummy/db/data_migrations/20120127144444_create_website_role_types.knitkit.rb +14 -0
  34. data/spec/dummy/db/data_migrations/20120127150505_create_website_default_configuration.knitkit.rb +73 -0
  35. data/spec/dummy/db/data_migrations/20120127150506_add_primary_host_to_website_configuration.knitkit.rb +34 -0
  36. data/spec/dummy/db/data_migrations/20120229160222_add_userinfo_widget.erp_app.rb +29 -0
  37. data/spec/dummy/db/data_migrations/20120316150424_add_is_template_to_default_website_config.knitkit.rb +17 -0
  38. data/spec/dummy/db/data_migrations/20120405193721_create_party_and_role_type_for_communication_events.erp_app.rb +11 -0
  39. data/spec/dummy/db/data_migrations/20120411180756_create_user_management_mobile_application.erp_app.rb +19 -0
  40. data/spec/dummy/db/data_migrations/20120418164215_create_configuration_management_desktop_application.erp_app.rb +23 -0
  41. data/spec/dummy/db/data_migrations/20120809020508_update_website_and_configuration.knitkit.rb +78 -0
  42. data/spec/dummy/db/data_migrations/20120824013449_create_ticket_form.erp_forms.rb +67 -0
  43. data/spec/dummy/db/data_migrations/20121026013449_update_ticket_form.erp_forms.rb +65 -0
  44. data/spec/dummy/db/data_migrations/20121026191738_update_contact_form.erp_forms.rb +27 -0
  45. data/spec/dummy/db/data_migrations/20121116155018_create_group_relationship_and_role_types.erp_tech_svcs.rb +20 -0
  46. data/spec/dummy/db/data_migrations/20121129185611_upgrade_website_role_iid.knitkit.rb +21 -0
  47. data/spec/dummy/db/data_migrations/20121130201859_upgrade_remove_system_mgmt_app.erp_app.rb +16 -0
  48. data/spec/dummy/db/data_migrations/20121130212146_note_capabilities.erp_tech_svcs.rb +24 -0
  49. data/spec/dummy/db/data_migrations/20121218175028_create_security_management_desktop_application.erp_app.rb +23 -0
  50. data/spec/dummy/db/migrate/20121219182151_base_erp_services.erp_base_erp_svcs.rb +461 -0
  51. data/spec/dummy/db/migrate/20121219182152_recreate_party_search_facts_table.erp_search.rb +40 -0
  52. data/spec/dummy/db/migrate/20121219182153_base_tech_services.erp_tech_svcs.rb +255 -0
  53. data/spec/dummy/db/migrate/20121219182154_create_has_attribute_tables.erp_tech_svcs.rb +39 -0
  54. data/spec/dummy/db/migrate/20121219182155_base_app_framework.erp_app.rb +276 -0
  55. data/spec/dummy/db/migrate/20121219182156_dynamic_forms.erp_forms.rb +95 -0
  56. data/spec/dummy/db/migrate/20121219182157_create_tickets.erp_forms.rb +19 -0
  57. data/spec/dummy/db/migrate/20121219182158_upgrade_dynamic_forms_table.erp_forms.rb +32 -0
  58. data/spec/dummy/db/migrate/20121219182159_setup_knitkit.knitkit.rb +316 -0
  59. data/spec/dummy/db/migrate/20130107181410_create_groups.erp_tech_svcs.rb +19 -0
  60. data/spec/dummy/db/migrate/20130107181411_upgrade_security.erp_tech_svcs.rb +54 -0
  61. data/spec/dummy/db/migrate/20130107181412_upgrade_security2.erp_tech_svcs.rb +270 -0
  62. data/spec/dummy/db/schema.rb +1172 -0
  63. data/spec/dummy/db/spec.sqlite3 +0 -0
  64. data/spec/dummy/log/development.log +3 -0
  65. data/spec/dummy/log/spec.log +26839 -0
  66. data/spec/dummy/log/sunspot-solr-spec.log +24338 -0
  67. data/spec/dummy/solr/conf/admin-extra.html +31 -0
  68. data/spec/dummy/solr/conf/elevate.xml +36 -0
  69. data/spec/dummy/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  70. data/spec/dummy/solr/conf/protwords.txt +21 -0
  71. data/spec/dummy/solr/conf/schema.xml +238 -0
  72. data/spec/dummy/solr/conf/scripts.conf +24 -0
  73. data/spec/dummy/solr/conf/solrconfig.xml +934 -0
  74. data/spec/dummy/solr/conf/spellings.txt +2 -0
  75. data/spec/dummy/solr/conf/stopwords.txt +58 -0
  76. data/spec/dummy/solr/conf/synonyms.txt +31 -0
  77. data/spec/dummy/solr/data/spec/index/segments.gen +0 -0
  78. data/spec/dummy/solr/data/spec/index/segments_av +0 -0
  79. data/spec/dummy/solr/data/spec/spellchecker/segments.gen +0 -0
  80. data/spec/dummy/solr/data/spec/spellchecker/segments_1 +0 -0
  81. data/spec/dummy/solr/pids/spec/sunspot-solr-spec.pid +1 -0
  82. data/spec/spec_helper.rb +19 -10
  83. metadata +171 -80
@@ -0,0 +1,3 @@
1
+ DynamicFormDocument.class_eval do
2
+ has_dynamic_solr_search
3
+ end
@@ -0,0 +1,3 @@
1
+ Ticket.class_eval do
2
+ has_dynamic_solr_search
3
+ end
@@ -0,0 +1,3 @@
1
+ WebsiteInquiry.class_eval do
2
+ has_dynamic_solr_search
3
+ end
@@ -1,4 +1,6 @@
1
1
  class PartySearchFact < ActiveRecord::Base
2
+ attr_protected :created_at, :updated_at
3
+
2
4
  after_destroy :sunspot_commit
3
5
 
4
6
  belongs_to :party
@@ -6,18 +6,25 @@ development:
6
6
  port: 8982
7
7
  path: /solr
8
8
  log_level: INFO
9
+
10
+ production:
11
+ solr:
12
+ hostname: 127.0.0.1
13
+ port: 8983
14
+ path: /solr
15
+ log_level: WARNING
9
16
 
10
- test:
17
+ spec:
11
18
  solr:
12
19
  hostname: 127.0.0.1
13
20
  port: 8981
14
21
  path: /solr
15
22
  log_level: WARNING
16
-
17
- production:
23
+
24
+ test:
18
25
  solr:
19
26
  hostname: 127.0.0.1
20
- port: 8983
27
+ port: 8981
21
28
  path: /solr
22
29
  log_level: WARNING
23
30
 
@@ -1,7 +1,14 @@
1
+ require 'erp_base_erp_svcs'
2
+
3
+ require 'sunspot'
4
+
5
+ require "erp_search/extensions"
1
6
  require "erp_search/version"
2
7
  require "erp_search/engine"
3
8
 
9
+
4
10
  $USE_SOLR_FOR_CONTENT = true
11
+ $USE_SOLR_FOR_DYNAMIC_FORM_MODELS = true
5
12
 
6
13
  module ErpSearch
7
14
  end
@@ -3,13 +3,16 @@ require 'sunspot_rails'
3
3
  module ErpSearch
4
4
  class Engine < Rails::Engine
5
5
  isolate_namespace ErpSearch
6
-
6
+
7
+ ActiveSupport.on_load(:active_record) do
8
+ include ErpSearch::Extensions::ActiveRecord::HasDynamicSolrSearch
9
+ end
10
+
7
11
  #add observers
8
12
  #this is ugly need a better way
9
13
  observers = [:party_observer, :contact_observer]
10
14
  (config.active_record.observers.nil?) ? config.active_record.observers = observers : config.active_record.observers += observers
11
15
 
12
16
  ErpBaseErpSvcs.register_as_compass_ae_engine(config, self)
13
-
14
17
  end
15
18
  end
@@ -0,0 +1,2 @@
1
+ #active_record extensions
2
+ require 'erp_search/extensions/active_record/has_dynamic_solr_search'
@@ -0,0 +1,116 @@
1
+ # require 'sunspot'
2
+ # Sunspot::Setup.class_eval do
3
+ # def self.clear_setup_for_class(klass)
4
+ # Rails.logger.info "clear_setup_for_class"
5
+ # Sunspot.searchable.delete!(klass)
6
+ # Rails.logger.info "searchable #{Sunspot.searchable.inspect}"
7
+ # #Rails.logger.info "field_factories #{field_factories.inspect}"
8
+ # Rails.logger.info "setups[klass.name.to_sym] #{setups.keys}"
9
+ # setups.delete_if{|key, value| key == klass.name.to_sym }
10
+ # #setups[klass.name.to_sym] = new(clazz)
11
+ # Rails.logger.info "setups[klass.name.to_sym] #{setups.keys}"
12
+ # end
13
+ # end
14
+
15
+ # Sunspot::ClassSet.class_eval do
16
+ # def delete!(klass)
17
+ # @name_to_klass.delete_if{|key, value| key == klass.name.to_sym }
18
+ # end
19
+ # end
20
+
21
+ module ErpSearch
22
+ module Extensions
23
+ module ActiveRecord
24
+ module HasDynamicSolrSearch
25
+ def self.included(base)
26
+ base.extend(ClassMethods)
27
+ end
28
+
29
+ module ClassMethods
30
+ def is_searchable?
31
+ respond_to?(:solr_search)
32
+ end
33
+
34
+ def has_dynamic_solr_search
35
+ include HasDynamicSolrSearch::InstanceMethods
36
+
37
+ extend Sunspot::Rails::Searchable::ClassMethods
38
+ include Sunspot::Rails::Searchable::InstanceMethods
39
+
40
+ class_attribute :sunspot_options
41
+
42
+ before_save :mark_for_auto_indexing_or_removal
43
+ after_save :perform_index_tasks
44
+
45
+ after_destroy do |searchable|
46
+ searchable.remove_from_index
47
+ end
48
+
49
+ # init search setup
50
+ self.sunspot_setup
51
+ end
52
+
53
+ def sunspot_setup(options={})
54
+ klass = DynamicFormModel.get_constant(self.name)
55
+ #Sunspot::Setup.clear_setup_for_class(klass)
56
+ definition = DynamicForm.get_form(self.name).definition_object rescue nil
57
+
58
+ unless definition.nil?
59
+ #Rails.logger.info "calling sunspot setup"
60
+ Sunspot.setup(klass) do
61
+ integer :id
62
+ date :created_at do data.created_at end
63
+ date :updated_at do data.updated_at end
64
+ string :created_by do data.created_by.username rescue nil end
65
+ string :updated_by do data.updated_by.username rescue nil end
66
+ definition.each do |f|
67
+ next unless f[:searchable]
68
+ atype = convert_xtype_to_attribute_type(f[:xtype])
69
+ # respond_to allows us to support both static and dynamic attributes on model
70
+ if self.respond_to?(f[:name].to_sym)
71
+ send('text', f[:name].to_sym) if atype == 'string' # enable full text search for strings
72
+ send(atype, f[:name].to_sym) # configure attribute fields for scoping, faceting, ordering, etc
73
+ else
74
+ dyn_attr_key = DynamicDatum::DYNAMIC_ATTRIBUTE_PREFIX + f[:name]
75
+ if f[:xtype] == 'related_combobox'
76
+ extraction_block = proc { DynamicDatum.related_data_value(f[:extraParams]['model'], data.send(dyn_attr_key), f[:displayField]) }
77
+ else
78
+ extraction_block = proc { data.send(dyn_attr_key) }
79
+ end
80
+ send('text', f[:name].to_sym, &extraction_block) if atype == 'string' # enable full text search for strings
81
+ send(atype, f[:name].to_sym, &extraction_block) # configure attribute fields for scoping, faceting, ordering, etc
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ self.sunspot_options = options
88
+ end
89
+
90
+ def convert_xtype_to_attribute_type(xtype)
91
+ case xtype
92
+ when 'numberfield'
93
+ return 'integer'
94
+ when 'checkbox'
95
+ return 'boolean'
96
+ when 'datefield'
97
+ return 'date'
98
+ when 'timefield'
99
+ return 'time'
100
+ else
101
+ return 'string'
102
+ end
103
+ end
104
+ end
105
+
106
+ module InstanceMethods
107
+
108
+ def sunspot_setup(options={})
109
+ self.class.sunspot_setup(options)
110
+ end
111
+
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -1,8 +1,8 @@
1
1
  module ErpSearch
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
- MINOR = 0
5
- TINY = 4
4
+ MINOR = 1
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].compact.join('.')
8
8
  end
@@ -0,0 +1,42 @@
1
+ require 'action_controller'
2
+ require 'sunspot/rails/tasks'
3
+
4
+ namespace :sunspot do
5
+ task :reindex_dynamic_form_models => :environment do
6
+ if use_solr?
7
+ DynamicFormModel.order('id asc').all.each do |m|
8
+ next if m.model_name == 'DynamicFormDocument'
9
+ if m.get_constant.is_searchable?
10
+ m.get_constant.sunspot_setup
11
+ puts "Indexing #{m.model_name} ..."
12
+ m.get_constant.solr_reindex
13
+ puts "Done."
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ task :delete_dynamic_form_models => :environment do
20
+ if use_solr?
21
+ DynamicFormModel.all.each do |m|
22
+ next if m.model_name == 'DynamicFormDocument'
23
+ if m.get_constant.is_searchable?
24
+ m.get_constant.sunspot_setup
25
+ puts "Removing Indexes for #{m.model_name} ..."
26
+ m.get_constant.solr_remove_all_from_index!
27
+ puts "Done."
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+
34
+ def use_solr?
35
+ if $USE_SOLR_FOR_DYNAMIC_FORM_MODELS
36
+ return true
37
+ else
38
+ puts "USE_SOLR_FOR_DYNAMIC_FORM_MODELS is off. You likely need to install erp_search."
39
+ return false
40
+ end
41
+ end
42
+ end
@@ -41,6 +41,12 @@ module Dummy
41
41
 
42
42
  # Enable the asset pipeline
43
43
  config.assets.enabled = true
44
+
45
+ # Enforce whitelist mode for mass assignment.
46
+ # This will create an empty whitelist of attributes available for mass-assignment for all models
47
+ # in your app. As such, your models will need to explicitly whitelist or blacklist accessible
48
+ # parameters by using an attr_accessible or attr_protected declaration.
49
+ config.active_record.whitelist_attributes = true
44
50
  end
45
51
  end
46
52
 
@@ -1,6 +1,9 @@
1
1
  Dummy::Application.configure do
2
2
  # Settings specified here will take precedence over those in config/application.rb
3
3
 
4
+ # Raise exception on mass assignment protection for Active Record models
5
+ config.active_record.mass_assignment_sanitizer = :strict
6
+
4
7
  # In the development environment your application's code is reloaded on
5
8
  # every request. This slows down response time but is perfect for development
6
9
  # since you don't have to restart the web server when you make code changes.
@@ -0,0 +1,36 @@
1
+ #Defaults to 8981 in test, 8982 in development and 8983 in production.
2
+
3
+ development:
4
+ solr:
5
+ hostname: 127.0.0.1
6
+ port: 8982
7
+ path: /solr
8
+ log_level: INFO
9
+
10
+ production:
11
+ solr:
12
+ hostname: 127.0.0.1
13
+ port: 8983
14
+ path: /solr
15
+ log_level: WARNING
16
+
17
+ spec:
18
+ solr:
19
+ hostname: 127.0.0.1
20
+ port: 8981
21
+ path: /solr
22
+ log_level: WARNING
23
+
24
+ test:
25
+ solr:
26
+ hostname: 127.0.0.1
27
+ port: 8981
28
+ path: /solr
29
+ log_level: WARNING
30
+
31
+ adam:
32
+ solr:
33
+ port: 8982
34
+ hostname: 127.0.0.1
35
+ path: /solr
36
+ log_level: INFO
@@ -0,0 +1,15 @@
1
+ # This migration comes from erp_tech_svcs (originally 20110109173616)
2
+ class CreateCapabilityScopeTypes
3
+
4
+ def self.up
5
+ CapabilityType.create(:internal_identifier => 'download', :description => 'Download') if CapabilityType.where("internal_identifier = 'download'").first.nil?
6
+
7
+ ScopeType.create(:description => 'Instance', :internal_identifier => 'instance') if ScopeType.where("internal_identifier = 'instance'").first.nil?
8
+ ScopeType.create(:description => 'Class', :internal_identifier => 'class') if ScopeType.where("internal_identifier = 'class'").first.nil?
9
+ ScopeType.create(:description => 'Query', :internal_identifier => 'query') if ScopeType.where("internal_identifier = 'query'").first.nil?
10
+ end
11
+
12
+ def self.down
13
+ end
14
+
15
+ end
@@ -0,0 +1,22 @@
1
+ # This migration comes from knitkit (originally 20110509223702)
2
+ class AddPublisherRole
3
+
4
+ def self.up
5
+ SecurityRole.create(:internal_identifier => 'publisher', :description => 'Publisher')
6
+ SecurityRole.create(:internal_identifier => 'content_author', :description => 'Content Author')
7
+ SecurityRole.create(:internal_identifier => 'layout_author', :description => 'Layout Author')
8
+ SecurityRole.create(:internal_identifier => 'editor', :description => 'Editor')
9
+ SecurityRole.create(:internal_identifier => 'designer', :description => 'Designer')
10
+ SecurityRole.create(:internal_identifier => 'website_author', :description => 'Website Author')
11
+ end
12
+
13
+ def self.down
14
+ SecurityRole.iid('publisher').destroy
15
+ SecurityRole.iid('content_author').destroy
16
+ SecurityRole.iid('layout_author').destroy
17
+ SecurityRole.iid('editor').destroy
18
+ SecurityRole.iid('designer').destroy
19
+ SecurityRole.iid('website_author').destroy
20
+ end
21
+
22
+ end
@@ -0,0 +1,12 @@
1
+ # This migration comes from erp_base_erp_svcs (originally 20110525001935)
2
+ class AddUsdCurrency
3
+
4
+ def self.up
5
+ Currency.create(:name => 'US Dollar', :internal_identifier => 'USD', :major_unit_symbol => "$")
6
+ end
7
+
8
+ def self.down
9
+ Currency.usd.destroy
10
+ end
11
+
12
+ end
@@ -0,0 +1,33 @@
1
+ # This migration comes from erp_forms (originally 20110608185830)
2
+ class CreateDefaultDynamicModelsAndForms
3
+
4
+ def self.up
5
+ #insert data here
6
+ DynamicFormModel.create(:model_name => 'DynamicFormDocument')
7
+
8
+ fields = []
9
+
10
+ fields << DynamicFormField.textfield({:fieldLabel => 'First Name', :name => 'first_name', :width => 250, :allowBlank => false })
11
+ fields << DynamicFormField.textfield({:fieldLabel => 'Last Name', :name => 'last_name', :width => 250, :allowBlank => false })
12
+ fields << DynamicFormField.email({:fieldLabel => 'Email', :name => 'email', :width => 250, :allowBlank => false })
13
+ fields << DynamicFormField.textarea({:fieldLabel => 'Message', :name => 'message', :width => 400, :height => 200, :allowBlank => false })
14
+
15
+ d = DynamicForm.new
16
+ d.description = 'Contact Form'
17
+ d.definition = fields.to_json
18
+ d.model_name = 'WebsiteInquiry'
19
+ d.internal_identifier = 'contact_us'
20
+ d.default = true
21
+ d.dynamic_form_model = DynamicFormModel.create(:model_name => 'WebsiteInquiry')
22
+ d.comment = "This is the default form used by Knitkit's Contact Us Widget for Website Inquiries. NOTE: The Contact Us Widget uses Knitkit's website configuration options for email behavior & not the Dynamic Forms Widget Action setting."
23
+ d.msg_target = 'qtip'
24
+ d.save
25
+ end
26
+
27
+ def self.down
28
+ #remove data here
29
+ DynamicFormModel.delete_all
30
+ DynamicForm.delete_all
31
+ end
32
+
33
+ end
@@ -0,0 +1,19 @@
1
+ # This migration comes from erp_base_erp_svcs (originally 20110609150135)
2
+ require 'yaml'
3
+
4
+ class AddIsoCodes
5
+
6
+ def self.up
7
+ #find the erp_base_erp_svcs engine
8
+ engine_path = Rails::Application::Railties.engines.find{|item| item.engine_name == 'erp_base_erp_svcs'}.config.root.to_s
9
+
10
+ GeoCountry.load_from_file(File.join(engine_path,'db/data_sets/geo_countries.yml'))
11
+ GeoZone.load_from_file(File.join(engine_path,'db/data_sets/geo_zones.yml'))
12
+ end
13
+
14
+ def self.down
15
+ GeoCountry.delete_all
16
+ GeoZone.delete_all
17
+ end
18
+
19
+ end
@@ -0,0 +1,252 @@
1
+ # This migration comes from erp_app (originally 20110728201729)
2
+ class ErpAppSetup
3
+
4
+ def self.up
5
+ if(ContactPurpose.find_by_internal_identifier('default').nil?)
6
+
7
+ #######################################
8
+ #contact purposes
9
+ #######################################
10
+ [
11
+ {:description => 'Default', :internal_identifier => 'default'},
12
+ {:description => 'Home', :internal_identifier => 'home'},
13
+ {:description => 'Work', :internal_identifier => 'work'},
14
+ {:description => 'Billing', :internal_identifier => 'billing'},
15
+ {:description => 'Temporary', :internal_identifier => 'temporary'},
16
+ {:description => 'Tax Reporting', :internal_identifier => 'tax_reporting'},
17
+ {:description => 'Recruiting', :internal_identifier => 'recruiting'},
18
+ {:description => 'Employment Offer', :internal_identifier => 'employment_offer'},
19
+ {:description => 'Business', :internal_identifier => 'business'},
20
+ {:description => 'Personal', :internal_identifier => 'personal'},
21
+ {:description => 'Fax', :internal_identifier => 'fax'},
22
+ {:description => 'Mobile', :internal_identifier => 'mobile'},
23
+ {:description => 'Emergency', :internal_identifier => 'emergency'},
24
+ {:description => 'Shipping', :internal_identifier => 'shipping'},
25
+ {:description => 'Other', :internal_identifier => 'other'},
26
+ ].each do |item|
27
+ contact_purpose = ContactPurpose.find_by_internal_identifier(item[:internal_identifier])
28
+ ContactPurpose.create(:description => item[:description], :internal_identifier => item[:internal_identifier]) if contact_purpose.nil?
29
+ end
30
+
31
+ #######################################
32
+ #roles
33
+ #######################################
34
+ SecurityRole.create(:description => 'Admin', :internal_identifier => 'admin')
35
+ SecurityRole.create(:description => 'Employee', :internal_identifier => 'employee')
36
+
37
+ #######################################
38
+ #desktop setup
39
+ #######################################
40
+ #create preference types
41
+ desktop_backgroud_pt = PreferenceType.create(:description => 'Desktop Background', :internal_identifier => 'desktop_background')
42
+ extjs_theme_pt = PreferenceType.create(:description => 'Theme', :internal_identifier => 'extjs_theme')
43
+ desktop_shortcut_pt = PreferenceType.create(:description => 'Desktop Shortcut', :internal_identifier => 'desktop_shortcut')
44
+ auto_load_app_pt = PreferenceType.create(:description => 'Autoload Application', :internal_identifier => 'autoload_application')
45
+
46
+ #create preference options
47
+ #yes no options
48
+ yes_po = PreferenceOption.create(:description => 'Yes', :internal_identifier => 'yes', :value => 'yes')
49
+ no_po = PreferenceOption.create(:description => 'No', :internal_identifier => 'no', :value => 'no')
50
+
51
+ #desktop background options
52
+ truenorth_background_po = PreferenceOption.create(:description => 'TrueNorth Logo', :internal_identifier => 'truenorth_logo_background', :value => 'truenorth.png')
53
+ blue_background_po = PreferenceOption.create(:description => 'Blue', :internal_identifier => 'blue_desktop_background', :value => 'blue.gif')
54
+ gradient_background_po = PreferenceOption.create(:description => 'Grey Gradient', :internal_identifier => 'grey_gradient_desktop_background', :value => 'gradient.png')
55
+ purple_background_po = PreferenceOption.create(:description => 'Purple', :internal_identifier => 'purple_desktop_background', :value => 'purple.jpg')
56
+ planet_background_po = PreferenceOption.create(:description => 'Planet', :internal_identifier => 'planet_desktop_background', :value => 'planet.jpg')
57
+ portablemind_background_po = PreferenceOption.create(:description => 'Portablemind', :internal_identifier => 'portablemind_desktop_background', :value => 'portablemind.png')
58
+
59
+ #desktop theme options
60
+ access_extjs_theme_po = PreferenceOption.create(:description => 'Access', :internal_identifier => 'access_extjs_theme', :value => 'ext-all-access.css')
61
+ gray_extjs_theme_po = PreferenceOption.create(:description => 'Gray', :internal_identifier => 'gray_extjs_theme', :value => 'ext-all-gray.css')
62
+ blue_extjs_theme_po = PreferenceOption.create(:description => 'Blue', :internal_identifier => 'blue_extjs_theme', :value => 'ext-all.css')
63
+
64
+ #associate options
65
+ desktop_shortcut_pt.preference_options << yes_po
66
+ desktop_shortcut_pt.preference_options << no_po
67
+ desktop_shortcut_pt.default_preference_option = no_po
68
+ desktop_shortcut_pt.save
69
+
70
+ auto_load_app_pt.preference_options << yes_po
71
+ auto_load_app_pt.preference_options << no_po
72
+ auto_load_app_pt.default_preference_option = no_po
73
+ auto_load_app_pt.save
74
+
75
+ desktop_backgroud_pt.preference_options << blue_background_po
76
+ desktop_backgroud_pt.preference_options << truenorth_background_po
77
+ desktop_backgroud_pt.preference_options << gradient_background_po
78
+ desktop_backgroud_pt.preference_options << purple_background_po
79
+ desktop_backgroud_pt.preference_options << planet_background_po
80
+ desktop_backgroud_pt.preference_options << portablemind_background_po
81
+ desktop_backgroud_pt.default_preference_option = truenorth_background_po
82
+ desktop_backgroud_pt.save
83
+
84
+ extjs_theme_pt.preference_options << access_extjs_theme_po
85
+ extjs_theme_pt.preference_options << gray_extjs_theme_po
86
+ extjs_theme_pt.preference_options << blue_extjs_theme_po
87
+ extjs_theme_pt.default_preference_option = blue_extjs_theme_po
88
+ extjs_theme_pt.save
89
+
90
+ #######################################
91
+ #notes widget
92
+ #######################################
93
+ NoteType.create(:description => 'Basic Note', :internal_identifier => 'basic_note')
94
+
95
+ notes_grid = ::Widget.create(
96
+ :description => 'Notes',
97
+ :icon => 'icon-documents',
98
+ :xtype => 'shared_notesgrid',
99
+ :internal_identifier => 'shared_notes_grid'
100
+ )
101
+ notes_grid.save
102
+
103
+ #######################################
104
+ #user management app
105
+ #######################################
106
+ app_mgr = ::Widget.create(
107
+ :description => 'Application Management',
108
+ :icon => 'icon-user',
109
+ :xtype => 'controlpanel_userapplicationmgtpanel',
110
+ :internal_identifier => 'application_management'
111
+ )
112
+ app_mgr.save
113
+
114
+ role_mgr = ::Widget.create(
115
+ :description => 'Role Management',
116
+ :icon => 'icon-user',
117
+ :xtype => 'usermanagement_rolemanagementpanel',
118
+ :internal_identifier => 'role_management'
119
+ )
120
+ role_mgr.save
121
+
122
+ personal_info = ::Widget.create(
123
+ :description => 'User Personal Info',
124
+ :icon => 'icon-user',
125
+ :xtype => 'usermanagement_personalinfopanel',
126
+ :internal_identifier => 'user_personal_info'
127
+ )
128
+ personal_info.save
129
+
130
+ #create application and assign widgets
131
+ user_mgr_app = DesktopApplication.create(
132
+ :description => 'User Management',
133
+ :icon => 'icon-user',
134
+ :javascript_class_name => 'Compass.ErpApp.Desktop.Applications.UserManagement',
135
+ :internal_identifier => 'user_management',
136
+ :shortcut_id => 'user-management-win'
137
+ )
138
+
139
+ user_mgr_app.preference_types << desktop_shortcut_pt
140
+ user_mgr_app.preference_types << auto_load_app_pt
141
+
142
+ user_mgr_app.widgets << role_mgr
143
+ user_mgr_app.widgets << personal_info
144
+ user_mgr_app.widgets << app_mgr
145
+ user_mgr_app.widgets << notes_grid
146
+ user_mgr_app.save
147
+
148
+ #######################################
149
+ #scaffold app
150
+ #######################################
151
+ scaffold_app = DesktopApplication.create(
152
+ :description => 'Scaffold',
153
+ :icon => 'icon-data',
154
+ :javascript_class_name => 'Compass.ErpApp.Desktop.Applications.Scaffold',
155
+ :internal_identifier => 'scaffold',
156
+ :shortcut_id => 'scaffold-win'
157
+ )
158
+
159
+ scaffold_app.preference_types << PreferenceType.iid('desktop_shortcut')
160
+ scaffold_app.preference_types << PreferenceType.iid('autoload_application')
161
+ scaffold_app.save
162
+
163
+ #######################################
164
+ #organizer setup
165
+ #######################################
166
+
167
+ party_contact_mgm_widget = ::Widget.create(
168
+ :description => 'Party Contact Management',
169
+ :icon => 'icon-grid',
170
+ :xtype => 'contactmechanismgrid',
171
+ :internal_identifier => 'party_contact_management'
172
+ )
173
+ party_contact_mgm_widget.save
174
+
175
+ party_mgm_widget = ::Widget.create(
176
+ :description => 'Party Management',
177
+ :icon => 'icon-grid',
178
+ :xtype => 'partygrid',
179
+ :internal_identifier => 'party_management_widget'
180
+ )
181
+ party_mgm_widget.save
182
+
183
+ #create application
184
+ crm_app = OrganizerApplication.create(
185
+ :description => 'CRM',
186
+ :icon => 'icon-user',
187
+ :internal_identifier => 'crm'
188
+ )
189
+
190
+ crm_app.widgets << party_contact_mgm_widget
191
+ crm_app.widgets << party_mgm_widget
192
+ crm_app.widgets << notes_grid
193
+ crm_app.save
194
+
195
+ #######################################
196
+ #parties
197
+ #######################################
198
+
199
+ #Admins
200
+ Individual.create(:current_first_name => 'Admin',:current_last_name => 'Istrator',:gender => 'm')
201
+
202
+ #Organization
203
+ Organization.create(:description => 'TrueNorth')
204
+
205
+ #######################################
206
+ #users
207
+ #######################################
208
+ admin_indvidual = Individual.where('current_first_name = ?',"Admin").first
209
+ admin_user = User.create(
210
+ :username => "admin",
211
+ :email => "admin@portablemind.com"
212
+ )
213
+ admin_user.password = 'password'
214
+ admin_user.password_confirmation = 'password'
215
+ admin_user.party = admin_indvidual.party
216
+ admin_user.activate!
217
+ admin_user.save
218
+ admin_user.add_role('admin')
219
+ admin_user.save
220
+
221
+ truenorth = Organization.where('description = ?', 'TrueNorth').first
222
+ truenorth_user = User.create(
223
+ :username => truenorth.description.downcase,
224
+ :email => "#{truenorth.description.downcase}@gmail.com"
225
+ )
226
+ truenorth_user.password = 'password'
227
+ truenorth_user.password_confirmation = 'password'
228
+ truenorth_user.party = truenorth.party
229
+ truenorth_user.save
230
+ truenorth_user.activate!
231
+ truenorth_user.add_role('admin')
232
+ truenorth_user.save
233
+
234
+ admin_user.desktop.applications << user_mgr_app
235
+ admin_user.desktop.applications << scaffold_app
236
+ admin_user.desktop.save
237
+ admin_user.organizer.applications << crm_app
238
+ admin_user.organizer.save
239
+
240
+ truenorth_user.desktop.applications << user_mgr_app
241
+ truenorth_user.desktop.applications << scaffold_app
242
+ truenorth_user.desktop.save
243
+ truenorth_user.organizer.applications << crm_app
244
+ truenorth_user.organizer.save
245
+ end
246
+ end
247
+
248
+ def self.down
249
+ #remove data here
250
+ end
251
+
252
+ end